make-4.3/0000755000175000017500000000000013611151240007270 500000000000000make-4.3/README0000444000175000017500000001612313611136527010104 00000000000000This directory contains the 4.3 release of GNU Make. See the file NEWS for the user-visible changes from previous releases. In addition, there have been bugs fixed. Please check the system-specific notes below for any caveats related to your operating system. If you are trying to build GNU make from a Git clone rather than a downloaded source distribution, see the README.git file for instructions. For source distribution building and installation instructions, see the file INSTALL. If you need to build GNU Make and have no other 'make' program to use, you can use the shell script 'build.sh' instead. To do this, first run 'configure' as described in INSTALL. Then, instead of typing 'make' to build the program, type 'sh build.sh'. This should compile the program in the current directory. Then you will have a Make program that you can use for './make install', or whatever else. Some systems' Make programs cannot process the Makefile for GNU Make. If you get errors from your system's Make when building GNU Make, try using 'build.sh' instead. GNU Make is free software. See the file COPYING for copying conditions. GNU Make is copyright by the Free Software Foundation. Copyright notices condense sequential years into a range; e.g. "1987-1994" means all years from 1987 to 1994 inclusive. Downloading ----------- GNU Make can be obtained in many different ways. See a description here: http://www.gnu.org/software/software.html Documentation ------------- GNU make is fully documented in the GNU Make manual, which is contained in this distribution as the file make.texinfo. You can also find on-line and preformatted (PostScript and DVI) versions at the FSF's web site. There is information there about ordering hardcopy documentation. http://www.gnu.org/ http://www.gnu.org/doc/doc.html http://www.gnu.org/manual/manual.html Development ----------- GNU Make development is hosted by Savannah, the FSF's online development management tool. Savannah is here: http://savannah.gnu.org And the GNU Make development page is here: http://savannah.gnu.org/projects/make/ You can find most information concerning the development of GNU Make at this site. Bug Reporting ------------- You can send GNU make bug reports to . Please see the section of the GNU make manual entitled 'Problems and Bugs' for information on submitting useful and complete bug reports. You can also use the online bug tracking system in the Savannah GNU Make project to submit new problem reports or search for existing ones: http://savannah.gnu.org/bugs/?group=make If you need help using GNU make, try these forums: help-make@gnu.org help-utils@gnu.org news:gnu.utils.help news:gnu.utils.bug Git Access ---------- The GNU make source repository is available via Git from the GNU Savannah Git server; look here for details: http://savannah.gnu.org/git/?group=make Please note: you won't be able to build GNU make from Git without installing appropriate maintainer's tools, such as GNU m4, automake, autoconf, Perl, GNU make, and GCC. See the README.git file for instructions on how to build GNU make once these tools are available. We make no guarantees about the contents or quality of the latest code in the Git repository: it is not unheard of for code that is known to be broken to be checked in. Use at your own risk. System-specific Notes --------------------- It has been reported that the XLC 1.2 compiler on AIX 3.2 is buggy such that if you compile make with 'cc -O' on AIX 3.2, it will not work correctly. It is said that using 'cc' without '-O' does work. The standard /bin/sh on SunOS 4.1.3_U1 and 4.1.4 is broken and cannot be used to configure GNU make. Please install a different shell such as bash or pdksh in order to run "configure". See this message for more information: http://mail.gnu.org/archive/html/bug-autoconf/2003-10/msg00190.html One area that is often a problem in configuration and porting is the code to check the system's current load average. To make it easier to test and debug this code, you can do 'make check-loadavg' to see if it works properly on your system. (You must run 'configure' beforehand, but you need not build Make itself to run this test.) Another potential source of porting problems is the support for large files (LFS) in configure for those operating systems that provide it. Please report any bugs that you find in this area. If you run into difficulties, then as a workaround you should be able to disable LFS by adding the '--disable-largefile' option to the 'configure' script. On systems that support micro- and nano-second timestamp values and where stat(2) provides this information, GNU make will use it when comparing timestamps to get the most accurate possible result. However, note that many current implementations of tools that *set* timestamps do not preserve micro- or nano-second granularity. This means that "cp -p" and other similar tools (tar, etc.) may not exactly duplicate timestamps with micro- and nano-second granularity on some systems. If your build system contains rules that depend on proper behavior of tools like "cp -p", you should consider using the .LOW_RESOLUTION_TIME pseudo-target to force make to treat them properly. See the manual for details. Ports ----- - See README.customs for details on integrating GNU make with the Customs distributed build environment from the Pmake distribution. - See README.VMS for details about GNU Make on OpenVMS. - See README.Amiga for details about GNU Make on AmigaDOS. - See README.W32 for details about GNU Make on Windows NT, 95, or 98. - See README.DOS for compilation instructions on MS-DOS and MS-Windows using DJGPP tools. A precompiled binary of the MSDOS port of GNU Make is available as part of DJGPP; see the WWW page http://www.delorie.com/djgpp/ for more information. The Cygwin project maintains its own port of GNU make. That port may have patches which are not present in this version. If you are using Cygwin you should use their version of GNU make, and if you have questions about it you should start by asking on those mailing lists and forums. Please note there are two _separate_ ports of GNU make for Microsoft systems: a native Windows tool built with (for example) MSVC or Cygwin, and a DOS-based tool built with DJGPP. Please be sure you are looking at the right README! ------------------------------------------------------------------------------- Copyright (C) 1988-2020 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 . make-4.3/configure.ac0000644000175000017500000004420613611136373011516 00000000000000# Process this file with autoconf to produce a configure script. # # Copyright (C) 1993-2020 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 . AC_INIT([GNU make],[4.3],[bug-make@gnu.org]) AC_PREREQ([2.69]) # Autoconf setup AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_SRCDIR([src/vpath.c]) AC_CONFIG_HEADERS([src/config.h]) AC_CONFIG_LIBOBJ_DIR([lib]) # Automake setup # We have to enable "foreign" because ChangeLog is auto-generated # Automake 1.15 and gnulib don't get along: gnulib has some strange error # in the way it handles getloadavg.c which causes make distcheck to fail. # http://lists.gnu.org/archive/html/bug-gnulib/2018-06/msg00024.html AM_INIT_AUTOMAKE([1.16.1 foreign -Werror -Wall]) # Checks for programs. AC_USE_SYSTEM_EXTENSIONS AC_PROG_CC # Configure gnulib gl_EARLY gl_INIT AC_PROG_INSTALL AC_PROG_RANLIB AC_PROG_CPP AC_CHECK_PROG([AR], [ar], [ar], [ar]) # Perl is needed for the test suite (only) AC_CHECK_PROG([PERL], [perl], [perl], [perl]) # Specialized system macros AC_CANONICAL_HOST AC_AIX AC_ISC_POSIX AC_MINIX AC_C_BIGENDIAN # Enable gettext, in "external" mode. AM_GNU_GETTEXT_VERSION([0.19.4]) AM_GNU_GETTEXT([external]) # This test must come as early as possible after the compiler configuration # tests, because the choice of the file model can (in principle) affect # whether functions and headers are available, whether they work, etc. AC_SYS_LARGEFILE # Checks for libraries. AC_SEARCH_LIBS([getpwnam], [sun]) # Checks for header files. AC_HEADER_STDC 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 \ sys/select.h sys/file.h spawn.h]) AM_PROG_CC_C_O AC_C_CONST AC_TYPE_SIGNAL AC_TYPE_UID_T AC_TYPE_PID_T 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. AC_STRUCT_ST_MTIM_NSEC AC_CACHE_CHECK([whether to use high resolution file timestamps], [make_cv_file_timestamp_hi_res], [ make_cv_file_timestamp_hi_res=no AS_IF([test "$ac_cv_struct_st_mtim_nsec" != no], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #if HAVE_INTTYPES_H # include #endif]], [[char a[0x7fffffff < (uintmax_t)-1 >> 30 ? 1 : -1];]])], [make_cv_file_timestamp_hi_res=yes]) ])]) AS_IF([test "$make_cv_file_timestamp_hi_res" = yes], [val=1], [val=0]) AC_DEFINE_UNQUOTED([FILE_TIMESTAMP_HI_RES], [$val], [Use high resolution file timestamps if nonzero.]) AS_IF([test "$make_cv_file_timestamp_hi_res" = yes], [ # Solaris 2.5.1 needs -lposix4 to get the clock_gettime function. # Solaris 7 prefers the library name -lrt to the obsolescent name -lposix4. AC_SEARCH_LIBS([clock_gettime], [rt posix4]) AS_IF([test "$ac_cv_search_clock_gettime" != no], [ AC_DEFINE([HAVE_CLOCK_GETTIME], [1], [Define to 1 if you have the clock_gettime function.]) ]) ]) # Check for DOS-style pathnames. pds_AC_DOS_PATHS # See if we have a standard version of gettimeofday(). Since actual # implementations can differ, just make sure we have the most common # one. AC_CACHE_CHECK([for standard gettimeofday], [ac_cv_func_gettimeofday], [ac_cv_func_gettimeofday=no AC_RUN_IFELSE([AC_LANG_SOURCE([[#include int main () { struct timeval t; t.tv_sec = -1; t.tv_usec = -1; return gettimeofday (&t, 0) != 0 || t.tv_sec < 0 || t.tv_usec < 0; }]])], [ac_cv_func_gettimeofday=yes], [ac_cv_func_gettimeofday=no], [ac_cv_func_gettimeofday="no (cross-compiling)"])]) AS_IF([test "$ac_cv_func_gettimeofday" = yes], [ AC_DEFINE([HAVE_GETTIMEOFDAY], [1], [Define to 1 if you have a standard gettimeofday function]) ]) AC_CHECK_FUNCS([strdup strndup memrchr umask mkstemp mktemp fdopen \ dup dup2 getcwd realpath sigsetmask sigaction \ getgroups seteuid setegid setlinebuf setreuid setregid \ getrlimit setrlimit setvbuf pipe strsignal \ lstat readlink atexit isatty ttyname pselect posix_spawn \ posix_spawnattr_setsigmask]) # We need to check declarations, not just existence, because on Tru64 this # function is not declared without special flags, which themselves cause # other problems. We'll just use our own. AC_CHECK_DECLS([bsd_signal], [], [], [[#define _GNU_SOURCE 1 #include ]]) AC_FUNC_FORK AC_FUNC_SETVBUF_REVERSED # Rumor has it that strcasecmp lives in -lresolv on some odd systems. # It doesn't hurt much to use our own if we can't find it so I don't # make the effort here. AC_CHECK_FUNCS([strcasecmp strncasecmp strcmpi strncmpi stricmp strnicmp]) # strcoll() is used by the GNU glob library AC_FUNC_STRCOLL AC_FUNC_CLOSEDIR_VOID # dir.c and our glob.c use dirent.d_type if available AC_STRUCT_DIRENT_D_TYPE # See if the user wants to add (or not) GNU Guile support AC_ARG_WITH([guile], [AS_HELP_STRING([--with-guile], [Support GNU Guile for embedded scripting])]) # Annoyingly, each version of Guile comes with it's own PC file so we have to # specify them as individual packages. Ugh. PKG_PROG_PKG_CONFIG AS_IF([test "x$with_guile" != xno], [ guile_versions="3.0 2.2 2.0 1.8" guile_version=no have_guile=no AC_MSG_CHECKING([for GNU Guile]) for v in $guile_versions; do PKG_CHECK_EXISTS([guile-$v], [guile_version=$v; have_guile=yes; break], []) done AC_MSG_RESULT([$guile_version]) AS_IF([test "$have_guile" = yes], [ PKG_CHECK_MODULES(GUILE, [guile-$guile_version]) # Unfortunately Guile requires a C99 compiler but GNU make doesn't, so # verify we can actually compile the header. keep_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $pkg_cv_GUILE_CFLAGS" AC_CHECK_HEADER([libguile.h], [AC_DEFINE([HAVE_GUILE], [1], [Embed GNU Guile support])], [have_guile=no], [/* Avoid configuration error warnings. */]) CPPFLAGS="$keep_CPPFLAGS" ]) ]) AM_CONDITIONAL([HAVE_GUILE], [test "$have_guile" = "yes"]) AC_CHECK_DECLS([sys_siglist, _sys_siglist, __sys_siglist], , , [AC_INCLUDES_DEFAULT #include /* NetBSD declares sys_siglist in unistd.h. */ #if HAVE_UNISTD_H # include #endif ]) # Check out the wait reality. AC_CHECK_HEADERS([sys/wait.h],[],[],[[#include ]]) AC_CHECK_FUNCS([waitpid wait3]) AC_CACHE_CHECK([for union wait], [make_cv_union_wait], [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include #include ]], [[union wait status; int pid; pid = wait (&status); #ifdef WEXITSTATUS /* Some POSIXoid systems have both the new-style macros and the old union wait type, and they do not work together. If union wait conflicts with WEXITSTATUS et al, we don't want to use it at all. */ if (WEXITSTATUS (status) != 0) pid = -1; #ifdef WTERMSIG /* If we have WEXITSTATUS and WTERMSIG, just use them on ints. */ -- blow chunks here -- #endif #endif #ifdef HAVE_WAITPID /* Make sure union wait works with waitpid. */ pid = waitpid (-1, &status, 0); #endif ]])], [make_cv_union_wait=yes], [make_cv_union_wait=no]) ]) AS_IF([test "$make_cv_union_wait" = yes], [ AC_DEFINE([HAVE_UNION_WAIT], [1], [Define to 1 if you have the 'union wait' type in .]) ]) # If we're building on Windows/DOS/OS/2, add some support for DOS drive specs. AS_IF([test "$PATH_SEPARATOR" = ';'], [ AC_DEFINE([HAVE_DOS_PATHS], [1], [Define to 1 if your system requires backslashes or drive specs in pathnames.]) ]) # See if the user wants to use pmake's "customs" distributed build capability AC_SUBST([REMOTE]) REMOTE=stub use_customs=false AC_ARG_WITH([customs], [AC_HELP_STRING([--with-customs=DIR], [enable remote jobs via Customs--see README.customs])], [ AS_CASE([$withval], [n|no], [:], [make_cppflags="$CPPFLAGS" AS_CASE([$withval], [y|ye|yes], [:], [CPPFLAGS="$CPPFLAGS -I$with_customs/include/customs" make_ldflags="$LDFLAGS -L$with_customs/lib"]) CF_NETLIBS AC_CHECK_HEADER([customs.h], [use_customs=true REMOTE=cstms LIBS="$LIBS -lcustoms" LDFLAGS="$make_ldflags"], [with_customs=no CPPFLAGS="$make_cppflags" make_badcust=yes]) ]) ]) # Tell automake about this, so it can include the right .c files. AM_CONDITIONAL([USE_CUSTOMS], [test "$use_customs" = true]) # See if the user asked to handle case insensitive file systems. AH_TEMPLATE([HAVE_CASE_INSENSITIVE_FS], [Use case insensitive file names]) AC_ARG_ENABLE([case-insensitive-file-system], AC_HELP_STRING([--enable-case-insensitive-file-system], [assume file systems are case insensitive]), [AS_IF([test "$enableval" = yes], [AC_DEFINE([HAVE_CASE_INSENSITIVE_FS])])]) # See if we can handle the job server feature, and if the user wants it. AC_ARG_ENABLE([job-server], AC_HELP_STRING([--disable-job-server], [disallow recursive make communication during -jN]), [make_cv_job_server="$enableval" user_job_server="$enableval"], [make_cv_job_server="yes"]) AS_IF([test "$ac_cv_func_waitpid" = no && test "$ac_cv_func_wait3" = no], [has_wait_nohang=no], [has_wait_nohang=yes]) AC_CACHE_CHECK([for SA_RESTART], [make_cv_sa_restart], [ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[return SA_RESTART;]])], [make_cv_sa_restart=yes], [make_cv_sa_restart=no])]) AS_IF([test "$make_cv_sa_restart" != no], [ AC_DEFINE([HAVE_SA_RESTART], [1], [Define to 1 if defines the SA_RESTART constant.]) ]) # Only allow jobserver on systems that support it AS_CASE([/$ac_cv_func_pipe/$ac_cv_func_sigaction/$make_cv_sa_restart/$has_wait_nohang/], [*/no/*], [make_cv_job_server=no]) # Also supported on OS2 and MinGW AS_CASE([$host_os], [os2*|mingw*], [make_cv_job_server=yes]) # If we support it and the user didn't disable it, build with jobserver AS_CASE([/$make_cv_job_server/$user_job_server/], [*/no/*], [: no jobserver], [AC_DEFINE(MAKE_JOBSERVER, 1, [Define to 1 to enable job server support in GNU make.]) ]) # If dl*() functions are supported we can enable the load operation AC_CHECK_DECLS([dlopen, dlsym, dlerror], [], [], [[#include ]]) AC_ARG_ENABLE([load], AC_HELP_STRING([--disable-load], [disable support for the 'load' operation]), [make_cv_load="$enableval" user_load="$enableval"], [make_cv_load="yes"]) AS_CASE([/$ac_cv_have_decl_dlopen/$ac_cv_have_decl_dlsym/$ac_cv_have_decl_dlerror/], [*/no/*], [make_cv_load=no]) # We might need -ldl AS_IF([test "$make_cv_load" = yes], [ AC_SEARCH_LIBS([dlopen], [dl], [], [make_cv_load=]) ]) AS_CASE([/$make_cv_load/$user_load/], [*/no/*], [make_cv_load=no], [AC_DEFINE(MAKE_LOAD, 1, [Define to 1 to enable 'load' support in GNU make.]) ]) # If we want load support, we might need to link with export-dynamic. # See if we can figure it out. Unfortunately this is very difficult. # For example passing -rdynamic to the SunPRO linker gives a warning # but succeeds and creates a shared object, not an executable! AS_IF([test "$make_cv_load" = yes], [ AC_MSG_CHECKING([If the linker accepts -Wl,--export-dynamic]) old_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -Wl,--export-dynamic" AC_LINK_IFELSE([AC_LANG_SOURCE([int main(){}])], [AC_MSG_RESULT([yes]) AC_SUBST([AM_LDFLAGS], [-Wl,--export-dynamic])], [AC_MSG_RESULT([no]) AC_MSG_CHECKING([If the linker accepts -rdynamic]) LDFLAGS="$old_LDFLAGS -rdynamic" AC_LINK_IFELSE([AC_LANG_SOURCE([int main(){}])], [AC_MSG_RESULT([yes]) AC_SUBST([AM_LDFLAGS], [-rdynamic])], [AC_MSG_RESULT([no])]) ]) LDFLAGS="$old_LDFLAGS" ]) # if we have both lstat() and readlink() then we can support symlink # timechecks. AS_IF([test "$ac_cv_func_lstat" = yes && test "$ac_cv_func_readlink" = yes], [ AC_DEFINE([MAKE_SYMLINKS], [1], [Define to 1 to enable symbolic link timestamp checking.]) ]) # Use posix_spawn if we have support and the user didn't disable it AC_ARG_ENABLE([posix-spawn], AC_HELP_STRING([--disable-posix-spawn], [disable support for posix_spawn()]), [make_cv_posix_spawn="$enableval" user_posix_spawn="$enableval"], [make_cv_posix_spawn="yes"]) AS_CASE([/$ac_cv_header_spawn/$ac_cv_func_posix_spawn/], [*/no/*], [make_cv_posix_spawn=no]) AS_IF([test "$make_cv_posix_spawn" = yes], AC_CACHE_CHECK([for posix_spawn that fails synchronously], [make_cv_synchronous_posix_spawn], [make_cv_synchronous_posix_spawn=no AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include #include extern char **environ; int main() { char* path = strdup("./non-existent"); char *argv[[2]]; argv[[0]] = path; argv[[1]] = 0; return posix_spawn(0, path, 0, 0, argv, environ); }]])], [make_cv_synchronous_posix_spawn=no], [make_cv_synchronous_posix_spawn=yes], [make_cv_synchronous_posix_spawn="no (cross-compiling)"])])) AS_CASE([/$user_posix_spawn/$make_cv_posix_spawn/$make_cv_synchronous_posix_spawn/], [*/no/*], [make_cv_posix_spawn=no], [AC_DEFINE(USE_POSIX_SPAWN, 1, [Define to 1 to use posix_spawn().]) ]) # Find the SCCS commands, so we can include them in our default rules. AC_CACHE_CHECK([for location of SCCS get command], [make_cv_path_sccs_get], [ AS_IF([test -f /usr/sccs/get], [make_cv_path_sccs_get=/usr/sccs/get], [make_cv_path_sccs_get=get]) ]) AC_DEFINE_UNQUOTED([SCCS_GET], ["$make_cv_path_sccs_get"], [Define to the name of the SCCS 'get' command.]) ac_clean_files="$ac_clean_files s.conftest conftoast" # Remove these later. AS_IF([(/usr/sccs/admin -n s.conftest || admin -n s.conftest) >/dev/null 2>&1 && test -f s.conftest], [ # We successfully created an SCCS file. AC_CACHE_CHECK([if SCCS get command understands -G], [make_cv_sys_get_minus_G], [AS_IF([$make_cv_path_sccs_get -Gconftoast s.conftest >/dev/null 2>&1 && test -f conftoast], [make_cv_sys_get_minus_G=yes], [make_cv_sys_get_minus_G=no]) ]) AS_IF([test "$make_cv_sys_get_minus_G" = yes], [AC_DEFINE([SCCS_GET_MINUS_G], [1], [Define to 1 if the SCCS 'get' command understands the '-G' option.]) ]) ]) rm -f s.conftest conftoast # Let the makefile know what our build host is AC_DEFINE_UNQUOTED([MAKE_HOST],["$host"],[Build host information.]) MAKE_HOST="$host" AC_SUBST([MAKE_HOST]) w32_target_env=no AM_CONDITIONAL([WINDOWSENV], [false]) AS_CASE([$host], [*-*-mingw32], [AM_CONDITIONAL([WINDOWSENV], [true]) w32_target_env=yes AC_DEFINE([WINDOWS32], [1], [Use platform specific coding]) AC_DEFINE([HAVE_DOS_PATHS], [1], [Use platform specific coding]) ]) AC_DEFINE_UNQUOTED([PATH_SEPARATOR_CHAR],['$PATH_SEPARATOR'], [Define to the character that separates directories in PATH.]) # Include the Maintainer's Makefile section, if it's here. MAINT_MAKEFILE=/dev/null AS_IF([test -r "$srcdir/maintMakefile"], [ MAINT_MAKEFILE="$srcdir/maintMakefile" ]) AC_SUBST_FILE([MAINT_MAKEFILE]) # Allow building with dmalloc AM_WITH_DMALLOC # Forcibly disable SET_MAKE. If it's set it breaks things like the test # scripts, etc. SET_MAKE= # Sanity check and inform the user of what we found AS_IF([test "x$make_badcust" = xyes], [ echo echo "WARNING: --with-customs specified but no customs.h could be found;" echo " disabling Customs support." echo ]) AS_CASE([$with_customs], [""|n|no|y|ye|yes], [:], [AS_IF([test -f "$with_customs/lib/libcustoms.a"], [:], [ echo echo "WARNING: '$with_customs/lib' does not appear to contain the" echo " Customs library. You must build and install Customs" echo " before compiling GNU make." echo ])]) AS_IF([test "x$has_wait_nohang" = xno], [ echo echo "WARNING: Your system has neither waitpid() nor wait3()." echo " Without one of these, signal handling is unreliable." echo " You should be aware that running GNU make with -j" echo " could result in erratic behavior." echo ]) AS_IF([test "x$make_cv_job_server" = xno && test "x$user_job_server" = xyes], [ echo echo "WARNING: Make job server requires a POSIX-ish system that" echo " supports the pipe(), sigaction(), and either" echo " waitpid() or wait3() functions. Your system doesn't" echo " appear to provide one or more of those." echo " Disabling job server support." echo ]) AS_IF([test "x$make_cv_load" = xno && test "x$user_load" = xyes], [ echo echo "WARNING: 'load' support requires a POSIX-ish system that" echo " supports the dlopen(), dlsym(), and dlerror() functions." echo " Your system doesn't appear to provide one or more of these." echo " Disabling 'load' support." echo ]) AS_IF([test "x$make_cv_posix_spawn" = xno && test "x$user_posix_spawn" = xyes], [ echo echo "WARNING: posix_spawn() is not supported on this system." echo ]) # Specify what files are to be created. AC_CONFIG_FILES([Makefile build.cfg lib/Makefile po/Makefile.in doc/Makefile \ tests/config-flags.pm]) # We don't need this: the standard automake output suffices for POSIX systems. #mk/Posix.mk # OK, do it! AC_OUTPUT dnl Local Variables: dnl comment-start: "dnl " dnl comment-end: "" dnl comment-start-skip: "\\bdnl\\b\\s *" dnl compile-command: "make configure config.h.in" dnl End: make-4.3/README.W320000444000175000017500000003616713611136527010470 00000000000000This 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, 4.8.1, and 4.9.3). It also builds with MSVC 2.x, 4.x, 5.x, 6.x, 2005, 2008, 2010, 2012, 2013, and 2015 as well as with .NET 7.x and .NET 2003. Building with Guile is supported (tested with Guile 2.0.x). To build with Guile, you will need, in addition to Guile 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 ezwinports site: 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. A precompiled 32-bit Windows build of Guile is available from the ezwinports site mentioned above. 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. 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'). (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.) Building with (MinGW-)GCC using build_w32.bat --------------------------------------------- 2. Open a W32 command prompt for your installed (MinGW-)GCC, setup a correct PATH and other environment variables for it, then execute ... .\build_w32.bat gcc This produces gnumake.exe in the GccRel directory. If you want a version of GNU make built with debugging enabled, add the --debug option. Output goes into the GccDebug directory. The batch file will probe for Guile installation, and will build gnumake.exe with Guile if it finds it. If you have Guile installed, but want to build Make without Guile support, type .\build_w32.bat --without-guile gcc Building with (MSVC++-)cl using build_w32.bat --------------------------------------------- 2. Open a command shell, then execute ... .\build_w32.bat This produces a 64bit Release build of gnumake.exe in .\WinRel, using the compiler found on the %Path%. If no compiler is found, the batch file will probe your system and choose the newest MSVC version it can find. If you want a 32bit version of GNU make, add the --x86 option. If you want a Debug build of GNU make, add the --debug option. Output will go into the .\WinDebug directory. The batch file will probe for Guile installation, and will build gnumake.exe with Guile if it finds it. If Guile is installed, but you prefer to build GNU make without Guile support, add the --without-guile option. Building with (MinGW-)GCC using GNU make ---------------------------------------- 2. If you already have a version of GNU make available you can use it to build this version. Open a W32 command prompt for your installed (MinGW-)GCC, setup a correct PATH and other environment variables for it, then execute ... make -f Basic.mk TOOLCHAIN=gcc This produces GccRel\gnumake.exe. If you want a version of GNU make built with debugging enabled, add the TARGET_TYPE=debug option: make -f Basic.mk TOOLCHAIN=gcc TARGET_TYPE=debug The makefile doesn't support Guile integration. Use build_w32.bat if you want to build with Guile support. Building with (MSVC++-)cl using GNU make ---------------------------------------- 2. If you already have a version of GNU make available you can use it to build this version. Open a W32 command prompt for your installed (MSVC++-)cl, setup a correct PATH and other environment variables for it (usually via executing vcvars32.bat or vsvars32.bat from the cl-installation, or using a corresponding start menu entry from the cl-installation), then execute ... make -f Basic.mk This produces an optimized WinRel/gnumake.exe. If you want a version of GNU make built with debugging enabled, add the TARGET_TYPE=debug option: make -f Basic.mk TARGET_TYPE=debug The makefile doesn't support Guile integration. Use build_w32.bat if you want to build with Guile support. Running the test suite ---------------------- 3. You will need an installation of Perl. Be sure to use a relatively modern version: older versions will sometimes throw spurious errors. To run the suite after building using GNU make, use: make -f Basic.mk check Alternatively if you'd like to run tests by hand, use: cd tests .\run_make_tests.bat -make I've found seems to want forward-slashes in the path. For example if building with .\build_w32.bat non-debug, use: cd tests .\run_make_tests.bat -make ../WinRel/gnumake.exe I've tested this with the MSYS2 shell and POSIX tools installation that you get by installing Git for Windows. ------------------- -- Notes/Caveats -- ------------------- GNU make on Windows 32-bit platforms: This version of make is ported natively to Windows32 platforms (Windows NT 3.51, Windows NT 4.0, Windows 2000, Windows XP, Windows 95, and Windows 98). It does not rely on any 3rd party software or add-on packages for building. The only thing needed is a Windows compiler. Two compilers supported officially are the MinGW port of GNU GCC, and the various versions of the Microsoft C compiler. Do not confuse this port of GNU make with other Windows32 projects which provide a GNU make binary. These are separate projects and are not connected to this port effort. GNU make and sh.exe: This port prefers if you have a working sh.exe somewhere on your system. If you don't have sh.exe, the port falls back to MSDOS mode for launching programs (via a batch file). The MSDOS mode style execution has not been tested that carefully though (The author uses GNU bash as sh.exe). There are very few true ports of Bourne shell for NT right now. There is a version of GNU bash available from Cygnus "Cygwin" porting effort (http://www.cygwin.com/). Other possibilities are the MKS version of sh.exe, or building your own with a package like NutCracker (DataFocus) or Portage (Consensys). Also MinGW includes sh (http://mingw.org/). GNU make and brain-dead shells (BATCH_MODE_ONLY_SHELL): Some versions of Bourne shell do not behave well when invoked as 'sh -c' from CreateProcess(). The main problem is they seem to have a hard time handling quoted strings correctly. This can be circumvented by writing commands to be executed to a batch file and then executing the command by calling 'sh file'. To work around this difficulty, this version of make supports a batch mode. When BATCH_MODE_ONLY_SHELL is defined at compile time, make forces all command lines to be executed via script files instead of by command line. In this mode you must have a working sh.exe in order to use parallel builds (-j). A native Windows32 system with no Bourne shell will also run in batch mode. All command lines will be put into batch files and executed via $(COMSPEC) (%COMSPEC%). However, parallel builds ARE supported with Windows shells (cmd.exe and command.com). See the next section about some peculiarities of parallel builds on Windows. Support for parallel builds Parallel builds (-jN) are supported in this port. The number of concurrent processes has a hard limit of 4095. GNU make and Cygnus GNU Windows32 tools: Good news! Make now has native support for Cygwin sh. To enable, define the HAVE_CYGWIN_SHELL in config.h and rebuild make from scratch. This version of make tested with B20.1 of Cygwin. Do not define BATCH_MODE_ONLY_SHELL if you use HAVE_CYGWIN_SHELL. GNU make and the MKS shell: There is now semi-official support for the MKS shell. To turn this support on, define HAVE_MKS_SHELL in the config.h.W32 before you build make. Do not define BATCH_MODE_ONLY_SHELL if you turn on HAVE_MKS_SHELL. GNU make handling of drive letters in pathnames (PATH, vpath, VPATH): There is a caveat that should be noted with respect to handling single character pathnames on Windows systems. When colon is used in PATH variables, make tries to be smart about knowing when you are using colon as a separator versus colon as a drive letter. Unfortunately, something as simple as the string 'x:/' could be interpreted 2 ways: (x and /) or (x:/). Make chooses to interpret a letter plus colon (e.g. x:/) as a drive letter pathname. If it is necessary to use single character directories in paths (VPATH, vpath, Path, PATH), the user must do one of two things: a. Use semicolon as the separator to disambiguate colon. For example use 'x;/' if you want to say 'x' and '/' are separate components. b. Qualify the directory name so that there is more than one character in the path(s) used. For example, none of these settings are ambiguous: ./x:./y /some/path/x:/some/path/y x:/some/path/x:x:/some/path/y Please note that you are free to mix colon and semi-colon in the specification of paths. Make is able to figure out the intended result and convert the paths internally to the format needed when interacting with the operating system, providing the path is not within quotes, e.g. "x:/test/test.c". You are encouraged to use colon as the separator character. This should ease the pain of deciding how to handle various path problems which exist between platforms. If colon is used on both Unix and Windows systems, then no ifdef'ing will be necessary in the makefile source. Pathnames and white space: Unlike Unix, Windows 95/NT systems encourage pathnames which contain white space (e.g. C:\Program Files\). These sorts of pathnames are valid on Unix too, but are never encouraged. There is at least one place in make (VPATH/vpath handling) where paths containing white space will simply not work. There may be others too. I chose to not try and port make in such a way so that these sorts of paths could be handled. I offer these suggestions as workarounds: 1. Use 8.3 notation. i.e. "x:/long~1/", which is actually "x:\longpathtest". Type "dir /x" to view these filenames within the cmd.exe shell. 2. Rename the directory so it does not contain white space. If you are unhappy with this choice, this is free software and you are free to take a crack at making this work. The code in w32/pathstuff.c and vpath.c would be the places to start. Pathnames and Case insensitivity: Unlike Unix, Windows 95/NT systems are case insensitive but case preserving. For example if you tell the file system to create a file named "Target", it will preserve the case. Subsequent access to the file with other case permutations will succeed (i.e. opening a file named "target" or "TARGET" will open the file "Target"). By default, GNU make retains its case sensitivity when comparing target names and existing files or directories. It can be configured, however, into a case preserving and case insensitive mode by adding a define for HAVE_CASE_INSENSITIVE_FS to config.h.W32. For example, the following makefile will create a file named Target in the directory subdir which will subsequently be used to satisfy the dependency of SUBDIR/DepTarget on SubDir/TARGET. Without HAVE_CASE_INSENSITIVE_FS configured, the dependency link will not be made: subdir/Target: touch $@ SUBDIR/DepTarget: SubDir/TARGET cp $^ $@ Reliance on this behavior also eliminates the ability of GNU make to use case in comparison of matching rules. For example, it is not possible to set up a C++ rule using %.C that is different than a C rule using %.c. GNU make will consider these to be the same rule and will issue a warning. SAMBA/NTFS/VFAT: I have not had any success building the debug version of this package using SAMBA as my file server. The reason seems to be related to the way VC++ 4.0 changes the case name of the pdb filename it is passed on the command line. It seems to change the name always to to lower case. I contend that the VC++ compiler should not change the casename of files that are passed as arguments on the command line. I don't think this was a problem in MSVC 2.x, but I know it is a problem in MSVC 4.x. The package builds fine on VFAT and NTFS filesystems. Most all of the development I have done to date has been using NTFS and long file names. I have not done any considerable work under VFAT. VFAT users may wish to be aware that this port of make does respect case sensitivity. FAT: Version 3.76 added support for FAT filesystems. Make works around some difficulties with stat'ing of files and caching of filenames and directories internally. Bug reports: Please submit bugs via the normal bug reporting mechanism which is described in the GNU make manual and the base README. ------------------------------------------------------------------------------- Copyright (C) 1996-2020 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 . make-4.3/COPYING0000644000175000017500000010451313603564437010270 00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 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 3 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, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . make-4.3/README.DOS0000444000175000017500000003265113611136527010534 00000000000000Port of GNU Make to 32-bit protected mode on MSDOS and MS-Windows. Builds with DJGPP v2 port of GNU C/C++ compiler and utilities. New (since 3.74) DOS-specific features: 1. Supports long filenames when run from DOS box on Windows 9x. 2. Supports both stock DOS COMMAND.COM and Unix-style shells (details in 'Notes' below). 3. Supports DOS drive letters in dependencies and pattern rules. 4. Better support for DOS-style backslashes in pathnames (but see 'Notes' below). 5. The $(shell) built-in can run arbitrary complex commands, including pipes and redirection, even when COMMAND.COM is your shell. 6. Can be built without floating-point code (see below). 7. Supports signals in child programs and restores the original directory if the child was interrupted. 8. Can be built without (a previous version of) Make. 9. The build process requires only standard tools. (Optional targets like "check:" still need additional programs, though, see below.) 10. Beginning with v3.78, the test suite works in the DJGPP environment (requires Perl and auxiliary tools; see below). To install a binary distribution: Simply unzip the makNNNb.zip file (where NNN is the version number) preserving the directory structure (-d switch if you use PKUNZIP). If you are installing Make on Windows 9X or Windows 2000, use an unzip program that supports long filenames in zip files. After unzipping, make sure the directory with make.exe is on your PATH, and that's all you need to use Make. To build from sources: 1. Unzip the archive, preserving the directory structure (-d switch if you use PKUNZIP). If you build Make on Windows 9X or Windows 2000, use an unzip program that supports long filenames in zip files. If you are unpacking an official GNU source distribution, use either DJTAR (which is part of the DJGPP development environment), or the DJGPP port of GNU Tar. 2. If you have a working Make already, you can run: make -f Basic.mk 3. If you don't have a working Make already you can bootstrap one by running: .\builddos.bat 4. If you are building from outside of the source directory, you need to tell Make where the sources are, like this: make -f c:/djgpp/gnu/make/Basic.mk SRCDIR=c:/djgpp/gnu/make or: c:/djgpp/gnu/make/builddos.bat c:/djgpp/gnu/make 5. To run the test suite, type "make check". This requires a Unix shell (I used the DJGPP port of Bash 2.03), Perl, Sed, Fileutils and Sh-utils. 6. To install copy make.exe to the preferred location. Since GNU make 4.3, support for customized platform installations has been removed. If you'd like to collaborate on reinstating these capabilities, contact bug-make@gnu.org. Notes: ----- 1. The shell issue. This is probably the most significant improvement, first introduced in the port of GNU Make 3.75. The original behavior of GNU Make is to invoke commands directly, as long as they don't include characters special to the shell or internal shell commands, because that is faster. When shell features like redirection or filename wildcards are involved, Make calls the shell. This port supports both DOS shells (the stock COMMAND.COM and its 4DOS/NDOS replacements), and Unix-style shells (tested with the venerable Stewartson's 'ms_sh' 2.3 and the DJGPP port of 'bash' by Daisuke Aoyama ). When the $SHELL variable points to a Unix-style shell, Make works just like you'd expect on Unix, calling the shell for any command that involves characters special to the shell or internal shell commands. The only difference is that, since there is no standard way to pass command lines longer than the infamous DOS 126-character limit, this port of Make writes the command line to a temporary disk file and then invokes the shell on that file. If $SHELL points to a DOS-style shell, however, Make will not call it automatically, as it does with Unix shells. Stock COMMAND.COM is too dumb and would unnecessarily limit the functionality of Make. For example, you would not be able to use long command lines in commands that use redirection or pipes. Therefore, when presented with a DOS shell, this port of Make will emulate most of the shell functionality, like redirection and pipes, and shall only call the shell when a batch file or a command internal to the shell is invoked. (Even when a command is an internal shell command, Make will first search the $PATH for it, so that if a Makefile calls 'mkdir', you can install, say, a port of GNU 'mkdir' and have it called in that case.) The key to all this is the extended functionality of 'spawn' and 'system' functions from the DJGPP library; this port just calls 'system' where it would invoke the shell on Unix. The most important aspect of these functions is that they use a special mechanism to pass long (up to 16KB) command lines to DJGPP programs. In addition, 'system' emulates some internal commands, like 'cd' (so that you can now use forward slashes with it, and can also change the drive if the directory is on another drive). Another aspect worth mentioning is that you can call Unix shell scripts directly, provided that the shell whose name is mentioned on the first line of the script is installed anywhere along the $PATH. It is impossible to tell here everything about these functions; refer to the DJGPP library reference for more details. The $(shell) built-in is implemented in this port by calling 'popen'. Since 'popen' calls 'system', the above considerations are valid for $(shell) as well. In particular, you can put arbitrary complex commands, including pipes and redirection, inside $(shell), which is in many cases a valid substitute for the Unix-style command substitution (`command`) feature. 2. "SHELL=/bin/sh" -- or is it? Many Unix Makefiles include a line which sets the SHELL, for those versions of Make which don't have this as the default. Since many DOS systems don't have 'sh' installed (in fact, most of them don't even have a '/bin' directory), this port takes such directives with a grain of salt. It will only honor such a directive if the basename of the shell name (like 'sh' in the above example) can indeed be found in the directory that is mentioned in the SHELL= line ('/bin' in the above example), or in the current working directory, or anywhere on the $PATH (in that order). If the basename doesn't include a filename extension, Make will look for any known extension that indicates an executable file (.exe, .com, .bat, .btm, .sh, and even .sed and .pl). If any such file is found, then $SHELL will be defined to the exact pathname of that file, and that shell will hence be used for the rest of processing. But if the named shell is *not* found, the line which sets it will be effectively ignored, leaving the value of $SHELL as it was before. Since a lot of decisions that this port makes depend on the gender of the shell, I feel it doesn't make any sense to tailor Make's behavior to a shell which is nowhere to be found. Note that the above special handling of "SHELL=" only happens for Makefiles; if you set $SHELL in the environment or on the Make command line, you are expected to give the complete pathname of the shell, including the filename extension. The default value of $SHELL is computed as on Unix (see the Make manual for details), except that if $SHELL is not defined in the environment, $COMSPEC is used. Also, if an environment variable named $MAKESHELL is defined, it takes precedence over both $COMSPEC and $SHELL. Note that, unlike Unix, $SHELL in the environment *is* used to set the shell (since on MSDOS, it's unlikely that the interactive shell will not be suitable for Makefile processing). The bottom line is that you can now write Makefiles where some of the targets require a real (i.e. Unix-like) shell, which will nevertheless work when such shell is not available (provided, of course, that the commands which should always work, don't require such a shell). More important, you can convert Unix Makefiles to MSDOS and leave the line which sets the shell intact, so that people who do have Unixy shell could use it for targets which aren't converted to DOS (like 'install' and 'uninstall', for example). 3. Default directories. GNU Make knows about standard directories where it searches for library and include files mentioned in the Makefile. Since MSDOS machines don't have standard places for these, this port will search ${DJDIR}/lib and ${DJDIR}/include respectively. $DJDIR is defined automatically by the DJGPP startup code as the root of the DJGPP installation tree (unless you've tampered with the DJGPP.ENV file). This should provide reasonable default values, unless you moved parts of DJGPP to other directories. 4. Letter-case in filenames. If you run Make on Windows 9x, you should be aware of the letter-case issue. Make is internally case-sensitive, but all file operations are case-insensitive on Windows 9x, so e.g. files 'FAQ', 'faq' and 'Faq' all refer to the same file, as far as Windows is concerned. The underlying DJGPP C library functions honor the letter-case of the filenames they get from the OS, except that by default, they down-case 8+3 DOS filenames which are stored in upper case in the directory and would break many Makefiles otherwise. (The details of which filenames are converted to lower case are explained in the DJGPP libc docs, under the '_preserve_fncase' and '_lfn_gen_short_fname' functions, but as a thumb rule, any filename that is stored in upper case in the directory, is a valid DOS 8+3 filename and doesn't include characters invalid on MSDOS FAT filesystems, will be automatically down-cased.) User reports that I have indicate that this default behavior is generally what you'd expect; however, your input is most welcome. In any case, if you hit a situation where you must force Make to get the 8+3 DOS filenames in upper case, set FNCASE=y in the environment or in the Makefile. 5. DOS-style pathnames. There are a lot of places throughout the program sources which make implicit assumptions about the pathname syntax. In particular, the directories are assumed to be separated by '/', and any pathname which doesn't begin with a '/' is assumed to be relative to the current directory. This port attempts to support DOS-style pathnames which might include the drive letter and use backslashes instead of forward slashes. However, this support is not complete; I feel that pursuing this support too far might break some more important features, particularly if you use a Unix-style shell (where a backslash is a quote character). I only consider support of backslashes desirable because some Makefiles invoke non-DJGPP programs which don't understand forward slashes. A notable example of such programs is the standard programs which come with MSDOS. Otherwise, you are advised to stay away from backslashes whenever possible. In particular, filename globbing won't work on pathnames with backslashes, because the GNU 'glob' library doesn't support them (backslash is special in filename wildcards, and I didn't want to break that). One feature which *does* work with backslashes is the filename- related built-in functions such as $(dir), $(notdir), etc. Drive letters in pathnames are also fully supported. Bug reports: ----------- Bugs that are clearly related to the MSDOS/DJGPP port should be reported first on the comp.os.msdos.djgpp news group (if you cannot post to Usenet groups, write to the DJGPP mailing list, , which is an email gateway into the above news group). For other bugs, please follow the procedure explained in the "Bugs" chapter of the Info docs. If you don't have an Info reader, look up that chapter in the 'make.i1' file with any text browser/editor. Enjoy, Eli Zaretskii ------------------------------------------------------------------------------- Copyright (C) 1996-2020 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 . make-4.3/README.OS20000444000175000017500000001477513611136527010521 00000000000000Port of GNU make to OS/2. Features of GNU make that do not work under OS/2: - remote job execution - dynamic load balancing Special features of the OS/2 version: Due to the fact that some people might want to use sh syntax in Makefiles while others might want to use OS/2's native shell cmd.exe, GNU make supports both shell types. The following list defines the order that is used to determine the shell: 1. The shell specified by the environment variable MAKESHELL. 2. The shell specified by the SHELL variable within a Makefile. Like Unix, SHELL is NOT taken from the environment. 3. The shell specified by the COMSPEC environment variable. 4. The shell specified by the OS2_SHELL environment variable. 5. If none of the above is defined /bin/sh is used as default. This happens e.g. in the make testsuite. Note: - Points 3 and 4 can be turned off at compile time by adding -DNO_CMD_DEFAULT to the CPPFLAGS. - DOS support is not tested for EMX and therefore might not work. - The UNIXROOT environment variable is supported to find /bin/sh if it is not on the current drive. COMPILATION OF GNU MAKE FOR OS/2: I. ***** SPECIAL OPTIONS ***** - At compile time you can turn off that cmd is used as default shell (but only /bin/sh). Simply set CPPFLAGS="-DNO_CMD_DEFAULT" and make will not use cmd unless you cause it to do so by setting MAKESHELL to cmd or by specifying SHELL=cmd in your Makefile. - At compile time you can set CPPFLAGS="-DNO_CHDIR2" to turn off that GNU make prints drive letters. This is necessary if you want to run the testsuite. II. ***** REQUIREMENTS FOR THE COMPILATION ***** A standard Unix like build environment: - sh compatible shell (ksh, bash, ash, but tested only with pdksh 5.2.14 release 2) If you use pdksh it is recommended to update to 5.2.14 release 2. Older versions may not work! You can get this version at http://www.math.ohio-state.edu/~ilya/software/os2/pdksh-5.2.14-bin-2.zip - GNU file utilities (make sure that install.exe from the file utilities is in front of your PATH before X:\OS2\INSTALL\INSTALL.EXE. I recommend also to change the filename to ginstall.exe instead of install.exe to avoid confusion with X:\OS2\INSTALL\INSTALL.EXE) - GNU shell utilities - GNU text utilities - gawk - grep - sed - GNU make 3.79.1 (special OS/2 patched version) or higher - perl 5.005 or higher - GNU texinfo (you can use 3.1 (gnuinfo.zip), but I recommend 4.0) If you want to recreate the configuration files (developers only!) you need also: GNU m4 1.4, autoconf 2.59, automake 1.9.6 (or compatible) III. ***** COMPILATION AND INSTALLATION ***** a) ** Developers only - Everyone else should skip this section ** To recreate the configuration files use: export EMXSHELL=ksh aclocal -I config automake autoconf autoheader b) Installation into x:/usr Note: Although it is possible to compile make using "./configure", "make", "make install" this is not recommended. In particular, you must ALWAYS use LDFLAGS="-Zstack 0x6000" because the default stack size is far to small and make will not work properly! Recommended environment variables and installation options: export ac_executable_extensions=".exe" export CPPFLAGS="-D__ST_MT_ERRNO__" export CFLAGS="-O2 -Zomf -Zmt" export LDFLAGS="-Zcrtdll -Zlinker /exepack:2 -Zlinker /pm:vio -Zstack 0x6000" export RANLIB="echo" ./configure --prefix=x:/usr --infodir=x:/usr/share/info --mandir=x:/usr/share/man --without-included-gettext make AR=emxomfar make install Note: If you use gcc 2.9.x I recommend to set also LIBS="-lgcc" Note: You can add -DNO_CMD_DEFAULT and -DNO_CHDIR2 to CPPFLAGS. See section I. for details. IV. ***** NLS support ***** GNU make has NLS (National Language Support), with the following caveats: a) It will only work with GNU gettext, and b) GNU gettext support is not included in the GNU make package. Therefore, if you wish to enable the internationalization features of GNU make you must install GNU gettext on your system before configuring GNU make. You can choose the languages to be installed. To install support for English, German and French only enter: export LINGUAS="en de fr" If you don't specify LINGUAS all languages are installed. If you don't want NLS support (English only) use the option --disable-nls for the configure script. Note if GNU gettext is not installed then NLS will not be enabled regardless of this flag. V. ***** Running the make test suite ***** To run the included make test suite you have to set CPPFLAGS="-D__ST_MT_ERRNO__ -DNO_CMD_DEFAULT -DNO_CHDIR2" before you compile make. This is due to some restrictions of the testsuite itself. -DNO_CMD_DEFAULT causes make to use /bin/sh as default shell in every case. Normally you could simply set MAKESHELL="/bin/sh" to do this but the testsuite ignores the environment. -DNO_CHDIR2 causes make not to use drive letters for directory names (i.e. _chdir2() and _getcwd2() are NOT used). The testsuite interpretes the whole output of make, especially statements like make[1]: Entering directory 'C:/somewhere/make-3.79.1/tests' where the testsuite does not expect the drive letter. This would be interpreted as an error even if there is none. To run the testsuite do the following: export CPPFLAGS="-D__ST_MT_ERRNO__ -DNO_CMD_DEFAULT -DNO_CHDIR2" export CFLAGS="-Zomf -O2 -Zmt" export LDFLAGS="-Zcrtdll -s -Zlinker /exepack:2 -Zlinker /pm:vio -Zstack 0x6000" export RANLIB="echo" ./configure --prefix=x:/usr --disable-nls make AR=emxomfar make check All tests should work fine with the exception of one of the "INCLUDE_DIRS" tests which will fail if your /usr/include directory is on a drive different from the make source tree. ------------------------------------------------------------------------------- Copyright (C) 2003-2020 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 . make-4.3/aclocal.m40000644000175000017500000015246313611136504011071 00000000000000# generated automatically by aclocal 1.16.1 -*- Autoconf -*- # Copyright (C) 1996-2018 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. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. 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'.])]) 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 . dnl Copyright © 2012-2015 Dan Nicholson 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)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])dnl PKG_PROG_PKG_CONFIG 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" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) 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" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])dnl _PKG_CONFIG 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 _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])dnl _PKG_SHORT_ERRORS_SUPPORTED 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 AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])dnl PKG_CHECK_MODULES 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-2018 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_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # 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.16' 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.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_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.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2018 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. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [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-2018 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_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2018 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. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2018 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_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. AS_CASE([$CONFIG_FILES], [*\'*], [eval set x "$CONFIG_FILES"], [*], [set x $CONFIG_FILES]) shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`AS_DIRNAME(["$am_mf"])` am_filepart=`AS_BASENAME(["$am_mf"])` AM_RUN_LOG([cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles]) || am_rc=$? done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi AS_UNSET([am_dirpart]) AS_UNSET([am_filepart]) AS_UNSET([am_mf]) AS_UNSET([am_rc]) rm -f conftest-deps.mk } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking is enabled. # This creates each '.Po' and '.Plo' makefile fragment that we'll need in # order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])]) # Copyright (C) 1996-2018 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. AC_DEFUN([AM_WITH_DMALLOC], [AC_MSG_CHECKING([if malloc debugging is wanted]) AC_ARG_WITH([dmalloc], [AS_HELP_STRING([--with-dmalloc], [use dmalloc, as in http://www.dmalloc.com])], [if test "$withval" = yes; then AC_MSG_RESULT([yes]) AC_DEFINE([WITH_DMALLOC], [1], [Define if using the dmalloc debugging malloc package]) LIBS="$LIBS -ldmalloc" LDFLAGS="$LDFLAGS -g" else AC_MSG_RESULT([no]) fi], [AC_MSG_RESULT([no])]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2018 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. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # 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 _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) 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 dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2018 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_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2018 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. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2018 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_MAKE_INCLUDE() # ----------------- # Check whether make has an 'include' directive that can support all # the idioms we need for our automatic dependency tracking code. AC_DEFUN([AM_MAKE_INCLUDE], [AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive]) cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out]) AS_CASE([$?:`cat confinc.out 2>/dev/null`], ['0:this is the am__doit target'], [AS_CASE([$s], [BSD], [am__include='.include' am__quote='"'], [am__include='include' am__quote=''])]) if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* AC_MSG_RESULT([${_am_result}]) AC_SUBST([am__include])]) AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2018 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_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2018 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_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2018 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_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2018 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_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2018 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_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2018 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_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2018 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_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2018 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_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2018 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_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/00gnulib.m4]) m4_include([m4/absolute-header.m4]) m4_include([m4/access.m4]) m4_include([m4/acinclude.m4]) m4_include([m4/alloca.m4]) m4_include([m4/asm-underscore.m4]) m4_include([m4/close.m4]) m4_include([m4/dirname.m4]) m4_include([m4/dospaths.m4]) m4_include([m4/double-slash-root.m4]) m4_include([m4/dup2.m4]) m4_include([m4/eaccess.m4]) m4_include([m4/errno_h.m4]) m4_include([m4/error.m4]) m4_include([m4/extensions.m4]) m4_include([m4/extern-inline.m4]) m4_include([m4/fcntl-o.m4]) m4_include([m4/fcntl.m4]) m4_include([m4/fcntl_h.m4]) m4_include([m4/findprog-in.m4]) m4_include([m4/getdtablesize.m4]) m4_include([m4/getloadavg.m4]) m4_include([m4/getprogname.m4]) m4_include([m4/gettext.m4]) m4_include([m4/gnulib-common.m4]) m4_include([m4/gnulib-comp.m4]) m4_include([m4/host-cpu-c-abi.m4]) m4_include([m4/iconv.m4]) m4_include([m4/include_next.m4]) m4_include([m4/intlmacosx.m4]) m4_include([m4/lib-ld.m4]) m4_include([m4/lib-link.m4]) m4_include([m4/lib-prefix.m4]) m4_include([m4/limits-h.m4]) m4_include([m4/longlong.m4]) m4_include([m4/malloc.m4]) m4_include([m4/msvc-inval.m4]) m4_include([m4/msvc-nothrow.m4]) m4_include([m4/multiarch.m4]) m4_include([m4/nls.m4]) m4_include([m4/off_t.m4]) m4_include([m4/po.m4]) m4_include([m4/progtest.m4]) m4_include([m4/ssize_t.m4]) m4_include([m4/stdbool.m4]) m4_include([m4/stddef_h.m4]) m4_include([m4/stdint.m4]) m4_include([m4/stdio_h.m4]) m4_include([m4/stdlib_h.m4]) m4_include([m4/stpcpy.m4]) m4_include([m4/strerror.m4]) m4_include([m4/string_h.m4]) m4_include([m4/sys_socket_h.m4]) m4_include([m4/sys_types_h.m4]) m4_include([m4/unistd_h.m4]) m4_include([m4/warn-on-use.m4]) m4_include([m4/wchar_t.m4]) m4_include([m4/wint_t.m4]) m4_include([m4/xalloc.m4]) make-4.3/vms_export_symbol_test.com0000644000175000017500000000165113603564437014566 00000000000000$! 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 $! make-4.3/NEWS0000644000175000017500000021571113611151230007715 00000000000000GNU make NEWS -*-indented-text-*- History of user-visible changes. 19 January 2020 See the end of this file for copyrights and conditions. All user-visible changes are more fully described in the GNU make 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. Version 4.3 (19 Jan 2020) A complete list of bugs fixed in this version is available here: https://sv.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=108&set=custom * WARNING: Backward-incompatibility! Number signs (#) appearing inside a macro reference or function invocation no longer introduce comments and should not be escaped with backslashes: thus a call such as: foo := $(shell echo '#') is legal. Previously the number sign needed to be escaped, for example: foo := $(shell echo '\#') Now this latter will resolve to "\#". If you want to write makefiles portable to both versions, assign the number sign to a variable: H := \# foo := $(shell echo '$H') This was claimed to be fixed in 3.81, but wasn't, for some reason. To detect this change search for 'nocomment' in the .FEATURES variable. * WARNING: Backward-incompatibility! Previously appending using '+=' to an empty variable would result in a value starting with a space. Now the initial space is only added if the variable already contains some value. Similarly, appending an empty string does not add a trailing space. * NOTE: Deprecated behavior. Contrary to the documentation, suffix rules with prerequisites are being treated BOTH as simple targets AND as pattern rules. Further, the prerequisites are ignored by the pattern rules. POSIX specifies that in order to be a suffix rule there can be no prerequisites defined. In this release if POSIX mode is enabled then rules with prerequisites cannot be suffix rules. If POSIX mode is not enabled then the previous behavior is preserved (a pattern rule with no extra prerequisites is created) AND a warning about this behavior is generated: warning: ignoring prerequisites on suffix rule definition The POSIX behavior will be adopted as the only behavior in a future release of GNU make so please resolve any warnings. * New feature: Grouped explicit targets Pattern rules have always had the ability to generate multiple targets with a single invocation of the recipe. It's now possible to declare that an explicit rule generates multiple targets with a single invocation. To use this, replace the ":" token with "&:" in the rule. To detect this feature search for 'grouped-target' in the .FEATURES special variable. Implementation contributed by Kaz Kylheku * New feature: .EXTRA_PREREQS variable Words in this variable are considered prerequisites of targets but they are not added to any of the automatic variable values when expanding the recipe. This variable can either be global (applies to all targets) or a target-specific variable. To detect this feature search for 'extra-prereqs' in the .FEATURES special variable. Implementation contributed by Christof Warlich * Makefiles can now specify the '-j' option in their MAKEFLAGS variable and this will cause make to enable that parallelism mode. * GNU make will now use posix_spawn() on systems where it is available. If you prefer to use fork/exec even on systems where posix_spawn() is present, you can use the --disable-posix-spawn option to configure. Implementation contributed by Aron Barath * Error messages printed when invoking non-existent commands have been cleaned up and made consistent. * The previous limit of 63 jobs under -jN on MS-Windows is now increased to 4095. That limit includes the subprocess started by the $(shell) function. * A new option --no-silent has been added, that cancels the effect of the -s/--silent/--quiet flag. * A new option -E has been added as a short alias for --eval. * All wildcard expansion within GNU make, including $(wildcard ...), will sort the results. See https://savannah.gnu.org/bugs/index.php?52076 * Interoperate with newer GNU libc and musl C runtime libraries. * Performance improvements provided by Paolo Bonzini GNU make Developer News * Import the GNU standard bootstrap script to replace the hand-rolled "make update" method for building code from a GNU make Git repository. * Rework the source distribution to move source files into the src/* subdirectory. This aligns with modern best practices in GNU. * Replace local portability code with Gnulib content. Unfortunately due to a problem with Gnulib support for getloadavg, this forces a requirement on Automake 1.16 or above in order to build from Git. See README.git. Version 4.2.1 (10 Jun 2016) A complete list of bugs fixed in this version is available here: https://sv.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=107&set=custom This release is a bug-fix release. Version 4.2 (22 May 2016) A complete list of bugs fixed in this version is available here: https://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 * 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. Version 4.1 (05 Oct 2014) A complete list of bugs fixed in this version is available here: https://sv.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=105&set=custom * New variables: $(MAKE_TERMOUT) and $(MAKE_TERMERR) are set to non-empty values if stdout or stderr, respectively, are believed to be writing to a terminal. These variables are exported by default. * Allow a no-text-argument form of the $(file ...) function. Without a text argument nothing is written to the file: it is simply opened in the requested mode, then closed again. * Change the fatal error for mixed explicit and implicit rules, that was introduced in GNU make 3.82, to a non-fatal error. However, this syntax is still deprecated and may return to being illegal in a future version of GNU 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. Version 4.0 (09 Oct 2013) A complete list of bugs fixed in this version is available here: https://sv.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=101&set=custom * WARNING: Backward-incompatibility! If .POSIX is specified, then make adheres to the POSIX backslash/newline handling requirements, which introduces the following changes to the standard backslash/newline handling in non-recipe lines: * Any trailing space before the backslash is preserved * Each backslash/newline (plus subsequent whitespace) is converted to a single space * New feature: GNU Guile integration This version of GNU make can be compiled with GNU Guile integration. GNU Guile serves as an embedded extension language for make. See the "Guile Function" section in the GNU Make manual for details. Currently GNU Guile 1.8 and 2.0+ are supported. In Guile 1.8 there is no support for internationalized character sets. In Guile 2.0+, scripts can be encoded in UTF-8. * New command line option: --output-sync (-O) enables grouping of output by target or by recursive make. This is useful during parallel builds to avoid mixing output from different jobs together giving hard-to-understand results. Original implementation by David Boyce . Reworked and enhanced by Frank Heckenbach . Windows support by Eli Zaretskii . * New command line option: --trace enables tracing of targets. When enabled the recipe to be invoked is printed even if it would otherwise be suppressed by .SILENT or a "@" prefix character. Also before each recipe is run the makefile name and linenumber where it was defined are shown as well as the prerequisites that caused the target to be considered out of date. * New command line option argument: --debug now accepts a "n" (none) flag which disables all debugging settings that are currently enabled. * New feature: The "job server" capability is now supported on Windows. Implementation contributed by Troy Runkel * New feature: The .ONESHELL capability is now supported on Windows. Support added by Eli Zaretskii . * New feature: "!=" shell assignment operator as an alternative to the $(shell ...) function. Implemented for compatibility with BSD makefiles. Note there are subtle differences between "!=" and $(shell ...). See the description in the GNU make manual. WARNING: Backward-incompatibility! Variables ending in "!" previously defined as "variable!= value" will now be interpreted as shell assignment. Change your assignment to add whitespace between the "!" and "=": "variable! = value" * New feature: "::=" simple assignment operator as defined by POSIX in 2012. This operator has identical functionality to ":=" in GNU make, but will be portable to any implementation of make conforming to a sufficiently new version of POSIX (see http://austingroupbugs.net/view.php?id=330). It is not necessary to define the .POSIX target to access this operator. * New feature: Loadable objects This version of GNU make contains a "technology preview": the ability to load dynamic objects into the make runtime. These objects can be created by the user and can add extended functionality, usable by makefiles. * New function: $(file ...) writes to a file. * New variable: $(GNUMAKEFLAGS) will be parsed for make flags, just like MAKEFLAGS is. It can be set in the environment or the makefile, containing GNU make-specific flags to allow your makefile to be portable to other versions of make. Once this variable is parsed, GNU make will set it to the empty string so that flags will not be duplicated on recursion. * New variable: `MAKE_HOST' gives the name of the host architecture make was compiled for. This is the same value you see after 'Built for' when running 'make --version'. * Behavior of MAKEFLAGS and MFLAGS is more rigorously defined. All simple flags are grouped together in the first word of MAKEFLAGS. No options that accept arguments appear in the first word. If no simple flags are present MAKEFLAGS begins with a space. Flags with both short and long versions always use the short versions in MAKEFLAGS. Flags are listed in alphabetical order using ASCII ordering. MFLAGS never begins with "- ". * Setting the -r and -R options in MAKEFLAGS inside a makefile now works as expected, removing all built-in rules and variables, respectively. * If a recipe fails, the makefile name and linenumber of the recipe are shown. * A .RECIPEPREFIX setting is remembered per-recipe and variables expanded in that recipe also use that recipe prefix setting. * In -p output, .RECIPEPREFIX settings are shown and all target-specific variables are output as if in a makefile, instead of as comments. * On MS-Windows, recipes that use ".." quoting will no longer force invocation of commands via temporary batch files and stock Windows shells, they will be short-circuited and invoked directly. (In other words, " is no longer a special character for stock Windows shells.) This avoids hitting shell limits for command length when quotes are used, but nothing else in the command requires the shell. This change could potentially mean some minor incompatibilities in behavior when the recipe uses quoted string on shell command lines. Version 3.82 (28 Jul 2010) A complete list of bugs fixed in this version is available here: https://sv.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=104&set=custom * Compiling GNU make now requires a conforming ISO C 1989 compiler and standard runtime library. * WARNING: Backward-incompatibility! The POSIX standard for make was changed in the 2008 version in a fundamentally incompatible way: make is required to invoke the shell as if the '-e' flag were provided. Because this would break many makefiles that have been written to conform to the original text of the standard, the default behavior of GNU make remains to invoke the shell with simply '-c'. However, any makefile specifying the .POSIX special target will follow the new POSIX standard and pass '-e' to the shell. See also .SHELLFLAGS below. * WARNING: Backward-incompatibility! The '$?' variable now contains all prerequisites that caused the target to be considered out of date, even if they do not exist (previously only existing targets were provided in $?). * WARNING: Backward-incompatibility! Wildcards were not documented as returning sorted values, but the results have been sorted up until this release.. If your makefiles require sorted results from wildcard expansions, use the $(sort ...) function to request it explicitly. * WARNING: Backward-incompatibility! As a result of parser enhancements, three backward-compatibility issues exist: first, a prerequisite containing an "=" cannot be escaped with a backslash any longer. You must create a variable containing an "=" and use that variable in the prerequisite. Second, variable names can no longer contain whitespace, unless you put the whitespace in a variable and use the variable. Third, in previous versions of make it was sometimes not flagged as an error for explicit and pattern targets to appear in the same rule. Now this is always reported as an error. * WARNING: Backward-incompatibility! The pattern-specific variables and pattern rules are now applied in the shortest stem first order instead of the definition order (variables and rules with the same stem length are still applied in the definition order). This produces the usually-desired behavior where more specific patterns are preferred. To detect this feature search for 'shortest-stem' in the .FEATURES special variable. * WARNING: Backward-incompatibility! The library search behavior has changed to be compatible with the standard linker behavior. Prior to this version for prerequisites specified using the -lfoo syntax make first searched for libfoo.so in the current directory, vpath directories, and system directories. If that didn't yield a match, make then searched for libfoo.a in these directories. Starting with this version make searches first for libfoo.so and then for libfoo.a in each of these directories in order. * New command line option: --eval=STRING causes STRING to be evaluated as makefile syntax (akin to using the $(eval ...) function). The evaluation is performed after all default rules and variables are defined, but before any makefiles are read. * New special variable: .RECIPEPREFIX allows you to reset the recipe introduction character from the default (TAB) to something else. The first character of this variable value is the new recipe introduction character. If the variable is set to the empty string, TAB is used again. It can be set and reset at will; recipes will use the value active when they were first parsed. To detect this feature check the value of $(.RECIPEPREFIX). * New special variable: .SHELLFLAGS allows you to change the options passed to the shell when it invokes recipes. By default the value will be "-c" (or "-ec" if .POSIX is set). * New special target: .ONESHELL instructs make to invoke a single instance of the shell and provide it with the entire recipe, regardless of how many lines it contains. As a special feature to allow more straightforward conversion of makefiles to use .ONESHELL, any recipe line control characters ('@', '+', or '-') will be removed from the second and subsequent recipe lines. This happens _only_ if the SHELL value is deemed to be a standard POSIX-style shell. If not, then no interior line control characters are removed (as they may be part of the scripting language used with the alternate SHELL). * New variable modifier 'private': prefixing a variable assignment with the modifier 'private' suppresses inheritance of that variable by prerequisites. This is most useful for target- and pattern-specific variables. * New make directive: 'undefine' allows you to undefine a variable so that it appears as if it was never set. Both $(flavor) and $(origin) functions will return 'undefined' for such a variable. To detect this feature search for 'undefine' in the .FEATURES special variable. * The parser for variable assignments has been enhanced to allow multiple modifiers ('export', 'override', 'private') on the same line as variables, including define/endef variables, and in any order. Also, it is possible to create variables and targets named as these modifiers. * The 'define' make directive now allows a variable assignment operator 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. Version 3.81 (01 Apr 2006) * GNU make is ported to OS/2. * GNU make is ported to MinGW. The MinGW build is only supported by the build_w32.bat batch file; see the file README.W32 for more details. * WARNING: Future backward-incompatibility! Up to and including this release, the '$?' variable does not contain any prerequisite that does not exist, even though that prerequisite might have caused the target to rebuild. Starting with the _next_ release of GNU make, '$?' will contain all prerequisites that caused the target to be considered out of date. See https://savannah.gnu.org/bugs/?16051 * WARNING: Backward-incompatibility! GNU make now implements a generic "second expansion" feature on the prerequisites of both explicit and implicit (pattern) rules. In order to enable this feature, the special target '.SECONDEXPANSION' must be defined before the first target which takes advantage of it. If this feature is enabled then after all rules have been parsed the prerequisites are expanded again, this time with all the automatic variables in scope. This means that in addition to using standard SysV $$@ in prerequisites lists, you can also use complex functions such as $$(notdir $$@) etc. This behavior applies to implicit rules, as well, where the second expansion occurs when the rule is matched. However, this means that when '.SECONDEXPANSION' is enabled you must double-quote any "$" in your filenames; instead of "foo: boo$$bar" you now must write "foo: foo$$$$bar". Note that the SysV $$@ etc. feature, which used to be available by default, is now ONLY available when the .SECONDEXPANSION target is defined. If your makefiles take advantage of this SysV feature you will need to update them. * WARNING: Backward-incompatibility! In order to comply with POSIX, the way in which GNU make processes backslash-newline sequences in recipes has changed. If your makefiles use backslash-newline sequences inside of single-quoted strings in recipes you will be impacted by this change. See the GNU make manual subsection "Splitting Recipe Lines" (node "Splitting Lines"), in section "Recipe Syntax", chapter "Writing Recipe in Rules", for details. * WARNING: Backward-incompatibility! Some previous versions of GNU make had a bug where "#" in a function invocation such as $(shell ...) was treated as a make comment. A workaround was to escape these with backslashes. This bug has been fixed: if your makefile uses "\#" in a function invocation the backslash is now preserved, so you'll need to remove it. * New command line option: -L (--check-symlink-times). On systems that support symbolic links, if this option is given then GNU make will use the most recent modification time of any symbolic links that are used to resolve target files. The default behavior remains as it always has: use the modification time of the actual target file only. * The "else" conditional line can now be followed by any other valid conditional on the same line: this does not increase the depth of the conditional nesting, so only one "endif" is required to close the conditional. * All pattern-specific variables that match a given target are now used (previously only the first match was used). * Target-specific variables can be marked as exportable using the "export" keyword. * In a recursive $(call ...) context, any extra arguments from the outer call are now masked in the context of the inner call. * Implemented a solution for the "thundering herd" problem with "-j -l". This version of GNU make uses an algorithm suggested by Thomas Riedl to track the number of jobs started in the last second and artificially adjust GNU make's view of the system's load average accordingly. * New special variables available in this release: - .INCLUDE_DIRS: Expands to a list of directories that make searches for included makefiles. - .FEATURES: Contains a list of special features available in this version of GNU make. - .DEFAULT_GOAL: Set the name of the default goal make will use if no goals are provided on the command line. - MAKE_RESTARTS: If set, then this is the number of times this instance of make has been restarted (see "How Makefiles Are Remade" in the manual). - New automatic variable: $| (added in 3.80, actually): contains all the order-only prerequisites defined for the target. * New functions available in this release: - $(lastword ...) returns the last word in the list. This gives identical results as $(word $(words ...) ...), but is much faster. - $(abspath ...) returns the absolute path (all "." and ".." directories resolved, and any duplicate "/" characters removed) for each path provided. - $(realpath ...) returns the canonical pathname for each path provided. The canonical pathname is the absolute pathname, with all symbolic links resolved as well. - $(info ...) prints its arguments to stdout. No makefile name or line number info, etc. is printed. - $(flavor ...) returns the flavor of a variable. - $(or ...) provides a short-circuiting OR conditional: each argument is expanded. The first true (non-empty) argument is returned; no further arguments are expanded. Expands to empty if there are no true arguments. - $(and ...) provides a short-circuiting AND conditional: each argument is expanded. The first false (empty) argument is returned; no further arguments are expanded. Expands to the last argument if all arguments are true. * Changes made for POSIX compatibility: - Only touch targets (under -t) if they have a recipe. - Setting the SHELL make variable does NOT change the value of the SHELL environment variable given to programs invoked by make. As an enhancement to POSIX, if you export the make variable SHELL then it will be set in the environment, just as before. * On MS Windows systems, explicitly setting SHELL to a pathname ending in "cmd" or "cmd.exe" (case-insensitive) will force GNU make to use the DOS command interpreter in batch mode even if a UNIX-like shell could be found on the system. * On VMS there is now support for case-sensitive filesystems such as ODS5. See the README.VMS file for information. * Parallel builds (-jN) no longer require a working Bourne shell on Windows platforms. They work even with the stock Windows shells, such as cmd.exe and command.com. * Updated to autoconf 2.59, automake 1.9.5, and gettext 0.14.1. Users should not be impacted. * New translations for Swedish, Chinese (simplified), Ukrainian, Belarusian, Finnish, Kinyarwandan, and Irish. Many updated translations. A complete list of bugs fixed in this version is available here: https://savannah.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=103 Version 3.80 (03 Oct 2002) * A new feature exists: order-only prerequisites. These prerequisites affect the order in which targets are built, but they do not impact the rebuild/no-rebuild decision of their dependents. That is to say, they allow you to require target B be built before target A, without requiring that target A will always be rebuilt if target B is updated. Patch for this feature provided by Greg McGary . * For compatibility with SysV make, GNU make now supports the peculiar syntax $$@, $$(@D), and $$(@F) in the prerequisites list of a rule. This syntax is only valid within explicit and static pattern rules: it cannot be used in implicit (suffix or pattern) rules. Edouard G. Parmelan provided a patch implementing this feature; however, I decided to implement it in a different way. * The argument to the "ifdef" conditional is now expanded before it's tested, so it can be a constructed variable name. Similarly, the arguments to "export" (when not used in a variable definition context) and "unexport" are also now expanded. * A new function is defined: $(value ...). The argument to this function is the _name_ of a variable. The result of the function is the value of the variable, without having been expanded. * A new function is defined: $(eval ...). The arguments to this function should expand to makefile commands, which will then be evaluated as if they had appeared in the makefile. In combination with define/endef multiline variable definitions this is an extremely powerful capability. The $(value ...) function is also sometimes useful here. * A new built-in variable is defined, $(MAKEFILE_LIST). It contains a list of each makefile GNU make has read, or started to read, in the order in which they were encountered. So, the last filename in the list when a makefile is just being read (before any includes) is the name of the current makefile. * A new built-in variable is defined: $(.VARIABLES). When it is expanded it returns a complete list of variable names defined by all makefiles at that moment. * A new command line option is defined, -B or --always-make. If specified GNU make will consider all targets out-of-date even if they would otherwise not be. * The arguments to $(call ...) functions were being stored in $1, $2, etc. as recursive variables, even though they are fully expanded before assignment. This means that escaped dollar signs ($$ etc.) were not behaving properly. Now the arguments are stored as simple variables. This may mean that if you added extra escaping to your $(call ...) function arguments you will need to undo it now. * The variable invoked by $(call ...) can now be recursive: unlike other variables it can reference itself and this will not produce an error when it is used as the first argument to $(call ...) (but only then). * New pseudo-target .LOW_RESOLUTION_TIME, superseding the configure option --disable-nsec-timestamps. You might need this if your build process depends on tools like "cp -p" preserving time stamps, since "cp -p" (right now) doesn't preserve the subsecond portion of a time stamp. * Updated translations for French, Galician, German, Japanese, Korean, and Russian. New translations for Croatian, Danish, Hebrew, and Turkish. * Updated internationalization support to Gettext 0.11.5. GNU make now uses Gettext's "external" feature, and does not include any internationalization code itself. Configure will search your system for an existing implementation of GNU Gettext (only GNU Gettext is acceptable) and use it if it exists. If not, NLS will be disabled. See ABOUT-NLS for more information. * 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 , 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: https://savannah.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=102 Version 3.79.1 (23 Jun 2000) * .SECONDARY with no prerequisites now prevents any target from being removed because make thinks it's an intermediate file, not just those listed in the makefile. * New configure option --disable-nsec-timestamps, but this was superseded in later versions by the .LOW_RESOLUTION_TIME pseudo-target. Version 3.79 (04 Apr 2000) * GNU make optionally supports internationalization and locales via the GNU gettext (or local gettext if suitable) package. See the ABOUT-NLS file for more information on configuring GNU make for NLS. * Previously, GNU make quoted variables such as MAKEFLAGS and MAKEOVERRIDES for proper parsing by the shell. This allowed them to be used within make build scripts. However, using them there is not proper behavior: they are meant to be passed to subshells via the environment. Unfortunately the values were not quoted properly to be passed through the environment. This meant that make didn't properly pass some types of command line values to submakes. With this version we change that behavior: now these variables are quoted properly for passing through the environment, which is the correct way to do it. If you previously used these variables explicitly within a make rule you may need to re-examine your use for correctness given this change. * A new pseudo-target .NOTPARALLEL is available. If defined, the current makefile is run serially regardless of the value of -j. However, submakes are still eligible for parallel execution. * The --debug option has changed: it now allows optional flags controlling the amount and type of debugging output. By default only a minimal amount information is generated, displaying the names of "normal" targets (not makefiles) that were deemed out of date and in need of being rebuilt. Note that the -d option behaves as before: it takes no arguments and all debugging information is generated. * The `-p' (print database) output now includes filename and linenumber information for variable definitions, to aid debugging. * The wordlist function no longer reverses its arguments if the "start" value is greater than the "end" value. If that's true, nothing is returned. * 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. Version 3.78 (22 Sep 1999) * Two new functions, $(error ...) and $(warning ...) are available. The former will cause make to fail and exit immediately upon expansion of the function, with the text provided as the error message. The latter causes the text provided to be printed as a warning message, but make proceeds normally. * A new function $(call ...) is available. This allows users to create their own parameterized macros and invoke them later. Original implementation of this function was provided by Han-Wen Nienhuys . * A new function $(if ...) is available. It provides if-then-else capabilities in a builtin function. Original implementation of this function was provided by Han-Wen Nienhuys . * Make defines a new variable, .LIBPATTERNS. This variable controls how library dependency expansion (dependencies like ``-lfoo'') is performed. * Make accepts CRLF sequences as well as traditional LF, for compatibility with makefiles created on other operating systems. * Make accepts a new option: -R, or --no-builtin-variables. This option disables the definition of the rule-specific builtin variables (CC, LD, AR, etc.). Specifying this option forces -r (--no-builtin-rules) as well. * A "job server" feature, suggested by Howard Chu . On systems that support POSIX pipe(2) semantics, GNU make can now pass -jN options to submakes rather than forcing them all to use -j1. The top make and all its sub-make processes use a pipe to communicate with each other to ensure that no more than N jobs are started across all makes. To get the old behavior of -j back, you can configure make with the --disable-job-server option. * The confusing term "dependency" has been replaced by the more accurate and standard term "prerequisite", both in the manual and in all GNU make output. * GNU make supports the "big archive" library format introduced in AIX 4.3. * GNU make supports large files on AIX, HP-UX, and IRIX. These changes were provided by Paul Eggert . (Large file support for Solaris and Linux was introduced in 3.77, but the configuration had issues: these have also been resolved). * The Windows 95/98/NT (W32) version of GNU make now has native support for the Cygnus Cygwin release B20.1 shell (bash). * The GNU make regression test suite, long available separately "under the table", has been integrated into the release. You can invoke it by running "make check" in the distribution. Note that it requires Perl (either Perl 4 or Perl 5) to run. Version 3.77 (28 Jul 1998) * Implement BSD make's "?=" variable assignment operator. The variable is assigned the specified value only if that variable is not already defined. * Make defines a new variable, "CURDIR", to contain the current working directory (after the -C option, if any, has been processed). Modifying this variable has no effect on the operation of make. * Make defines a new default RCS rule, for new-style master file storage: ``% :: RCS/%'' (note no ``,v'' suffix). Make defines new default rules for DOS-style C++ file naming conventions, with ``.cpp'' suffixes. All the same rules as for ``.cc'' and ``.C'' suffixes are provided, along with LINK.cpp and COMPILE.cpp macros (which default to the same value as LINK.cc and COMPILE.cc). Note CPPFLAGS is still C preprocessor flags! You should use CXXFLAGS to change C++ compiler flags. * A new feature, "target-specific variable values", has been added. This is a large change so please see the appropriate sections of the manual for full details. Briefly, syntax like this: TARGET: VARIABLE = VALUE defines VARIABLE as VALUE within the context of TARGET. This is similar to SunOS make's "TARGET := VARIABLE = VALUE" feature. Note that the assignment may be of any type, not just recursive, and that the override keyword is available. COMPATIBILITY: This new syntax means that if you have any rules where the first or second dependency has an equal sign (=) in its name, you'll have to escape them with a backslash: "foo : bar\=baz". Further, if you have any dependencies which already contain "\=", you'll have to escape both of them: "foo : bar\\\=baz". * A new appendix listing the most common error and warning messages generated by GNU make, with some explanation, has been added to the GNU make User's Manual. * Updates to the GNU make Customs library support (see README.customs). * 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 * 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 $(). 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. Version 3.76.1 (19 Sep 1997) * Small (but serious) bug fix. Quick rollout to get into the GNU source CD. Version 3.76 (16 Sep 1997) * GNU make now uses automake to control Makefile.in generation. This should make it more consistent with the GNU standards. * VPATH functionality has been changed to incorporate the VPATH+ patch, previously maintained by Paul Smith . See the manual. * Make defines a new variable, `MAKECMDGOALS', to contain the goals that were specified on the command line, if any. Modifying this variable has no effect on the operation of make. * A new function, `$(wordlist S,E,TEXT)', is available: it returns a list of words from number S to number E (inclusive) of TEXT. * Instead of an error, detection of future modification times gives a warning and continues. The warning is repeated just before GNU make exits, so it is less likely to be lost. * Fix the $(basename) and $(suffix) functions so they only operate on the last filename, not the entire string: Command Old Result New Result ------- ---------- ---------- $(basename a.b) a a $(basename a.b/c) a a.b/c $(suffix a.b) b b $(suffix a.b/c) b/c * The $(strip) function now removes newlines as well as TABs and spaces. * The $(shell) function now changes CRLF (\r\n) pairs to a space as well as newlines (\n). * Updates to the Windows 95/NT port from Rob Tulloh (see README.W32). * Eli Zaretskii has updated the port to 32-bit protected mode on MSDOS and MS-Windows, building with the DJGPP v2 port of GNU C/C++ compiler and utilities. See README.DOS for details, and direct all questions concerning this port to Eli Zaretskii or DJ Delorie . * 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, are now omitted if Make runs no commands and has no other messages to print. * Make now detects files that for whatever reason have modification times in the future and gives an error. Files with such impossible timestamps can result from unsynchronized clocks, or archived distributions containing bogus timestamps; they confuse Make's dependency engine thoroughly. * The new directive `sinclude' is now recognized as another name for `-include', for compatibility with some other Makes. * Aaron Digulla has contributed a port to AmigaDOS. See README.Amiga for details, and direct all Amiga-related questions to . * 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 . * 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. Version 3.73 (05 Apr 1995) * Converted to use Autoconf version 2, so `configure' has some new options. See INSTALL for details. * You can now send a SIGUSR1 signal to Make to toggle printing of debugging output enabled by -d, at any time during the run. Version 3.72 (04 Nov 1994) * DJ Delorie has ported Make to MS-DOS using the GO32 extender. He is maintaining the DOS port, not the GNU Make maintainer; please direct bugs and questions for DOS to . MS-DOS binaries are available for FTP from ftp.simtel.net in /pub/simtelnet/gnu/djgpp/. * The `MAKEFLAGS' variable (in the environment or in a makefile) can now contain variable definitions itself; these are treated just like command line variable definitions. Make will automatically insert any variable definitions from the environment value of `MAKEFLAGS' or from the command line, into the `MAKEFLAGS' value exported to children. The `MAKEOVERRIDES' variable previously included in the value of `$(MAKE)' for sub-makes is now included in `MAKEFLAGS' instead. As before, you can reset `MAKEOVERRIDES' in your makefile to avoid putting all the variables in the environment when its size is limited. * If `.DELETE_ON_ERROR' appears as a target, Make will delete the target of a rule if it has changed when its recipe exits with a nonzero status, just as when the recipe gets a signal. * The automatic variable `$+' is new. It lists all the dependencies like `$^', but preserves duplicates listed in the makefile. This is useful for linking rules, where library files sometimes need to be listed twice in the link order. * You can now specify the `.IGNORE' and `.SILENT' special targets with dependencies to limit their effects to those files. If a file appears as a dependency of `.IGNORE', then errors will be ignored while running the recipe to update that file. Likewise if a file appears as a dependency of `.SILENT', then the recipe to update that file will not be printed before it is run. (This change was made to conform to POSIX.2.) Version 3.71 (21 May 1994) * The automatic variables `$(@D)', `$(%D)', `$(*D)', `$(. make-4.3/src/0000755000175000017500000000000013611151240010057 500000000000000make-4.3/src/vms_export_symbol.c0000644000175000017500000003333313603564437013764 00000000000000/* File: vms_export_symbol.c * * Some programs need special environment variables deported as DCL * DCL symbols. */ /* Copyright (C) 2014-2020 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 . */ /* Per copyright assignment agreement with the Free Software Foundation this software may be available under under other license agreements and copyrights. */ #include #include #include #include #include #include #include #include #include #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 make-4.3/src/getopt.h0000644000175000017500000001057013603564437011476 00000000000000/* Declarations for getopt. Copyright (C) 1989-2020 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. 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 . */ #ifndef _GETOPT_H #define _GETOPT_H 1 #ifdef __cplusplus extern "C" { #endif /* For communication from `getopt' to the caller. When `getopt' finds an option that takes an argument, the argument value is returned here. Also, when `ordering' is RETURN_IN_ORDER, each non-option ARGV-element is returned here. */ extern char *optarg; /* Index in ARGV of the next element to be scanned. This is used for communication to and from the caller and for communication between successive calls to `getopt'. On entry to `getopt', zero means this is the first call; initialize. When `getopt' returns -1, this is the index of the first of the non-option elements that the caller should itself scan. Otherwise, `optind' communicates from one call to the next how much of ARGV has been scanned so far. */ extern int optind; /* Callers store zero here to inhibit the error message `getopt' prints for unrecognized options. */ extern int opterr; /* Set to an option character which was unrecognized. */ extern int optopt; /* Describe the long-named options requested by the application. The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector of `struct option' terminated by an element containing a name which is zero. The field `has_arg' is: no_argument (or 0) if the option does not take an argument, required_argument (or 1) if the option requires an argument, optional_argument (or 2) if the option takes an optional argument. If the field `flag' is not NULL, it points to a variable that is set to the value given in the field `val' when the option is found, but left unchanged if the option is not found. To have a long-named option do something other than set an `int' to a compiled-in constant, such as set a value from `optarg', set the option's `flag' field to zero and its `val' field to a nonzero value (the equivalent single-letter option character, if there is one). For long options that have a zero `flag' field, `getopt' returns the contents of the `val' field. */ struct option { #if defined (__STDC__) && __STDC__ const char *name; #else char *name; #endif /* has_arg can't be an enum because some compilers complain about type mismatches in all the code that assumes it is an int. */ int has_arg; int *flag; int val; }; /* Names for the values of the `has_arg' field of `struct option'. */ #define no_argument 0 #define required_argument 1 #define optional_argument 2 #if defined (__STDC__) && __STDC__ #ifdef __GNU_LIBRARY__ /* Many other libraries have conflicting prototypes for getopt, with differences in the consts, in stdlib.h. To avoid compilation errors, only prototype getopt for the GNU C library. */ extern int getopt (int argc, char *const *argv, const char *shortopts); #else /* not __GNU_LIBRARY__ */ extern int getopt (); #endif /* __GNU_LIBRARY__ */ extern int getopt_long (int argc, char *const *argv, const char *shortopts, const struct option *longopts, int *longind); extern int getopt_long_only (int argc, char *const *argv, const char *shortopts, const struct option *longopts, int *longind); /* Internal only. Users should not call this directly. */ extern int _getopt_internal (int argc, char *const *argv, const char *shortopts, const struct option *longopts, int *longind, int long_only); #else /* not __STDC__ */ extern int getopt (); extern int getopt_long (); extern int getopt_long_only (); extern int _getopt_internal (); #endif /* __STDC__ */ #ifdef __cplusplus } #endif #endif /* getopt.h */ make-4.3/src/job.h0000644000175000017500000000655313611136373010745 00000000000000/* Definitions for managing subprocesses in GNU Make. Copyright (C) 1992-2020 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 . */ #include "output.h" /* Structure describing a running or dead child process. */ #ifdef VMS #define VMSCHILD \ 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 */ #else #define VMSCHILD #endif #define CHILDBASE \ char *cmd_name; /* Alloced copy of command run. */ \ char **environment; /* Environment for commands. */ \ VMSCHILD \ struct output output /* Output for this child. */ struct childbase { CHILDBASE; }; struct child { CHILDBASE; struct child *next; /* Link in the chain. */ struct file *file; /* File being remade. */ char *sh_batch_file; /* Script file for shell commands */ char **command_lines; /* Array of variable-expanded cmd lines. */ char *command_ptr; /* Ptr into command_lines[command_line]. */ unsigned int command_line; /* Index into command_lines. */ pid_t pid; /* Child process's ID number. */ unsigned int remote:1; /* Nonzero if executing remotely. */ 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 jobslot:1; /* Nonzero if it's reserved a job slot. */ 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); void start_waiting_jobs (void); char **construct_command_argv (char *line, char **restp, struct file *file, int cmd_flags, char** batch_file); pid_t child_execute_job (struct childbase *child, int good_stdin, char **argv); #ifdef _AMIGA void exec_command (char **argv) NORETURN; #elif defined(__EMX__) int exec_command (char **argv, char **envp); #else void exec_command (char **argv, char **envp) NORETURN; #endif void unblock_all_sigs (void); extern unsigned int job_slots_used; extern unsigned int jobserver_tokens; make-4.3/src/job.c0000644000175000017500000033636713611136373010751 00000000000000/* Job execution and handling for GNU Make. Copyright (C) 1988-2020 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 . */ #include "makeint.h" #include #include #include "job.h" #include "debug.h" #include "filedef.h" #include "commands.h" #include "variable.h" #include "os.h" /* Default shell to use. */ #ifdef WINDOWS32 # ifdef HAVE_STRINGS_H # include /* for strcasecmp, strncasecmp */ # endif # include const char *default_shell = "sh.exe"; int no_default_sh_exe = 1; int batch_mode_shell = 1; HANDLE main_thread; #elif defined (_AMIGA) const char *default_shell = ""; extern int MyExecute (char **); int batch_mode_shell = 0; #elif defined (__MSDOS__) /* The default shell is a pointer so we can change it if Makefile says so. It is without an explicit path so we get a chance to search the $PATH for it (since MSDOS doesn't have standard directories we could trust). */ const char *default_shell = "command.com"; int batch_mode_shell = 0; #elif defined (__EMX__) const char *default_shell = "/bin/sh"; int batch_mode_shell = 0; #elif defined (VMS) # include # include const char *default_shell = ""; int batch_mode_shell = 0; #define strsignal vms_strsignal char * vms_strsignal (int status); #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 const char *default_shell = "/bin/sh"; int batch_mode_shell = 0; #endif #ifdef __MSDOS__ # include static int execute_by_shell; static int dos_pid = 123; int dos_status; int dos_command_running; #endif /* __MSDOS__ */ #ifdef _AMIGA # include static int amiga_pid = 123; static int amiga_status; static char amiga_bname[32]; static int amiga_batch_file; #endif /* Amiga. */ #ifdef VMS # ifndef __GNUC__ # include # endif # include # include static void vmsWaitForChildren (int *); #endif #ifdef WINDOWS32 # include # include # include # include "sub_proc.h" # include "w32err.h" # include "pathstuff.h" # define WAIT_NOHANG 1 #endif /* WINDOWS32 */ #ifdef __EMX__ # include #endif #if defined (HAVE_SYS_WAIT_H) || defined (HAVE_UNION_WAIT) # include #endif #ifdef HAVE_WAITPID # define WAIT_NOHANG(status) waitpid (-1, (status), WNOHANG) #else /* Don't have waitpid. */ # ifdef HAVE_WAIT3 # ifndef wait3 extern int wait3 (); # endif # define WAIT_NOHANG(status) wait3 ((status), WNOHANG, (struct rusage *) 0) # endif /* Have wait3. */ #endif /* Have waitpid. */ #ifdef USE_POSIX_SPAWN # include # include "findprog.h" #endif #if !defined (wait) && !defined (POSIX) int wait (); #endif #ifndef HAVE_UNION_WAIT # define WAIT_T int # ifndef WTERMSIG # define WTERMSIG(x) ((x) & 0x7f) # endif # ifndef WCOREDUMP # define WCOREDUMP(x) ((x) & 0x80) # endif # ifndef WEXITSTATUS # define WEXITSTATUS(x) (((x) >> 8) & 0xff) # endif # ifndef WIFSIGNALED # define WIFSIGNALED(x) (WTERMSIG (x) != 0) # endif # ifndef WIFEXITED # define WIFEXITED(x) (WTERMSIG (x) == 0) # endif #else /* Have 'union wait'. */ # define WAIT_T union wait # ifndef WTERMSIG # define WTERMSIG(x) ((x).w_termsig) # endif # ifndef WCOREDUMP # define WCOREDUMP(x) ((x).w_coredump) # endif # ifndef WEXITSTATUS # define WEXITSTATUS(x) ((x).w_retcode) # endif # ifndef WIFSIGNALED # define WIFSIGNALED(x) (WTERMSIG(x) != 0) # endif # ifndef WIFEXITED # define WIFEXITED(x) (WTERMSIG(x) == 0) # endif #endif /* Don't have 'union wait'. */ #if !defined(HAVE_UNISTD_H) && !defined(WINDOWS32) int dup2 (); int execve (); void _exit (); # ifndef VMS int geteuid (); int getegid (); int setgid (); int getgid (); # endif #endif /* Different systems have different requirements for pid_t. Plus we have to support gettext string translation... Argh. */ static const char * pid2str (pid_t pid) { static char pidstring[100]; #if defined(WINDOWS32) && (__GNUC__ > 3 || _MSC_VER > 1300) /* %Id is only needed for 64-builds, which were not supported by older versions of Windows compilers. */ sprintf (pidstring, "%Id", pid); #else sprintf (pidstring, "%lu", (unsigned long) pid); #endif return pidstring; } #ifndef HAVE_GETLOADAVG int getloadavg (double loadavg[], int nelem); #endif static void free_child (struct child *); static void start_job_command (struct child *child); static int load_too_high (void); static int job_next_command (struct child *); static int start_waiting_job (struct child *); /* Chain of all live (or recently deceased) children. */ struct child *children = 0; /* Number of children currently running. */ unsigned int job_slots_used = 0; /* Nonzero if the 'good' standard input is in use. */ static int good_stdin_used = 0; /* Chain of children waiting to run until the load average goes down. */ static struct child *waiting_jobs = 0; /* Non-zero if we use a *real* shell (always so on Unix). */ int unixy_shell = 1; /* Number of jobs started in the current second. */ unsigned long job_counter = 0; /* Number of jobserver tokens this instance is currently using. */ unsigned int jobserver_tokens = 0; #ifdef WINDOWS32 /* * The macro which references this function is defined in makeint.h. */ int w32_kill (pid_t pid, int sig) { return ((process_kill ((HANDLE)pid, sig) == TRUE) ? 0 : -1); } /* This function creates a temporary file name with an extension specified * by the unixy arg. * Return an xmalloc'ed string of a newly created temp file and its * file descriptor, or die. */ static char * create_batch_file (char const *base, int unixy, int *fd) { const char *const ext = unixy ? "sh" : "bat"; const char *error_string = NULL; char temp_path[MAXPATHLEN]; /* need to know its length */ unsigned path_size = GetTempPath (sizeof temp_path, temp_path); int path_is_dot = 0; /* The following variable is static so we won't try to reuse a name that was generated a little while ago, because that file might not be on disk yet, since we use FILE_ATTRIBUTE_TEMPORARY below, which tells the OS it doesn't need to flush the cache to disk. If the file is not yet on disk, we might think the name is available, while it really isn't. This happens in parallel builds, where Make doesn't wait for one job to finish before it launches the next one. */ static unsigned uniq = 0; static int second_loop = 0; const size_t sizemax = strlen (base) + strlen (ext) + 10; if (path_size == 0) { path_size = GetCurrentDirectory (sizeof temp_path, temp_path); path_is_dot = 1; } ++uniq; if (uniq >= 0x10000 && !second_loop) { /* If we already had 64K batch files in this process, make a second loop through the numbers, looking for free slots, i.e. files that were deleted in the meantime. */ second_loop = 1; uniq = 1; } while (path_size > 0 && path_size + sizemax < sizeof temp_path && !(uniq >= 0x10000 && second_loop)) { unsigned size = sprintf (temp_path + path_size, "%s%s-%x.%s", temp_path[path_size - 1] == '\\' ? "" : "\\", base, uniq, ext); HANDLE h = CreateFile (temp_path, /* file name */ GENERIC_READ | GENERIC_WRITE, /* desired access */ 0, /* no share mode */ NULL, /* default security attributes */ CREATE_NEW, /* creation disposition */ FILE_ATTRIBUTE_NORMAL | /* flags and attributes */ FILE_ATTRIBUTE_TEMPORARY, /* we'll delete it */ NULL); /* no template file */ if (h == INVALID_HANDLE_VALUE) { const DWORD er = GetLastError (); if (er == ERROR_FILE_EXISTS || er == ERROR_ALREADY_EXISTS) { ++uniq; if (uniq == 0x10000 && !second_loop) { second_loop = 1; uniq = 1; } } /* the temporary path is not guaranteed to exist */ else if (path_is_dot == 0) { path_size = GetCurrentDirectory (sizeof temp_path, temp_path); path_is_dot = 1; } else { error_string = map_windows32_error_to_string (er); break; } } else { const unsigned final_size = path_size + size + 1; char *const path = xmalloc (final_size); memcpy (path, temp_path, final_size); *fd = _open_osfhandle ((intptr_t)h, 0); if (unixy) { char *p; int ch; for (p = path; (ch = *p) != 0; ++p) if (ch == '\\') *p = '/'; } return path; /* good return */ } } *fd = -1; if (error_string == NULL) error_string = _("Cannot create a temporary file\n"); O (fatal, NILF, error_string); /* not reached */ return NULL; } #endif /* WINDOWS32 */ #ifdef __EMX__ /* returns whether path is assumed to be a unix like shell. */ int _is_unixy_shell (const char *path) { /* list of non unix shells */ const char *known_os2shells[] = { "cmd.exe", "cmd", "4os2.exe", "4os2", "4dos.exe", "4dos", "command.com", "command", NULL }; /* find the rightmost '/' or '\\' */ const char *name = strrchr (path, '/'); const char *p = strrchr (path, '\\'); unsigned i; if (name && p) /* take the max */ name = (name > p) ? name : p; else if (p) /* name must be 0 */ name = p; else if (!name) /* name and p must be 0 */ name = path; if (*name == '/' || *name == '\\') name++; i = 0; while (known_os2shells[i] != NULL) { if (strcasecmp (name, known_os2shells[i]) == 0) return 0; /* not a unix shell */ i++; } /* in doubt assume a unix like shell */ return 1; } #endif /* __EMX__ */ /* determines whether path looks to be a Bourne-like shell. */ int is_bourne_compatible_shell (const char *path) { /* List of known POSIX (or POSIX-ish) shells. */ static const char *unix_shells[] = { "sh", "bash", "ksh", "rksh", "zsh", "ash", "dash", NULL }; const char **s; /* find the rightmost '/' or '\\' */ const char *name = strrchr (path, '/'); char *p = strrchr (path, '\\'); if (name && p) /* take the max */ name = (name > p) ? name : p; else if (p) /* name must be 0 */ name = p; else if (!name) /* name and p must be 0 */ name = path; if (*name == '/' || *name == '\\') ++name; /* this should be able to deal with extensions on Windows-like systems */ for (s = unix_shells; *s != NULL; ++s) { #if defined(WINDOWS32) || defined(__MSDOS__) size_t len = strlen (*s); if ((strlen (name) >= len && STOP_SET (name[len], MAP_DOT|MAP_NUL)) && strncasecmp (name, *s, len) == 0) #else if (strcmp (name, *s) == 0) #endif return 1; /* a known unix-style shell */ } /* if not on the list, assume it's not a Bourne-like shell */ return 0; } #ifdef POSIX extern sigset_t fatal_signal_set; static void block_sigs () { sigprocmask (SIG_BLOCK, &fatal_signal_set, (sigset_t *) 0); } static void unblock_sigs () { sigprocmask (SIG_UNBLOCK, &fatal_signal_set, (sigset_t *) 0); } void unblock_all_sigs () { sigset_t empty; sigemptyset (&empty); sigprocmask (SIG_SETMASK, &empty, (sigset_t *) 0); } #elif defined(HAVE_SIGSETMASK) extern int fatal_signal_mask; static void block_sigs () { sigblock (fatal_signal_mask); } static void unblock_sigs () { sigsetmask (siggetmask (0) & ~fatal_signal_mask) } void unblock_all_sigs () { sigsetmask (0); } #else #define block_sigs() #define unblock_sigs() void unblock_all_sigs () { } #endif /* Write an error message describing the exit status given in EXIT_CODE, EXIT_SIG, and COREDUMP, for the target TARGET_NAME. Append "(ignored)" if IGNORED is nonzero. */ static void child_error (struct child *child, int exit_code, int exit_sig, int coredump, int ignored) { const char *pre = "*** "; const char *post = ""; const char *dump = ""; const struct file *f = child->file; const floc *flocp = &f->cmds->fileinfo; const char *nm; size_t l; if (ignored && run_silent) return; if (exit_sig && coredump) dump = _(" (core dumped)"); if (ignored) { pre = ""; post = _(" (ignored)"); } if (! flocp->filenm) nm = _(""); else { char *a = alloca (strlen (flocp->filenm) + 6 + INTSTR_LENGTH + 1); sprintf (a, "%s:%lu", flocp->filenm, flocp->lineno + flocp->offset); nm = a; } l = strlen (pre) + strlen (nm) + strlen (f->name) + strlen (post); OUTPUT_SET (&child->output); show_goal_error (); if (exit_sig == 0) error (NILF, l + INTSTR_LENGTH, _("%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%s", pre, nm, f->name, s, dump, post); } OUTPUT_UNSET (); } /* Handle a dead child. This handler may or may not ever be installed. 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. */ static unsigned int dead_children = 0; RETSIGTYPE child_handler (int sig UNUSED) { ++dead_children; jobserver_signal (); #ifdef __EMX__ /* The signal handler must called only once! */ signal (SIGCHLD, SIG_DFL); #endif } 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 dead child, and removing the child from the chain. In addition, if BLOCK nonzero, we block in this function until we've reaped at least one complete child, waiting for it to die if necessary. If ERR is nonzero, print an error message first. */ void reap_children (int block, int err) { #ifndef WINDOWS32 WAIT_T status; #endif /* Initially, assume we have some. */ int reap_more = 1; #ifdef WAIT_NOHANG # define REAP_MORE reap_more #else # define REAP_MORE dead_children #endif /* As long as: We have at least one child outstanding OR a shell function in progress, AND We're blocking for a complete child OR there are more children to reap we'll keep reaping children. */ while ((children != 0 || shell_function_pid != 0) && (block || REAP_MORE)) { unsigned int remote = 0; pid_t pid; int exit_code, exit_sig, coredump; struct child *lastc, *c; int child_failed; int any_remote, any_local; int dontcare; if (err && block) { static int printed = 0; /* We might block for a while, so let the user know why. Only print this message once no matter how many jobs are left. */ fflush (stdout); if (!printed) O (error, NILF, _("*** Waiting for unfinished jobs....")); printed = 1; } /* We have one less dead child to reap. As noted in child_handler() above, this count is completely unimportant for all modern, POSIX-y systems that support wait3() or waitpid(). The rest of this comment below applies only to early, broken pre-POSIX systems. We keep the count only because... it's there... The test and decrement are not atomic; if it is compiled into: register = dead_children - 1; dead_children = register; a SIGCHLD could come between the two instructions. child_handler increments dead_children. The second instruction here would lose that increment. But the only effect of dead_children being wrong is that we might wait longer than necessary to reap a child, and lose some parallelism; and we might print the "Waiting for unfinished jobs" message above when not necessary. */ if (dead_children > 0) --dead_children; any_remote = 0; any_local = shell_function_pid != 0; lastc = 0; for (c = children; c != 0; lastc = c, c = c->next) { any_remote |= c->remote; any_local |= ! c->remote; /* If pid < 0, this child never even started. Handle it. */ if (c->pid < 0) { exit_sig = 0; coredump = 0; /* According to POSIX, 127 is used for command not found. */ exit_code = 127; goto process_child; } DB (DB_JOBS, (_("Live child %p (%s) PID %s %s\n"), c, c->file->name, pid2str (c->pid), c->remote ? _(" (remote)") : "")); #ifdef VMS break; #endif } /* First, check for remote children. */ if (any_remote) pid = remote_status (&exit_code, &exit_sig, &coredump, 0); else pid = 0; if (pid > 0) /* We got a remote child. */ remote = 1; else if (pid < 0) { /* A remote status command failed miserably. Punt. */ #if !defined(__MSDOS__) && !defined(_AMIGA) && !defined(WINDOWS32) remote_status_lose: #endif pfatal_with_name ("remote_status"); } else { /* No remote children. Check for local children. */ #if !defined(__MSDOS__) && !defined(_AMIGA) && !defined(WINDOWS32) 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)); #endif /* !VMS */ } else pid = 0; if (pid < 0) { /* The wait*() failed miserably. Punt. */ pfatal_with_name ("wait"); } else if (pid > 0) { /* We got a child exit; chop the status word up. */ exit_code = WEXITSTATUS (status); exit_sig = WIFSIGNALED (status) ? WTERMSIG (status) : 0; coredump = WCOREDUMP (status); } else { /* No local children are dead. */ reap_more = 0; if (!block || !any_remote) break; /* Now try a blocking wait for a remote child. */ pid = remote_status (&exit_code, &exit_sig, &coredump, 1); if (pid < 0) goto remote_status_lose; else if (pid == 0) /* No remote children either. Finally give up. */ break; /* We got a remote child. */ remote = 1; } #endif /* !__MSDOS__, !Amiga, !WINDOWS32. */ #ifdef __MSDOS__ /* Life is very different on MSDOS. */ pid = dos_pid - 1; status = dos_status; exit_code = WEXITSTATUS (status); if (exit_code == 0xff) exit_code = -1; exit_sig = WIFSIGNALED (status) ? WTERMSIG (status) : 0; coredump = 0; #endif /* __MSDOS__ */ #ifdef _AMIGA /* Same on Amiga */ pid = amiga_pid - 1; status = amiga_status; exit_code = amiga_status; exit_sig = 0; coredump = 0; #endif /* _AMIGA */ #ifdef WINDOWS32 { HANDLE hPID; HANDLE hcTID, hcPID; DWORD dwWaitStatus = 0; exit_code = 0; exit_sig = 0; coredump = 0; /* Record the thread ID of the main process, so that we could suspend it in the signal handler. */ if (!main_thread) { hcTID = GetCurrentThread (); hcPID = GetCurrentProcess (); if (!DuplicateHandle (hcPID, hcTID, hcPID, &main_thread, 0, FALSE, DUPLICATE_SAME_ACCESS)) { DWORD e = GetLastError (); fprintf (stderr, "Determine main thread ID (Error %ld: %s)\n", e, map_windows32_error_to_string (e)); } else DB (DB_VERBOSE, ("Main thread handle = %p\n", main_thread)); } /* wait for anything to finish */ hPID = process_wait_for_any (block, &dwWaitStatus); if (hPID) { /* was an error found on this process? */ int werr = process_last_err (hPID); /* get exit data */ exit_code = process_exit_code (hPID); /* the extra tests of exit_code are here to prevent map_windows32_error_to_string from calling 'fatal', which will then call reap_children again */ if (werr && exit_code > 0 && exit_code < WSABASEERR) fprintf (stderr, "make (e=%d): %s", exit_code, map_windows32_error_to_string (exit_code)); /* signal */ exit_sig = process_signal (hPID); /* cleanup process */ process_cleanup (hPID); coredump = 0; } else if (dwWaitStatus == WAIT_FAILED) { /* The WaitForMultipleObjects() failed miserably. Punt. */ pfatal_with_name ("WaitForMultipleObjects"); } else if (dwWaitStatus == WAIT_TIMEOUT) { /* No child processes are finished. Give up waiting. */ reap_more = 0; break; } pid = (pid_t) hPID; } #endif /* WINDOWS32 */ } /* Check if this is the child of the 'shell' function. */ if (!remote && pid == shell_function_pid) { shell_completed (exit_code, exit_sig); break; } /* Search for a child matching the deceased one. */ lastc = 0; for (c = children; c != 0; lastc = c, c = c->next) if (c->pid == pid && c->remote == remote) break; if (c == 0) /* An unknown child died. Ignore it; it was inherited from our invoker. */ continue; DB (DB_JOBS, (exit_sig == 0 && exit_code == 0 ? _("Reaping winning child %p PID %s %s\n") : _("Reaping losing child %p PID %s %s\n"), c, pid2str (c->pid), c->remote ? _(" (remote)") : "")); /* If we have started jobs in this second, remove one. */ if (job_counter) --job_counter; process_child: #if defined(USE_POSIX_SPAWN) /* Some versions of posix_spawn() do not detect errors such as command not found until after they fork. In that case they will exit with a code of 127. Try to detect that and provide a useful error message. Otherwise we'll just show the error below, as normal. */ if (exit_sig == 0 && exit_code == 127 && c->cmd_name) { const char *e = NULL; struct stat st; int r; /* There are various ways that this will show a different error than fork/exec. To really get the right error we'd have to fall back to fork/exec but I don't want to bother with that. Just do the best we can. */ EINTRLOOP(r, stat(c->cmd_name, &st)); if (r < 0) e = strerror (errno); else if (S_ISDIR(st.st_mode) || !(st.st_mode & S_IXUSR)) e = strerror (EACCES); else if (st.st_size == 0) e = strerror (ENOEXEC); if (e) OSS(error, NILF, "%s: %s", c->cmd_name, e); } #endif /* 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; if (c->sh_batch_file) { int rm_status; DB (DB_JOBS, (_("Cleaning up temp batch file %s\n"), c->sh_batch_file)); errno = 0; rm_status = remove (c->sh_batch_file); if (rm_status) DB (DB_JOBS, (_("Cleaning up temp batch file %s failed (%d)\n"), c->sh_batch_file, errno)); /* all done with memory */ free (c->sh_batch_file); c->sh_batch_file = NULL; } /* If this child had the good stdin, say it is now free. */ if (c->good_stdin) good_stdin_used = 0; dontcare = c->dontcare; if (child_failed && !c->noerror && !ignore_errors_flag) { /* The commands failed. Write an error message, delete non-precious targets, and abort. */ static int delete_on_error = -1; if (!dontcare && child_failed == MAKE_FAILURE) child_error (c, exit_code, exit_sig, coredump, 0); 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"); delete_on_error = f != 0 && f->is_target; } if (exit_sig != 0 || delete_on_error) delete_child_targets (c); } else { if (child_failed) { /* The commands failed, but we don't care. */ child_error (c, exit_code, exit_sig, coredump, 1); child_failed = 0; } /* If there are more commands to run, try to start them. */ if (job_next_command (c)) { if (handling_fatal_signal) { /* Never start new commands while we are dying. Since there are more commands that wanted to be run, the target was not completely remade. So we treat this as if a command had failed. */ c->file->update_status = us_failed; } else { #ifndef NO_OUTPUT_SYNC /* If we're sync'ing per line, write the previous line's output before starting the next one. */ if (output_sync == OUTPUT_SYNC_LINE) output_dump (&c->output); #endif /* Check again whether to start remotely. Whether or not we want to changes over time. Also, start_remote_job may need state set up by start_remote_job_p. */ c->remote = start_remote_job_p (0); start_job_command (c); /* Fatal signals are left blocked in case we were about to put that child on the chain. But it is already there, so it is safe for a fatal signal to arrive now; it will clean up this child's targets. */ unblock_sigs (); if (c->file->command_state == cs_running) /* We successfully started the new command. Loop to reap more children. */ continue; } if (c->file->update_status != us_success) /* We failed to start the commands. */ delete_child_targets (c); } else /* There are no more commands. We got through them all without an unignored error. Now the target has been successfully updated. */ c->file->update_status = us_success; } /* When we get here, all the commands for c->file are finished. */ #ifndef NO_OUTPUT_SYNC /* Synchronize any remaining parallel output. */ output_dump (&c->output); #endif /* At this point c->file->update_status is success or failed. But c->file->command_state is still cs_running if all the commands ran; notice_finished_file looks for cs_running to tell it that it's interesting to check the file's modtime again now. */ if (! handling_fatal_signal) /* Notice if the target of the commands has been changed. This also propagates its values for command_state and update_status to its also_make files. */ notice_finished_file (c->file); /* Block fatal signals while frobnicating the list, so that children and job_slots_used are always consistent. Otherwise a fatal signal arriving after the child is off the chain and before job_slots_used is decremented would believe a child was live and call reap_children again. */ block_sigs (); if (c->pid > 0) { DB (DB_JOBS, (_("Removing child %p PID %s%s from chain.\n"), c, pid2str (c->pid), c->remote ? _(" (remote)") : "")); } /* There is now another slot open. */ if (job_slots_used > 0) job_slots_used -= c->jobslot; /* Remove the child from the chain and free it. */ if (lastc == 0) children = c->next; else lastc->next = c->next; free_child (c); unblock_sigs (); /* If the job failed, and the -k flag was not given, die, unless we are already in the process of dying. */ if (!err && child_failed && !dontcare && !keep_going_flag && /* fatal_error_signal will die with the right signal. */ !handling_fatal_signal) die (child_failed); /* Only block for one child. */ block = 0; } return; } /* Free the storage allocated for CHILD. */ static void free_child (struct child *child) { output_close (&child->output); if (!jobserver_tokens) ONS (fatal, NILF, "INTERNAL: Freeing child %p (%s) but no tokens left!\n", child, child->file->name); /* If we're using the jobserver and this child is not the only outstanding job, put a token back into the pipe for it. */ if (jobserver_enabled () && jobserver_tokens > 1) { jobserver_release (1); DB (DB_JOBS, (_("Released token for child %p (%s).\n"), child, child->file->name)); } --jobserver_tokens; if (handling_fatal_signal) /* Don't bother free'ing if about to die. */ return; if (child->command_lines != 0) { unsigned int i; for (i = 0; i < child->file->cmds->ncommand_lines; ++i) free (child->command_lines[i]); free (child->command_lines); } if (child->environment != 0) { char **ep = child->environment; while (*ep != 0) free (*ep++); free (child->environment); } free (child->cmd_name); free (child); } /* Start a job to run the commands specified in CHILD. CHILD is updated to reflect the commands and ID of the child process. NOTE: On return fatal signals are blocked! The caller is responsible for calling 'unblock_sigs', once the new child is safely on the chain so it can be cleaned up in the event of a fatal signal. */ static void start_job_command (struct child *child) { int flags; char *p; #ifdef VMS # define FREE_ARGV(_a) char *argv; #else # define FREE_ARGV(_a) do{ if (_a) { free ((_a)[0]); free (_a); } }while(0) char **argv; #endif /* If we have a completely empty commandset, stop now. */ if (!child->command_ptr) goto next_command; /* Combine the flags parsed for the line itself with the flags specified globally for this target. */ flags = (child->file->command_flags | child->file->cmds->lines_flags[child->command_line - 1]); p = child->command_ptr; child->noerror = ((flags & COMMANDS_NOERROR) != 0); while (*p != '\0') { if (*p == '@') flags |= COMMANDS_SILENT; else if (*p == '+') flags |= COMMANDS_RECURSE; else if (*p == '-') child->noerror = 1; /* 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; /* POSIX requires that a recipe prefix after a backslash-newline should be ignored. Remove it now so the output is correct. */ { char prefix = child->file->cmds->recipe_prefix; char *p1, *p2; p1 = p2 = p; while (*p1 != '\0') { *(p2++) = *p1; if (p1[0] == '\n' && p1[1] == prefix) ++p1; ++p1; } *p2 = *p1; } /* Figure out an argument list from this command line. */ { 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; /* Please note, for VMS argv is a string (not an array of strings) which contains the complete command line, which for multi-line variables still includes the newlines. So detect newlines and set 'end' (which is used for child->command_ptr) instead of (re-)writing construct_command_argv */ if (!one_shell) { char *s = p; int instring = 0; while (*s) { if (*s == '"') instring = !instring; else if (*s == '\\' && !instring && *(s+1) != 0) s++; else if (*s == '\n' && !instring) { end = s; break; } ++s; } } #else argv = construct_command_argv (p, &end, child->file, child->file->cmds->lines_flags[child->command_line - 1], &child->sh_batch_file); #endif if (end == NULL) child->command_ptr = NULL; else { *end++ = '\0'; child->command_ptr = end; } } /* If -q was given, say that updating 'failed' if there was any text on the command line, or 'succeeded' otherwise. The exit status of 1 tells the user that -q is saying 'something to do'; the exit status for a random error is 2. */ if (argv != 0 && question_flag && !(flags & COMMANDS_RECURSE)) { FREE_ARGV (argv); #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)) { /* Go on to the next command. It might be the recursive one. We construct ARGV only to find the end of the command line. */ FREE_ARGV (argv); argv = 0; } if (argv == 0) { next_command: #ifdef __MSDOS__ execute_by_shell = 0; /* in case construct_command_argv sets it */ #endif /* This line has no commands. Go to the next. */ if (job_next_command (child)) start_job_command (child); else { /* No more commands. Make sure we're "running"; we might not be if (e.g.) all commands were skipped due to -n. */ set_command_state (child->file, cs_running); child->file->update_status = us_success; notice_finished_file (child->file); } OUTPUT_UNSET(); return; } /* Are we going to synchronize this command's output? Do so if either we're in SYNC_RECURSE mode or this command is not recursive. We'll also check output_sync separately below in case it changes due to error. */ child->output.syncout = output_sync && (output_sync == OUTPUT_SYNC_RECURSE || !(flags & COMMANDS_RECURSE)); OUTPUT_SET (&child->output); #ifndef NO_OUTPUT_SYNC if (! child->output.syncout) /* We don't want to sync this command: to avoid misordered output ensure any already-synced content is written. */ output_dump (&child->output); #endif /* Print the command if appropriate. */ if (just_print_flag || trace_flag || (!(flags & COMMANDS_SILENT) && !run_silent)) OS (message, 0, "%s", p); /* Tell update_goal_chain that a command has been started on behalf of this target. It is important that this happens here and not in reap_children (where we used to do it), because reap_children might be reaping children from a different target. We want this increment to guaranteedly indicate that a command was started for the dependency chain (i.e., update_file recursion chain) we are processing. */ ++commands_started; /* Optimize an empty command. People use this for timestamp rules, so avoid forking a useless shell. Do this after we increment commands_started so make still treats this special case as if it performed some action (makes a difference as to what messages are printed, etc. */ #if !defined(VMS) && !defined(_AMIGA) if ( #if defined __MSDOS__ || defined (__EMX__) unixy_shell /* the test is complicated and we already did it */ #else (argv[0] && is_bourne_compatible_shell (argv[0])) #endif && (argv[1] && argv[1][0] == '-' && ((argv[1][1] == 'c' && argv[1][2] == '\0') || (argv[1][1] == 'e' && argv[1][2] == 'c' && argv[1][3] == '\0'))) && (argv[2] && argv[2][0] == ':' && argv[2][1] == '\0') && argv[3] == NULL) { FREE_ARGV (argv); goto next_command; } #endif /* !VMS && !_AMIGA */ /* If -n was given, recurse to get the next line in the sequence. */ if (just_print_flag && !(flags & COMMANDS_RECURSE)) { FREE_ARGV (argv); goto next_command; } /* We're sure we're going to invoke a command: set up the output. */ output_start (); /* Flush the output streams so they won't have things written twice. */ fflush (stdout); fflush (stderr); /* 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. */ child->good_stdin = !good_stdin_used; if (child->good_stdin) good_stdin_used = 1; child->deleted = 0; #ifndef _AMIGA /* Set up the environment for the child. */ if (child->environment == 0) child->environment = target_environment (child->file); #endif #if !defined(__MSDOS__) && !defined(_AMIGA) && !defined(WINDOWS32) #ifndef VMS /* start_waiting_job has set CHILD->remote if we can start a remote job. */ if (child->remote) { int is_remote, used_stdin; pid_t id; if (start_remote_job (argv, child->environment, 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. */ goto run_local; else { if (child->good_stdin && !used_stdin) { child->good_stdin = 0; good_stdin_used = 0; } child->remote = is_remote; child->pid = id; } } else #endif /* !VMS */ { /* Fork the child process. */ char **parent_environ; run_local: block_sigs (); child->remote = 0; #ifdef VMS child->pid = child_execute_job ((struct childbase *)child, 1, argv); #else parent_environ = environ; jobserver_pre_child (flags & COMMANDS_RECURSE); child->pid = child_execute_job ((struct childbase *)child, child->good_stdin, argv); environ = parent_environ; /* Restore value child may have clobbered. */ jobserver_post_child (flags & COMMANDS_RECURSE); #endif /* !VMS */ } #else /* __MSDOS__ or Amiga or WINDOWS32 */ #ifdef __MSDOS__ { int proc_return; block_sigs (); dos_status = 0; /* We call 'system' to do the job of the SHELL, since stock DOS shell is too dumb. Our 'system' knows how to handle long command lines even if pipes/redirection is needed; it will only call COMMAND.COM when its internal commands are used. */ if (execute_by_shell) { char *cmdline = argv[0]; /* We don't have a way to pass environment to 'system', so we need to save and restore ours, sigh... */ char **parent_environ = environ; environ = child->environment; /* If we have a *real* shell, tell 'system' to call it to do everything for us. */ if (unixy_shell) { /* A *real* shell on MSDOS may not support long command lines the DJGPP way, so we must use 'system'. */ cmdline = argv[2]; /* get past "shell -c" */ } dos_command_running = 1; proc_return = system (cmdline); environ = parent_environ; execute_by_shell = 0; /* for the next time */ } else { dos_command_running = 1; proc_return = spawnvpe (P_WAIT, argv[0], argv, child->environment); } /* Need to unblock signals before turning off dos_command_running, so that child's signals will be treated as such (see fatal_error_signal). */ unblock_sigs (); dos_command_running = 0; /* If the child got a signal, dos_status has its high 8 bits set, so be careful not to alter them. */ if (proc_return == -1) dos_status |= 0xff; else dos_status |= (proc_return & 0xff); ++dead_children; child->pid = dos_pid++; } #endif /* __MSDOS__ */ #ifdef _AMIGA amiga_status = MyExecute (argv); ++dead_children; child->pid = amiga_pid++; if (amiga_batch_file) { amiga_batch_file = 0; DeleteFile (amiga_bname); /* Ignore errors. */ } #endif /* Amiga */ #ifdef WINDOWS32 { HANDLE hPID; char* arg0; int outfd = FD_STDOUT; int errfd = FD_STDERR; /* make UNC paths safe for CreateProcess -- backslash format */ arg0 = argv[0]; if (arg0 && arg0[0] == '/' && arg0[1] == '/') for ( ; arg0 && *arg0; arg0++) if (*arg0 == '/') *arg0 = '\\'; /* make sure CreateProcess() has Path it needs */ sync_Path_environment (); #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; } #else outfd = errfd = -1; #endif hPID = process_easy (argv, child->environment, outfd, errfd); if (hPID != INVALID_HANDLE_VALUE) child->pid = (pid_t) hPID; else { int i; unblock_sigs (); fprintf (stderr, _("process_easy() failed to launch process (e=%ld)\n"), process_last_err (hPID)); for (i = 0; argv[i]; i++) fprintf (stderr, "%s ", argv[i]); fprintf (stderr, _("\nCounted %d args in failed launch\n"), i); child->pid = -1; } } #endif /* WINDOWS32 */ #endif /* __MSDOS__ or Amiga or WINDOWS32 */ /* Bump the number of jobs started in this second. */ if (child->pid >= 0) ++job_counter; /* Set the state to running. */ set_command_state (child->file, cs_running); /* Free the storage used by the child's argument list. */ FREE_ARGV (argv); OUTPUT_UNSET(); #undef FREE_ARGV } /* Try to start a child running. Returns nonzero if the child was started (and maybe finished), or zero if the load was too high and the child was put on the 'waiting_jobs' chain. */ static int start_waiting_job (struct child *c) { struct file *f = c->file; /* If we can start a job remotely, we always want to, and don't care about the local load average. We record that the job should be started remotely in C->remote for start_job_command to test. */ c->remote = start_remote_job_p (1); /* If we are running at least one job already and the load average is too high, make this one wait. */ if (!c->remote && ((job_slots_used > 0 && load_too_high ()) #ifdef WINDOWS32 || process_table_full () #endif )) { /* Put this child on the chain of children waiting for the load average to go down. */ set_command_state (f, cs_running); c->next = waiting_jobs; waiting_jobs = c; return 0; } /* Start the first command; reap_children will run later command lines. */ start_job_command (c); switch (f->command_state) { case cs_running: c->next = children; if (c->pid > 0) { DB (DB_JOBS, (_("Putting child %p (%s) PID %s%s on the chain.\n"), c, c->file->name, pid2str (c->pid), c->remote ? _(" (remote)") : "")); /* One more job slot is in use. */ ++job_slots_used; assert (c->jobslot == 0); c->jobslot = 1; } children = c; unblock_sigs (); break; case cs_not_started: /* All the command lines turned out to be empty. */ f->update_status = us_success; /* FALLTHROUGH */ case cs_finished: notice_finished_file (f); free_child (c); break; default: assert (f->command_state == cs_finished); break; } return 1; } /* Create a 'struct child' for FILE and start its commands running. */ void new_job (struct file *file) { struct commands *cmds = file->cmds; struct child *c; char **lines; unsigned int i; /* Let any previously decided-upon jobs that are waiting for the load to go down start before this new one. */ start_waiting_jobs (); /* Reap any children that might have finished recently. */ reap_children (0, 0); /* Chop the commands up into lines if they aren't already. */ chop_commands (cmds); /* Start the command sequence, record it in a new 'struct child', and add that to the chain. */ c = xcalloc (sizeof (struct child)); output_init (&c->output); c->file = file; c->sh_batch_file = NULL; /* Cache dontcare flag because file->dontcare can be changed once we return. Check dontcare inheritance mechanism for details. */ c->dontcare = file->dontcare; /* Start saving output in case the expansion uses $(info ...) etc. */ OUTPUT_SET (&c->output); /* Expand the command lines and store the results in LINES. */ lines = xmalloc (cmds->ncommand_lines * sizeof (char *)); for (i = 0; i < cmds->ncommand_lines; ++i) { /* Collapse backslash-newline combinations that are inside variable or function references. These are left alone by the parser so that they will appear in the echoing of commands (where they look nice); and collapsed by construct_command_argv when it tokenizes. But letting them survive inside function invocations loses because we don't want the functions to see them as part of the text. */ char *in, *out, *ref; /* IN points to where in the line we are scanning. OUT points to where in the line we are writing. When we collapse a backslash-newline combination, IN gets ahead of OUT. */ in = out = cmds->command_lines[i]; while ((ref = strchr (in, '$')) != 0) { ++ref; /* Move past the $. */ if (out != in) /* Copy the text between the end of the last chunk we processed (where IN points) and the new chunk we are about to process (where REF points). */ memmove (out, in, ref - in); /* Move both pointers past the boring stuff. */ out += ref - in; in = ref; if (*ref == '(' || *ref == '{') { char openparen = *ref; char closeparen = openparen == '(' ? ')' : '}'; char *outref; int count; char *p; *out++ = *in++; /* Copy OPENPAREN. */ outref = out; /* IN now points past the opening paren or brace. Count parens or braces until it is matched. */ count = 0; while (*in != '\0') { if (*in == closeparen && --count < 0) break; else if (*in == '\\' && in[1] == '\n') { /* We have found a backslash-newline inside a variable or function reference. Eat it and any following whitespace. */ int quoted = 0; for (p = in - 1; p > ref && *p == '\\'; --p) quoted = !quoted; if (quoted) /* There were two or more backslashes, so this is not really a continuation line. We don't collapse the quoting backslashes here as is done in collapse_continuations, because the line will be collapsed again after expansion. */ *out++ = *in++; else { /* 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 (out[-1])) --out; /* Replace it all with a single space. */ *out++ = ' '; } } else { if (*in == openparen) ++count; *out++ = *in++; } } } } /* There are no more references in this line to worry about. Copy the remaining uninteresting text to the output. */ if (out != in) 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. */ job_next_command (c); /* Wait for a job slot to be freed up. If we allow an infinite number don't bother; also job_slots will == 0 if we're using the jobserver. */ if (job_slots != 0) while (job_slots_used == job_slots) reap_children (1, 0); #ifdef MAKE_JOBSERVER /* If we are controlling multiple jobs make sure we have a token before starting the child. */ /* This can be inefficient. There's a decent chance that this job won't actually have to run any subprocesses: the command script may be empty or otherwise optimized away. It would be nice if we could defer obtaining a token until just before we need it, in start_job_command. To do that we'd need to keep track of whether we'd already obtained a token (since start_job_command is called for each line of the job, not just once). Also more thought needs to go into the entire algorithm; this is where the old parallel job code waits, so... */ else if (jobserver_enabled ()) while (1) { int got_token; DB (DB_JOBS, ("Need a job token; we %shave children\n", children ? "" : "don't ")); /* If we don't already have a job started, use our "free" token. */ if (!jobserver_tokens) break; /* Prepare for jobserver token acquisition. */ jobserver_pre_acquire (); /* Reap anything that's currently waiting. */ reap_children (0, 0); /* Kick off any jobs we have waiting for an opportunity that can run now (i.e., waiting for load). */ start_waiting_jobs (); /* If our "free" slot is available, use it; we don't need a token. */ if (!jobserver_tokens) break; /* There must be at least one child already, or we have no business waiting for a token. */ if (!children) O (fatal, NILF, "INTERNAL: no children as we go to sleep on read\n"); /* Get a token. */ got_token = jobserver_acquire (waiting_jobs != NULL); /* If we got one, we're done here. */ if (got_token == 1) { DB (DB_JOBS, (_("Obtained token for child %p (%s).\n"), c, c->file->name)); break; } } #endif ++jobserver_tokens; /* Trace the build. Use message here so that changes to working directories are logged. */ if (trace_flag) { char *newer = allocated_variable_expand_for_file ("$?", c->file); const char *nm; if (! cmds->fileinfo.filenm) nm = _(""); else { char *n = alloca (strlen (cmds->fileinfo.filenm) + 1 + 11 + 1); sprintf (n, "%s:%lu", cmds->fileinfo.filenm, cmds->fileinfo.lineno); nm = n; } if (newer[0] == '\0') OSS (message, 0, _("%s: target '%s' does not exist"), nm, c->file->name); else OSSS (message, 0, _("%s: update target '%s' due to: %s"), nm, c->file->name, newer); free (newer); } /* The job is now primed. Start it running. (This will notice if there is in fact no recipe.) */ start_waiting_job (c); if (job_slots == 1 || not_parallel) /* Since there is only one job slot, make things run linearly. Wait for the child to die, setting the state to 'cs_finished'. */ while (file->command_state == cs_running) reap_children (1, 0); OUTPUT_UNSET (); return; } /* Move CHILD's pointers to the next command for it to execute. Returns nonzero if there is another command. */ static int job_next_command (struct child *child) { while (child->command_ptr == 0 || *child->command_ptr == '\0') { /* There are no more lines in the expansion of this line. */ if (child->command_line == child->file->cmds->ncommand_lines) { /* 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; } /* Determine if the load average on the system is too high to start a new job. On systems which provide /proc/loadavg (e.g., Linux), we use an idea provided by Sven C. Dack : retrieve the current number of processes the kernel is running and, if it's greater than the requested load we don't allow another job to start. We allow a job to start with equal processes since one of those will be for make itself, which will then pause waiting for jobs to clear. Otherwise, we obtain the system load average and compare that. The system load average is only recomputed once every N (N>=1) seconds. However, a very parallel make can easily start tens or even hundreds of jobs in a second, which brings the system to its knees for a while until that first batch of jobs clears out. To avoid this we use a weighted algorithm to try to account for jobs which have been started since the last second, and guess what the load average would be now if it were computed. This algorithm was provided by Thomas Riedl , based on load average being recomputed once per second, which is (apparently) how Solaris operates. Linux recomputes only once every 5 seconds, but Linux is handled by the /proc/loadavg algorithm above. Thomas writes: ! calculate something load-oid and add to the observed sys.load, ! so that latter can catch up: ! - every job started increases jobctr; ! - every dying job decreases a positive jobctr; ! - the jobctr value gets zeroed every change of seconds, ! after its value*weight_b is stored into the 'backlog' value last_sec ! - weight_a times the sum of jobctr and last_sec gets ! added to the observed sys.load. ! ! The two weights have been tried out on 24 and 48 proc. Sun Solaris-9 ! machines, using a several-thousand-jobs-mix of cpp, cc, cxx and smallish ! sub-shelled commands (rm, echo, sed...) for tests. ! lowering the 'direct influence' factor weight_a (e.g. to 0.1) ! resulted in significant excession of the load limit, raising it ! (e.g. to 0.5) took bad to small, fast-executing jobs and didn't ! reach the limit in most test cases. ! ! lowering the 'history influence' weight_b (e.g. to 0.1) resulted in ! exceeding the limit for longer-running stuff (compile jobs in ! the .5 to 1.5 sec. range),raising it (e.g. to 0.5) overrepresented ! small jobs' effects. */ #define LOAD_WEIGHT_A 0.25 #define LOAD_WEIGHT_B 0.25 static int load_too_high (void) { #if defined(__MSDOS__) || defined(VMS) || defined(_AMIGA) || defined(__riscos__) return 1; #else static double last_sec; static time_t last_now; /* This is disabled by default for now, because it will behave badly if the user gives a value > the number of cores; in that situation the load will never be exceeded, this function always returns false, and we'll start all the jobs. Also, it's not quite right to limit jobs to the number of cores not busy since a job takes some time to start etc. Maybe that's OK, I'm not sure exactly how to handle that, but for sure we need to clamp this value at the number of cores before this can be enabled. */ #define PROC_FD_INIT -1 static int proc_fd = PROC_FD_INIT; double load, guess; time_t now; #ifdef WINDOWS32 /* sub_proc.c is limited in the number of objects it can wait for. */ if (process_table_full ()) return 1; #endif if (max_load_average < 0) return 0; /* If we haven't tried to open /proc/loadavg, try now. */ #define LOADAVG "/proc/loadavg" if (proc_fd == -2) { EINTRLOOP (proc_fd, open (LOADAVG, O_RDONLY)); if (proc_fd < 0) DB (DB_JOBS, ("Using system load detection method.\n")); else { DB (DB_JOBS, ("Using " LOADAVG " load detection method.\n")); fd_noinherit (proc_fd); } } /* Try to read /proc/loadavg if we managed to open it. */ if (proc_fd >= 0) { int r; EINTRLOOP (r, lseek (proc_fd, 0, SEEK_SET)); if (r >= 0) { #define PROC_LOADAVG_SIZE 64 char avg[PROC_LOADAVG_SIZE+1]; EINTRLOOP (r, read (proc_fd, avg, PROC_LOADAVG_SIZE)); if (r >= 0) { const char *p; /* The syntax of /proc/loadavg is: <1m> <5m> <15m> / The load is considered too high if there are more jobs running than the requested average. */ avg[r] = '\0'; p = strchr (avg, ' '); if (p) p = strchr (p+1, ' '); if (p) p = strchr (p+1, ' '); if (p && ISDIGIT(p[1])) { int cnt = atoi (p+1); DB (DB_JOBS, ("Running: system = %d / make = %u (max requested = %f)\n", cnt, job_slots_used, max_load_average)); return (double)cnt > max_load_average; } DB (DB_JOBS, ("Failed to parse " LOADAVG ": %s\n", avg)); } } /* If we got here, something went wrong. Give up on this method. */ if (r < 0) DB (DB_JOBS, ("Failed to read " LOADAVG ": %s\n", strerror (errno))); close (proc_fd); proc_fd = -1; } /* Find the real system load average. */ make_access (); if (getloadavg (&load, 1) != 1) { static int lossage = -1; /* Complain only once for the same error. */ if (lossage == -1 || errno != lossage) { if (errno == 0) /* An errno value of zero means getloadavg is just unsupported. */ O (error, NILF, _("cannot enforce load limits on this operating system")); else perror_with_name (_("cannot enforce load limit: "), "getloadavg"); } lossage = errno; load = 0; } user_access (); /* If we're in a new second zero the counter and correct the backlog value. Only keep the backlog for one extra second; after that it's 0. */ now = time (NULL); if (last_now < now) { if (last_now == now - 1) last_sec = LOAD_WEIGHT_B * job_counter; else last_sec = 0.0; job_counter = 0; last_now = now; } /* Try to guess what the load would be right now. */ guess = load + (LOAD_WEIGHT_A * (job_counter + last_sec)); DB (DB_JOBS, ("Estimated system load = %f (actual = %f) (max requested = %f)\n", guess, load, max_load_average)); return guess >= max_load_average; #endif } /* Start jobs that are waiting for the load to be lower. */ void start_waiting_jobs (void) { struct child *job; if (waiting_jobs == 0) return; do { /* Check for recently deceased descendants. */ reap_children (0, 0); /* Take a job off the waiting list. */ job = waiting_jobs; waiting_jobs = job->next; /* Try to start that job. We break out of the loop as soon as start_waiting_job puts one back on the waiting list. */ } while (start_waiting_job (job) && waiting_jobs != 0); return; } #ifndef WINDOWS32 /* EMX: Start a child process. This function returns the new pid. */ # if defined __EMX__ pid_t child_execute_job (struct childbase *child, int good_stdin, char **argv) { pid_t pid; 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 (child->output.syncout) { if (child->output.out >= 0) fdout = child->output.out; if (child->output.err >= 0) fderr = child->output.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 (fdin != FD_STDIN) { save_fdin = dup (FD_STDIN); if (save_fdin < 0) O (fatal, NILF, _("no more file handles: could not duplicate stdin\n")); fd_noinherit (save_fdin); dup2 (fdin, FD_STDIN); fd_noinherit (fdin); } if (fdout != FD_STDOUT) { save_fdout = dup (FD_STDOUT); if (save_fdout < 0) O (fatal, NILF, _("no more file handles: could not duplicate stdout\n")); fd_noinherit (save_fdout); dup2 (fdout, FD_STDOUT); fd_noinherit (fdout); } if (fderr != FD_STDERR) { if (fderr != fdout) { save_fderr = dup (FD_STDERR); if (save_fderr < 0) O (fatal, NILF, _("no more file handles: could not duplicate stderr\n")); fd_noinherit (save_fderr); } dup2 (fderr, FD_STDERR); fd_noinherit (fderr); } /* Run the command. */ pid = exec_command (argv, child->environment); /* Restore stdout/stdin/stderr of the parent and close temporary FDs. */ if (save_fdin >= 0) { if (dup2 (save_fdin, FD_STDIN) != FD_STDIN) O (fatal, NILF, _("Could not restore stdin\n")); else close (save_fdin); } if (save_fdout >= 0) { if (dup2 (save_fdout, FD_STDOUT) != FD_STDOUT) O (fatal, NILF, _("Could not restore stdout\n")); else close (save_fdout); } if (save_fderr >= 0) { if (dup2 (save_fderr, FD_STDERR) != FD_STDERR) O (fatal, NILF, _("Could not restore stderr\n")); else close (save_fderr); } if (pid < 0) OSS (error, NILF, "%s: %s", argv[0], strerror (errno)); return pid; } #elif !defined (_AMIGA) && !defined (__MSDOS__) && !defined (VMS) /* POSIX: Create a child process executing the command in ARGV. Returns the PID or -1. */ pid_t child_execute_job (struct childbase *child, int good_stdin, char **argv) { const int fdin = good_stdin ? FD_STDIN : get_bad_stdin (); int fdout = FD_STDOUT; int fderr = FD_STDERR; pid_t pid; int r; #if defined(USE_POSIX_SPAWN) char *cmd; posix_spawnattr_t attr; posix_spawn_file_actions_t fa; short flags = 0; #endif /* Divert child output if we want to capture it. */ if (child->output.syncout) { if (child->output.out >= 0) fdout = child->output.out; if (child->output.err >= 0) fderr = child->output.err; } #if !defined(USE_POSIX_SPAWN) pid = vfork(); if (pid != 0) return pid; /* We are the child. */ unblock_all_sigs (); #ifdef SET_STACK_SIZE /* Reset limits, if necessary. */ if (stack_limit.rlim_cur) setrlimit (RLIMIT_STACK, &stack_limit); #endif /* For any redirected FD, dup2() it to the standard FD. They are all marked close-on-exec already. */ if (fdin >= 0 && 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, child->environment); #else /* USE_POSIX_SPAWN */ if ((r = posix_spawnattr_init (&attr)) != 0) goto done; if ((r = posix_spawn_file_actions_init (&fa)) != 0) { posix_spawnattr_destroy (&attr); goto done; } /* Unblock all signals. */ #ifdef HAVE_POSIX_SPAWNATTR_SETSIGMASK { sigset_t mask; sigemptyset (&mask); r = posix_spawnattr_setsigmask (&attr, &mask); if (r != 0) goto cleanup; flags |= POSIX_SPAWN_SETSIGMASK; } #endif /* have posix_spawnattr_setsigmask() */ /* USEVFORK can give significant speedup on systems where it's available. */ #ifdef POSIX_SPAWN_USEVFORK flags |= POSIX_SPAWN_USEVFORK; #endif /* For any redirected FD, dup2() it to the standard FD. They are all marked close-on-exec already. */ if (fdin >= 0 && fdin != FD_STDIN) if ((r = posix_spawn_file_actions_adddup2 (&fa, fdin, FD_STDIN)) != 0) goto cleanup; if (fdout != FD_STDOUT) if ((r = posix_spawn_file_actions_adddup2 (&fa, fdout, FD_STDOUT)) != 0) goto cleanup; if (fderr != FD_STDERR) if ((r = posix_spawn_file_actions_adddup2 (&fa, fderr, FD_STDERR)) != 0) goto cleanup; /* Be the user, permanently. */ flags |= POSIX_SPAWN_RESETIDS; /* Apply the spawn flags. */ if ((r = posix_spawnattr_setflags (&attr, flags)) != 0) goto cleanup; /* Look up the program on the child's PATH, if needed. */ { const char *p = NULL; char **pp; for (pp = child->environment; *pp != NULL; ++pp) if ((*pp)[0] == 'P' && (*pp)[1] == 'A' && (*pp)[2] == 'T' && (*pp)[3] == 'H' &&(*pp)[4] == '=') { p = (*pp) + 5; break; } cmd = (char *)find_in_given_path (argv[0], p, 0); } if (!cmd) { r = errno; goto cleanup; } /* Start the program. */ while ((r = posix_spawn (&pid, cmd, &fa, &attr, argv, child->environment)) == EINTR) ; /* posix_spawn() doesn't provide sh fallback like exec() does; implement it here. POSIX doesn't specify the path to sh so use the default. */ if (r == ENOEXEC) { char **nargv; char **pp; size_t l = 0; for (pp = argv; *pp != NULL; ++pp) ++l; nargv = xmalloc (sizeof (char *) * (l + 3)); nargv[0] = (char *)default_shell; nargv[1] = cmd; memcpy (&nargv[2], &argv[1], sizeof (char *) * l); while ((r = posix_spawn (&pid, nargv[0], &fa, &attr, nargv, child->environment)) == EINTR) ; free (nargv); } if (r == 0) { /* Spawn succeeded but may fail later: remember the command. */ free (child->cmd_name); if (cmd != argv[0]) child->cmd_name = cmd; else child->cmd_name = xstrdup(cmd); } cleanup: posix_spawn_file_actions_destroy (&fa); posix_spawnattr_destroy (&attr); done: if (r != 0) pid = -1; #endif /* USE_POSIX_SPAWN */ if (pid < 0) OSS (error, NILF, "%s: %s", argv[0], strerror (r)); return pid; } #endif /* !AMIGA && !__MSDOS__ && !VMS */ #endif /* !WINDOWS32 */ #ifndef _AMIGA /* Replace the current process with one running the command in ARGV, with environment ENVP. This function does not return. */ /* EMX: This function returns the pid of the child process. */ # ifdef __EMX__ pid_t # else void # endif exec_command (char **argv, char **envp) { #ifdef VMS /* to work around a problem with signals and execve: ignore them */ #ifdef SIGCHLD signal (SIGCHLD,SIG_IGN); #endif /* Run the program. */ execve (argv[0], argv, envp); OSS (error, NILF, "%s: %s", argv[0], strerror (errno)); _exit (EXIT_FAILURE); #else #ifdef WINDOWS32 HANDLE hPID; HANDLE hWaitPID; int exit_code = EXIT_FAILURE; /* make sure CreateProcess() has Path it needs */ sync_Path_environment (); /* launch command */ hPID = process_easy (argv, envp, -1, -1); /* make sure launch ok */ if (hPID == INVALID_HANDLE_VALUE) { int i; fprintf (stderr, _("process_easy() failed to launch process (e=%ld)\n"), process_last_err (hPID)); for (i = 0; argv[i]; i++) fprintf (stderr, "%s ", argv[i]); fprintf (stderr, _("\nCounted %d args in failed launch\n"), i); exit (EXIT_FAILURE); } /* wait and reap last child */ hWaitPID = process_wait_for_any (1, 0); while (hWaitPID) { /* was an error found on this process? */ int err = process_last_err (hWaitPID); /* get exit data */ exit_code = process_exit_code (hWaitPID); if (err) fprintf (stderr, "make (e=%d, rc=%d): %s", err, exit_code, map_windows32_error_to_string (err)); /* cleanup process */ process_cleanup (hWaitPID); /* expect to find only last pid, warn about other pids reaped */ if (hWaitPID == hPID) break; else { char *pidstr = xstrdup (pid2str ((pid_t)hWaitPID)); fprintf (stderr, _("make reaped child pid %s, still waiting for pid %s\n"), pidstr, pid2str ((pid_t)hPID)); free (pidstr); } } /* return child's exit code as our exit code */ exit (exit_code); #else /* !WINDOWS32 */ # ifdef __EMX__ pid_t pid; # endif /* Be the user, permanently. */ child_access (); # ifdef __EMX__ /* Run the program. */ pid = spawnvpe (P_NOWAIT, argv[0], argv, envp); if (pid >= 0) return pid; /* the file might have a strange shell extension */ if (errno == ENOENT) errno = ENOEXEC; # else /* Run the program. */ environ = envp; execvp (argv[0], argv); # endif /* !__EMX__ */ switch (errno) { case ENOENT: OSS (error, NILF, "%s: %s", argv[0], strerror (errno)); break; case ENOEXEC: { /* The file was not a program. Try it as a shell script. */ const char *shell; char **new_argv; int argc; int i=1; # ifdef __EMX__ /* Do not use $SHELL from the environment */ struct variable *p = lookup_variable ("SHELL", 5); if (p) shell = p->value; else shell = 0; # else shell = getenv ("SHELL"); # endif if (shell == 0) shell = default_shell; argc = 1; while (argv[argc] != 0) ++argc; # ifdef __EMX__ if (!unixy_shell) ++argc; # endif new_argv = alloca ((1 + argc + 1) * sizeof (char *)); new_argv[0] = (char *)shell; # ifdef __EMX__ if (!unixy_shell) { new_argv[1] = "/c"; ++i; --argc; } # endif new_argv[i] = argv[0]; while (argc > 0) { new_argv[i + argc] = argv[argc]; --argc; } # ifdef __EMX__ pid = spawnvpe (P_NOWAIT, shell, new_argv, envp); if (pid >= 0) break; # else execvp (shell, new_argv); # endif OSS (error, NILF, "%s: %s", new_argv[0], strerror (errno)); break; } # ifdef __EMX__ case EINVAL: /* this nasty error was driving me nuts :-( */ O (error, NILF, _("spawnvpe: environment space might be exhausted")); /* FALLTHROUGH */ # endif default: OSS (error, NILF, "%s: %s", argv[0], strerror (errno)); break; } # ifdef __EMX__ return pid; # else _exit (127); # endif #endif /* !WINDOWS32 */ #endif /* !VMS */ } #else /* On Amiga */ void exec_command (char **argv) { MyExecute (argv); } void clean_tmp (void) { DeleteFile (amiga_bname); } #endif /* On Amiga */ #ifndef VMS /* Figure out the argument list necessary to run LINE as a command. Try to avoid using a shell. This routine handles only ' quoting, and " quoting when no backslash, $ or ' characters are seen in the quotes. Starting quotes may be escaped with a backslash. If any of the characters in sh_chars is seen, or any of the builtin commands listed in sh_cmds is the first word of a line, the shell is used. If RESTP is not NULL, *RESTP is set to point to the first newline in LINE. If *RESTP is NULL, newlines will be ignored. SHELL is the shell to use, or nil to use the default shell. IFS is the value of $IFS, or nil (meaning the default). FLAGS is the value of lines_flags for this command line. It is used in the WINDOWS32 port to check whether + or $(MAKE) were found in this command line, in which case the effect of just_print_flag is overridden. */ static char ** construct_command_argv_internal (char *line, char **restp, const char *shell, const char *shellflags, const char *ifs, int flags, char **batch_filename UNUSED) { #ifdef __MSDOS__ /* MSDOS supports both the stock DOS shell and ports of Unixy shells. We call 'system' for anything that requires ''slow'' processing, because DOS shells are too dumb. When $SHELL points to a real (unix-style) shell, 'system' just calls it to do everything. When $SHELL points to a DOS shell, 'system' does most of the work internally, calling the shell only for its internal commands. However, it looks on the $PATH first, so you can e.g. have an external command named 'mkdir'. Since we call 'system', certain characters and commands below are actually not specific to COMMAND.COM, but to the DJGPP implementation of 'system'. In particular: The shell wildcard characters are in DOS_CHARS because they will not be expanded if we call the child via 'spawnXX'. The ';' is in DOS_CHARS, because our 'system' knows how to run multiple commands on a single line. DOS_CHARS also include characters special to 4DOS/NDOS, so we won't have to tell one from another and have one more set of commands and special characters. */ static const char *sh_chars_dos = "*?[];|<>%^&()"; static const char *sh_cmds_dos[] = { "break", "call", "cd", "chcp", "chdir", "cls", "copy", "ctty", "date", "del", "dir", "echo", "erase", "exit", "for", "goto", "if", "md", "mkdir", "path", "pause", "prompt", "rd", "rmdir", "rem", "ren", "rename", "set", "shift", "time", "type", "ver", "verify", "vol", ":", 0 }; static const char *sh_chars_sh = "#;\"*?[]&|<>(){}$`^"; static const char *sh_cmds_sh[] = { "cd", "echo", "eval", "exec", "exit", "login", "logout", "set", "umask", "wait", "while", "for", "case", "if", ":", ".", "break", "continue", "export", "read", "readonly", "shift", "times", "trap", "switch", "unset", "ulimit", "command", 0 }; const char *sh_chars; const char **sh_cmds; #elif defined (__EMX__) static const char *sh_chars_dos = "*?[];|<>%^&()"; static const char *sh_cmds_dos[] = { "break", "call", "cd", "chcp", "chdir", "cls", "copy", "ctty", "date", "del", "dir", "echo", "erase", "exit", "for", "goto", "if", "md", "mkdir", "path", "pause", "prompt", "rd", "rmdir", "rem", "ren", "rename", "set", "shift", "time", "type", "ver", "verify", "vol", ":", 0 }; static const char *sh_chars_os2 = "*?[];|<>%^()\"'&"; static const char *sh_cmds_os2[] = { "call", "cd", "chcp", "chdir", "cls", "copy", "date", "del", "detach", "dir", "echo", "endlocal", "erase", "exit", "for", "goto", "if", "keys", "md", "mkdir", "move", "path", "pause", "prompt", "rd", "rem", "ren", "rename", "rmdir", "set", "setlocal", "shift", "start", "time", "type", "ver", "verify", "vol", ":", 0 }; static const char *sh_chars_sh = "#;\"*?[]&|<>(){}$`^~'"; static const char *sh_cmds_sh[] = { "echo", "cd", "eval", "exec", "exit", "login", "logout", "set", "umask", "wait", "while", "for", "case", "if", ":", ".", "break", "continue", "export", "read", "readonly", "shift", "times", "trap", "switch", "unset", "command", 0 }; const char *sh_chars; const char **sh_cmds; #elif defined (_AMIGA) static const char *sh_chars = "#;\"|<>()?*$`"; static const char *sh_cmds[] = { "cd", "eval", "if", "delete", "echo", "copy", "rename", "set", "setenv", "date", "makedir", "skip", "else", "endif", "path", "prompt", "unset", "unsetenv", "version", "command", 0 }; #elif defined (WINDOWS32) /* We used to have a double quote (") in sh_chars_dos[] below, but that caused any command line with quoted file names be run through a temporary batch file, which introduces command-line limit of 4K charcaters imposed by cmd.exe. Since CreateProcess can handle quoted file names just fine, removing the quote lifts the limit from a very frequent use case, because using quoted file names is commonplace on MS-Windows. */ static const char *sh_chars_dos = "|&<>"; static const char *sh_cmds_dos[] = { "assoc", "break", "call", "cd", "chcp", "chdir", "cls", "color", "copy", "ctty", "date", "del", "dir", "echo", "echo.", "endlocal", "erase", "exit", "for", "ftype", "goto", "if", "if", "md", "mkdir", "move", "path", "pause", "prompt", "rd", "rem", "ren", "rename", "rmdir", "set", "setlocal", "shift", "time", "title", "type", "ver", "verify", "vol", ":", 0 }; static const char *sh_chars_sh = "#;\"*?[]&|<>(){}$`^"; static const char *sh_cmds_sh[] = { "cd", "eval", "exec", "exit", "login", "logout", "set", "umask", "wait", "while", "for", "case", "if", ":", ".", "break", "continue", "export", "read", "readonly", "shift", "times", "trap", "switch", "test", "command", #ifdef BATCH_MODE_ONLY_SHELL "echo", #endif 0 }; const char *sh_chars; const char **sh_cmds; #elif defined(__riscos__) static const char *sh_chars = ""; static const char *sh_cmds[] = { 0 }; #else /* must be UNIX-ish */ static const char *sh_chars = "#;\"*?[]&|<>(){}$`^~!"; static const char *sh_cmds[] = { ".", ":", "alias", "bg", "break", "case", "cd", "command", "continue", "eval", "exec", "exit", "export", "fc", "fg", "for", "getopts", "hash", "if", "jobs", "login", "logout", "read", "readonly", "return", "set", "shift", "test", "times", "trap", "type", "ulimit", "umask", "unalias", "unset", "wait", "while", 0 }; # ifdef HAVE_DOS_PATHS /* This is required if the MSYS/Cygwin ports (which do not define WINDOWS32) are compiled with HAVE_DOS_PATHS defined, which uses sh_chars_sh directly (see below). The value must be identical to that of sh_chars immediately above. */ static const char *sh_chars_sh = "#;\"*?[]&|<>(){}$`^~!"; # endif /* HAVE_DOS_PATHS */ #endif size_t i; char *p; #ifndef NDEBUG char *end; #endif char *ap; const char *cap; const char *cp; int instring, word_has_equals, seen_nonequals, last_argument_was_empty; char **new_argv = 0; char *argstr = 0; #ifdef WINDOWS32 int slow_flag = 0; if (!unixy_shell) { sh_cmds = sh_cmds_dos; sh_chars = sh_chars_dos; } else { sh_cmds = sh_cmds_sh; sh_chars = sh_chars_sh; } #endif /* WINDOWS32 */ if (restp != NULL) *restp = NULL; /* Make sure not to bother processing an empty line but stop at newline. */ while (ISBLANK (*line)) ++line; if (*line == '\0') return 0; if (shellflags == 0) shellflags = posix_pedantic ? "-ec" : "-c"; /* See if it is safe to parse commands internally. */ if (shell == 0) shell = default_shell; #ifdef WINDOWS32 else if (strcmp (shell, default_shell)) { char *s1 = _fullpath (NULL, shell, 0); char *s2 = _fullpath (NULL, default_shell, 0); slow_flag = strcmp ((s1 ? s1 : ""), (s2 ? s2 : "")); free (s1); free (s2); } if (slow_flag) goto slow; #else /* not WINDOWS32 */ #if defined (__MSDOS__) || defined (__EMX__) else if (strcasecmp (shell, default_shell)) { extern int _is_unixy_shell (const char *_path); DB (DB_BASIC, (_("$SHELL changed (was '%s', now '%s')\n"), default_shell, shell)); unixy_shell = _is_unixy_shell (shell); /* we must allocate a copy of shell: construct_command_argv() will free * shell after this function returns. */ default_shell = xstrdup (shell); } if (unixy_shell) { sh_chars = sh_chars_sh; sh_cmds = sh_cmds_sh; } else { sh_chars = sh_chars_dos; sh_cmds = sh_cmds_dos; # ifdef __EMX__ if (_osmode == OS2_MODE) { sh_chars = sh_chars_os2; sh_cmds = sh_cmds_os2; } # endif } #else /* !__MSDOS__ */ else if (strcmp (shell, default_shell)) goto slow; #endif /* !__MSDOS__ && !__EMX__ */ #endif /* not WINDOWS32 */ if (ifs) for (cap = ifs; *cap != '\0'; ++cap) if (*cap != ' ' && *cap != '\t' && *cap != '\n') goto slow; if (shellflags) if (shellflags[0] != '-' || ((shellflags[1] != 'c' || shellflags[2] != '\0') && (shellflags[1] != 'e' || shellflags[2] != 'c' || shellflags[3] != '\0'))) goto slow; i = strlen (line) + 1; /* More than 1 arg per character is impossible. */ new_argv = xmalloc (i * sizeof (char *)); /* All the args can fit in a buffer as big as LINE is. */ ap = new_argv[0] = argstr = xmalloc (i); #ifndef NDEBUG end = ap + i; #endif /* I is how many complete arguments have been found. */ i = 0; instring = word_has_equals = seen_nonequals = last_argument_was_empty = 0; for (p = line; *p != '\0'; ++p) { assert (ap <= end); if (instring) { /* Inside a string, just copy any char except a closing quote or a backslash-newline combination. */ if (*p == instring) { instring = 0; if (ap == new_argv[0] || *(ap-1) == '\0') last_argument_was_empty = 1; } else if (*p == '\\' && p[1] == '\n') { /* Backslash-newline is handled differently depending on what kind of string we're in: inside single-quoted strings you keep them; in double-quoted strings they disappear. For DOS/Windows/OS2, if we don't have a POSIX shell, we keep the pre-POSIX behavior of removing the backslash-newline. */ if (instring == '"' #if defined (__MSDOS__) || defined (__EMX__) || defined (WINDOWS32) || !unixy_shell #endif ) ++p; else { *(ap++) = *(p++); *(ap++) = *p; } } else if (*p == '\n' && restp != NULL) { /* End of the command line. */ *restp = p; goto end_of_line; } /* Backslash, $, and ` are special inside double quotes. If we see any of those, punt. But on MSDOS, if we use COMMAND.COM, double and single quotes have the same effect. */ 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 else *ap++ = *p; } else if (strchr (sh_chars, *p) != 0) /* Not inside a string, but it's a special char. */ goto slow; else if (one_shell && *p == '\n') /* In .ONESHELL mode \n is a separator like ; or && */ goto slow; #ifdef __MSDOS__ else if (*p == '.' && p[1] == '.' && p[2] == '.' && p[3] != '.') /* '...' is a wildcard in DJGPP. */ goto slow; #endif else /* Not a special char. */ switch (*p) { case '=': /* Equals is a special character in leading words before the first word with no equals sign in it. This is not the case with sh -k, but we never get here when using nonstandard shell flags. */ if (! seen_nonequals && unixy_shell) goto slow; word_has_equals = 1; *ap++ = '='; break; case '\\': /* Backslash-newline has special case handling, ref POSIX. We're in the fastpath, so emulate what the shell would do. */ if (p[1] == '\n') { /* Throw out the backslash and newline. */ ++p; /* At the beginning of the argument, skip any whitespace other than newline before the start of the next word. */ if (ap == new_argv[i]) 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) { *ap++ = *p; break; } #endif else if (p[1] != '\0') { #ifdef HAVE_DOS_PATHS /* Only remove backslashes before characters special to Unixy shells. All other backslashes are copied verbatim, since they are probably DOS-style directory separators. This still leaves a small window for problems, but at least it should work for the vast majority of naive users. */ #ifdef __MSDOS__ /* A dot is only special as part of the "..." wildcard. */ if (strneq (p + 1, ".\\.\\.", 5)) { *ap++ = '.'; *ap++ = '.'; p += 4; } else #endif if (p[1] != '\\' && p[1] != '\'' && !ISSPACE (p[1]) && strchr (sh_chars_sh, p[1]) == 0) /* back up one notch, to copy the backslash */ --p; #endif /* HAVE_DOS_PATHS */ /* Copy and skip the following char. */ *ap++ = *++p; } break; case '\'': case '"': instring = *p; break; case '\n': if (restp != NULL) { /* End of the command line. */ *restp = p; goto end_of_line; } else /* Newlines are not special. */ *ap++ = '\n'; break; case ' ': case '\t': /* We have the end of an argument. Terminate the text of the argument. */ *ap++ = '\0'; new_argv[++i] = ap; last_argument_was_empty = 0; /* Update SEEN_NONEQUALS, which tells us if every word heretofore has contained an '='. */ seen_nonequals |= ! word_has_equals; if (word_has_equals && ! seen_nonequals) /* An '=' in a word before the first word without one is magical. */ goto slow; word_has_equals = 0; /* Prepare for the next word. */ /* If this argument is the command name, see if it is a built-in shell command. If so, have the shell handle it. */ if (i == 1) { int j; for (j = 0; sh_cmds[j] != 0; ++j) { if (streq (sh_cmds[j], new_argv[0])) goto slow; #if defined(__EMX__) || defined(WINDOWS32) /* Non-Unix shells are case insensitive. */ if (!unixy_shell && strcasecmp (sh_cmds[j], new_argv[0]) == 0) goto slow; #endif } } /* Skip whitespace chars, but not newlines. */ while (ISBLANK (p[1])) ++p; break; default: *ap++ = *p; break; } } end_of_line: if (instring) /* Let the shell deal with an unterminated quote. */ goto slow; /* Terminate the last argument and the argument list. */ *ap = '\0'; if (new_argv[i][0] != '\0' || last_argument_was_empty) ++i; new_argv[i] = 0; if (i == 1) { int j; for (j = 0; sh_cmds[j] != 0; ++j) if (streq (sh_cmds[j], new_argv[0])) goto slow; } if (new_argv[0] == 0) { /* Line was empty. */ free (argstr); free (new_argv); return 0; } return new_argv; slow:; /* We must use the shell. */ if (new_argv != 0) { /* Free the old argument list we were working on. */ free (argstr); free (new_argv); } #ifdef __MSDOS__ execute_by_shell = 1; /* actually, call 'system' if shell isn't unixy */ #endif #ifdef _AMIGA { char *ptr; char *buffer; char *dptr; buffer = xmalloc (strlen (line)+1); ptr = line; for (dptr=buffer; *ptr; ) { if (*ptr == '\\' && ptr[1] == '\n') ptr += 2; else if (*ptr == '@') /* Kludge: multiline commands */ { ptr += 2; *dptr++ = '\n'; } else *dptr++ = *ptr++; } *dptr = 0; new_argv = xmalloc (2 * sizeof (char *)); new_argv[0] = buffer; new_argv[1] = 0; } #else /* Not Amiga */ #ifdef WINDOWS32 /* * Not eating this whitespace caused things like * * sh -c "\n" * * which gave the shell fits. I think we have to eat * whitespace here, but this code should be considered * suspicious if things start failing.... */ /* Make sure not to bother processing an empty line. */ NEXT_TOKEN (line); if (*line == '\0') return 0; #endif /* WINDOWS32 */ { /* SHELL may be a multi-word command. Construct a command line "$(SHELL) $(.SHELLFLAGS) LINE", with all special chars in LINE escaped. Then recurse, expanding this command line to get the final argument list. */ char *new_line; size_t shell_len = strlen (shell); size_t line_len = strlen (line); size_t sflags_len = shellflags ? strlen (shellflags) : 0; #ifdef WINDOWS32 char *command_ptr = NULL; /* used for batch_mode_shell mode */ #endif # ifdef __EMX__ /* is this necessary? */ if (!unixy_shell && shellflags) shellflags[0] = '/'; /* "/c" */ # endif /* In .ONESHELL mode we are allowed to throw the entire current recipe string at a single shell and trust that the user has configured the shell and shell flags, and formatted the string, appropriately. */ if (one_shell) { /* If the shell is Bourne compatible, we must remove and ignore interior special chars [@+-] because they're meaningless to the shell itself. If, however, we're in .ONESHELL mode and have changed SHELL to something non-standard, we should leave those alone because they could be part of the script. In this case we must also leave in place any leading [@+-] for the same reason. */ /* Remove and ignore interior prefix chars [@+-] because they're meaningless given a single shell. */ #if defined __MSDOS__ || defined (__EMX__) if (unixy_shell) /* the test is complicated and we already did it */ #else if (is_bourne_compatible_shell (shell) #ifdef WINDOWS32 /* If we didn't find any sh.exe, don't behave is if we did! */ && !no_default_sh_exe #endif ) #endif { const char *f = line; char *t = line; /* Copy the recipe, removing and ignoring interior prefix chars [@+-]: they're meaningless in .ONESHELL mode. */ while (f[0] != '\0') { int esc = 0; /* 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') { *(t++) = *(f++); if (f[-1] == '\\') esc = !esc; else { /* On unescaped newline, we're done with this line. */ if (f[-1] == '\n' && ! esc) break; /* Something else: reset the escape sequence. */ esc = 0; } } } *t = '\0'; } #ifdef WINDOWS32 else /* non-Posix shell (cmd.exe etc.) */ { const char *f = line; char *t = line; char *tstart = t; int temp_fd; FILE* batch = NULL; int id = GetCurrentProcessId (); PATH_VAR(fbuf); /* Generate a file name for the temporary batch file. */ sprintf (fbuf, "make%d", id); *batch_filename = create_batch_file (fbuf, 0, &temp_fd); DB (DB_JOBS, (_("Creating temporary batch file %s\n"), *batch_filename)); /* Create a FILE object for the batch file, and write to it the commands to be executed. Put the batch file in TEXT mode. */ _setmode (temp_fd, _O_TEXT); batch = _fdopen (temp_fd, "wt"); fputs ("@echo off\n", batch); DB (DB_JOBS, (_("Batch file contents:\n\t@echo off\n"))); /* Copy the recipe, removing and ignoring interior prefix chars [@+-]: they're meaningless in .ONESHELL mode. */ while (*f != '\0') { /* 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 blanks that follow them. Windows shells cannot handle escaped newlines. */ if (*f == '\\' && f[1] == '\n') { f += 2; while (ISBLANK (*f)) ++f; } *(t++) = *(f++); /* On an unescaped newline, we're done with this line. */ if (f[-1] == '\n') break; } /* Write another line into the batch file. */ if (t > tstart) { char c = *t; *t = '\0'; fputs (tstart, batch); DB (DB_JOBS, ("\t%s", tstart)); tstart = t; *t = c; } } DB (DB_JOBS, ("\n")); fclose (batch); /* Create an argv list for the shell command line that will run the batch file. */ new_argv = xmalloc (2 * sizeof (char *)); new_argv[0] = xstrdup (*batch_filename); new_argv[1] = NULL; return new_argv; } #endif /* WINDOWS32 */ /* Create an argv list for the shell command line. */ { int n = 0; new_argv = xmalloc ((4 + sflags_len/2) * sizeof (char *)); new_argv[n++] = xstrdup (shell); /* Chop up the shellflags (if any) and assign them. */ if (! shellflags) new_argv[n++] = xstrdup (""); else { const char *s = shellflags; char *t; size_t len; while ((t = find_next_token (&s, &len)) != 0) new_argv[n++] = xstrndup (t, len); } /* Set the command to invoke. */ new_argv[n++] = line; new_argv[n++] = NULL; } return new_argv; } new_line = xmalloc ((shell_len*2) + 1 + sflags_len + 1 + (line_len*2) + 1); ap = new_line; /* Copy SHELL, escaping any characters special to the shell. If we don't escape them, construct_command_argv_internal will recursively call itself ad nauseam, or until stack overflow, whichever happens first. */ for (cp = shell; *cp != '\0'; ++cp) { if (strchr (sh_chars, *cp) != 0) *(ap++) = '\\'; *(ap++) = *cp; } *(ap++) = ' '; if (shellflags) memcpy (ap, shellflags, sflags_len); ap += sflags_len; *(ap++) = ' '; #ifdef WINDOWS32 command_ptr = ap; #endif for (p = line; *p != '\0'; ++p) { if (restp != NULL && *p == '\n') { *restp = p; break; } else if (*p == '\\' && p[1] == '\n') { /* POSIX says we keep the backslash-newline. If we don't have a POSIX shell on DOS/Windows/OS2, mimic the pre-POSIX behavior and remove the backslash/newline. */ #if defined (__MSDOS__) || defined (__EMX__) || defined (WINDOWS32) # define PRESERVE_BSNL unixy_shell #else # define PRESERVE_BSNL 1 #endif if (PRESERVE_BSNL) { *(ap++) = '\\'; /* Only non-batch execution needs another backslash, because it will be passed through a recursive invocation of this function. */ if (!batch_mode_shell) *(ap++) = '\\'; *(ap++) = '\n'; } ++p; continue; } /* DOS shells don't know about backslash-escaping. */ if (unixy_shell && !batch_mode_shell && (*p == '\\' || *p == '\'' || *p == '"' || ISSPACE (*p) || strchr (sh_chars, *p) != 0)) *ap++ = '\\'; #ifdef __MSDOS__ else if (unixy_shell && strneq (p, "...", 3)) { /* The case of '...' wildcard again. */ strcpy (ap, "\\.\\.\\"); ap += 5; p += 2; } #endif *ap++ = *p; } if (ap == new_line + shell_len + sflags_len + 2) { /* Line was empty. */ free (new_line); return 0; } *ap = '\0'; #ifdef WINDOWS32 /* Some shells do not work well when invoked as 'sh -c xxx' to run a command line (e.g. Cygnus GNUWIN32 sh.exe on WIN32 systems). In these cases, run commands via a script file. */ if (just_print_flag && !(flags & COMMANDS_RECURSE)) { /* Need to allocate new_argv, although it's unused, because start_job_command will want to free it and its 0'th element. */ new_argv = xmalloc (2 * sizeof (char *)); new_argv[0] = xstrdup (""); new_argv[1] = NULL; } else if ((no_default_sh_exe || batch_mode_shell) && batch_filename) { int temp_fd; FILE* batch = NULL; int id = GetCurrentProcessId (); PATH_VAR (fbuf); /* create a file name */ sprintf (fbuf, "make%d", id); *batch_filename = create_batch_file (fbuf, unixy_shell, &temp_fd); DB (DB_JOBS, (_("Creating temporary batch file %s\n"), *batch_filename)); /* Create a FILE object for the batch file, and write to it the commands to be executed. Put the batch file in TEXT mode. */ _setmode (temp_fd, _O_TEXT); batch = _fdopen (temp_fd, "wt"); if (!unixy_shell) fputs ("@echo off\n", batch); fputs (command_ptr, batch); fputc ('\n', batch); fclose (batch); DB (DB_JOBS, (_("Batch file contents:%s\n\t%s\n"), !unixy_shell ? "\n\t@echo off" : "", command_ptr)); /* create argv */ new_argv = xmalloc (3 * sizeof (char *)); if (unixy_shell) { new_argv[0] = xstrdup (shell); new_argv[1] = *batch_filename; /* only argv[0] gets freed later */ } else { new_argv[0] = xstrdup (*batch_filename); new_argv[1] = NULL; } new_argv[2] = NULL; } else #endif /* WINDOWS32 */ if (unixy_shell) new_argv = construct_command_argv_internal (new_line, 0, 0, 0, 0, flags, 0); #ifdef __EMX__ else if (!unixy_shell) { /* new_line is local, must not be freed therefore We use line here instead of new_line because we run the shell manually. */ size_t line_len = strlen (line); char *p = new_line; char *q = new_line; memcpy (new_line, line, line_len + 1); /* Replace all backslash-newline combination and also following tabs. Important: stop at the first '\n' because that's what the loop above did. The next line starting at restp[0] will be executed during the next call of this function. */ while (*q != '\0' && *q != '\n') { if (q[0] == '\\' && q[1] == '\n') q += 2; /* remove '\\' and '\n' */ else *p++ = *q++; } *p = '\0'; # ifndef NO_CMD_DEFAULT if (strnicmp (new_line, "echo", 4) == 0 && (new_line[4] == ' ' || new_line[4] == '\t')) { /* the builtin echo command: handle it separately */ size_t echo_len = line_len - 5; char *echo_line = new_line + 5; /* special case: echo 'x="y"' cmd works this way: a string is printed as is, i.e., no quotes are removed. But autoconf uses a command like echo 'x="y"' to determine whether make works. autoconf expects the output x="y" so we will do exactly that. Note: if we do not allow cmd to be the default shell we do not need this kind of voodoo */ if (echo_line[0] == '\'' && echo_line[echo_len - 1] == '\'' && strncmp (echo_line + 1, "ac_maketemp=", strlen ("ac_maketemp=")) == 0) { /* remove the enclosing quotes */ memmove (echo_line, echo_line + 1, echo_len - 2); echo_line[echo_len - 2] = '\0'; } } # endif { /* Let the shell decide what to do. Put the command line into the 2nd command line argument and hope for the best ;-) */ size_t sh_len = strlen (shell); /* exactly 3 arguments + NULL */ new_argv = xmalloc (4 * sizeof (char *)); /* Exactly strlen(shell) + strlen("/c") + strlen(line) + 3 times the trailing '\0' */ new_argv[0] = xmalloc (sh_len + line_len + 5); memcpy (new_argv[0], shell, sh_len + 1); new_argv[1] = new_argv[0] + sh_len + 1; memcpy (new_argv[1], "/c", 3); new_argv[2] = new_argv[1] + 3; memcpy (new_argv[2], new_line, line_len + 1); new_argv[3] = NULL; } } #elif defined(__MSDOS__) else { /* With MSDOS shells, we must construct the command line here instead of recursively calling ourselves, because we cannot backslash-escape the special characters (see above). */ new_argv = xmalloc (sizeof (char *)); line_len = strlen (new_line) - shell_len - sflags_len - 2; new_argv[0] = xmalloc (line_len + 1); strncpy (new_argv[0], new_line + shell_len + sflags_len + 2, line_len); new_argv[0][line_len] = '\0'; } #else else fatal (NILF, CSTRLEN (__FILE__) + INTSTR_LENGTH, _("%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n"), __FILE__, __LINE__); #endif free (new_line); } #endif /* ! AMIGA */ return new_argv; } #endif /* !VMS */ /* Figure out the argument list necessary to run LINE as a command. Try to avoid using a shell. This routine handles only ' quoting, and " quoting when no backslash, $ or ' characters are seen in the quotes. Starting quotes may be escaped with a backslash. If any of the characters in sh_chars is seen, or any of the builtin commands listed in sh_cmds is the first word of a line, the shell is used. If RESTP is not NULL, *RESTP is set to point to the first newline in LINE. If *RESTP is NULL, newlines will be ignored. FILE is the target whose commands these are. It is used for variable expansion for $(SHELL) and $(IFS). */ char ** construct_command_argv (char *line, char **restp, struct file *file, int cmd_flags, char **batch_filename) { char *shell, *ifs, *shellflags; char **argv; { /* Turn off --warn-undefined-variables while we expand SHELL and IFS. */ int save = warn_undefined_variables_flag; warn_undefined_variables_flag = 0; shell = allocated_variable_expand_for_file ("$(SHELL)", file); #ifdef WINDOWS32 /* * Convert to forward slashes so that construct_command_argv_internal() * is not confused. */ if (shell) { char *p = w32ify (shell, 0); strcpy (shell, p); } #endif #ifdef __EMX__ { static const char *unixroot = NULL; static const char *last_shell = ""; static int init = 0; if (init == 0) { unixroot = getenv ("UNIXROOT"); /* unixroot must be NULL or not empty */ if (unixroot && unixroot[0] == '\0') unixroot = NULL; init = 1; } /* if we have an unixroot drive and if shell is not default_shell (which means it's either cmd.exe or the test has already been performed) and if shell is an absolute path without drive letter, try whether it exists e.g.: if "/bin/sh" does not exist use "$UNIXROOT/bin/sh" instead. */ if (unixroot && shell && strcmp (shell, last_shell) != 0 && (shell[0] == '/' || shell[0] == '\\')) { /* trying a new shell, check whether it exists */ size_t size = strlen (shell); char *buf = xmalloc (size + 7); memcpy (buf, shell, size); memcpy (buf + size, ".exe", 5); /* including the trailing '\0' */ if (access (shell, F_OK) != 0 && access (buf, F_OK) != 0) { /* try the same for the unixroot drive */ memmove (buf + 2, buf, size + 5); buf[0] = unixroot[0]; buf[1] = unixroot[1]; if (access (buf, F_OK) == 0) /* we have found a shell! */ /* free(shell); */ shell = buf; else free (buf); } else free (buf); } } #endif /* __EMX__ */ shellflags = allocated_variable_expand_for_file ("$(.SHELLFLAGS)", file); ifs = allocated_variable_expand_for_file ("$(IFS)", file); warn_undefined_variables_flag = save; } argv = construct_command_argv_internal (line, restp, shell, shellflags, ifs, cmd_flags, batch_filename); free (shell); free (shellflags); free (ifs); return argv; } #if !defined(HAVE_DUP2) && !defined(_AMIGA) int dup2 (int old, int new) { int fd; (void) close (new); EINTRLOOP (fd, dup (old)); if (fd != new) { (void) close (fd); errno = EMFILE; return -1; } return fd; } #endif /* !HAVE_DUP2 && !_AMIGA */ /* On VMS systems, include special VMS functions. */ #ifdef VMS #include "vmsjobs.c" #endif make-4.3/src/dir.c0000644000175000017500000010661213603564437010750 00000000000000/* Directory hashing for GNU Make. Copyright (C) 1988-2020 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 . */ #include "makeint.h" #include "hash.h" #include "filedef.h" #include "dep.h" #ifdef HAVE_DIRENT_H # include # define NAMLEN(dirent) strlen((dirent)->d_name) # ifdef VMS /* its prototype is in vmsdir.h, which is not needed for HAVE_DIRENT_H */ const char *vmsify (const char *name, int type); # endif #else # define dirent direct # define NAMLEN(dirent) (dirent)->d_namlen # ifdef HAVE_SYS_NDIR_H # include # endif # ifdef HAVE_SYS_DIR_H # include # endif # ifdef HAVE_NDIR_H # include # endif # ifdef HAVE_VMSDIR_H # include "vmsdir.h" # endif /* HAVE_VMSDIR_H */ #endif /* In GNU systems, defines this macro for us. */ #ifdef _D_NAMLEN # undef NAMLEN # define NAMLEN(d) _D_NAMLEN(d) #endif #if (defined (POSIX) || defined (VMS) || defined (WINDOWS32)) && !defined (__GNU_LIBRARY__) /* Posix does not require that the d_ino field be present, and some systems do not provide it. */ # define REAL_DIR_ENTRY(dp) 1 # define FAKE_DIR_ENTRY(dp) #else # define REAL_DIR_ENTRY(dp) (dp->d_ino != 0) # define FAKE_DIR_ENTRY(dp) (dp->d_ino = 1) #endif /* POSIX */ #ifdef __MSDOS__ #include #include /* If it's MSDOS that doesn't have _USE_LFN, disable LFN support. */ #ifndef _USE_LFN #define _USE_LFN 0 #endif static const char * dosify (const char *filename) { static char dos_filename[14]; char *df; int i; if (filename == 0 || _USE_LFN) return filename; /* FIXME: what about filenames which violate 8+3 constraints, like "config.h.in", or ".emacs"? */ if (strpbrk (filename, "\"*+,;<=>?[\\]|") != 0) return filename; df = dos_filename; /* First, transform the name part. */ for (i = 0; i < 8 && ! STOP_SET (*filename, MAP_DOT|MAP_NUL); ++i) *df++ = tolower ((unsigned char)*filename++); /* Now skip to the next dot. */ while (! STOP_SET (*filename, MAP_DOT|MAP_NUL)) ++filename; if (*filename != '\0') { *df++ = *filename++; for (i = 0; i < 3 && ! STOP_SET (*filename, MAP_DOT|MAP_NUL); ++i) *df++ = tolower ((unsigned char)*filename++); } /* Look for more dots. */ while (! STOP_SET (*filename, MAP_DOT|MAP_NUL)) ++filename; if (*filename == '.') return filename; *df = 0; return dos_filename; } #endif /* __MSDOS__ */ #ifdef WINDOWS32 #include "pathstuff.h" #endif #ifdef _AMIGA #include #endif #ifdef HAVE_CASE_INSENSITIVE_FS static const char * downcase (const char *filename) { static PATH_VAR (new_filename); char *df; if (filename == 0) return 0; df = new_filename; while (*filename != '\0') { *df++ = tolower ((unsigned char)*filename); ++filename; } *df = 0; return new_filename; } #endif /* HAVE_CASE_INSENSITIVE_FS */ #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) { int h = 0; while (*name) { unsigned char uc = *name; int g; #ifdef HAVE_CASE_INSENSITIVE_FS h = (h << 4) + (isupper (uc) ? tolower (uc) : uc); #else h = (h << 4) + uc; #endif name++; g = h & 0xf0000000; if (g) { h = h ^ (g >> 24); h = h ^ g; } } return h; } /* fake stat entry for a directory */ static int vmsstat_dir (const char *name, struct stat *st) { char *s; int h; DIR *dir; dir = opendir (name); if (dir == 0) return -1; closedir (dir); s = strchr (name, ':'); /* find device */ if (s) { /* to keep the compiler happy we said "const char *name", now we cheat */ *s++ = 0; st->st_dev = (char *)vms_hash (name); h = vms_hash (s); *(s-1) = ':'; } else { st->st_dev = 0; h = vms_hash (name); } st->st_ino[0] = h & 0xff; st->st_ino[1] = h & 0xff00; st->st_ino[2] = h >> 16; return 0; } # define stat(__path, __sbuf) vmsstat_dir (__path, __sbuf) #endif /* _USE_STD_STAT */ #endif /* VMS */ /* Hash table of directories. */ #ifndef DIRECTORY_BUCKETS #define DIRECTORY_BUCKETS 199 #endif struct directory_contents { dev_t dev; /* Device and inode numbers of this dir. */ #ifdef WINDOWS32 /* Inode means nothing on WINDOWS32. Even file key information is * unreliable because it is random per file open and undefined for remote * filesystems. The most unique attribute I can come up with is the fully * 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; 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_INO_T ino_t ino[3]; # else ino_t ino; # endif #endif /* WINDOWS32 */ struct hash_table dirfiles; /* Files in this directory. */ DIR *dirstream; /* Stream reading this directory. */ }; static unsigned long directory_contents_hash_1 (const void *key_0) { const struct directory_contents *key = key_0; unsigned long hash; #ifdef WINDOWS32 hash = 0; ISTRING_HASH_1 (key->path_key, hash); hash ^= ((unsigned int) key->dev << 4) ^ (unsigned int) key->ctime; #else # ifdef VMS_INO_T hash = (((unsigned int) key->dev << 4) ^ ((unsigned int) key->ino[0] + (unsigned int) key->ino[1] + (unsigned int) key->ino[2])); # else hash = ((unsigned int) key->dev << 4) ^ (unsigned int) key->ino; # endif #endif /* WINDOWS32 */ return hash; } static unsigned long directory_contents_hash_2 (const void *key_0) { const struct directory_contents *key = key_0; unsigned long hash; #ifdef WINDOWS32 hash = 0; ISTRING_HASH_2 (key->path_key, hash); hash ^= ((unsigned int) key->dev << 4) ^ (unsigned int) ~key->ctime; #else # ifdef VMS_INO_T hash = (((unsigned int) key->dev << 4) ^ ~((unsigned int) key->ino[0] + (unsigned int) key->ino[1] + (unsigned int) key->ino[2])); # else hash = ((unsigned int) key->dev << 4) ^ (unsigned int) ~key->ino; # endif #endif /* WINDOWS32 */ return hash; } /* Sometimes it's OK to use subtraction to get this value: result = X - Y; But, if we're not sure of the type of X and Y they may be too large for an int (on a 64-bit system for example). So, use ?: instead. See Savannah bug #15534. NOTE! This macro has side-effects! */ #define MAKECMP(_x,_y) ((_x)<(_y)?-1:((_x)==(_y)?0:1)) static int directory_contents_hash_cmp (const void *xv, const void *yv) { const struct directory_contents *x = xv; const struct directory_contents *y = yv; int result; #ifdef WINDOWS32 ISTRING_COMPARE (x->path_key, y->path_key, result); if (result) return result; result = MAKECMP(x->ctime, y->ctime); if (result) return result; #else # ifdef VMS_INO_T result = MAKECMP(x->ino[0], y->ino[0]); if (result) return result; result = MAKECMP(x->ino[1], y->ino[1]); if (result) return result; result = MAKECMP(x->ino[2], y->ino[2]); if (result) return result; # else result = MAKECMP(x->ino, y->ino); if (result) return result; # endif #endif /* WINDOWS32 */ return MAKECMP(x->dev, y->dev); } /* Table of directory contents hashed by device and inode number. */ static struct hash_table directory_contents; struct directory { const char *name; /* Name of the directory. */ /* The directory's contents. This data may be shared by several entries in the hash table, which refer to the same directory (identified uniquely by 'dev' and 'ino') under different names. */ struct directory_contents *contents; }; static unsigned long directory_hash_1 (const void *key) { return_ISTRING_HASH_1 (((const struct directory *) key)->name); } static unsigned long directory_hash_2 (const void *key) { return_ISTRING_HASH_2 (((const struct directory *) key)->name); } static int directory_hash_cmp (const void *x, const void *y) { return_ISTRING_COMPARE (((const struct directory *) x)->name, ((const struct directory *) y)->name); } /* Table of directories hashed by name. */ static struct hash_table directories; /* Never have more than this many directories open at once. */ #define MAX_OPEN_DIRECTORIES 10 static unsigned int open_directories = 0; /* Hash table of files in each directory. */ struct dirfile { const char *name; /* Name of the file. */ size_t length; short impossible; /* This file is impossible. */ unsigned char type; }; static unsigned long dirfile_hash_1 (const void *key) { return_ISTRING_HASH_1 (((struct dirfile const *) key)->name); } static unsigned long dirfile_hash_2 (const void *key) { return_ISTRING_HASH_2 (((struct dirfile const *) key)->name); } static int dirfile_hash_cmp (const void *xv, const void *yv) { const struct dirfile *x = xv; const struct dirfile *y = yv; int result = (int) (x->length - y->length); if (result) return result; return_ISTRING_COMPARE (x->name, y->name); } #ifndef DIRFILE_BUCKETS #define DIRFILE_BUCKETS 107 #endif static int dir_contents_file_exists_p (struct directory_contents *dir, const char *filename); static struct directory *find_directory (const char *name); /* Find the directory named NAME and return its 'struct directory'. */ static struct directory * find_directory (const char *name) { struct directory *dir; struct directory **dir_slot; struct directory dir_key; dir_key.name = name; dir_slot = (struct directory **) hash_find_slot (&directories, &dir_key); dir = *dir_slot; if (HASH_VACANT (dir)) { /* The directory was not found. Create a new entry for it. */ const char *p = name + strlen (name); struct stat st; int r; dir = xmalloc (sizeof (struct directory)); #if defined(HAVE_CASE_INSENSITIVE_FS) && defined(VMS) /* 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 hash_insert_at (&directories, dir, dir_slot); /* The directory is not in the name hash table. Find its device and inode numbers, and look it up by them. */ #if defined(WINDOWS32) { char tem[MAXPATHLEN], *tstart, *tend; /* Remove any trailing slashes. Windows32 stat fails even on valid directories if they end in a slash. */ memcpy (tem, name, p - name + 1); tstart = tem; if (tstart[1] == ':') tstart += 2; for (tend = tem + (p - name - 1); tend > tstart && (*tend == '/' || *tend == '\\'); tend--) *tend = '\0'; r = stat (tem, &st); } #else EINTRLOOP (r, stat (name, &st)); #endif if (r < 0) { /* Couldn't stat the directory. Mark this by setting the 'contents' member to a nil pointer. */ dir->contents = 0; } else { /* Search the contents hash table; device and inode are the key. */ #ifdef WINDOWS32 char *w32_path; #endif struct directory_contents *dc; struct directory_contents **dc_slot; struct directory_contents dc_key; dc_key.dev = st.st_dev; #ifdef WINDOWS32 dc_key.path_key = w32_path = w32ify (name, 1); dc_key.ctime = st.st_ctime; #else # 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]; # else dc_key.ino = st.st_ino; # endif #endif dc_slot = (struct directory_contents **) hash_find_slot (&directory_contents, &dc_key); dc = *dc_slot; if (HASH_VACANT (dc)) { /* Nope; this really is a directory we haven't seen before. */ #ifdef WINDOWS32 char fs_label[BUFSIZ]; char fs_type[BUFSIZ]; unsigned long fs_serno; unsigned long fs_flags; unsigned long fs_len; #endif dc = (struct directory_contents *) xmalloc (sizeof (struct directory_contents)); /* Enter it in the contents hash table. */ dc->dev = st.st_dev; #ifdef WINDOWS32 dc->path_key = xstrdup (w32_path); dc->ctime = st.st_ctime; dc->mtime = st.st_mtime; /* NTFS is the only WINDOWS32 filesystem that bumps mtime on a directory when files are added/deleted from a directory. */ w32_path[3] = '\0'; if (GetVolumeInformation (w32_path, fs_label, sizeof (fs_label), &fs_serno, &fs_len, &fs_flags, fs_type, sizeof (fs_type)) == FALSE) dc->fs_flags = FS_UNKNOWN; else if (!strcmp (fs_type, "FAT")) dc->fs_flags = FS_FAT; else if (!strcmp (fs_type, "NTFS")) dc->fs_flags = FS_NTFS; else dc->fs_flags = FS_UNKNOWN; #else # 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]; # else dc->ino = st.st_ino; # endif #endif /* WINDOWS32 */ hash_insert_at (&directory_contents, dc, dc_slot); ENULLLOOP (dc->dirstream, opendir (name)); if (dc->dirstream == 0) /* Couldn't open the directory. Mark this by setting the 'files' member to a nil pointer. */ dc->dirfiles.ht_vec = 0; else { hash_init (&dc->dirfiles, DIRFILE_BUCKETS, dirfile_hash_1, dirfile_hash_2, dirfile_hash_cmp); /* Keep track of how many directories are open. */ ++open_directories; if (open_directories == MAX_OPEN_DIRECTORIES) /* We have too many directories open already. Read the entire directory and then close it. */ dir_contents_file_exists_p (dc, 0); } } /* Point the name-hashed entry for DIR at its contents data. */ dir->contents = dc; } } return dir; } /* Return 1 if the name FILENAME is entered in DIR's hash table. FILENAME must contain no slashes. */ static int dir_contents_file_exists_p (struct directory_contents *dir, const char *filename) { struct dirfile *df; struct dirent *d; #ifdef WINDOWS32 struct stat st; int rehash = 0; #endif if (dir == 0 || dir->dirfiles.ht_vec == 0) /* The directory could not be stat'd or opened. */ return 0; #ifdef __MSDOS__ filename = dosify (filename); #endif #ifdef HAVE_CASE_INSENSITIVE_FS filename = downcase (filename); #endif #ifdef __EMX__ if (filename != 0) _fnlwr (filename); /* lower case for FAT drives */ #endif if (filename != 0) { struct dirfile dirfile_key; if (*filename == '\0') { /* Checking if the directory exists. */ return 1; } dirfile_key.name = filename; dirfile_key.length = strlen (filename); df = hash_find_item (&dir->dirfiles, &dirfile_key); if (df) return !df->impossible; } /* The file was not found in the hashed list. Try to read the directory further. */ if (dir->dirstream == 0) { #ifdef WINDOWS32 /* * Check to see if directory has changed since last read. FAT * filesystems force a rehash always as mtime does not change * on directories (ugh!). */ if (dir->path_key) { if ((dir->fs_flags & FS_FAT) != 0) { dir->mtime = time ((time_t *) 0); rehash = 1; } else if (stat (dir->path_key, &st) == 0 && st.st_mtime > dir->mtime) { /* reset date stamp to show most recent re-process. */ dir->mtime = st.st_mtime; rehash = 1; } /* If it has been already read in, all done. */ if (!rehash) return 0; /* make sure directory can still be opened; if not return. */ dir->dirstream = opendir (dir->path_key); if (!dir->dirstream) return 0; } else #endif /* The directory has been all read in. */ return 0; } while (1) { /* Enter the file in the hash table. */ size_t len; struct dirfile dirfile_key; struct dirfile **dirfile_slot; ENULLLOOP (d, readdir (dir->dirstream)); if (d == 0) { if (errno) pfatal_with_name ("INTERNAL: readdir"); break; } #if defined(VMS) && defined(HAVE_DIRENT_H) /* 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) *p = '\0'; } #endif if (!REAL_DIR_ENTRY (d)) continue; len = NAMLEN (d); dirfile_key.name = d->d_name; dirfile_key.length = len; dirfile_slot = (struct dirfile **) hash_find_slot (&dir->dirfiles, &dirfile_key); #ifdef WINDOWS32 /* * If re-reading a directory, don't cache files that have * already been discovered. */ if (! rehash || HASH_VACANT (*dirfile_slot)) #endif { df = xmalloc (sizeof (struct dirfile)); #if defined(HAVE_CASE_INSENSITIVE_FS) && defined(VMS) /* 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 #ifdef HAVE_STRUCT_DIRENT_D_TYPE df->type = d->d_type; #endif df->length = len; df->impossible = 0; hash_insert_at (&dir->dirfiles, df, dirfile_slot); } /* Check if the name matches the one we're searching for. */ if (filename != 0 && patheq (d->d_name, filename)) return 1; } /* If the directory has been completely read in, close the stream and reset the pointer to nil. */ if (d == 0) { --open_directories; closedir (dir->dirstream); dir->dirstream = 0; } return 0; } /* Return 1 if the name FILENAME in directory DIRNAME is entered in the dir hash table. FILENAME must contain no slashes. */ 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); } /* Return 1 if the file named NAME exists. */ int file_exists_p (const char *name) { const char *dirend; const char *dirname; const char *slash; #ifndef NO_ARCHIVES if (ar_name (name)) return ar_member_date (name) != (time_t) -1; #endif dirend = strrchr (name, '/'); #ifdef VMS if (dirend == 0) { dirend = strrchr (name, ']'); dirend == NULL ? dirend : dirend++; } if (dirend == 0) { 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. */ { const char *bslash = strrchr (name, '\\'); if (!dirend || bslash > dirend) dirend = bslash; /* The case of "d:file". */ if (!dirend && name[0] && name[1] == ':') dirend = name + 1; } #endif /* HAVE_DOS_PATHS */ if (dirend == 0) #ifndef _AMIGA return dir_file_exists_p (".", name); #else /* !AMIGA */ return dir_file_exists_p ("", name); #endif /* AMIGA */ slash = dirend; if (dirend == name) dirname = "/"; else { char *p; #ifdef HAVE_DOS_PATHS /* d:/ and d: are *very* different... */ if (dirend < name + 3 && name[1] == ':' && (*dirend == '/' || *dirend == '\\' || *dirend == ':')) dirend++; #endif p = alloca (dirend - name + 1); memcpy (p, name, dirend - name); p[dirend - name] = '\0'; dirname = p; } #ifdef VMS if (*slash == '/') slash++; #else slash++; #endif return dir_file_exists_p (dirname, slash); } /* Mark FILENAME as 'impossible' for 'file_impossible_p'. This means an attempt has been made to search for FILENAME as an intermediate file, and it has failed. */ void file_impossible (const char *filename) { const char *dirend; const char *p = filename; struct directory *dir; struct dirfile *new; dirend = strrchr (p, '/'); #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, '\\'); if (!dirend || bslash > dirend) dirend = bslash; /* The case of "d:file". */ if (!dirend && p[0] && p[1] == ':') dirend = p + 1; } #endif /* HAVE_DOS_PATHS */ if (dirend == 0) #ifdef _AMIGA dir = find_directory (""); #else /* !AMIGA */ dir = find_directory ("."); #endif /* AMIGA */ else { const char *dirname; const char *slash = dirend; if (dirend == p) dirname = "/"; else { char *cp; #ifdef HAVE_DOS_PATHS /* d:/ and d: are *very* different... */ if (dirend < p + 3 && p[1] == ':' && (*dirend == '/' || *dirend == '\\' || *dirend == ':')) dirend++; #endif cp = alloca (dirend - p + 1); memcpy (cp, p, dirend - p); cp[dirend - p] = '\0'; 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) /* The directory could not be stat'd. We allocate a contents structure for it, but leave it out of the contents hash table. */ dir->contents = xcalloc (sizeof (struct directory_contents)); if (dir->contents->dirfiles.ht_vec == 0) { hash_init (&dir->contents->dirfiles, DIRFILE_BUCKETS, dirfile_hash_1, dirfile_hash_2, dirfile_hash_cmp); } /* Make a new entry and put it in the table. */ 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); #endif new->impossible = 1; hash_insert (&dir->contents->dirfiles, new); } /* Return nonzero if FILENAME has been marked impossible. */ int file_impossible_p (const char *filename) { const char *dirend; struct directory_contents *dir; struct dirfile *dirfile; struct dirfile dirfile_key; #ifdef VMS 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. */ { const char *bslash = strrchr (filename, '\\'); if (!dirend || bslash > dirend) dirend = bslash; /* The case of "d:file". */ if (!dirend && filename[0] && filename[1] == ':') dirend = filename + 1; } #endif /* HAVE_DOS_PATHS */ if (dirend == 0) #ifdef _AMIGA dir = find_directory ("")->contents; #else /* !AMIGA */ dir = find_directory (".")->contents; #endif /* AMIGA */ else { const char *dirname; const char *slash = dirend; if (dirend == filename) dirname = "/"; else { char *cp; #ifdef HAVE_DOS_PATHS /* d:/ and d: are *very* different... */ if (dirend < filename + 3 && filename[1] == ':' && (*dirend == '/' || *dirend == '\\' || *dirend == ':')) dirend++; #endif cp = alloca (dirend - filename + 1); memcpy (cp, filename, dirend - filename); cp[dirend - filename] = '\0'; 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) /* There are no files entered for this directory. */ return 0; #ifdef __MSDOS__ filename = dosify (filename); #endif #ifdef HAVE_CASE_INSENSITIVE_FS filename = downcase (filename); #endif #ifdef VMS if (want_vmsify) filename = vmsify (filename, 1); #endif dirfile_key.name = filename; dirfile_key.length = strlen (filename); dirfile = hash_find_item (&dir->dirfiles, &dirfile_key); if (dirfile) return dirfile->impossible; return 0; } /* Return the already allocated name in the directory hash table that matches DIR. */ const char * dir_name (const char *dir) { return find_directory (dir)->name; } /* Print the data base of directories. */ void print_dir_data_base (void) { unsigned int files; unsigned int impossible; struct directory **dir_slot; struct directory **dir_end; puts (_("\n# Directories\n")); files = impossible = 0; dir_slot = (struct directory **) directories.ht_vec; dir_end = dir_slot + directories.ht_size; for ( ; dir_slot < dir_end; dir_slot++) { struct directory *dir = *dir_slot; if (! HASH_VACANT (dir)) { if (dir->contents == 0) printf (_("# %s: could not be stat'd.\n"), dir->name); else if (dir->contents->dirfiles.ht_vec == 0) { #ifdef WINDOWS32 printf (_("# %s (key %s, mtime %I64u): could not be opened.\n"), dir->name, dir->contents->path_key, (unsigned long long)dir->contents->mtime); #else /* WINDOWS32 */ #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], dir->contents->ino[2]); #else printf (_("# %s (device %ld, inode %ld): could not be opened.\n"), dir->name, (long int) dir->contents->dev, (long int) dir->contents->ino); #endif #endif /* WINDOWS32 */ } else { unsigned int f = 0; unsigned int im = 0; struct dirfile **files_slot; struct dirfile **files_end; files_slot = (struct dirfile **) dir->contents->dirfiles.ht_vec; files_end = files_slot + dir->contents->dirfiles.ht_size; for ( ; files_slot < files_end; files_slot++) { struct dirfile *df = *files_slot; if (! HASH_VACANT (df)) { if (df->impossible) ++im; else ++f; } } #ifdef WINDOWS32 printf (_("# %s (key %s, mtime %I64u): "), dir->name, dir->contents->path_key, (unsigned long long)dir->contents->mtime); #else /* WINDOWS32 */ #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], dir->contents->ino[2]); #else printf (_("# %s (device %ld, inode %ld): "), dir->name, (long)dir->contents->dev, (long)dir->contents->ino); #endif #endif /* WINDOWS32 */ if (f == 0) fputs (_("No"), stdout); else printf ("%u", f); fputs (_(" files, "), stdout); if (im == 0) fputs (_("no"), stdout); else printf ("%u", im); fputs (_(" impossibilities"), stdout); if (dir->contents->dirstream == 0) puts ("."); else puts (_(" so far.")); files += f; impossible += im; } } } fputs ("\n# ", stdout); if (files == 0) fputs (_("No"), stdout); else printf ("%u", files); fputs (_(" files, "), stdout); if (impossible == 0) fputs (_("no"), stdout); else printf ("%u", impossible); printf (_(" impossibilities in %lu directories.\n"), directories.ht_fill); } /* Hooks for globbing. */ /* Structure describing state of iterating through a directory hash table. */ struct dirstream { struct directory_contents *contents; /* The directory being read. */ struct dirfile **dirfile_slot; /* Current slot in table. */ }; /* Forward declarations. */ static __ptr_t open_dirstream (const char *); static struct dirent *read_dirstream (__ptr_t); static __ptr_t open_dirstream (const char *directory) { struct dirstream *new; struct directory *dir = find_directory (directory); if (dir->contents == 0 || dir->contents->dirfiles.ht_vec == 0) /* DIR->contents is nil if the directory could not be stat'd. DIR->contents->dirfiles is nil if it could not be opened. */ return 0; /* Read all the contents of the directory now. There is no benefit in being lazy, since glob will want to see every file anyway. */ dir_contents_file_exists_p (dir->contents, 0); new = xmalloc (sizeof (struct dirstream)); new->contents = dir->contents; new->dirfile_slot = (struct dirfile **) new->contents->dirfiles.ht_vec; return (__ptr_t) new; } static struct dirent * read_dirstream (__ptr_t stream) { static char *buf; static size_t bufsz; struct dirstream *const ds = (struct dirstream *) stream; struct directory_contents *dc = ds->contents; struct dirfile **dirfile_end = (struct dirfile **) dc->dirfiles.ht_vec + dc->dirfiles.ht_size; while (ds->dirfile_slot < dirfile_end) { struct dirfile *df = *ds->dirfile_slot++; if (! HASH_VACANT (df) && !df->impossible) { /* The glob interface wants a 'struct dirent', so mock one up. */ struct dirent *d; size_t len = df->length + 1; size_t sz = sizeof (*d) - sizeof (d->d_name) + len; if (sz > bufsz) { bufsz *= 2; if (sz > bufsz) bufsz = sz; buf = xrealloc (buf, bufsz); } d = (struct dirent *) buf; #ifdef __MINGW32__ # if __MINGW32_MAJOR_VERSION < 3 || (__MINGW32_MAJOR_VERSION == 3 && \ __MINGW32_MINOR_VERSION == 0) d->d_name = xmalloc (len); # endif #endif FAKE_DIR_ENTRY (d); #ifdef _DIRENT_HAVE_D_NAMLEN d->d_namlen = len - 1; #endif #ifdef HAVE_STRUCT_DIRENT_D_TYPE d->d_type = df->type; #endif memcpy (d->d_name, df->name, len); return d; } } return 0; } /* On 64 bit ReliantUNIX (5.44 and above) in LFS mode, stat() is actually a * macro for stat64(). If stat is a macro, make a local wrapper function to * invoke it. * * On MS-Windows, stat() "succeeds" for foo/bar/. where foo/bar is a * regular file; fix that here. */ #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 static int local_stat (const char *path, struct stat *buf) { int e; #ifdef WINDOWS32 size_t plen = strlen (path); /* Make sure the parent of "." exists and is a directory, not a file. This is because 'stat' on Windows normalizes the argument foo/. => foo without checking first that foo is a directory. */ if (plen > 1 && path[plen - 1] == '.' && (path[plen - 2] == '/' || path[plen - 2] == '\\')) { char parent[MAXPATHLEN]; strncpy (parent, path, plen - 2); parent[plen - 2] = '\0'; if (stat (parent, buf) < 0 || !_S_ISDIR (buf->st_mode)) return -1; } #endif EINTRLOOP (e, stat (path, buf)); return e; } #endif /* Similarly for lstat. */ #if !defined(lstat) && !defined(WINDOWS32) || defined(VMS) # ifndef VMS # ifndef HAVE_SYS_STAT_H int lstat (const char *path, struct stat *sbuf); # endif # else /* We are done with the fake lstat. Go back to the real lstat */ # ifdef lstat # undef lstat # endif # endif # define local_lstat lstat #elif defined(WINDOWS32) /* Windows doesn't support lstat(). */ # define local_lstat local_stat #else static int local_lstat (const char *path, struct stat *buf) { int e; EINTRLOOP (e, lstat (path, buf)); return e; } #endif void dir_setup_glob (glob_t *gl) { gl->gl_offs = 0; gl->gl_opendir = open_dirstream; gl->gl_readdir = read_dirstream; gl->gl_closedir = free; gl->gl_lstat = local_lstat; gl->gl_stat = local_stat; } void hash_init_directories (void) { hash_init (&directories, DIRECTORY_BUCKETS, directory_hash_1, directory_hash_2, directory_hash_cmp); hash_init (&directory_contents, DIRECTORY_BUCKETS, directory_contents_hash_1, directory_contents_hash_2, directory_contents_hash_cmp); } make-4.3/src/implicit.c0000644000175000017500000010510013603564437011773 00000000000000/* Implicit rule searching for GNU Make. Copyright (C) 1988-2020 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 . */ #include "makeint.h" #include "filedef.h" #include "rule.h" #include "dep.h" #include "debug.h" #include "variable.h" #include "job.h" /* struct child, used inside commands.h */ #include "commands.h" /* set_file_variables */ static int pattern_search (struct file *file, int archive, unsigned int depth, unsigned int recursions); /* For a FILE which has no commands specified, try to figure out some from the implicit pattern rules. Returns 1 if a suitable implicit rule was found, after modifying FILE to contain the appropriate commands and deps, or returns 0 if no implicit rule was found. */ int try_implicit_rule (struct file *file, unsigned int depth) { DBF (DB_IMPLICIT, _("Looking for an implicit rule for '%s'.\n")); /* The order of these searches was previously reversed. My logic now is that since the non-archive search uses more information in the target (the archive search omits the archive name), it is more specific and should come first. */ if (pattern_search (file, 0, depth, 0)) return 1; #ifndef NO_ARCHIVES /* If this is an archive member reference, use just the archive member name to search for implicit rules. */ if (ar_name (file->name)) { DBF (DB_IMPLICIT, _("Looking for archive-member implicit rule for '%s'.\n")); if (pattern_search (file, 1, depth, 0)) return 1; } #endif return 0; } /* Scans the BUFFER for the next word with whitespace as a separator. Returns the pointer to the beginning of the word. LENGTH hold the length of the word. */ static const char * get_next_word (const char *buffer, size_t *length) { const char *p = buffer, *beg; char c; /* Skip any leading whitespace. */ NEXT_TOKEN (p); beg = p; c = *(p++); if (c == '\0') return 0; /* We already found the first value of "c", above. */ while (1) { char closeparen; int count; switch (c) { case '\0': case ' ': case '\t': goto done_word; case '$': c = *(p++); if (c == '$') break; /* This is a variable reference, so read it to the matching close paren. */ if (c == '(') closeparen = ')'; else if (c == '{') closeparen = '}'; else /* This is a single-letter variable reference. */ break; for (count = 0; *p != '\0'; ++p) { if (*p == c) ++count; else if (*p == closeparen && --count < 0) { ++p; break; } } break; case '|': goto done; default: break; } c = *(p++); } done_word: --p; done: if (length) *length = p - beg; return beg; } /* This structure stores information about the expanded prerequisites for a pattern rule. NAME is always set to the strcache'd name of the prereq. FILE and PATTERN will be set for intermediate files only. IGNORE_MTIME is copied from the prerequisite we expanded. */ struct patdeps { const char *name; const char *pattern; struct file *file; unsigned int ignore_mtime : 1; unsigned int ignore_automatic_vars : 1; }; /* This structure stores information about pattern rules that we need to try. */ struct tryrule { struct rule *rule; /* Stem length for this match. */ size_t stemlen; /* Index of the target in this rule that matched the file. */ unsigned int matches; /* Definition order of this rule. Used to implement stable sort.*/ unsigned int order; /* Nonzero if the LASTSLASH logic was used in matching this rule. */ char checked_lastslash; }; int stemlen_compare (const void *v1, const void *v2) { const struct tryrule *r1 = v1; const struct tryrule *r2 = v2; int r = (int) (r1->stemlen - r2->stemlen); return r != 0 ? r : (int) (r1->order - r2->order); } /* Search the pattern rules for a rule with an existing dependency to make FILE. If a rule is found, the appropriate commands and deps are put in FILE and 1 is returned. If not, 0 is returned. If ARCHIVE is nonzero, FILE->name is of the form "LIB(MEMBER)". A rule for "(MEMBER)" will be searched for, and "(MEMBER)" will not be chopped up into directory and filename parts. If an intermediate file is found by pattern search, the intermediate file is set up as a target by the recursive call and is also made a dependency of FILE. DEPTH is used for debugging messages. */ static int pattern_search (struct file *file, int archive, unsigned int depth, unsigned int recursions) { /* Filename we are searching for a rule for. */ const char *filename = archive ? strchr (file->name, '(') : file->name; /* Length of FILENAME. */ size_t namelen = strlen (filename); /* The last slash in FILENAME (or nil if there is none). */ const char *lastslash; /* This is a file-object used as an argument in recursive calls. It never contains any data except during a recursive call. */ struct file *int_file = 0; /* List of dependencies found recursively. */ unsigned int max_deps = max_pattern_deps; struct patdeps *deplist = xmalloc (max_deps * sizeof (struct patdeps)); struct patdeps *pat = deplist; /* Names of possible dependencies are constructed in this buffer. We may replace % by $(*F) for second expansion, increasing the length. */ char *depname = alloca (namelen + max_pattern_dep_length + 4); /* The start and length of the stem of FILENAME for the current rule. */ const char *stem = 0; size_t stemlen = 0; size_t fullstemlen = 0; /* Buffer in which we store all the rules that are possibly applicable. */ struct tryrule *tryrules = xmalloc (num_pattern_rules * max_pattern_targets * sizeof (struct tryrule)); /* Number of valid elements in TRYRULES. */ unsigned int nrules; /* The index in TRYRULES of the rule we found. */ unsigned int foundrule; /* Nonzero if should consider intermediate files as dependencies. */ int intermed_ok; /* Nonzero if we have initialized file variables for this target. */ int file_vars_initialized = 0; /* Nonzero if we have matched a pattern-rule target that is not just '%'. */ int specific_rule_matched = 0; unsigned int ri; /* uninit checks OK */ struct rule *rule; char *pathdir = NULL; size_t pathlen; PATH_VAR (stem_str); /* @@ Need to get rid of stem, stemlen, etc. */ #ifndef NO_ARCHIVES if (archive || ar_name (filename)) lastslash = 0; else #endif { /* 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 = memrchr (filename, '/', namelen - 1); #ifdef VMS if (lastslash == NULL) lastslash = strrchr (filename, ']'); if (lastslash == NULL) lastslash = strrchr (filename, '>'); if (lastslash == NULL) lastslash = strrchr (filename, ':'); #endif #ifdef HAVE_DOS_PATHS /* Handle backslashes (possibly mixed with forward slashes) and the case of "d:file". */ { char *bslash = memrchr (filename, '\\', namelen - 1); if (lastslash == 0 || bslash > lastslash) lastslash = bslash; if (lastslash == 0 && filename[0] && filename[1] == ':') lastslash = filename + 1; } #endif } pathlen = lastslash ? lastslash - filename + 1 : 0; /* First see which pattern rules match this target and may be considered. Put them in TRYRULES. */ nrules = 0; for (rule = pattern_rules; rule != 0; rule = rule->next) { unsigned int ti; /* If the pattern rule has deps but no commands, ignore it. Users cancel built-in rules by redefining them without commands. */ if (rule->deps != 0 && rule->cmds == 0) continue; /* If this rule is in use by a parent pattern_search, don't use it here. */ if (rule->in_use) { DBS (DB_IMPLICIT, (_("Avoiding implicit rule recursion.\n"))); continue; } for (ti = 0; ti < rule->num; ++ti) { const char *target = rule->targets[ti]; const char *suffix = rule->suffixes[ti]; char check_lastslash; /* Rules that can match any filename and are not terminal are ignored if we're recursing, so that they cannot be intermediate files. */ if (recursions > 0 && target[1] == '\0' && !rule->terminal) continue; if (rule->lens[ti] > namelen) /* It can't possibly match. */ continue; /* From the lengths of the filename and the pattern parts, find the stem: the part of the filename that matches the %. */ stem = filename + (suffix - target - 1); stemlen = namelen - rule->lens[ti] + 1; /* Set CHECK_LASTSLASH if FILENAME contains a directory prefix and the target pattern does not contain a slash. */ check_lastslash = 0; if (lastslash) { #ifdef VMS 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) { char *b = strchr (target, '\\'); check_lastslash = !(b || (target[0] && target[1] == ':')); } #endif } if (check_lastslash) { /* If so, don't include the directory prefix in STEM here. */ if (pathlen > stemlen) continue; stemlen -= pathlen; stem += pathlen; } /* Check that the rule pattern matches the text before the stem. */ if (check_lastslash) { if (stem > (lastslash + 1) && !strneq (target, lastslash + 1, stem - lastslash - 1)) continue; } else if (stem > filename && !strneq (target, filename, stem - filename)) continue; /* Check that the rule pattern matches the text after the stem. We could test simply use streq, but this way we compare the first two characters immediately. This saves time in the very common case where the first character matches because it is a period. */ if (*suffix != stem[stemlen] || (*suffix != '\0' && !streq (&suffix[1], &stem[stemlen + 1]))) continue; /* Record if we match a rule that not all filenames will match. */ if (target[1] != '\0') specific_rule_matched = 1; /* A rule with no dependencies and no commands exists solely to set specific_rule_matched when it matches. Don't try to use it. */ if (rule->deps == 0 && rule->cmds == 0) continue; /* Record this rule in TRYRULES and the index of the matching target in MATCHES. If several targets of the same rule match, that rule will be in TRYRULES more than once. */ tryrules[nrules].rule = rule; tryrules[nrules].matches = ti; tryrules[nrules].stemlen = stemlen + (check_lastslash ? pathlen : 0); tryrules[nrules].order = nrules; tryrules[nrules].checked_lastslash = check_lastslash; ++nrules; } } /* Bail out early if we haven't found any rules. */ if (nrules == 0) goto done; /* Sort the rules to place matches with the shortest stem first. This way the most specific rules will be tried first. */ if (nrules > 1) qsort (tryrules, nrules, sizeof (struct tryrule), stemlen_compare); /* If we have found a matching rule that won't match all filenames, retroactively reject any non-"terminal" rules that do always match. */ if (specific_rule_matched) for (ri = 0; ri < nrules; ++ri) if (!tryrules[ri].rule->terminal) { unsigned int j; for (j = 0; j < tryrules[ri].rule->num; ++j) if (tryrules[ri].rule->targets[j][1] == '\0') { tryrules[ri].rule = 0; break; } } /* Try each rule once without intermediate files, then once with them. */ for (intermed_ok = 0; intermed_ok < 2; ++intermed_ok) { pat = deplist; /* Try each pattern rule till we find one that applies. If it does, expand its dependencies (as substituted) and chain them in DEPS. */ for (ri = 0; ri < nrules; ri++) { struct dep *dep; char check_lastslash; unsigned int failed = 0; int file_variables_set = 0; unsigned int deps_found = 0; /* NPTR points to the part of the prereq we haven't processed. */ const char *nptr = 0; int order_only = 0; unsigned int matches; rule = tryrules[ri].rule; /* RULE is nil when we discover that a rule, already placed in TRYRULES, should not be applied. */ if (rule == 0) continue; /* Reject any terminal rules if we're looking to make intermediate files. */ if (intermed_ok && rule->terminal) continue; /* From the lengths of the filename and the matching pattern parts, find the stem: the part of the filename that matches the %. */ matches = tryrules[ri].matches; stem = filename + (rule->suffixes[matches] - rule->targets[matches]) - 1; stemlen = (namelen - rule->lens[matches]) + 1; check_lastslash = tryrules[ri].checked_lastslash; if (check_lastslash) { stem += pathlen; stemlen -= pathlen; /* We need to add the directory prefix, so set it up. */ if (! pathdir) { pathdir = alloca (pathlen + 1); memcpy (pathdir, filename, pathlen); pathdir[pathlen] = '\0'; } } if (stemlen + (check_lastslash ? pathlen : 0) > GET_PATH_MAX) { DBS (DB_IMPLICIT, (_("Stem too long: '%s%.*s'.\n"), check_lastslash ? pathdir : "", (int) stemlen, stem)); continue; } DBS (DB_IMPLICIT, (_("Trying pattern rule with stem '%.*s'.\n"), (int) stemlen, stem)); if (!check_lastslash) { memcpy (stem_str, stem, stemlen); stem_str[stemlen] = '\0'; } else { /* We want to prepend the directory from the original FILENAME onto the stem. */ memcpy (stem_str, filename, pathlen); memcpy (stem_str + pathlen, stem, stemlen); stem_str[pathlen + stemlen] = '\0'; } /* If there are no prerequisites, then this rule matches. */ if (rule->deps == 0) break; /* Temporary assign STEM to file->stem (needed to set file variables below). */ file->stem = stem_str; /* Mark this rule as in use so a recursive pattern_search won't try to use it. */ rule->in_use = 1; /* Try each prerequisite; see if it exists or can be created. We'll build a list of prereq info in DEPLIST. Due to 2nd expansion we may have to process multiple prereqs for a single dep entry. */ pat = deplist; dep = rule->deps; nptr = dep_name (dep); while (1) { struct dep *dl, *d; char *p; /* If we're out of name to parse, start the next prereq. */ if (! nptr) { dep = dep->next; if (dep == 0) break; nptr = dep_name (dep); } /* If we don't need a second expansion, just replace the %. */ if (! dep->need_2nd_expansion) { p = strchr (nptr, '%'); if (p == 0) strcpy (depname, nptr); else { char *o = depname; if (check_lastslash) { memcpy (o, filename, pathlen); o += pathlen; } memcpy (o, nptr, p - nptr); o += p - nptr; memcpy (o, stem, stemlen); o += stemlen; strcpy (o, p + 1); } /* Parse the expanded string. It might have wildcards. */ p = depname; dl = PARSE_FILE_SEQ (&p, struct dep, MAP_NUL, NULL, PARSEFS_ONEWORD); for (d = dl; d != NULL; d = d->next) { ++deps_found; d->ignore_mtime = dep->ignore_mtime; d->ignore_automatic_vars = dep->ignore_automatic_vars; } /* We've used up this dep, so next time get a new one. */ nptr = 0; } /* We have to perform second expansion on this prereq. In an ideal world we would take the dependency line, substitute the stem, re-expand the whole line and chop it into individual prerequisites. Unfortunately this won't work because of the "check_lastslash" twist. Instead, we will have to go word by word, taking $()'s into account. For each word we will substitute the stem, re-expand, chop it up, and, if check_lastslash != 0, add the directory part to each resulting prerequisite. */ else { int add_dir = 0; size_t len; struct dep **dptr; nptr = get_next_word (nptr, &len); if (nptr == 0) continue; /* See this is a transition to order-only prereqs. */ if (! order_only && len == 1 && nptr[0] == '|') { order_only = 1; nptr += len; continue; } /* If the dependency name has %, substitute the stem. If we just replace % with the stem value then later, when we do the 2nd expansion, we will re-expand this stem value again. This is not good if you have certain characters in your stem (like $). Instead, we will replace % with $* or $(*F) and allow the second expansion to take care of it for us. This way (since $* and $(*F) are simple variables) there won't be additional re-expansion of the stem. */ p = lindex (nptr, nptr + len, '%'); if (p == 0) { memcpy (depname, nptr, len); depname[len] = '\0'; } else { size_t i = p - nptr; char *o = depname; memcpy (o, nptr, i); o += i; if (check_lastslash) { add_dir = 1; memcpy (o, "$(*F)", 5); o += 5; } else { memcpy (o, "$*", 2); o += 2; } memcpy (o, p + 1, len - i - 1); o[len - i - 1] = '\0'; } /* Set up for the next word. */ nptr += len; /* Initialize and set file variables if we haven't already done so. */ if (!file_vars_initialized) { initialize_file_variables (file, 0); set_file_variables (file); file_vars_initialized = 1; } /* Update the stem value in $* for this rule. */ else if (!file_variables_set) { define_variable_for_file ( "*", 1, file->stem, o_automatic, 0, file); file_variables_set = 1; } /* Perform the 2nd expansion. */ p = variable_expand_for_file (depname, file); dptr = &dl; /* Parse the results into a deps list. */ do { /* Parse the expanded string. */ struct dep *dp = PARSE_FILE_SEQ (&p, struct dep, order_only ? MAP_NUL : MAP_PIPE, add_dir ? pathdir : NULL, PARSEFS_NONE); *dptr = dp; for (d = dp; d != NULL; d = d->next) { ++deps_found; if (order_only) d->ignore_mtime = 1; dptr = &d->next; } /* If we stopped due to an order-only token, note it. */ if (*p == '|') { order_only = 1; ++p; } } while (*p != '\0'); } /* If there are more than max_pattern_deps prerequisites (due to 2nd expansion), reset it and realloc the arrays. */ if (deps_found > max_deps) { size_t l = pat - deplist; /* This might have changed due to recursion. */ max_pattern_deps = MAX(max_pattern_deps, deps_found); max_deps = max_pattern_deps; deplist = xrealloc (deplist, max_deps * sizeof (struct patdeps)); pat = deplist + l; } /* Go through the nameseq and handle each as a prereq name. */ for (d = dl; d != 0; d = d->next) { struct dep *expl_d; int is_rule = d->name == dep_name (dep); if (file_impossible_p (d->name)) { /* If this prereq has already been ruled "impossible", then the rule fails. Don't bother trying it on the second pass either since we know that will fail. */ DBS (DB_IMPLICIT, (is_rule ? _("Rejecting impossible rule prerequisite '%s'.\n") : _("Rejecting impossible implicit prerequisite '%s'.\n"), d->name)); tryrules[ri].rule = 0; failed = 1; break; } memset (pat, '\0', sizeof (struct patdeps)); pat->ignore_mtime = d->ignore_mtime; pat->ignore_automatic_vars = d->ignore_automatic_vars; DBS (DB_IMPLICIT, (is_rule ? _("Trying rule prerequisite '%s'.\n") : _("Trying implicit prerequisite '%s'.\n"), d->name)); /* If this prereq is also explicitly mentioned for FILE, skip all tests below since it must be built no matter which implicit rule we choose. */ for (expl_d = file->deps; expl_d != 0; expl_d = expl_d->next) if (streq (dep_name (expl_d), d->name)) break; if (expl_d != 0) { (pat++)->name = d->name; continue; } /* The DEP->changed flag says that this dependency resides in a nonexistent directory. So we normally can skip looking for the file. However, if CHECK_LASTSLASH is set, then the dependency file we are actually looking for is in a different directory (the one gotten by prepending FILENAME's directory), so it might actually exist. */ /* @@ dep->changed check is disabled. */ if (lookup_file (d->name) != 0 /*|| ((!dep->changed || check_lastslash) && */ || file_exists_p (d->name)) { (pat++)->name = d->name; continue; } /* This code, given FILENAME = "lib/foo.o", dependency name "lib/foo.c", and VPATH=src, searches for "src/lib/foo.c". */ { const char *vname = vpath_search (d->name, 0, NULL, NULL); if (vname) { DBS (DB_IMPLICIT, (_("Found prerequisite '%s' as VPATH '%s'\n"), d->name, vname)); (pat++)->name = d->name; continue; } } /* We could not find the file in any place we should look. Try to make this dependency as an intermediate file, but only on the second pass. */ if (intermed_ok) { DBS (DB_IMPLICIT, (_("Looking for a rule with intermediate file '%s'.\n"), d->name)); if (int_file == 0) int_file = alloca (sizeof (struct file)); memset (int_file, '\0', sizeof (struct file)); int_file->name = d->name; if (pattern_search (int_file, 0, depth + 1, recursions + 1)) { pat->pattern = int_file->name; int_file->name = d->name; pat->file = int_file; int_file = 0; (pat++)->name = d->name; continue; } /* If we have tried to find P as an intermediate file and failed, mark that name as impossible so we won't go through the search again later. */ if (int_file->variables) free_variable_set (int_file->variables); if (int_file->pat_variables) free_variable_set (int_file->pat_variables); file_impossible (d->name); } /* A dependency of this rule does not exist. Therefore, this rule fails. */ failed = 1; break; } /* Free the ns chain. */ free_dep_chain (dl); if (failed) break; } /* Reset the stem in FILE. */ file->stem = 0; /* This rule is no longer 'in use' for recursive searches. */ rule->in_use = 0; if (! failed) /* This pattern rule does apply. Stop looking for one. */ break; /* This pattern rule does not apply. Keep looking. */ } /* If we found an applicable rule without intermediate files, don't try with them. */ if (ri < nrules) break; rule = 0; } /* RULE is nil if the loop went through the list but everything failed. */ if (rule == 0) goto done; foundrule = ri; /* If we are recursing, store the pattern that matched FILENAME in FILE->name for use in upper levels. */ if (recursions > 0) /* Kludge-o-matic */ file->name = rule->targets[tryrules[foundrule].matches]; /* DEPLIST lists the prerequisites for the rule we found. This includes the intermediate files, if any. Convert them into entries on the deps-chain of FILE. */ while (pat-- > deplist) { struct dep *dep; const char *s; if (pat->file != 0) { /* If we need to use an intermediate file, make sure it is entered as a target, with the info that was found for it in the recursive pattern_search call. We know that the intermediate file did not already exist as a target; therefore we can assume that the deps and cmds of F below are null before we change them. */ struct file *imf = pat->file; struct file *f = lookup_file (imf->name); /* We don't want to delete an intermediate file that happened to be a prerequisite of some (other) target. Mark it as secondary. We don't want it to be precious as that disables DELETE_ON_ERROR etc. */ if (f != 0) f->secondary = 1; else f = enter_file (imf->name); f->deps = imf->deps; f->cmds = imf->cmds; f->stem = imf->stem; f->variables = imf->variables; f->pat_variables = imf->pat_variables; f->pat_searched = imf->pat_searched; f->also_make = imf->also_make; f->is_target = 1; f->intermediate = 1; f->tried_implicit = 1; imf = lookup_file (pat->pattern); if (imf != 0 && imf->precious) f->precious = 1; for (dep = f->deps; dep != 0; dep = dep->next) { dep->file = enter_file (dep->name); dep->name = 0; dep->file->tried_implicit |= dep->changed; } } dep = alloc_dep (); dep->ignore_mtime = pat->ignore_mtime; dep->ignore_automatic_vars = pat->ignore_automatic_vars; s = strcache_add (pat->name); if (recursions) dep->name = s; else { dep->file = lookup_file (s); if (dep->file == 0) dep->file = enter_file (s); } if (pat->file == 0 && tryrules[foundrule].rule->terminal) { /* If the file actually existed (was not an intermediate file), and the rule that found it was a terminal one, then we want to mark the found file so that it will not have implicit rule search done for it. If we are not entering a 'struct file' for it now, we indicate this with the 'changed' flag. */ if (dep->file == 0) dep->changed = 1; else dep->file->tried_implicit = 1; } dep->next = file->deps; file->deps = dep; } if (!tryrules[foundrule].checked_lastslash) { /* Always allocate new storage, since STEM might be on the stack for an intermediate file. */ file->stem = strcache_add_len (stem, stemlen); fullstemlen = stemlen; } else { /* We want to prepend the directory from the original FILENAME onto the stem. */ fullstemlen = pathlen + stemlen; memcpy (stem_str, filename, pathlen); memcpy (stem_str + pathlen, stem, stemlen); stem_str[fullstemlen] = '\0'; file->stem = strcache_add (stem_str); } file->cmds = rule->cmds; file->is_target = 1; /* Set precious flag. */ { struct file *f = lookup_file (rule->targets[tryrules[foundrule].matches]); if (f && f->precious) file->precious = 1; } /* If this rule builds other targets, too, put the others into FILE's 'also_make' member. */ if (rule->num > 1) for (ri = 0; ri < rule->num; ++ri) if (ri != tryrules[foundrule].matches) { char *nm = alloca (rule->lens[ri] + fullstemlen + 1); char *p = nm; struct file *f; struct dep *new = alloc_dep (); /* GKM FIMXE: handle '|' here too */ memcpy (p, rule->targets[ri], rule->suffixes[ri] - rule->targets[ri] - 1); p += rule->suffixes[ri] - rule->targets[ri] - 1; memcpy (p, file->stem, fullstemlen); p += fullstemlen; memcpy (p, rule->suffixes[ri], rule->lens[ri] - (rule->suffixes[ri] - rule->targets[ri])+1); new->name = strcache_add (nm); new->file = enter_file (new->name); new->next = file->also_make; /* Set precious flag. */ f = lookup_file (rule->targets[ri]); if (f && f->precious) new->file->precious = 1; /* Set the is_target flag so that this file is not treated as intermediate by the pattern rule search algorithm and file_exists_p cannot pick it up yet. */ new->file->is_target = 1; file->also_make = new; } done: free (tryrules); free (deplist); return rule != 0; } make-4.3/src/default.c0000644000175000017500000005164013603564437011616 00000000000000/* Data base of default implicit rules for GNU Make. Copyright (C) 1988-2020 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 . */ #include "makeint.h" #include #include "filedef.h" #include "variable.h" #include "rule.h" #include "dep.h" #include "job.h" #include "commands.h" /* Define GCC_IS_NATIVE if gcc is the native development environment on your system (gcc/bison/flex vs cc/yacc/lex). */ #if defined(__MSDOS__) || defined(__EMX__) # define GCC_IS_NATIVE #endif /* This is the default list of suffixes for suffix rules. '.s' must come last, so that a '.o' file will be made from a '.c' or '.p' or ... file rather than from a .s file. */ static char default_suffixes[] #ifdef VMS /* VMS should include all UNIX/POSIX + some VMS extensions */ = ".out .exe .a .olb .hlb .tlb .mlb .ln .o .obj .c .cxx .cc .cpp .pas .p \ .for .f .r .y .l .ym .yl .mar .s .ss .i .ii .mod .sym .def .h .info .dvi \ .tex .texinfo .texi .txinfo .mem .hlp .brn .rnh .rno .rnt .rnx .w .ch .cweb \ .web .com .sh .elc .el"; #elif defined(__EMX__) = ".out .a .ln .o .c .cc .C .cpp .p .f .F .m .r .y .l .ym .yl .s .S \ .mod .sym .def .h .info .dvi .tex .texinfo .texi .txinfo \ .w .ch .web .sh .elc .el .obj .exe .dll .lib"; #else = ".out .a .ln .o .c .cc .C .cpp .p .f .F .m .r .y .l .ym .yl .s .S \ .mod .sym .def .h .info .dvi .tex .texinfo .texi .txinfo \ .w .ch .web .sh .elc .el"; #endif static struct pspec default_pattern_rules[] = { #ifdef VMS { "(%)", "%", "@if f$$search(\"$@\") .eqs. \"\" then $(LIBRARY)/CREATE/" "$(or " "$(patsubst %,TEXT,$(filter %.tlb %.TLB,$@))," "$(patsubst %,HELP,$(filter %.hlb %.HLB,$@))," "$(patsubst %,MACRO,$(filter %.mlb %.MLB,$@))," "$(and " "$(patsubst %,SHARE,$(filter %.olb %.OLB,$@))," "$(patsubst %,SHARE,$(filter %.exe %.EXE,$<)))," "OBJECT)" " $@\n" "$(AR) $(ARFLAGS) $@ $<" }, #else { "(%)", "%", "$(AR) $(ARFLAGS) $@ $<" }, #endif /* The X.out rules are only in BSD's default set because BSD Make has no null-suffix rules, so 'foo.out' and 'foo' are the same thing. */ #ifdef VMS { "%.exe", "%", "$(CP) $< $@" }, #endif { "%.out", "%", "@rm -f $@ \n cp $< $@" }, /* Syntax is "ctangle foo.w foo.ch foo.c". */ { "%.c", "%.w %.ch", "$(CTANGLE) $^ $@" }, { "%.tex", "%.w %.ch", "$(CWEAVE) $^ $@" }, { 0, 0, 0 } }; static struct pspec default_terminal_rules[] = { #ifdef VMS /* RCS. */ { "%", "%$$5lv", /* Multinet style */ "if f$$search(\"$@\") .nes. \"\" then +$(CHECKOUT,v)" }, { "%", "[.$$rcs]%$$5lv", /* Multinet style */ "if f$$search(\"$@\") .nes. \"\" then +$(CHECKOUT,v)" }, { "%", "%_v", /* Normal style */ "if f$$search(\"$@\") .nes. \"\" then +$(CHECKOUT,v)" }, { "%", "[.rcs]%_v", /* Normal style */ "if f$$search(\"$@\") .nes. \"\" then +$(CHECKOUT,v)" }, /* SCCS. */ /* ain't no SCCS on vms */ #else /* RCS. */ { "%", "%,v", "$(CHECKOUT,v)" }, { "%", "RCS/%,v", "$(CHECKOUT,v)" }, { "%", "RCS/%", "$(CHECKOUT,v)" }, /* SCCS. */ { "%", "s.%", "$(GET) $(GFLAGS) $(SCCS_OUTPUT_OPTION) $<" }, { "%", "SCCS/s.%", "$(GET) $(GFLAGS) $(SCCS_OUTPUT_OPTION) $<" }, #endif /* !VMS */ { 0, 0, 0 } }; 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", "$(COMPILE.c) $^ \n $(LINK.obj) $(subst .c,.obj,$^) $(LOADLIBES) $(LDLIBS) $(CRT0) /exe=$@", ".cc.exe", #ifdef GCC_IS_NATIVE "$(COMPILE.cc) $^ \n $(LINK.obj) $(CXXSTARTUP),sys$$disk:[]$(subst .cc,.obj,$^) $(LOADLIBES) $(LXLIBS) $(LDLIBS) $(CXXRT0) /exe=$@", #else "$(COMPILE.cc) $^ \n $(CXXLINK.obj) $(subst .cc,.obj,$^) $(LOADLIBES) $(LXLIBS) $(LDLIBS) $(CXXRT0) /exe=$@", ".cxx.exe", "$(COMPILE.cxx) $^ \n $(CXXLINK.obj) $(subst .cxx,.obj,$^) $(LOADLIBES) $(LXLIBS) $(LDLIBS) $(CXXRT0) /exe=$@", #endif ".for.exe", "$(COMPILE.for) $^ \n $(LINK.obj) $(subst .for,.obj,$^) $(LOADLIBES) $(LDLIBS) /exe=$@", ".pas.exe", "$(COMPILE.pas) $^ \n $(LINK.obj) $(subst .pas,.obj,$^) $(LOADLIBES) $(LDLIBS) /exe=$@", ".com", "copy $< >$@", ".mar.obj", "$(COMPILE.mar) /obj=$@ $<", ".s.obj", "$(COMPILE.s) /obj=$@ $<", ".ss.obj", "$(COMPILE.s) /obj=$@ $<", ".c.i", "$(COMPILE.c)/prep /list=$@ $<", ".c.s", "$(COMPILE.c)/noobj/machine /list=$@ $<", ".i.s", "$(COMPILE.c)/noprep/noobj/machine /list=$@ $<", ".c.obj", "$(COMPILE.c) /obj=$@ $<", ".c.o", "$(COMPILE.c) /obj=$@ $<", ".cc.ii", "$(COMPILE.cc)/prep /list=$@ $<", ".cc.ss", "$(COMPILE.cc)/noobj/machine /list=$@ $<", ".ii.ss", "$(COMPILE.cc)/noprep/noobj/machine /list=$@ $<", ".cc.obj", "$(COMPILE.cc) /obj=$@ $<", ".cc.o", "$(COMPILE.cc) /obj=$@ $<", ".cxx.obj", "$(COMPILE.cxx) /obj=$@ $<", ".cxx.o", "$(COMPILE.cxx) /obj=$@ $<", ".for.obj", "$(COMPILE.for) /obj=$@ $<", ".for.o", "$(COMPILE.for) /obj=$@ $<", ".pas.obj", "$(COMPILE.pas) /obj=$@ $<", ".pas.o", "$(COMPILE.pas) /obj=$@ $<", ".y.c", "$(YACC.y) $< \n rename y_tab.c $@", ".l.c", "$(LEX.l) $< \n rename lexyy.c $@", ".texinfo.info", "$(MAKEINFO) $<", ".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", "$(LINK.o) $^ $(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", "cat $< >$@ \n chmod a+x $@", ".s.o", "$(COMPILE.s) -o $@ $<", ".S.o", "$(COMPILE.S) -o $@ $<", ".c.o", "$(COMPILE.c) $(OUTPUT_OPTION) $<", ".cc.o", "$(COMPILE.cc) $(OUTPUT_OPTION) $<", ".C.o", "$(COMPILE.C) $(OUTPUT_OPTION) $<", ".cpp.o", "$(COMPILE.cpp) $(OUTPUT_OPTION) $<", ".f.o", "$(COMPILE.f) $(OUTPUT_OPTION) $<", ".m.o", "$(COMPILE.m) $(OUTPUT_OPTION) $<", ".p.o", "$(COMPILE.p) $(OUTPUT_OPTION) $<", ".F.o", "$(COMPILE.F) $(OUTPUT_OPTION) $<", ".r.o", "$(COMPILE.r) $(OUTPUT_OPTION) $<", ".mod.o", "$(COMPILE.mod) -o $@ $<", ".c.ln", "$(LINT.c) -C$* $<", ".y.ln", #ifndef __MSDOS__ "$(YACC.y) $< \n $(LINT.c) -C$* y.tab.c \n $(RM) y.tab.c", #else "$(YACC.y) $< \n $(LINT.c) -C$* y_tab.c \n $(RM) y_tab.c", #endif ".l.ln", "@$(RM) $*.c\n $(LEX.l) $< > $*.c\n$(LINT.c) -i $*.c -o $@\n $(RM) $*.c", ".y.c", #ifndef __MSDOS__ "$(YACC.y) $< \n mv -f y.tab.c $@", #else "$(YACC.y) $< \n mv -f y_tab.c $@", #endif ".l.c", "@$(RM) $@ \n $(LEX.l) $< > $@", ".ym.m", "$(YACC.m) $< \n mv -f y.tab.c $@", ".lm.m", "@$(RM) $@ \n $(LEX.m) $< > $@", ".F.f", "$(PREPROCESS.F) $(OUTPUT_OPTION) $<", ".r.f", "$(PREPROCESS.r) $(OUTPUT_OPTION) $<", /* This might actually make lex.yy.c if there's no %R% directive in $*.l, but in that case why were you trying to make $*.r anyway? */ ".l.r", "$(LEX.l) $< > $@ \n mv -f lex.yy.r $@", ".S.s", "$(PREPROCESS.S) $< > $@", ".texinfo.info", "$(MAKEINFO) $(MAKEINFO_FLAGS) $< -o $@", ".texi.info", "$(MAKEINFO) $(MAKEINFO_FLAGS) $< -o $@", ".txinfo.info", "$(MAKEINFO) $(MAKEINFO_FLAGS) $< -o $@", ".tex.dvi", "$(TEX) $<", ".texinfo.dvi", "$(TEXI2DVI) $(TEXI2DVI_FLAGS) $<", ".texi.dvi", "$(TEXI2DVI) $(TEXI2DVI_FLAGS) $<", ".txinfo.dvi", "$(TEXI2DVI) $(TEXI2DVI_FLAGS) $<", ".w.c", "$(CTANGLE) $< - $@", /* The '-' says there is no '.ch' file. */ ".web.p", "$(TANGLE) $<", ".w.tex", "$(CWEAVE) $< - $@", /* The '-' says there is no '.ch' file. */ ".web.tex", "$(WEAVE) $<", #endif /* !VMS */ 0, 0, }; static const char *default_variables[] = { #ifdef VMS #ifdef __ALPHA "ARCH", "ALPHA", #endif #ifdef __ia64 "ARCH", "IA64", #endif #ifdef __VAX "ARCH", "VAX", #endif "AR", "library", "LIBRARY", "library", "ARFLAGS", "/replace", "AS", "macro", "MACRO", "macro", #ifdef GCC_IS_NATIVE "CC", "gcc", #else "CC", "cc", #endif "CD", "builtin_cd", "ECHO", "builtin_echo", #ifdef GCC_IS_NATIVE "C++", "gcc/plus", "CXX", "gcc/plus", #else "C++", "cxx", "CXX", "cxx", #ifndef __ia64 "CXXLD", "cxxlink", "CXXLINK", "cxxlink", #else /* CXXLINK is not used on VMS/IA64 */ "CXXLD", "link", "CXXLINK", "link", #endif #endif "CO", "co", "CPP", "$(CC) /preprocess_only", "FC", "fortran", /* System V uses these, so explicit rules using them should work. However, there is no way to make implicit rules use them and FC. */ "F77", "$(FC)", "F77FLAGS", "$(FFLAGS)", "LD", "link", "LEX", "lex", "PC", "pascal", "YACC", "bison/yacc", "YFLAGS", "/Define/Verbose", "BISON", "bison", "MAKEINFO", "makeinfo", "TEX", "tex", "TEXINDEX", "texindex", "RM", "delete/nolog", "CSTARTUP", "", #ifdef GCC_IS_NATIVE "CRT0", ",sys$$library:vaxcrtl.olb/lib,gnu_cc_library:crt0.obj", "CXXSTARTUP", "gnu_cc_library:crtbegin.obj", "CXXRT0", ",sys$$library:vaxcrtl.olb/lib,gnu_cc_library:crtend.obj,gnu_cc_library:gxx_main.obj", "LXLIBS", ",gnu_cc_library:libstdcxx.olb/lib,gnu_cc_library:libgccplus.olb/lib", "LDLIBS", ",gnu_cc_library:libgcc.olb/lib", #else "CRT0", "", "CXXSTARTUP", "", "CXXRT0", "", "LXLIBS", "", "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", "CP", "copy", ".LIBPATTERNS", "%.olb lib%.a", #else /* !VMS */ "AR", "ar", "ARFLAGS", "rv", "AS", "as", #ifdef GCC_IS_NATIVE "CC", "gcc", # ifdef __MSDOS__ "CXX", "gpp", /* g++ is an invalid name on MSDOS */ # else "CXX", "gcc", # endif /* __MSDOS__ */ "OBJC", "gcc", #else "CC", "cc", "CXX", "g++", "OBJC", "cc", #endif /* This expands to $(CO) $(COFLAGS) $< $@ if $@ does not exist, and to the empty string if $@ does exist. */ "CHECKOUT,v", "+$(if $(wildcard $@),,$(CO) $(COFLAGS) $< $@)", "CO", "co", "COFLAGS", "", "CPP", "$(CC) -E", #ifdef CRAY "CF77PPFLAGS", "-P", "CF77PP", "/lib/cpp", "CFT", "cft77", "CF", "cf77", "FC", "$(CF)", #else /* Not CRAY. */ #ifdef _IBMR2 "FC", "xlf", #else #ifdef __convex__ "FC", "fc", #else "FC", "f77", #endif /* __convex__ */ #endif /* _IBMR2 */ /* System V uses these, so explicit rules using them should work. However, there is no way to make implicit rules use them and FC. */ "F77", "$(FC)", "F77FLAGS", "$(FFLAGS)", #endif /* Cray. */ "GET", SCCS_GET, "LD", "ld", #ifdef GCC_IS_NATIVE "LEX", "flex", #else "LEX", "lex", #endif "LINT", "lint", "M2C", "m2c", #ifdef pyr "PC", "pascal", #else #ifdef CRAY "PC", "PASCAL", "SEGLDR", "segldr", #else "PC", "pc", #endif /* CRAY. */ #endif /* pyr. */ #ifdef GCC_IS_NATIVE "YACC", "bison -y", #else "YACC", "yacc", /* Or "bison -y" */ #endif "MAKEINFO", "makeinfo", "TEX", "tex", "TEXI2DVI", "texi2dvi", "WEAVE", "weave", "CWEAVE", "cweave", "TANGLE", "tangle", "CTANGLE", "ctangle", "RM", "rm -f", "LINK.o", "$(CC) $(LDFLAGS) $(TARGET_ARCH)", "COMPILE.c", "$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c", "LINK.c", "$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $(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) -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", "YACC.m", "$(YACC) $(YFLAGS)", "LEX.m", "$(LEX) $(LFLAGS) -t", "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.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)", "LINK.s", "$(CC) $(ASFLAGS) $(LDFLAGS) $(TARGET_MACH)", "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)", #ifndef NO_MINUS_C_MINUS_O "OUTPUT_OPTION", "-o $@", #endif #ifdef SCCS_GET_MINUS_G "SCCS_OUTPUT_OPTION", "-G$@", #endif #if defined(_AMIGA) ".LIBPATTERNS", "%.lib", #elif defined(__MSDOS__) ".LIBPATTERNS", "lib%.a $(DJDIR)/lib/lib%.a", #elif defined(__APPLE__) ".LIBPATTERNS", "lib%.dylib lib%.a", #elif defined(__CYGWIN__) || defined(WINDOWS32) ".LIBPATTERNS", "lib%.dll.a %.dll.a lib%.a %.lib lib%.dll %.dll", #else ".LIBPATTERNS", "lib%.so lib%.a", #endif #endif /* !VMS */ /* Make this assignment to avoid undefined variable warnings. */ "GNUMAKEFLAGS", "", 0, 0 }; /* Set up the default .SUFFIXES list. */ void set_default_suffixes (void) { suffix_file = enter_file (strcache_add (".SUFFIXES")); suffix_file->builtin = 1; if (no_builtin_rules_flag) define_variable_cname ("SUFFIXES", "", o_default, 0); else { struct dep *d; const char *p = default_suffixes; suffix_file->deps = enter_prereqs (PARSE_SIMPLE_SEQ ((char **)&p, struct dep), NULL); for (d = suffix_file->deps; d; d = d->next) d->file->builtin = 1; define_variable_cname ("SUFFIXES", default_suffixes, o_default, 0); } } /* Enter the default suffix rules as file rules. This used to be done in install_default_implicit_rules, but that loses because we want the suffix rules installed before reading makefiles, and the pattern rules installed after. */ void install_default_suffix_rules (void) { const char **s; if (no_builtin_rules_flag) return; for (s = default_suffix_rules; *s != 0; s += 2) { struct file *f = enter_file (strcache_add (s[0])); /* This function should run before any makefile is parsed. */ assert (f->cmds == 0); f->cmds = xmalloc (sizeof (struct commands)); f->cmds->fileinfo.filenm = 0; f->cmds->commands = xstrdup (s[1]); f->cmds->command_lines = 0; f->cmds->recipe_prefix = RECIPEPREFIX_DEFAULT; f->builtin = 1; } } /* Install the default pattern rules. */ void install_default_implicit_rules (void) { struct pspec *p; if (no_builtin_rules_flag) return; for (p = default_pattern_rules; p->target != 0; ++p) install_pattern_rule (p, 0); for (p = default_terminal_rules; p->target != 0; ++p) install_pattern_rule (p, 1); } void define_default_variables (void) { const char **s; if (no_builtin_variables_flag) return; for (s = default_variables; *s != 0; s += 2) define_variable (s[0], strlen (s[0]), s[1], o_default, 1); } void undefine_default_variables (void) { const char **s; for (s = default_variables; *s != 0; s += 2) undefine_variable_global (s[0], strlen (s[0]), o_default); } make-4.3/src/configh.dos0000444000175000017500000000652213611136527012141 00000000000000/* configh.dos -- hand-massaged config.h file for MS-DOS builds -*-C-*- Copyright (C) 1994-2020 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 . */ /* Include this header to make __DJGPP_MINOR__ available because DJGPP ports of GCC 4.3.0 and later no longer do it automatically. */ #include /* Many things are defined already by a system header. */ #include #if __DJGPP__ > 2 || __DJGPP_MINOR__ > 1 /* Define to 1 if 'sys_siglist' is declared by or . */ # define SYS_SIGLIST_DECLARED 1 /* Define to 1 if the C library defines the variable '_sys_siglist'. */ # define HAVE_DECL_SYS_SIGLIST 1 #else /* Define NSIG. */ # define NSIG SIGMAX #endif /* Use high resolution file timestamps if nonzero. */ #define FILE_TIMESTAMP_HI_RES 0 /* Define to 1 if you have 'alloca', as a function or macro. */ #define HAVE_ALLOCA 1 /* Define to 1 if you have the fdopen function. */ #define HAVE_FDOPEN 1 /* Define to 1 if you have the 'getgroups' function. */ #define HAVE_GETGROUPS 1 /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 /* Define to 1 if you have the mkstemp function. */ #define HAVE_MKSTEMP 1 /* Define to 1 if you have the 'mktemp' function. */ #define HAVE_MKTEMP 1 /* Define to 1 if you have the 'setlinebuf' function. */ #define HAVE_SETLINEBUF 1 /* Define to 1 if you have the 'setvbuf' function. */ #define HAVE_SETVBUF 1 #define SCCS_GET "get" /* Define to 'unsigned long' or 'unsigned long long' if doesn't define. */ #define uintmax_t unsigned long long /* Define the type of the first arg to select(). */ #define fd_set_size_t int /* Define to 1 if you have the select function. */ #define HAVE_SELECT 1 /* Define to 1 if you have the stricmp function. */ #define HAVE_STRICMP 1 /* Define to 1 if you have the 'strncasecmp' function. */ #define HAVE_STRNCASECMP 1 /* Name of the package */ #define PACKAGE "make" /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "bug-make@gnu.org" /* Define to the full name of this package. */ #define PACKAGE_NAME "GNU make" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "GNU make 4.3" /* 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.3" /* Output sync sypport */ #define NO_OUTPUT_SYNC /* Version number of package */ #define VERSION "4.3" /* Build host information. */ #define MAKE_HOST "i386-pc-msdosdjgpp" /* Grok DOS paths (drive specs and backslash path element separators) */ #define HAVE_DOS_PATHS /* Define to `int' if does not define. */ #define ssize_t int make-4.3/src/posixos.c0000644000175000017500000003047213603564437011676 00000000000000/* POSIX-based operating system interface for GNU Make. Copyright (C) 2016-2020 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 . */ #include "makeint.h" #include #ifdef HAVE_FCNTL_H # include #elif defined(HAVE_SYS_FILE_H) # include #endif #if defined(HAVE_PSELECT) && defined(HAVE_SYS_SELECT_H) # include #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) fd_noinherit (job_rfd); return job_rfd; #endif } static void set_blocking (int fd, int blocking) { /* If we're not using pselect() don't change the blocking. */ #ifdef HAVE_PSELECT int flags; EINTRLOOP (flags, fcntl (fd, F_GETFL)); if (flags >= 0) { int r; flags = blocking ? (flags & ~O_NONBLOCK) : (flags | O_NONBLOCK); EINTRLOOP (r, fcntl (fd, F_SETFL, flags)); if (r < 0) pfatal_with_name ("fcntl(O_NONBLOCK)"); } #endif } unsigned int jobserver_setup (int slots) { int r; EINTRLOOP (r, pipe (job_fds)); if (r < 0) pfatal_with_name (_("creating jobs pipe")); /* By default we don't send the job pipe FDs to our children. See jobserver_pre_child() and jobserver_post_child(). */ fd_noinherit (job_fds[0]); fd_noinherit (job_fds[1]); 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")); } /* When using pselect() we want the read to be non-blocking. */ set_blocking (job_fds[0], 0); 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; } /* When using pselect() we want the read to be non-blocking. */ set_blocking (job_fds[0], 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; /* Use blocking reads to wait for all outstanding jobs. */ set_blocking (job_fds[0], 1); /* Close the write side, so the read() won't hang forever. */ 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 (recursive && job_fds[0] >= 0) { fd_inherit (job_fds[0]); fd_inherit (job_fds[1]); } } /* Reconfigure the jobserver after starting a child process. */ void jobserver_post_child (int recursive) { if (recursive && job_fds[0] >= 0) { fd_noinherit (job_fds[0]); fd_noinherit (job_fds[1]); } } 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) { struct timespec spec; struct timespec *specp = NULL; sigset_t empty; sigemptyset (&empty); if (timeout) { /* Alarm after one second (is this too granular?) */ spec.tv_sec = 1; spec.tv_nsec = 0; specp = &spec; } while (1) { fd_set readfds; int r; char intake; FD_ZERO (&readfds); FD_SET (job_fds[0], &readfds); r = pselect (job_fds[0]+1, &readfds, NULL, NULL, specp, &empty); if (r < 0) switch (errno) { case EINTR: /* SIGCHLD will show up as an EINTR. */ return 0; case EBADF: /* Someone closed the jobs pipe. That shouldn't happen but if it does we're done. */ O (fatal, NILF, _("job server shut down")); default: pfatal_with_name (_("pselect jobs pipe")); } if (r == 0) /* Timeout. */ return 0; /* The read FD is ready: read it! This is non-blocking. */ EINTRLOOP (r, read (job_fds[0], &intake, 1)); if (r < 0) { /* Someone sniped our token! Try again. */ if (errno == EAGAIN) continue; pfatal_with_name (_("read jobs pipe")); } /* read() should never return 0: 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 /* HAVE_PSELECT */ #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. */ fd_noinherit (bad_stdin); } } return bad_stdin; } /* Set file descriptors to be inherited / not inherited by subprocesses. */ #if !defined(F_SETFD) || !defined(F_GETFD) void fd_inherit (int fd) {} void fd_noinherit (int fd) {} #else # ifndef FD_CLOEXEC # define FD_CLOEXEC 1 # endif void fd_inherit (int fd) { int flags; EINTRLOOP (flags, fcntl (fd, F_GETFD)); if (flags >= 0) { int r; flags &= ~FD_CLOEXEC; EINTRLOOP (r, fcntl (fd, F_SETFD, flags)); } } void fd_noinherit (int fd) { int flags; EINTRLOOP(flags, fcntl(fd, F_GETFD)); if (flags >= 0) { int r; flags |= FD_CLOEXEC; EINTRLOOP(r, fcntl(fd, F_SETFD, flags)); } } #endif make-4.3/src/variable.c0000644000175000017500000015565113603564437011766 00000000000000/* Internals of variables for GNU Make. Copyright (C) 1988-2020 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 . */ #include "makeint.h" #include #include "filedef.h" #include "dep.h" #include "job.h" #include "commands.h" #include "variable.h" #include "rule.h" #ifdef WINDOWS32 #include "pathstuff.h" #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; /* Pointer to the last struct in the pack of a specific size, from 1 to 255.*/ static struct pattern_var *last_pattern_vars[256]; /* Create a new pattern-specific variable struct. The new variable is inserted into the PATTERN_VARS list in the shortest patterns first order to support the shortest stem matching (the variables are matched in the reverse order so the ones with the longest pattern will be considered first). Variables with the same pattern length are inserted in the definition order. */ struct pattern_var * create_pattern_var (const char *target, const char *suffix) { size_t len = strlen (target); struct pattern_var *p = xcalloc (sizeof (struct pattern_var)); if (pattern_vars != 0) { if (len < 256 && last_pattern_vars[len] != 0) { p->next = last_pattern_vars[len]->next; last_pattern_vars[len]->next = p; } else { /* Find the position where we can insert this variable. */ struct pattern_var **v; for (v = &pattern_vars; ; v = &(*v)->next) { /* Insert at the end of the pack so that patterns with the same length appear in the order they were defined .*/ if (*v == 0 || (*v)->len > len) { p->next = *v; *v = p; break; } } } } else { pattern_vars = p; p->next = 0; } p->target = target; p->len = len; p->suffix = suffix + 1; if (len < 256) last_pattern_vars[len] = p; return p; } /* Look up a target in the pattern-specific variable list. */ static struct pattern_var * lookup_pattern_var (struct pattern_var *start, const char *target) { struct pattern_var *p; size_t targlen = strlen (target); for (p = start ? start->next : pattern_vars; p != 0; p = p->next) { const char *stem; size_t stemlen; if (p->len > targlen) /* It can't possibly match. */ continue; /* From the lengths of the filename and the pattern parts, find the stem: the part of the filename that matches the %. */ stem = target + (p->suffix - p->target - 1); stemlen = targlen - p->len + 1; /* Compare the text in the pattern before the stem, if any. */ if (stem > target && !strneq (p->target, target, stem - target)) continue; /* Compare the text in the pattern after the stem, if any. We could test simply using streq, but this way we compare the first two characters immediately. This saves time in the very common case where the first character matches because it is a period. */ if (*p->suffix == stem[stemlen] && (*p->suffix == '\0' || streq (&p->suffix[1], &stem[stemlen+1]))) break; } return p; } /* Hash table of all global variable definitions. */ static unsigned long variable_hash_1 (const void *keyv) { struct variable const *key = (struct variable const *) keyv; return_STRING_N_HASH_1 (key->name, key->length); } static unsigned long variable_hash_2 (const void *keyv) { struct variable const *key = (struct variable const *) keyv; return_STRING_N_HASH_2 (key->name, key->length); } static int variable_hash_cmp (const void *xv, const void *yv) { struct variable const *x = (struct variable const *) xv; struct variable const *y = (struct variable const *) yv; int result = x->length - y->length; if (result) return result; return_STRING_N_COMPARE (x->name, y->name, x->length); } #ifndef VARIABLE_BUCKETS #define VARIABLE_BUCKETS 523 #endif #ifndef PERFILE_VARIABLE_BUCKETS #define PERFILE_VARIABLE_BUCKETS 23 #endif #ifndef SMALL_SCOPE_VARIABLE_BUCKETS #define SMALL_SCOPE_VARIABLE_BUCKETS 13 #endif static struct variable_set global_variable_set; static struct variable_set_list global_setlist = { 0, &global_variable_set, 0 }; struct variable_set_list *current_variable_set_list = &global_setlist; /* Implement variables. */ void init_hash_global_variable_set (void) { hash_init (&global_variable_set.table, VARIABLE_BUCKETS, variable_hash_1, variable_hash_2, variable_hash_cmp); } /* Define variable named NAME with value VALUE in SET. VALUE is copied. LENGTH is the length of NAME, which does not need to be null-terminated. ORIGIN specifies the origin of the variable (makefile, command line or environment). If RECURSIVE is nonzero a flag is set in the variable saying that it should be recursively re-expanded. */ struct variable * define_variable_in_set (const char *name, size_t length, const char *value, enum variable_origin origin, int recursive, struct variable_set *set, const floc *flocp) { struct variable *v; struct variable **var_slot; struct variable var_key; if (set == NULL) set = &global_variable_set; var_key.name = (char *) name; var_key.length = (unsigned int) 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; if (! HASH_VACANT (v)) { if (env_overrides && v->origin == o_env) /* V came from in the environment. Since it was defined before the switches were parsed, it wasn't affected by -e. */ v->origin = o_env_override; /* A variable of this name is already defined. If the old definition is from a stronger source than this one, don't redefine it. */ if ((int) origin >= (int) v->origin) { free (v->value); v->value = xstrdup (value); if (flocp != 0) v->fileinfo = *flocp; else v->fileinfo.filenm = 0; v->origin = origin; v->recursive = recursive; } return v; } /* Create a new variable definition and add it to the hash table. */ v = xcalloc (sizeof (struct variable)); v->name = xstrndup (name, length); v->length = (unsigned int) 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; v->origin = origin; v->recursive = recursive; v->export = v_default; v->exportable = 1; if (*name != '_' && (*name < 'A' || *name > 'Z') && (*name < 'a' || *name > 'z')) v->exportable = 0; else { for (++name; *name != '\0'; ++name) if (*name != '_' && (*name < 'a' || *name > 'z') && (*name < 'A' || *name > 'Z') && !ISDIGIT(*name)) break; if (*name != '\0') v->exportable = 0; } return v; } /* Undefine variable named NAME in SET. LENGTH is the length of NAME, which does not need to be null-terminated. ORIGIN specifies the origin of the variable (makefile, command line or environment). */ static void free_variable_name_and_value (const void *item) { struct variable *v = (struct variable *) item; free (v->name); free (v->value); } void free_variable_set (struct variable_set_list *list) { hash_map (&list->set->table, free_variable_name_and_value); hash_free (&list->set->table, 1); free (list->set); free (list); } void undefine_variable_in_set (const char *name, size_t length, enum variable_origin origin, struct variable_set *set) { struct variable *v; struct variable **var_slot; struct variable var_key; if (set == NULL) set = &global_variable_set; var_key.name = (char *) name; var_key.length = (unsigned int) length; var_slot = (struct variable **) hash_find_slot (&set->table, &var_key); if (env_overrides && origin == o_env) origin = o_env_override; v = *var_slot; if (! HASH_VACANT (v)) { if (env_overrides && v->origin == o_env) /* V came from in the environment. Since it was defined before the switches were parsed, it wasn't affected by -e. */ v->origin = o_env_override; /* 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; } } } /* If the variable passed in is "special", handle its special nature. Currently there are two such variables, both used for introspection: .VARIABLES expands to a list of all the variables defined in this instance of make. .TARGETS expands to a list of all the targets defined in this instance of make. Returns the variable reference passed in. */ #define EXPANSION_INCREMENT(_l) ((((_l) / 500) + 1) * 500) static struct variable * lookup_special_var (struct variable *var) { static unsigned long last_changenum = 0; /* This one actually turns out to be very hard, due to the way the parser records targets. The way it works is that target information is collected internally until make knows the target is completely specified. It unitl it sees that some new construct (a new target or variable) is defined that it knows the previous one is done. In short, this means that if you do this: all: TARGS := $(.TARGETS) then $(TARGS) won't contain "all", because it's not until after the variable is created that the previous target is completed. Changing this would be a major pain. I think a less complex way to do it would be to pre-define the target files as soon as the first line is parsed, then come back and do the rest of the definition as now. That would allow $(.TARGETS) to be correct without a major change to the way the parser works. if (streq (var->name, ".TARGETS")) var->value = build_target_list (var->value); else */ if (variable_changenum != last_changenum && streq (var->name, ".VARIABLES")) { size_t max = EXPANSION_INCREMENT (strlen (var->value)); size_t len; char *p; struct variable **vp = (struct variable **) global_variable_set.table.ht_vec; struct variable **end = &vp[global_variable_set.table.ht_size]; /* Make sure we have at least MAX bytes in the allocated buffer. */ var->value = xrealloc (var->value, max); /* Walk through the hash of variables, constructing a list of names. */ p = var->value; len = 0; for (; vp < end; ++vp) if (!HASH_VACANT (*vp)) { struct variable *v = *vp; int l = v->length; len += l + 1; if (len > max) { size_t off = p - var->value; max += EXPANSION_INCREMENT (l + 1); var->value = xrealloc (var->value, max); p = &var->value[off]; } memcpy (p, v->name, l); p += l; *(p++) = ' '; } *(p-1) = '\0'; /* Remember the current variable change number. */ last_changenum = variable_changenum; } return var; } /* Lookup a variable whose name is a string starting at NAME and with LENGTH chars. NAME need not be null-terminated. Returns address of the 'struct variable' containing all info on the variable, or nil if no such variable is defined. */ struct variable * lookup_variable (const char *name, size_t length) { const struct variable_set_list *setlist; struct variable var_key; int is_parent = 0; var_key.name = (char *) name; var_key.length = (unsigned int) length; for (setlist = current_variable_set_list; setlist != 0; setlist = setlist->next) { const struct variable_set *set = setlist->set; struct variable *v; v = (struct variable *) hash_find_item ((struct hash_table *) &set->table, &var_key); if (v && (!is_parent || !v->private_var)) return v->special ? lookup_special_var (v) : v; is_parent |= setlist->next_is_parent; } #ifdef VMS /* 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; strncpy (vname, name, length); vname[length] = 0; value = getenv (vname); if (value != 0) { char *sptr; int scnt; sptr = value; scnt = 0; while ((sptr = strchr (sptr, '$'))) { scnt++; sptr++; } if (scnt > 0) { char *nvalue; char *nptr; nvalue = alloca (strlen (value) + scnt + 1); sptr = value; nptr = nvalue; while (*sptr) { if (*sptr == '$') { *nptr++ = '$'; *nptr++ = '$'; } else { *nptr++ = *sptr; } sptr++; } *nptr = '\0'; return define_variable (vname, length, nvalue, o_env, 1); } return define_variable (vname, length, value, o_env, 1); } } #endif /* VMS */ return 0; } /* Lookup a variable whose name is a string starting at NAME and with LENGTH chars in set SET. NAME need not be null-terminated. Returns address of the 'struct variable' containing all info on the variable, or nil if no such variable is defined. */ struct variable * lookup_variable_in_set (const char *name, size_t length, const struct variable_set *set) { struct variable var_key; var_key.name = (char *) name; var_key.length = (unsigned int) length; return (struct variable *) hash_find_item ((struct hash_table *) &set->table, &var_key); } /* Initialize FILE's variable set list. If FILE already has a variable set list, the topmost variable set is left intact, but the the rest of the chain is replaced with FILE->parent's setlist. If FILE is a double-colon rule, then we will use the "root" double-colon target's variable set as the parent of FILE's variable set. If we're READING a makefile, don't do the pattern variable search now, since the pattern variable might not have been defined yet. */ void initialize_file_variables (struct file *file, int reading) { struct variable_set_list *l = file->variables; if (l == 0) { l = (struct variable_set_list *) xmalloc (sizeof (struct variable_set_list)); l->set = xmalloc (sizeof (struct variable_set)); hash_init (&l->set->table, PERFILE_VARIABLE_BUCKETS, variable_hash_1, variable_hash_2, variable_hash_cmp); file->variables = l; } /* If this is a double-colon, then our "parent" is the "root" target for this double-colon rule. Since that rule has the same name, parent, etc. we can just use its variables as the "next" for ours. */ if (file->double_colon && file->double_colon != file) { initialize_file_variables (file->double_colon, reading); l->next = file->double_colon->variables; l->next_is_parent = 0; return; } if (file->parent == 0) l->next = &global_setlist; else { initialize_file_variables (file->parent, reading); l->next = file->parent->variables; } l->next_is_parent = 1; /* If we're not reading makefiles and we haven't looked yet, see if we can find pattern variables for this target. */ if (!reading && !file->pat_searched) { struct pattern_var *p; p = lookup_pattern_var (0, file->name); if (p != 0) { struct variable_set_list *global = current_variable_set_list; /* We found at least one. Set up a new variable set to accumulate all the pattern variables that match this target. */ file->pat_variables = create_new_variable_set (); current_variable_set_list = file->pat_variables; do { /* We found one, so insert it into the set. */ struct variable *v; if (p->variable.flavor == f_simple) { v = define_variable_loc ( p->variable.name, strlen (p->variable.name), p->variable.value, p->variable.origin, 0, &p->variable.fileinfo); v->flavor = f_simple; } else { v = do_variable_definition ( &p->variable.fileinfo, p->variable.name, p->variable.value, p->variable.origin, p->variable.flavor, 1); } /* Also mark it as a per-target and copy export status. */ v->per_target = p->variable.per_target; v->export = p->variable.export; v->private_var = p->variable.private_var; } while ((p = lookup_pattern_var (p, file->name)) != 0); current_variable_set_list = global; } file->pat_searched = 1; } /* If we have a pattern variable match, set it up. */ if (file->pat_variables != 0) { file->pat_variables->next = l->next; file->pat_variables->next_is_parent = l->next_is_parent; l->next = file->pat_variables; l->next_is_parent = 0; } } /* Pop the top set off the current variable set list, and free all its storage. */ struct variable_set_list * create_new_variable_set (void) { struct variable_set_list *setlist; struct variable_set *set; set = xmalloc (sizeof (struct variable_set)); hash_init (&set->table, SMALL_SCOPE_VARIABLE_BUCKETS, variable_hash_1, variable_hash_2, variable_hash_cmp); setlist = (struct variable_set_list *) xmalloc (sizeof (struct variable_set_list)); setlist->set = set; setlist->next = current_variable_set_list; setlist->next_is_parent = 0; return setlist; } /* Create a new variable set and push it on the current setlist. If we're pushing a global scope (that is, the current scope is the global scope) then we need to "push" it the other way: file variable sets point directly to the global_setlist so we need to replace that with the new one. */ struct variable_set_list * push_new_variable_scope (void) { current_variable_set_list = create_new_variable_set (); if (current_variable_set_list->next == &global_setlist) { /* It was the global, so instead of new -> &global we want to replace &global with the new one and have &global -> new, with current still pointing to &global */ struct variable_set *set = current_variable_set_list->set; current_variable_set_list->set = global_setlist.set; global_setlist.set = set; current_variable_set_list->next = global_setlist.next; global_setlist.next = current_variable_set_list; current_variable_set_list = &global_setlist; } return (current_variable_set_list); } void pop_variable_scope (void) { struct variable_set_list *setlist; struct variable_set *set; /* Can't call this if there's no scope to pop! */ assert (current_variable_set_list->next != NULL); if (current_variable_set_list != &global_setlist) { /* We're not pointing to the global setlist, so pop this one. */ setlist = current_variable_set_list; set = setlist->set; current_variable_set_list = setlist->next; } else { /* This set is the one in the global_setlist, but there is another global set beyond that. We want to copy that set to global_setlist, then delete what used to be in global_setlist. */ setlist = global_setlist.next; set = global_setlist.set; global_setlist.set = setlist->set; global_setlist.next = setlist->next; global_setlist.next_is_parent = setlist->next_is_parent; } /* Free the one we no longer need. */ free (setlist); hash_map (&set->table, free_variable_name_and_value); hash_free (&set->table, 1); free (set); } /* Merge FROM_SET into TO_SET, freeing unused storage in FROM_SET. */ static void merge_variable_sets (struct variable_set *to_set, struct variable_set *from_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)) { struct variable *from_var = *from_var_slot; 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); variable_changenum += inc; } else { /* GKM FIXME: delete in from_set->table */ free (from_var->value); free (from_var); } } } /* Merge SETLIST1 into SETLIST0, freeing unused storage in SETLIST1. */ void merge_variable_set_lists (struct variable_set_list **setlist0, struct variable_set_list *setlist1) { struct variable_set_list *to = *setlist0; struct variable_set_list *last0 = 0; /* If there's nothing to merge, stop now. */ if (!setlist1 || setlist1 == &global_setlist) return; if (to) { /* These loops rely on the fact that all setlists terminate with the global setlist (before NULL). If not, arguably we SHOULD die. */ /* Make sure that setlist1 is not already a subset of setlist0. */ while (to != &global_setlist) { if (to == setlist1) return; to = to->next; } to = *setlist0; while (setlist1 != &global_setlist && to != &global_setlist) { struct variable_set_list *from = setlist1; setlist1 = setlist1->next; merge_variable_sets (to->set, from->set); last0 = to; to = to->next; } } if (setlist1 != &global_setlist) { if (last0 == 0) *setlist0 = setlist1; else last0->next = setlist1; } } /* Define the automatic variables, and record the addresses of their structures so we can change their values quickly. */ void define_automatic_variables (void) { struct variable *v; char buf[200]; sprintf (buf, "%u", makelevel); define_variable_cname (MAKELEVEL_NAME, buf, o_env, 0); sprintf (buf, "%s%s%s", version_string, (remote_description == 0 || remote_description[0] == '\0') ? "" : "-", (remote_description == 0 || remote_description[0] == '\0') ? "" : remote_description); define_variable_cname ("MAKE_VERSION", buf, o_default, 0); define_variable_cname ("MAKE_HOST", make_host, o_default, 0); #ifdef __MSDOS__ /* Allow to specify a special shell just for Make, and use $COMSPEC as the default $SHELL when appropriate. */ { static char shell_str[] = "SHELL"; const int shlen = sizeof (shell_str) - 1; struct variable *mshp = lookup_variable ("MAKESHELL", 9); struct variable *comp = lookup_variable ("COMSPEC", 7); /* $(MAKESHELL) overrides $(SHELL) even if -e is in effect. */ if (mshp) (void) define_variable (shell_str, shlen, mshp->value, o_env_override, 0); else if (comp) { /* $(COMSPEC) shouldn't override $(SHELL). */ struct variable *shp = lookup_variable (shell_str, shlen); if (!shp) (void) define_variable (shell_str, shlen, comp->value, o_env, 0); } } #elif defined(__EMX__) { static char shell_str[] = "SHELL"; const int shlen = sizeof (shell_str) - 1; struct variable *shell = lookup_variable (shell_str, shlen); struct variable *replace = lookup_variable ("MAKESHELL", 9); /* if $MAKESHELL is defined in the environment assume o_env_override */ if (replace && *replace->value && replace->origin == o_env) replace->origin = o_env_override; /* if $MAKESHELL is not defined use $SHELL but only if the variable did not come from the environment */ if (!replace || !*replace->value) if (shell && *shell->value && (shell->origin == o_env || shell->origin == o_env_override)) { /* overwrite whatever we got from the environment */ free (shell->value); shell->value = xstrdup (default_shell); shell->origin = o_default; } /* Some people do not like cmd to be used as the default if $SHELL is not defined in the Makefile. With -DNO_CMD_DEFAULT you can turn off this behaviour */ # ifndef NO_CMD_DEFAULT /* otherwise use $COMSPEC */ if (!replace || !*replace->value) replace = lookup_variable ("COMSPEC", 7); /* otherwise use $OS2_SHELL */ if (!replace || !*replace->value) replace = lookup_variable ("OS2_SHELL", 9); # else # warning NO_CMD_DEFAULT: GNU make will not use CMD.EXE as default shell # endif if (replace && *replace->value) /* overwrite $SHELL */ (void) define_variable (shell_str, shlen, replace->value, replace->origin, 0); else /* provide a definition if there is none */ (void) define_variable (shell_str, shlen, default_shell, o_default, 0); } #endif /* This won't override any definition, but it will provide one if there isn't one there. */ v = define_variable_cname ("SHELL", default_shell, o_default, 0); #ifdef __MSDOS__ v->export = v_export; /* Export always SHELL. */ #endif /* On MSDOS we do use SHELL from environment, since it isn't a standard environment variable on MSDOS, so whoever sets it, does that on purpose. On OS/2 we do not use SHELL from environment but we have already handled that problem above. */ #if !defined(__MSDOS__) && !defined(__EMX__) /* Don't let SHELL come from the environment. */ if (*v->value == '\0' || v->origin == o_env || v->origin == o_env_override) { free (v->value); v->origin = o_file; v->value = xstrdup (default_shell); } #endif /* Make sure MAKEFILES gets exported if it is set. */ v = define_variable_cname ("MAKEFILES", "", o_default, 0); v->export = v_ifset; /* Define the magic D and F variables in terms of the automatic variables they are variations of. */ #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); define_variable_cname ("%D", "$(patsubst %/,%,$(patsubst %\\,%,$(dir $%)))", o_automatic, 1); define_variable_cname ("*D", "$(patsubst %/,%,$(patsubst %\\,%,$(dir $*)))", o_automatic, 1); define_variable_cname ("variables; hash_init (&table, VARIABLE_BUCKETS, variable_hash_1, variable_hash_2, variable_hash_cmp); /* Run through all the variable sets in the list, accumulating variables in TABLE. */ for (s = set_list; s != 0; s = s->next) { struct variable_set *set = s->set; v_slot = (struct variable **) set->table.ht_vec; v_end = v_slot + set->table.ht_size; for ( ; v_slot < v_end; v_slot++) if (! HASH_VACANT (*v_slot)) { struct variable **new_slot; struct variable *v = *v_slot; /* If this is a per-target variable and it hasn't been touched already then look up the global version and take its export value. */ if (v->per_target && v->export == v_default) { struct variable *gv; gv = lookup_variable_in_set (v->name, strlen (v->name), &global_variable_set); if (gv) v->export = gv->export; } switch (v->export) { case v_default: if (v->origin == o_default || v->origin == o_automatic) /* Only export default variables by explicit request. */ continue; /* The variable doesn't have a name that can be exported. */ if (! v->exportable) continue; if (! export_all_variables && v->origin != o_command && v->origin != o_env && v->origin != o_env_override) continue; break; case v_export: break; case v_noexport: { /* 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. */ if (streq (v->name, "SHELL") && shell_var.value) { v = &shell_var; break; } continue; } case v_ifset: if (v->origin == o_default) continue; break; } new_slot = (struct variable **) hash_find_slot (&table, v); if (HASH_VACANT (*new_slot)) hash_insert_at (&table, v, new_slot); } } makelevel_key.name = (char *)MAKELEVEL_NAME; makelevel_key.length = MAKELEVEL_LENGTH; hash_delete (&table, &makelevel_key); result = result_0 = xmalloc ((table.ht_fill + 2) * sizeof (char *)); v_slot = (struct variable **) table.ht_vec; v_end = v_slot + table.ht_size; for ( ; v_slot < v_end; v_slot++) if (! HASH_VACANT (*v_slot)) { struct variable *v = *v_slot; /* If V is recursively expanded and didn't come from the environment, expand its value. If it came from the environment, it should go back into the environment unchanged. */ if (v->recursive && v->origin != o_env && v->origin != o_env_override) { char *value = recursively_expand_for_file (v, file); #ifdef WINDOWS32 if (strcmp (v->name, "Path") == 0 || strcmp (v->name, "PATH") == 0) convert_Path_to_windows32 (value, ';'); #endif *result++ = xstrdup (concat (3, v->name, "=", value)); free (value); } else { #ifdef WINDOWS32 if (strcmp (v->name, "Path") == 0 || strcmp (v->name, "PATH") == 0) convert_Path_to_windows32 (v->value, ';'); #endif *result++ = xstrdup (concat (3, v->name, "=", v->value)); } } *result = xmalloc (100); sprintf (*result, "%s=%u", MAKELEVEL_NAME, makelevel + 1); *++result = 0; hash_free (&table, 0); return result_0; } static struct variable * set_special_var (struct variable *var) { if (streq (var->name, RECIPEPREFIX_NAME)) { /* The user is resetting the command introduction prefix. This has to happen immediately, so that subsequent rules are interpreted properly. */ cmd_prefix = var->value[0]=='\0' ? RECIPEPREFIX_DEFAULT : var->value[0]; } return var; } /* Given a string, shell-execute it and return a malloc'ed string of the * result. This removes only ONE newline (if any) at the end, for maximum * compatibility with the *BSD makes. If it fails, returns NULL. */ static char * shell_result (const char *p) { char *buf; size_t len; char *args[2]; char *result; install_variable_buffer (&buf, &len); args[0] = (char *) p; args[1] = NULL; variable_buffer_output (func_shell_base (variable_buffer, args, 0), "\0", 1); result = strdup (variable_buffer); restore_variable_buffer (buf, len); return result; } /* Given a variable, a value, and a flavor, define the variable. See the try_variable_definition() function for details on the parameters. */ struct variable * do_variable_definition (const floc *flocp, const char *varname, const char *value, enum variable_origin origin, enum variable_flavor flavor, int target_var) { const char *p; char *alloc_value = NULL; struct variable *v; int append = 0; int conditional = 0; /* Calculate the variable's new value in VALUE. */ switch (flavor) { default: case f_bogus: /* Should not be possible. */ abort (); case f_simple: /* A simple variable definition "var := value". Expand the value. We have to allocate memory since otherwise it'll clobber the variable buffer, and we may still need that if we're looking at a target-specific variable. */ p = alloc_value = allocated_variable_expand (value); break; case f_shell: { /* A shell definition "var != value". Expand value, pass it to the shell, and store the result in recursively-expanded var. */ char *q = allocated_variable_expand (value); p = alloc_value = shell_result (q); free (q); flavor = f_recursive; break; } case f_conditional: /* A conditional variable definition "var ?= value". The value is set IFF the variable is not defined yet. */ v = lookup_variable (varname, strlen (varname)); if (v) goto done; conditional = 1; flavor = f_recursive; /* FALLTHROUGH */ case f_recursive: /* A recursive variable definition "var = value". The value is used verbatim. */ p = value; break; case f_append: case f_append_value: { /* If we have += but we're in a target variable context, we want to append only with other variables in the context of this target. */ if (target_var) { append = 1; v = lookup_variable_in_set (varname, strlen (varname), current_variable_set_list->set); /* Don't append from the global set if a previous non-appending target-specific variable definition exists. */ if (v && !v->append) append = 0; } else v = lookup_variable (varname, strlen (varname)); if (v == 0) { /* There was no old value. This becomes a normal recursive definition. */ p = value; flavor = f_recursive; } else { /* Paste the old and new values together in VALUE. */ size_t oldlen, vallen; const char *val; char *tp = NULL; val = value; if (v->recursive) /* The previous definition of the variable was recursive. The new value is the unexpanded old and new values. */ flavor = f_recursive; else if (flavor != f_append_value) /* The previous definition of the variable was simple. The new value comes from the old value, which was expanded when it was set; and from the expanded new value. Allocate memory for the expansion as we may still need the rest of the buffer if we're looking at a target-specific variable. */ val = tp = allocated_variable_expand (val); /* If the new value is empty, nothing to do. */ vallen = strlen (val); if (!vallen) { alloc_value = tp; goto done; } oldlen = strlen (v->value); p = alloc_value = xmalloc (oldlen + 1 + vallen + 1); if (oldlen) { memcpy (alloc_value, v->value, oldlen); alloc_value[oldlen] = ' '; ++oldlen; } memcpy (&alloc_value[oldlen], val, vallen + 1); free (tp); } break; } } #ifdef __MSDOS__ /* Many Unix Makefiles include a line saying "SHELL=/bin/sh", but non-Unix systems don't conform to this default configuration (in fact, most of them don't even have '/bin'). On the other hand, $SHELL in the environment, if set, points to the real pathname of the shell. Therefore, we generally won't let lines like "SHELL=/bin/sh" from the Makefile override $SHELL from the environment. But first, we look for the basename of the shell in the directory where SHELL= points, and along the $PATH; if it is found in any of these places, we define $SHELL to be the actual pathname of the shell. Thus, if you have bash.exe installed as d:/unix/bash.exe, and d:/unix is on your $PATH, then SHELL=/usr/local/bin/bash will have the effect of defining SHELL to be "d:/unix/bash.exe". */ if ((origin == o_file || origin == o_override) && strcmp (varname, "SHELL") == 0) { PATH_VAR (shellpath); extern char * __dosexec_find_on_path (const char *, char *[], char *); /* See if we can find "/bin/sh.exe", "/bin/sh.com", etc. */ if (__dosexec_find_on_path (p, NULL, shellpath)) { char *tp; for (tp = shellpath; *tp; tp++) if (*tp == '\\') *tp = '/'; v = define_variable_loc (varname, strlen (varname), shellpath, origin, flavor == f_recursive, flocp); } else { const char *shellbase, *bslash; struct variable *pathv = lookup_variable ("PATH", 4); char *path_string; char *fake_env[2]; size_t pathlen = 0; shellbase = strrchr (p, '/'); bslash = strrchr (p, '\\'); if (!shellbase || bslash > shellbase) shellbase = bslash; if (!shellbase && p[1] == ':') shellbase = p + 1; if (shellbase) shellbase++; else shellbase = p; /* Search for the basename of the shell (with standard executable extensions) along the $PATH. */ if (pathv) pathlen = strlen (pathv->value); path_string = xmalloc (5 + pathlen + 2 + 1); /* On MSDOS, current directory is considered as part of $PATH. */ sprintf (path_string, "PATH=.;%s", pathv ? pathv->value : ""); fake_env[0] = path_string; fake_env[1] = 0; if (__dosexec_find_on_path (shellbase, fake_env, shellpath)) { char *tp; for (tp = shellpath; *tp; tp++) if (*tp == '\\') *tp = '/'; v = define_variable_loc (varname, strlen (varname), shellpath, origin, flavor == f_recursive, flocp); } else v = lookup_variable (varname, strlen (varname)); free (path_string); } } else #endif /* __MSDOS__ */ #ifdef WINDOWS32 if ((origin == o_file || origin == o_override || origin == o_command) && streq (varname, "SHELL")) { extern const char *default_shell; /* Call shell locator function. If it returns TRUE, then set no_default_sh_exe to indicate sh was found and set new value for SHELL variable. */ if (find_and_set_default_shell (p)) { v = define_variable_in_set (varname, strlen (varname), default_shell, origin, flavor == f_recursive, (target_var ? current_variable_set_list->set : NULL), flocp); no_default_sh_exe = 0; } else { char *tp = alloc_value; alloc_value = allocated_variable_expand (p); if (find_and_set_default_shell (alloc_value)) { v = define_variable_in_set (varname, strlen (varname), p, origin, flavor == f_recursive, (target_var ? current_variable_set_list->set : NULL), flocp); no_default_sh_exe = 0; } else v = lookup_variable (varname, strlen (varname)); free (tp); } } else v = NULL; /* If not $SHELL, or if $SHELL points to a program we didn't find, just process this variable "as usual". */ if (!v) #endif /* If we are defining variables inside an $(eval ...), we might have a different variable context pushed, not the global context (maybe we're inside a $(call ...) or something. Since this function is only ever invoked in places where we want to define globally visible variables, make sure we define this variable in the global set. */ v = define_variable_in_set (varname, strlen (varname), p, origin, flavor == f_recursive, (target_var ? current_variable_set_list->set : NULL), flocp); v->append = append; v->conditional = conditional; done: free (alloc_value); return v->special ? set_special_var (v) : v; } /* Parse P (a null-terminated string) as a variable definition. If it is not a variable definition, return NULL and the contents of *VAR are undefined, except NAME is set to the first non-space character or NIL. If it is a variable definition, return a pointer to the char after the assignment token and set the following fields (only) of *VAR: name : name of the variable (ALWAYS SET) (NOT NUL-TERMINATED!) length : length of the variable name value : value of the variable (nul-terminated) flavor : flavor of the variable Other values in *VAR are unchanged. */ char * parse_variable_definition (const char *p, struct variable *var) { int wspace = 0; const char *e = NULL; NEXT_TOKEN (p); var->name = (char *)p; var->length = 0; while (1) { int c = *p++; /* If we find a comment or EOS, it's not a variable definition. */ if (STOP_SET (c, MAP_COMMENT|MAP_NUL)) return NULL; if (c == '$') { /* This begins a variable expansion reference. Make sure we don't treat chars inside the reference as assignment tokens. */ char closeparen; 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. */ for (count = 1; *p != '\0'; ++p) { 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 (c)) { wspace = 1; e = p - 1; NEXT_TOKEN (p); c = *p; if (c == '\0') return NULL; ++p; } if (c == '=') { var->flavor = f_recursive; if (! e) e = p - 1; break; } /* Match assignment variants (:=, +=, ?=, !=) */ if (*p == '=') { switch (c) { case ':': var->flavor = f_simple; break; case '+': var->flavor = f_append; break; case '?': var->flavor = f_conditional; break; case '!': var->flavor = f_shell; break; default: /* If we skipped whitespace, non-assignments means no var. */ if (wspace) return NULL; /* Might be assignment, or might be $= or #=. Check. */ continue; } if (! e) e = p - 1; ++p; break; } /* Check for POSIX ::= syntax */ if (c == ':') { /* A colon other than :=/::= is not a variable defn. */ if (*p != ':' || p[1] != '=') return NULL; /* POSIX allows ::= to be the same as GNU make's := */ var->flavor = f_simple; if (! e) e = p - 1; p += 2; break; } /* If we skipped whitespace, non-assignments means no var. */ if (wspace) return NULL; } var->length = (unsigned int) (e - var->name); var->value = next_token (p); return (char *)p; } /* Try to interpret LINE (a null-terminated string) as a variable definition. If LINE was recognized as a variable definition, a pointer to its 'struct variable' is returned. If LINE is not a variable definition, NULL is returned. */ struct variable * assign_variable_definition (struct variable *v, const char *line) { char *name; if (!parse_variable_definition (line, v)) return NULL; /* Expand the name, so "$(foo)bar = baz" works. */ name = alloca (v->length + 1); memcpy (name, v->name, v->length); name[v->length] = '\0'; v->name = allocated_variable_expand (name); if (v->name[0] == '\0') O (fatal, &v->fileinfo, _("empty variable name")); return v; } /* Try to interpret LINE (a null-terminated string) as a variable definition. ORIGIN may be o_file, o_override, o_env, o_env_override, or o_command specifying that the variable definition comes from a makefile, an override directive, the environment with or without the -e switch, or the command line. See the comments for assign_variable_definition(). If LINE was recognized as a variable definition, a pointer to its 'struct variable' is returned. If LINE is not a variable definition, NULL is returned. */ struct variable * try_variable_definition (const floc *flocp, const char *line, enum variable_origin origin, int target_var) { struct variable v; struct variable *vp; if (flocp != 0) v.fileinfo = *flocp; else v.fileinfo.filenm = 0; if (!assign_variable_definition (&v, line)) return 0; vp = do_variable_definition (flocp, v.name, v.value, origin, v.flavor, target_var); free (v.name); return vp; } /* Print information for variable V, prefixing it with PREFIX. */ static void print_variable (const void *item, void *arg) { const struct variable *v = item; const char *prefix = arg; const char *origin; switch (v->origin) { case o_automatic: origin = _("automatic"); break; case o_default: origin = _("default"); break; case o_env: origin = _("environment"); break; case o_file: origin = _("makefile"); break; case o_env_override: origin = _("environment under -e"); break; case o_command: origin = _("command line"); break; case o_override: origin = _("'override' directive"); break; case o_invalid: default: abort (); } fputs ("# ", stdout); fputs (origin, stdout); if (v->private_var) fputs (" private", stdout); if (v->fileinfo.filenm) printf (_(" (from '%s', line %lu)"), v->fileinfo.filenm, v->fileinfo.lineno + v->fileinfo.offset); putchar ('\n'); fputs (prefix, stdout); /* Is this a 'define'? */ if (v->recursive && strchr (v->value, '\n') != 0) printf ("define %s\n%s\nendef\n", v->name, v->value); else { char *p; printf ("%s %s= ", v->name, v->recursive ? v->append ? "+" : "" : ":"); /* Check if the value is just whitespace. */ p = next_token (v->value); if (p != v->value && *p == '\0') /* All whitespace. */ printf ("$(subst ,,%s)", v->value); else if (v->recursive) fputs (v->value, stdout); else /* Double up dollar signs. */ for (p = v->value; *p != '\0'; ++p) { if (*p == '$') putchar ('$'); putchar (*p); } putchar ('\n'); } } static void print_auto_variable (const void *item, void *arg) { const struct variable *v = item; if (v->origin == o_automatic) print_variable (item, arg); } static void print_noauto_variable (const void *item, void *arg) { const struct variable *v = item; if (v->origin != o_automatic) print_variable (item, arg); } /* Print all the variables in SET. PREFIX is printed before the actual variable definitions (everything else is comments). */ static void print_variable_set (struct variable_set *set, const char *prefix, int pauto) { hash_map_arg (&set->table, (pauto ? print_auto_variable : print_variable), (void *)prefix); fputs (_("# variable set hash-table stats:\n"), stdout); fputs ("# ", stdout); hash_print_stats (&set->table, stdout); putc ('\n', stdout); } /* Print the data base of variables. */ void print_variable_data_base (void) { puts (_("\n# Variables\n")); print_variable_set (&global_variable_set, "", 0); puts (_("\n# Pattern-specific Variable Values")); { struct pattern_var *p; unsigned int rules = 0; for (p = pattern_vars; p != 0; p = p->next) { ++rules; printf ("\n%s :\n", p->target); print_variable (&p->variable, (void *)"# "); } if (rules == 0) puts (_("\n# No pattern-specific variable values.")); else printf (_("\n# %u pattern-specific variable values"), rules); } } /* Print all the local variables of FILE. */ void print_file_variables (const struct file *file) { if (file->variables != 0) print_variable_set (file->variables->set, "# ", 1); } void print_target_variables (const struct file *file) { if (file->variables != 0) { size_t l = strlen (file->name); char *t = alloca (l + 3); strcpy (t, file->name); t[l] = ':'; t[l+1] = ' '; t[l+2] = '\0'; hash_map_arg (&file->variables->set->table, print_noauto_variable, t); } } #ifdef WINDOWS32 void sync_Path_environment (void) { char *path = allocated_variable_expand ("$(PATH)"); static char *environ_path = NULL; if (!path) return; /* If done this before, free the previous entry before allocating new one. */ free (environ_path); /* Create something WINDOWS32 world can grok. */ convert_Path_to_windows32 (path, ';'); environ_path = xstrdup (concat (3, "PATH", "=", path)); putenv (environ_path); free (path); } #endif make-4.3/src/loadapi.c0000644000175000017500000000401113603564437011571 00000000000000/* API for GNU Make dynamic objects. Copyright (C) 2013-2020 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 . */ #include "makeint.h" #include "filedef.h" #include "variable.h" #include "dep.h" /* Allocate a buffer in our context, so we can free it. */ char * gmk_alloc (unsigned int len) { return xmalloc (len); } /* Free a buffer returned by gmk_expand(). */ void gmk_free (char *s) { free (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 *gfloc) { /* Preserve existing variable buffer context. */ char *pbuf; size_t 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, flp); free (s); restore_variable_buffer (pbuf, plen); } /* Expand a string and return an allocated buffer. Caller must call gmk_free() with this buffer. */ char * gmk_expand (const char *ref) { return allocated_variable_expand (ref); } /* Register a function to be called from makefiles. */ void gmk_add_function (const char *name, gmk_func_ptr func, unsigned int min, unsigned int max, unsigned int flags) { define_new_function (reading_file, name, min, max, flags, func); } make-4.3/src/getopt1.c0000644000175000017500000001031313603564437011545 00000000000000/* getopt_long and getopt_long_only entry points for GNU getopt. Copyright (C) 1987-1994, 1996-2020 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. 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 . */ #ifdef HAVE_CONFIG_H #include #endif #include "getopt.h" #if !defined __STDC__ || !__STDC__ /* This is a separate conditional since some stdc systems reject `defined (const)'. */ #ifndef const #define const #endif #endif #include /* Comment out all this code if we are using the GNU C Library, and are not actually compiling the library itself. This code is part of the GNU C Library, but also included in many other GNU distributions. Compiling and linking in this code is a waste when using the GNU C library (especially if it is a shared library). Rather than having every GNU program understand `configure --with-gnu-libc' and omit the object files, it is simpler to just do this in the source for each such file. */ #define GETOPT_INTERFACE_VERSION 2 #if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2 #include #if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION #define ELIDE_CODE #endif #endif #ifndef ELIDE_CODE /* This needs to come after some library #include to get __GNU_LIBRARY__ defined. */ #ifdef __GNU_LIBRARY__ #include #endif #ifndef NULL #define NULL 0 #endif int getopt_long (int argc, char *const *argv, const char *options, const struct option *long_options, int *opt_index) { return _getopt_internal (argc, argv, options, long_options, opt_index, 0); } /* Like getopt_long, but '-' as well as '--' can indicate a long option. If an option that starts with '-' (not '--') doesn't match a long option, but does match a short option, it is parsed as a short option instead. */ int getopt_long_only (int argc, char *const *argv, const char *options, const struct option *long_options, int *opt_index) { return _getopt_internal (argc, argv, options, long_options, opt_index, 1); } #endif /* Not ELIDE_CODE. */ #ifdef TEST #include int main (int argc, char **argv) { int c; int digit_optind = 0; while (1) { int this_option_optind = optind ? optind : 1; int option_index = 0; static struct option long_options[] = { {"add", 1, 0, 0}, {"append", 0, 0, 0}, {"delete", 1, 0, 0}, {"verbose", 0, 0, 0}, {"create", 0, 0, 0}, {"file", 1, 0, 0}, {0, 0, 0, 0} }; c = getopt_long (argc, argv, "abc:d:0123456789", long_options, &option_index); if (c == -1) break; switch (c) { case 0: printf ("option %s", long_options[option_index].name); if (optarg) printf (" with arg %s", optarg); printf ("\n"); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (digit_optind != 0 && digit_optind != this_option_optind) printf ("digits occur in two different argv-elements.\n"); digit_optind = this_option_optind; printf ("option %c\n", c); break; case 'a': printf ("option a\n"); break; case 'b': printf ("option b\n"); break; case 'c': printf ("option c with value '%s'\n", optarg); break; case 'd': printf ("option d with value '%s'\n", optarg); break; case '?': break; default: printf ("?? getopt returned character code 0%o ??\n", c); } } if (optind < argc) { printf ("non-option ARGV-elements: "); while (optind < argc) printf ("%s ", argv[optind++]); printf ("\n"); } exit (0); } #endif /* TEST */ make-4.3/src/output.h0000644000175000017500000000656413603564437011544 00000000000000/* Output to stdout / stderr for GNU make Copyright (C) 2013-2020 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 . */ struct output { int out; int err; unsigned int syncout:1; /* True if we want to synchronize output. */ }; extern struct output *output_context; extern unsigned int stdio_traced; #define FD_STDIN (fileno (stdin)) #define FD_STDOUT (fileno (stdout)) #define FD_STDERR (fileno (stderr)) #define OUTPUT_SET(_new) do{ output_context = (_new)->syncout ? (_new) : NULL; }while(0) #define OUTPUT_UNSET() do{ output_context = NULL; }while(0) #define OUTPUT_TRACED() do{ stdio_traced = 1; }while(0) #define OUTPUT_IS_TRACED() (!!stdio_traced) /* Write a buffer directly to the given file descriptor. This handles errors etc. */ int output_write (int fd, const void *buffer, size_t len); /* Initialize and close a child output structure: if NULL do this program's output (this should only be done once). */ void output_init (struct output *out); void output_close (struct output *out); /* In situations where output may be about to be displayed but we're not sure if we've set it up yet, call this. */ void output_start (void); /* Show a message on stdout or stderr. Will start the output if needed. */ void outputs (int is_err, const char *msg); #if defined(HAVE_FCNTL_H) # include #elif defined(HAVE_SYS_FILE_H) # include #endif #ifdef NO_OUTPUT_SYNC # define RECORD_SYNC_MUTEX(m) \ O (error, NILF, \ _("-O[TYPE] (--output-sync[=TYPE]) is not configured for this build.")); #else int output_tmpfd (void); /* Dump any child output content to stdout, and reset it. */ void output_dump (struct output *out); # ifdef WINDOWS32 /* For emulations in w32/compat/posixfcn.c. */ # define F_GETFD 1 # define F_SETLKW 2 /* Implementation note: None of the values of l_type below can be zero -- they are compared with a static instance of the struct, so zero means unknown/invalid, see w32/compat/posixfcn.c. */ # define F_WRLCK 1 # define F_UNLCK 2 struct flock { short l_type; short l_whence; off_t l_start; off_t l_len; pid_t l_pid; }; /* This type is actually a HANDLE, but we want to avoid including windows.h as much as possible. */ typedef intptr_t sync_handle_t; /* Public functions emulated/provided in posixfcn.c. */ int fcntl (intptr_t fd, int cmd, ...); intptr_t create_mutex (void); int same_stream (FILE *f1, FILE *f2); # define RECORD_SYNC_MUTEX(m) record_sync_mutex(m) void record_sync_mutex (const char *str); void prepare_mutex_handle_string (intptr_t hdl); # else /* !WINDOWS32 */ typedef int sync_handle_t; /* file descriptor */ # define RECORD_SYNC_MUTEX(m) (void)(m) # endif #endif /* !NO_OUTPUT_SYNC */ make-4.3/src/config.h.W320000444000175000017500000003701313611136527012004 00000000000000/* config.h.W32 -- hand-massaged config.h file for Windows builds -*-C-*- Copyright (C) 1996-2020 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 . */ /* Suppress some Visual C++ warnings. Maybe after the code cleanup for ISO C we can remove some/all of these. */ #if _MSC_VER > 1000 # pragma warning(disable:4100) /* unreferenced formal parameter */ # pragma warning(disable:4102) /* unreferenced label */ # pragma warning(disable:4127) /* conditional expression is constant */ # pragma warning(disable:4131) /* uses old-style declarator */ # pragma warning(disable:4702) /* unreachable code */ # define _CRT_SECURE_NO_WARNINGS /* function or variable may be unsafe */ # define _CRT_NONSTDC_NO_WARNINGS /* functions w/o a leading underscore */ #endif /* Define to 1 if the 'closedir' function returns void instead of 'int'. */ /* #undef CLOSEDIR_VOID */ /* Define to one of '_getb67', 'GETB67', 'getb67' for Cray-2 and Cray-YMP systems. This function is required for 'alloca.c' support on those systems. */ /* #undef CRAY_STACKSEG_END */ /* Define to 1 if using 'alloca.c'. */ /* #undef C_ALLOCA */ /* Define to 1 if using 'getloadavg.c'. */ #define C_GETLOADAVG 1 /* Define to 1 for DGUX with . */ /* #undef DGUX */ /* Define to 1 if translation of program messages to the user's native language is requested. */ /* #undef ENABLE_NLS */ /* Use high resolution file timestamps if nonzero. */ #define FILE_TIMESTAMP_HI_RES 0 /* Define to 1 if the 'getloadavg' function needs to be run setuid or setgid. */ /* #undef GETLOADAVG_PRIVILEGED */ /* Define to 1 if you have 'alloca', as a function or macro. */ #define HAVE_ALLOCA 1 /* Define to 1 if you have and it should be used (not on Ultrix). */ /* #undef HAVE_ALLOCA_H */ /* Define to 1 if you have the 'atexit' function. */ #define HAVE_ATEXIT 1 /* Use case insensitive file names */ /* #undef HAVE_CASE_INSENSITIVE_FS */ /* Define to 1 if you have the clock_gettime function. */ /* #undef HAVE_CLOCK_GETTIME */ /* Embed GNU Guile support. Windows build sets this on the compilation command line. */ /* #undef HAVE_GUILE */ /* Define if the GNU dcgettext() function is already present or preinstalled. */ /* #undef HAVE_DCGETTEXT */ /* Define to 1 if you have the declaration of 'bsd_signal', and to 0 if you don't. */ #define HAVE_DECL_BSD_SIGNAL 0 /* Define to 1 if you have the declaration of 'sys_siglist', and to 0 if you don't. */ #define HAVE_DECL_SYS_SIGLIST 0 /* Define to 1 if you have the declaration of '_sys_siglist', and to 0 if you don't. */ #define HAVE_DECL__SYS_SIGLIST 0 /* Define to 1 if you have the declaration of '__sys_siglist', and to 0 if you don't. */ #define HAVE_DECL___SYS_SIGLIST 0 /* Define to 1 if you have the header file, and it defines 'DIR'. */ #define HAVE_DIRENT_H 1 /* Define to 1 if you have the header file, and it defines getcwd() and chdir(). */ #if (defined(_MSC_VER) || defined(__BORLANDC__)) && !defined(__INTERIX) # define HAVE_DIRECT_H 1 #endif /* Use platform specific coding */ #define HAVE_DOS_PATHS 1 /* Define to 1 if you have the 'dup2' function. */ #define HAVE_DUP2 1 /* Define to 1 if you have the header file. */ #define HAVE_FCNTL_H 1 /* Define to 1 if you have the 'fdopen' function. */ #ifdef __MINGW32__ #define HAVE_FDOPEN 1 #endif /* Define to 1 if you have the 'fileno' function. */ #define HAVE_FILENO 1 /* Define to 1 if you have the 'getcwd' function. */ #define HAVE_GETCWD 1 /* Define to 1 if you have the 'getgroups' function. */ /* #undef HAVE_GETGROUPS */ /* Define to 1 if you have the 'gethostbyname' function. */ /* #undef HAVE_GETHOSTBYNAME */ /* Define to 1 if you have the 'gethostname' function. */ /* #undef HAVE_GETHOSTNAME */ /* Define to 1 if you have the 'getloadavg' function. */ /* #undef HAVE_GETLOADAVG */ /* Define to 1 if you have the 'getrlimit' function. */ /* #undef HAVE_GETRLIMIT */ /* Define if the GNU gettext() function is already present or preinstalled. */ /* #undef HAVE_GETTEXT */ /* Define to 1 if you have a standard gettimeofday function */ #ifdef __MINGW32__ #define HAVE_GETTIMEOFDAY 1 #endif /* Define if you have the iconv() function. */ /* #undef HAVE_ICONV */ /* Define to 1 if you have the header file. */ #ifdef __MINGW32__ #define HAVE_INTTYPES_H 1 #endif /* Define to 1 if you have the 'dgc' library (-ldgc). */ /* #undef HAVE_LIBDGC */ /* Define to 1 if you have the 'kstat' library (-lkstat). */ /* #undef HAVE_LIBKSTAT */ /* Define to 1 if you have the header file. */ #define HAVE_LIMITS_H 1 /* Define to 1 if you have the header file. */ /*#define HAVE_LOCALE_H 1*/ /* Define to 1 if you have the 'lstat' function. */ /* #undef HAVE_LSTAT */ /* Define to 1 if you have the header file. */ /* #undef HAVE_MACH_MACH_H */ /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 /* Define to 1 if you have the 'mkstemp' function. */ /* #undef HAVE_MKSTEMP */ /* Define to 1 if you have the 'mktemp' function. */ #define HAVE_MKTEMP 1 /* Define to 1 if you have the header file, and it defines 'DIR'. */ /* #undef HAVE_NDIR_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_NLIST_H */ /* Define to 1 if you have the 'pipe' function. */ /* #undef HAVE_PIPE */ /* Define to 1 if you have the 'pstat_getdynamic' function. */ /* #undef HAVE_PSTAT_GETDYNAMIC */ /* Define to 1 if you have the 'readlink' function. */ /* #undef HAVE_READLINK */ /* Define to 1 if you have the 'realpath' function. */ /* #undef HAVE_REALPATH */ /* Define to 1 if defines the SA_RESTART constant. */ /* #undef HAVE_SA_RESTART */ /* Define to 1 if you have the 'setegid' function. */ /* #undef HAVE_SETEGID */ /* Define to 1 if you have the 'seteuid' function. */ /* #undef HAVE_SETEUID */ /* Define to 1 if you have the 'setlinebuf' function. */ /* #undef HAVE_SETLINEBUF */ /* Define to 1 if you have the 'setlocale' function. */ /*#define HAVE_SETLOCALE 1*/ /* Define to 1 if you have the 'setregid' function. */ /* #undef HAVE_SETREGID */ /* Define to 1 if you have the 'setreuid' function. */ /* #undef HAVE_SETREUID */ /* Define to 1 if you have the 'setrlimit' function. */ /* #undef HAVE_SETRLIMIT */ /* Define to 1 if you have the 'setvbuf' function. */ #define HAVE_SETVBUF 1 /* Define to 1 if you have the 'sigaction' function. */ /* #undef HAVE_SIGACTION */ /* Define to 1 if you have the 'sigsetmask' function. */ /* #undef HAVE_SIGSETMASK */ /* Define to 1 if you have the 'socket' function. */ /* #undef HAVE_SOCKET */ /* Define to 1 if you have the header file. */ #ifdef __MINGW32__ #define HAVE_STDINT_H 1 #endif /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the 'strcasecmp' function. */ #ifdef __MINGW32__ #define HAVE_STRCASECMP 1 #endif /* Define to 1 if you have the 'strcmpi' function. */ #define HAVE_STRCMPI 1 /* Define to 1 if you have the 'strcoll' function and it is properly defined. */ #define HAVE_STRCOLL 1 /* Define to 1 if you have the 'strdup' function. */ #define HAVE_STRDUP 1 /* Define to 1 if you have the 'stricmp' function. */ #define HAVE_STRICMP 1 /* Define to 1 if you have the header file. */ #ifdef __MINGW32__ #define HAVE_STRINGS_H 1 #endif /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the 'strncasecmp' function. */ #ifdef __MINGW32__ #define HAVE_STRNCASECMP 1 #endif /* Define to 1 if you have the 'strncmpi' function. */ /* #undef HAVE_STRNCMPI */ /* Define to 1 if you have the 'strndup' function. */ /* #undef HAVE_STRNDUP */ /* Define to 1 if you have the 'strnicmp' function. */ #ifdef __MINGW32__ #define HAVE_STRNICMP 1 #endif /* Define to 1 if you have the 'strsignal' function. */ /* #undef HAVE_STRSIGNAL */ /* Define to 1 if `d_type' is a member of `struct dirent'. */ /* SV 57152: MinGW64 version of dirent doesn't support d_type. */ #ifndef __MINGW64__ # define HAVE_STRUCT_DIRENT_D_TYPE 1 #endif /* Define to 1 if you have the `isatty' function. */ #define HAVE_ISATTY 1 /* Define to 1 if you have the `ttyname' function. */ #define HAVE_TTYNAME 1 char *ttyname (int); /* Define to 1 if you have the `umask' function. */ #ifdef __MINGW32__ # define HAVE_UMASK 1 #endif /* Define to 1 if 'n_un.n_name' is a member of 'struct nlist'. */ /* #undef HAVE_STRUCT_NLIST_N_UN_N_NAME */ /* Define to 1 if you have the header file, and it defines 'DIR'. */ /* #undef HAVE_SYS_DIR_H */ /* Define to 1 if you have the header file, and it defines 'DIR'. */ /* #undef HAVE_SYS_NDIR_H */ /* Define to 1 if you have the header file. */ #ifdef __MINGW32__ #define HAVE_SYS_PARAM_H 1 #endif /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_RESOURCE_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TIMEB_H 1 /* Define to 1 if you have the header file. */ #ifdef __MINGW32__ #define HAVE_SYS_TIME_H 1 #endif /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_WAIT_H */ /* Define to 1 if you have the \'union wait' type in . */ /* #undef HAVE_UNION_WAIT */ /* Define to 1 if you have the header file. */ #ifdef __MINGW32__ #define HAVE_UNISTD_H 1 #endif /* Define to 1 if you have the 'wait3' function. */ /* #undef HAVE_WAIT3 */ /* Define to 1 if you have the 'waitpid' function. */ /* #undef HAVE_WAITPID */ /* Build host information. */ #define MAKE_HOST "Windows32" /* Define to 1 to enable job server support in GNU make. */ #define MAKE_JOBSERVER 1 /* Define to 1 to enable 'load' support in GNU make. */ #define MAKE_LOAD 1 /* Define to 1 to enable symbolic link timestamp checking. */ /* #undef MAKE_SYMLINKS */ /* Define to 1 if your 'struct nlist' has an 'n_un' member. Obsolete, depend on 'HAVE_STRUCT_NLIST_N_UN_N_NAME */ /* #undef NLIST_NAME_UNION */ /* Define to 1 if struct nlist.n_name is a pointer rather than an array. */ /* #undef NLIST_STRUCT */ /* Define to 1 if your C compiler doesn't accept -c and -o together. */ /* #undef NO_MINUS_C_MINUS_O */ /* Name of this package (needed by automake) */ #define PACKAGE "make" /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "bug-make@gnu.org" /* Define to the full name of this package. */ #define PACKAGE_NAME "GNU make" /* Define to the home page for this package. */ #define PACKAGE_URL "http://www.gnu.org/software/make/" /* Define to the version of this package. */ #define PACKAGE_VERSION "4.3" /* Define to the character that separates directories in PATH. */ #define PATH_SEPARATOR_CHAR ';' /* Define as the return type of signal handlers ('int' or 'void'). */ #define RETSIGTYPE void /* Define to the name of the SCCS 'get' command. */ #define SCCS_GET "echo no sccs get" /* Define this if the SCCS 'get' command understands the '-G' option. */ /* #undef SCCS_GET_MINUS_G */ /* Define to 1 if the 'setvbuf' function takes the buffering type as its second argument and the buffer pointer as the third, as on System V before release 3. */ /* #undef SETVBUF_REVERSED */ /* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at run time. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ /* #undef STACK_DIRECTION */ /* Define to 1 if the 'S_IS*' macros in do not work properly. */ /* #undef STAT_MACROS_BROKEN */ /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Define if struct stat contains a nanoseconds field */ /* #undef ST_MTIM_NSEC */ /* Define to 1 on System V Release 4. */ /* #undef SVR4 */ /* Define to 1 if you can safely include both and . */ #ifdef __MINGW32__ #define TIME_WITH_SYS_TIME 1 #endif /* Define to 1 for Encore UMAX. */ /* #undef UMAX */ /* Define to 1 for Encore UMAX 4.3 that has instead of . */ /* #undef UMAX4_3 */ /* Version number of package */ #define VERSION "4.3" /* Define if using the dmalloc debugging malloc package */ /* #undef WITH_DMALLOC */ /* Define to 1 if on AIX 3. System headers sometimes define this. We just want to avoid a redefinition error message. */ #ifndef _ALL_SOURCE /* # undef _ALL_SOURCE */ #endif /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ /* # undef WORDS_BIGENDIAN */ /* Number of bits in a file offset, on hosts where this is settable. */ /* #undef _FILE_OFFSET_BITS */ /* Define for large files, on AIX-style hosts. */ /* #undef _LARGE_FILES */ /* Define to 1 if on MINIX. */ /* #undef _MINIX */ /* Define to 2 if the system does not provide POSIX.1 features except with this defined. */ /* #undef _POSIX_1_SOURCE */ /* Define to 1 if you need to in order for 'stat' and other things to work. */ /* #undef _POSIX_SOURCE */ /* Define to empty if 'const' does not conform to ANSI C. */ /* #undef const */ #ifdef __MINGW32__ # undef __USE_MINGW_ANSI_STDIO # define __USE_MINGW_ANSI_STDIO 1 #endif #include /* Define to 'int' if doesn't define. */ #define gid_t int /* Define to 'int' if does not define. */ /* GCC 4.x reportedly defines pid_t. */ #ifndef _PID_T_ #ifdef _WIN64 #define pid_t __int64 #else #define pid_t int #endif #endif /* Define to `int' if does not define. */ #define ssize_t int /* Define to 'int' if doesn't define. */ #define uid_t int /* Define uintmax_t if not defined in or . */ #if !HAVE_STDINT_H && !HAVE_INTTYPES_H #define uintmax_t unsigned long #endif /* Define if you have that is POSIX.1 compatible. */ /* #undef HAVE_SYS_WAIT_H */ /* Define to the installation directory for locales. */ #define LOCALEDIR "" /* * Refer to README.W32 for info on the following settings */ /* * If you have a shell that does not grok 'sh -c quoted-command-line' * correctly, you need this setting. Please see below for specific * shell support. */ /*#define BATCH_MODE_ONLY_SHELL 1 */ /* * Define if you have the Cygnus "Cygwin" GNU Windows32 tool set. * Do NOT define BATCH_MODE_ONLY_SHELL if you define HAVE_CYGWIN_SHELL */ /*#define HAVE_CYGWIN_SHELL 1 */ /* * Define if you have the MKS tool set or shell. Do NOT define * BATCH_MODE_ONLY_SHELL if you define HAVE_MKS_SHELL */ /*#define HAVE_MKS_SHELL 1 */ /* * Enforce the mutual exclusivity restriction. */ #ifdef HAVE_MKS_SHELL #undef BATCH_MODE_ONLY_SHELL #endif #ifdef HAVE_CYGWIN_SHELL #undef BATCH_MODE_ONLY_SHELL #endif make-4.3/src/version.c0000644000175000017500000000222113603564437011646 00000000000000/* Record version and build host architecture for GNU make. Copyright (C) 1988-2020 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 . */ /* We use instead of "config.h" so that a compilation using -I. -I$srcdir will use ./config.h rather than $srcdir/config.h (which it would do because makeint.h was found in $srcdir). */ #include #ifndef MAKE_HOST # define MAKE_HOST "unknown" #endif const char *version_string = VERSION; const char *make_host = MAKE_HOST; /* Local variables: version-control: never End: */ make-4.3/src/hash.c0000644000175000017500000003217713603564437011121 00000000000000/* hash.c -- hash table maintenance Copyright (C) 1995, 1999, 2002, 2010 Free Software Foundation, Inc. Written by Greg McGary 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 . */ #include "makeint.h" #include "hash.h" #include #define CALLOC(t, n) ((t *) xcalloc (sizeof (t) * (n))) #define MALLOC(t, n) ((t *) xmalloc (sizeof (t) * (n))) #define REALLOC(o, t, n) ((t *) xrealloc ((o), sizeof (t) * (n))) #define CLONE(o, t, n) ((t *) memcpy (MALLOC (t, (n)), (o), sizeof (t) * (n))) static void hash_rehash __P((struct hash_table* ht)); static unsigned long round_up_2 __P((unsigned long rough)); /* Implement double hashing with open addressing. The table size is always a power of two. The secondary ('increment') hash function is forced to return an odd-value, in order to be relatively prime to the table size. This guarantees that the increment can potentially hit every slot in the table during collision resolution. */ void *hash_deleted_item = &hash_deleted_item; /* Force the table size to be a power of two, possibly rounding up the given size. */ void hash_init (struct hash_table *ht, unsigned long size, hash_func_t hash_1, hash_func_t hash_2, hash_cmp_func_t hash_cmp) { ht->ht_size = round_up_2 (size); ht->ht_empty_slots = ht->ht_size; ht->ht_vec = (void**) CALLOC (struct token *, ht->ht_size); if (ht->ht_vec == 0) { fprintf (stderr, _("can't allocate %lu bytes for hash table: memory exhausted"), ht->ht_size * (unsigned long) sizeof (struct token *)); exit (MAKE_TROUBLE); } ht->ht_capacity = ht->ht_size - (ht->ht_size / 16); /* 93.75% loading factor */ ht->ht_fill = 0; ht->ht_collisions = 0; ht->ht_lookups = 0; ht->ht_rehashes = 0; ht->ht_hash_1 = hash_1; ht->ht_hash_2 = hash_2; ht->ht_compare = hash_cmp; } /* Load an array of items into 'ht'. */ void hash_load (struct hash_table *ht, void *item_table, unsigned long cardinality, unsigned long size) { char *items = (char *) item_table; while (cardinality--) { hash_insert (ht, items); items += size; } } /* Returns the address of the table slot matching 'key'. If 'key' is not found, return the address of an empty slot suitable for inserting 'key'. The caller is responsible for incrementing ht_fill on insertion. */ void ** hash_find_slot (struct hash_table *ht, const void *key) { void **slot; void **deleted_slot = 0; unsigned int hash_2 = 0; unsigned int hash_1 = (*ht->ht_hash_1) (key); ht->ht_lookups++; for (;;) { hash_1 &= (ht->ht_size - 1); slot = &ht->ht_vec[hash_1]; if (*slot == 0) return (deleted_slot ? deleted_slot : slot); if (*slot == hash_deleted_item) { if (deleted_slot == 0) deleted_slot = slot; } else { if (key == *slot) return slot; if ((*ht->ht_compare) (key, *slot) == 0) return slot; ht->ht_collisions++; } if (!hash_2) hash_2 = (*ht->ht_hash_2) (key) | 1; hash_1 += hash_2; } } void * hash_find_item (struct hash_table *ht, const void *key) { void **slot = hash_find_slot (ht, key); return ((HASH_VACANT (*slot)) ? 0 : *slot); } void * hash_insert (struct hash_table *ht, const void *item) { void **slot = hash_find_slot (ht, item); const void *old_item = *slot; hash_insert_at (ht, item, slot); return (void *)((HASH_VACANT (old_item)) ? 0 : old_item); } void * hash_insert_at (struct hash_table *ht, const void *item, const void *slot) { const void *old_item = *(void **) slot; if (HASH_VACANT (old_item)) { ht->ht_fill++; if (old_item == 0) ht->ht_empty_slots--; old_item = item; } *(void const **) slot = item; if (ht->ht_empty_slots < ht->ht_size - ht->ht_capacity) { hash_rehash (ht); return (void *) hash_find_slot (ht, item); } else return (void *) slot; } void * hash_delete (struct hash_table *ht, const void *item) { void **slot = hash_find_slot (ht, item); return hash_delete_at (ht, slot); } void * hash_delete_at (struct hash_table *ht, const void *slot) { void *item = *(void **) slot; if (!HASH_VACANT (item)) { *(void const **) slot = hash_deleted_item; ht->ht_fill--; return item; } else return 0; } void hash_free_items (struct hash_table *ht) { void **vec = ht->ht_vec; void **end = &vec[ht->ht_size]; for (; vec < end; vec++) { void *item = *vec; if (!HASH_VACANT (item)) free (item); *vec = 0; } ht->ht_fill = 0; ht->ht_empty_slots = ht->ht_size; } void hash_delete_items (struct hash_table *ht) { void **vec = ht->ht_vec; void **end = &vec[ht->ht_size]; for (; vec < end; vec++) *vec = 0; ht->ht_fill = 0; ht->ht_collisions = 0; ht->ht_lookups = 0; ht->ht_rehashes = 0; ht->ht_empty_slots = ht->ht_size; } void hash_free (struct hash_table *ht, int free_items) { if (free_items) hash_free_items (ht); else { ht->ht_fill = 0; ht->ht_empty_slots = ht->ht_size; } free (ht->ht_vec); ht->ht_vec = 0; ht->ht_capacity = 0; } void hash_map (struct hash_table *ht, hash_map_func_t map) { void **slot; void **end = &ht->ht_vec[ht->ht_size]; for (slot = ht->ht_vec; slot < end; slot++) { if (!HASH_VACANT (*slot)) (*map) (*slot); } } void hash_map_arg (struct hash_table *ht, hash_map_arg_func_t map, void *arg) { void **slot; void **end = &ht->ht_vec[ht->ht_size]; for (slot = ht->ht_vec; slot < end; slot++) { if (!HASH_VACANT (*slot)) (*map) (*slot, arg); } } /* Double the size of the hash table in the event of overflow... */ static void hash_rehash (struct hash_table *ht) { unsigned long old_ht_size = ht->ht_size; void **old_vec = ht->ht_vec; void **ovp; if (ht->ht_fill >= ht->ht_capacity) { ht->ht_size *= 2; ht->ht_capacity = ht->ht_size - (ht->ht_size >> 4); } ht->ht_rehashes++; ht->ht_vec = (void **) CALLOC (struct token *, ht->ht_size); for (ovp = old_vec; ovp < &old_vec[old_ht_size]; ovp++) { if (! HASH_VACANT (*ovp)) { void **slot = hash_find_slot (ht, *ovp); *slot = *ovp; } } ht->ht_empty_slots = ht->ht_size - ht->ht_fill; free (old_vec); } void hash_print_stats (struct hash_table *ht, FILE *out_FILE) { fprintf (out_FILE, _("Load=%lu/%lu=%.0f%%, "), ht->ht_fill, ht->ht_size, 100.0 * (double) ht->ht_fill / (double) ht->ht_size); fprintf (out_FILE, _("Rehash=%u, "), ht->ht_rehashes); fprintf (out_FILE, _("Collisions=%lu/%lu=%.0f%%"), ht->ht_collisions, ht->ht_lookups, (ht->ht_lookups ? (100.0 * (double) ht->ht_collisions / (double) ht->ht_lookups) : 0)); } /* Dump all items into a NULL-terminated vector. Use the user-supplied vector, or malloc one. */ void ** hash_dump (struct hash_table *ht, void **vector_0, qsort_cmp_t compare) { void **vector; void **slot; void **end = &ht->ht_vec[ht->ht_size]; if (vector_0 == 0) vector_0 = MALLOC (void *, ht->ht_fill + 1); vector = vector_0; for (slot = ht->ht_vec; slot < end; slot++) if (!HASH_VACANT (*slot)) *vector++ = *slot; *vector = 0; if (compare) qsort (vector_0, ht->ht_fill, sizeof (void *), compare); return vector_0; } /* Round a given number up to the nearest power of 2. */ static unsigned long round_up_2 (unsigned long n) { n |= (n >> 1); n |= (n >> 2); n |= (n >> 4); n |= (n >> 8); n |= (n >> 16); #if !defined(HAVE_LIMITS_H) || ULONG_MAX > 4294967295 /* We only need this on systems where unsigned long is >32 bits. */ n |= (n >> 32); #endif return n + 1; } #define rol32(v, n) \ ((v) << (n) | ((v) >> (32 - (n)))) /* jhash_mix -- mix 3 32-bit values reversibly. */ #define jhash_mix(a, b, c) \ { \ a -= c; a ^= rol32(c, 4); c += b; \ b -= a; b ^= rol32(a, 6); a += c; \ c -= b; c ^= rol32(b, 8); b += a; \ a -= c; a ^= rol32(c, 16); c += b; \ b -= a; b ^= rol32(a, 19); a += c; \ c -= b; c ^= rol32(b, 4); b += a; \ } /* jhash_final - final mixing of 3 32-bit values (a,b,c) into c */ #define jhash_final(a, b, c) \ { \ c ^= b; c -= rol32(b, 14); \ a ^= c; a -= rol32(c, 11); \ b ^= a; b -= rol32(a, 25); \ c ^= b; c -= rol32(b, 16); \ a ^= c; a -= rol32(c, 4); \ b ^= a; b -= rol32(a, 14); \ c ^= b; c -= rol32(b, 24); \ } /* An arbitrary initial parameter */ #define JHASH_INITVAL 0xdeadbeef #define sum_get_unaligned_32(r, p) \ do { \ unsigned int val; \ memcpy(&val, (p), 4); \ r += val; \ } while(0); unsigned int jhash(unsigned const char *k, int length) { unsigned int a, b, c; /* Set up the internal state */ a = b = c = JHASH_INITVAL + length; /* All but the last block: affect some 32 bits of (a,b,c) */ while (length > 12) { sum_get_unaligned_32(a, k); sum_get_unaligned_32(b, k + 4); sum_get_unaligned_32(c, k + 8); jhash_mix(a, b, c); length -= 12; k += 12; } if (!length) return c; if (length > 8) { sum_get_unaligned_32(a, k); length -= 4; k += 4; } if (length > 4) { sum_get_unaligned_32(b, k); length -= 4; k += 4; } if (length == 4) c += (unsigned)k[3]<<24; if (length >= 3) c += (unsigned)k[2]<<16; if (length >= 2) c += (unsigned)k[1]<<8; c += k[0]; jhash_final(a, b, c); return c; } #define UINTSZ sizeof (unsigned int) #ifdef WORDS_BIGENDIAN /* The ifs are ordered from the first byte in memory to the last. */ #define sum_up_to_nul(r, p, plen, flag) \ do { \ unsigned int val = 0; \ size_t pn = (plen); \ size_t n = pn < UINTSZ ? pn : UINTSZ; \ memcpy (&val, (p), n); \ if ((val & 0xFF000000) == 0) \ flag = 1; \ else if ((val & 0xFF0000) == 0) \ r += val & ~0xFFFF, flag = 1; \ else if ((val & 0xFF00) == 0) \ r += val & ~0xFF, flag = 1; \ else \ r += val, flag = (val & 0xFF) == 0; \ } while (0) #else /* First detect the presence of zeroes. If there is none, we can sum the 4 bytes directly. Otherwise, the ifs are ordered as in the big endian case, from the first byte in memory to the last. */ #define sum_up_to_nul(r, p, plen, flag) \ do { \ unsigned int val = 0; \ size_t pn = (plen); \ size_t n = pn < UINTSZ ? pn : UINTSZ; \ memcpy (&val, (p), n); \ flag = ((val - 0x01010101) & ~val) & 0x80808080; \ if (!flag) \ r += val; \ else if (val & 0xFF) \ { \ if ((val & 0xFF00) == 0) \ r += val & 0xFF; \ else if ((val & 0xFF0000) == 0) \ r += val & 0xFFFF; \ else \ r += val; \ } \ } while (0) #endif unsigned int jhash_string(unsigned const char *k) { unsigned int a, b, c; unsigned int have_nul = 0; unsigned const char *start = k; size_t klen = strlen ((const char*)k); /* Set up the internal state */ a = b = c = JHASH_INITVAL; /* All but the last block: affect some 32 bits of (a,b,c) */ for (;;) { sum_up_to_nul(a, k, klen, have_nul); if (have_nul) break; k += UINTSZ; assert (klen >= UINTSZ); klen -= UINTSZ; sum_up_to_nul(b, k, klen, have_nul); if (have_nul) break; k += UINTSZ; assert (klen >= UINTSZ); klen -= UINTSZ; sum_up_to_nul(c, k, klen, have_nul); if (have_nul) break; k += UINTSZ; assert (klen >= UINTSZ); klen -= UINTSZ; jhash_mix(a, b, c); } jhash_final(a, b, c); return c + (unsigned) (k - start); } make-4.3/src/remote-cstms.c0000644000175000017500000002060413603564437012610 00000000000000/* GNU Make remote job exportation interface to the Customs daemon. THIS CODE IS NOT SUPPORTED BY THE GNU PROJECT. Please do not send bug reports or questions about it to the Make maintainers. Copyright (C) 1988-2020 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 . */ #include "makeint.h" #include "filedef.h" #include "commands.h" #include "job.h" #include "debug.h" #include #include #include "customs.h" char *remote_description = "Customs"; /* File name of the Customs 'export' client command. A full path name can be used to avoid some path-searching overhead. */ #define EXPORT_COMMAND "/usr/local/bin/export" /* ExportPermit gotten by start_remote_job_p, and used by start_remote_job. */ static ExportPermit permit; /* Normalized path name of the current directory. */ static char *normalized_cwd; /* Call once at startup even if no commands are run. */ void remote_setup (void) { } /* Called before exit. */ void remote_cleanup (void) { } /* Return nonzero if the next job should be done remotely. */ int start_remote_job_p (int first_p) { static int inited = 0; int status; int njobs; if (!inited) { /* Allow the user to turn off job exportation (useful while he is debugging Customs, for example). */ if (getenv ("GNU_MAKE_NO_CUSTOMS") != 0) { inited = -1; return 0; } /* For secure Customs, make is installed setuid root and Customs requires a privileged source port be used. */ make_access (); if (ISDB (DB_JOBS)) Rpc_Debug (1); /* Ping the daemon once to see if it is there. */ inited = Customs_Ping () == RPC_SUCCESS ? 1 : -1; /* Return to normal user access. */ user_access (); if (starting_directory == 0) /* main couldn't figure it out. */ inited = -1; else { /* Normalize the current directory path name to something that should work on all machines exported to. */ normalized_cwd = xmalloc (GET_PATH_MAX); strcpy (normalized_cwd, starting_directory); if (Customs_NormPath (normalized_cwd, GET_PATH_MAX) < 0) /* Path normalization failure means using Customs won't work, but it's not really an error. */ inited = -1; } } if (inited < 0) return 0; njobs = job_slots_used; if (!first_p) njobs -= 1; /* correction for being called from reap_children() */ /* the first job should run locally, or, if the -l flag is given, we use that as clue as to how many local jobs should be scheduled locally */ if (max_load_average < 0 && njobs == 0 || njobs < max_load_average) return 0; status = Customs_Host (EXPORT_SAME, &permit); if (status != RPC_SUCCESS) { DB (DB_JOBS, (_("Customs won't export: %s\n"), Rpc_ErrorMessage (status))); return 0; } return !CUSTOMS_FAIL (&permit.addr); } /* Start a remote job running the command in ARGV, with environment from ENVP. It gets standard input from STDIN_FD. On failure, return nonzero. On success, return zero, and set *USED_STDIN to nonzero if it will actually use STDIN_FD, zero if not, set *ID_PTR to a unique identification, and set *IS_REMOTE to nonzero if the job is remote, zero if it is local (meaning *ID_PTR is a process ID). */ int start_remote_job (char **argv, char **envp, int stdin_fd, int *is_remote, pid_t *id_ptr, int *used_stdin) { char waybill[MAX_DATA_SIZE], msg[128]; struct hostent *host; struct timeval timeout; struct sockaddr_in sin; int len; int retsock, retport, sock; Rpc_Stat status; pid_t pid; /* Create the return socket. */ retsock = Rpc_UdpCreate (True, 0); if (retsock < 0) { O (error, NILF, "exporting: Couldn't create return socket."); return 1; } /* Get the return socket's port number. */ len = sizeof (sin); if (getsockname (retsock, (struct sockaddr *) &sin, &len) < 0) { (void) close (retsock); perror_with_name ("exporting: ", "getsockname"); return 1; } retport = sin.sin_port; /* Create the TCP socket for talking to the remote child. */ sock = Rpc_TcpCreate (False, 0); /* Create a WayBill to give to the server. */ len = Customs_MakeWayBill (&permit, normalized_cwd, argv[0], argv, envp, retport, waybill); /* Modify the waybill as if the remote child had done 'child_access ()'. */ { WayBill *wb = (WayBill *) waybill; wb->ruid = wb->euid; wb->rgid = wb->egid; } /* Send the request to the server, timing out in 20 seconds. */ timeout.tv_usec = 0; timeout.tv_sec = 20; sin.sin_family = AF_INET; sin.sin_port = htons (Customs_Port ()); sin.sin_addr = permit.addr; status = Rpc_Call (sock, &sin, (Rpc_Proc) CUSTOMS_IMPORT, len, (Rpc_Opaque) waybill, sizeof (msg), (Rpc_Opaque) msg, 1, &timeout); host = gethostbyaddr ((char *)&permit.addr, sizeof(permit.addr), AF_INET); { const char *hnm = host ? host->h_name : inet_ntoa (permit.addr); size_t hlen = strlen (hnm); if (status != RPC_SUCCESS) { const char *err = Rpc_ErrorMessage (status); (void) close (retsock); (void) close (sock); error (NILF, hlen + strlen (err), "exporting to %s: %s", hnm, err); return 1; } else if (msg[0] != 'O' || msg[1] != 'k' || msg[2] != '\0') { (void) close (retsock); (void) close (sock); error (NILF, hlen + strlen (msg), "exporting to %s: %s", hnm, msg); return 1; } else { error (NILF, hlen + INTSTR_LENGTH, "*** exported to %s (id %u)", hnm, permit.id); } fflush (stdout); fflush (stderr); } pid = vfork (); if (pid < 0) { /* The fork failed! */ perror_with_name ("fork", ""); return 1; } else if (pid == 0) { /* Child side. Run 'export' to handle the connection. */ static char sock_buf[20], retsock_buf[20], id_buf[20]; static char *new_argv[6] = { EXPORT_COMMAND, "-id", sock_buf, retsock_buf, id_buf, 0 }; /* Set up the arguments. */ (void) sprintf (sock_buf, "%d", sock); (void) sprintf (retsock_buf, "%d", retsock); (void) sprintf (id_buf, "%x", permit.id); /* Get the right stdin. */ if (stdin_fd != 0) (void) dup2 (stdin_fd, 0); /* Unblock signals in the child. */ unblock_all_sigs (); /* Run the command. */ exec_command (new_argv, envp); } /* Parent side. Return the 'export' process's ID. */ (void) close (retsock); (void) close (sock); *is_remote = 0; *id_ptr = pid; *used_stdin = 1; return 0; } /* Get the status of a dead remote child. Block waiting for one to die if BLOCK is nonzero. Set *EXIT_CODE_PTR to the exit status, *SIGNAL_PTR to the termination signal or zero if it exited normally, and *COREDUMP_PTR nonzero if it dumped core. Return the ID of the child that died, 0 if we would have to block and !BLOCK, or < 0 if there were none. */ int remote_status (int *exit_code_ptr, int *signal_ptr, int *coredump_ptr, int block) { return -1; } /* Block asynchronous notification of remote child death. If this notification is done by raising the child termination signal, do not block that signal. */ void block_remote_children (void) { return; } /* Restore asynchronous notification of remote child death. If this is done by raising the child termination signal, do not unblock that signal. */ void unblock_remote_children (void) { return; } /* Send signal SIG to child ID. Return 0 if successful, -1 if not. */ int remote_kill (pid_t id, int sig) { return -1; } make-4.3/src/gmk-default.scm0000644000175000017500000000335513603564437012732 00000000000000;; Contents of the (gnu make) Guile module ;; Copyright (C) 2011-2020 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 . (define (to-string-maybe x) (cond ;; In GNU make, "false" is the empty string ((or (not x) (unspecified? x) (variable? x) (null? x) (and (string? x) (string-null? x))) #f) ;; We want something not false... not sure about this ((eq? x #t) "#t") ;; Basics ((or (symbol? x) (number? x)) (object->string x)) ((char? x) (string x)) ;; Printable string (no special characters) ((and (string? x) (string-every char-set:printing x)) x) ;; No idea: fail (else (error "Unknown object:" x)))) (define (obj-to-str x) (let ((acc '())) (define (walk x) (cond ((pair? x) (walk (car x)) (walk (cdr x))) ((to-string-maybe x) => (lambda (s) (set! acc (cons s acc)))))) (walk x) (string-join (reverse! acc)))) ;; Return the value of the GNU make variable V (define (gmk-var v) (gmk-expand (format #f "$(~a)" (obj-to-str v)))) ;; Export the public interfaces (export gmk-expand gmk-eval gmk-var) make-4.3/src/variable.h0000644000175000017500000002437013603564437011764 00000000000000/* Definitions for using variables in GNU Make. Copyright (C) 1988-2020 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 . */ #include "hash.h" /* Codes in a variable definition saying where the definition came from. Increasing numeric values signify less-overridable definitions. */ enum variable_origin { o_default, /* Variable from the default set. */ o_env, /* Variable from environment. */ o_file, /* Variable given in a makefile. */ o_env_override, /* Variable from environment, if -e. */ o_command, /* Variable given by user. */ o_override, /* Variable from an 'override' directive. */ o_automatic, /* Automatic variable -- cannot be set. */ o_invalid /* Core dump time. */ }; enum variable_flavor { f_bogus, /* Bogus (error) */ f_simple, /* Simple definition (:= or ::=) */ f_recursive, /* Recursive definition (=) */ f_append, /* Appending definition (+=) */ f_conditional, /* Conditional definition (?=) */ f_shell, /* Shell assignment (!=) */ f_append_value /* Append unexpanded value */ }; /* Structure that represents one variable definition. Each bucket of the hash table is a chain of these, chained through 'next'. */ #define EXP_COUNT_BITS 15 /* This gets all the bitfields into 32 bits */ #define EXP_COUNT_MAX ((1<1, allow this many self-referential expansions. */ enum variable_flavor flavor ENUM_BITFIELD (3); /* Variable flavor. */ enum variable_origin origin ENUM_BITFIELD (3); /* Variable origin. */ enum variable_export { v_export, /* Export this variable. */ v_noexport, /* Don't export this variable. */ v_ifset, /* Export it if it has a non-default value. */ v_default /* Decide in target_environment. */ } export ENUM_BITFIELD (2); }; /* Structure that represents a variable set. */ struct variable_set { struct hash_table table; /* Hash table of variables. */ }; /* Structure that represents a list of variable sets. */ struct variable_set_list { struct variable_set_list *next; /* Link in the chain. */ struct variable_set *set; /* Variable set. */ int next_is_parent; /* True if next is a parent target. */ }; /* Structure used for pattern-specific variables. */ struct pattern_var { struct pattern_var *next; const char *suffix; const char *target; size_t len; struct variable variable; }; 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 */ #ifndef SIZE_MAX # define SIZE_MAX ((size_t)~(size_t)0) #endif char *variable_buffer_output (char *ptr, const char *string, size_t length); char *variable_expand (const char *line); char *variable_expand_for_file (const char *line, struct file *file); char *allocated_variable_expand_for_file (const char *line, struct file *file); #define allocated_variable_expand(line) \ allocated_variable_expand_for_file (line, (struct file *) 0) char *expand_argument (const char *str, const char *end); char *variable_expand_string (char *line, const char *string, size_t length); void install_variable_buffer (char **bufp, size_t *lenp); void restore_variable_buffer (char *buf, size_t len); /* function.c */ int handle_function (char **op, const char **stringp); int pattern_matches (const char *pattern, const char *percent, const char *str); char *subst_expand (char *o, const char *text, const char *subst, const char *replace, size_t slen, size_t rlen, int by_word); char *patsubst_expand_pat (char *o, const char *text, const char *pattern, const char *replace, const char *pattern_percent, 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); #define recursively_expand(v) recursively_expand_for_file (v, NULL) /* variable.c */ struct variable_set_list *create_new_variable_set (void); void free_variable_set (struct variable_set_list *); struct variable_set_list *push_new_variable_scope (void); 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_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 floc *flocp, const char *name, const char *value, enum variable_origin origin, enum variable_flavor flavor, int target_var); 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 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 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, size_t length); struct variable *lookup_variable_in_set (const char *name, size_t length, const struct variable_set *set); struct variable *define_variable_in_set (const char *name, size_t length, const char *value, enum variable_origin origin, int recursive, struct variable_set *set, const floc *flocp); /* Define a variable in the current variable set. */ #define define_variable(n,l,v,o,r) \ define_variable_in_set((n),(l),(v),(o),(r),\ current_variable_set_list->set,NILF) /* Define a variable with a constant name in the current variable set. */ #define define_variable_cname(n,v,o,r) \ define_variable_in_set((n),(sizeof (n) - 1),(v),(o),(r),\ current_variable_set_list->set,NILF) /* Define a variable with a location in the current variable set. */ #define define_variable_loc(n,l,v,o,r,f) \ define_variable_in_set((n),(l),(v),(o),(r),\ current_variable_set_list->set,(f)) /* Define a variable with a location in the global variable set. */ #define define_variable_global(n,l,v,o,r,f) \ define_variable_in_set((n),(l),(v),(o),(r),NULL,(f)) /* Define a variable in FILE's variable set. */ #define define_variable_for_file(n,l,v,o,r,f) \ define_variable_in_set((n),(l),(v),(o),(r),(f)->variables->set,NILF) void undefine_variable_in_set (const char *name, size_t length, enum variable_origin origin, struct variable_set *set); /* Remove variable from the current variable set. */ #define undefine_variable_global(n,l,o) \ undefine_variable_in_set((n),(l),(o),NULL) /* Warn that NAME is an undefined variable. */ #define warn_undefined(n,l) do{\ if (warn_undefined_variables_flag) \ error (reading_file, (l), \ _("warning: undefined variable '%.*s'"), \ (int)(l), (n)); \ }while(0) char **target_environment (struct file *file); struct pattern_var *create_pattern_var (const char *target, const char *suffix); extern int export_all_variables; #define MAKELEVEL_NAME "MAKELEVEL" #define MAKELEVEL_LENGTH (CSTRLEN (MAKELEVEL_NAME)) make-4.3/src/remote-stub.c0000644000175000017500000000546513603564437012444 00000000000000/* Template for the remote job exportation interface to GNU Make. Copyright (C) 1988-2020 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 . */ #include "makeint.h" #include "filedef.h" #include "job.h" #include "commands.h" char *remote_description = 0; /* Call once at startup even if no commands are run. */ void remote_setup (void) { } /* Called before exit. */ void remote_cleanup (void) { } /* Return nonzero if the next job should be done remotely. */ int start_remote_job_p (int first_p UNUSED) { return 0; } /* Start a remote job running the command in ARGV, with environment from ENVP. It gets standard input from STDIN_FD. On failure, return nonzero. On success, return zero, and set *USED_STDIN to nonzero if it will actually use STDIN_FD, zero if not, set *ID_PTR to a unique identification, and set *IS_REMOTE to zero if the job is local, nonzero if it is remote (meaning *ID_PTR is a process ID). */ int start_remote_job (char **argv UNUSED, char **envp UNUSED, int stdin_fd UNUSED, int *is_remote UNUSED, pid_t *id_ptr UNUSED, int *used_stdin UNUSED) { return -1; } /* Get the status of a dead remote child. Block waiting for one to die if BLOCK is nonzero. Set *EXIT_CODE_PTR to the exit status, *SIGNAL_PTR to the termination signal or zero if it exited normally, and *COREDUMP_PTR nonzero if it dumped core. Return the ID of the child that died, 0 if we would have to block and !BLOCK, or < 0 if there were none. */ int remote_status (int *exit_code_ptr UNUSED, int *signal_ptr UNUSED, int *coredump_ptr UNUSED, int block UNUSED) { errno = ECHILD; return -1; } /* Block asynchronous notification of remote child death. If this notification is done by raising the child termination signal, do not block that signal. */ void block_remote_children (void) { return; } /* Restore asynchronous notification of remote child death. If this is done by raising the child termination signal, do not unblock that signal. */ void unblock_remote_children (void) { return; } /* Send signal SIG to child ID. Return 0 if successful, -1 if not. */ int remote_kill (pid_t id UNUSED, int sig UNUSED) { return -1; } make-4.3/src/config.h.in0000644000175000017500000010276013611136506012040 00000000000000/* src/config.h.in. Generated from configure.ac by autoheader. */ /* CPU and C ABI indicator */ #ifndef __i386__ #undef __i386__ #endif #ifndef __x86_64_x32__ #undef __x86_64_x32__ #endif #ifndef __x86_64__ #undef __x86_64__ #endif #ifndef __alpha__ #undef __alpha__ #endif #ifndef __arm__ #undef __arm__ #endif #ifndef __armhf__ #undef __armhf__ #endif #ifndef __arm64_ilp32__ #undef __arm64_ilp32__ #endif #ifndef __arm64__ #undef __arm64__ #endif #ifndef __hppa__ #undef __hppa__ #endif #ifndef __hppa64__ #undef __hppa64__ #endif #ifndef __ia64_ilp32__ #undef __ia64_ilp32__ #endif #ifndef __ia64__ #undef __ia64__ #endif #ifndef __m68k__ #undef __m68k__ #endif #ifndef __mips__ #undef __mips__ #endif #ifndef __mipsn32__ #undef __mipsn32__ #endif #ifndef __mips64__ #undef __mips64__ #endif #ifndef __powerpc__ #undef __powerpc__ #endif #ifndef __powerpc64__ #undef __powerpc64__ #endif #ifndef __powerpc64_elfv2__ #undef __powerpc64_elfv2__ #endif #ifndef __riscv32__ #undef __riscv32__ #endif #ifndef __riscv64__ #undef __riscv64__ #endif #ifndef __riscv32_ilp32__ #undef __riscv32_ilp32__ #endif #ifndef __riscv32_ilp32f__ #undef __riscv32_ilp32f__ #endif #ifndef __riscv32_ilp32d__ #undef __riscv32_ilp32d__ #endif #ifndef __riscv64_ilp32__ #undef __riscv64_ilp32__ #endif #ifndef __riscv64_ilp32f__ #undef __riscv64_ilp32f__ #endif #ifndef __riscv64_ilp32d__ #undef __riscv64_ilp32d__ #endif #ifndef __riscv64_lp64__ #undef __riscv64_lp64__ #endif #ifndef __riscv64_lp64f__ #undef __riscv64_lp64f__ #endif #ifndef __riscv64_lp64d__ #undef __riscv64_lp64d__ #endif #ifndef __s390__ #undef __s390__ #endif #ifndef __s390x__ #undef __s390x__ #endif #ifndef __sh__ #undef __sh__ #endif #ifndef __sparc__ #undef __sparc__ #endif #ifndef __sparc64__ #undef __sparc64__ #endif /* Define if building universal (internal helper macro) */ #undef AC_APPLE_UNIVERSAL_BUILD /* Define to the number of bits in type 'ptrdiff_t'. */ #undef BITSIZEOF_PTRDIFF_T /* Define to the number of bits in type 'sig_atomic_t'. */ #undef BITSIZEOF_SIG_ATOMIC_T /* Define to the number of bits in type 'size_t'. */ #undef BITSIZEOF_SIZE_T /* Define to the number of bits in type 'wchar_t'. */ #undef BITSIZEOF_WCHAR_T /* Define to the number of bits in type 'wint_t'. */ #undef BITSIZEOF_WINT_T /* Define to 1 if the `closedir' function returns void instead of `int'. */ #undef CLOSEDIR_VOID /* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP systems. This function is required for `alloca.c' support on those systems. */ #undef CRAY_STACKSEG_END /* Define to 1 if using `alloca.c'. */ #undef C_ALLOCA /* Define to 1 for DGUX with . */ #undef DGUX /* Define to 1 if // is a file system root distinct from /. */ #undef DOUBLE_SLASH_IS_DISTINCT_ROOT /* Define to 1 if translation of program messages to the user's native language is requested. */ #undef ENABLE_NLS /* Define this to 1 if F_DUPFD behavior does not match POSIX */ #undef FCNTL_DUPFD_BUGGY /* Use high resolution file timestamps if nonzero. */ #undef FILE_TIMESTAMP_HI_RES /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module fscanf shall be considered present. */ #undef GNULIB_FSCANF /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module msvc-nothrow shall be considered present. */ #undef GNULIB_MSVC_NOTHROW /* Define to 1 if printf and friends should be labeled with attribute "__gnu_printf__" instead of "__printf__" */ #undef GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module scanf shall be considered present. */ #undef GNULIB_SCANF /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module strerror shall be considered present. */ #undef GNULIB_STRERROR /* Define to 1 when the gnulib module access should be tested. */ #undef GNULIB_TEST_ACCESS /* Define to 1 when the gnulib module close should be tested. */ #undef GNULIB_TEST_CLOSE /* Define to 1 when the gnulib module dup2 should be tested. */ #undef GNULIB_TEST_DUP2 /* Define to 1 when the gnulib module fcntl should be tested. */ #undef GNULIB_TEST_FCNTL /* Define to 1 when the gnulib module getdtablesize should be tested. */ #undef GNULIB_TEST_GETDTABLESIZE /* Define to 1 when the gnulib module getloadavg should be tested. */ #undef GNULIB_TEST_GETLOADAVG /* Define to 1 when the gnulib module malloc-posix should be tested. */ #undef GNULIB_TEST_MALLOC_POSIX /* Define to 1 when the gnulib module stpcpy should be tested. */ #undef GNULIB_TEST_STPCPY /* Define to 1 when the gnulib module strerror should be tested. */ #undef GNULIB_TEST_STRERROR /* Define to 1 if you have 'alloca' after including , a header that may be supplied by this distribution. */ #undef HAVE_ALLOCA /* Define to 1 if you have and it should be used (not on Ultrix). */ #undef HAVE_ALLOCA_H /* Define to 1 if you have the `atexit' function. */ #undef HAVE_ATEXIT /* Use case insensitive file names */ #undef HAVE_CASE_INSENSITIVE_FS /* 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 Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework. */ #undef HAVE_CFPREFERENCESCOPYAPPVALUE /* Define to 1 if you have the clock_gettime function. */ #undef HAVE_CLOCK_GETTIME /* Define if the GNU dcgettext() function is already present or preinstalled. */ #undef HAVE_DCGETTEXT /* Define to 1 if you have the declaration of `bsd_signal', and to 0 if you don't. */ #undef HAVE_DECL_BSD_SIGNAL /* Define to 1 if you have the declaration of `dlerror', and to 0 if you don't. */ #undef HAVE_DECL_DLERROR /* Define to 1 if you have the declaration of `dlopen', and to 0 if you don't. */ #undef HAVE_DECL_DLOPEN /* Define to 1 if you have the declaration of `dlsym', and to 0 if you don't. */ #undef HAVE_DECL_DLSYM /* Define to 1 if you have the declaration of `getdtablesize', and to 0 if you don't. */ #undef HAVE_DECL_GETDTABLESIZE /* Define to 1 if you have the declaration of `program_invocation_name', and to 0 if you don't. */ #undef HAVE_DECL_PROGRAM_INVOCATION_NAME /* Define to 1 if you have the declaration of `program_invocation_short_name', and to 0 if you don't. */ #undef HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME /* Define to 1 if you have the declaration of `strerror_r', and to 0 if you don't. */ #undef HAVE_DECL_STRERROR_R /* Define to 1 if you have the declaration of `sys_siglist', and to 0 if you don't. */ #undef HAVE_DECL_SYS_SIGLIST /* Define to 1 if you have the declaration of `_sys_siglist', and to 0 if you don't. */ #undef HAVE_DECL__SYS_SIGLIST /* Define to 1 if you have the declaration of `__argv', and to 0 if you don't. */ #undef HAVE_DECL___ARGV /* Define to 1 if you have the declaration of `__sys_siglist', and to 0 if you don't. */ #undef HAVE_DECL___SYS_SIGLIST /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_DIRENT_H /* Use platform specific coding */ #undef HAVE_DOS_PATHS /* Define to 1 if you have the `dup' function. */ #undef HAVE_DUP /* Define to 1 if you have the `dup2' function. */ #undef HAVE_DUP2 /* Define to 1 if you have the `fcntl' function. */ #undef HAVE_FCNTL /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H /* Define to 1 if you have the `fdopen' function. */ #undef HAVE_FDOPEN /* 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 `getdtablesize' function. */ #undef HAVE_GETDTABLESIZE /* Define to 1 if you have the `getexecname' function. */ #undef HAVE_GETEXECNAME /* Define to 1 if you have the `getgroups' function. */ #undef HAVE_GETGROUPS /* Define to 1 if you have the `gethostbyname' function. */ #undef HAVE_GETHOSTBYNAME /* Define to 1 if you have the `gethostname' function. */ #undef HAVE_GETHOSTNAME /* Define to 1 if you have the `getprogname' function. */ #undef HAVE_GETPROGNAME /* Define to 1 if you have the `getrlimit' function. */ #undef HAVE_GETRLIMIT /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT /* Define to 1 if you have a standard gettimeofday function */ #undef HAVE_GETTIMEOFDAY /* Embed GNU Guile support */ #undef HAVE_GUILE /* Define if you have the iconv() function and it works. */ #undef HAVE_ICONV /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the `isatty' function. */ #undef HAVE_ISATTY /* Define to 1 if you have the `dgc' library (-ldgc). */ #undef HAVE_LIBDGC /* Define to 1 if you have the `kstat' library (-lkstat). */ #undef HAVE_LIBKSTAT /* Define to 1 if you have the `perfstat' library (-lperfstat). */ #undef HAVE_LIBPERFSTAT /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H /* Define to 1 if you have the header file. */ #undef HAVE_LOCALE_H /* Define to 1 if the system has the type 'long long int'. */ #undef HAVE_LONG_LONG_INT /* Define to 1 if you have the `lstat' function. */ #undef HAVE_LSTAT /* Define to 1 if you have the header file. */ #undef HAVE_MACH_MACH_H /* Define if the 'malloc' function is POSIX compliant. */ #undef HAVE_MALLOC_POSIX /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `memrchr' function. */ #undef HAVE_MEMRCHR /* Define to 1 if you have the `mkstemp' function. */ #undef HAVE_MKSTEMP /* Define to 1 if you have the `mktemp' function. */ #undef HAVE_MKTEMP /* Define to 1 on MSVC platforms that have the "invalid parameter handler" concept. */ #undef HAVE_MSVC_INVALID_PARAMETER_HANDLER /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_NDIR_H /* Define to 1 if you have the header file. */ #undef HAVE_NLIST_H /* Define to 1 if you have the `pipe' function. */ #undef HAVE_PIPE /* Define to 1 if you have the `posix_spawn' function. */ #undef HAVE_POSIX_SPAWN /* Define to 1 if you have the `posix_spawnattr_setsigmask' function. */ #undef HAVE_POSIX_SPAWNATTR_SETSIGMASK /* 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 `readlink' function. */ #undef HAVE_READLINK /* Define to 1 if you have the `realpath' function. */ #undef HAVE_REALPATH /* Define to 1 if defines the SA_RESTART constant. */ #undef HAVE_SA_RESTART /* Define to 1 if you have the `setdtablesize' function. */ #undef HAVE_SETDTABLESIZE /* Define to 1 if you have the `setegid' function. */ #undef HAVE_SETEGID /* Define to 1 if you have the `seteuid' function. */ #undef HAVE_SETEUID /* Define to 1 if you have the `setlinebuf' function. */ #undef HAVE_SETLINEBUF /* Define to 1 if you have the `setregid' function. */ #undef HAVE_SETREGID /* Define to 1 if you have the `setreuid' function. */ #undef HAVE_SETREUID /* Define to 1 if you have the `setrlimit' function. */ #undef HAVE_SETRLIMIT /* Define to 1 if you have the `setvbuf' function. */ #undef HAVE_SETVBUF /* Define to 1 if you have the `sigaction' function. */ #undef HAVE_SIGACTION /* Define to 1 if 'sig_atomic_t' is a signed integer type. */ #undef HAVE_SIGNED_SIG_ATOMIC_T /* Define to 1 if 'wchar_t' is a signed integer type. */ #undef HAVE_SIGNED_WCHAR_T /* Define to 1 if 'wint_t' is a signed integer type. */ #undef HAVE_SIGNED_WINT_T /* Define to 1 if you have the `sigsetmask' function. */ #undef HAVE_SIGSETMASK /* Define to 1 if you have the `socket' function. */ #undef HAVE_SOCKET /* Define to 1 if you have the header file. */ #undef HAVE_SPAWN_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `stpcpy' function. */ #undef HAVE_STPCPY /* Define to 1 if you have the `strcasecmp' function. */ #undef HAVE_STRCASECMP /* Define to 1 if you have the `strcmpi' function. */ #undef HAVE_STRCMPI /* Define to 1 if you have the `strcoll' function and it is properly defined. */ #undef HAVE_STRCOLL /* Define to 1 if you have the `strdup' function. */ #undef HAVE_STRDUP /* Define to 1 if you have the `strerror_r' function. */ #undef HAVE_STRERROR_R /* Define to 1 if you have the `stricmp' function. */ #undef HAVE_STRICMP /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `strncasecmp' function. */ #undef HAVE_STRNCASECMP /* Define to 1 if you have the `strncmpi' function. */ #undef HAVE_STRNCMPI /* Define to 1 if you have the `strndup' function. */ #undef HAVE_STRNDUP /* Define to 1 if you have the `strnicmp' function. */ #undef HAVE_STRNICMP /* Define to 1 if you have the `strsignal' function. */ #undef HAVE_STRSIGNAL /* Define to 1 if `d_type' is a member of `struct dirent'. */ #undef HAVE_STRUCT_DIRENT_D_TYPE /* Define to 1 if `n_un.n_name' is a member of `struct nlist'. */ #undef HAVE_STRUCT_NLIST_N_UN_N_NAME /* Define to 1 if you have the `symlink' function. */ #undef HAVE_SYMLINK /* Define to 1 if you have the header file. */ #undef HAVE_SYS_BITYPES_H /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_DIR_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_FILE_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_LOADAVG_H /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_NDIR_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_PARAM_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_RESOURCE_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SELECT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SOCKET_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIMEB_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIME_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_WAIT_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 `umask' function. */ #undef HAVE_UMASK /* Define to 1 if you have the 'union wait' type in . */ #undef HAVE_UNION_WAIT /* Define to 1 if you have the 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 if you have a global __progname variable */ #undef HAVE_VAR___PROGNAME /* Define to 1 if you have the `vfork' function. */ #undef HAVE_VFORK /* Define to 1 if you have the 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 you have the header file. */ #undef HAVE_WCHAR_H /* Define if you have the 'wchar_t' type. */ #undef HAVE_WCHAR_T /* Define to 1 if you have the header file. */ #undef HAVE_WINSOCK2_H /* Define if you have the 'wint_t' type. */ #undef HAVE_WINT_T /* Define to 1 if `fork' works. */ #undef HAVE_WORKING_FORK /* Define to 1 if O_NOATIME works. */ #undef HAVE_WORKING_O_NOATIME /* Define to 1 if O_NOFOLLOW works. */ #undef HAVE_WORKING_O_NOFOLLOW /* Define to 1 if `vfork' works. */ #undef HAVE_WORKING_VFORK /* Define to 1 if the system has the type `_Bool'. */ #undef HAVE__BOOL /* Define to 1 if you have the `_set_invalid_parameter_handler' function. */ #undef HAVE__SET_INVALID_PARAMETER_HANDLER /* Build host information. */ #undef MAKE_HOST /* Define to 1 to enable job server support in GNU make. */ #undef MAKE_JOBSERVER /* Define to 1 to enable 'load' support in GNU make. */ #undef MAKE_LOAD /* Define to 1 to enable symbolic link timestamp checking. */ #undef MAKE_SYMLINKS /* Use GNU style printf and scanf. */ #ifndef __USE_MINGW_ANSI_STDIO # undef __USE_MINGW_ANSI_STDIO #endif /* Define to 1 if the nlist n_name member is a pointer */ #undef N_NAME_POINTER /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to the character that separates directories in PATH. */ #undef PATH_SEPARATOR_CHAR /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type 'ptrdiff_t'. */ #undef PTRDIFF_T_SUFFIX /* Define to 1 if strerror(0) does not return a message implying success. */ #undef REPLACE_STRERROR_0 /* Define as the return type of signal handlers (`int' or `void'). */ #undef RETSIGTYPE /* Define to the name of the SCCS 'get' command. */ #undef SCCS_GET /* Define to 1 if the SCCS 'get' command understands the '-G' option. */ #undef SCCS_GET_MINUS_G /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type 'sig_atomic_t'. */ #undef SIG_ATOMIC_T_SUFFIX /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type 'size_t'. */ #undef SIZE_T_SUFFIX /* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at runtime. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ #undef STACK_DIRECTION /* Define to 1 if the `S_IS*' macros in do not work properly. */ #undef STAT_MACROS_BROKEN /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define to 1 if strerror_r returns char *. */ #undef STRERROR_R_CHAR_P /* Define if struct stat contains a nanoseconds field */ #undef ST_MTIM_NSEC /* Define to 1 on System V Release 4. */ #undef SVR4 /* Define to 1 if you can safely include both and . */ #undef TIME_WITH_SYS_TIME /* Define to 1 for Encore UMAX. */ #undef UMAX /* Define to 1 for Encore UMAX 4.3 that has instead of . */ #undef UMAX4_3 /* Define to 1 to use posix_spawn(). */ #undef USE_POSIX_SPAWN /* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable general extensions on macOS. */ #ifndef _DARWIN_C_SOURCE # undef _DARWIN_C_SOURCE #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif /* Enable NetBSD extensions on NetBSD. */ #ifndef _NETBSD_SOURCE # undef _NETBSD_SOURCE #endif /* Enable OpenBSD extensions on NetBSD. */ #ifndef _OPENBSD_SOURCE # undef _OPENBSD_SOURCE #endif /* Enable threading extensions on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif /* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ #ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ # undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ # undef __STDC_WANT_IEC_60559_BFP_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ #ifndef __STDC_WANT_IEC_60559_DFP_EXT__ # undef __STDC_WANT_IEC_60559_DFP_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ #ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ # undef __STDC_WANT_IEC_60559_FUNCS_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-3:2015. */ #ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ # undef __STDC_WANT_IEC_60559_TYPES_EXT__ #endif /* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ #ifndef __STDC_WANT_LIB_EXT2__ # undef __STDC_WANT_LIB_EXT2__ #endif /* Enable extensions specified by ISO/IEC 24747:2009. */ #ifndef __STDC_WANT_MATH_SPEC_FUNCS__ # undef __STDC_WANT_MATH_SPEC_FUNCS__ #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif /* Enable X/Open extensions if necessary. HP-UX 11.11 defines mbstate_t only if _XOPEN_SOURCE is defined to 500, regardless of whether compiling with -Ae or -D_HPUX_SOURCE=1. */ #ifndef _XOPEN_SOURCE # undef _XOPEN_SOURCE #endif /* Enable X/Open compliant socket functions that do not require linking with -lxnet on HP-UX 11.11. */ #ifndef _HPUX_ALT_XOPEN_SOCKET_API # undef _HPUX_ALT_XOPEN_SOCKET_API #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif /* Version number of package */ #undef VERSION /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type 'wchar_t'. */ #undef WCHAR_T_SUFFIX /* Use platform specific coding */ #undef WINDOWS32 /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type 'wint_t'. */ #undef WINT_T_SUFFIX /* Define if using the dmalloc debugging malloc package */ #undef WITH_DMALLOC /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ #if defined AC_APPLE_UNIVERSAL_BUILD # if defined __BIG_ENDIAN__ # define WORDS_BIGENDIAN 1 # endif #else # ifndef WORDS_BIGENDIAN # undef WORDS_BIGENDIAN # endif #endif /* Enable large inode numbers on Mac OS X 10.5. */ #ifndef _DARWIN_USE_64_BIT_INODE # define _DARWIN_USE_64_BIT_INODE 1 #endif /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS /* Define for large files, on AIX-style hosts. */ #undef _LARGE_FILES /* Define to 1 if on MINIX. */ #undef _MINIX /* Define to 1 to make NetBSD features available. MINIX 3 needs this. */ #undef _NETBSD_SOURCE /* The _Noreturn keyword of C11. */ #ifndef _Noreturn # if (defined __cplusplus \ && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \ || (defined _MSC_VER && 1900 <= _MSC_VER)) \ && 0) /* [[noreturn]] is not practically usable, because with it the syntax extern _Noreturn void func (...); would not be valid; such a declaration would only be valid with 'extern' and '_Noreturn' swapped, or without the 'extern' keyword. However, some AIX system header files and several gnulib header files use precisely this syntax with 'extern'. */ # define _Noreturn [[noreturn]] # elif ((!defined __cplusplus || defined __clang__) \ && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ || 4 < __GNUC__ + (7 <= __GNUC_MINOR__))) /* _Noreturn works as-is. */ # elif 2 < __GNUC__ + (8 <= __GNUC_MINOR__) || 0x5110 <= __SUNPRO_C # define _Noreturn __attribute__ ((__noreturn__)) # elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0) # define _Noreturn __declspec (noreturn) # else # define _Noreturn # endif #endif /* Define to 2 if the system does not provide POSIX.1 features except with this defined. */ #undef _POSIX_1_SOURCE /* Define to 1 if you need to in order for 'stat' and other things to work. */ #undef _POSIX_SOURCE /* For standard stat data types on VMS. */ #undef _USE_STD_STAT /* Define to 1 if the system predates C++11. */ #undef __STDC_CONSTANT_MACROS /* Define to 1 if the system predates C++11. */ #undef __STDC_LIMIT_MACROS /* The _GL_ASYNC_SAFE marker should be attached to functions that are signal handlers (for signals other than SIGABRT, SIGPIPE) or can be invoked from such signal handlers. Such functions have some restrictions: * All functions that it calls should be marked _GL_ASYNC_SAFE as well, or should be listed as async-signal-safe in POSIX section 2.4.3. Note that malloc(), sprintf(), and fwrite(), in particular, are NOT async-signal-safe. * All memory locations (variables and struct fields) that these functions access must be marked 'volatile'. This holds for both read and write accesses. Otherwise the compiler might optimize away stores to and reads from such locations that occur in the program, depending on its data flow analysis. For example, when the program contains a loop that is intended to inspect a variable set from within a signal handler while (!signal_occurred) ; the compiler is allowed to transform this into an endless loop if the variable 'signal_occurred' is not declared 'volatile'. Additionally, recall that: * A signal handler should not modify errno (except if it is a handler for a fatal signal and ends by raising the same signal again, thus provoking the termination of the process). If it invokes a function that may clobber errno, it needs to save and restore the value of errno. */ #define _GL_ASYNC_SAFE /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define as 'access' if you don't have the eaccess() function. */ #undef eaccess /* Please see the Gnulib manual for how to use these macros. Suppress extern inline with HP-UX cc, as it appears to be broken; see . Suppress extern inline with Sun C in standards-conformance mode, as it mishandles inline functions that call each other. E.g., for 'inline void f (void) { } inline void g (void) { f (); }', c99 incorrectly complains 'reference to static identifier "f" in extern inline function'. This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16. Suppress extern inline (with or without __attribute__ ((__gnu_inline__))) on configurations that mistakenly use 'static inline' to implement functions or macros in standard C headers like . For example, if isdigit is mistakenly implemented via a static inline function, a program containing an extern inline function that calls isdigit may not work since the C standard prohibits extern inline functions from calling static functions (ISO C 99 section 6.7.4.(3). This bug is known to occur on: OS X 10.8 and earlier; see: https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html DragonFly; see http://muscles.dragonflybsd.org/bulk/clang-master-potential/20141111_102002/logs/ah-tty-0.3.12.log FreeBSD; see: https://lists.gnu.org/r/bug-gnulib/2014-07/msg00104.html OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and for clang but remains for g++; see . Assume DragonFly and FreeBSD will be similar. GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 inline semantics, unless -fgnu89-inline is used. It defines a macro __GNUC_STDC_INLINE__ to indicate this situation or a macro __GNUC_GNU_INLINE__ to indicate the opposite situation. GCC 4.2 with -std=c99 or -std=gnu99 implements the GNU C inline semantics but warns, unless -fgnu89-inline is used: warning: C99 inline functions are not supported; using GNU89 warning: to disable this warning use -fgnu89-inline or the gnu_inline function attribute It defines a macro __GNUC_GNU_INLINE__ to indicate this situation. */ #if (((defined __APPLE__ && defined __MACH__) \ || defined __DragonFly__ || defined __FreeBSD__) \ && (defined __header_inline \ ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \ && ! defined __clang__) \ : ((! defined _DONT_USE_CTYPE_INLINE_ \ && (defined __GNUC__ || defined __cplusplus)) \ || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \ && defined __GNUC__ && ! defined __cplusplus)))) # define _GL_EXTERN_INLINE_STDHEADER_BUG #endif #if ((__GNUC__ \ ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \ : (199901L <= __STDC_VERSION__ \ && !defined __HP_cc \ && !defined __PGI \ && !(defined __SUNPRO_C && __STDC__))) \ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) # define _GL_INLINE inline # define _GL_EXTERN_INLINE extern inline # define _GL_EXTERN_INLINE_IN_USE #elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) # if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__ /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */ # define _GL_INLINE extern inline __attribute__ ((__gnu_inline__)) # else # define _GL_INLINE extern inline # endif # define _GL_EXTERN_INLINE extern # define _GL_EXTERN_INLINE_IN_USE #else # define _GL_INLINE static _GL_UNUSED # define _GL_EXTERN_INLINE static _GL_UNUSED #endif /* In GCC 4.6 (inclusive) to 5.1 (exclusive), suppress bogus "no previous prototype for 'FOO'" and "no previous declaration for 'FOO'" diagnostics, when FOO is an inline function in the header; see and . */ #if __GNUC__ == 4 && 6 <= __GNUC_MINOR__ # if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ # define _GL_INLINE_HEADER_CONST_PRAGMA # else # define _GL_INLINE_HEADER_CONST_PRAGMA \ _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"") # endif # define _GL_INLINE_HEADER_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \ _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \ _GL_INLINE_HEADER_CONST_PRAGMA # define _GL_INLINE_HEADER_END \ _Pragma ("GCC diagnostic pop") #else # define _GL_INLINE_HEADER_BEGIN # define _GL_INLINE_HEADER_END #endif /* Define to `int' if doesn't define. */ #undef gid_t /* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of earlier versions), but does not display it by setting __GNUC_STDC_INLINE__. __APPLE__ && __MACH__ test for Mac OS X. __APPLE_CC__ tests for the Apple compiler and its version. __STDC_VERSION__ tests for the C99 mode. */ #if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__ # define __GNUC_STDC_INLINE__ 1 #endif /* Define to `int' if does not define. */ #undef mode_t /* Define to `long int' if does not define. */ #undef off_t /* Define to `int' if does not define. */ #undef pid_t /* Define to the equivalent of the C99 'restrict' keyword, or to nothing if this is not supported. Do not define if restrict is supported directly. */ #undef restrict /* Work around a bug in older versions of Sun C++, which did not #define __restrict__ or support _Restrict or __restrict__ even though the corresponding Sun C compiler ended up with "#define restrict _Restrict" or "#define restrict __restrict__" in the previous line. This workaround can be removed once we assume Oracle Developer Studio 12.5 (2016) or later. */ #if defined __SUNPRO_CC && !defined __RESTRICT && !defined __restrict__ # define _Restrict # define __restrict__ #endif /* Define to `unsigned int' if does not define. */ #undef size_t /* Define to `int' if does not define. */ #undef ssize_t /* Define to `int' if doesn't define. */ #undef uid_t /* Define to the widest unsigned integer type if and do not define. */ #undef uintmax_t /* Define as a marker that can be attached to declarations that might not be used. This helps to reduce warnings, such as from GCC -Wunused-parameter. */ #if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) # define _GL_UNUSED __attribute__ ((__unused__)) #else # define _GL_UNUSED #endif /* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name is a misnomer outside of parameter lists. */ #define _UNUSED_PARAMETER_ _GL_UNUSED /* gcc supports the "unused" attribute on possibly unused labels, and g++ has since version 4.5. Note to support C++ as well as C, _GL_UNUSED_LABEL should be used with a trailing ; */ #if !defined __cplusplus || __GNUC__ > 4 \ || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) # define _GL_UNUSED_LABEL _GL_UNUSED #else # define _GL_UNUSED_LABEL #endif /* The __pure__ attribute was added in gcc 2.96. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) #else # define _GL_ATTRIBUTE_PURE /* empty */ #endif /* The __const__ attribute was added in gcc 2.95. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) # define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) #else # define _GL_ATTRIBUTE_CONST /* empty */ #endif /* The __malloc__ attribute was added in gcc 3. */ #if 3 <= __GNUC__ # define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) #else # define _GL_ATTRIBUTE_MALLOC /* empty */ #endif /* Define as `fork' if `vfork' does not work. */ #undef vfork make-4.3/src/strcache.c0000644000175000017500000002225113603564437011762 00000000000000/* Constant string caching for GNU Make. Copyright (C) 2006-2020 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 . */ #include "makeint.h" #include #include #include "hash.h" /* A string cached here will never be freed, so we don't need to worry about reference counting. We just store the string, and then remember it in a hash so it can be looked up again. */ typedef unsigned short int sc_buflen_t; struct strcache { struct strcache *next; /* The next block of strings. Must be first! */ sc_buflen_t end; /* Offset to the beginning of free space. */ sc_buflen_t bytesfree; /* Free space left in this buffer. */ sc_buflen_t count; /* # of strings in this buffer (for stats). */ char buffer[1]; /* The buffer comes after this. */ }; /* The size (in bytes) of each cache buffer. Try to pick something that will map well into the heap. This must be able to be represented by a short int (<=65535). */ #define CACHE_BUFFER_BASE (8192) #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 struct strcache *strcache = NULL; static struct strcache *fullcache = NULL; static unsigned long total_buffers = 0; static unsigned long total_strings = 0; static unsigned long total_size = 0; /* Add a new buffer to the cache. Add it at the front to reduce search time. This can also increase the overhead, since it's less likely that older buffers will be filled in. However, GNU make has so many smaller strings that this doesn't seem to be much of an issue in practice. */ static struct strcache * new_cache (struct strcache **head, sc_buflen_t buflen) { struct strcache *new = xmalloc (buflen + CACHE_BUFFER_OFFSET); new->end = 0; new->count = 0; new->bytesfree = buflen; new->next = *head; *head = new; ++total_buffers; return new; } static const char * copy_string (struct strcache *sp, const char *str, sc_buflen_t 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, sc_buflen_t len) { const char *res; struct strcache *sp; struct strcache **spp = &strcache; /* We need space for the nul char. */ sc_buflen_t 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. 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 (&strcache, BUFSIZE); spp = &strcache; } /* Add the string to this cache. */ 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. */ if (total_strings > 20 && sp->bytesfree < (total_size / total_strings) + 1) { *spp = sp->next; sp->next = fullcache; fullcache = sp; } 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, size_t 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. */ static unsigned long str_hash_1 (const void *key) { return_ISTRING_HASH_1 ((const char *) key); } static unsigned long str_hash_2 (const void *key) { return_ISTRING_HASH_2 ((const char *) key); } static int str_hash_cmp (const void *x, const void *y) { return_ISTRING_COMPARE ((const char *) x, (const char *) y); } static struct hash_table strings; static unsigned long total_adds = 0; static const char * add_hash (const char *str, size_t 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. */ slot = (char *const *) hash_find_slot (&strings, str); key = *slot; /* Count the total number of add operations we performed. */ ++total_adds; if (!HASH_VACANT (key)) return key; /* Not there yet so add it to a buffer, then into the hash table. */ key = add_string (str, (sc_buflen_t)len); hash_insert_at (&strings, key, slot); return key; } /* Returns true if the string is in the cache; false if not. */ int strcache_iscached (const char *str) { struct strcache *sp; for (sp = strcache; sp != 0; sp = sp->next) if (str >= sp->buffer && str < sp->buffer + sp->end) return 1; for (sp = fullcache; sp != 0; sp = sp->next) 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; } /* If the string is already in the cache, return a pointer to the cached version. If not, add it then return a pointer to the cached version. Note we do NOT take control of the string passed in. */ const char * strcache_add (const char *str) { return add_hash (str, strlen (str)); } const char * strcache_add_len (const char *str, size_t len) { /* If we're not given a nul-terminated string we have to create one, because the hashing functions expect it. */ if (str[len] != '\0') { char *key = alloca (len + 1); memcpy (key, str, len); key[len] = '\0'; str = key; } return add_hash (str, len); } void strcache_init (void) { hash_init (&strings, 8000, str_hash_1, str_hash_2, str_hash_cmp); } /* Generate some stats output. */ void strcache_print_stats (const char *prefix) { const struct strcache *sp; unsigned long numbuffs = 0, fullbuffs = 0; unsigned long totfree = 0, maxfree = 0, minfree = BUFSIZE; if (! strcache) { printf (_("\n%s No strcache buffers\n"), prefix); return; } /* Count the first buffer separately since it's not full. */ for (sp = strcache->next; sp != NULL; sp = sp->next) { sc_buflen_t bf = sp->bytesfree; totfree += bf; maxfree = (bf > maxfree ? bf : maxfree); minfree = (bf < minfree ? bf : minfree); ++numbuffs; } for (sp = fullcache; sp != NULL; sp = sp->next) { sc_buflen_t bf = sp->bytesfree; totfree += bf; maxfree = (bf > maxfree ? bf : maxfree); minfree = (bf < minfree ? bf : minfree); ++numbuffs; ++fullbuffs; } /* Make sure we didn't lose any buffers. */ assert (total_buffers == numbuffs + 1); printf (_("\n%s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu B\n"), prefix, numbuffs + 1, fullbuffs, total_strings, total_size, (total_size / total_strings)); printf (_("%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B\n"), prefix, (sc_buflen_t)BUFSIZE, strcache->end, strcache->count, (unsigned int) (strcache->end / strcache->count)); if (numbuffs) { /* Show information about non-current buffers. */ unsigned long sz = total_size - strcache->end; unsigned long cnt = total_strings - strcache->count; sc_buflen_t avgfree = (sc_buflen_t) (totfree / numbuffs); printf (_("%s other used: total = %lu B / count = %lu / avg = %lu B\n"), prefix, sz, cnt, sz / cnt); printf (_("%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n"), prefix, totfree, maxfree, minfree, avgfree); } printf (_("\n%s strcache performance: lookups = %lu / hit rate = %lu%%\n"), prefix, total_adds, (long unsigned)(100.0 * (total_adds - total_strings) / total_adds)); fputs (_("# hash-table stats:\n# "), stdout); hash_print_stats (&strings, stdout); } make-4.3/src/vmsfunctions.c0000644000175000017500000001345213603564437012727 00000000000000/* VMS functions Copyright (C) 1996-2020 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 . */ #include "makeint.h" #include "debug.h" #include "job.h" #include #include #ifdef __DECC #include #endif #include #include "vmsdir.h" #ifdef HAVE_VMSDIR_H DIR * opendir (char *dspec) { struct DIR *dir = xcalloc (sizeof (struct DIR)); struct NAM *dnam = xmalloc (sizeof (struct NAM)); struct FAB *dfab = &dir->fab; char *searchspec = xmalloc (MAXNAMLEN + 1); *dfab = cc$rms_fab; *dnam = cc$rms_nam; sprintf (searchspec, "%s*.*;", dspec); dfab->fab$l_fna = searchspec; dfab->fab$b_fns = strlen (searchspec); dfab->fab$l_nam = dnam; *dnam = cc$rms_nam; dnam->nam$l_esa = searchspec; dnam->nam$b_ess = MAXNAMLEN; if (! (sys$parse (dfab) & 1)) { free (dir); free (dnam); free (searchspec); return (NULL); } return dir; } #define uppercasify(str) \ do \ { \ char *tmp; \ for (tmp = (str); *tmp != '\0'; tmp++) \ if (islower ((unsigned char)*tmp)) \ *tmp = toupper ((unsigned char)*tmp); \ } \ while (0) struct direct * readdir (DIR *dir) { struct FAB *dfab = &dir->fab; struct NAM *dnam = (struct NAM *)(dfab->fab$l_nam); struct direct *dentry = &dir->dir; int i; memset (dentry, 0, sizeof *dentry); dnam->nam$l_rsa = dir->d_result; dnam->nam$b_rss = MAXNAMLEN; DB (DB_VERBOSE, (".")); if (!((i = sys$search (dfab)) & 1)) { DB (DB_VERBOSE, (_("sys$search() failed with %d\n"), i)); return (NULL); } dentry->d_off = 0; if (dnam->nam$w_fid == 0) dentry->d_fileno = 1; else dentry->d_fileno = dnam->nam$w_fid[0] + (dnam->nam$w_fid[1] << 16); dentry->d_reclen = sizeof (struct direct); dentry->d_namlen = dnam->nam$b_name + dnam->nam$b_type; strncpy (dentry->d_name, dnam->nam$l_name, dentry->d_namlen); dentry->d_name[dentry->d_namlen] = '\0'; #ifdef HAVE_CASE_INSENSITIVE_FS uppercasify (dentry->d_name); #endif return (dentry); } int closedir (DIR *dir) { if (dir != NULL) { struct FAB *dfab = &dir->fab; struct NAM *dnam = (struct NAM *)(dfab->fab$l_nam); if (dnam != NULL) free (dnam->nam$l_esa); free (dnam); free (dir); } return 0; } #endif /* compiled for OpenVMS prior to V7.x */ /* Argv0 will be a full vms file specification, like node$dka100:[utils.gnumake]make.exe;47 prefix it with "mcr " to make it a vms command, executable for DCL. */ const char * vms_command(const char* argv0) { size_t l = strlen(argv0) + 1; char* s = xmalloc(l + 4); memcpy(s, "mcr ", 4); memcpy(s+4, argv0, l); return s; } /* Argv0 aka argv[0] will be a full vms file specification, like node$dka100:[utils.gnumake]make.exe;47, set up by the CRTL. The vms progname should be ^^^^, the file name without file type .exe and ;version. Use sys$parse to get the name part of the file specification. That is in the above example, pick up "make" and return a copy of that string. If something goes wrong in sys$parse (unlikely, this is a VMS/CRTL supplied file specification) or if there is an empty name part (not easy to produce, but it is possible) just return "make". Somes notes ... NAM[L]$M_SYNCHK requests a syntax check, only. NAM is for ODS2 names (shorter parts, output usually converted to UPPERCASE). NAML is for ODS2/ODS5 names (longer parts, output unchanged). NAM$M_NO_SHORT_UPCASE may not be available for older versions of VMS. NAML is not available on older versions of VMS (NAML$C_BID not defined). argv[0] on older versions of VMS (no extended parse style and no CRTL feature DECC$ARGV_PARSE_STYLE) is always in lowercase. */ const char * vms_progname(const char* argv0) { int status; static struct FAB fab; char *progname; const char *fallback = "make"; #ifdef NAML$C_BID static char esa[NAML$C_MAXRSS]; static struct NAML naml; #else static char esa[NAM$C_MAXRSS]; static struct NAM nam; #endif fab = cc$rms_fab; fab.fab$l_fna = (char*)argv0; fab.fab$b_fns = strlen(argv0); #ifdef NAML$C_BID fab.fab$l_naml = &naml; naml = cc$rms_naml; naml.naml$l_long_expand = esa; naml.naml$l_long_expand_alloc = NAML$C_MAXRSS; naml.naml$b_nop = NAML$M_SYNCHK; naml.naml$l_input_flags = NAML$M_NO_SHORT_OUTPUT; #else fab.fab$l_nam = &nam; nam = cc$rms_nam; nam.nam$l_esa = esa; nam.nam$b_ess = NAM$C_MAXRSS; # ifdef NAM$M_NO_SHORT_UPCASE nam.nam$b_nop = NAM$M_SYNCHK | NAM$M_NO_SHORT_UPCASE; # else nam.nam$b_nop = NAM$M_SYNCHK; # endif #endif status = sys$parse(&fab); if (!(status & 1)) return fallback; #ifdef NAML$C_BID if (naml.naml$l_long_name_size == 0) return fallback; progname = xmalloc(naml.naml$l_long_name_size + 1); memcpy(progname, naml.naml$l_long_name, naml.naml$l_long_name_size); progname[naml.naml$l_long_name_size] = '\0'; #else if (nam.nam$b_name == 0) return fallback; progname = xmalloc(nam.nam$b_name + 1); # ifdef NAM$M_NO_SHORT_UPCASE memcpy(progname, nam.nam$l_name, nam.nam$b_name); # else { int i; for (i = 0; i < nam.nam$b_name; i++) progname[i] = tolower(nam.nam$l_name[i]); } # endif progname[nam.nam$b_name] = '\0'; #endif return progname; } make-4.3/src/file.c0000644000175000017500000010173413611136373011102 00000000000000/* Target file management for GNU Make. Copyright (C) 1988-2020 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 . */ #include "makeint.h" #include #include "filedef.h" #include "dep.h" #include "job.h" #include "commands.h" #include "variable.h" #include "debug.h" #include "hash.h" /* Remember whether snap_deps has been invoked: we need this to be sure we don't add new rules (via $(eval ...)) afterwards. In the future it would be nice to support this, but it means we'd need to re-run snap_deps() or at least its functionality... it might mean changing snap_deps() to be run per-file, so we can invoke it after the eval... or remembering which files in the hash have been snapped (a new boolean flag?) and having snap_deps() only work on files which have not yet been snapped. */ int snapped_deps = 0; /* Hash table of files the makefile knows how to make. */ static unsigned long file_hash_1 (const void *key) { return_ISTRING_HASH_1 (((struct file const *) key)->hname); } static unsigned long file_hash_2 (const void *key) { return_ISTRING_HASH_2 (((struct file const *) key)->hname); } static int file_hash_cmp (const void *x, const void *y) { return_ISTRING_COMPARE (((struct file const *) x)->hname, ((struct file const *) y)->hname); } static struct hash_table files; /* Whether or not .SECONDARY with no prerequisites was given. */ static int all_secondary = 0; /* Access the hash table of all file records. lookup_file given a name, return the struct file * for that name, or nil if there is none. */ struct file * lookup_file (const char *name) { struct file *f; struct file file_key; #ifdef VMS int want_vmsify; #ifndef WANT_CASE_SENSITIVE_TARGETS char *lname; #endif #endif assert (*name != '\0'); /* This is also done in parse_file_seq, so this is redundant 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 != '.') { const char *n; char *ln; lname = xstrdup (name); for (n = name, ln = lname; *n != '\0'; ++n, ++ln) *ln = isupper ((unsigned char)*n) ? tolower ((unsigned char)*n) : *n; *ln = '\0'; name = lname; } # endif 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 && (name[1] == '/' || name[1] == '\\') #else && name[1] == '/' #endif && name[2] != '\0') { name += 2; while (*name == '/' #ifdef HAVE_DOS_PATHS || *name == '\\' #endif ) /* Skip following slashes: ".//foo" is "foo", not "/foo". */ ++name; } if (*name == '\0') { /* It was all slashes after a dot. */ #if defined(_AMIGA) name = ""; #else 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) if (*name != '.') free (lname); #endif return f; } /* Look up a file record for file NAME and return it. Create a new record if one doesn't exist. NAME will be stored in the new record so it should be constant or in the strcache etc. */ struct file * enter_file (const char *name) { struct file *f; struct file *new; struct file **file_slot; struct file file_key; assert (*name != '\0'); assert (! verify_flag || strcache_iscached (name)); #if defined(VMS) && !defined(WANT_CASE_SENSITIVE_TARGETS) if (*name != '.') { const char *n; char *lname, *ln; lname = xstrdup (name); for (n = name, ln = lname; *n != '\0'; ++n, ++ln) if (isupper ((unsigned char)*n)) *ln = tolower ((unsigned char)*n); else *ln = *n; *ln = '\0'; name = strcache_add (lname); free (lname); } #endif file_key.hname = name; file_slot = (struct file **) hash_find_slot (&files, &file_key); f = *file_slot; if (! HASH_VACANT (f) && !f->double_colon) { f->builtin = 0; return f; } new = xcalloc (sizeof (struct file)); new->name = new->hname = name; new->update_status = us_none; if (HASH_VACANT (f)) { new->last = new; hash_insert_at (&files, new, file_slot); } else { /* There is already a double-colon entry for this file. */ new->double_colon = f; f->last->prev = new; f->last = new; } return new; } /* Rehash FILE to NAME. This is not as simple as resetting the 'hname' member, since it must be put in a new hash bucket, and possibly merged with an existing file called NAME. */ void rehash_file (struct file *from_file, const char *to_hname) { struct file file_key; struct file **file_slot; struct file *to_file; struct file *deleted_file; struct file *f; /* If it's already that name, we're done. */ from_file->builtin = 0; file_key.hname = to_hname; if (! file_hash_cmp (from_file, &file_key)) return; /* Find the end of the renamed list for the "from" file. */ file_key.hname = from_file->hname; while (from_file->renamed != 0) from_file = from_file->renamed; if (file_hash_cmp (from_file, &file_key)) /* hname changed unexpectedly!! */ abort (); /* Remove the "from" file from the hash. */ deleted_file = hash_delete (&files, from_file); if (deleted_file != from_file) /* from_file isn't the one stored in files */ abort (); /* Find where the newly renamed file will go in the hash. */ file_key.hname = to_hname; file_slot = (struct file **) hash_find_slot (&files, &file_key); to_file = *file_slot; /* Change the hash name for this file. */ from_file->hname = to_hname; for (f = from_file->double_colon; f != 0; f = f->prev) f->hname = to_hname; /* If the new name doesn't exist yet just set it to the renamed file. */ if (HASH_VACANT (to_file)) { hash_insert_at (&files, from_file, file_slot); return; } /* TO_FILE already exists under TO_HNAME. We must retain TO_FILE and merge FROM_FILE into it. */ if (from_file->cmds != 0) { if (to_file->cmds == 0) to_file->cmds = from_file->cmds; else if (from_file->cmds != to_file->cmds) { size_t l = strlen (from_file->name); /* We have two sets of commands. We will go with the one given in the rule explicitly mentioning this name, but give a message to let the user know what's going on. */ if (to_file->cmds->fileinfo.filenm != 0) error (&from_file->cmds->fileinfo, l + strlen (to_file->cmds->fileinfo.filenm) + INTSTR_LENGTH, _("Recipe was specified for file '%s' at %s:%lu,"), from_file->name, to_file->cmds->fileinfo.filenm, to_file->cmds->fileinfo.lineno); else error (&from_file->cmds->fileinfo, l, _("Recipe for file '%s' was found by implicit rule search,"), from_file->name); l += strlen (to_hname); error (&from_file->cmds->fileinfo, l, _("but '%s' is now considered the same file as '%s'."), from_file->name, to_hname); error (&from_file->cmds->fileinfo, l, _("Recipe for '%s' will be ignored in favor of the one for '%s'."), to_hname, from_file->name); } } /* Merge the dependencies of the two files. */ if (to_file->deps == 0) to_file->deps = from_file->deps; else { struct dep *deps = to_file->deps; while (deps->next != 0) deps = deps->next; deps->next = from_file->deps; } merge_variable_set_lists (&to_file->variables, from_file->variables); if (to_file->double_colon && from_file->is_target && !from_file->double_colon) OSS (fatal, NILF, _("can't rename single-colon '%s' to double-colon '%s'"), from_file->name, to_hname); if (!to_file->double_colon && from_file->double_colon) { if (to_file->is_target) OSS (fatal, NILF, _("can't rename double-colon '%s' to single-colon '%s'"), from_file->name, to_hname); else to_file->double_colon = from_file->double_colon; } if (from_file->last_mtime > to_file->last_mtime) /* %%% Kludge so -W wins on a file that gets vpathized. */ to_file->last_mtime = from_file->last_mtime; to_file->mtime_before_update = from_file->mtime_before_update; #define MERGE(field) to_file->field |= from_file->field MERGE (precious); MERGE (tried_implicit); MERGE (updating); MERGE (updated); MERGE (is_target); MERGE (cmd_target); MERGE (phony); MERGE (loaded); MERGE (ignore_vpath); #undef MERGE to_file->builtin = 0; from_file->renamed = to_file; } /* Rename FILE to NAME. This is not as simple as resetting the 'name' member, since it must be put in a new hash bucket, and possibly merged with an existing file called NAME. */ void rename_file (struct file *from_file, const char *to_hname) { rehash_file (from_file, to_hname); while (from_file) { from_file->name = from_file->hname; from_file = from_file->prev; } } /* Remove all nonprecious intermediate files. If SIG is nonzero, this was caused by a fatal signal, meaning that a different message will be printed, and the message will go to stderr rather than stdout. */ void remove_intermediates (int sig) { struct file **file_slot; struct file **file_end; int doneany = 0; /* If there's no way we will ever remove anything anyway, punt early. */ if (question_flag || touch_flag || all_secondary) return; if (sig && just_print_flag) return; file_slot = (struct file **) files.ht_vec; file_end = file_slot + files.ht_size; for ( ; file_slot < file_end; file_slot++) if (! HASH_VACANT (*file_slot)) { struct file *f = *file_slot; /* Is this file eligible for automatic deletion? Yes, IFF: it's marked intermediate, it's not secondary, it wasn't given on the command line, and it's either a -include makefile or it's not precious. */ if (f->intermediate && (f->dontcare || !f->precious) && !f->secondary && !f->cmd_target) { int status; if (f->update_status == us_none) /* If nothing would have created this file yet, don't print an "rm" command for it. */ continue; if (just_print_flag) status = 0; else { status = unlink (f->name); if (status < 0 && errno == ENOENT) continue; } if (!f->dontcare) { if (sig) OS (error, NILF, _("*** Deleting intermediate file '%s'"), f->name); else { if (! doneany) DB (DB_BASIC, (_("Removing intermediate files...\n"))); if (!run_silent) { if (! doneany) { fputs ("rm ", stdout); doneany = 1; } else putchar (' '); fputs (f->name, stdout); fflush (stdout); } } if (status < 0) perror_with_name ("unlink: ", f->name); } } } if (doneany && !sig) { putchar ('\n'); fflush (stdout); } } /* Given a string containing prerequisites (fully expanded), break it up into a struct dep list. Enter each of these prereqs into the file database. */ struct dep * split_prereqs (char *p) { struct dep *new = PARSE_FILE_SEQ (&p, struct dep, MAP_PIPE, NULL, PARSEFS_NONE); if (*p) { /* Files that follow '|' are "order-only" prerequisites that satisfy the dependency by existing: their modification times are irrelevant. */ struct dep *ood; ++p; ood = PARSE_SIMPLE_SEQ (&p, struct dep); if (! new) new = ood; else { struct dep *dp; for (dp = new; dp->next != NULL; dp = dp->next) ; dp->next = ood; } for (; ood != NULL; ood = ood->next) ood->ignore_mtime = 1; } return new; } /* Given a list of prerequisites, enter them into the file database. If STEM is set then first expand patterns using STEM. */ struct dep * enter_prereqs (struct dep *deps, const char *stem) { struct dep *d1; if (deps == 0) return 0; /* If we have a stem, expand the %'s. We use patsubst_expand to translate the prerequisites' patterns into plain prerequisite names. */ if (stem) { const char *pattern = "%"; char *buffer = variable_expand (""); struct dep *dp = deps, *dl = 0; while (dp != 0) { char *percent; size_t nl = strlen (dp->name) + 1; char *nm = alloca (nl); memcpy (nm, dp->name, nl); percent = find_percent (nm); if (percent) { char *o; /* We have to handle empty stems specially, because that would be equivalent to $(patsubst %,dp->name,) which will always be empty. */ if (stem[0] == '\0') { memmove (percent, percent+1, strlen (percent)); o = variable_buffer_output (buffer, nm, strlen (nm) + 1); } else o = patsubst_expand_pat (buffer, stem, pattern, nm, pattern+1, percent+1); /* If the name expanded to the empty string, ignore it. */ if (buffer[0] == '\0') { struct dep *df = dp; if (dp == deps) dp = deps = deps->next; else dp = dl->next = dp->next; free_dep (df); continue; } /* Save the name. */ dp->name = strcache_add_len (buffer, o - buffer); } dp->stem = stem; dp->staticpattern = 1; dl = dp; dp = dp->next; } } /* Enter them as files, unless they need a 2nd expansion. */ for (d1 = deps; d1 != 0; d1 = d1->next) { if (d1->need_2nd_expansion) continue; d1->file = lookup_file (d1->name); if (d1->file == 0) d1->file = enter_file (d1->name); d1->staticpattern = 0; d1->name = 0; } return deps; } /* Expand and parse each dependency line. */ static void expand_deps (struct file *f) { struct dep *d; struct dep **dp; const char *file_stem = f->stem; int initialized = 0; f->updating = 0; /* Walk through the dependencies. For any dependency that needs 2nd expansion, expand it then insert the result into the list. */ dp = &f->deps; d = f->deps; while (d != 0) { char *p; struct dep *new, *next; char *name = (char *)d->name; if (! d->name || ! d->need_2nd_expansion) { /* This one is all set already. */ dp = &d->next; d = d->next; continue; } /* If it's from a static pattern rule, convert the patterns into "$*" so they'll expand properly. */ if (d->staticpattern) { char *o = variable_expand (""); o = subst_expand (o, name, "%", "$*", 1, 2, 0); *o = '\0'; free (name); d->name = name = xstrdup (variable_buffer); d->staticpattern = 0; } /* We're going to do second expansion so initialize file variables for the file. Since the stem for static pattern rules comes from individual dep lines, we will temporarily set f->stem to d->stem. */ if (!initialized) { initialize_file_variables (f, 0); initialized = 1; } if (d->stem != 0) f->stem = d->stem; set_file_variables (f); p = variable_expand_for_file (d->name, f); if (d->stem != 0) f->stem = file_stem; /* At this point we don't need the name anymore: free it. */ free (name); /* Parse the prerequisites and enter them into the file database. */ new = enter_prereqs (split_prereqs (p), d->stem); /* If there were no prereqs here (blank!) then throw this one out. */ if (new == 0) { *dp = d->next; free_dep (d); d = *dp; continue; } /* Add newly parsed prerequisites. */ next = d->next; *dp = new; for (dp = &new->next, d = new->next; d != 0; dp = &d->next, d = d->next) ; *dp = next; d = *dp; } } /* Add extra prereqs to the file in question. */ struct dep * expand_extra_prereqs (const struct variable *extra) { struct dep *d; struct dep *prereqs = extra ? split_prereqs (variable_expand (extra->value)) : NULL; for (d = prereqs; d; d = d->next) { d->file = lookup_file (d->name); if (!d->file) d->file = enter_file (d->name); d->name = NULL; d->ignore_automatic_vars = 1; } return prereqs; } /* Perform per-file snap operations. */ static void snap_file (const void *item, void *arg) { struct file *f = (struct file*)item; struct dep *prereqs = NULL; /* If we're not doing second expansion then reset updating. */ if (!second_expansion) f->updating = 0; /* If .SECONDARY is set with no deps, mark all targets as intermediate. */ if (all_secondary) f->intermediate = 1; /* If .EXTRA_PREREQS is set, add them as ignored by automatic variables. */ if (f->variables) prereqs = expand_extra_prereqs (lookup_variable_in_set (STRING_SIZE_TUPLE(".EXTRA_PREREQS"), f->variables->set)); else if (f->is_target) prereqs = copy_dep_chain (arg); if (prereqs) { struct dep *d; for (d = prereqs; d; d = d->next) if (streq (f->name, dep_name (d))) /* Skip circular dependencies. */ break; if (d) /* We broke early: must have found a circular dependency. */ free_dep_chain (prereqs); else if (!f->deps) f->deps = prereqs; else { d = f->deps; while (d->next) d = d->next; d->next = prereqs; } } } /* For each dependency of each file, make the 'struct dep' point at the appropriate 'struct file' (which may have to be created). Also mark the files depended on by .PRECIOUS, .PHONY, .SILENT, and various other special targets. */ void snap_deps (void) { struct file *f; struct file *f2; struct dep *d; /* Remember that we've done this. Once we start snapping deps we can no longer define new targets. */ snapped_deps = 1; /* Perform second expansion and enter each dependency name as a file. We must use hash_dump() here because within these loops we likely add new files to the table, possibly causing an in-situ table expansion. We only need to do this if second_expansion has been defined; if it hasn't then all deps were expanded as the makefile was read in. If we ever change make to be able to unset .SECONDARY_EXPANSION this will have to change. */ if (second_expansion) { struct file **file_slot_0 = (struct file **) hash_dump (&files, 0, 0); struct file **file_end = file_slot_0 + files.ht_fill; struct file **file_slot; const char *suffixes; /* Expand .SUFFIXES: its prerequisites are used for $$* calc. */ f = lookup_file (".SUFFIXES"); suffixes = f ? f->name : 0; for (; f != 0; f = f->prev) expand_deps (f); /* For every target that's not .SUFFIXES, expand its prerequisites. */ for (file_slot = file_slot_0; file_slot < file_end; file_slot++) for (f = *file_slot; f != 0; f = f->prev) if (f->name != suffixes) expand_deps (f); free (file_slot_0); } /* Now manage all the special targets. */ for (f = lookup_file (".PRECIOUS"); f != 0; f = f->prev) for (d = f->deps; d != 0; d = d->next) for (f2 = d->file; f2 != 0; f2 = f2->prev) f2->precious = 1; for (f = lookup_file (".LOW_RESOLUTION_TIME"); f != 0; f = f->prev) for (d = f->deps; d != 0; d = d->next) for (f2 = d->file; f2 != 0; f2 = f2->prev) f2->low_resolution_time = 1; for (f = lookup_file (".PHONY"); f != 0; f = f->prev) for (d = f->deps; d != 0; d = d->next) for (f2 = d->file; f2 != 0; f2 = f2->prev) { /* Mark this file as phony nonexistent target. */ f2->phony = 1; f2->is_target = 1; f2->last_mtime = NONEXISTENT_MTIME; f2->mtime_before_update = NONEXISTENT_MTIME; } for (f = lookup_file (".INTERMEDIATE"); f != 0; f = f->prev) /* Mark .INTERMEDIATE deps as intermediate files. */ for (d = f->deps; d != 0; d = d->next) for (f2 = d->file; f2 != 0; f2 = f2->prev) f2->intermediate = 1; /* .INTERMEDIATE with no deps does nothing. Marking all files as intermediates is useless since the goal targets would be deleted after they are built. */ for (f = lookup_file (".SECONDARY"); f != 0; f = f->prev) /* Mark .SECONDARY deps as both intermediate and secondary. */ if (f->deps) for (d = f->deps; d != 0; d = d->next) for (f2 = d->file; f2 != 0; f2 = f2->prev) f2->intermediate = f2->secondary = 1; /* .SECONDARY with no deps listed marks *all* files that way. */ else all_secondary = 1; f = lookup_file (".EXPORT_ALL_VARIABLES"); if (f != 0 && f->is_target) export_all_variables = 1; f = lookup_file (".IGNORE"); if (f != 0 && f->is_target) { if (f->deps == 0) ignore_errors_flag = 1; else for (d = f->deps; d != 0; d = d->next) for (f2 = d->file; f2 != 0; f2 = f2->prev) f2->command_flags |= COMMANDS_NOERROR; } f = lookup_file (".SILENT"); if (f != 0 && f->is_target) { if (f->deps == 0) run_silent = 1; else for (d = f->deps; d != 0; d = d->next) for (f2 = d->file; f2 != 0; f2 = f2->prev) f2->command_flags |= COMMANDS_SILENT; } f = lookup_file (".NOTPARALLEL"); if (f != 0 && f->is_target) not_parallel = 1; { struct dep *prereqs = expand_extra_prereqs (lookup_variable (STRING_SIZE_TUPLE(".EXTRA_PREREQS"))); /* Perform per-file snap operations. */ hash_map_arg(&files, snap_file, prereqs); free_dep_chain (prereqs); } #ifndef NO_MINUS_C_MINUS_O /* If .POSIX was defined, remove OUTPUT_OPTION to comply. */ /* This needs more work: what if the user sets this in the makefile? if (posix_pedantic) define_variable_cname ("OUTPUT_OPTION", "", o_default, 1); */ #endif } /* Set the 'command_state' member of FILE and all its 'also_make's. Don't decrease the state of also_make's (e.g., don't downgrade a 'running' also_make to a 'deps_running' also_make). */ void set_command_state (struct file *file, enum cmd_state state) { struct dep *d; file->command_state = state; for (d = file->also_make; d != 0; d = d->next) if (state > d->file->command_state) d->file->command_state = state; } /* Convert an external file timestamp to internal form. */ FILE_TIMESTAMP file_timestamp_cons (const char *fname, time_t stamp, long int ns) { int offset = ORDINARY_MTIME_MIN + (FILE_TIMESTAMP_HI_RES ? ns : 0); FILE_TIMESTAMP s = stamp; FILE_TIMESTAMP product = (FILE_TIMESTAMP) s << FILE_TIMESTAMP_LO_BITS; FILE_TIMESTAMP ts = product + offset; if (! (s <= FILE_TIMESTAMP_S (ORDINARY_MTIME_MAX) && product <= ts && ts <= ORDINARY_MTIME_MAX)) { char buf[FILE_TIMESTAMP_PRINT_LEN_BOUND + 1]; const char *f = fname ? fname : _("Current time"); ts = s <= OLD_MTIME ? ORDINARY_MTIME_MIN : ORDINARY_MTIME_MAX; file_timestamp_sprintf (buf, ts); OSS (error, NILF, _("%s: Timestamp out of range; substituting %s"), f, buf); } return ts; } /* Return the current time as a file timestamp, setting *RESOLUTION to its resolution. */ FILE_TIMESTAMP file_timestamp_now (int *resolution) { int r; time_t s; int ns; /* Don't bother with high-resolution clocks if file timestamps have only one-second resolution. The code below should work, but it's not worth the hassle of debugging it on hosts where it fails. */ #if FILE_TIMESTAMP_HI_RES # if HAVE_CLOCK_GETTIME && defined CLOCK_REALTIME { struct timespec timespec; if (clock_gettime (CLOCK_REALTIME, ×pec) == 0) { r = 1; s = timespec.tv_sec; ns = timespec.tv_nsec; goto got_time; } } # endif # if HAVE_GETTIMEOFDAY { struct timeval timeval; if (gettimeofday (&timeval, 0) == 0) { r = 1000; s = timeval.tv_sec; ns = timeval.tv_usec * 1000; goto got_time; } } # endif #endif r = 1000000000; s = time ((time_t *) 0); ns = 0; #if FILE_TIMESTAMP_HI_RES got_time: #endif *resolution = r; return file_timestamp_cons (0, s, ns); } /* Place into the buffer P a printable representation of the file timestamp TS. */ void file_timestamp_sprintf (char *p, FILE_TIMESTAMP ts) { time_t t = FILE_TIMESTAMP_S (ts); struct tm *tm = localtime (&t); if (tm) sprintf (p, "%04d-%02d-%02d %02d:%02d:%02d", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec); else if (t < 0) sprintf (p, "%ld", (long) t); else sprintf (p, "%lu", (unsigned long) t); p += strlen (p); /* Append nanoseconds as a fraction, but remove trailing zeros. We don't know the actual timestamp resolution, since clock_getres applies only to local times, whereas this timestamp might come from a remote filesystem. So removing trailing zeros is the best guess that we can do. */ sprintf (p, ".%09d", FILE_TIMESTAMP_NS (ts)); p += strlen (p) - 1; while (*p == '0') p--; p += *p != '.'; *p = '\0'; } /* Print the data base of files. */ void print_prereqs (const struct dep *deps) { const struct dep *ood = 0; /* Print all normal dependencies; note any order-only deps. */ for (; deps != 0; deps = deps->next) if (! deps->ignore_mtime) printf (" %s", dep_name (deps)); else if (! ood) ood = deps; /* Print order-only deps, if we have any. */ if (ood) { printf (" | %s", dep_name (ood)); for (ood = ood->next; ood != 0; ood = ood->next) if (ood->ignore_mtime) printf (" %s", dep_name (ood)); } putchar ('\n'); } static void print_file (const void *item) { const struct file *f = item; /* If we're not using builtin targets, don't show them. Ideally we'd be able to delete them altogether but currently there's no facility to ever delete a file once it's been added. */ if (no_builtin_rules_flag && f->builtin) return; putchar ('\n'); if (f->cmds && f->cmds->recipe_prefix != cmd_prefix) { fputs (".RECIPEPREFIX = ", stdout); cmd_prefix = f->cmds->recipe_prefix; if (cmd_prefix != RECIPEPREFIX_DEFAULT) putchar (cmd_prefix); putchar ('\n'); } if (f->variables != 0) print_target_variables (f); if (!f->is_target) puts (_("# Not a target:")); printf ("%s:%s", f->name, f->double_colon ? ":" : ""); print_prereqs (f->deps); if (f->precious) puts (_("# Precious file (prerequisite of .PRECIOUS).")); if (f->phony) puts (_("# Phony target (prerequisite of .PHONY).")); if (f->cmd_target) puts (_("# Command line target.")); if (f->dontcare) puts (_("# A default, MAKEFILES, or -include/sinclude makefile.")); if (f->builtin) puts (_("# Builtin rule")); puts (f->tried_implicit ? _("# Implicit rule search has been done.") : _("# Implicit rule search has not been done.")); if (f->stem != 0) printf (_("# Implicit/static pattern stem: '%s'\n"), f->stem); if (f->intermediate) puts (_("# File is an intermediate prerequisite.")); if (f->also_make != 0) { const struct dep *d; fputs (_("# Also makes:"), stdout); for (d = f->also_make; d != 0; d = d->next) printf (" %s", dep_name (d)); putchar ('\n'); } if (f->last_mtime == UNKNOWN_MTIME) puts (_("# Modification time never checked.")); else if (f->last_mtime == NONEXISTENT_MTIME) puts (_("# File does not exist.")); else if (f->last_mtime == OLD_MTIME) puts (_("# File is very old.")); else { char buf[FILE_TIMESTAMP_PRINT_LEN_BOUND + 1]; file_timestamp_sprintf (buf, f->last_mtime); printf (_("# Last modified %s\n"), buf); } puts (f->updated ? _("# File has been updated.") : _("# File has not been updated.")); switch (f->command_state) { case cs_running: puts (_("# Recipe currently running (THIS IS A BUG).")); break; case cs_deps_running: puts (_("# Dependencies recipe running (THIS IS A BUG).")); break; case cs_not_started: case cs_finished: switch (f->update_status) { case us_none: break; case us_success: puts (_("# Successfully updated.")); break; case us_question: assert (question_flag); puts (_("# Needs to be updated (-q is set).")); break; case us_failed: puts (_("# Failed to be updated.")); break; } break; default: puts (_("# Invalid value in 'command_state' member!")); fflush (stdout); fflush (stderr); abort (); } if (f->variables != 0) print_file_variables (f); if (f->cmds != 0) print_commands (f->cmds); if (f->prev) print_file ((const void *) f->prev); } void print_file_data_base (void) { puts (_("\n# Files")); hash_map (&files, print_file); fputs (_("\n# files hash-table stats:\n# "), stdout); hash_print_stats (&files, stdout); } /* Verify the integrity of the data base of files. */ #define VERIFY_CACHED(_p,_n) \ do{ \ if (_p->_n && _p->_n[0] && !strcache_iscached (_p->_n)) \ error (NULL, strlen (_p->name) + CSTRLEN (# _n) + strlen (_p->_n), \ _("%s: Field '%s' not cached: %s"), _p->name, # _n, _p->_n); \ }while(0) static void verify_file (const void *item) { const struct file *f = item; const struct dep *d; VERIFY_CACHED (f, name); VERIFY_CACHED (f, hname); VERIFY_CACHED (f, vpath); VERIFY_CACHED (f, stem); /* Check the deps. */ for (d = f->deps; d != 0; d = d->next) { if (! d->need_2nd_expansion) VERIFY_CACHED (d, name); VERIFY_CACHED (d, stem); } } void verify_file_data_base (void) { hash_map (&files, verify_file); } #define EXPANSION_INCREMENT(_l) ((((_l) / 500) + 1) * 500) char * build_target_list (char *value) { static unsigned long last_targ_count = 0; if (files.ht_fill != last_targ_count) { size_t max = EXPANSION_INCREMENT (strlen (value)); size_t len; char *p; struct file **fp = (struct file **) files.ht_vec; struct file **end = &fp[files.ht_size]; /* Make sure we have at least MAX bytes in the allocated buffer. */ value = xrealloc (value, max); p = value; len = 0; for (; fp < end; ++fp) if (!HASH_VACANT (*fp) && (*fp)->is_target) { struct file *f = *fp; size_t l = strlen (f->name); len += l + 1; if (len > max) { size_t off = p - value; max += EXPANSION_INCREMENT (l + 1); value = xrealloc (value, max); p = &value[off]; } memcpy (p, f->name, l); p += l; *(p++) = ' '; } *(p-1) = '\0'; last_targ_count = files.ht_fill; } return value; } void init_hash_files (void) { hash_init (&files, 1000, file_hash_1, file_hash_2, file_hash_cmp); } /* EOF */ make-4.3/src/commands.c0000644000175000017500000004446713603564437012004 00000000000000/* Command processing for GNU Make. Copyright (C) 1988-2020 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 . */ #include "makeint.h" #include "filedef.h" #include "dep.h" #include "variable.h" #include "job.h" #include "commands.h" #ifdef WINDOWS32 #include #include "w32err.h" #endif #if VMS # define FILE_LIST_SEPARATOR (vms_comma_separator ? ',' : ' ') #else # define FILE_LIST_SEPARATOR ' ' #endif #ifndef HAVE_UNISTD_H pid_t getpid (); #endif static unsigned long dep_hash_1 (const void *key) { const struct dep *d = key; return_STRING_HASH_1 (dep_name (d)); } static unsigned long dep_hash_2 (const void *key) { const struct dep *d = key; return_STRING_HASH_2 (dep_name (d)); } static int dep_hash_cmp (const void *x, const void *y) { const struct dep *dx = x; const struct dep *dy = y; return strcmp (dep_name (dx), dep_name (dy)); } /* Set FILE's automatic variables up. */ void set_file_variables (struct file *file) { struct dep *d; const char *at, *percent, *star, *less; #ifndef NO_ARCHIVES /* If the target is an archive member 'lib(member)', then $@ is 'lib' and $% is 'member'. */ if (ar_name (file->name)) { size_t len; const char *cp; char *p; cp = strchr (file->name, '('); p = alloca (cp - file->name + 1); memcpy (p, file->name, cp - file->name); p[cp - file->name] = '\0'; at = p; len = strlen (cp + 1); p = alloca (len); memcpy (p, cp + 1, len - 1); p[len - 1] = '\0'; percent = p; } else #endif /* NO_ARCHIVES. */ { at = file->name; percent = ""; } /* $* is the stem from an implicit or static pattern rule. */ if (file->stem == 0) { /* In Unix make, $* is set to the target name with any suffix in the .SUFFIXES list stripped off for explicit rules. We store this in the 'stem' member. */ const char *name; size_t len; #ifndef NO_ARCHIVES if (ar_name (file->name)) { name = strchr (file->name, '(') + 1; len = strlen (name) - 1; } else #endif { name = file->name; len = strlen (name); } for (d = enter_file (strcache_add (".SUFFIXES"))->deps; d ; d = d->next) { size_t slen = strlen (dep_name (d)); if (len > slen && strneq (dep_name (d), name + (len - slen), slen)) { file->stem = strcache_add_len (name, len - slen); break; } } if (d == 0) file->stem = ""; } star = file->stem; /* $< is the first not order-only dependency. */ less = ""; for (d = file->deps; d != 0; d = d->next) if (!d->ignore_mtime && !d->ignore_automatic_vars) { if (!d->need_2nd_expansion) less = dep_name (d); break; } if (file->cmds != 0 && file->cmds == default_file->cmds) /* This file got its commands from .DEFAULT. In this case $< is the same as $@. */ less = at; #define DEFINE_VARIABLE(name, len, value) \ (void) define_variable_for_file (name,len,value,o_automatic,0,file) /* Define the variables. */ DEFINE_VARIABLE ("<", 1, less); DEFINE_VARIABLE ("*", 1, star); DEFINE_VARIABLE ("@", 1, at); DEFINE_VARIABLE ("%", 1, percent); /* Compute the values for $^, $+, $?, and $|. */ { static char *plus_value=0, *bar_value=0, *qmark_value=0; static size_t plus_max=0, bar_max=0, qmark_max=0; size_t qmark_len, plus_len, bar_len; char *cp; char *caret_value; char *qp; char *bp; size_t len; struct hash_table dep_hash; void **slot; /* Compute first the value for $+, which is supposed to contain duplicate dependencies as they were listed in the makefile. */ plus_len = 0; bar_len = 0; for (d = file->deps; d != 0; d = d->next) { if (!d->need_2nd_expansion && !d->ignore_automatic_vars) { if (d->ignore_mtime) bar_len += strlen (dep_name (d)) + 1; else plus_len += strlen (dep_name (d)) + 1; } } if (bar_len == 0) bar_len++; if (plus_len == 0) plus_len++; if (plus_len > plus_max) plus_value = xrealloc (plus_value, plus_max = plus_len); cp = plus_value; qmark_len = plus_len + 1; /* Will be this or less. */ for (d = file->deps; d != 0; d = d->next) if (! d->ignore_mtime && ! d->need_2nd_expansion && ! d->ignore_automatic_vars) { const char *c = dep_name (d); #ifndef NO_ARCHIVES if (ar_name (c)) { c = strchr (c, '(') + 1; len = strlen (c) - 1; } else #endif len = strlen (c); memcpy (cp, c, len); cp += len; *cp++ = FILE_LIST_SEPARATOR; if (! (d->changed || always_make_flag)) qmark_len -= len + 1; /* Don't space in $? for this one. */ } /* Kill the last space and define the variable. */ cp[cp > plus_value ? -1 : 0] = '\0'; DEFINE_VARIABLE ("+", 1, plus_value); /* Compute the values for $^, $?, and $|. */ cp = caret_value = plus_value; /* Reuse the buffer; it's big enough. */ if (qmark_len > qmark_max) qmark_value = xrealloc (qmark_value, qmark_max = qmark_len); qp = qmark_value; if (bar_len > bar_max) bar_value = xrealloc (bar_value, bar_max = bar_len); bp = bar_value; /* Make sure that no dependencies are repeated in $^, $?, and $|. It would be natural to combine the next two loops but we can't do it because of a situation where we have two dep entries, the first is order-only and the second is normal (see below). */ hash_init (&dep_hash, 500, dep_hash_1, dep_hash_2, dep_hash_cmp); for (d = file->deps; d != 0; d = d->next) { if (d->need_2nd_expansion || d->ignore_automatic_vars) continue; slot = hash_find_slot (&dep_hash, d); if (HASH_VACANT (*slot)) hash_insert_at (&dep_hash, d, slot); else { /* Check if the two prerequisites have different ignore_mtime. If so then we need to "upgrade" one that is order-only. */ struct dep* hd = (struct dep*) *slot; if (d->ignore_mtime != hd->ignore_mtime) d->ignore_mtime = hd->ignore_mtime = 0; } } for (d = file->deps; d != 0; d = d->next) { const char *c; if (d->need_2nd_expansion || d->ignore_automatic_vars || hash_find_item (&dep_hash, d) != d) continue; c = dep_name (d); #ifndef NO_ARCHIVES if (ar_name (c)) { c = strchr (c, '(') + 1; len = strlen (c) - 1; } else #endif len = strlen (c); if (d->ignore_mtime) { memcpy (bp, c, len); bp += len; *bp++ = FILE_LIST_SEPARATOR; } else { memcpy (cp, c, len); cp += len; *cp++ = FILE_LIST_SEPARATOR; if (d->changed || always_make_flag) { memcpy (qp, c, len); qp += len; *qp++ = FILE_LIST_SEPARATOR; } } } hash_free (&dep_hash, 0); /* Kill the last spaces and define the variables. */ cp[cp > caret_value ? -1 : 0] = '\0'; DEFINE_VARIABLE ("^", 1, caret_value); qp[qp > qmark_value ? -1 : 0] = '\0'; DEFINE_VARIABLE ("?", 1, qmark_value); bp[bp > bar_value ? -1 : 0] = '\0'; DEFINE_VARIABLE ("|", 1, bar_value); } #undef DEFINE_VARIABLE } /* Chop CMDS up into individual command lines if necessary. Also set the 'lines_flags' and 'any_recurse' members. */ void chop_commands (struct commands *cmds) { unsigned int nlines; unsigned short idx; char **lines; /* If we don't have any commands, or we already parsed them, never mind. */ if (!cmds || cmds->command_lines != 0) return; /* Chop CMDS->commands up into lines in CMDS->command_lines. */ if (one_shell) { size_t l = strlen (cmds->commands); nlines = 1; lines = xmalloc (nlines * sizeof (char *)); lines[0] = xstrdup (cmds->commands); /* Strip the trailing newline. */ if (l > 0 && lines[0][l-1] == '\n') lines[0][l-1] = '\0'; } else { const char *p; nlines = 5; lines = xmalloc (nlines * sizeof (char *)); idx = 0; p = cmds->commands; while (*p != '\0') { const char *end = p; find_end:; end = strchr (end, '\n'); if (end == 0) end = p + strlen (p); else if (end > p && end[-1] == '\\') { int backslash = 1; const char *b; for (b = end - 2; b >= p && *b == '\\'; --b) backslash = !backslash; if (backslash) { ++end; goto find_end; } } if (idx == nlines) { nlines += 2; lines = xrealloc (lines, nlines * sizeof (char *)); } lines[idx++] = xstrndup (p, (size_t) (end - p)); p = end; if (*p != '\0') ++p; } if (idx != nlines) { nlines = idx; lines = xrealloc (lines, nlines * sizeof (char *)); } } /* Finally, set the corresponding CMDS->lines_flags elements and the CMDS->any_recurse flag. */ if (nlines > USHRT_MAX) ON (fatal, &cmds->fileinfo, _("Recipe has too many lines (%ud)"), nlines); cmds->ncommand_lines = (unsigned short)nlines; cmds->command_lines = lines; cmds->any_recurse = 0; cmds->lines_flags = xmalloc (nlines); for (idx = 0; idx < nlines; ++idx) { unsigned char flags = 0; const char *p = lines[idx]; while (ISBLANK (*p) || *p == '-' || *p == '@' || *p == '+') switch (*(p++)) { case '+': flags |= COMMANDS_RECURSE; break; case '@': flags |= COMMANDS_SILENT; break; case '-': flags |= COMMANDS_NOERROR; break; } /* If no explicit '+' was given, look for MAKE variable references. */ if (!(flags & COMMANDS_RECURSE) && (strstr (p, "$(MAKE)") != 0 || strstr (p, "${MAKE}") != 0)) flags |= COMMANDS_RECURSE; cmds->lines_flags[idx] = flags; cmds->any_recurse |= flags & COMMANDS_RECURSE ? 1 : 0; } } /* Execute the commands to remake FILE. If they are currently executing, return or have already finished executing, just return. Otherwise, fork off a child process to run the first command line in the sequence. */ void execute_file_commands (struct file *file) { const char *p; /* Don't go through all the preparations if the commands are nothing but whitespace. */ for (p = file->cmds->commands; *p != '\0'; ++p) if (!ISSPACE (*p) && *p != '-' && *p != '@' && *p != '+') break; if (*p == '\0') { /* If there are no commands, assume everything worked. */ set_command_state (file, cs_running); file->update_status = us_success; notice_finished_file (file); return; } /* First set the automatic variables according to this file. */ initialize_file_variables (file, 0); set_file_variables (file); /* If this is a loaded dynamic object, unload it before remaking. Some systems don't support overwriting a loaded object. */ if (file->loaded) unload_file (file->name); /* Start the commands running. */ new_job (file); } /* This is set while we are inside fatal_error_signal, so things can avoid nonreentrant operations. */ int handling_fatal_signal = 0; /* Handle fatal signals. */ RETSIGTYPE fatal_error_signal (int sig) { #ifdef __MSDOS__ extern int dos_status, dos_command_running; if (dos_command_running) { /* That was the child who got the signal, not us. */ dos_status |= (sig << 8); return; } remove_intermediates (1); exit (EXIT_FAILURE); #else /* not __MSDOS__ */ #ifdef _AMIGA remove_intermediates (1); if (sig == SIGINT) fputs (_("*** Break.\n"), stderr); exit (10); #else /* not Amiga */ #ifdef WINDOWS32 extern HANDLE main_thread; /* Windows creates a sperate thread for handling Ctrl+C, so we need to suspend the main thread, or else we will have race conditions when both threads call reap_children. */ if (main_thread) { DWORD susp_count = SuspendThread (main_thread); if (susp_count != 0) fprintf (stderr, "SuspendThread: suspend count = %ld\n", susp_count); else if (susp_count == (DWORD)-1) { DWORD ierr = GetLastError (); fprintf (stderr, "SuspendThread: error %ld: %s\n", ierr, map_windows32_error_to_string (ierr)); } } #endif handling_fatal_signal = 1; /* Set the handling for this signal to the default. It is blocked now while we run this handler. */ signal (sig, SIG_DFL); /* A termination signal won't be sent to the entire process group, but it means we want to kill the children. */ if (sig == SIGTERM) { struct child *c; for (c = children; c != 0; c = c->next) if (!c->remote && c->pid > 0) (void) kill (c->pid, SIGTERM); } /* If we got a signal that means the user wanted to kill make, remove pending targets. */ if (sig == SIGTERM || sig == SIGINT #ifdef SIGHUP || sig == SIGHUP #endif #ifdef SIGQUIT || sig == SIGQUIT #endif ) { struct child *c; /* Remote children won't automatically get signals sent to the process group, so we must send them. */ for (c = children; c != 0; c = c->next) if (c->remote && c->pid > 0) (void) remote_kill (c->pid, sig); for (c = children; c != 0; c = c->next) delete_child_targets (c); /* Clean up the children. We don't just use the call below because we don't want to print the "Waiting for children" message. */ while (job_slots_used > 0) reap_children (1, 0); } else /* Wait for our children to die. */ while (job_slots_used > 0) reap_children (1, 1); /* Delete any non-precious intermediate files that were made. */ remove_intermediates (1); #ifdef SIGQUIT if (sig == SIGQUIT) /* We don't want to send ourselves SIGQUIT, because it will cause a core dump. Just exit instead. */ exit (MAKE_TROUBLE); #endif #ifdef WINDOWS32 if (main_thread) CloseHandle (main_thread); /* Cannot call W32_kill with a pid (it needs a handle). The exit status of 130 emulates what happens in Bash. */ exit (130); #else /* Signal the same code; this time it will really be fatal. The signal will be unblocked when we return and arrive then to kill us. */ if (kill (getpid (), sig) < 0) pfatal_with_name ("kill"); #endif /* not WINDOWS32 */ #endif /* not Amiga */ #endif /* not __MSDOS__ */ } /* Delete FILE unless it's precious or not actually a file (phony), and it has changed on disk since we last stat'd it. */ static void delete_target (struct file *file, const char *on_behalf_of) { struct stat st; int e; if (file->precious || file->phony) return; #ifndef NO_ARCHIVES if (ar_name (file->name)) { time_t file_date = (file->last_mtime == NONEXISTENT_MTIME ? (time_t) -1 : (time_t) FILE_TIMESTAMP_S (file->last_mtime)); if (ar_member_date (file->name) != file_date) { if (on_behalf_of) OSS (error, NILF, _("*** [%s] Archive member '%s' may be bogus; not deleted"), on_behalf_of, file->name); else OS (error, NILF, _("*** Archive member '%s' may be bogus; not deleted"), file->name); } return; } #endif EINTRLOOP (e, stat (file->name, &st)); if (e == 0 && S_ISREG (st.st_mode) && FILE_TIMESTAMP_STAT_MODTIME (file->name, st) != file->last_mtime) { if (on_behalf_of) OSS (error, NILF, _("*** [%s] Deleting file '%s'"), on_behalf_of, file->name); else OS (error, NILF, _("*** Deleting file '%s'"), file->name); if (unlink (file->name) < 0 && errno != ENOENT) /* It disappeared; so what. */ perror_with_name ("unlink: ", file->name); } } /* Delete all non-precious targets of CHILD unless they were already deleted. Set the flag in CHILD to say they've been deleted. */ void delete_child_targets (struct child *child) { struct dep *d; if (child->deleted || child->pid < 0) return; /* Delete the target file if it changed. */ delete_target (child->file, NULL); /* Also remove any non-precious targets listed in the 'also_make' member. */ for (d = child->file->also_make; d != 0; d = d->next) delete_target (d->file, child->file->name); child->deleted = 1; } /* Print out the commands in CMDS. */ void print_commands (const struct commands *cmds) { const char *s; fputs (_("# recipe to execute"), stdout); if (cmds->fileinfo.filenm == 0) puts (_(" (built-in):")); else printf (_(" (from '%s', line %lu):\n"), cmds->fileinfo.filenm, cmds->fileinfo.lineno); s = cmds->commands; while (*s != '\0') { const char *end; int bs; /* Print one full logical recipe line: find a non-escaped newline. */ for (end = s, bs = 0; *end != '\0'; ++end) { if (*end == '\n' && !bs) break; bs = *end == '\\' ? !bs : 0; } printf ("%c%.*s\n", cmd_prefix, (int) (end - s), s); s = end + (end[0] == '\n'); } } make-4.3/src/main.c0000644000175000017500000032301713611136373011107 00000000000000/* Argument parsing and main program of GNU Make. Copyright (C) 1988-2020 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 . */ #include "makeint.h" #include "os.h" #include "filedef.h" #include "dep.h" #include "variable.h" #include "job.h" #include "commands.h" #include "rule.h" #include "debug.h" #include "getopt.h" #include #ifdef _AMIGA # include # include #endif #ifdef WINDOWS32 # include # include #ifdef HAVE_STRINGS_H # include /* for strcasecmp */ #endif # include "pathstuff.h" # include "sub_proc.h" # include "w32err.h" #endif #ifdef __EMX__ # include # include #endif #ifdef HAVE_FCNTL_H # include #endif #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; value = getenv (name); if (value == NULL) return default_value; 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 #endif #ifndef HAVE_UNISTD_H int chdir (); #endif #ifndef STDC_HEADERS # ifndef sun /* Sun has an incorrect decl in a header. */ void exit (int) NORETURN; # endif double atof (); #endif static void clean_jobserver (int status); static void print_data_base (void); static void print_version (void); static void decode_switches (int argc, const char **argv, int env); static void decode_env_switches (const char *envar, size_t len); static struct variable *define_makeflags (int all, int makefile); static char *quote_for_env (char *out, const char *in); static void initialize_global_hash_tables (void); /* The structure that describes an accepted command switch. */ struct command_switch { int c; /* The switch character. */ enum /* Type of the value. */ { flag, /* Turn int flag on. */ flag_off, /* Turn int flag off. */ string, /* One string per invocation. */ strlist, /* One string per switch. */ filename, /* A string containing a file name. */ positive_int, /* A positive integer. */ floating, /* A floating-point number (double). */ ignore /* Ignored. */ } type; void *value_ptr; /* Pointer to the value-holding variable. */ unsigned int env:1; /* Can come from MAKEFLAGS. */ unsigned int toenv:1; /* Should be put in MAKEFLAGS. */ unsigned int no_makefile:1; /* Don't propagate when remaking makefiles. */ const void *noarg_value; /* Pointer to value used if no arg given. */ const void *default_value; /* Pointer to default value. */ const char *long_name; /* Long option name. */ }; /* True if C is a switch value that corresponds to a short option. */ #define short_option(c) ((c) <= CHAR_MAX) /* The structure used to hold the list of strings given in command switches of a type that takes strlist arguments. */ struct stringlist { const char **list; /* Nil-terminated list of strings. */ unsigned int idx; /* Index into above. */ unsigned int max; /* Number of pointers allocated. */ }; /* The recognized command switches. */ /* Nonzero means do extra verification (that may slow things down). */ int verify_flag; /* Nonzero means do not print commands to be executed (-s). */ static int silent_flag; static const int default_silent_flag = 0; /* Nonzero means either -s was given, or .SILENT-with-no-deps was seen. */ int run_silent = 0; /* Nonzero means just touch the files that would appear to need remaking (-t) */ int touch_flag; /* Nonzero means just print what commands would need to be executed, don't actually execute them (-n). */ int just_print_flag; /* Print debugging info (--debug). */ static struct stringlist *db_flags = 0; static int debug_flag = 0; int db_level = 0; /* Synchronize output (--output-sync). */ char *output_sync_option = 0; /* Environment variables override makefile definitions. */ int env_overrides = 0; /* Nonzero means ignore status codes returned by commands executed to remake files. Just treat them all as successful (-i). */ int ignore_errors_flag = 0; /* Nonzero means don't remake anything, just print the data base that results from reading the makefile (-p). */ int print_data_base_flag = 0; /* Nonzero means don't remake anything; just return a nonzero status if the specified targets are not up to date (-q). */ int question_flag = 0; /* Nonzero means do not use any of the builtin rules (-r) / variables (-R). */ int no_builtin_rules_flag = 0; int no_builtin_variables_flag = 0; /* Nonzero means keep going even if remaking some file fails (-k). */ int keep_going_flag; static const int default_keep_going_flag = 0; /* Nonzero means check symlink mtimes. */ int check_symlink_flag = 0; /* Nonzero means print directory before starting and when done (-w). */ int print_directory_flag = 0; /* Nonzero means ignore print_directory_flag and never print the directory. This is necessary because print_directory_flag is set implicitly. */ int inhibit_print_directory_flag = 0; /* Nonzero means print version information. */ int print_version_flag = 0; /* List of makefiles given with -f switches. */ static struct stringlist *makefiles = 0; /* Size of the stack when we started. */ #ifdef SET_STACK_SIZE struct rlimit stack_limit; #endif /* Number of job slots for parallelism. */ unsigned int job_slots; #define INVALID_JOB_SLOTS (-1) static unsigned int master_job_slots = 0; static int arg_job_slots = INVALID_JOB_SLOTS; static const int default_job_slots = INVALID_JOB_SLOTS; /* Value of job_slots that means no limit. */ static const int inf_jobs = 0; /* Authorization for the jobserver. */ static char *jobserver_auth = NULL; /* Handle for the mutex used on Windows to synchronize output of our children under -O. */ char *sync_mutex = NULL; /* Maximum load average at which multiple jobs will be run. Negative values mean unlimited, while zero means limit to zero load (which could be useful to start infinite jobs remotely but one at a time locally). */ double max_load_average = -1.0; double default_load_average = -1.0; /* List of directories given with -C switches. */ static struct stringlist *directories = 0; /* List of include directories given with -I switches. */ static struct stringlist *include_directories = 0; /* List of files given with -o switches. */ static struct stringlist *old_files = 0; /* List of files given with -W switches. */ static struct stringlist *new_files = 0; /* List of strings to be eval'd. */ static struct stringlist *eval_strings = 0; /* If nonzero, we should just print usage and exit. */ static int print_usage_flag = 0; /* If nonzero, we should print a warning message for each reference to an undefined variable. */ int warn_undefined_variables_flag; /* If nonzero, always build all targets, regardless of whether they appear out of date or not. */ static int always_make_set = 0; int always_make_flag = 0; /* If nonzero, we're in the "try to rebuild makefiles" phase. */ int rebuilding_makefiles = 0; /* Remember the original value of the SHELL variable, from the environment. */ struct variable shell_var; /* This character introduces a command: it's the first char on the line. */ char cmd_prefix = '\t'; /* The usage output. We write it this way to make life easier for the translators, especially those trying to translate to right-to-left languages like Hebrew. */ static const char *const usage[] = { N_("Options:\n"), N_("\ -b, -m Ignored for compatibility.\n"), N_("\ -B, --always-make Unconditionally make all targets.\n"), N_("\ -C DIRECTORY, --directory=DIRECTORY\n\ Change to DIRECTORY before doing anything.\n"), N_("\ -d Print lots of debugging information.\n"), N_("\ --debug[=FLAGS] Print various types of debugging information.\n"), N_("\ -e, --environment-overrides\n\ Environment variables override makefiles.\n"), N_("\ -E STRING, --eval=STRING Evaluate STRING as a makefile statement.\n"), N_("\ -f FILE, --file=FILE, --makefile=FILE\n\ Read FILE as a makefile.\n"), N_("\ -h, --help Print this message and exit.\n"), N_("\ -i, --ignore-errors Ignore errors from recipes.\n"), N_("\ -I DIRECTORY, --include-dir=DIRECTORY\n\ Search DIRECTORY for included makefiles.\n"), N_("\ -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no arg.\n"), N_("\ -k, --keep-going Keep going when some targets can't be made.\n"), N_("\ -l [N], --load-average[=N], --max-load[=N]\n\ Don't start multiple jobs unless load is below N.\n"), N_("\ -L, --check-symlink-times Use the latest mtime between symlinks and target.\n"), N_("\ -n, --just-print, --dry-run, --recon\n\ Don't actually run any recipe; just print them.\n"), N_("\ -o FILE, --old-file=FILE, --assume-old=FILE\n\ Consider FILE to be very old and don't remake it.\n"), N_("\ -O[TYPE], --output-sync[=TYPE]\n\ Synchronize output of parallel jobs by TYPE.\n"), N_("\ -p, --print-data-base Print make's internal database.\n"), N_("\ -q, --question Run no recipe; exit status says if up to date.\n"), N_("\ -r, --no-builtin-rules Disable the built-in implicit rules.\n"), N_("\ -R, --no-builtin-variables Disable the built-in variable settings.\n"), N_("\ -s, --silent, --quiet Don't echo recipes.\n"), N_("\ --no-silent Echo recipes (disable --silent mode).\n"), N_("\ -S, --no-keep-going, --stop\n\ Turns off -k.\n"), N_("\ -t, --touch Touch targets instead of remaking them.\n"), N_("\ --trace Print tracing information.\n"), N_("\ -v, --version Print the version number of make and exit.\n"), N_("\ -w, --print-directory Print the current directory.\n"), N_("\ --no-print-directory Turn off -w, even if it was turned on implicitly.\n"), N_("\ -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n\ Consider FILE to be infinitely new.\n"), N_("\ --warn-undefined-variables Warn when an undefined variable is referenced.\n"), NULL }; /* The table of command switches. Order matters here: this is the order MAKEFLAGS will be constructed. So be sure all simple flags (single char, no argument) come first. */ static const struct command_switch switches[] = { { 'b', ignore, 0, 0, 0, 0, 0, 0, 0 }, { 'B', flag, &always_make_set, 1, 1, 0, 0, 0, "always-make" }, { 'd', flag, &debug_flag, 1, 1, 0, 0, 0, 0 }, { 'e', flag, &env_overrides, 1, 1, 0, 0, 0, "environment-overrides", }, { 'E', strlist, &eval_strings, 1, 0, 0, 0, 0, "eval" }, { 'h', flag, &print_usage_flag, 0, 0, 0, 0, 0, "help" }, { 'i', flag, &ignore_errors_flag, 1, 1, 0, 0, 0, "ignore-errors" }, { 'k', flag, &keep_going_flag, 1, 1, 0, 0, &default_keep_going_flag, "keep-going" }, { 'L', flag, &check_symlink_flag, 1, 1, 0, 0, 0, "check-symlink-times" }, { 'm', ignore, 0, 0, 0, 0, 0, 0, 0 }, { 'n', flag, &just_print_flag, 1, 1, 1, 0, 0, "just-print" }, { 'p', flag, &print_data_base_flag, 1, 1, 0, 0, 0, "print-data-base" }, { 'q', flag, &question_flag, 1, 1, 1, 0, 0, "question" }, { 'r', flag, &no_builtin_rules_flag, 1, 1, 0, 0, 0, "no-builtin-rules" }, { 'R', flag, &no_builtin_variables_flag, 1, 1, 0, 0, 0, "no-builtin-variables" }, { 's', flag, &silent_flag, 1, 1, 0, 0, &default_silent_flag, "silent" }, { 'S', flag_off, &keep_going_flag, 1, 1, 0, 0, &default_keep_going_flag, "no-keep-going" }, { 't', flag, &touch_flag, 1, 1, 1, 0, 0, "touch" }, { 'v', flag, &print_version_flag, 1, 1, 0, 0, 0, "version" }, { 'w', flag, &print_directory_flag, 1, 1, 0, 0, 0, "print-directory" }, /* These options take arguments. */ { 'C', filename, &directories, 0, 0, 0, 0, 0, "directory" }, { 'f', filename, &makefiles, 0, 0, 0, 0, 0, "file" }, { 'I', filename, &include_directories, 1, 1, 0, 0, 0, "include-dir" }, { 'j', positive_int, &arg_job_slots, 1, 1, 0, &inf_jobs, &default_job_slots, "jobs" }, { 'l', floating, &max_load_average, 1, 1, 0, &default_load_average, &default_load_average, "load-average" }, { 'o', filename, &old_files, 0, 0, 0, 0, 0, "old-file" }, { 'O', string, &output_sync_option, 1, 1, 0, "target", 0, "output-sync" }, { 'W', filename, &new_files, 0, 0, 0, 0, 0, "what-if" }, /* These are long-style options. */ { CHAR_MAX+1, strlist, &db_flags, 1, 1, 0, "basic", 0, "debug" }, { 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" }, { CHAR_MAX+5, flag, &warn_undefined_variables_flag, 1, 1, 0, 0, 0, "warn-undefined-variables" }, { CHAR_MAX+7, string, &sync_mutex, 1, 1, 0, 0, 0, "sync-mutex" }, { CHAR_MAX+8, flag_off, &silent_flag, 1, 1, 0, 0, &default_silent_flag, "no-silent" }, { CHAR_MAX+9, string, &jobserver_auth, 1, 0, 0, 0, 0, "jobserver-fds" }, { 0, 0, 0, 0, 0, 0, 0, 0, 0 } }; /* Secondary long names for options. */ static struct option long_option_aliases[] = { { "quiet", no_argument, 0, 's' }, { "stop", no_argument, 0, 'S' }, { "new-file", required_argument, 0, 'W' }, { "assume-new", required_argument, 0, 'W' }, { "assume-old", required_argument, 0, 'o' }, { "max-load", optional_argument, 0, 'l' }, { "dry-run", no_argument, 0, 'n' }, { "recon", no_argument, 0, 'n' }, { "makefile", required_argument, 0, 'f' }, }; /* List of goal targets. */ static struct goaldep *goals, *lastgoal; /* List of variables which were defined on the command line (or, equivalently, in MAKEFLAGS). */ struct command_variable { struct command_variable *next; struct variable *variable; }; static struct command_variable *command_variables; /* The name we were invoked with. */ const char *program; /* Our current directory before processing any -C options. */ char *directory_before_chdir; /* Our current directory after processing all -C options. */ char *starting_directory; /* Value of the MAKELEVEL variable at startup (or 0). */ unsigned int makelevel; /* Pointer to the value of the .DEFAULT_GOAL special variable. The value will be the name of the goal to remake if the command line does not override it. It can be set by the makefile, or else it's the first target defined in the makefile whose name does not start with '.'. */ struct variable * default_goal_var; /* Pointer to structure for the file .DEFAULT whose commands are used for any file that has none of its own. This is zero if the makefiles do not define .DEFAULT. */ struct file *default_file; /* Nonzero if we have seen the magic '.POSIX' target. This turns on pedantic compliance with POSIX.2. */ int posix_pedantic; /* Nonzero if we have seen the '.SECONDEXPANSION' target. This turns on secondary expansion of prerequisites. */ int second_expansion; /* Nonzero if we have seen the '.ONESHELL' target. This causes the entire recipe to be handed to SHELL as a single string, potentially containing newlines. */ int one_shell; /* One of OUTPUT_SYNC_* if the "--output-sync" option was given. This attempts to synchronize the output of parallel jobs such that the results of each job stay together. */ int output_sync = OUTPUT_SYNC_NONE; /* Nonzero if the "--trace" option was given. */ int trace_flag = 0; /* Nonzero if we have seen the '.NOTPARALLEL' target. This turns off parallel builds for this invocation of make. */ int not_parallel; /* Nonzero if some rule detected clock skew; we keep track so (a) we only print one warning about it during the run, and (b) we can print a final warning at the end of the run. */ int clock_skew_detected; /* Map of possible stop characters for searching strings. */ #ifndef UCHAR_MAX # define UCHAR_MAX 255 #endif unsigned short stopchar_map[UCHAR_MAX + 1] = {0}; /* If output-sync is enabled we'll collect all the output generated due to options, while reading makefiles, etc. */ struct output make_sync; /* Mask of signals that are being caught with fatal_error_signal. */ #if defined(POSIX) sigset_t fatal_signal_set; #elif defined(HAVE_SIGSETMASK) int fatal_signal_mask; #endif #if !HAVE_DECL_BSD_SIGNAL && !defined bsd_signal # if !defined HAVE_SIGACTION # define bsd_signal signal # else typedef RETSIGTYPE (*bsd_signal_ret_t) (int); static bsd_signal_ret_t bsd_signal (int sig, bsd_signal_ret_t func) { struct sigaction act, oact; act.sa_handler = func; act.sa_flags = SA_RESTART; sigemptyset (&act.sa_mask); sigaddset (&act.sa_mask, sig); if (sigaction (sig, &act, &oact) != 0) return SIG_ERR; return oact.sa_handler; } # endif #endif static void initialize_global_hash_tables (void) { init_hash_global_variable_set (); strcache_init (); init_hash_files (); hash_init_directories (); hash_init_function_table (); } /* This character map locate stop chars when parsing GNU makefiles. Each element is true if we should stop parsing on that character. */ static void initialize_stopchar_map (void) { int i; stopchar_map[(int)'\0'] = MAP_NUL; stopchar_map[(int)'#'] = MAP_COMMENT; stopchar_map[(int)';'] = MAP_SEMI; stopchar_map[(int)'='] = MAP_EQUALS; stopchar_map[(int)':'] = MAP_COLON; stopchar_map[(int)'|'] = MAP_PIPE; stopchar_map[(int)'.'] = MAP_DOT | MAP_USERFUNC; stopchar_map[(int)','] = MAP_COMMA; stopchar_map[(int)'('] = MAP_VARSEP; stopchar_map[(int)'{'] = MAP_VARSEP; stopchar_map[(int)'}'] = MAP_VARSEP; stopchar_map[(int)')'] = MAP_VARSEP; stopchar_map[(int)'$'] = MAP_VARIABLE; 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; #elif defined(HAVE_DOS_PATHS) stopchar_map[(int)'\\'] |= MAP_DIRSEP; #endif for (i = 1; i <= UCHAR_MAX; ++i) { 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; } } static const char * expand_command_line_file (const char *name) { const char *cp; char *expanded = 0; if (name[0] == '\0') O (fatal, NILF, _("empty string invalid as file name")); if (name[0] == '~') { expanded = tilde_expand (name); if (expanded && expanded[0] != '\0') name = expanded; } /* This is also done in parse_file_seq, so this is redundant for names read from makefiles. It is here for names passed on the command line. */ while (name[0] == '.' && name[1] == '/') { name += 2; while (name[0] == '/') /* Skip following slashes: ".//foo" is "foo", not "/foo". */ ++name; } if (name[0] == '\0') { /* Nothing else but one or more "./", maybe plus slashes! */ name = "./"; } cp = strcache_add (name); free (expanded); return cp; } /* Toggle -d on receipt of SIGUSR1. */ #ifdef SIGUSR1 static RETSIGTYPE debug_signal_handler (int sig UNUSED) { db_level = db_level ? DB_NONE : DB_BASIC; } #endif static void decode_debug_flags (void) { const char **pp; if (debug_flag) db_level = DB_ALL; if (db_flags) for (pp=db_flags->list; *pp; ++pp) { const char *p = *pp; while (1) { switch (tolower (p[0])) { case 'a': db_level |= DB_ALL; break; case 'b': db_level |= DB_BASIC; break; case 'i': db_level |= DB_BASIC | DB_IMPLICIT; break; case 'j': db_level |= DB_JOBS; break; case 'm': db_level |= DB_BASIC | DB_MAKEFILES; break; case 'n': db_level = 0; break; case 'v': db_level |= DB_BASIC | DB_VERBOSE; break; default: OS (fatal, NILF, _("unknown debug level specification '%s'"), p); } while (*(++p) != '\0') if (*p == ',' || *p == ' ') { ++p; break; } if (*p == '\0') break; } } if (db_level) verify_flag = 1; if (! db_level) debug_flag = 0; } 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")) output_sync = OUTPUT_SYNC_NONE; else if (streq (output_sync_option, "line")) output_sync = OUTPUT_SYNC_LINE; else if (streq (output_sync_option, "target")) output_sync = OUTPUT_SYNC_TARGET; else if (streq (output_sync_option, "recurse")) output_sync = OUTPUT_SYNC_RECURSE; else OS (fatal, NILF, _("unknown output-sync type '%s'"), output_sync_option); } if (sync_mutex) RECORD_SYNC_MUTEX (sync_mutex); #endif } #ifdef WINDOWS32 #ifndef NO_OUTPUT_SYNC /* This is called from start_job_command when it detects that output_sync option is in effect. The handle to the synchronization mutex is passed, as a string, to sub-makes via the --sync-mutex command-line argument. */ void prepare_mutex_handle_string (sync_handle_t handle) { if (!sync_mutex) { /* Prepare the mutex handle string for our children. */ /* 2 hex digits per byte + 2 characters for "0x" + null. */ sync_mutex = xmalloc ((2 * sizeof (sync_handle_t)) + 2 + 1); sprintf (sync_mutex, "0x%Ix", handle); define_makeflags (1, 0); } } #endif /* NO_OUTPUT_SYNC */ /* * HANDLE runtime exceptions by avoiding a requestor on the GUI. Capture * exception and print it to stderr instead. * * If ! DB_VERBOSE, just print a simple message and exit. * If DB_VERBOSE, print a more verbose message. * If compiled for DEBUG, let exception pass through to GUI so that * debuggers can attach. */ LONG WINAPI handle_runtime_exceptions (struct _EXCEPTION_POINTERS *exinfo) { PEXCEPTION_RECORD exrec = exinfo->ExceptionRecord; LPSTR cmdline = GetCommandLine (); LPSTR prg = strtok (cmdline, " "); CHAR errmsg[1024]; #ifdef USE_EVENT_LOG HANDLE hEventSource; LPTSTR lpszStrings[1]; #endif if (! ISDB (DB_VERBOSE)) { sprintf (errmsg, _("%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n"), prg, exrec->ExceptionCode, exrec->ExceptionAddress); fprintf (stderr, errmsg); exit (255); } sprintf (errmsg, _("\nUnhandled exception filter called from program %s\nExceptionCode = %lx\nExceptionFlags = %lx\nExceptionAddress = 0x%p\n"), prg, exrec->ExceptionCode, exrec->ExceptionFlags, exrec->ExceptionAddress); if (exrec->ExceptionCode == EXCEPTION_ACCESS_VIOLATION && exrec->NumberParameters >= 2) sprintf (&errmsg[strlen(errmsg)], (exrec->ExceptionInformation[0] ? _("Access violation: write operation at address 0x%p\n") : _("Access violation: read operation at address 0x%p\n")), (PVOID)exrec->ExceptionInformation[1]); /* turn this on if we want to put stuff in the event log too */ #ifdef USE_EVENT_LOG hEventSource = RegisterEventSource (NULL, "GNU Make"); lpszStrings[0] = errmsg; if (hEventSource != NULL) { ReportEvent (hEventSource, /* handle of event source */ EVENTLOG_ERROR_TYPE, /* event type */ 0, /* event category */ 0, /* event ID */ NULL, /* current user's SID */ 1, /* strings in lpszStrings */ 0, /* no bytes of raw data */ lpszStrings, /* array of error strings */ NULL); /* no raw data */ (VOID) DeregisterEventSource (hEventSource); } #endif /* Write the error to stderr too */ fprintf (stderr, errmsg); #ifdef DEBUG return EXCEPTION_CONTINUE_SEARCH; #else exit (255); return (255); /* not reached */ #endif } /* * On WIN32 systems we don't have the luxury of a /bin directory that * is mapped globally to every drive mounted to the system. Since make could * be invoked from any drive, and we don't want to propagate /bin/sh * to every single drive. Allow ourselves a chance to search for * a value for default shell here (if the default path does not exist). */ int find_and_set_default_shell (const char *token) { int sh_found = 0; char *atoken = 0; const char *search_token; const char *tokend; PATH_VAR(sh_path); extern const char *default_shell; if (!token) search_token = default_shell; else search_token = atoken = xstrdup (token); /* If the user explicitly requests the DOS cmd shell, obey that request. However, make sure that's what they really want by requiring the value of SHELL either equal, or have a final path element of, "cmd" or "cmd.exe" case-insensitive. */ tokend = search_token + strlen (search_token) - 3; if (((tokend == search_token || (tokend > search_token && (tokend[-1] == '/' || tokend[-1] == '\\'))) && !strcasecmp (tokend, "cmd")) || ((tokend - 4 == search_token || (tokend - 4 > search_token && (tokend[-5] == '/' || tokend[-5] == '\\'))) && !strcasecmp (tokend - 4, "cmd.exe"))) { batch_mode_shell = 1; unixy_shell = 0; sprintf (sh_path, "%s", search_token); default_shell = xstrdup (w32ify (sh_path, 0)); DB (DB_VERBOSE, (_("find_and_set_shell() setting default_shell = %s\n"), default_shell)); sh_found = 1; } else if (!no_default_sh_exe && (token == NULL || !strcmp (search_token, default_shell))) { /* no new information, path already set or known */ sh_found = 1; } else if (_access (search_token, 0) == 0) { /* search token path was found */ sprintf (sh_path, "%s", search_token); default_shell = xstrdup (w32ify (sh_path, 0)); DB (DB_VERBOSE, (_("find_and_set_shell() setting default_shell = %s\n"), default_shell)); sh_found = 1; } else { char *p; struct variable *v = lookup_variable (STRING_SIZE_TUPLE ("PATH")); /* Search Path for shell */ if (v && v->value) { char *ep; p = v->value; ep = strchr (p, PATH_SEPARATOR_CHAR); while (ep && *ep) { *ep = '\0'; sprintf (sh_path, "%s/%s", p, search_token); if (_access (sh_path, 0) == 0) { default_shell = xstrdup (w32ify (sh_path, 0)); sh_found = 1; *ep = PATH_SEPARATOR_CHAR; /* terminate loop */ p += strlen (p); } else { *ep = PATH_SEPARATOR_CHAR; p = ++ep; } ep = strchr (p, PATH_SEPARATOR_CHAR); } /* be sure to check last element of Path */ if (p && *p) { sprintf (sh_path, "%s/%s", p, search_token); if (_access (sh_path, 0) == 0) { default_shell = xstrdup (w32ify (sh_path, 0)); sh_found = 1; } } if (sh_found) DB (DB_VERBOSE, (_("find_and_set_shell() path search set default_shell = %s\n"), default_shell)); } } /* naive test */ if (!unixy_shell && sh_found && (strstr (default_shell, "sh") || strstr (default_shell, "SH"))) { unixy_shell = 1; batch_mode_shell = 0; } #ifdef BATCH_MODE_ONLY_SHELL batch_mode_shell = 1; #endif free (atoken); return (sh_found); } #endif /* WINDOWS32 */ #ifdef __MSDOS__ static void msdos_return_to_initial_directory (void) { if (directory_before_chdir) chdir (directory_before_chdir); } #endif /* __MSDOS__ */ static void reset_jobserver (void) { jobserver_clear (); free (jobserver_auth); jobserver_auth = NULL; } #ifdef _AMIGA int main (int argc, char **argv) #else int main (int argc, char **argv, char **envp) #endif { static char *stdin_nm = 0; int makefile_status = MAKE_SUCCESS; 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; SetUnhandledExceptionFilter (handle_runtime_exceptions); /* start off assuming we have no shell */ unixy_shell = 0; no_default_sh_exe = 1; #endif /* Useful for attaching debuggers, etc. */ SPIN ("main-entry"); output_init (&make_sync); initialize_stopchar_map(); #ifdef SET_STACK_SIZE /* Get rid of any avoidable limit on stack size. */ { struct rlimit rlim; /* Set the stack limit huge so that alloca does not fail. */ if (getrlimit (RLIMIT_STACK, &rlim) == 0 && rlim.rlim_cur > 0 && rlim.rlim_cur < rlim.rlim_max) { stack_limit = rlim; rlim.rlim_cur = rlim.rlim_max; setrlimit (RLIMIT_STACK, &rlim); } else stack_limit.rlim_cur = 0; } #endif /* Needed for OS/2 */ initialize_main (&argc, &argv); #ifdef MAKE_MAINTAINER_MODE /* In maintainer mode we always enable verification. */ verify_flag = 1; #endif #if defined (__MSDOS__) && !defined (_POSIX_SOURCE) /* Request the most powerful version of 'system', to make up for the dumb default shell. */ __system_flags = (__system_redirect | __system_use_shell | __system_allow_multiple_cmds | __system_allow_long_cmds | __system_handle_null_commands | __system_emulate_chdir); #endif /* Set up gettext/internationalization support. */ setlocale (LC_ALL, ""); /* The cast to void shuts up compiler warnings on systems that disable NLS. */ (void)bindtextdomain (PACKAGE, LOCALEDIR); (void)textdomain (PACKAGE); #ifdef POSIX sigemptyset (&fatal_signal_set); #define ADD_SIG(sig) sigaddset (&fatal_signal_set, sig) #else #ifdef HAVE_SIGSETMASK fatal_signal_mask = 0; #define ADD_SIG(sig) fatal_signal_mask |= sigmask (sig) #else #define ADD_SIG(sig) (void)sig #endif #endif #define FATAL_SIG(sig) \ if (bsd_signal (sig, fatal_error_signal) == SIG_IGN) \ bsd_signal (sig, SIG_IGN); \ else \ ADD_SIG (sig); #ifdef SIGHUP FATAL_SIG (SIGHUP); #endif #ifdef SIGQUIT FATAL_SIG (SIGQUIT); #endif FATAL_SIG (SIGINT); FATAL_SIG (SIGTERM); #ifdef __MSDOS__ /* Windows 9X delivers FP exceptions in child programs to their parent! We don't want Make to die when a child divides by zero, so we work around that lossage by catching SIGFPE. */ FATAL_SIG (SIGFPE); #endif #ifdef SIGDANGER FATAL_SIG (SIGDANGER); #endif #ifdef SIGXCPU FATAL_SIG (SIGXCPU); #endif #ifdef SIGXFSZ FATAL_SIG (SIGXFSZ); #endif #undef FATAL_SIG /* Do not ignore the child-death signal. This must be done before any children could possibly be created; otherwise, the wait functions won't work on systems with the SVR4 ECHILD brain damage, if our invoker is ignoring this signal. */ #ifdef HAVE_WAIT_NOHANG # if defined SIGCHLD (void) bsd_signal (SIGCHLD, SIG_DFL); # endif # if defined SIGCLD && SIGCLD != SIGCHLD (void) bsd_signal (SIGCLD, SIG_DFL); # endif #endif output_init (NULL); /* Figure out where this program lives. */ if (argv[0] == 0) argv[0] = (char *)""; if (argv[0][0] == '\0') program = "make"; else { #if defined(HAVE_DOS_PATHS) const char* start = argv[0]; /* Skip an initial drive specifier if present. */ if (isalpha ((unsigned char)start[0]) && start[1] == ':') start += 2; if (start[0] == '\0') program = "make"; else { program = start + strlen (start); while (program > start && ! STOP_SET (program[-1], MAP_DIRSEP)) --program; /* Remove the .exe extension if present. */ { size_t len = strlen (program); if (len > 4 && streq (&program[len - 4], ".exe")) program = xstrndup (program, len - 4); } } #elif defined(VMS) 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 program = strrchr (argv[0], '/'); if (program == 0) program = argv[0]; else ++program; #endif } /* Set up to access user data (files). */ user_access (); initialize_global_hash_tables (); /* Figure out where we are. */ #ifdef WINDOWS32 if (getcwd_fs (current_directory, GET_PATH_MAX) == 0) #else if (getcwd (current_directory, GET_PATH_MAX) == 0) #endif { #ifdef HAVE_GETCWD perror_with_name ("getcwd", ""); #else OS (error, NILF, "getwd: %s", current_directory); #endif current_directory[0] = '\0'; directory_before_chdir = 0; } else directory_before_chdir = xstrdup (current_directory); #ifdef __MSDOS__ /* Make sure we will return to the initial directory, come what may. */ atexit (msdos_return_to_initial_directory); #endif /* Initialize the special variables. */ define_variable_cname (".VARIABLES", "", o_default, 0)->special = 1; /* 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 some compilers (MSVC) don't like conditionals in macros. */ { const char *features = "target-specific order-only second-expansion" " else-if shortest-stem undefine oneshell nocomment" " grouped-target extra-prereqs" #ifndef NO_ARCHIVES " archives" #endif #ifdef MAKE_JOBSERVER " jobserver" #endif #ifndef NO_OUTPUT_SYNC " output-sync" #endif #ifdef MAKE_SYMLINKS " check-symlink" #endif #ifdef HAVE_GUILE " guile" #endif #ifdef MAKE_LOAD " load" #endif #ifdef MAKE_MAINTAINER_MODE " maintainer" #endif ; define_variable_cname (".FEATURES", features, o_default, 0); } /* Configure GNU Guile support */ guile_gmake_setup (NILF); /* Read in variables from the environment. It is important that this be done before $(MAKE) is figured out so its definitions will not be from the environment. */ #ifndef _AMIGA { unsigned int i; for (i = 0; envp[i] != 0; ++i) { struct variable *v; const char *ep = envp[i]; /* By default, export all variables culled from the environment. */ enum variable_export export = v_export; size_t len; while (! STOP_SET (*ep, MAP_EQUALS)) ++ep; /* If there's no equals sign it's a malformed environment. Ignore. */ if (*ep == '\0') continue; #ifdef WINDOWS32 if (!unix_path && strneq (envp[i], "PATH=", 5)) unix_path = ep+1; else if (!strnicmp (envp[i], "Path=", 5)) { if (!windows32_path) windows32_path = ep+1; /* PATH gets defined after the loop exits. */ continue; } #endif /* Length of the variable name, and skip the '='. */ len = ep++ - envp[i]; /* If this is MAKE_RESTARTS, check to see if the "already printed the enter statement" flag is set. */ if (len == 13 && strneq (envp[i], "MAKE_RESTARTS", 13)) { if (*ep == '-') { OUTPUT_TRACED (); ++ep; } restarts = (unsigned int) atoi (ep); export = v_noexport; } v = define_variable (envp[i], len, ep, o_env, 1); /* POSIX says the value of SHELL set in the makefile won't change the value of SHELL given to subprocesses. */ if (streq (v->name, "SHELL")) { #ifndef __MSDOS__ export = v_noexport; #endif shell_var.name = xstrdup ("SHELL"); shell_var.length = 5; shell_var.value = xstrdup (ep); } v->export = export; } } #ifdef WINDOWS32 /* If we didn't find a correctly spelled PATH we define PATH as * either the first misspelled value or an empty string */ if (!unix_path) define_variable_cname ("PATH", windows32_path ? windows32_path : "", o_env, 1)->export = v_export; #endif #else /* For Amiga, read the ENV: device, ignoring all dirs */ { BPTR env, file, old; char buffer[1024]; int len; __aligned struct FileInfoBlock fib; env = Lock ("ENV:", ACCESS_READ); if (env) { old = CurrentDir (DupLock (env)); Examine (env, &fib); while (ExNext (env, &fib)) { if (fib.fib_DirEntryType < 0) /* File */ { /* Define an empty variable. It will be filled in variable_lookup(). Makes startup quite a bit faster. */ define_variable (fib.fib_FileName, strlen (fib.fib_FileName), "", o_env, 1)->export = v_export; } } UnLock (env); UnLock (CurrentDir (old)); } } #endif /* Decode the switches. */ decode_env_switches (STRING_SIZE_TUPLE ("GNUMAKEFLAGS")); /* Clear GNUMAKEFLAGS to avoid duplication. */ define_variable_cname ("GNUMAKEFLAGS", "", o_env, 0); 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. */ syncing = make_sync.syncout = (output_sync == OUTPUT_SYNC_LINE || output_sync == OUTPUT_SYNC_TARGET); OUTPUT_SET (&make_sync); /* Parse the command line options. Remember the job slots set this way. */ { int env_slots = arg_job_slots; arg_job_slots = INVALID_JOB_SLOTS; decode_switches (argc, (const char **)argv, 0); argv_slots = arg_job_slots; 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"))) { 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"))) { 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. */ syncing = (output_sync == OUTPUT_SYNC_LINE || output_sync == OUTPUT_SYNC_TARGET); if (make_sync.syncout && ! syncing) output_close (&make_sync); make_sync.syncout = syncing; OUTPUT_SET (&make_sync); /* Figure out the level of recursion. */ { struct variable *v = lookup_variable (STRING_SIZE_TUPLE (MAKELEVEL_NAME)); if (v && v->value[0] != '\0' && v->value[0] != '-') makelevel = (unsigned int) atoi (v->value); else makelevel = 0; } /* Set always_make_flag if -B was given and we've not restarted already. */ always_make_flag = always_make_set && (restarts == 0); /* Print version information, and exit. */ if (print_version_flag) { print_version (); die (MAKE_SUCCESS); } if (ISDB (DB_BASIC)) print_version (); #ifndef VMS /* Set the "MAKE_COMMAND" variable to the name we were invoked with. (If it is a relative pathname with a slash, prepend our directory name so the result will run the same program regardless of the current dir. If it is a name with no slash, we can only hope that PATH did not find it in the current directory.) */ #ifdef WINDOWS32 /* * Convert from backslashes to forward slashes for * programs like sh which don't like them. Shouldn't * matter if the path is one way or the other for * CreateProcess(). */ if (strpbrk (argv[0], "/:\\") || strstr (argv[0], "..") || strneq (argv[0], "//", 2)) argv[0] = xstrdup (w32ify (argv[0], 1)); #else /* WINDOWS32 */ #if defined (__MSDOS__) || defined (__EMX__) if (strchr (argv[0], '\\')) { char *p; argv[0] = xstrdup (argv[0]); for (p = argv[0]; *p; p++) if (*p == '\\') *p = '/'; } /* If argv[0] is not in absolute form, prepend the current directory. This can happen when Make is invoked by another DJGPP program that uses a non-absolute name. */ if (current_directory[0] != '\0' && argv[0] != 0 && (argv[0][0] != '/' && (argv[0][0] == '\0' || argv[0][1] != ':')) # ifdef __EMX__ /* do not prepend cwd if argv[0] contains no '/', e.g. "make" */ && (strchr (argv[0], '/') != 0 || strchr (argv[0], '\\') != 0) # endif ) argv[0] = xstrdup (concat (3, current_directory, "/", argv[0])); #else /* !__MSDOS__ */ if (current_directory[0] != '\0' && argv[0] != 0 && argv[0][0] != '/' && strchr (argv[0], '/') != 0 #ifdef HAVE_DOS_PATHS && (argv[0][0] != '\\' && (!argv[0][0] || argv[0][1] != ':')) && strchr (argv[0], '\\') != 0 #endif ) argv[0] = xstrdup (concat (3, current_directory, "/", argv[0])); #endif /* !__MSDOS__ */ #endif /* WINDOWS32 */ #endif /* We may move, but until we do, here we are. */ starting_directory = current_directory; /* Validate the arg_job_slots configuration before we define MAKEFLAGS so users get an accurate value in their makefiles. At this point arg_job_slots is the argv setting, if there is one, else the MAKEFLAGS env setting, if there is one. */ if (jobserver_auth) { /* We're a child in an existing jobserver group. */ if (argv_slots == INVALID_JOB_SLOTS) { /* There's no -j option on the command line: check authorization. */ if (jobserver_parse_auth (jobserver_auth)) { /* Success! Use the jobserver. */ goto job_setup_complete; } /* Oops: we have jobserver-auth but it's invalid :(. */ O (error, NILF, _("warning: jobserver unavailable: using -j1. Add '+' to parent make rule.")); arg_job_slots = 1; } /* The user provided a -j setting on the command line so use it: we're the master make of a new jobserver group. */ else if (!restarts) ON (error, NILF, _("warning: -j%d forced in submake: resetting jobserver mode."), argv_slots); /* We can't use our parent's jobserver, so reset. */ reset_jobserver (); } job_setup_complete: /* The extra indirection through $(MAKE_COMMAND) is done for hysterical raisins. */ #ifdef VMS 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 define_variable_cname ("MAKE", "$(MAKE_COMMAND)", o_default, 1); if (command_variables != 0) { struct command_variable *cv; struct variable *v; size_t len = 0; char *value, *p; /* Figure out how much space will be taken up by the command-line variable definitions. */ for (cv = command_variables; cv != 0; cv = cv->next) { v = cv->variable; len += 2 * strlen (v->name); if (! v->recursive) ++len; ++len; len += 2 * strlen (v->value); ++len; } /* Now allocate a buffer big enough and fill it. */ p = value = alloca (len); for (cv = command_variables; cv != 0; cv = cv->next) { v = cv->variable; p = quote_for_env (p, v->name); if (! v->recursive) *p++ = ':'; *p++ = '='; p = quote_for_env (p, v->value); *p++ = ' '; } p[-1] = '\0'; /* Kill the final space and terminate. */ /* Define an unchangeable variable with a name that no POSIX.2 makefile could validly use for its own variable. */ define_variable_cname ("-*-command-variables-*-", value, o_automatic, 0); /* Define the variable; this will not override any user definition. Normally a reference to this variable is written into the value of MAKEFLAGS, allowing the user to override this value to affect the exported value of MAKEFLAGS. In POSIX-pedantic mode, we cannot allow the user's setting of MAKEOVERRIDES to affect MAKEFLAGS, so 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. */ if (directories != 0) { unsigned int i; for (i = 0; directories->list[i] != 0; ++i) { const char *dir = directories->list[i]; #ifdef WINDOWS32 /* WINDOWS32 chdir() doesn't work if the directory has a trailing '/' But allow -C/ just in case someone wants that. */ { char *p = (char *)dir + strlen (dir) - 1; while (p > dir && (p[0] == '/' || p[0] == '\\')) --p; p[1] = '\0'; } #endif if (chdir (dir) < 0) pfatal_with_name (dir); } } #ifdef WINDOWS32 /* * THIS BLOCK OF CODE MUST COME AFTER chdir() CALL ABOVE IN ORDER * TO NOT CONFUSE THE DEPENDENCY CHECKING CODE IN implicit.c. * * The functions in dir.c can incorrectly cache information for "." * before we have changed directory and this can cause file * lookups to fail because the current directory (.) was pointing * at the wrong place when it was first evaluated. */ no_default_sh_exe = !find_and_set_default_shell (NULL); #endif /* WINDOWS32 */ /* Except under -s, always do -w in sub-makes and under -C. */ if (!silent_flag && (directories != 0 || makelevel > 0)) print_directory_flag = 1; /* Let the user disable that with --no-print-directory. */ if (inhibit_print_directory_flag) print_directory_flag = 0; /* If -R was given, set -r too (doesn't make sense otherwise!) */ if (no_builtin_variables_flag) no_builtin_rules_flag = 1; /* Construct the list of include directories to search. */ construct_include_path (include_directories == 0 ? 0 : include_directories->list); /* If we chdir'ed, figure out where we are now. */ if (directories) { #ifdef WINDOWS32 if (getcwd_fs (current_directory, GET_PATH_MAX) == 0) #else if (getcwd (current_directory, GET_PATH_MAX) == 0) #endif { #ifdef HAVE_GETCWD perror_with_name ("getcwd", ""); #else OS (error, NILF, "getwd: %s", current_directory); #endif starting_directory = 0; } else starting_directory = current_directory; } define_variable_cname ("CURDIR", current_directory, o_file, 0); /* Read any stdin makefiles into temporary files. */ if (makefiles != 0) { unsigned int i; for (i = 0; i < makefiles->idx; ++i) if (makefiles->list[i][0] == '-' && makefiles->list[i][1] == '\0') { /* This makefile is standard input. Since we may re-exec and thus re-read the makefiles, we read standard input into a temporary file and read from that. */ FILE *outfile; char *template; const char *tmpdir; if (stdin_nm) O (fatal, NILF, _("Makefile from standard input specified twice.")); #ifdef VMS # define DEFAULT_TMPDIR "/sys$scratch/" #else # ifdef P_tmpdir # define DEFAULT_TMPDIR P_tmpdir # else # define DEFAULT_TMPDIR "/tmp" # endif #endif #define DEFAULT_TMPFILE "GmXXXXXX" if (((tmpdir = getenv ("TMPDIR")) == NULL || *tmpdir == '\0') #if defined (__MSDOS__) || defined (WINDOWS32) || defined (__EMX__) /* These are also used commonly on these platforms. */ && ((tmpdir = getenv ("TEMP")) == NULL || *tmpdir == '\0') && ((tmpdir = getenv ("TMP")) == NULL || *tmpdir == '\0') #endif ) tmpdir = DEFAULT_TMPDIR; template = alloca (strlen (tmpdir) + CSTRLEN (DEFAULT_TMPFILE) + 2); strcpy (template, tmpdir); #ifdef HAVE_DOS_PATHS if (strchr ("/\\", template[strlen (template) - 1]) == NULL) strcat (template, "/"); #else # ifndef VMS if (template[strlen (template) - 1] != '/') strcat (template, "/"); # endif /* !VMS */ #endif /* !HAVE_DOS_PATHS */ strcat (template, DEFAULT_TMPFILE); outfile = get_tmpfile (&stdin_nm, template); if (outfile == 0) pfatal_with_name (_("fopen (temporary file)")); while (!feof (stdin) && ! ferror (stdin)) { char buf[2048]; size_t n = fread (buf, 1, sizeof (buf), stdin); if (n > 0 && fwrite (buf, 1, n, outfile) != n) pfatal_with_name (_("fwrite (temporary file)")); } fclose (outfile); /* Replace the name that read_all_makefiles will see with the name of the temporary file. */ makefiles->list[i] = strcache_add (stdin_nm); /* Make sure the temporary file will not be remade. */ { struct file *f = enter_file (strcache_add (stdin_nm)); f->updated = 1; f->update_status = us_success; f->command_state = cs_finished; /* Can't be intermediate, or it'll be removed too early for make re-exec. */ f->intermediate = 0; f->dontcare = 0; } } } #ifndef __EMX__ /* Don't use a SIGCHLD handler for OS/2 */ #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. If we don't have a hanging wait we have to fall back to old, broken 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 if we're waiting for a token. If none of these are true, we don't need a signal handler at all. */ { # if defined SIGCHLD bsd_signal (SIGCHLD, child_handler); # endif # if defined SIGCLD && SIGCLD != SIGCHLD 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 /* Let the user send us SIGUSR1 to toggle the -d flag during the run. */ #ifdef SIGUSR1 bsd_signal (SIGUSR1, debug_signal_handler); #endif /* Define the initial list of suffixes for old-style rules. */ set_default_suffixes (); /* Define the file rules for the built-in suffix rules. These will later be converted into pattern rules. We used to do this in install_default_implicit_rules, but since that happens after reading makefiles, it results in the built-in pattern rules taking precedence over makefile-specified suffix rules, which is wrong. */ install_default_suffix_rules (); /* Define some internal and special variables. */ define_automatic_variables (); /* Set up the MAKEFLAGS and MFLAGS variables for makefiles to see. Initialize it to be exported but allow the makefile to reset it. */ define_makeflags (0, 0)->export = v_export; /* Define the default variables. */ define_default_variables (); default_file = enter_file (strcache_add (".DEFAULT")); default_goal_var = define_variable_cname (".DEFAULT_GOAL", "", o_file, 0); /* Evaluate all strings provided with --eval. Also set up the $(-*-eval-flags-*-) variable. */ if (eval_strings) { char *p, *value; unsigned int i; size_t len = (CSTRLEN ("--eval=") + 1) * eval_strings->idx; for (i = 0; i < eval_strings->idx; ++i) { p = xstrdup (eval_strings->list[i]); len += 2 * strlen (p); eval_buffer (p, NULL); free (p); } p = value = alloca (len); for (i = 0; i < eval_strings->idx; ++i) { strcpy (p, "--eval="); p += CSTRLEN ("--eval="); p = quote_for_env (p, eval_strings->list[i]); *(p++) = ' '; } p[-1] = '\0'; define_variable_cname ("-*-eval-flags-*-", value, o_automatic, 0); } /* Read all the makefiles. */ read_files = read_all_makefiles (makefiles == 0 ? 0 : makefiles->list); #ifdef WINDOWS32 /* look one last time after reading all Makefiles */ if (no_default_sh_exe) no_default_sh_exe = !find_and_set_default_shell (NULL); #endif /* WINDOWS32 */ #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); struct variable *shv = lookup_variable (STRING_SIZE_TUPLE ("SHELL")); extern int unixy_shell; extern const char *default_shell; if (shv && *shv->value) { char *shell_path = recursively_expand (shv); if (shell_path && _is_unixy_shell (shell_path)) unixy_shell = 1; else unixy_shell = 0; if (shell_path) default_shell = shell_path; } } #endif /* __MSDOS__ || __EMX__ */ { int old_builtin_rules_flag = no_builtin_rules_flag; int old_builtin_variables_flag = no_builtin_variables_flag; int old_arg_job_slots = arg_job_slots; arg_job_slots = INVALID_JOB_SLOTS; /* Decode switches again, for variables set by the makefile. */ decode_env_switches (STRING_SIZE_TUPLE ("GNUMAKEFLAGS")); /* Clear GNUMAKEFLAGS to avoid duplication. */ define_variable_cname ("GNUMAKEFLAGS", "", o_override, 0); decode_env_switches (STRING_SIZE_TUPLE ("MAKEFLAGS")); #if 0 decode_env_switches (STRING_SIZE_TUPLE ("MFLAGS")); #endif /* If -j is not set in the makefile, or it was set on the command line, reset to use the previous value. */ if (arg_job_slots == INVALID_JOB_SLOTS || argv_slots != INVALID_JOB_SLOTS) arg_job_slots = old_arg_job_slots; else if (jobserver_auth) { /* Makefile MAKEFLAGS set -j, but we already have a jobserver. Make us the master of a new jobserver group. */ if (!restarts) ON (error, NILF, _("warning: -j%d forced in makefile: resetting jobserver mode."), arg_job_slots); /* We can't use our parent's jobserver, so reset. */ reset_jobserver (); } /* Reset in case the switches changed our mind. */ syncing = (output_sync == OUTPUT_SYNC_LINE || output_sync == OUTPUT_SYNC_TARGET); if (make_sync.syncout && ! syncing) output_close (&make_sync); make_sync.syncout = syncing; OUTPUT_SET (&make_sync); /* If we've disabled builtin rules, get rid of them. */ if (no_builtin_rules_flag && ! old_builtin_rules_flag) { if (suffix_file->builtin) { free_dep_chain (suffix_file->deps); suffix_file->deps = 0; } define_variable_cname ("SUFFIXES", "", o_default, 0); } /* If we've disabled builtin variables, get rid of them. */ if (no_builtin_variables_flag && ! old_builtin_variables_flag) undefine_default_variables (); } /* Final jobserver configuration. If we have jobserver_auth then we are a client in an existing jobserver group, that's already been verified OK above. If we don't have jobserver_auth and jobserver is enabled, then start a new jobserver. arg_job_slots = INVALID_JOB_SLOTS if we don't want -j in MAKEFLAGS arg_job_slots = # of jobs of parallelism job_slots = 0 for no limits on jobs, or when limiting via jobserver. job_slots = 1 for standard non-parallel mode. job_slots >1 for old-style parallelism without jobservers. */ if (jobserver_auth) job_slots = 0; else if (arg_job_slots == INVALID_JOB_SLOTS) job_slots = 1; else job_slots = arg_job_slots; #if defined (__MSDOS__) || defined (__EMX__) || defined (VMS) if (job_slots != 1 # ifdef __EMX__ && _osmode != OS2_MODE /* turn off -j if we are in DOS mode */ # endif ) { O (error, NILF, _("Parallel jobs (-j) are not supported on this platform.")); O (error, NILF, _("Resetting to single job (-j1) mode.")); arg_job_slots = INVALID_JOB_SLOTS; job_slots = 1; } #endif /* If we have >1 slot at this point, then we're a top-level make. Set up the jobserver. 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 (job_slots > 1 && jobserver_setup (job_slots - 1)) { /* Fill in the jobserver_auth for our children. */ jobserver_auth = jobserver_get_auth (); if (jobserver_auth) { /* We're using the jobserver so set job_slots to 0. */ master_job_slots = job_slots; job_slots = 0; } } /* 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; } #ifndef MAKE_SYMLINKS if (check_symlink_flag) { O (error, NILF, _("Symbolic links not supported: disabling -L.")); check_symlink_flag = 0; } #endif /* Set up MAKEFLAGS and MFLAGS again, so they will be right. */ define_makeflags (1, 0); /* Make each 'struct goaldep' point at the 'struct file' for the file depended on. Also do magic for special targets. */ snap_deps (); /* Convert old-style suffix rules to pattern rules. It is important to do this before installing the built-in pattern rules below, so that makefile-specified suffix rules take precedence over built-in pattern rules. */ convert_to_pattern (); /* Install the default implicit pattern rules. This used to be done before reading the makefiles. But in that case, built-in pattern rules were in the chain before user-defined ones, so they matched first. */ install_default_implicit_rules (); /* Compute implicit rule limits and do magic for pattern rules. */ snap_implicit_rules (); /* Construct the listings of directories in VPATH lists. */ build_vpath_lists (); /* Mark files given with -o flags as very old and as having been updated already, and files given with -W flags as brand new (time-stamp as far as possible into the future). If restarts is set we'll do -W later. */ if (old_files != 0) { const char **p; for (p = old_files->list; *p != 0; ++p) { struct file *f = enter_file (*p); f->last_mtime = f->mtime_before_update = OLD_MTIME; f->updated = 1; f->update_status = us_success; f->command_state = cs_finished; } } if (!restarts && new_files != 0) { const char **p; for (p = new_files->list; *p != 0; ++p) { struct file *f = enter_file (*p); f->last_mtime = f->mtime_before_update = NEW_MTIME; } } /* Initialize the remote job module. */ remote_setup (); /* Dump any output we've collected. */ OUTPUT_UNSET (); output_close (&make_sync); if (read_files) { /* Update any makefiles if necessary. */ FILE_TIMESTAMP *makefile_mtimes; char **aargv = NULL; const char **nargv; int nargc; enum update_status status; DB (DB_BASIC, (_("Updating makefiles....\n"))); { struct goaldep *d; unsigned int num_mkfiles = 0; for (d = read_files; d != NULL; d = d->next) ++num_mkfiles; makefile_mtimes = alloca (num_mkfiles * sizeof (FILE_TIMESTAMP)); } /* Remove any makefiles we don't want to try to update. Record the current modtimes of the others so we can compare them later. */ { struct goaldep *d = read_files; struct goaldep *last = NULL; unsigned int mm_idx = 0; while (d != 0) { struct file *f; for (f = d->file->double_colon; f != NULL; f = f->prev) if (f->deps == 0 && f->cmds != 0) break; if (f) { /* This makefile is a :: target with commands, but no dependencies. So, it will always be remade. This might well cause an infinite loop, so don't try to remake it. (This will only happen if your makefiles are written exceptionally stupidly; but if you work for Athena, that's how you write your makefiles.) */ DB (DB_VERBOSE, (_("Makefile '%s' might loop; not remaking it.\n"), f->name)); if (last) last->next = d->next; else read_files = d->next; /* Free the storage. */ free_goaldep (d); d = last ? last->next : read_files; } else { makefile_mtimes[mm_idx++] = file_mtime_no_search (d->file); last = d; d = d->next; } } } /* Set up 'MAKEFLAGS' specially while remaking makefiles. */ define_makeflags (1, 1); { 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". */ case us_none: /* Did nothing. */ break; case us_failed: /* Failed to update. Figure out if we care. */ { /* Nonzero if any makefile was successfully remade. */ int any_remade = 0; /* Nonzero if any makefile we care about failed in updating or could not be found at all. */ int any_failed = 0; unsigned int i; struct goaldep *d; for (i = 0, d = read_files; d != 0; ++i, d = d->next) { if (d->file->updated) { /* This makefile was updated. */ if (d->file->update_status == us_success) { /* It was successfully updated. */ any_remade |= (file_mtime_no_search (d->file) != makefile_mtimes[i]); } else if (! (d->flags & RM_DONTCARE)) { FILE_TIMESTAMP mtime; /* The update failed and this makefile was not from the MAKEFILES variable, so we care. */ OS (error, NILF, _("Failed to remake makefile '%s'."), d->file->name); mtime = file_mtime_no_search (d->file); any_remade |= (mtime != NONEXISTENT_MTIME && mtime != makefile_mtimes[i]); makefile_status = MAKE_FAILURE; } } else /* This makefile was not found at all. */ 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->flags & RM_INCLUDED) /* An included makefile. We don't need to die, but we do want to complain. */ error (NILF, l, _("Included makefile '%s' was not found."), dnm); else { /* A normal makefile. We must die later. */ error (NILF, l, _("Makefile '%s' was not found"), dnm); any_failed = 1; } } } if (any_remade) goto re_exec; if (any_failed) die (MAKE_FAILURE); break; } case us_success: re_exec: /* Updated successfully. Re-exec ourselves. */ remove_intermediates (0); if (print_data_base_flag) print_data_base (); clean_jobserver (0); if (makefiles != 0) { /* These names might have changed. */ int i, j = 0; for (i = 1; i < argc; ++i) if (strneq (argv[i], "-f", 2)) /* XXX */ { if (argv[i][2] == '\0') /* This cast is OK since we never modify argv. */ argv[++i] = (char *) makefiles->list[j]; else argv[i] = xstrdup (concat (2, "-f", makefiles->list[j])); ++j; } } /* Add -o option for the stdin temporary file, if necessary. */ nargc = argc; if (stdin_nm) { void *m = xmalloc ((nargc + 2) * sizeof (char *)); aargv = m; memcpy (aargv, argv, argc * sizeof (char *)); aargv[nargc++] = xstrdup (concat (2, "-o", stdin_nm)); aargv[nargc] = 0; nargv = m; } else nargv = (const char**)argv; if (directories != 0 && directories->idx > 0) { int bad = 1; if (directory_before_chdir != 0) { if (chdir (directory_before_chdir) < 0) perror_with_name ("chdir", ""); else bad = 0; } if (bad) O (fatal, NILF, _("Couldn't change back to original directory.")); } ++restarts; if (ISDB (DB_BASIC)) { const char **p; printf (_("Re-executing[%u]:"), restarts); for (p = nargv; *p != 0; ++p) printf (" %s", *p); putchar ('\n'); fflush (stdout); } #ifndef _AMIGA { char **p; for (p = environ; *p != 0; ++p) { if (strneq (*p, MAKELEVEL_NAME "=", MAKELEVEL_LENGTH+1)) { *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="))) { *p = alloca (40); sprintf (*p, "MAKE_RESTARTS=%s%u", OUTPUT_IS_TRACED () ? "-" : "", restarts); restarts = 0; } } } #else /* AMIGA */ { char buffer[256]; sprintf (buffer, "%u", makelevel); SetVar (MAKELEVEL_NAME, buffer, -1, GVF_GLOBAL_ONLY); sprintf (buffer, "%s%u", OUTPUT_IS_TRACED () ? "-" : "", restarts); SetVar ("MAKE_RESTARTS", buffer, -1, GVF_GLOBAL_ONLY); restarts = 0; } #endif /* If we didn't set the restarts variable yet, add it. */ if (restarts) { char *b = alloca (40); sprintf (b, "MAKE_RESTARTS=%s%u", OUTPUT_IS_TRACED () ? "-" : "", restarts); putenv (b); } fflush (stdout); fflush (stderr); /* The exec'd "child" will be another make, of course. */ jobserver_pre_child(1); #ifdef _AMIGA exec_command (nargv); exit (0); #elif defined (__EMX__) { /* It is not possible to use execve() here because this would cause the parent process to be terminated with exit code 0 before the child process has been terminated. Therefore it may be the best solution simply to spawn the child process including all file handles and to wait for its termination. */ pid_t pid; int r; struct childbase child; child.cmd_name = NULL; child.output.syncout = 0; child.environment = environ; pid = child_execute_job (&child, 1, nargv); /* is this loop really necessary? */ do { pid = wait (&r); } while (pid <= 0); /* use the exit code of the child process */ exit (WIFEXITED(r) ? WEXITSTATUS(r) : EXIT_FAILURE); } #else #ifdef SET_STACK_SIZE /* Reset limits, if necessary. */ if (stack_limit.rlim_cur) setrlimit (RLIMIT_STACK, &stack_limit); #endif exec_command ((char **)nargv, environ); #endif /* We shouldn't get here but just in case. */ jobserver_post_child(1); free (aargv); break; } } /* Set up 'MAKEFLAGS' again for the normal targets. */ define_makeflags (1, 0); /* Set always_make_flag if -B was given. */ always_make_flag = always_make_set; /* If restarts is set we haven't set up -W files yet, so do that now. */ if (restarts && new_files != 0) { const char **p; for (p = new_files->list; *p != 0; ++p) { struct file *f = enter_file (*p); f->last_mtime = f->mtime_before_update = NEW_MTIME; } } /* If there is a temp file from reading a makefile from stdin, get rid of it now. */ if (stdin_nm && unlink (stdin_nm) < 0 && errno != ENOENT) perror_with_name (_("unlink (temporary file): "), stdin_nm); /* If there were no command-line goals, use the default. */ if (goals == 0) { char *p; if (default_goal_var->recursive) p = variable_expand (default_goal_var->value); else { p = variable_buffer_output (variable_buffer, default_goal_var->value, strlen (default_goal_var->value)); *p = '\0'; p = variable_buffer; } if (*p != '\0') { struct file *f = lookup_file (p); /* If .DEFAULT_GOAL is a non-existent target, enter it into the table and let the standard logic sort it out. */ if (f == 0) { struct nameseq *ns; ns = PARSE_SIMPLE_SEQ (&p, struct nameseq); if (ns) { /* .DEFAULT_GOAL should contain one target. */ if (ns->next != 0) O (fatal, NILF, _(".DEFAULT_GOAL contains more than one target")); f = enter_file (strcache_add (ns->name)); ns->name = 0; /* It was reused by enter_file(). */ free_ns_chain (ns); } } if (f) { goals = alloc_goaldep (); goals->file = f; } } } else lastgoal->next = 0; if (!goals) { struct variable *v = lookup_variable (STRING_SIZE_TUPLE ("MAKEFILE_LIST")); if (v && v->value && v->value[0] != '\0') O (fatal, NILF, _("No targets")); O (fatal, NILF, _("No targets specified and no makefile found")); } /* Update the goals. */ DB (DB_BASIC, (_("Updating goal targets....\n"))); { switch (update_goal_chain (goals)) { case us_none: /* Nothing happened. */ /* FALLTHROUGH */ case us_success: /* Keep the previous result. */ break; case us_question: /* We are under -q and would run some commands. */ makefile_status = MAKE_TROUBLE; break; case us_failed: /* Updating failed. POSIX.2 specifies exit status >1 for this; */ makefile_status = MAKE_FAILURE; break; } /* If we detected some clock skew, generate one last warning */ if (clock_skew_detected) O (error, NILF, _("warning: Clock skew detected. Your build may be incomplete.")); /* Exit. */ die (makefile_status); } /* NOTREACHED */ exit (MAKE_SUCCESS); } /* Parsing of arguments, decoding of switches. */ static char options[1 + sizeof (switches) / sizeof (switches[0]) * 3]; static struct option long_options[(sizeof (switches) / sizeof (switches[0])) + (sizeof (long_option_aliases) / sizeof (long_option_aliases[0]))]; /* Fill in the string and vector for getopt. */ static void init_switches (void) { char *p; unsigned int c; unsigned int i; if (options[0] != '\0') /* Already done. */ return; p = options; /* Return switch and non-switch args in order, regardless of POSIXLY_CORRECT. Non-switch args are returned as option 1. */ *p++ = '-'; for (i = 0; switches[i].c != '\0'; ++i) { long_options[i].name = (char *) (switches[i].long_name == 0 ? "" : switches[i].long_name); long_options[i].flag = 0; long_options[i].val = switches[i].c; if (short_option (switches[i].c)) *p++ = (char) switches[i].c; switch (switches[i].type) { case flag: case flag_off: case ignore: long_options[i].has_arg = no_argument; break; case string: case strlist: case filename: case positive_int: case floating: if (short_option (switches[i].c)) *p++ = ':'; if (switches[i].noarg_value != 0) { if (short_option (switches[i].c)) *p++ = ':'; long_options[i].has_arg = optional_argument; } else long_options[i].has_arg = required_argument; break; } } *p = '\0'; for (c = 0; c < (sizeof (long_option_aliases) / sizeof (long_option_aliases[0])); ++c) long_options[i++] = long_option_aliases[c]; long_options[i].name = 0; } /* Non-option argument. It might be a variable definition. */ static void handle_non_switch_argument (const char *arg, int env) { struct variable *v; if (arg[0] == '-' && arg[1] == '\0') /* 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) { /* It is indeed a variable definition. If we don't already have this one, record a pointer to the variable for later use in define_makeflags. */ struct command_variable *cv; for (cv = command_variables; cv != 0; cv = cv->next) if (cv->variable == v) break; if (! cv) { cv = xmalloc (sizeof (*cv)); cv->variable = v; cv->next = command_variables; command_variables = cv; } } else if (! env) { /* Not an option or variable definition; it must be a goal target! Enter it as a file and add it to the dep chain of goals. */ struct file *f = enter_file (strcache_add (expand_command_line_file (arg))); f->cmd_target = 1; if (goals == 0) { goals = alloc_goaldep (); lastgoal = goals; } else { lastgoal->next = alloc_goaldep (); lastgoal = lastgoal->next; } lastgoal->file = f; { /* Add this target name to the MAKECMDGOALS variable. */ struct variable *gv; const char *value; gv = lookup_variable (STRING_SIZE_TUPLE ("MAKECMDGOALS")); if (gv == 0) value = f->name; else { /* Paste the old and new values together */ size_t oldlen, newlen; char *vp; oldlen = strlen (gv->value); newlen = strlen (f->name); vp = alloca (oldlen + 1 + newlen + 1); memcpy (vp, gv->value, oldlen); vp[oldlen] = ' '; memcpy (&vp[oldlen + 1], f->name, newlen + 1); value = vp; } define_variable_cname ("MAKECMDGOALS", value, o_default, 0); } } } /* Print a nice usage method. */ static void print_usage (int bad) { const char *const *cpp; FILE *usageto; if (print_version_flag) print_version (); usageto = bad ? stderr : stdout; fprintf (usageto, _("Usage: %s [options] [target] ...\n"), program); for (cpp = usage; *cpp; ++cpp) fputs (_(*cpp), usageto); if (!remote_description || *remote_description == '\0') fprintf (usageto, _("\nThis program built for %s\n"), make_host); else fprintf (usageto, _("\nThis program built for %s (%s)\n"), make_host, remote_description); fprintf (usageto, _("Report bugs to \n")); } /* Decode switches from ARGC and ARGV. They came from the environment if ENV is nonzero. */ static void decode_switches (int argc, const char **argv, int env) { int bad = 0; const struct command_switch *cs; struct stringlist *sl; int c; /* getopt does most of the parsing for us. First, get its vectors set up. */ init_switches (); /* Let getopt produce error messages for the command line, but not for options from the environment. */ opterr = !env; /* Reset getopt's state. */ optind = 0; while (optind < argc) { const char *coptarg; /* Parse the next argument. */ c = getopt_long (argc, (char*const*)argv, options, long_options, NULL); coptarg = optarg; if (c == EOF) /* End of arguments, or "--" marker seen. */ break; else if (c == 1) /* An argument not starting with a dash. */ handle_non_switch_argument (coptarg, env); else if (c == '?') /* Bad option. We will print a usage message and die later. But continue to parse the other options so the user can see all he did wrong. */ bad = 1; else for (cs = switches; cs->c != '\0'; ++cs) if (cs->c == c) { /* Whether or not we will actually do anything with this switch. We test this individually inside the switch below rather than just once outside it, so that options which are to be ignored still consume args. */ int doit = !env || cs->env; switch (cs->type) { default: abort (); case ignore: break; case flag: case flag_off: if (doit) *(int *) cs->value_ptr = cs->type == flag; break; case string: case strlist: case filename: if (!doit) break; if (! coptarg) coptarg = xstrdup (cs->noarg_value); else if (*coptarg == '\0') { char opt[2] = "c"; const char *op = opt; if (short_option (cs->c)) opt[0] = (char) cs->c; else op = cs->long_name; error (NILF, strlen (op), _("the '%s%s' option requires a non-empty string argument"), short_option (cs->c) ? "-" : "--", op); bad = 1; break; } if (cs->type == string) { char **val = (char **)cs->value_ptr; free (*val); *val = xstrdup (coptarg); break; } sl = *(struct stringlist **) cs->value_ptr; if (sl == 0) { sl = xmalloc (sizeof (struct stringlist)); sl->max = 5; sl->idx = 0; sl->list = xmalloc (5 * sizeof (char *)); *(struct stringlist **) cs->value_ptr = sl; } else if (sl->idx == sl->max - 1) { sl->max += 5; /* MSVC erroneously warns without a cast here. */ sl->list = xrealloc ((void *)sl->list, sl->max * sizeof (char *)); } if (cs->type == filename) sl->list[sl->idx++] = expand_command_line_file (coptarg); else sl->list[sl->idx++] = xstrdup (coptarg); sl->list[sl->idx] = 0; break; case positive_int: /* See if we have an option argument; if we do require that it's all digits, not something like "10foo". */ if (coptarg == 0 && argc > optind) { const char *cp; for (cp=argv[optind]; ISDIGIT (cp[0]); ++cp) ; if (cp[0] == '\0') coptarg = argv[optind++]; } if (!doit) break; if (coptarg) { int i = atoi (coptarg); const char *cp; /* Yes, I realize we're repeating this in some cases. */ for (cp = coptarg; ISDIGIT (cp[0]); ++cp) ; if (i < 1 || cp[0] != '\0') { error (NILF, 0, _("the '-%c' option requires a positive integer argument"), cs->c); bad = 1; } else *(unsigned int *) cs->value_ptr = i; } else *(unsigned int *) cs->value_ptr = *(unsigned int *) cs->noarg_value; break; case floating: if (coptarg == 0 && optind < argc && (ISDIGIT (argv[optind][0]) || argv[optind][0] == '.')) coptarg = argv[optind++]; if (doit) *(double *) cs->value_ptr = (coptarg != 0 ? atof (coptarg) : *(double *) cs->noarg_value); break; } /* We've found the switch. Stop looking. */ break; } } /* There are no more options according to getting getopt, but there may be some arguments left. Since we have asked for non-option arguments to be returned in order, this only happens when there is a "--" argument to prevent later arguments from being options. */ while (optind < argc) handle_non_switch_argument (argv[optind++], env); if (!env && (bad || print_usage_flag)) { print_usage (bad); die (bad ? MAKE_FAILURE : MAKE_SUCCESS); } /* If there are any options that need to be decoded do it now. */ decode_debug_flags (); decode_output_sync_flags (); /* Perform any special switch handling. */ run_silent = silent_flag; } /* Decode switches from environment variable ENVAR (which is LEN chars long). We do this by chopping the value into a vector of words, prepending a dash to the first word if it lacks one, and passing the vector to decode_switches. */ static void decode_env_switches (const char *envar, size_t len) { char *varref = alloca (2 + len + 2); char *value, *p, *buf; int argc; const char **argv; /* Get the variable's value. */ varref[0] = '$'; varref[1] = '('; memcpy (&varref[2], envar, len); varref[2 + len] = ')'; varref[2 + len + 1] = '\0'; value = variable_expand (varref); /* Skip whitespace, and check for an empty value. */ NEXT_TOKEN (value); len = strlen (value); if (len == 0) return; /* Allocate a vector that is definitely big enough. */ argv = alloca ((1 + len + 1) * sizeof (char *)); /* getopt will look at the arguments starting at ARGV[1]. Prepend a spacer word. */ argv[0] = 0; argc = 1; /* We need a buffer to copy the value into while we split it into words and unquote it. Set up in case we need to prepend a dash later. */ buf = alloca (1 + len + 1); buf[0] = '-'; p = buf+1; argv[argc] = p; while (*value != '\0') { if (*value == '\\' && value[1] != '\0') ++value; /* Skip the backslash. */ else if (ISBLANK (*value)) { /* End of the word. */ *p++ = '\0'; argv[++argc] = p; do ++value; while (ISBLANK (*value)); continue; } *p++ = *value++; } *p = '\0'; argv[++argc] = 0; assert (p < buf + len + 2); if (argv[1][0] != '-' && strchr (argv[1], '=') == 0) /* The first word doesn't start with a dash and isn't a variable definition, so add a dash. */ argv[1] = buf; /* Parse those words. */ decode_switches (argc, argv, 1); } /* Quote the string IN so that it will be interpreted as a single word with no magic by decode_env_switches; also double dollar signs to avoid variable expansion in make itself. Write the result into OUT, returning the address of the next character to be written. Allocating space for OUT twice the length of IN is always sufficient. */ static char * quote_for_env (char *out, const char *in) { while (*in != '\0') { if (*in == '$') *out++ = '$'; else if (ISBLANK (*in) || *in == '\\') *out++ = '\\'; *out++ = *in++; } return out; } /* Define the MAKEFLAGS and MFLAGS variables to reflect the settings of the command switches. Include options with args if ALL is nonzero. Don't include options with the 'no_makefile' flag set if MAKEFILE. */ static struct variable * define_makeflags (int all, int makefile) { const char ref[] = "MAKEOVERRIDES"; const char posixref[] = "-*-command-variables-*-"; const char evalref[] = "$(-*-eval-flags-*-)"; const struct command_switch *cs; char *flagstring; char *p; /* We will construct a linked list of 'struct flag's describing all the flags which need to go in MAKEFLAGS. Then, once we know how many there are and their lengths, we can put them all together in a string. */ struct flag { struct flag *next; const struct command_switch *cs; const char *arg; }; struct flag *flags = 0; struct flag *last = 0; size_t flagslen = 0; #define ADD_FLAG(ARG, LEN) \ do { \ struct flag *new = alloca (sizeof (struct flag)); \ new->cs = cs; \ new->arg = (ARG); \ new->next = 0; \ if (! flags) \ flags = new; \ else \ last->next = new; \ last = new; \ if (new->arg == 0) \ /* Just a single flag letter: " -x" */ \ flagslen += 3; \ else \ /* " -xfoo", plus space to escape "foo". */ \ flagslen += 1 + 1 + 1 + (3 * (LEN)); \ if (!short_option (cs->c)) \ /* This switch has no single-letter version, so we use the long. */ \ flagslen += 2 + strlen (cs->long_name); \ } while (0) for (cs = switches; cs->c != '\0'; ++cs) if (cs->toenv && (!makefile || !cs->no_makefile)) switch (cs->type) { case ignore: break; case flag: case 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); break; case positive_int: if (all) { if ((cs->default_value != 0 && (*(unsigned int *) cs->value_ptr == *(unsigned int *) cs->default_value))) break; else if (cs->noarg_value != 0 && (*(unsigned int *) cs->value_ptr == *(unsigned int *) cs->noarg_value)) ADD_FLAG ("", 0); /* Optional value omitted; see below. */ else { char *buf = alloca (30); sprintf (buf, "%u", *(unsigned int *) cs->value_ptr); ADD_FLAG (buf, strlen (buf)); } } break; case floating: if (all) { if (cs->default_value != 0 && (*(double *) cs->value_ptr == *(double *) cs->default_value)) break; else if (cs->noarg_value != 0 && (*(double *) cs->value_ptr == *(double *) cs->noarg_value)) ADD_FLAG ("", 0); /* Optional value omitted; see below. */ else { char *buf = alloca (100); sprintf (buf, "%g", *(double *) cs->value_ptr); ADD_FLAG (buf, strlen (buf)); } } break; case string: if (all) { p = *((char **)cs->value_ptr); if (p) ADD_FLAG (p, strlen (p)); } break; case filename: case strlist: if (all) { struct stringlist *sl = *(struct stringlist **) cs->value_ptr; if (sl != 0) { unsigned int i; for (i = 0; i < sl->idx; ++i) ADD_FLAG (sl->list[i], strlen (sl->list[i])); } } break; default: abort (); } #undef ADD_FLAG /* Four more for the possible " -- ", plus variable references. */ flagslen += 4 + CSTRLEN (posixref) + 4 + CSTRLEN (evalref) + 4; /* Construct the value in FLAGSTRING. We allocate enough space for a preceding dash and trailing null. */ flagstring = alloca (1 + flagslen + 1); memset (flagstring, '\0', 1 + flagslen + 1); p = flagstring; /* Start with a dash, for MFLAGS. */ *p++ = '-'; /* Add simple options as a group. */ while (flags != 0 && !flags->arg && short_option (flags->cs->c)) { *p++ = (char) flags->cs->c; flags = flags->next; } /* Now add more complex flags: ones with options and/or long names. */ while (flags) { *p++ = ' '; *p++ = '-'; /* Add the flag letter or name to the string. */ if (short_option (flags->cs->c)) *p++ = (char) flags->cs->c; else { /* Long options require a double-dash. */ *p++ = '-'; strcpy (p, flags->cs->long_name); p += strlen (p); } /* An omitted optional argument has an ARG of "". */ if (flags->arg && flags->arg[0] != '\0') { if (!short_option (flags->cs->c)) /* Long options require '='. */ *p++ = '='; p = quote_for_env (p, flags->arg); } flags = flags->next; } /* If no flags at all, get rid of the initial dash. */ if (p == &flagstring[1]) { flagstring[0] = '\0'; p = flagstring; } /* Define MFLAGS before appending variable definitions. Omit an initial empty dash. Since MFLAGS is not parsed for flags, there is no reason to override any makefile redefinition. */ define_variable_cname ("MFLAGS", flagstring + (flagstring[0] == '-' && flagstring[1] == ' ' ? 2 : 0), o_env, 1); /* Write a reference to -*-eval-flags-*-, which contains all the --eval flag options. */ if (eval_strings) { *p++ = ' '; memcpy (p, evalref, CSTRLEN (evalref)); p += CSTRLEN (evalref); } if (all) { /* If there are any overrides to add, write a reference to $(MAKEOVERRIDES), which contains command-line variable definitions. Separate the variables from the switches with a "--" arg. */ const char *r = posix_pedantic ? posixref : ref; size_t l = strlen (r); struct variable *v = lookup_variable (r, l); if (v && v->value && v->value[0] != '\0') { strcpy (p, " -- "); p += 4; *(p++) = '$'; *(p++) = '('; memcpy (p, r, l); p += l; *(p++) = ')'; } } /* If there is a leading dash, omit it. */ if (flagstring[0] == '-') ++flagstring; /* This used to use o_env, but that lost when a makefile defined MAKEFLAGS. Makefiles set MAKEFLAGS to add switches, but we still want to redefine its value with the full set of switches. Then we used o_file, but that lost when users added -e, causing a previous MAKEFLAGS env. var. to take precedence over the new one. Of course, an override or command definition will still take precedence. */ return define_variable_cname ("MAKEFLAGS", flagstring, env_overrides ? o_env_override : o_file, 1); } /* Print version information. */ static void print_version (void) { static int printed_version = 0; const char *precede = print_data_base_flag ? "# " : ""; if (printed_version) /* Do it only once. */ return; printf ("%sGNU Make %s\n", precede, version_string); if (!remote_description || *remote_description == '\0') printf (_("%sBuilt for %s\n"), precede, make_host); else printf (_("%sBuilt for %s (%s)\n"), precede, make_host, remote_description); /* Print this untranslated. The coding standards recommend translating the (C) to the copyright symbol, but this string is going to change every 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-2020 Free Software Foundation, Inc.\n", precede); printf (_("%sLicense GPLv3+: GNU GPL version 3 or later \n\ %sThis is free software: you are free to change and redistribute it.\n\ %sThere is NO WARRANTY, to the extent permitted by law.\n"), precede, precede, precede); printed_version = 1; /* Flush stdout so the user doesn't have to wait to see the version information while make thinks about things. */ fflush (stdout); } /* Print a bunch of information about this and that. */ static void print_data_base (void) { time_t when = time ((time_t *) 0); print_version (); printf (_("\n# Make data base, printed on %s"), ctime (&when)); print_variable_data_base (); print_dir_data_base (); print_rule_data_base (); print_file_data_base (); print_vpath_data_base (); strcache_print_stats ("#"); when = time ((time_t *) 0); printf (_("\n# Finished Make data base on %s\n"), ctime (&when)); } static void clean_jobserver (int status) { /* Sanity: have we written all our jobserver tokens back? If our exit status is 2 that means some kind of syntax error; we might not have written all our tokens so do that now. If tokens are left after any other error code, that's bad. */ if (jobserver_enabled() && jobserver_tokens) { if (status != 2) ON (error, NILF, "INTERNAL: Exiting with %u jobserver tokens (should be 0)!", jobserver_tokens); else /* Don't write back the "free" token */ while (--jobserver_tokens) jobserver_release (0); } /* Sanity: If we're the master, were all the tokens written back? */ if (master_job_slots) { /* We didn't write one for ourself, so start at 1. */ unsigned int tokens = 1 + jobserver_acquire_all (); if (tokens != master_job_slots) ONN (error, NILF, "INTERNAL: Exiting with %u jobserver tokens available; should be %u!", tokens, master_job_slots); reset_jobserver (); } } /* Exit with STATUS, cleaning up as necessary. */ void die (int status) { static char dying = 0; if (!dying) { int err; dying = 1; if (print_version_flag) print_version (); /* Wait for children to die. */ err = (status != 0); while (job_slots_used > 0) reap_children (1, err); /* Let the remote job module clean up its state. */ remote_cleanup (); /* Remove the intermediate files. */ remove_intermediates (0); if (print_data_base_flag) print_data_base (); if (verify_flag) verify_file_data_base (); clean_jobserver (status); if (output_context) { /* die() might be called in a recipe output context due to an $(error ...) function. */ output_close (output_context); if (output_context != &make_sync) output_close (&make_sync); OUTPUT_UNSET (); } output_close (NULL); /* Try to move back to the original directory. This is essential on MS-DOS (where there is really only one process), and on Unix it puts core files in the original directory instead of the -C directory. Must wait until after remove_intermediates(), or unlinks of relative pathnames fail. */ if (directory_before_chdir != 0) { /* If it fails we don't care: shut up GCC. */ int _x UNUSED; _x = chdir (directory_before_chdir); } } exit (status); } make-4.3/src/filedef.h0000644000175000017500000002402713603564437011574 00000000000000/* Definition of target file data structures for GNU Make. Copyright (C) 1988-2020 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 . */ /* Structure that represents the info on one file that the makefile says how to make. All of these are chained together through 'next'. */ #include "hash.h" struct commands; struct dep; struct variable; struct variable_set_list; struct file { const char *name; const char *hname; /* Hashed filename */ const char *vpath; /* VPATH/vpath pathname */ struct dep *deps; /* all dependencies, including duplicates */ struct commands *cmds; /* Commands to execute for this target. */ const char *stem; /* Implicit stem, if an implicit rule has been used */ struct dep *also_make; /* Targets that are made by making this. */ struct file *prev; /* Previous entry for same file name; used when there are multiple double-colon entries for the same file. */ struct file *last; /* Last entry for the same file name. */ /* File that this file was renamed to. After any time that a file could be renamed, call 'check_renamed' (below). */ struct file *renamed; /* List of variable sets used for this file. */ struct variable_set_list *variables; /* Pattern-specific variable reference for this target, or null if there isn't one. Also see the pat_searched flag, below. */ struct variable_set_list *pat_variables; /* Immediate dependent that caused this target to be remade, or nil if there isn't one. */ struct file *parent; /* For a double-colon entry, this is the first double-colon entry for the same file. Otherwise this is null. */ struct file *double_colon; FILE_TIMESTAMP last_mtime; /* File's modtime, if already known. */ FILE_TIMESTAMP mtime_before_update; /* File's modtime before any updating has been performed. */ unsigned int considered; /* equal to 'considered' if file has been considered on current scan of goal chain */ int command_flags; /* Flags OR'd in for cmds; see commands.h. */ enum update_status /* Status of the last attempt to update. */ { us_success = 0, /* Successfully updated. Must be 0! */ us_none, /* No attempt to update has been made. */ us_question, /* Needs to be updated (-q is is set). */ us_failed /* Update failed. */ } update_status ENUM_BITFIELD (2); enum cmd_state /* State of commands. ORDER IS IMPORTANT! */ { cs_not_started = 0, /* Not yet started. Must be 0! */ cs_deps_running, /* Dep commands running. */ cs_running, /* Commands running. */ cs_finished /* Commands finished. */ } command_state ENUM_BITFIELD (2); unsigned int builtin:1; /* True if the file is a builtin rule. */ unsigned int precious:1; /* Non-0 means don't delete file on quit */ unsigned int loaded:1; /* True if the file is a loaded object. */ unsigned int low_resolution_time:1; /* Nonzero if this file's time stamp has only one-second resolution. */ unsigned int tried_implicit:1; /* Nonzero if have searched for implicit rule for making this file; don't search again. */ unsigned int updating:1; /* Nonzero while updating deps of this file */ unsigned int updated:1; /* Nonzero if this file has been remade. */ unsigned int is_target:1; /* Nonzero if file is described as target. */ unsigned int cmd_target:1; /* Nonzero if file was given on cmd line. */ unsigned int phony:1; /* Nonzero if this is a phony file i.e., a prerequisite of .PHONY. */ unsigned int intermediate:1;/* Nonzero if this is an intermediate file. */ unsigned int secondary:1; /* Nonzero means remove_intermediates should not delete it. */ unsigned int dontcare:1; /* Nonzero if no complaint is to be made if this target cannot be remade. */ unsigned int ignore_vpath:1;/* Nonzero if we threw out VPATH name. */ unsigned int pat_searched:1;/* Nonzero if we already searched for pattern-specific variables. */ unsigned int no_diag:1; /* True if the file failed to update and no diagnostics has been issued (dontcare). */ }; extern struct file *default_file; struct file *lookup_file (const char *name); struct file *enter_file (const char *name); struct dep *split_prereqs (char *prereqstr); struct dep *enter_prereqs (struct dep *prereqs, const char *stem); struct dep *expand_extra_prereqs (const struct variable *extra); void remove_intermediates (int sig); void snap_deps (void); void rename_file (struct file *file, const char *name); 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) \ file_timestamp_cons (fname, (st).st_mtime, (st).ST_MTIM_NSEC) #else # define FILE_TIMESTAMP_STAT_MODTIME(fname, st) \ file_timestamp_cons (fname, (st).st_mtime, 0) #endif /* If FILE_TIMESTAMP is 64 bits (or more), use nanosecond resolution. (Multiply by 2**30 instead of by 10**9 to save time at the cost of slightly decreasing the number of available timestamps.) With 64-bit FILE_TIMESTAMP, this stops working on 2514-05-30 01:53:04 UTC, but by then uintmax_t should be larger than 64 bits. */ #define FILE_TIMESTAMPS_PER_S (FILE_TIMESTAMP_HI_RES ? 1000000000 : 1) #define FILE_TIMESTAMP_LO_BITS (FILE_TIMESTAMP_HI_RES ? 30 : 0) #define FILE_TIMESTAMP_S(ts) (((ts) - ORDINARY_MTIME_MIN) \ >> FILE_TIMESTAMP_LO_BITS) #define FILE_TIMESTAMP_NS(ts) ((int) (((ts) - ORDINARY_MTIME_MIN) \ & ((1 << FILE_TIMESTAMP_LO_BITS) - 1))) /* Upper bound on length of string "YYYY-MM-DD HH:MM:SS.NNNNNNNNN" representing a file timestamp. The upper bound is not necessarily 29, since the year might be less than -999 or greater than 9999. Subtract one for the sign bit if in case file timestamps can be negative; subtract FLOOR_LOG2_SECONDS_PER_YEAR to yield an upper bound on how many file timestamp bits might affect the year; 302 / 1000 is log10 (2) rounded up; add one for integer division truncation; add one more for a minus sign if file timestamps can be negative; add 4 to allow for any 4-digit epoch year (e.g. 1970); add 25 to allow for "-MM-DD HH:MM:SS.NNNNNNNNN". */ #define FLOOR_LOG2_SECONDS_PER_YEAR 24 #define FILE_TIMESTAMP_PRINT_LEN_BOUND \ (((sizeof (FILE_TIMESTAMP) * CHAR_BIT - 1 - FLOOR_LOG2_SECONDS_PER_YEAR) \ * 302 / 1000) \ + 1 + 1 + 4 + 25) FILE_TIMESTAMP file_timestamp_cons (char const *, time_t, long int); FILE_TIMESTAMP file_timestamp_now (int *); void file_timestamp_sprintf (char *p, FILE_TIMESTAMP ts); /* Return the mtime of file F (a struct file *), caching it. The value is NONEXISTENT_MTIME if the file does not exist. */ #define file_mtime(f) file_mtime_1 ((f), 1) /* Return the mtime of file F (a struct file *), caching it. Don't search using vpath for the file--if it doesn't actually exist, we don't find it. The value is NONEXISTENT_MTIME if the file does not exist. */ #define file_mtime_no_search(f) file_mtime_1 ((f), 0) FILE_TIMESTAMP f_mtime (struct file *file, int search); #define file_mtime_1(f, v) \ ((f)->last_mtime == UNKNOWN_MTIME ? f_mtime ((f), v) : (f)->last_mtime) /* Special timestamp values. */ /* The file's timestamp is not yet known. */ #define UNKNOWN_MTIME 0 /* The file does not exist. */ #define NONEXISTENT_MTIME 1 /* The file does not exist, and we assume that it is older than any actual file. */ #define OLD_MTIME 2 /* The smallest and largest ordinary timestamps. */ #define ORDINARY_MTIME_MIN (OLD_MTIME + 1) #define ORDINARY_MTIME_MAX ((FILE_TIMESTAMP_S (NEW_MTIME) \ << FILE_TIMESTAMP_LO_BITS) \ + ORDINARY_MTIME_MIN + FILE_TIMESTAMPS_PER_S - 1) /* Modtime value to use for 'infinitely new'. We used to get the current time from the system and use that whenever we wanted 'new'. But that causes trouble when the machine running make and the machine holding a file have different ideas about what time it is; and can also lose for 'force' targets, which need to be considered newer than anything that depends on them, even if said dependents' modtimes are in the future. */ #define NEW_MTIME INTEGER_TYPE_MAXIMUM (FILE_TIMESTAMP) #define check_renamed(file) \ while ((file)->renamed != 0) (file) = (file)->renamed /* No ; here. */ /* Have we snapped deps yet? */ extern int snapped_deps; make-4.3/src/makeint.h0000644000175000017500000005511213611136373011616 00000000000000/* Miscellaneous global declarations and portability cruft for GNU Make. Copyright (C) 1988-2020 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 . */ /* We use instead of "config.h" so that a compilation using -I. -I$srcdir will use ./config.h rather than $srcdir/config.h (which it would do because makeint.h was found in $srcdir). */ #include #undef HAVE_CONFIG_H #define HAVE_CONFIG_H 1 /* Specify we want GNU source code. This must be defined before any system headers are included. */ #define _GNU_SOURCE 1 /* AIX requires this to be the first thing in the file. */ #if HAVE_ALLOCA_H # include #else # ifdef _AIX #pragma alloca # else # if !defined(__GNUC__) && !defined(WINDOWS32) # ifndef alloca /* predefined by HP cc +Olibcalls */ char *alloca (); # endif # endif # endif #endif /* Disable assert() unless we're a maintainer. Some asserts are compute-intensive. */ #ifndef MAKE_MAINTAINER_MODE # define NDEBUG 1 #endif /* Include the externally-visible content. Be sure to use the local one, and not one installed on the system. Define GMK_BUILDING_MAKE for proper selection of dllexport/dllimport declarations for MS-Windows. */ #ifdef WINDOWS32 # define GMK_BUILDING_MAKE #endif #include "gnumake.h" #ifdef CRAY /* This must happen before #include so that the declaration therein is changed. */ # define signal bsdsignal #endif /* If we're compiling for the dmalloc debugger, turn off string inlining. */ #if defined(HAVE_DMALLOC_H) && defined(__GNUC__) # define __NO_STRING_INLINES #endif #include #include #include #include #include #include #ifdef HAVE_SYS_TIMEB_H /* SCO 3.2 "devsys 4.2" has a prototype for 'ftime' in that bombs unless has been included first. */ # include #endif #if TIME_WITH_SYS_TIME # include # include #else # if HAVE_SYS_TIME_H # include # else # include # endif #endif #include #ifndef errno extern int errno; #endif #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 # include /* Ultrix's unistd.h always defines _POSIX_VERSION, but you only get POSIX.1 behavior with 'cc -YPOSIX', which predefines POSIX itself! */ # if defined (_POSIX_VERSION) && !defined (ultrix) && !defined (VMS) # define POSIX 1 # endif #endif /* Some systems define _POSIX_VERSION but are not really POSIX.1. */ #if (defined (butterfly) || defined (__arm) || (defined (__mips) && defined (_SYSTYPE_SVR3)) || (defined (sequent) && defined (i386))) # undef POSIX #endif #if !defined (POSIX) && defined (_AIX) && defined (_POSIX_SOURCE) # define POSIX 1 #endif #ifndef RETSIGTYPE # define RETSIGTYPE void #endif #ifndef sigmask # define sigmask(sig) (1 << ((sig) - 1)) #endif #ifndef HAVE_SA_RESTART # define SA_RESTART 0 #endif #ifdef HAVE_VFORK_H # include #endif #ifdef HAVE_LIMITS_H # include #endif #ifdef HAVE_SYS_PARAM_H # include #endif #ifndef PATH_MAX # ifndef POSIX # define PATH_MAX MAXPATHLEN # endif #endif #ifndef MAXPATHLEN # define MAXPATHLEN 1024 #endif #ifdef PATH_MAX # define GET_PATH_MAX PATH_MAX # define PATH_VAR(var) char var[PATH_MAX+1] #else # define NEED_GET_PATH_MAX 1 # define GET_PATH_MAX (get_path_max ()) # define PATH_VAR(var) char *var = alloca (GET_PATH_MAX+1) unsigned int get_path_max (void); #endif #ifndef CHAR_BIT # define CHAR_BIT 8 #endif #ifndef USHRT_MAX # define USHRT_MAX 65535 #endif /* Nonzero if the integer type T is signed. Use <= to avoid GCC warnings about always-false expressions. */ #define INTEGER_TYPE_SIGNED(t) ((t) -1 <= 0) /* The minimum and maximum values for the integer type T. Use ~ (t) 0, not -1, for portability to 1's complement hosts. */ #define INTEGER_TYPE_MINIMUM(t) \ (! INTEGER_TYPE_SIGNED (t) ? (t) 0 : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1)) #define INTEGER_TYPE_MAXIMUM(t) (~ (t) 0 - INTEGER_TYPE_MINIMUM (t)) #ifndef CHAR_MAX # define CHAR_MAX INTEGER_TYPE_MAXIMUM (char) #endif #ifdef STAT_MACROS_BROKEN # ifdef S_ISREG # undef S_ISREG # endif # ifdef S_ISDIR # undef S_ISDIR # endif #endif /* STAT_MACROS_BROKEN. */ #ifndef S_ISREG # define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG) #endif #ifndef S_ISDIR # define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR) #endif #ifdef VMS # include # include # include # include # include /* Needed to use alloca on VMS. */ # include 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 #if !defined(__attribute__) && (__GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__) /* Don't use __attribute__ if it's not supported. */ # define ATTRIBUTE(x) #else # define ATTRIBUTE(x) __attribute__ (x) #endif /* The __-protected variants of 'format' and 'printf' attributes are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */ #if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) # define __format__ format # define __printf__ printf #endif #define UNUSED ATTRIBUTE ((unused)) #define NORETURN ATTRIBUTE ((noreturn)) #if defined (STDC_HEADERS) || defined (__GNU_LIBRARY__) # include # include # define ANSI_STRING 1 #else /* No standard headers. */ # ifdef HAVE_STRING_H # include # define ANSI_STRING 1 # else # include # endif # ifdef HAVE_MEMORY_H # include # endif # ifdef HAVE_STDLIB_H # include # else void *malloc (int); void *realloc (void *, int); void free (void *); void abort (void) NORETURN; void exit (int) NORETURN; # endif /* HAVE_STDLIB_H. */ #endif /* Standard headers. */ /* These should be in stdlib.h. Make sure we have them. */ #ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 #endif #ifndef EXIT_FAILURE # define EXIT_FAILURE 1 #endif #ifndef ANSI_STRING /* SCO Xenix has a buggy macro definition in . */ #undef strerror #if !defined(__DECC) char *strerror (int errnum); #endif #endif /* !ANSI_STRING. */ #undef ANSI_STRING #if HAVE_INTTYPES_H # include #endif #if HAVE_STDINT_H # include #endif #define FILE_TIMESTAMP uintmax_t #if !defined(HAVE_STRSIGNAL) char *strsignal (int signum); #endif #if !defined(HAVE_UMASK) typedef int mode_t; extern mode_t umask (mode_t); #endif /* ISDIGIT offers the following features: - Its arg may be any int or unsigned int; it need not be an unsigned char. - It's guaranteed to evaluate its argument exactly once. NOTE! Make relies on this behavior, don't change it! - It's typically faster. POSIX 1003.2-1992 section 2.5.2.1 page 50 lines 1556-1558 says that only '0' through '9' are digits. Prefer ISDIGIT to isdigit() unless it's important to use the locale's definition of 'digit' even when the host does not conform to POSIX. */ #define ISDIGIT(c) ((unsigned) (c) - '0' <= 9) /* Test if two strings are equal. Is this worthwhile? Should be profiled. */ #define streq(a, b) \ ((a) == (b) || \ (*(a) == *(b) && (*(a) == '\0' || !strcmp ((a) + 1, (b) + 1)))) /* Test if two strings are equal, but match case-insensitively on systems which have case-insensitive filesystems. Should only be used for filenames! */ #ifdef HAVE_CASE_INSENSITIVE_FS # define patheq(a, b) \ ((a) == (b) \ || (tolower((unsigned char)*(a)) == tolower((unsigned char)*(b)) \ && (*(a) == '\0' || !strcasecmp ((a) + 1, (b) + 1)))) #else # define patheq(a, b) streq(a, b) #endif #define strneq(a, b, l) (strncmp ((a), (b), (l)) == 0) #if defined(ENUM_BITFIELDS) || (defined(__GNUC__) && !defined(__STRICT_ANSI__)) # define ENUM_BITFIELD(bits) :bits #else # define ENUM_BITFIELD(bits) #endif /* Handle gettext and locales. */ #if HAVE_LOCALE_H # include #else # define setlocale(category, locale) #endif #include #define _(msgid) gettext (msgid) #define N_(msgid) gettext_noop (msgid) #define S_(msg1,msg2,num) ngettext (msg1,msg2,num) /* This is needed for getcwd() and chdir(), on some W32 systems. */ #if defined(HAVE_DIRECT_H) # include #endif #ifdef WINDOWS32 # include # include # define pipe(_p) _pipe((_p), 512, O_BINARY) # define kill(_pid,_sig) w32_kill((_pid),(_sig)) /* MSVC and Watcom C don't have ftruncate. */ # if defined(_MSC_VER) || defined(__WATCOMC__) # define ftruncate(_fd,_len) _chsize(_fd,_len) # endif /* MinGW64 doesn't have _S_ISDIR. */ # ifndef _S_ISDIR # define _S_ISDIR(m) S_ISDIR(m) # endif void sync_Path_environment (void); int w32_kill (pid_t pid, int sig); int find_and_set_default_shell (const char *token); /* indicates whether or not we have Bourne shell */ extern int no_default_sh_exe; /* is default_shell unixy? */ extern int unixy_shell; /* We don't have a preferred fixed value for LOCALEDIR. */ # ifndef LOCALEDIR # define LOCALEDIR NULL # endif /* Include only the minimal stuff from windows.h. */ # define WIN32_LEAN_AND_MEAN #endif /* WINDOWS32 */ #define ANY_SET(_v,_m) (((_v)&(_m)) != 0) #define NONE_SET(_v,_m) (! ANY_SET ((_v),(_m))) #define MAP_NUL 0x0001 #define MAP_BLANK 0x0002 #define MAP_NEWLINE 0x0004 #define MAP_COMMENT 0x0008 #define MAP_SEMI 0x0010 #define MAP_EQUALS 0x0020 #define MAP_COLON 0x0040 #define MAP_VARSEP 0x0080 #define MAP_PIPE 0x0100 #define MAP_DOT 0x0200 #define MAP_COMMA 0x0400 /* These are the valid characters for a user-defined function. */ #define MAP_USERFUNC 0x2000 /* This means not only a '$', but skip the variable reference. */ #define MAP_VARIABLE 0x4000 /* The set of characters which are directory separators is OS-specific. */ #define MAP_DIRSEP 0x8000 #ifdef VMS # define MAP_VMSCOMMA MAP_COMMA #else # define MAP_VMSCOMMA 0x0000 #endif #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) /* We can't run setrlimit when using posix_spawn. */ #if defined(HAVE_SYS_RESOURCE_H) && defined(HAVE_GETRLIMIT) && defined(HAVE_SETRLIMIT) && !defined(USE_POSIX_SPAWN) # define SET_STACK_SIZE #endif #ifdef SET_STACK_SIZE # include extern struct rlimit stack_limit; #endif #include #define NILF ((floc *)0) #define CSTRLEN(_s) (sizeof (_s)-1) #define STRING_SIZE_TUPLE(_s) (_s), CSTRLEN(_s) /* 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) DEFAULT_TTYNAME #endif /* 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 floc *flocp, size_t length, const char *fmt, ...) ATTRIBUTE ((__format__ (__printf__, 3, 4))); void fatal (const floc *flocp, size_t length, const char *fmt, ...) ATTRIBUTE ((noreturn, __format__ (__printf__, 3, 4))); void out_of_memory () NORETURN; /* When adding macros to this list be sure to update the value of XGETTEXT_OPTIONS in the po/Makevars file. */ #define O(_t,_a,_f) _t((_a), 0, (_f)) #define OS(_t,_a,_f,_s) _t((_a), strlen (_s), (_f), (_s)) #define OSS(_t,_a,_f,_s1,_s2) _t((_a), strlen (_s1) + strlen (_s2), \ (_f), (_s1), (_s2)) #define OSSS(_t,_a,_f,_s1,_s2,_s3) _t((_a), strlen (_s1) + strlen (_s2) + strlen (_s3), \ (_f), (_s1), (_s2), (_s3)) #define ON(_t,_a,_f,_n) _t((_a), INTSTR_LENGTH, (_f), (_n)) #define ONN(_t,_a,_f,_n1,_n2) _t((_a), INTSTR_LENGTH*2, (_f), (_n1), (_n2)) #define OSN(_t,_a,_f,_s,_n) _t((_a), strlen (_s) + INTSTR_LENGTH, \ (_f), (_s), (_n)) #define ONS(_t,_a,_f,_n,_s) _t((_a), INTSTR_LENGTH + strlen (_s), \ (_f), (_n), (_s)) void die (int) NORETURN; void pfatal_with_name (const char *) NORETURN; void perror_with_name (const char *, const char *); #define xstrlen(_s) ((_s)==NULL ? 0 : strlen (_s)) void *xmalloc (size_t); void *xcalloc (size_t); void *xrealloc (void *, size_t); char *xstrdup (const char *); char *xstrndup (const char *, size_t); char *find_next_token (const char **, size_t *); char *next_token (const char *); char *end_of_token (const char *); void collapse_continuations (char *); char *lindex (const char *, const char *, int); int alpha_compare (const void *, const void *); void print_spaces (unsigned int); char *find_percent (char *); const char *find_percent_cached (const char **); FILE *get_tmpfile (char **, const char *); ssize_t writebuf (int, const void *, size_t); ssize_t readbuf (int, void *, size_t); #ifndef HAVE_MEMRCHR void *memrchr(const void *, int, size_t); #endif #ifndef NO_ARCHIVES int ar_name (const char *); void ar_parse_name (const char *, char **, char **); int ar_touch (const char *); 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, 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); #ifndef VMS int ar_member_touch (const char *arname, const char *memname); #endif #endif int dir_file_exists_p (const char *, const char *); 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); void undefine_default_variables (void); void set_default_suffixes (void); void install_default_suffix_rules (void); void install_default_implicit_rules (void); void build_vpath_lists (void); void construct_vpath_list (char *pattern, char *dirpath); const char *vpath_search (const char *file, FILE_TIMESTAMP *mtime_ptr, unsigned int* vpath_index, unsigned int* path_index); int gpath_search (const char *file, size_t len); void construct_include_path (const char **arg_dirs); void user_access (void); void make_access (void); 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, size_t len); /* Guile support */ 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 floc *flocp); int load_file (const floc *flocp, const char **filename, int noerror); void unload_file (const char *name); /* Maintainer mode support */ #ifdef MAKE_MAINTAINER_MODE # define SPIN(_s) spin (_s) void spin (const char* suffix); #else # define SPIN(_s) #endif /* We omit these declarations on non-POSIX systems which define _POSIX_VERSION, because such systems often declare them in header files anyway. */ #if !defined (__GNU_LIBRARY__) && !defined (POSIX) && !defined (_POSIX_VERSION) && !defined(WINDOWS32) long int atol (); # ifndef VMS long int lseek (); # endif # ifdef HAVE_GETCWD # if !defined(VMS) && !defined(__DECC) char *getcwd (); # endif # else char *getwd (); # define getcwd(buf, len) getwd (buf) # endif #endif /* Not GNU C library or POSIX. */ #if !HAVE_STRCASECMP # if HAVE_STRICMP # define strcasecmp stricmp # elif HAVE_STRCMPI # define strcasecmp strcmpi # else /* Create our own, in misc.c */ int strcasecmp (const char *s1, const char *s2); # endif #endif #if !HAVE_STRNCASECMP # if HAVE_STRNICMP # define strncasecmp strnicmp # elif HAVE_STRNCMPI # define strncasecmp strncmpi # else /* Create our own, in misc.c */ int strncasecmp (const char *s1, const char *s2, int n); # endif #endif #define OUTPUT_SYNC_NONE 0 #define OUTPUT_SYNC_LINE 1 #define OUTPUT_SYNC_TARGET 2 #define OUTPUT_SYNC_RECURSE 3 /* 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, run_silent, ignore_errors_flag, keep_going_flag; extern int print_data_base_flag, question_flag, touch_flag, always_make_flag; extern int env_overrides, no_builtin_rules_flag, no_builtin_variables_flag; extern int print_version_flag, print_directory_flag, check_symlink_flag; 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; /* Resetting the command script introduction prefix character. */ #define RECIPEPREFIX_NAME ".RECIPEPREFIX" #define RECIPEPREFIX_DEFAULT '\t' extern char cmd_prefix; extern unsigned int job_slots; extern double max_load_average; extern const char *program; #ifdef VMS 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 *, pid_t *, int *); int remote_status (int *, int *, int *, int); void block_remote_children (void); void unblock_remote_children (void); int remote_kill (pid_t 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; extern unsigned int commands_started; extern int handling_fatal_signal; #ifndef MIN #define MIN(_a,_b) ((_a)<(_b)?(_a):(_b)) #endif #ifndef MAX #define MAX(_a,_b) ((_a)>(_b)?(_a):(_b)) #endif #define MAKE_SUCCESS 0 #define MAKE_TROUBLE 1 #define MAKE_FAILURE 2 /* Set up heap debugging library dmalloc. */ #ifdef HAVE_DMALLOC_H #include #endif #ifndef initialize_main # ifdef __EMX__ # define initialize_main(pargc, pargv) \ { _wildcard(pargc, pargv); _response(pargc, pargv); } # else # define initialize_main(pargc, pargv) # endif #endif #ifdef __EMX__ # if !defined chdir # define chdir _chdir2 # endif # if !defined getcwd # define getcwd _getcwd2 # endif /* NO_CHDIR2 causes make not to use _chdir2() and _getcwd2() instead of chdir() and getcwd(). This avoids some error messages for the make testsuite but restricts the drive letter support. */ # ifdef NO_CHDIR2 # warning NO_CHDIR2: usage of drive letters restricted # undef chdir # undef getcwd # endif #endif #ifndef initialize_main # define initialize_main(pargc, pargv) #endif /* Some systems (like Solaris, PTX, etc.) do not support the SA_RESTART flag properly according to POSIX. So, we try to wrap common system calls with checks for EINTR. Note that there are still plenty of system calls that can fail with EINTR but this, reportedly, gets the vast majority of failure cases. If you still experience failures you'll need to either get a system where SA_RESTART works, or you need to avoid -j. */ #define EINTRLOOP(_v,_c) while (((_v)=_c)==-1 && errno==EINTR) /* While system calls that return integers are pretty consistent about returning -1 on failure and setting errno in that case, functions that return pointers are not always so well behaved. Sometimes they return NULL for expected behavior: one good example is readdir() which returns NULL at the end of the directory--and _doesn't_ reset errno. So, we have to do it ourselves here. */ #define ENULLLOOP(_v,_c) do { errno = 0; (_v) = _c; } \ while((_v)==0 && errno==EINTR) make-4.3/src/w32/0000755000175000017500000000000013611151240010472 500000000000000make-4.3/src/w32/compat/0000755000175000017500000000000013611151240011755 500000000000000make-4.3/src/w32/compat/posixfcn.c0000644000175000017500000003347613603564437013730 00000000000000/* Replacements for Posix functions and Posix functionality for MS-Windows. Copyright (C) 2013-2020 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 . */ #include #include #include #include #include #include "dlfcn.h" #include "makeint.h" #include "job.h" #ifndef NO_OUTPUT_SYNC /* Support for OUTPUT_SYNC and related functionality. */ /* Emulation of fcntl that supports only F_GETFD and F_SETLKW. */ int fcntl (intptr_t fd, int cmd, ...) { va_list ap; va_start (ap, cmd); switch (cmd) { case F_GETFD: va_end (ap); /* Could have used GetHandleInformation, but that isn't supported on Windows 9X. */ if (_get_osfhandle (fd) == -1) return -1; return 0; case F_SETLKW: { void *buf = va_arg (ap, void *); struct flock *fl = (struct flock *)buf; HANDLE hmutex = (HANDLE)fd; static struct flock last_fl; short last_type = last_fl.l_type; va_end (ap); if (hmutex == INVALID_HANDLE_VALUE || !hmutex) return -1; last_fl = *fl; switch (fl->l_type) { case F_WRLCK: { DWORD result; if (last_type == F_WRLCK) { /* Don't call WaitForSingleObject if we already own the mutex, because doing so will require us to call ReleaseMutex an equal number of times, before the mutex is actually released. */ return 0; } result = WaitForSingleObject (hmutex, INFINITE); switch (result) { case WAIT_OBJECT_0: /* We don't care if the mutex owner crashed or exited. */ case WAIT_ABANDONED: return 0; case WAIT_FAILED: case WAIT_TIMEOUT: /* cannot happen, really */ { DWORD err = GetLastError (); /* Invalidate the last command. */ memset (&last_fl, 0, sizeof (last_fl)); switch (err) { case ERROR_INVALID_HANDLE: case ERROR_INVALID_FUNCTION: errno = EINVAL; return -1; default: errno = EDEADLOCK; return -1; } } } } case F_UNLCK: { /* FIXME: Perhaps we should call ReleaseMutex repatedly until it errors out, to make sure the mutext is released even if we somehow managed to to take ownership multiple times? */ BOOL status = ReleaseMutex (hmutex); if (status) return 0; else { DWORD err = GetLastError (); if (err == ERROR_NOT_OWNER) errno = EPERM; else { memset (&last_fl, 0, sizeof (last_fl)); errno = EINVAL; } return -1; } } default: errno = ENOSYS; return -1; } } default: errno = ENOSYS; va_end (ap); return -1; } } static intptr_t mutex_handle = -1; /* Record in a static variable the mutex handle we were requested to use. That nameless mutex was created by the top-level Make, and its handle was passed to us via inheritance. The value of that handle is passed via the command-line arguments, so that we know which handle to use. */ void record_sync_mutex (const char *str) { char *endp; intptr_t hmutex = strtol (str, &endp, 16); if (*endp == '\0') mutex_handle = hmutex; else { mutex_handle = -1; errno = EINVAL; } } /* Create a new mutex or reuse one created by our parent. */ intptr_t create_mutex (void) { SECURITY_ATTRIBUTES secattr; intptr_t hmutex = -1; /* If we have a mutex handle passed from the parent Make, just use that. */ if (mutex_handle > 0) return mutex_handle; /* We are the top-level Make, and we want the handle to be inherited by our child processes. */ secattr.nLength = sizeof (secattr); secattr.lpSecurityDescriptor = NULL; /* use default security descriptor */ secattr.bInheritHandle = TRUE; hmutex = (intptr_t)CreateMutex (&secattr, FALSE, NULL); if (!hmutex) { DWORD err = GetLastError (); fprintf (stderr, "CreateMutex: error %lu\n", err); errno = ENOLCK; hmutex = -1; } mutex_handle = hmutex; return hmutex; } /* Return non-zero if F1 and F2 are 2 streams representing the same file or pipe or device. */ int same_stream (FILE *f1, FILE *f2) { HANDLE fh1 = (HANDLE)_get_osfhandle (fileno (f1)); HANDLE fh2 = (HANDLE)_get_osfhandle (fileno (f2)); /* Invalid file descriptors get treated as different streams. */ if (fh1 && fh1 != INVALID_HANDLE_VALUE && fh2 && fh2 != INVALID_HANDLE_VALUE) { if (fh1 == fh2) return 1; else { DWORD ftyp1 = GetFileType (fh1), ftyp2 = GetFileType (fh2); if (ftyp1 != ftyp2 || ftyp1 == FILE_TYPE_UNKNOWN || ftyp2 == FILE_TYPE_UNKNOWN) return 0; else if (ftyp1 == FILE_TYPE_CHAR) { /* For character devices, check if they both refer to a console. This loses if both handles refer to the null device (FIXME!), but in that case we don't care in the context of Make. */ DWORD conmode1, conmode2; /* Each process on Windows can have at most 1 console, so if both handles are for the console device, they are the same. We also compare the console mode to distinguish between stdin and stdout/stderr. */ if (GetConsoleMode (fh1, &conmode1) && GetConsoleMode (fh2, &conmode2) && conmode1 == conmode2) return 1; } else { /* For disk files and pipes, compare their unique attributes. */ BY_HANDLE_FILE_INFORMATION bhfi1, bhfi2; /* Pipes get zero in the volume serial number, but do appear to have meaningful information in file index attributes. We test file attributes as well, for a good measure. */ if (GetFileInformationByHandle (fh1, &bhfi1) && GetFileInformationByHandle (fh2, &bhfi2)) return (bhfi1.dwVolumeSerialNumber == bhfi2.dwVolumeSerialNumber && bhfi1.nFileIndexLow == bhfi2.nFileIndexLow && bhfi1.nFileIndexHigh == bhfi2.nFileIndexHigh && bhfi1.dwFileAttributes == bhfi2.dwFileAttributes); } } } return 0; } /* A replacement for tmpfile, since the MSVCRT implementation creates the file in the root directory of the current drive, which might not be writable by our user. Most of the code borrowed from create_batch_file, see job.c. */ FILE * tmpfile (void) { char temp_path[MAXPATHLEN]; unsigned path_size = GetTempPath (sizeof temp_path, temp_path); int path_is_dot = 0; /* The following variable is static so we won't try to reuse a name that was generated a little while ago, because that file might not be on disk yet, since we use FILE_ATTRIBUTE_TEMPORARY below, which tells the OS it doesn't need to flush the cache to disk. If the file is not yet on disk, we might think the name is available, while it really isn't. This happens in parallel builds, where Make doesn't wait for one job to finish before it launches the next one. */ static unsigned uniq = 0; static int second_loop = 0; const char base[] = "gmake_tmpf"; const unsigned sizemax = sizeof base - 1 + 4 + 10 + 10; unsigned pid = GetCurrentProcessId (); if (path_size == 0) { path_size = GetCurrentDirectory (sizeof temp_path, temp_path); path_is_dot = 1; } ++uniq; if (uniq >= 0x10000 && !second_loop) { /* If we already had 64K batch files in this process, make a second loop through the numbers, looking for free slots, i.e. files that were deleted in the meantime. */ second_loop = 1; uniq = 1; } while (path_size > 0 && path_size + sizemax < sizeof temp_path && !(uniq >= 0x10000 && second_loop)) { HANDLE h; sprintf (temp_path + path_size, "%s%s%u-%x.tmp", temp_path[path_size - 1] == '\\' ? "" : "\\", base, pid, uniq); h = CreateFile (temp_path, /* file name */ GENERIC_READ | GENERIC_WRITE | DELETE, /* desired access */ FILE_SHARE_READ | FILE_SHARE_WRITE, /* share mode */ NULL, /* default security attributes */ CREATE_NEW, /* creation disposition */ FILE_ATTRIBUTE_NORMAL | /* flags and attributes */ FILE_ATTRIBUTE_TEMPORARY | FILE_FLAG_DELETE_ON_CLOSE, NULL); /* no template file */ if (h == INVALID_HANDLE_VALUE) { const DWORD er = GetLastError (); if (er == ERROR_FILE_EXISTS || er == ERROR_ALREADY_EXISTS) { ++uniq; if (uniq == 0x10000 && !second_loop) { second_loop = 1; uniq = 1; } } /* The temporary path is not guaranteed to exist, or might not be writable by user. Use the current directory as fallback. */ else if (path_is_dot == 0) { path_size = GetCurrentDirectory (sizeof temp_path, temp_path); path_is_dot = 1; } else { errno = EACCES; break; } } else { int fd = _open_osfhandle ((intptr_t)h, 0); return _fdopen (fd, "w+b"); } } if (uniq >= 0x10000) errno = EEXIST; return NULL; } #endif /* !NO_OUTPUT_SYNC */ #if MAKE_LOAD /* Support for dynamic loading of objects. */ static DWORD last_err; void * dlopen (const char *file, int mode) { char dllfn[MAX_PATH], *p; HANDLE dllhandle; if ((mode & ~(RTLD_LAZY | RTLD_NOW | RTLD_GLOBAL)) != 0) { errno = EINVAL; last_err = ERROR_INVALID_PARAMETER; return NULL; } if (!file) dllhandle = GetModuleHandle (NULL); else { /* MSDN says to be sure to use backslashes in the DLL file name. */ strcpy (dllfn, file); for (p = dllfn; *p; p++) if (*p == '/') *p = '\\'; dllhandle = LoadLibrary (dllfn); } if (!dllhandle) last_err = GetLastError (); return dllhandle; } char * dlerror (void) { static char errbuf[1024]; DWORD ret; if (!last_err) return NULL; ret = FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, last_err, 0, errbuf, sizeof (errbuf), NULL); while (ret > 0 && (errbuf[ret - 1] == '\n' || errbuf[ret - 1] == '\r')) --ret; errbuf[ret] = '\0'; if (!ret) sprintf (errbuf, "Error code %lu", last_err); last_err = 0; return errbuf; } void * dlsym (void *handle, const char *name) { FARPROC addr = NULL; if (!handle || handle == INVALID_HANDLE_VALUE) { last_err = ERROR_INVALID_PARAMETER; return NULL; } addr = GetProcAddress (handle, name); if (!addr) last_err = GetLastError (); return (void *)addr; } int dlclose (void *handle) { if (!handle || handle == INVALID_HANDLE_VALUE) return -1; if (!FreeLibrary (handle)) return -1; return 0; } #endif /* MAKE_LOAD */ /* MS runtime's isatty returns non-zero for any character device, including the null device, which is not what we want. */ int isatty (int fd) { HANDLE fh = (HANDLE) _get_osfhandle (fd); DWORD con_mode; if (fh == INVALID_HANDLE_VALUE) { errno = EBADF; return 0; } if (GetConsoleMode (fh, &con_mode)) return 1; errno = ENOTTY; return 0; } char * ttyname (int fd) { /* This "knows" that Make only asks about stdout and stderr. A more sophisticated implementation should test whether FD is open for input or output. We can do that by looking at the mode returned by GetConsoleMode. */ return "CONOUT$"; } make-4.3/src/w32/compat/dirent.c0000644000175000017500000001241013603564437013345 00000000000000/* Directory entry code for Window platforms. Copyright (C) 1996-2020 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 . */ #include #include #include #include #include #include #include "dirent.h" DIR* opendir(const char* pDirName) { struct stat sb; DIR* pDir; char* pEndDirName; size_t nBufferLen; /* sanity checks */ if (!pDirName) { errno = EINVAL; return NULL; } if (stat(pDirName, &sb) != 0) { errno = ENOENT; return NULL; } if ((sb.st_mode & S_IFMT) != S_IFDIR) { errno = ENOTDIR; return NULL; } /* allocate a DIR structure to return */ pDir = (DIR *) malloc(sizeof (DIR)); if (!pDir) return NULL; /* input directory name length */ nBufferLen = strlen(pDirName); /* copy input directory name to DIR buffer */ strcpy(pDir->dir_pDirectoryName, pDirName); /* point to end of the copied directory name */ pEndDirName = &pDir->dir_pDirectoryName[nBufferLen - 1]; /* if directory name did not end in '/' or '\', add '/' */ if ((*pEndDirName != '/') && (*pEndDirName != '\\')) { pEndDirName++; *pEndDirName = '/'; } /* now append the wildcard character to the buffer */ pEndDirName++; *pEndDirName = '*'; pEndDirName++; *pEndDirName = '\0'; /* other values defaulted */ pDir->dir_nNumFiles = 0; pDir->dir_hDirHandle = INVALID_HANDLE_VALUE; pDir->dir_ulCookie = __DIRENT_COOKIE; return pDir; } void closedir(DIR *pDir) { /* got a valid pointer? */ if (!pDir) { errno = EINVAL; return; } /* sanity check that this is a DIR pointer */ if (pDir->dir_ulCookie != __DIRENT_COOKIE) { errno = EINVAL; return; } /* close the WINDOWS32 directory handle */ if (pDir->dir_hDirHandle != INVALID_HANDLE_VALUE) FindClose(pDir->dir_hDirHandle); free(pDir); return; } struct dirent * readdir(DIR* pDir) { WIN32_FIND_DATA wfdFindData; if (!pDir) { errno = EINVAL; return NULL; } /* sanity check that this is a DIR pointer */ if (pDir->dir_ulCookie != __DIRENT_COOKIE) { errno = EINVAL; return NULL; } if (pDir->dir_nNumFiles == 0) { pDir->dir_hDirHandle = FindFirstFile(pDir->dir_pDirectoryName, &wfdFindData); if (pDir->dir_hDirHandle == INVALID_HANDLE_VALUE) return NULL; } else if (!FindNextFile(pDir->dir_hDirHandle, &wfdFindData)) return NULL; /* bump count for next call to readdir() */ pDir->dir_nNumFiles++; /* fill in struct dirent values */ pDir->dir_sdReturn.d_ino = (ino_t)-1; strcpy(pDir->dir_sdReturn.d_name, wfdFindData.cFileName); if (wfdFindData.dwFileAttributes & FILE_ATTRIBUTE_DEVICE) pDir->dir_sdReturn.d_type = DT_CHR; else if (wfdFindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) pDir->dir_sdReturn.d_type = DT_DIR; else pDir->dir_sdReturn.d_type = DT_REG; return &pDir->dir_sdReturn; } void rewinddir(DIR* pDir) { if (!pDir) { errno = EINVAL; return; } /* sanity check that this is a DIR pointer */ if (pDir->dir_ulCookie != __DIRENT_COOKIE) { errno = EINVAL; return; } /* close the WINDOWS32 directory handle */ if (pDir->dir_hDirHandle != INVALID_HANDLE_VALUE) if (!FindClose(pDir->dir_hDirHandle)) errno = EBADF; /* reset members which control readdir() */ pDir->dir_hDirHandle = INVALID_HANDLE_VALUE; pDir->dir_nNumFiles = 0; return; } void seekdir(DIR* pDir, long nPosition) { if (!pDir) return; /* sanity check that this is a DIR pointer */ if (pDir->dir_ulCookie != __DIRENT_COOKIE) return; /* go back to beginning of directory */ rewinddir(pDir); /* loop until we have found position we care about */ for (--nPosition; nPosition && readdir(pDir); nPosition--); /* flag invalid nPosition value */ if (nPosition) errno = EINVAL; return; } make-4.3/src/w32/w32os.c0000644000175000017500000001306113603564437011555 00000000000000/* Windows32-based operating system interface for GNU Make. Copyright (C) 2016-2020 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 . */ #include "makeint.h" #include #include #include #include #include #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 is limited in the number of objects it can wait for. */ if (slots > process_table_usable_size()) { slots = process_table_usable_size(); 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; DWORD dwHandleCount; DWORD dwEvent; handles = xmalloc(process_table_actual_size() * sizeof(HANDLE)); /* 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 = process_wait_for_multiple_objects ( dwHandleCount, /* number of objects in array */ handles, /* array of objects */ FALSE, /* wait for any object */ INFINITE); /* wait until object is signalled */ free(handles); 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; } void fd_inherit(int fd) { HANDLE fh = (HANDLE)_get_osfhandle(fd); if (fh && fh != INVALID_HANDLE_VALUE) SetHandleInformation(fh, HANDLE_FLAG_INHERIT, 1); } void fd_noinherit(int fd) { HANDLE fh = (HANDLE)_get_osfhandle(fd); if (fh && fh != INVALID_HANDLE_VALUE) SetHandleInformation(fh, HANDLE_FLAG_INHERIT, 0); } make-4.3/src/w32/pathstuff.c0000644000175000017500000002034113603564437012603 00000000000000/* Path conversion for Windows pathnames. Copyright (C) 1996-2020 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 . */ #include "makeint.h" #include #include #include "pathstuff.h" /* * Convert delimiter separated vpath to Canonical format. */ char * convert_vpath_to_windows32(char *Path, char to_delim) { char *etok; /* token separator for old Path */ /* * Convert all spaces to delimiters. Note that pathnames which * contain blanks get trounced here. Use 8.3 format as a workaround. */ for (etok = Path; etok && *etok; etok++) if (ISBLANK ((unsigned char) *etok)) *etok = to_delim; return (convert_Path_to_windows32(Path, to_delim)); } /* * Convert delimiter separated path to Canonical format. */ char * convert_Path_to_windows32(char *Path, char to_delim) { char *etok; /* token separator for old Path */ char *p; /* points to element of old Path */ /* is this a multi-element Path ? */ /* FIXME: Perhaps use ":;\"" in strpbrk to convert all quotes to delimiters as well, as a way to handle quoted directories in PATH? */ for (p = Path, etok = strpbrk(p, ":;"); etok; etok = strpbrk(p, ":;")) if ((etok - p) == 1) { if (*(etok - 1) == ';' || *(etok - 1) == ':') { etok[-1] = to_delim; etok[0] = to_delim; p = ++etok; continue; /* ignore empty bucket */ } else if (!isalpha ((unsigned char) *p)) { /* found one to count, handle things like '.' */ *etok = to_delim; p = ++etok; } else if ((*etok == ':') && ((etok = strpbrk(etok+1, ":;")) != NULL)) { /* found one to count, handle drive letter */ *etok = to_delim; p = ++etok; } else /* all finished, force abort */ p += strlen(p); } else if (*p == '"') { /* a quoted directory */ for (p++; *p && *p != '"'; p++) /* skip quoted part */ ; etok = strpbrk(p, ":;"); /* find next delimiter */ if (etok) { *etok = to_delim; p = ++etok; } else p += strlen(p); } else { /* found another one, no drive letter */ *etok = to_delim; p = ++etok; } return Path; } /* * Convert to forward slashes. Resolve to full pathname optionally */ char * w32ify(const char *filename, int resolve) { static char w32_path[FILENAME_MAX]; char *p; if (resolve) _fullpath(w32_path, filename, sizeof (w32_path)); else strncpy(w32_path, filename, sizeof (w32_path)); for (p = w32_path; p && *p; p++) if (*p == '\\') *p = '/'; return w32_path; } char * getcwd_fs(char* buf, int len) { char *p = getcwd(buf, len); if (p) { char *q = w32ify(buf, 0); strncpy(buf, q, len); } return p; } #ifdef unused /* * Convert delimiter separated pathnames (e.g. PATH) or single file pathname * (e.g. c:/foo, c:\bar) to NutC format. If we are handed a string that * _NutPathToNutc() fails to convert, just return the path we were handed * and assume the caller will know what to do with it (It was probably * a mistake to try and convert it anyway due to some of the bizarre things * that might look like pathnames in makefiles). */ char * convert_path_to_nutc(char *path) { int count; /* count of path elements */ char *nutc_path; /* new NutC path */ int nutc_path_len; /* length of buffer to allocate for new path */ char *pathp; /* pointer to nutc_path used to build it */ char *etok; /* token separator for old path */ char *p; /* points to element of old path */ char sep; /* what flavor of separator used in old path */ char *rval; /* is this a multi-element path ? */ for (p = path, etok = strpbrk(p, ":;"), count = 0; etok; etok = strpbrk(p, ":;")) if ((etok - p) == 1) { if (*(etok - 1) == ';' || *(etok - 1) == ':') { p = ++etok; continue; /* ignore empty bucket */ } else if (etok = strpbrk(etok+1, ":;")) /* found one to count, handle drive letter */ p = ++etok, count++; else /* all finished, force abort */ p += strlen(p); } else /* found another one, no drive letter */ p = ++etok, count++; if (count) { count++; /* x1;x2;x3 <- need to count x3 */ /* * Hazard a guess on how big the buffer needs to be. * We have to convert things like c:/foo to /c=/foo. */ nutc_path_len = strlen(path) + (count*2) + 1; nutc_path = xmalloc(nutc_path_len); pathp = nutc_path; *pathp = '\0'; /* * Loop through PATH and convert one elemnt of the path at at * a time. Single file pathnames will fail this and fall * to the logic below loop. */ for (p = path, etok = strpbrk(p, ":;"); etok; etok = strpbrk(p, ":;")) { /* don't trip up on device specifiers or empty path slots */ if ((etok - p) == 1) if (*(etok - 1) == ';' || *(etok - 1) == ':') { p = ++etok; continue; } else if ((etok = strpbrk(etok+1, ":;")) == NULL) break; /* thing found was a WINDOWS32 pathname */ /* save separator */ sep = *etok; /* terminate the current path element -- temporarily */ *etok = '\0'; #ifdef __NUTC__ /* convert to NutC format */ if (_NutPathToNutc(p, pathp, 0) == FALSE) { free(nutc_path); rval = savestring(path, strlen(path)); return rval; } #else *pathp++ = '/'; *pathp++ = p[0]; *pathp++ = '='; *pathp++ = '/'; strcpy(pathp, &p[2]); #endif pathp += strlen(pathp); *pathp++ = ':'; /* use Unix style path separtor for new path */ *pathp = '\0'; /* make sure we are null terminaed */ /* restore path separator */ *etok = sep; /* point p to first char of next path element */ p = ++etok; } } else { nutc_path_len = strlen(path) + 3; nutc_path = xmalloc(nutc_path_len); pathp = nutc_path; *pathp = '\0'; p = path; } /* * OK, here we handle the last element in PATH (e.g. c of a;b;c) * or the path was a single filename and will be converted * here. Note, testing p here assures that we don't trip up * on paths like a;b; which have trailing delimiter followed by * nothing. */ if (*p != '\0') { #ifdef __NUTC__ if (_NutPathToNutc(p, pathp, 0) == FALSE) { free(nutc_path); rval = savestring(path, strlen(path)); return rval; } #else *pathp++ = '/'; *pathp++ = p[0]; *pathp++ = '='; *pathp++ = '/'; strcpy(pathp, &p[2]); #endif } else *(pathp-1) = '\0'; /* we're already done, don't leave trailing : */ rval = savestring(nutc_path, strlen(nutc_path)); free(nutc_path); return rval; } #endif make-4.3/src/w32/subproc/0000755000175000017500000000000013611151240012147 500000000000000make-4.3/src/w32/subproc/w32err.c0000644000175000017500000000600313603564437013377 00000000000000/* Error handling for Windows Copyright (C) 1996-2020 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 . */ #include #include #include "makeint.h" #include "w32err.h" /* * Description: the windows32 version of perror() * * Returns: a pointer to a static error * * Notes/Dependencies: I got this from * comp.os.ms-windows.programmer.win32 */ const char * map_windows32_error_to_string (DWORD ercode) { /* * We used to have an MSVC-specific '__declspec (thread)' qualifier * here, with the following comment: * * __declspec (thread) necessary if you will use multiple threads on MSVC * * However, Make was never multithreaded on Windows (except when * Ctrl-C is hit, in which case the main thread is stopped * immediately, so it doesn't matter in this context). The functions * on sub_proc.c that started and stopped additional threads were * never used, and are now #ifdef'ed away. Until we need more than * one thread, we have no problems with the following buffer being * static. (If and when we do need it to be in thread-local storage, * the corresponding GCC qualifier is '__thread'.) */ static char szMessageBuffer[128]; /* Fill message buffer with a default message in * case FormatMessage fails */ wsprintf (szMessageBuffer, "Error %ld\n", ercode); /* * Special code for winsock error handling. */ if (ercode > WSABASEERR) { #if 0 HMODULE hModule = GetModuleHandle("wsock32"); if (hModule != NULL) { FormatMessage(FORMAT_MESSAGE_FROM_HMODULE, hModule, ercode, LANG_NEUTRAL, szMessageBuffer, sizeof(szMessageBuffer), NULL); FreeLibrary(hModule); } #else O (fatal, NILF, szMessageBuffer); #endif } else { /* * Default system message handling */ FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, ercode, LANG_NEUTRAL, szMessageBuffer, sizeof(szMessageBuffer), NULL); } return szMessageBuffer; } make-4.3/src/w32/subproc/sub_proc.c0000644000175000017500000014652213603564437014102 00000000000000/* Process handling for Windows. Copyright (C) 1996-2020 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 . */ #include #include #include #include #include /* for _get_osfhandle */ #ifdef _MSC_VER # include /* for intptr_t */ #else # include #endif #include #include /* for msvc _beginthreadex, _endthreadex */ #include #include #include "makeint.h" #include "filedef.h" #include "variable.h" #include "sub_proc.h" #include "proc.h" #include "w32err.h" #include "debug.h" #include "os.h" #define GMAKE_MAXIMUM_WAIT_OBJECTS (MAXIMUM_WAIT_OBJECTS * MAXIMUM_WAIT_OBJECTS) /* We need to move these special-case return codes out-of-band */ #define GMAKE_WAIT_TIMEOUT 0xFFFF0102L #define GMAKE_WAIT_ABANDONED_0 0x00080000L static char *make_command_line(char *shell_name, char *exec_path, char **argv); typedef struct sub_process_t { intptr_t sv_stdin[2]; intptr_t sv_stdout[2]; intptr_t sv_stderr[2]; int using_pipes; char *inp; DWORD incnt; char * volatile outp; volatile DWORD outcnt; char * volatile errp; volatile DWORD errcnt; pid_t pid; int exit_code; int signal; long last_err; long lerrno; } sub_process; /* keep track of children so we can implement a waitpid-like routine */ static sub_process *proc_array[GMAKE_MAXIMUM_WAIT_OBJECTS]; static unsigned int proc_index = 0; static unsigned int fake_exits_pending = 0; /* * Address the scalability limit intrisic to WaitForMultipleOjects by * calling WaitForMultipleObjects on 64 element chunks of the input * array with 0 timeout. Exit with an appropriately conditioned result * or repeat again every 10 ms if no handle has signaled and the * requested timeout was not zero. */ DWORD process_wait_for_multiple_objects( DWORD nCount, const HANDLE *lpHandles, BOOL bWaitAll, DWORD dwMilliseconds ) { assert(nCount <= GMAKE_MAXIMUM_WAIT_OBJECTS); if (nCount <= MAXIMUM_WAIT_OBJECTS) { DWORD retVal = WaitForMultipleObjects(nCount, lpHandles, bWaitAll, dwMilliseconds); return (retVal == WAIT_TIMEOUT) ? GMAKE_WAIT_TIMEOUT : retVal; } else { for (;;) { DWORD objectCount = nCount; int blockCount = 0; DWORD retVal; assert(bWaitAll == FALSE); /* This logic only works for this use case */ assert(dwMilliseconds == 0 || dwMilliseconds == INFINITE); /* No support for timeouts */ for (; objectCount > 0; blockCount++) { DWORD n = objectCount <= MAXIMUM_WAIT_OBJECTS ? objectCount : MAXIMUM_WAIT_OBJECTS; objectCount -= n; retVal = WaitForMultipleObjects(n, &lpHandles[blockCount * MAXIMUM_WAIT_OBJECTS], FALSE, 0); switch (retVal) { case WAIT_TIMEOUT: retVal = GMAKE_WAIT_TIMEOUT; continue; break; case WAIT_FAILED: fprintf(stderr,"WaitForMultipleOjbects failed waiting with error %lu\n", GetLastError()); break; default: if (retVal >= WAIT_ABANDONED_0) { assert(retVal < WAIT_ABANDONED_0 + MAXIMUM_WAIT_OBJECTS); retVal += blockCount * MAXIMUM_WAIT_OBJECTS - WAIT_ABANDONED_0 + GMAKE_WAIT_ABANDONED_0; } else { assert(retVal < WAIT_OBJECT_0 + MAXIMUM_WAIT_OBJECTS); retVal += blockCount * MAXIMUM_WAIT_OBJECTS; } break; } return retVal; } if (dwMilliseconds == 0) return retVal; Sleep(10); /* Sleep for 10 ms */ } } } /* * Fill a HANDLE list with handles to wait for. */ DWORD process_set_handles(HANDLE *handles) { DWORD count = 0; unsigned int i; /* Build array of handles to wait for */ 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[count++] = (HANDLE) proc_array[i]->pid; } return count; } /* * When a process has been waited for, adjust the wait state * array so that we don't wait for it again */ static void process_adjust_wait_state(sub_process* pproc) { unsigned int i; if (!proc_index) return; for (i = 0; i < proc_index; i++) if (proc_array[i]->pid == pproc->pid) break; if (i < proc_index) { proc_index--; if (i != proc_index) memmove(&proc_array[i], &proc_array[i+1], (proc_index-i) * sizeof(sub_process*)); proc_array[proc_index] = NULL; } } /* * Waits for any of the registered child processes to finish. */ static sub_process * process_wait_for_any_private(int block, DWORD* pdwWaitStatus) { HANDLE handles[GMAKE_MAXIMUM_WAIT_OBJECTS]; DWORD retval, which; unsigned int i; if (!proc_index) return NULL; /* build array of handles to wait for */ for (i = 0; i < proc_index; i++) { handles[i] = (HANDLE) proc_array[i]->pid; if (fake_exits_pending && proc_array[i]->exit_code) break; } /* wait for someone to exit */ if (!fake_exits_pending) { retval = process_wait_for_multiple_objects(proc_index, handles, FALSE, (block ? INFINITE : 0)); which = retval - WAIT_OBJECT_0; } else { fake_exits_pending--; retval = !WAIT_FAILED; which = i; } /* If the pointer is not NULL, set the wait status result variable. */ if (pdwWaitStatus) *pdwWaitStatus = (retval == GMAKE_WAIT_TIMEOUT) ? WAIT_TIMEOUT : retval; /* return pointer to process */ if ((retval == GMAKE_WAIT_TIMEOUT) || (retval == WAIT_FAILED)) { return NULL; } else { sub_process* pproc = proc_array[which]; process_adjust_wait_state(pproc); return pproc; } } /* * Terminate a process. */ BOOL process_kill(HANDLE proc, int signal) { sub_process* pproc = (sub_process*) proc; pproc->signal = signal; return (TerminateProcess((HANDLE) pproc->pid, signal)); } /* * Returns true when we have no more available slots in our process table. */ BOOL process_table_full() { extern int shell_function_pid; /* Reserve slots for jobserver_semaphore if we have one and the shell function if not active */ return(proc_index >= GMAKE_MAXIMUM_WAIT_OBJECTS - jobserver_enabled() - (shell_function_pid == 0)); } /* * Returns the maximum number of job slots we can support when using the jobserver. */ int process_table_usable_size() { /* Reserve slots for jobserver_semaphore and shell function */ return(GMAKE_MAXIMUM_WAIT_OBJECTS - 2); } /* * Returns the actual size of the process table. */ int process_table_actual_size() { return(GMAKE_MAXIMUM_WAIT_OBJECTS); } /* * Use this function to register processes you wish to wait for by * calling process_file_io(NULL) or process_wait_any(). This must be done * because it is possible for callers of this library to reuse the same * handle for multiple processes launches :-( */ void process_register(HANDLE proc) { assert(proc_index < GMAKE_MAXIMUM_WAIT_OBJECTS); proc_array[proc_index++] = (sub_process *) proc; } /* * Public function which works kind of like waitpid(). Wait for any * of the children to die and return results. To call this function, * you must do 1 of things: * * x = process_easy(...); * * or * * x = process_init_fd(); * process_register(x); * * or * * x = process_init(); * process_register(x); * * You must NOT then call process_pipe_io() because this function is * not capable of handling automatic notification of any child * death. */ HANDLE process_wait_for_any(int block, DWORD* pdwWaitStatus) { sub_process* pproc = process_wait_for_any_private(block, pdwWaitStatus); if (!pproc) return NULL; else { /* * Ouch! can't tell caller if this fails directly. Caller * will have to use process_last_err() */ (void) process_file_io(pproc); return ((HANDLE) pproc); } } long process_signal(HANDLE proc) { if (proc == INVALID_HANDLE_VALUE) return 0; return (((sub_process *)proc)->signal); } long process_last_err(HANDLE proc) { if (proc == INVALID_HANDLE_VALUE) return ERROR_INVALID_HANDLE; return (((sub_process *)proc)->last_err); } long process_exit_code(HANDLE proc) { if (proc == INVALID_HANDLE_VALUE) return EXIT_FAILURE; return (((sub_process *)proc)->exit_code); } /* 2006-02: All the following functions are currently unused. All of them would crash gmake if called with argument INVALID_HANDLE_VALUE. Hence whoever wants to use one of this functions must invent and implement a reasonable error handling for this function. char * process_outbuf(HANDLE proc) { return (((sub_process *)proc)->outp); } char * process_errbuf(HANDLE proc) { return (((sub_process *)proc)->errp); } int process_outcnt(HANDLE proc) { return (((sub_process *)proc)->outcnt); } int process_errcnt(HANDLE proc) { return (((sub_process *)proc)->errcnt); } void process_pipes(HANDLE proc, int pipes[3]) { pipes[0] = ((sub_process *)proc)->sv_stdin[0]; pipes[1] = ((sub_process *)proc)->sv_stdout[0]; pipes[2] = ((sub_process *)proc)->sv_stderr[0]; return; } */ HANDLE process_init() { sub_process *pproc; /* * open file descriptors for attaching stdin/stdout/sterr */ HANDLE stdin_pipes[2]; HANDLE stdout_pipes[2]; HANDLE stderr_pipes[2]; SECURITY_ATTRIBUTES inherit; BYTE sd[SECURITY_DESCRIPTOR_MIN_LENGTH]; pproc = malloc(sizeof(*pproc)); memset(pproc, 0, sizeof(*pproc)); /* We can't use NULL for lpSecurityDescriptor because that uses the default security descriptor of the calling process. Instead we use a security descriptor with no DACL. This allows nonrestricted access to the associated objects. */ if (!InitializeSecurityDescriptor((PSECURITY_DESCRIPTOR)(&sd), SECURITY_DESCRIPTOR_REVISION)) { pproc->last_err = GetLastError(); pproc->lerrno = E_SCALL; return((HANDLE)pproc); } inherit.nLength = sizeof(inherit); inherit.lpSecurityDescriptor = (PSECURITY_DESCRIPTOR)(&sd); inherit.bInheritHandle = TRUE; /* By convention, parent gets pipe[0], and child gets pipe[1]. This means the READ side of stdin pipe goes into pipe[1] and the WRITE side of the stdout and stderr pipes go into pipe[1]. */ if (CreatePipe( &stdin_pipes[1], &stdin_pipes[0], &inherit, 0) == FALSE || CreatePipe( &stdout_pipes[0], &stdout_pipes[1], &inherit, 0) == FALSE || CreatePipe( &stderr_pipes[0], &stderr_pipes[1], &inherit, 0) == FALSE) { pproc->last_err = GetLastError(); pproc->lerrno = E_SCALL; return((HANDLE)pproc); } /* Mark the parent sides of the pipes as non-inheritable. */ if (SetHandleInformation(stdin_pipes[0], HANDLE_FLAG_INHERIT, 0) == FALSE || SetHandleInformation(stdout_pipes[0], HANDLE_FLAG_INHERIT, 0) == FALSE || SetHandleInformation(stderr_pipes[0], HANDLE_FLAG_INHERIT, 0) == FALSE) { pproc->last_err = GetLastError(); pproc->lerrno = E_SCALL; return((HANDLE)pproc); } pproc->sv_stdin[0] = (intptr_t) stdin_pipes[0]; pproc->sv_stdin[1] = (intptr_t) stdin_pipes[1]; pproc->sv_stdout[0] = (intptr_t) stdout_pipes[0]; pproc->sv_stdout[1] = (intptr_t) stdout_pipes[1]; pproc->sv_stderr[0] = (intptr_t) stderr_pipes[0]; pproc->sv_stderr[1] = (intptr_t) stderr_pipes[1]; pproc->using_pipes = 1; pproc->lerrno = 0; return((HANDLE)pproc); } HANDLE process_init_fd(HANDLE stdinh, HANDLE stdouth, HANDLE stderrh) { sub_process *pproc; pproc = malloc(sizeof(*pproc)); if (pproc) { memset(pproc, 0, sizeof(*pproc)); /* * Just pass the provided file handles to the 'child * side' of the pipe, bypassing pipes altogether. */ pproc->sv_stdin[1] = (intptr_t) stdinh; pproc->sv_stdout[1] = (intptr_t) stdouth; pproc->sv_stderr[1] = (intptr_t) stderrh; pproc->last_err = pproc->lerrno = 0; } return((HANDLE)pproc); } static HANDLE find_file(const char *exec_path, const char *path_var, char *full_fname, DWORD full_len) { HANDLE exec_handle; char *fname; char *ext; DWORD req_len; int i; static const char *extensions[] = /* Should .com come before no-extension case? */ { ".exe", ".cmd", ".bat", "", ".com", NULL }; fname = xmalloc(strlen(exec_path) + 5); strcpy(fname, exec_path); ext = fname + strlen(fname); for (i = 0; extensions[i]; i++) { strcpy(ext, extensions[i]); if (((req_len = SearchPath (path_var, fname, NULL, full_len, full_fname, NULL)) > 0 /* For compatibility with previous code, which used OpenFile, and with Windows operation in general, also look in various default locations, such as Windows directory and Windows System directory. Warning: this also searches PATH in the Make's environment, which might not be what the Makefile wants, but it seems to be OK as a fallback, after the previous SearchPath failed to find on child's PATH. */ || (req_len = SearchPath (NULL, fname, NULL, full_len, full_fname, NULL)) > 0) && req_len <= full_len && (exec_handle = CreateFile(full_fname, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) != INVALID_HANDLE_VALUE) { free(fname); return(exec_handle); } } free(fname); return INVALID_HANDLE_VALUE; } /* * Return non-zero of FNAME specifies a batch file and its name * includes embedded whitespace. */ static int batch_file_with_spaces(const char *fname) { size_t fnlen = strlen(fname); return (fnlen > 4 && (_strnicmp(fname + fnlen - 4, ".bat", 4) == 0 || _strnicmp(fname + fnlen - 4, ".cmd", 4) == 0) /* The set of characters in the 2nd arg to strpbrk should be the same one used by make_command_line below to decide whether an argv[] element needs quoting. */ && strpbrk(fname, " \t") != NULL); } /* * Description: Create the child process to be helped * * Returns: success <=> 0 * * Notes/Dependencies: */ long process_begin( HANDLE proc, char **argv, char **envp, char *exec_path, char *as_user) { sub_process *pproc = (sub_process *)proc; char *shell_name = 0; int file_not_found=0; HANDLE exec_handle; char exec_fname[MAX_PATH]; const char *path_var = NULL; char **ep; char buf[MAX_PATH]; DWORD bytes_returned; DWORD flags; char *command_line; STARTUPINFO startInfo; PROCESS_INFORMATION procInfo; char *envblk=NULL; size_t envsize_needed = 0; int pass_null_exec_path = 0; /* * Shell script detection... if the exec_path starts with #! then * we want to exec shell-script-name exec-path, not just exec-path * NT doesn't recognize #!/bin/sh or #!/etc/Tivoli/bin/perl. We do not * hard-code the path to the shell or perl or whatever: Instead, we * assume it's in the path somewhere (generally, the NT tools * bin directory) */ /* Use the Makefile's value of PATH to look for the program to execute, because it could be different from Make's PATH (e.g., if the target sets its own value. */ if (envp) for (ep = envp; *ep; ep++) { if (strncmp (*ep, "PATH=", 5) == 0 || strncmp (*ep, "Path=", 5) == 0) { path_var = *ep + 5; break; } } exec_handle = find_file(exec_path, path_var, exec_fname, sizeof(exec_fname)); /* * If we couldn't open the file, just assume that Windows will be * somehow able to find and execute it. If the first character * of the command is '/', assume they set SHELL to a Unixy shell * that have some magic mounts known only to it, and run the whole * command via $SHELL -c "COMMAND" instead. */ if (exec_handle == INVALID_HANDLE_VALUE) { if (exec_path[0] == '/') { char *new_argv0; char **argvi = argv; size_t arglen = 0; strcpy(buf, variable_expand ("$(SHELL)")); shell_name = &buf[0]; strcpy(exec_fname, "-c"); /* Construct a single command string in argv[0]. */ while (*argvi) { arglen += strlen(*argvi) + 1; argvi++; } new_argv0 = xmalloc(arglen + 1); new_argv0[0] = '\0'; for (argvi = argv; *argvi; argvi++) { strcat(new_argv0, *argvi); strcat(new_argv0, " "); } /* Remove the extra blank at the end. */ new_argv0[arglen-1] = '\0'; free(argv[0]); argv[0] = new_argv0; argv[1] = NULL; } else file_not_found++; } else { /* Attempt to read the first line of the file */ if (ReadFile( exec_handle, buf, sizeof(buf) - 1, /* leave room for trailing NULL */ &bytes_returned, 0) == FALSE || bytes_returned < 2) { pproc->last_err = GetLastError(); pproc->lerrno = E_IO; CloseHandle(exec_handle); return(-1); } if (buf[0] == '#' && buf[1] == '!') { /* * This is a shell script... Change the command line from * exec_path args to shell_name exec_path args */ char *p; /* Make sure buf is NULL terminated */ buf[bytes_returned] = 0; /* * Depending on the file system type, etc. the first line * of the shell script may end with newline or newline-carriage-return * Whatever it ends with, cut it off. */ p= strchr(buf, '\n'); if (p) *p = 0; p = strchr(buf, '\r'); if (p) *p = 0; /* * Find base name of shell */ shell_name = strrchr( buf, '/'); if (shell_name) { shell_name++; } else { shell_name = &buf[2];/* skipping "#!" */ } } CloseHandle(exec_handle); } flags = 0; if (file_not_found) command_line = make_command_line( shell_name, exec_path, argv); else { /* If exec_fname includes whitespace, CreateProcess behaves erratically and unreliably, and often fails if argv[0] also includes whitespace (and thus will be quoted by make_command_line below). So in that case, we don't pass exec_fname as the 1st arg to CreateProcess, but instead replace argv[0] with exec_fname (to keep its leading directories and extension as found by find_file), and pass NULL to CreateProcess as its 1st arg. This works around the bugs in CreateProcess, which are probably caused by its passing the command to cmd.exe with some incorrect quoting. */ if (!shell_name && batch_file_with_spaces(exec_fname) && _stricmp(exec_path, argv[0]) == 0) { char *new_argv, *p; char **argvi; size_t arglen; int 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] = new_argv; } command_line = make_command_line( shell_name, exec_fname, argv); } if ( command_line == NULL ) { pproc->last_err = 0; pproc->lerrno = E_NO_MEM; return(-1); } if (envp) { if (arr2envblk(envp, &envblk, &envsize_needed) == FALSE) { pproc->lerrno = E_NO_MEM; free( command_line ); 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 (%Iu bytes).\n", envsize_needed); } pproc->last_err = 0; return(-1); } } if (shell_name || file_not_found || pass_null_exec_path) { exec_path = 0; /* Search for the program in %Path% */ } else { exec_path = exec_fname; } /* * Set up inherited stdin, stdout, stderr for child */ memset(&startInfo, '\0', sizeof(startInfo)); GetStartupInfo(&startInfo); startInfo.dwFlags = STARTF_USESTDHANDLES; startInfo.lpReserved = 0; startInfo.cbReserved2 = 0; startInfo.lpReserved2 = 0; startInfo.hStdInput = (HANDLE)pproc->sv_stdin[1]; startInfo.hStdOutput = (HANDLE)pproc->sv_stdout[1]; startInfo.hStdError = (HANDLE)pproc->sv_stderr[1]; if (as_user) { free(envblk); return -1; } else { DB (DB_JOBS, ("CreateProcess(%s,%s,...)\n", exec_path ? exec_path : "NULL", command_line ? command_line : "NULL")); if (CreateProcess( exec_path, command_line, NULL, 0, /* default security attributes for thread */ TRUE, /* inherit handles (e.g. helper pipes, oserv socket) */ flags, envblk, 0, /* default starting directory */ &startInfo, &procInfo) == FALSE) { pproc->last_err = GetLastError(); pproc->lerrno = E_FORK; fprintf(stderr, "process_begin: CreateProcess(%s, %s, ...) failed.\n", exec_path ? exec_path : "NULL", command_line); free(envblk); free( command_line ); return(-1); } } pproc->pid = (pid_t)procInfo.hProcess; /* Close the thread handle -- we'll just watch the process */ CloseHandle(procInfo.hThread); /* Close the halves of the pipes we don't need */ if ((HANDLE)pproc->sv_stdin[1] != INVALID_HANDLE_VALUE) CloseHandle((HANDLE)pproc->sv_stdin[1]); if ((HANDLE)pproc->sv_stdout[1] != INVALID_HANDLE_VALUE) CloseHandle((HANDLE)pproc->sv_stdout[1]); if ((HANDLE)pproc->sv_stderr[1] != INVALID_HANDLE_VALUE) CloseHandle((HANDLE)pproc->sv_stderr[1]); pproc->sv_stdin[1] = 0; pproc->sv_stdout[1] = 0; pproc->sv_stderr[1] = 0; free( command_line ); free(envblk); pproc->lerrno=0; return 0; } #if 0 /* unused */ static DWORD proc_stdin_thread(sub_process *pproc) { DWORD in_done; for (;;) { if (WriteFile( (HANDLE) pproc->sv_stdin[0], pproc->inp, pproc->incnt, &in_done, NULL) == FALSE) _endthreadex(0); /* This if should never be true for anonymous pipes, but gives us a chance to change I/O mechanisms later. */ if (in_done < pproc->incnt) { pproc->incnt -= in_done; pproc->inp += in_done; } else { _endthreadex(0); } } return 0; /* for compiler warnings only.. not reached. */ } static DWORD proc_stdout_thread(sub_process *pproc) { DWORD bufsize = 1024; char c; DWORD nread; pproc->outp = malloc(bufsize); if (pproc->outp == NULL) _endthreadex(0); pproc->outcnt = 0; for (;;) { if (ReadFile( (HANDLE)pproc->sv_stdout[0], &c, 1, &nread, NULL) == FALSE) { /* map_windows32_error_to_string(GetLastError());*/ _endthreadex(0); } if (nread == 0) _endthreadex(0); if (pproc->outcnt + nread > bufsize) { bufsize += nread + 512; pproc->outp = realloc(pproc->outp, bufsize); if (pproc->outp == NULL) { pproc->outcnt = 0; _endthreadex(0); } } pproc->outp[pproc->outcnt++] = c; } return 0; } static DWORD proc_stderr_thread(sub_process *pproc) { DWORD bufsize = 1024; char c; DWORD nread; pproc->errp = malloc(bufsize); if (pproc->errp == NULL) _endthreadex(0); pproc->errcnt = 0; for (;;) { if (ReadFile( (HANDLE)pproc->sv_stderr[0], &c, 1, &nread, NULL) == FALSE) { map_windows32_error_to_string(GetLastError()); _endthreadex(0); } if (nread == 0) _endthreadex(0); if (pproc->errcnt + nread > bufsize) { bufsize += nread + 512; pproc->errp = realloc(pproc->errp, bufsize); if (pproc->errp == NULL) { pproc->errcnt = 0; _endthreadex(0); } } pproc->errp[pproc->errcnt++] = c; } return 0; } /* * Purpose: collects output from child process and returns results * * Description: * * Returns: * * Notes/Dependencies: */ long process_pipe_io( HANDLE proc, char *stdin_data, int stdin_data_len) { sub_process *pproc = (sub_process *)proc; bool_t stdin_eof = FALSE, stdout_eof = FALSE, stderr_eof = FALSE; HANDLE childhand = (HANDLE) pproc->pid; HANDLE tStdin = NULL, tStdout = NULL, tStderr = NULL; unsigned int dwStdin, dwStdout, dwStderr; HANDLE wait_list[4]; DWORD wait_count; DWORD wait_return; HANDLE ready_hand; bool_t child_dead = FALSE; BOOL GetExitCodeResult; /* * Create stdin thread, if needed */ pproc->inp = stdin_data; pproc->incnt = stdin_data_len; if (!pproc->inp) { stdin_eof = TRUE; CloseHandle((HANDLE)pproc->sv_stdin[0]); pproc->sv_stdin[0] = 0; } else { tStdin = (HANDLE) _beginthreadex( 0, 1024, (unsigned (__stdcall *) (void *))proc_stdin_thread, pproc, 0, &dwStdin); if (tStdin == 0) { pproc->last_err = GetLastError(); pproc->lerrno = E_SCALL; goto done; } } /* * Assume child will produce stdout and stderr */ tStdout = (HANDLE) _beginthreadex( 0, 1024, (unsigned (__stdcall *) (void *))proc_stdout_thread, pproc, 0, &dwStdout); tStderr = (HANDLE) _beginthreadex( 0, 1024, (unsigned (__stdcall *) (void *))proc_stderr_thread, pproc, 0, &dwStderr); if (tStdout == 0 || tStderr == 0) { pproc->last_err = GetLastError(); pproc->lerrno = E_SCALL; goto done; } /* * Wait for all I/O to finish and for the child process to exit */ while (!stdin_eof || !stdout_eof || !stderr_eof || !child_dead) { wait_count = 0; if (!stdin_eof) { wait_list[wait_count++] = tStdin; } if (!stdout_eof) { wait_list[wait_count++] = tStdout; } if (!stderr_eof) { wait_list[wait_count++] = tStderr; } if (!child_dead) { wait_list[wait_count++] = childhand; } wait_return = WaitForMultipleObjects(wait_count, wait_list, FALSE, /* don't wait for all: one ready will do */ child_dead? 1000 :INFINITE); /* after the child dies, subthreads have one second to collect all remaining output */ if (wait_return == WAIT_FAILED) { /* map_windows32_error_to_string(GetLastError());*/ pproc->last_err = GetLastError(); pproc->lerrno = E_SCALL; goto done; } ready_hand = wait_list[wait_return - WAIT_OBJECT_0]; if (ready_hand == tStdin) { CloseHandle((HANDLE)pproc->sv_stdin[0]); pproc->sv_stdin[0] = 0; CloseHandle(tStdin); tStdin = 0; stdin_eof = TRUE; } else if (ready_hand == tStdout) { CloseHandle((HANDLE)pproc->sv_stdout[0]); pproc->sv_stdout[0] = 0; CloseHandle(tStdout); tStdout = 0; stdout_eof = TRUE; } else if (ready_hand == tStderr) { CloseHandle((HANDLE)pproc->sv_stderr[0]); pproc->sv_stderr[0] = 0; CloseHandle(tStderr); tStderr = 0; stderr_eof = TRUE; } else if (ready_hand == childhand) { DWORD ierr; GetExitCodeResult = GetExitCodeProcess(childhand, &ierr); if (ierr == CONTROL_C_EXIT) { pproc->signal = SIGINT; } else { pproc->exit_code = ierr; } if (GetExitCodeResult == FALSE) { pproc->last_err = GetLastError(); pproc->lerrno = E_SCALL; goto done; } child_dead = TRUE; } else { /* ?? Got back a handle we didn't query ?? */ pproc->last_err = 0; pproc->lerrno = E_FAIL; goto done; } } done: if (tStdin != 0) CloseHandle(tStdin); if (tStdout != 0) CloseHandle(tStdout); if (tStderr != 0) CloseHandle(tStderr); if (pproc->lerrno) return(-1); else return(0); } #endif /* unused */ /* * Purpose: collects output from child process and returns results * * Description: * * Returns: * * Notes/Dependencies: */ long process_file_io( HANDLE proc) { sub_process *pproc; HANDLE childhand; DWORD wait_return; BOOL GetExitCodeResult; DWORD ierr; if (proc == NULL) pproc = process_wait_for_any_private(1, 0); else pproc = (sub_process *)proc; /* some sort of internal error */ if (!pproc) return -1; childhand = (HANDLE) pproc->pid; /* * This function is poorly named, and could also be used just to wait * for child death if you're doing your own pipe I/O. If that is * the case, close the pipe handles here. */ if (pproc->sv_stdin[0]) { CloseHandle((HANDLE)pproc->sv_stdin[0]); pproc->sv_stdin[0] = 0; } if (pproc->sv_stdout[0]) { CloseHandle((HANDLE)pproc->sv_stdout[0]); pproc->sv_stdout[0] = 0; } if (pproc->sv_stderr[0]) { CloseHandle((HANDLE)pproc->sv_stderr[0]); pproc->sv_stderr[0] = 0; } /* * Wait for the child process to exit */ wait_return = WaitForSingleObject(childhand, INFINITE); if (wait_return != WAIT_OBJECT_0) { /* map_windows32_error_to_string(GetLastError());*/ pproc->last_err = GetLastError(); pproc->lerrno = E_SCALL; goto done2; } GetExitCodeResult = GetExitCodeProcess(childhand, &ierr); if (ierr == CONTROL_C_EXIT) { pproc->signal = SIGINT; } else { pproc->exit_code = ierr; } if (GetExitCodeResult == FALSE) { pproc->last_err = GetLastError(); pproc->lerrno = E_SCALL; } done2: if (pproc->lerrno) return(-1); else return(0); } /* * Description: Clean up any leftover handles, etc. It is up to the * caller to manage and free the input, output, and stderr buffers. */ void process_cleanup( HANDLE proc) { sub_process *pproc = (sub_process *)proc; int i; if (pproc->using_pipes) { for (i= 0; i <= 1; i++) { if ((HANDLE)pproc->sv_stdin[i] && (HANDLE)pproc->sv_stdin[i] != INVALID_HANDLE_VALUE) CloseHandle((HANDLE)pproc->sv_stdin[i]); if ((HANDLE)pproc->sv_stdout[i] && (HANDLE)pproc->sv_stdout[i] != INVALID_HANDLE_VALUE) CloseHandle((HANDLE)pproc->sv_stdout[i]); if ((HANDLE)pproc->sv_stderr[i] && (HANDLE)pproc->sv_stderr[i] != INVALID_HANDLE_VALUE) CloseHandle((HANDLE)pproc->sv_stderr[i]); } } if ((HANDLE)pproc->pid) CloseHandle((HANDLE)pproc->pid); free(pproc); } /* * Description: * Create a command line buffer to pass to CreateProcess * * Returns: the buffer or NULL for failure * Shell case: sh_name a:/full/path/to/script argv[1] argv[2] ... * Otherwise: argv[0] argv[1] argv[2] ... * * Notes/Dependencies: * CreateProcess does not take an argv, so this command creates a * command line for the executable. */ static char * make_command_line( char *shell_name, char *full_exec_path, char **argv) { int argc = 0; char** argvi; int* enclose_in_quotes = NULL; int* enclose_in_quotes_i; size_t bytes_required = 0; char* command_line; char* command_line_i; int have_sh = 0; /* HAVE_CYGWIN_SHELL */ int cygwin_mode = 0; /* HAVE_CYGWIN_SHELL */ #ifdef HAVE_CYGWIN_SHELL cygwin_mode = 1; #endif if (shell_name && full_exec_path) { have_sh = cygwin_mode && strstr(full_exec_path, "sh.exe"); bytes_required = strlen(shell_name) + 1 + strlen(full_exec_path); /* * Skip argv[0] if any, when shell_name is given. * The special case of "-c" in full_exec_path means * argv[0] is not the shell name, but the command string * to pass to the shell. */ if (*argv && strcmp(full_exec_path, "-c")) argv++; /* * Add one for the intervening space. */ if (*argv) bytes_required++; } argvi = argv; while (*(argvi++)) argc++; if (argc) { enclose_in_quotes = (int*) calloc(1, argc * sizeof(int)); if (!enclose_in_quotes) { return NULL; } } /* We have to make one pass through each argv[i] to see if we need * to enclose it in ", so we might as well figure out how much * memory we'll need on the same pass. */ argvi = argv; enclose_in_quotes_i = enclose_in_quotes; while(*argvi) { char* p = *argvi; unsigned int backslash_count = 0; /* * We have to enclose empty arguments in ". */ if (!(*p)) *enclose_in_quotes_i = 1; while(*p) { switch (*p) { case '\"': /* * We have to insert a backslash for each " * and each \ that precedes the ". */ bytes_required += (backslash_count + 1); backslash_count = 0; break; #if !defined(HAVE_MKS_SHELL) && !defined(HAVE_CYGWIN_SHELL) case '\\': backslash_count++; break; #endif /* * At one time we set *enclose_in_quotes_i for '*' or '?' to suppress * wildcard expansion in programs linked with MSVC's SETARGV.OBJ so * that argv in always equals argv out. This was removed. Say you have * such a program named glob.exe. You enter * glob '*' * at the sh command prompt. Obviously the intent is to make glob do the * wildcarding instead of sh. If we set *enclose_in_quotes_i for '*' or '?', * then the command line that glob would see would be * glob "*" * and the _setargv in SETARGV.OBJ would _not_ expand the *. */ case ' ': case '\t': *enclose_in_quotes_i = 1; /* fall through */ default: backslash_count = 0; break; } /* * Add one for each character in argv[i]. */ bytes_required++; p++; } if (*enclose_in_quotes_i) { /* * Add one for each enclosing ", * and one for each \ that precedes the * closing ". */ bytes_required += (backslash_count + 2); } /* * Add one for the intervening space. */ if (*(++argvi)) bytes_required++; enclose_in_quotes_i++; } /* * Add one for the terminating NULL. */ bytes_required++; command_line = (char*) malloc(bytes_required); if (!command_line) { free(enclose_in_quotes); return NULL; } command_line_i = command_line; if (shell_name && full_exec_path) { while(*shell_name) { *(command_line_i++) = *(shell_name++); } *(command_line_i++) = ' '; while(*full_exec_path) { *(command_line_i++) = *(full_exec_path++); } if (*argv) { *(command_line_i++) = ' '; } } argvi = argv; enclose_in_quotes_i = enclose_in_quotes; while(*argvi) { char* p = *argvi; unsigned int backslash_count = 0; if (*enclose_in_quotes_i) { *(command_line_i++) = '\"'; } while(*p) { if (*p == '\"') { if (cygwin_mode && have_sh) { /* HAVE_CYGWIN_SHELL */ /* instead of a \", cygwin likes "" */ *(command_line_i++) = '\"'; } else { /* * We have to insert a backslash for the " * and each \ that precedes the ". */ backslash_count++; while(backslash_count) { *(command_line_i++) = '\\'; backslash_count--; }; } #if !defined(HAVE_MKS_SHELL) && !defined(HAVE_CYGWIN_SHELL) } else if (*p == '\\') { backslash_count++; } else { backslash_count = 0; #endif } /* * Copy the character. */ *(command_line_i++) = *(p++); } if (*enclose_in_quotes_i) { #if !defined(HAVE_MKS_SHELL) && !defined(HAVE_CYGWIN_SHELL) /* * Add one \ for each \ that precedes the * closing ". */ while(backslash_count--) { *(command_line_i++) = '\\'; }; #endif *(command_line_i++) = '\"'; } /* * Append an intervening space. */ if (*(++argvi)) { *(command_line_i++) = ' '; } enclose_in_quotes_i++; } /* * Append the terminating NULL. */ *command_line_i = '\0'; free(enclose_in_quotes); return command_line; } /* * Description: Given an argv and optional envp, launch the process * using the default stdin, stdout, and stderr handles. * Also, register process so that process_wait_for_any_private() * can be used via process_file_io(NULL) or * process_wait_for_any(). * * Returns: * * Notes/Dependencies: */ HANDLE process_easy( char **argv, char **envp, int outfd, int errfd) { HANDLE hIn = INVALID_HANDLE_VALUE; HANDLE hOut = INVALID_HANDLE_VALUE; HANDLE hErr = INVALID_HANDLE_VALUE; HANDLE hProcess, tmpIn, tmpOut, tmpErr; DWORD e; if (process_table_full()) { DB (DB_JOBS, ("process_easy: All process slots used up\n")); return INVALID_HANDLE_VALUE; } /* Standard handles returned by GetStdHandle can be NULL or INVALID_HANDLE_VALUE if the parent process closed them. If that happens, we open the null device and pass its handle to CreateProcess as the corresponding handle to inherit. */ tmpIn = GetStdHandle(STD_INPUT_HANDLE); if (DuplicateHandle(GetCurrentProcess(), tmpIn, GetCurrentProcess(), &hIn, 0, TRUE, DUPLICATE_SAME_ACCESS) == FALSE) { if ((e = GetLastError()) == ERROR_INVALID_HANDLE) { tmpIn = CreateFile("NUL", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (tmpIn != INVALID_HANDLE_VALUE && DuplicateHandle(GetCurrentProcess(), tmpIn, GetCurrentProcess(), &hIn, 0, TRUE, DUPLICATE_SAME_ACCESS) == FALSE) CloseHandle(tmpIn); } if (hIn == INVALID_HANDLE_VALUE) { fprintf(stderr, "process_easy: DuplicateHandle(In) failed (e=%ld)\n", e); return INVALID_HANDLE_VALUE; } } if (outfd >= 0) tmpOut = (HANDLE)_get_osfhandle (outfd); else tmpOut = GetStdHandle (STD_OUTPUT_HANDLE); if (DuplicateHandle(GetCurrentProcess(), tmpOut, GetCurrentProcess(), &hOut, 0, TRUE, DUPLICATE_SAME_ACCESS) == FALSE) { if ((e = GetLastError()) == ERROR_INVALID_HANDLE) { tmpOut = CreateFile("NUL", GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (tmpOut != INVALID_HANDLE_VALUE && DuplicateHandle(GetCurrentProcess(), tmpOut, GetCurrentProcess(), &hOut, 0, TRUE, DUPLICATE_SAME_ACCESS) == FALSE) CloseHandle(tmpOut); } if (hOut == INVALID_HANDLE_VALUE) { fprintf(stderr, "process_easy: DuplicateHandle(Out) failed (e=%ld)\n", e); return INVALID_HANDLE_VALUE; } } if (errfd >= 0) tmpErr = (HANDLE)_get_osfhandle (errfd); else tmpErr = GetStdHandle(STD_ERROR_HANDLE); if (DuplicateHandle(GetCurrentProcess(), tmpErr, GetCurrentProcess(), &hErr, 0, TRUE, DUPLICATE_SAME_ACCESS) == FALSE) { if ((e = GetLastError()) == ERROR_INVALID_HANDLE) { tmpErr = CreateFile("NUL", GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (tmpErr != INVALID_HANDLE_VALUE && DuplicateHandle(GetCurrentProcess(), tmpErr, GetCurrentProcess(), &hErr, 0, TRUE, DUPLICATE_SAME_ACCESS) == FALSE) CloseHandle(tmpErr); } if (hErr == INVALID_HANDLE_VALUE) { fprintf(stderr, "process_easy: DuplicateHandle(Err) failed (e=%ld)\n", e); return INVALID_HANDLE_VALUE; } } hProcess = process_init_fd(hIn, hOut, hErr); if (process_begin(hProcess, argv, envp, argv[0], NULL)) { fake_exits_pending++; /* process_begin() failed: make a note of that. */ if (!((sub_process*) hProcess)->last_err) ((sub_process*) hProcess)->last_err = -1; ((sub_process*) hProcess)->exit_code = process_last_err(hProcess); /* close up unused handles */ if (hIn != INVALID_HANDLE_VALUE) CloseHandle(hIn); if (hOut != INVALID_HANDLE_VALUE) CloseHandle(hOut); if (hErr != INVALID_HANDLE_VALUE) CloseHandle(hErr); } process_register(hProcess); return hProcess; } make-4.3/src/w32/subproc/misc.c0000644000175000017500000000454213603564437013214 00000000000000/* Process handling for Windows Copyright (C) 1996-2020 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 . */ #include #include #include #include #include #include "proc.h" /* * Description: Convert a NULL string terminated UNIX environment block to * an environment block suitable for a windows32 system call * * Returns: TRUE= success, FALSE=fail * * Notes/Dependencies: the environment block is sorted in case-insensitive * order, is double-null terminated, and is a char *, not a char ** */ int _cdecl compare(const void *a1, const void *a2) { return _stricoll(*((char**)a1),*((char**)a2)); } bool_t arr2envblk(char **arr, char **envblk_out, size_t *envsize_needed) { char **tmp; size_t size_needed; int arrcnt; char *ptr; arrcnt = 0; while (arr[arrcnt]) { arrcnt++; } tmp = (char**) calloc(arrcnt + 1, sizeof(char *)); if (!tmp) { return FALSE; } arrcnt = 0; size_needed = *envsize_needed = 0; while (arr[arrcnt]) { tmp[arrcnt] = arr[arrcnt]; size_needed += strlen(arr[arrcnt]) + 1; arrcnt++; } size_needed++; *envsize_needed = size_needed; qsort((void *) tmp, (size_t) arrcnt, sizeof (char*), compare); ptr = *envblk_out = calloc(size_needed, 1); if (!ptr) { free(tmp); return FALSE; } arrcnt = 0; while (tmp[arrcnt]) { strcpy(ptr, tmp[arrcnt]); ptr += strlen(tmp[arrcnt]) + 1; arrcnt++; } free(tmp); return TRUE; } make-4.3/src/w32/subproc/proc.h0000644000175000017500000000172413603564437013230 00000000000000/* Definitions for Windows Copyright (C) 1996-2020 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 . */ #ifndef _PROC_H #define _PROC_H typedef int bool_t; #define E_SCALL 101 #define E_IO 102 #define E_NO_MEM 103 #define E_FORK 104 extern bool_t arr2envblk(char **arr, char **envblk_out, size_t *envsize_needed); #endif make-4.3/src/w32/include/0000755000175000017500000000000013611151240012115 500000000000000make-4.3/src/w32/include/sub_proc.h0000644000175000017500000000500613603564437014044 00000000000000/* Definitions for Windows process invocation. Copyright (C) 1996-2020 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 . */ #ifndef SUB_PROC_H #define SUB_PROC_H /* * Component Name: * * $Date$ * * $Source$ * * $Id$ */ #define EXTERN_DECL(entry, args) extern entry args #define VOID_DECL void EXTERN_DECL(HANDLE process_init, (VOID_DECL)); EXTERN_DECL(HANDLE process_init_fd, (HANDLE stdinh, HANDLE stdouth, HANDLE stderrh)); EXTERN_DECL(long process_begin, (HANDLE proc, char **argv, char **envp, char *exec_path, char *as_user)); EXTERN_DECL(long process_pipe_io, (HANDLE proc, char *stdin_data, 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)); EXTERN_DECL(void process_register, (HANDLE proc)); EXTERN_DECL(HANDLE process_easy, (char** argv, char** env, int outfd, int errfd)); EXTERN_DECL(BOOL process_kill, (HANDLE proc, int signal)); EXTERN_DECL(BOOL process_table_full, (VOID_DECL)); EXTERN_DECL(int process_table_usable_size, (VOID_DECL)); EXTERN_DECL(int process_table_actual_size, (VOID_DECL)); EXTERN_DECL(DWORD process_set_handles, (HANDLE *handles)); EXTERN_DECL(DWORD process_wait_for_multiple_objects, (DWORD, const HANDLE*, BOOL, DWORD)); /* support routines */ EXTERN_DECL(long process_errno, (HANDLE proc)); EXTERN_DECL(long process_last_err, (HANDLE proc)); EXTERN_DECL(long process_exit_code, (HANDLE proc)); EXTERN_DECL(long process_signal, (HANDLE proc)); EXTERN_DECL(char * process_outbuf, (HANDLE proc)); EXTERN_DECL(char * process_errbuf, (HANDLE proc)); EXTERN_DECL(int process_outcnt, (HANDLE proc)); EXTERN_DECL(int process_errcnt, (HANDLE proc)); EXTERN_DECL(void process_pipes, (HANDLE proc, int pipes[3])); #endif make-4.3/src/w32/include/dirent.h0000644000175000017500000000407213603564437013517 00000000000000/* Windows version of dirent.h Copyright (C) 1996-2020 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 . */ #ifndef _DIRENT_H #define _DIRENT_H #ifdef __MINGW32__ # include # include_next #else #include #include #include #include #ifndef NAME_MAX #define NAME_MAX 255 #endif #define __DIRENT_COOKIE 0xfefeabab /* File types for `d_type'. Windows only supports DT_CHR, DT_DIR, and DT_REG. */ enum { DT_UNKNOWN = 0, # define DT_UNKNOWN DT_UNKNOWN DT_FIFO = 1, # define DT_FIFO DT_FIFO DT_CHR = 2, # define DT_CHR DT_CHR DT_DIR = 4, # define DT_DIR DT_DIR DT_BLK = 6, # define DT_BLK DT_BLK DT_REG = 8, # define DT_REG DT_REG DT_LNK = 10, # define DT_LNK DT_LNK DT_SOCK = 12, # define DT_SOCK DT_SOCK DT_WHT = 14 # define DT_WHT DT_WHT }; struct dirent { ino_t d_ino; /* unused - no equivalent on WINDOWS32. */ unsigned char d_type; char d_name[NAME_MAX+1]; /* must come last due to dir.c assumptions. */ }; typedef struct dir_struct { ULONG dir_ulCookie; HANDLE dir_hDirHandle; DWORD dir_nNumFiles; char dir_pDirectoryName[NAME_MAX+1]; struct dirent dir_sdReturn; } DIR; DIR *opendir(const char *); struct dirent *readdir(DIR *); void rewinddir(DIR *); void closedir(DIR *); void seekdir(DIR *, long); #endif /* !__MINGW32__ */ #endif make-4.3/src/w32/include/dlfcn.h0000644000175000017500000000176013603564437013321 00000000000000/* dlfcn.h replacement for MS-Windows build. Copyright (C) 2013-2020 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 . */ #ifndef DLFCN_H #define DLFCN_H #define RTLD_LAZY 1 #define RTLD_NOW 2 #define RTLD_GLOBAL 4 extern void *dlopen (const char *, int); extern void *dlsym (void *, const char *); extern char *dlerror (void); extern int dlclose (void *); #endif /* DLFCN_H */ make-4.3/src/w32/include/pathstuff.h0000644000175000017500000000174413603564437014241 00000000000000/* Definitions for Windows path manipulation. Copyright (C) 1996-2020 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 . */ #ifndef _PATHSTUFF_H #define _PATHSTUFF_H char *convert_Path_to_windows32(char *Path, char to_delim); char *convert_vpath_to_windows32(char *Path, char to_delim); char *w32ify(const char *file, int resolve); char *getcwd_fs(char *buf, int len); #endif make-4.3/src/w32/include/w32err.h0000644000175000017500000000166313603564437013361 00000000000000/* Definitions for Windows error handling. Copyright (C) 1996-2020 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 . */ #ifndef _W32ERR_H_ #define _W32ERR_H_ #ifndef EXTERN_DECL #define EXTERN_DECL(entry, args) entry args #endif EXTERN_DECL(const char * map_windows32_error_to_string, (DWORD error)); #endif /* !_W32ERR_H */ make-4.3/src/os.h0000644000175000017500000000627313603564437010622 00000000000000/* Declarations for operating system interfaces for GNU Make. Copyright (C) 2016-2020 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 . */ /* 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(VMS) || defined(WINDOWS32) || defined(_AMIGA) || defined(__MSDOS__) # define get_bad_stdin() (-1) #else int get_bad_stdin (void); #endif /* Set a file descriptor to close/not close in a subprocess. */ #if defined(VMS) || defined(_AMIGA) || defined(__MSDOS__) # define fd_inherit(_i) 0 # define fd_noinherit(_i) 0 #else void fd_inherit (int); void fd_noinherit (int); #endif make-4.3/src/config.ami0000444000175000017500000002301313611136527011744 00000000000000/* config.h -- hand-massaged for Amiga -*-C-*- Copyright (C) 1995-2020 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 . */ /* Define if on AIX 3. System headers sometimes define this. We just want to avoid a redefinition error message. */ #ifndef _ALL_SOURCE /* #undef _ALL_SOURCE */ #endif /* Define if using alloca.c. */ #define C_ALLOCA /* Define if the closedir function returns void instead of int. */ /* #undef CLOSEDIR_VOID */ /* Define to empty if the keyword does not work. */ /* #undef const */ /* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems. This function is required for alloca.c support on those systems. */ /* #undef CRAY_STACKSEG_END */ /* Define for DGUX with . */ /* #undef DGUX */ /* Define if the 'getloadavg' function needs to be run setuid or setgid. */ /* #undef GETLOADAVG_PRIVILEGED */ /* Define to 'unsigned long' or 'unsigned long long' if doesn't define. */ #define uintmax_t unsigned long /* Define to 'int' if doesn't define. */ #define gid_t int /* Define if you have alloca, as a function or macro. */ /* #undef HAVE_ALLOCA */ /* Define if you have and it should be used (not on Ultrix). */ /* #undef HAVE_ALLOCA_H */ /* Define if your system has a working fnmatch function. */ /* #undef HAVE_FNMATCH */ /* Define if your system has its own 'getloadavg' function. */ /* #undef HAVE_GETLOADAVG */ /* Define if you have the getmntent function. */ /* #undef HAVE_GETMNTENT */ /* Embed GNU Guile support */ /* #undef HAVE_GUILE */ /* Define if the 'long double' type works. */ /* #undef HAVE_LONG_DOUBLE */ /* Define if you support file names longer than 14 characters. */ #define HAVE_LONG_FILE_NAMES 1 /* Define if you have a working 'mmap' system call. */ /* #undef HAVE_MMAP */ /* Define if system calls automatically restart after interruption by a signal. */ /* #undef HAVE_RESTARTABLE_SYSCALLS */ /* Define if your struct stat has st_blksize. */ /* #undef HAVE_ST_BLKSIZE */ /* Define if your struct stat has st_blocks. */ /* #undef HAVE_ST_BLOCKS */ /* Define if you have the strcoll function and it is properly defined. */ #define HAVE_STRCOLL 1 /* Define if your struct stat has st_rdev. */ #define HAVE_ST_RDEV 1 /* Define if you have the strftime function. */ #define HAVE_STRFTIME 1 /* Define if you have that is POSIX.1 compatible. */ /* #undef HAVE_SYS_WAIT_H */ /* Define if your struct tm has tm_zone. */ /* #undef HAVE_TM_ZONE */ /* Define if you don't have tm_zone but do have the external array tzname. */ #define HAVE_TZNAME 1 /* Define if you have . */ #define HAVE_UNISTD_H 1 /* Define if utime(file, NULL) sets file's timestamp to the present. */ /* #undef HAVE_UTIME_NULL */ /* Define if you have the wait3 system call. */ /* #undef HAVE_WAIT3 */ /* Define if on MINIX. */ /* #undef _MINIX */ /* Define if your struct nlist has an n_un member. */ /* #undef NLIST_NAME_UNION */ /* Define if you have . */ /* #undef NLIST_STRUCT */ /* Define if your C compiler doesn't accept -c and -o together. */ /* #undef NO_MINUS_C_MINUS_O */ /* Define to 'int' if doesn't define. */ #define pid_t int /* Define if the system does not provide POSIX.1 features except with this defined. */ /* #undef _POSIX_1_SOURCE */ /* Define if you need to in order for stat and other things to work. */ /* #undef _POSIX_SOURCE */ /* Define as the return type of signal handlers (int or void). */ #define RETSIGTYPE void /* Define if the setvbuf function takes the buffering type as its second argument and the buffer pointer as the third, as on System V before release 3. */ /* #undef SETVBUF_REVERSED */ /* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at run-time. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ #define STACK_DIRECTION -1 /* Define if the 'S_IS*' macros in do not work properly. */ /* #undef STAT_MACROS_BROKEN */ /* Define if you have the ANSI C header files. */ #define STDC_HEADERS /* Define on System V Release 4. */ /* #undef SVR4 */ /* Define if 'sys_siglist' is declared by . */ /* #undef SYS_SIGLIST_DECLARED */ /* Define to 'int' if doesn't define. */ #define uid_t int /* Define for Encore UMAX. */ /* #undef UMAX */ /* Define for Encore UMAX 4.3 that has instead of . */ /* #undef UMAX4_3 */ /* Name of this package (needed by automake) */ #define PACKAGE "make" /* Version of this package (needed by automake) */ #define VERSION "4.3" /* Define to the name of the SCCS 'get' command. */ #define SCCS_GET "get" /* Define this if the SCCS 'get' command understands the '-G' option. */ /* #undef SCCS_GET_MINUS_G */ /* Define this to enable job server support in GNU make. */ /* #undef MAKE_JOBSERVER */ /* Define to be the nanoseconds member of struct stat's st_mtim, if it exists. */ /* #undef ST_MTIM_NSEC */ /* Define this if the C library defines the variable 'sys_siglist'. */ /* #undef HAVE_SYS_SIGLIST */ /* Define this if the C library defines the variable '_sys_siglist'. */ /* #undef HAVE__SYS_SIGLIST */ /* Define this if you have the 'union wait' type in . */ /* #undef HAVE_UNION_WAIT */ /* Define if you have the dup2 function. */ /* #undef HAVE_DUP2 */ /* Define if you have the getcwd function. */ #define HAVE_GETCWD 1 /* Define if you have the getgroups function. */ /* #undef HAVE_GETGROUPS */ /* Define if you have the gethostbyname function. */ /* #undef HAVE_GETHOSTBYNAME */ /* Define if you have the gethostname function. */ /* #undef HAVE_GETHOSTNAME */ /* Define if you have the memmove function. */ #define HAVE_MEMMOVE 1 /* Define if you have the mktemp function. */ #define HAVE_MKTEMP 1 /* Define if you have the psignal function. */ /* #undef HAVE_PSIGNAL */ /* Define if you have the pstat_getdynamic function. */ /* #undef HAVE_PSTAT_GETDYNAMIC */ /* Define if you have the setegid function. */ /* #undef HAVE_SETEGID */ /* Define if you have the seteuid function. */ /* #undef HAVE_SETEUID */ /* Define if you have the setlinebuf function. */ /* #undef HAVE_SETLINEBUF */ /* Define if you have the setregid function. */ /* #undef HAVE_SETREGID */ /* Define if you have the setreuid function. */ /* #undef HAVE_SETREUID */ /* Define if you have the sigsetmask function. */ /* #undef HAVE_SIGSETMASK */ /* Define if you have the socket function. */ /* #undef HAVE_SOCKET */ /* Define to 1 if you have the strcasecmp function. */ /* #undef HAVE_STRCASECMP */ /* Define to 1 if you have the strcmpi function. */ /* #undef HAVE_STRCMPI */ /* Define to 1 if you have the stricmp function. */ /* #undef HAVE_STRICMP */ /* Define if you have the strsignal function. */ /* #undef HAVE_STRSIGNAL */ /* Define if you have the wait3 function. */ /* #undef HAVE_WAIT3 */ /* Define if you have the waitpid function. */ /* #undef HAVE_WAITPID */ /* Define if you have the header file. */ #define HAVE_DIRENT_H 1 /* Define if you have the header file. */ #define HAVE_FCNTL_H 1 /* Define if you have the header file. */ #define HAVE_LIMITS_H 1 /* Define if you have the header file. */ /* #undef HAVE_MACH_MACH_H */ /* Define if you have the header file. */ /* #undef HAVE_MEMORY_H */ /* Define if you have the header file. */ /* #undef HAVE_NDIR_H */ /* Define if you have the header file. */ /* #undef HAVE_STDLIB_H */ /* Define if you have the header file. */ #define HAVE_STRING_H 1 /* Define if you have the header file. */ #define HAVE_SYS_DIR_H 1 /* Define if you have the header file. */ /* #undef HAVE_SYS_NDIR_H */ /* Define if you have the header file. */ /* #undef HAVE_SYS_PARAM_H */ /* Define if you have the header file. */ /* #undef HAVE_SYS_TIMEB_H */ /* Define if you have the header file. */ /* #undef HAVE_SYS_WAIT_H */ /* Define if you have the header file. */ #define HAVE_UNISTD_H 1 /* Define if you have the dgc library (-ldgc). */ /* #undef HAVE_LIBDGC */ /* Define if you have the kstat library (-lkstat). */ /* #undef HAVE_LIBKSTAT */ /* Define to 1 if you have the `isatty' function. */ /* #undef HAVE_ISATTY */ /* Define to 1 if you have the `ttyname' function. */ /* #undef HAVE_TTYNAME */ /* Define if you have the sun library (-lsun). */ /* #undef HAVE_LIBSUN */ /* Output sync sypport */ #define NO_OUTPUT_SYNC /* Define for Case Insensitve behavior */ #define HAVE_CASE_INSENSITIVE_FS /* Build host information. */ #define MAKE_HOST "Amiga" /* Define to `int' if does not define. */ #define ssize_t int make-4.3/src/vms_progname.c0000644000175000017500000003440113603564437012663 00000000000000/* 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-2020 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 . */ /* 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 #include #include #include #include #include #include #include #include #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 make-4.3/src/gmk-default.h0000644000175000017500000000151013611136527012360 00000000000000static const char *const GUILE_module_defn = " \ (define (to-string-maybe x) \ (cond \ ((or (not x) \ (unspecified? x) \ (variable? x) \ (null? x) \ (and (string? x) (string-null? x))) \ #f) \ ((eq? x #t) \"#t\") \ ((or (symbol? x) (number? x)) \ (object->string x)) \ ((char? x) \ (string x)) \ ((and (string? x) (string-every char-set:printing x)) \ x) \ (else (error \"Unknown object:\" x)))) \ (define (obj-to-str x) \ (let ((acc '())) \ (define (walk x) \ (cond ((pair? x) (walk (car x)) (walk (cdr x))) \ ((to-string-maybe x) => (lambda (s) (set! acc (cons s acc)))))) \ (walk x) \ (string-join (reverse! acc)))) \ (define (gmk-var v) \ (gmk-expand (format #f \"$(~a)\" (obj-to-str v)))) \ (export gmk-expand gmk-eval gmk-var) \ "; make-4.3/src/gettext.h0000644000175000017500000000472713603564437011667 00000000000000/* Convenience header for conditional use of GNU . Copyright (C) 1995-2020 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 . */ #ifndef _LIBGETTEXT_H #define _LIBGETTEXT_H 1 /* NLS can be disabled through the configure --disable-nls option. */ #if ENABLE_NLS /* Get declarations of GNU message catalog functions. */ # include #else /* Disabled NLS. The casts to 'const char *' serve the purpose of producing warnings for invalid uses of the value returned from these functions. On pre-ANSI systems without 'const', the config.h file is supposed to contain "#define const". */ # define gettext(Msgid) ((const char *) (Msgid)) # define dgettext(Domainname, Msgid) ((const char *) (Msgid)) # define dcgettext(Domainname, Msgid, Category) ((const char *) (Msgid)) # define ngettext(Msgid1, Msgid2, N) \ ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2)) # define dngettext(Domainname, Msgid1, Msgid2, N) \ ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2)) # define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \ ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2)) # define textdomain(Domainname) ((const char *) (Domainname)) # define bindtextdomain(Domainname, Dirname) ((const char *) (Dirname)) # define bind_textdomain_codeset(Domainname, Codeset) ((const char *) (Codeset)) #endif /* A pseudo function call that serves as a marker for the automated extraction of messages, but does not call gettext(). The run-time translation is done at a different place in the code. The argument, String, should be a literal string. Concatenated strings and other string expressions won't work. The macro's expansion is not parenthesized, so that it is suitable as initializer for static 'char[]' or 'const char[]' variables. */ #define gettext_noop(String) String #endif /* _LIBGETTEXT_H */ make-4.3/src/vmsdir.h0000644000175000017500000000326413603564437011502 00000000000000/* dirent.h for vms Copyright (C) 1996-2020 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 . */ #ifndef VMSDIR_H #define VMSDIR_H #include #define MAXNAMLEN 255 #ifndef __DECC #if !defined (__GNUC__) && !defined (__ALPHA) typedef unsigned long u_long; typedef unsigned short u_short; #endif #endif struct direct { off_t d_off; u_long d_fileno; u_short d_reclen; u_short d_namlen; char d_name[MAXNAMLEN + 1]; }; #undef DIRSIZ #define DIRSIZ(dp) \ (((sizeof (struct direct) \ - (MAXNAMLEN+1) \ + ((dp)->d_namlen+1)) \ + 3) & ~3) #define d_ino d_fileno /* compatibility */ /* * Definitions for library routines operating on directories. */ typedef struct DIR { struct direct dir; char d_result[MAXNAMLEN + 1]; #if defined (__ALPHA) || defined (__DECC) struct FAB fab; #else struct fabdef fab; #endif } DIR; #ifndef NULL #define NULL 0 #endif #define rewinddir(dirp) seekdir((dirp), (long)0) DIR *opendir (); struct direct *readdir (DIR *dfd); int closedir (DIR *dfd); const char *vmsify (const char *name, int type); #endif /* VMSDIR_H */ make-4.3/src/vmsjobs.c0000644000175000017500000012360713603564437011660 00000000000000/* --------------- Moved here from job.c --------------- This file must be #included in job.c, as it accesses static functions. Copyright (C) 1996-2020 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 . */ #include #include #include /* TODO - VMS specific header file conditionally included in makeint.h */ #include #include 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) { while (1) { if (!vms_jobsefnmask) { *status = 0; return; } *status = sys$wflor (32, vms_jobsefnmask); } return; } 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 terminated. At AST level it won't get interrupted by anything except a inner mode level AST. */ static int vmsHandleChildTerm (struct childbase *cbase) { struct child *child = (struct child*)cbase; struct child *lastc, *c; int child_failed; int exit_code; /* 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); } if (child->comname) { if (!ISDB (DB_JOBS) && !ctrlYPressed) unlink (child->comname); free (child->comname); } (void) sigblock (fatal_signal_mask); /* 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 */ for (c = children; c != 0 && c != child; lastc = c, c = c->next) ; #else c = child; #endif if ($VMS_STATUS_SUCCESS (child->vms_launch_status)) { /* 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); (void) sigsetmask (sigblock (0) & ~(fatal_signal_mask)); return 1; } /* VMS: Spawn a process executing the command in ARGV and return its pid. */ /* local helpers to make ctrl+c and ctrl+y working, see below */ #include #include #include static int ctrlMask= LIB$M_CLI_CTRLY; static int oldCtrlMask; static int setupYAstTried= 0; static unsigned short int chan= 0; static void reEnableAst(void) { lib$enable_ctrl (&oldCtrlMask,0); } static int astYHandler (void) { struct child *c; for (c = children; c != 0; c = c->next) if (c->pid > 0) sys$delprc (&c->pid, 0, 0); ctrlYPressed= 1; kill (getpid(),SIGQUIT); return SS$_NORMAL; } static void tryToSetupYAst(void) { $DESCRIPTOR(inputDsc,"SYS$COMMAND"); int status; struct { short int status, count; int dvi; } iosb; unsigned short int loc_chan; setupYAstTried++; if (chan) loc_chan= chan; else { status= sys$assign(&inputDsc,&loc_chan,0,0); if (!(status&SS$_NORMAL)) { lib$signal(status); return; } } status= sys$qiow (0, loc_chan, IO$_SETMODE|IO$M_CTRLYAST,&iosb,0,0, astYHandler,0,0,0,0,0); if (status==SS$_NORMAL) status= iosb.status; if (status!=SS$_NORMAL) { if (!chan) sys$dassgn(loc_chan); if (status!=SS$_ILLIOFUNC && status!=SS$_NOPRIV) lib$signal(status); return; } /* called from AST handler ? */ if (setupYAstTried>1) return; if (atexit(reEnableAst)) fprintf (stderr, _("-warning, you may have to re-enable CTRL-Y handling from DCL.\n")); status= lib$disable_ctrl (&ctrlMask, &oldCtrlMask); if (!(status&SS$_NORMAL)) { lib$signal(status); return; } if (!chan) chan = loc_chan; } /* 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) { /* 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)) { 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++]); } } 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; } pid_t child_execute_job (struct childbase *child, int good_stdin UNUSED, char *argv) { int i; static struct dsc$descriptor_s *cmd_dsc; static struct dsc$descriptor_s pnamedsc; int spflags = CLI$M_NOWAIT; int status; int comnamelen; char procname[100]; 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. */ child->comname = NULL; DB (DB_JOBS, ("child_execute_job (%s)\n", argv)); while (isspace ((unsigned char)*argv)) argv++; if (*argv == 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; child->efn = 0; vmsHandleChildTerm (child); /* TODO what is this "magic number" */ return 270163; /* Special built-in */ } sprintf (procname, "GMAKE_%05x", getpid () & 0xfffff); 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; /* 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. */ /* 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) { /* We can not build this command so give up */ if (token.cmd_errno != 0) break; token.src = p; switch (*p) { 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 '\\': 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++; 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) { /* VMS symbol substitution */ p = parse_text (&token, 0); token.use_cmd_file = 1; UPDATE_TOKEN; break; } 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 (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] == '>') { /* 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 p = parse_char (&token, 1); UPDATE_TOKEN; break; case '/': /* Unix path or VMS option start, read until non-path symbol */ 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 ':': 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 == ';') { /* Remove Null command from pipeline */ p++; break; } p++; } break; } /* String assignment */ /* := :== or : */ if (p[1] != '=') p = parse_char (&token, 1); else if (p[2] != '=') p = parse_char (&token, 2); else p = parse_char (&token, 3); UPDATE_TOKEN; break; 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; 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); /* Force to a space or a tab */ if ((token_str[0] != ' ') || (token_str[0] != '\t')) token_str[0] = ' '; UPDATE_TOKEN; while (isspace (*p)) p++; if (assignment_hack != 0) assignment_hack++; break; } 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); 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; } } /* End up here with a list of tokens to build a command line. Deal with errors detected during parsing. */ if (token.cmd_errno != 0) { 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; child->efn = 0; errno = token.cmd_errno; return -1; } /* 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)) { append_file = xmalloc (strlen (raw_append_file) + 1); strcpy (append_file, raw_append_file); strcat (append_file, "."); } 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) { free (cmd_dsc); child->cstatus = VMS_POSIX_EXIT_MASK | (MAKE_TROUBLE << 3); child->vms_launch_status = SS$_ABORT; child->efn = 0; return -1; } /* 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; child->efn = 0; vmsHandleChildTerm (child); /* TODO what is this "magic number" */ return 270163; /* Special built-in */ } 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. 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; int cmd_len; outfile = get_tmpfile (&child->comname, "sys$scratch:gnv$make_cmdXXXXXX.com"); /* 123456789012345678901234567890 */ if (outfile == 0) pfatal_with_name (_("fopen (temporary file)")); comnamelen = strlen (child->comname); /* 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 redirections there is a prolog and possibly an epilog to implement the redirection. Both are part of the script which is actually executed. So if the redirection encounters an error in the prolog, the user actions will not run; if in the epilog, the user actions ran, but output is not captured. In both error cases, the error of redirection is passed back and not the exit code of the actions. The user should be able to enable DCL "script" verification with "set 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, "$ 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"); /* Handle append redirection */ if (append_file != NULL) { /* 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); } 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. */ fprintf (outfile, "%s\n", cmd_dsc->dsc$a_pointer); fprintf (outfile, "$ gnv$$make_status_2 = $status\n"); fprintf (outfile, "$ goto gnv$$make_exit\n"); /* 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, "$ deassign sys$output\n"); 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); 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"), child->comname)); } child->efn = 0; while (child->efn < 32 || child->efn > 63) { status = LIB$GET_EF ((unsigned long *)&child->efn); if (!$VMS_STATUS_SUCCESS (status)) { if (child->comname) { if (!ISDB (DB_JOBS)) unlink (child->comname); free (child->comname); } return -1; } } 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] [,output-file] [,flags] [,process-name] [,process-id] [,completion-status-address] [,byte-integer-event-flag-num] [,AST-address] [,varying-AST-argument] [,prompt-string] [,cli] [,table] */ #ifndef DONTWAITFORCHILD /* * Code to make ctrl+c and ctrl+y working. * The problem starts with the synchronous case where after lib$spawn is * called any input will go to the child. But with input re-directed, * both control characters won't make it to any of the programs, neither * the spawning nor to the spawned one. Hence the caller needs to spawn * with CLI$M_NOWAIT to NOT give up the input focus. A sys$waitfr * has to follow to simulate the wanted synchronous behaviour. * The next problem is ctrl+y which isn't caught by the crtl and * therefore isn't converted to SIGQUIT (for a signal handler which is * already established). The only way to catch ctrl+y, is an AST * assigned to the input channel. But ctrl+y handling of DCL needs to be * disabled, otherwise it will handle it. Not to mention the previous * ctrl+y handling of DCL needs to be re-established before make exits. * One more: At the time of LIB$SPAWN signals are blocked. SIGQUIT will * make it to the signal handler after the child "normally" terminates. * This isn't enough. It seems reasonable for simple command lines like * a 'cc foobar.c' spawned in a subprocess but it is unacceptable for * spawning make. Therefore we need to abort the process in the AST. * * Prior to the spawn it is checked if an AST is already set up for * ctrl+y, if not one is set up for a channel to SYS$COMMAND. In general * this will work except if make is run in a batch environment, but there * nobody can press ctrl+y. During the setup the DCL handling of ctrl+y * is disabled and an exit handler is established to re-enable it. * If the user interrupts with ctrl+y, the assigned AST will fire, force * an abort to the subprocess and signal SIGQUIT, which will be caught by * the already established handler and will bring us back to common code. * After the spawn (now /nowait) a sys$waitfr simulates the /wait and * enables the ctrl+y be delivered to this code. And the ctrl+c too, * which the crtl converts to SIGINT and which is caught by the common * signal handler. Because signals were blocked before entering this code * sys$waitfr will always complete and the SIGQUIT will be processed after * it (after termination of the current block, somewhere in common code). * And SIGINT too will be delayed. That is ctrl+c can only abort when the * current command completes. Anyway it's better than nothing :-) */ if (!setupYAstTried) tryToSetupYAst(); 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); } #else 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 /* 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)) { switch (status) { case SS$_EXQUOTA: errno = EPROCLIM; break; default: errno = EFAIL; } } /* Restore the VMS symbols that were changed */ if (child->environment != 0) { char **ep = child->environment; while (*ep != 0) { vms_restore_symbol (*ep); *ep++; } } /* TODO what is this "magic number" */ return (status & 1) ? 270163 : -1 ; } make-4.3/src/output.c0000644000175000017500000004116713603564437011535 00000000000000/* Output to stdout / stderr for GNU make Copyright (C) 2013-2020 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 . */ #include "makeint.h" #include "os.h" #include "output.h" /* GNU make no longer supports pre-ANSI89 environments. */ #include #include #include #ifdef HAVE_UNISTD_H # include #endif #ifdef HAVE_FCNTL_H # include #else # include #endif #ifdef WINDOWS32 # include # include # include "sub_proc.h" #endif /* WINDOWS32 */ struct output *output_context = NULL; unsigned int stdio_traced = 0; #define OUTPUT_NONE (-1) #define OUTPUT_ISSET(_out) ((_out)->out >= 0 || (_out)->err >= 0) #ifdef HAVE_FCNTL_H # define STREAM_OK(_s) ((fcntl (fileno (_s), F_GETFD) != -1) || (errno != EBADF)) #else # define STREAM_OK(_s) 1 #endif /* Write a string to the current STDOUT or STDERR. */ static void _outputs (struct output *out, int is_err, const char *msg) { if (! out || ! out->syncout) { FILE *f = is_err ? stderr : stdout; fputs (msg, f); fflush (f); } else { int fd = is_err ? out->err : out->out; size_t len = strlen (msg); int r; EINTRLOOP (r, lseek (fd, 0, SEEK_END)); writebuf (fd, msg, len); } } /* Write a message indicating that we've just entered or left (according to ENTERING) the current directory. */ static int log_working_directory (int entering) { static char *buf = NULL; static size_t len = 0; size_t need; const char *fmt; char *p; /* Get enough space for the longest possible output. */ need = strlen (program) + INTSTR_LENGTH + 2 + 1; if (starting_directory) need += strlen (starting_directory); /* Use entire sentences to give the translators a fighting chance. */ if (makelevel == 0) if (starting_directory == 0) if (entering) fmt = _("%s: Entering an unknown directory\n"); else fmt = _("%s: Leaving an unknown directory\n"); else if (entering) fmt = _("%s: Entering directory '%s'\n"); else fmt = _("%s: Leaving directory '%s'\n"); else if (starting_directory == 0) if (entering) fmt = _("%s[%u]: Entering an unknown directory\n"); else fmt = _("%s[%u]: Leaving an unknown directory\n"); else if (entering) fmt = _("%s[%u]: Entering directory '%s'\n"); else fmt = _("%s[%u]: Leaving directory '%s'\n"); need += strlen (fmt); if (need > len) { buf = xrealloc (buf, need); len = need; } p = buf; if (print_data_base_flag) { *(p++) = '#'; *(p++) = ' '; } if (makelevel == 0) if (starting_directory == 0) sprintf (p, fmt , program); else sprintf (p, fmt, program, starting_directory); else if (starting_directory == 0) sprintf (p, fmt, program, makelevel); else sprintf (p, fmt, program, makelevel, starting_directory); _outputs (NULL, 0, buf); return 1; } /* Set a file descriptor to be in O_APPEND mode. If it fails, just ignore it. */ static void set_append_mode (int fd) { #if defined(F_GETFL) && defined(F_SETFL) && defined(O_APPEND) int flags = fcntl (fd, F_GETFL, 0); if (flags >= 0) { int r; EINTRLOOP(r, fcntl (fd, F_SETFL, flags | O_APPEND)); } #endif } #ifndef NO_OUTPUT_SYNC /* Semaphore for use in -j mode with output_sync. */ static sync_handle_t sync_handle = -1; #define FD_NOT_EMPTY(_f) ((_f) != OUTPUT_NONE && lseek ((_f), 0, SEEK_END) > 0) /* Set up the sync handle. Disables output_sync on error. */ static int sync_init (void) { int combined_output = 0; #ifdef WINDOWS32 if ((!STREAM_OK (stdout) && !STREAM_OK (stderr)) || (sync_handle = create_mutex ()) == -1) { perror_with_name ("output-sync suppressed: ", "stderr"); output_sync = 0; } else { combined_output = same_stream (stdout, stderr); prepare_mutex_handle_string (sync_handle); } #else if (STREAM_OK (stdout)) { struct stat stbuf_o, stbuf_e; sync_handle = fileno (stdout); combined_output = (fstat (fileno (stdout), &stbuf_o) == 0 && fstat (fileno (stderr), &stbuf_e) == 0 && stbuf_o.st_dev == stbuf_e.st_dev && stbuf_o.st_ino == stbuf_e.st_ino); } else if (STREAM_OK (stderr)) sync_handle = fileno (stderr); else { perror_with_name ("output-sync suppressed: ", "stderr"); output_sync = 0; } #endif return combined_output; } /* Support routine for output_sync() */ static void pump_from_tmp (int from, FILE *to) { static char buffer[8192]; #ifdef WINDOWS32 int prev_mode; /* "from" is opened by open_tmpfd, which does it in binary mode, so we need the mode of "to" to match that. */ prev_mode = _setmode (fileno (to), _O_BINARY); #endif if (lseek (from, 0, SEEK_SET) == -1) perror ("lseek()"); while (1) { int len; EINTRLOOP (len, read (from, buffer, sizeof (buffer))); if (len < 0) perror ("read()"); if (len <= 0) break; if (fwrite (buffer, len, 1, to) < 1) { perror ("fwrite()"); break; } fflush (to); } #ifdef WINDOWS32 /* Switch "to" back to its original mode, so that log messages by Make have the same EOL format as without --output-sync. */ _setmode (fileno (to), prev_mode); #endif } /* Obtain the lock for writing output. */ static void * acquire_semaphore (void) { static struct flock fl; fl.l_type = F_WRLCK; fl.l_whence = SEEK_SET; fl.l_start = 0; fl.l_len = 1; if (fcntl (sync_handle, F_SETLKW, &fl) != -1) return &fl; perror ("fcntl()"); return NULL; } /* Release the lock for writing output. */ static void release_semaphore (void *sem) { struct flock *flp = (struct flock *)sem; flp->l_type = F_UNLCK; if (fcntl (sync_handle, F_SETLKW, flp) == -1) perror ("fcntl()"); } /* 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 (void) { mode_t mask = umask (0077); int fd = -1; FILE *tfile = tmpfile (); if (! tfile) pfatal_with_name ("tmpfile"); /* Create a duplicate so we can close the stream. */ fd = dup (fileno (tfile)); if (fd < 0) pfatal_with_name ("dup"); fclose (tfile); set_append_mode (fd); umask (mask); return fd; } /* Adds file descriptors to the child structure to support output_sync; one for stdout and one for stderr as long as they are open. If stdout and stderr share a device they can share a temp file too. Will reset output_sync on error. */ static void setup_tmpfile (struct output *out) { /* Is make's stdout going to the same place as stderr? */ static int combined_output = -1; if (combined_output < 0) combined_output = sync_init (); if (STREAM_OK (stdout)) { int fd = output_tmpfd (); if (fd < 0) goto error; fd_noinherit (fd); out->out = fd; } if (STREAM_OK (stderr)) { if (out->out != OUTPUT_NONE && combined_output) out->err = out->out; else { int fd = output_tmpfd (); if (fd < 0) goto error; fd_noinherit (fd); out->err = fd; } } return; /* If we failed to create a temp file, disable output sync going forward. */ error: output_close (out); output_sync = OUTPUT_SYNC_NONE; } /* Synchronize the output of jobs in -j mode to keep the results of each job together. This is done by holding the results in temp files, one for stdout and potentially another for stderr, and only releasing them to "real" stdout/stderr when a semaphore can be obtained. */ void output_dump (struct output *out) { int outfd_not_empty = FD_NOT_EMPTY (out->out); int errfd_not_empty = FD_NOT_EMPTY (out->err); if (outfd_not_empty || errfd_not_empty) { int traced = 0; /* Try to acquire the semaphore. If it fails, dump the output unsynchronized; still better than silently discarding it. We want to keep this lock for as little time as possible. */ void *sem = acquire_semaphore (); /* Log the working directory for this dump. */ if (print_directory_flag && output_sync != OUTPUT_SYNC_RECURSE) traced = log_working_directory (1); if (outfd_not_empty) pump_from_tmp (out->out, stdout); if (errfd_not_empty && out->err != out->out) pump_from_tmp (out->err, stderr); if (traced) log_working_directory (0); /* Exit the critical section. */ if (sem) release_semaphore (sem); /* Truncate and reset the output, in case we use it again. */ if (out->out != OUTPUT_NONE) { int e; lseek (out->out, 0, SEEK_SET); EINTRLOOP (e, ftruncate (out->out, 0)); } if (out->err != OUTPUT_NONE && out->err != out->out) { int e; lseek (out->err, 0, SEEK_SET); EINTRLOOP (e, ftruncate (out->err, 0)); } } } #endif /* NO_OUTPUT_SYNC */ /* This code is stolen from gnulib. If/when we abandon the requirement to work with K&R compilers, we can remove this (and perhaps other parts of GNU make!) and migrate to using gnulib directly. This is called only through atexit(), which means die() has already been invoked. So, call exit() here directly. Apparently that works...? */ /* Close standard output, exiting with status 'exit_failure' on failure. If a program writes *anything* to stdout, that program should close stdout and make sure that it succeeds before exiting. Otherwise, suppose that you go to the extreme of checking the return status of every function that does an explicit write to stdout. The last printf can succeed in writing to the internal stream buffer, and yet the fclose(stdout) could still fail (due e.g., to a disk full error) when it tries to write out that buffered data. Thus, you would be left with an incomplete output file and the offending program would exit successfully. Even calling fflush is not always sufficient, since some file systems (NFS and CODA) buffer written/flushed data until an actual close call. Besides, it's wasteful to check the return value from every call that writes to stdout -- just let the internal stream state record the failure. That's what the ferror test is checking below. It's important to detect such failures and exit nonzero because many tools (most notably 'make' and other build-management systems) depend on being able to detect failure in other tools via their exit status. */ static void close_stdout (void) { int prev_fail = ferror (stdout); int fclose_fail = fclose (stdout); if (prev_fail || fclose_fail) { if (fclose_fail) perror_with_name (_("write error: stdout"), ""); else O (error, NILF, _("write error: stdout")); exit (MAKE_TROUBLE); } } void output_init (struct output *out) { if (out) { out->out = out->err = OUTPUT_NONE; out->syncout = !!output_sync; return; } /* Configure this instance of make. Be sure stdout is line-buffered. */ #ifdef HAVE_SETVBUF # ifdef SETVBUF_REVERSED setvbuf (stdout, _IOLBF, xmalloc (BUFSIZ), BUFSIZ); # else /* setvbuf not reversed. */ /* Some buggy systems lose if we pass 0 instead of allocating ourselves. */ setvbuf (stdout, 0, _IOLBF, BUFSIZ); # endif /* setvbuf reversed. */ #elif HAVE_SETLINEBUF setlinebuf (stdout); #endif /* setlinebuf missing. */ /* Force stdout/stderr into append mode. This ensures parallel jobs won't lose output due to overlapping writes. */ set_append_mode (fileno (stdout)); set_append_mode (fileno (stderr)); #ifdef HAVE_ATEXIT if (STREAM_OK (stdout)) atexit (close_stdout); #endif } void output_close (struct output *out) { if (! out) { if (stdio_traced) log_working_directory (0); return; } #ifndef NO_OUTPUT_SYNC output_dump (out); #endif if (out->out >= 0) close (out->out); if (out->err >= 0 && out->err != out->out) close (out->err); output_init (out); } /* We're about to generate output: be sure it's set up. */ void output_start (void) { #ifndef NO_OUTPUT_SYNC /* If we're syncing output make sure the temporary file is set up. */ if (output_context && output_context->syncout) if (! OUTPUT_ISSET(output_context)) setup_tmpfile (output_context); #endif /* If we're not syncing this output per-line or per-target, make sure we emit the "Entering..." message where appropriate. */ if (output_sync == OUTPUT_SYNC_NONE || output_sync == OUTPUT_SYNC_RECURSE) if (! stdio_traced && print_directory_flag) stdio_traced = log_working_directory (1); } void outputs (int is_err, const char *msg) { if (! msg || *msg == '\0') return; output_start (); _outputs (output_context, is_err, msg); } static struct fmtstring { char *buffer; size_t size; } fmtbuf = { NULL, 0 }; static char * get_buffer (size_t need) { /* Make sure we have room. NEED includes space for \0. */ if (need > fmtbuf.size) { fmtbuf.size += need * 2; fmtbuf.buffer = xrealloc (fmtbuf.buffer, fmtbuf.size); } fmtbuf.buffer[need-1] = '\0'; return fmtbuf.buffer; } /* Print a message on stdout. */ void message (int prefix, size_t len, const char *fmt, ...) { va_list args; char *p; len += strlen (fmt) + strlen (program) + INTSTR_LENGTH + 4 + 1 + 1; p = get_buffer (len); if (prefix) { if (makelevel == 0) sprintf (p, "%s: ", program); else sprintf (p, "%s[%u]: ", program, makelevel); p += strlen (p); } va_start (args, fmt); vsprintf (p, fmt, args); va_end (args); strcat (p, "\n"); assert (fmtbuf.buffer[len-1] == '\0'); outputs (0, fmtbuf.buffer); } /* Print an error message. */ void error (const floc *flocp, size_t len, const char *fmt, ...) { va_list args; char *p; len += (strlen (fmt) + strlen (program) + (flocp && flocp->filenm ? strlen (flocp->filenm) : 0) + INTSTR_LENGTH + 4 + 1 + 1); p = get_buffer (len); if (flocp && flocp->filenm) sprintf (p, "%s:%lu: ", flocp->filenm, flocp->lineno + flocp->offset); else if (makelevel == 0) sprintf (p, "%s: ", program); else sprintf (p, "%s[%u]: ", program, makelevel); p += strlen (p); va_start (args, fmt); vsprintf (p, fmt, args); va_end (args); strcat (p, "\n"); assert (fmtbuf.buffer[len-1] == '\0'); outputs (1, fmtbuf.buffer); } /* Print an error message and exit. */ void fatal (const floc *flocp, size_t len, const char *fmt, ...) { va_list args; const char *stop = _(". Stop.\n"); char *p; len += (strlen (fmt) + strlen (program) + (flocp && flocp->filenm ? strlen (flocp->filenm) : 0) + INTSTR_LENGTH + 8 + strlen (stop) + 1); p = get_buffer (len); if (flocp && flocp->filenm) sprintf (p, "%s:%lu: *** ", flocp->filenm, flocp->lineno + flocp->offset); else if (makelevel == 0) sprintf (p, "%s: *** ", program); else sprintf (p, "%s[%u]: *** ", program, makelevel); p += strlen (p); va_start (args, fmt); vsprintf (p, fmt, args); va_end (args); strcat (p, stop); assert (fmtbuf.buffer[len-1] == '\0'); outputs (1, fmtbuf.buffer); die (MAKE_FAILURE); } /* Print an error message from errno. */ void perror_with_name (const char *str, const char *name) { const char *err = strerror (errno); OSSS (error, NILF, _("%s%s: %s"), str, name, err); } /* Print an error message from errno and exit. */ void pfatal_with_name (const char *name) { const char *err = strerror (errno); OSS (fatal, NILF, _("%s: %s"), name, err); /* NOTREACHED */ } /* Print a message about out of memory (not using more heap) and exit. Our goal here is to be sure we don't try to allocate more memory, which means we don't want to use string translations or normal cleanup. */ void out_of_memory () { writebuf (FD_STDOUT, program, strlen (program)); writebuf (FD_STDOUT, STRING_SIZE_TUPLE (": *** virtual memory exhausted\n")); exit (MAKE_FAILURE); } make-4.3/src/read.c0000644000175000017500000031341213603564437011103 00000000000000/* Reading and parsing of makefiles for GNU Make. Copyright (C) 1988-2020 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 . */ #include "makeint.h" #include #include "filedef.h" #include "dep.h" #include "job.h" #include "os.h" #include "commands.h" #include "variable.h" #include "rule.h" #include "debug.h" #include "hash.h" #ifdef WINDOWS32 #include #include "sub_proc.h" #else /* !WINDOWS32 */ #ifndef _AMIGA #ifndef VMS #include #else struct passwd *getpwnam (char *name); #endif #endif #endif /* !WINDOWS32 */ /* A 'struct ebuffer' controls the origin of the makefile we are currently eval'ing. */ struct ebuffer { char *buffer; /* Start of the current line in the buffer. */ char *bufnext; /* Start of the next line in the buffer. */ char *bufstart; /* Start of the entire buffer. */ size_t size; /* Malloc'd size of buffer. */ FILE *fp; /* File, or NULL if this is an internal buffer. */ floc floc; /* Info on the file in fp (if any). */ }; /* Track the modifiers we can have on variable assignments */ struct vmodifiers { unsigned int assign_v:1; unsigned int define_v:1; unsigned int undefine_v:1; unsigned int export_v:1; unsigned int override_v:1; unsigned int private_v:1; }; /* Types of "words" that can be read in a makefile. */ enum make_word_type { w_bogus, w_eol, w_static, w_variable, w_colon, w_dcolon, w_semicolon, w_varassign, w_ampcolon, w_ampdcolon }; /* A 'struct conditionals' contains the information describing all the active conditionals in a makefile. The global variable 'conditionals' contains the conditionals information for the current makefile. It is initialized from the static structure 'toplevel_conditionals' and is later changed to new structures for included makefiles. */ struct conditionals { unsigned int if_cmds; /* Depth of conditional nesting. */ unsigned int allocated; /* Elts allocated in following arrays. */ char *ignoring; /* Are we ignoring or interpreting? 0=interpreting, 1=not yet interpreted, 2=already interpreted */ char *seen_else; /* Have we already seen an 'else'? */ }; static struct conditionals toplevel_conditionals; static struct conditionals *conditionals = &toplevel_conditionals; /* Default directories to search for include files in */ static const char *default_include_directories[] = { #if defined(WINDOWS32) && !defined(INCLUDEDIR) /* This completely up to the user when they install MSVC or other packages. This is defined as a placeholder. */ # define INCLUDEDIR "." #endif INCLUDEDIR, #ifndef _AMIGA "/usr/gnu/include", "/usr/local/include", "/usr/include", #endif 0 }; /* List of directories to search for include files in */ static const char **include_directories; /* Maximum length of an element of the above. */ static size_t max_incl_len; /* The filename and pointer to line number of the makefile currently being read in. */ const floc *reading_file = 0; /* The chain of files read by read_all_makefiles. */ static struct goaldep *read_files = 0; static struct goaldep *eval_makefile (const char *filename, unsigned short flags); static void eval (struct ebuffer *buffer, int flags); static long readline (struct ebuffer *ebuf); 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, size_t len, const floc *flocp); static void record_files (struct nameseq *filenames, int are_also_makes, const char *pattern, const char *pattern_percent, char *depstr, unsigned int cmds_started, char *commands, size_t commands_idx, int two_colon, char prefix, const floc *flocp); static void record_target_var (struct nameseq *filenames, char *defn, enum variable_origin origin, struct vmodifiers *vmod, const floc *flocp); static enum make_word_type get_next_mword (char *buffer, char **startp, size_t *length); static void remove_comments (char *line); static char *find_map_unquote (char *string, int map); static char *find_char_unquote (char *string, int stop); static char *unescape_char (char *string, int c); /* Compare a word, both length and contents. P must point to the word to be tested, and WLEN must be the length. */ #define word1eq(s) (wlen == CSTRLEN (s) && strneq (s, p, CSTRLEN (s))) /* Read in all the makefiles and return a chain of targets to rebuild. */ struct goaldep * read_all_makefiles (const char **makefiles) { unsigned int num_makefiles = 0; /* Create *_LIST variables, to hold the makefiles, targets, and variables we will be reading. */ define_variable_cname ("MAKEFILE_LIST", "", o_file, 0); DB (DB_BASIC, (_("Reading makefiles...\n"))); /* If there's a non-null variable MAKEFILES, its value is a list of files to read first thing. But don't let it prevent reading the default makefiles and don't let the default goal come from there. */ { char *value; char *name, *p; size_t length; { /* Turn off --warn-undefined-variables while we expand MAKEFILES. */ int save = warn_undefined_variables_flag; warn_undefined_variables_flag = 0; value = allocated_variable_expand ("$(MAKEFILES)"); warn_undefined_variables_flag = save; } /* Set NAME to the start of next token and LENGTH to its length. MAKEFILES is updated for finding remaining tokens. */ p = value; while ((name = find_next_token ((const char **)&p, &length)) != 0) { if (*p != '\0') *p++ = '\0'; eval_makefile (strcache_add (name), RM_NO_DEFAULT_GOAL|RM_INCLUDED|RM_DONTCARE); } free (value); } /* Read makefiles specified with -f switches. */ if (makefiles != 0) while (*makefiles != 0) { struct goaldep *d = eval_makefile (*makefiles, 0); if (errno) perror_with_name ("", *makefiles); /* Reuse the storage allocated for the read_file. */ *makefiles = dep_name (d); ++num_makefiles; ++makefiles; } /* If there were no -f switches, try the default names. */ if (num_makefiles == 0) { static const char *default_makefiles[] = #ifdef VMS /* all lower case since readdir() (the vms version) 'lowercasifies' */ /* TODO: Above is not always true, this needs more work */ { "makefile.vms", "gnumakefile", "makefile", 0 }; #else #ifdef _AMIGA { "GNUmakefile", "Makefile", "SMakefile", 0 }; #else /* !Amiga && !VMS */ #ifdef WINDOWS32 { "GNUmakefile", "makefile", "Makefile", "makefile.mak", 0 }; #else /* !Amiga && !VMS && !WINDOWS32 */ { "GNUmakefile", "makefile", "Makefile", 0 }; #endif /* !Amiga && !VMS && !WINDOWS32 */ #endif /* AMIGA */ #endif /* VMS */ const char **p = default_makefiles; while (*p != 0 && !file_exists_p (*p)) ++p; if (*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 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 goaldep *d = alloc_goaldep (); d->file = enter_file (strcache_add (*p)); /* 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->flags = RM_DONTCARE; if (tail == 0) read_files = d; else tail->next = d; tail = d; } if (tail != 0) tail->next = 0; } } return read_files; } /* Install a new conditional and return the previous one. */ static struct conditionals * install_conditionals (struct conditionals *new) { struct conditionals *save = conditionals; memset (new, '\0', sizeof (*new)); conditionals = new; return save; } /* Free the current conditionals and reinstate a saved one. */ static void restore_conditionals (struct conditionals *saved) { /* Free any space allocated by conditional_line. */ free (conditionals->ignoring); free (conditionals->seen_else); /* Restore state. */ conditionals = saved; } static struct goaldep * eval_makefile (const char *filename, unsigned short flags) { struct goaldep *deps; struct ebuffer ebuf; const floc *curfile; char *expanded = 0; /* Create a new goaldep entry. */ deps = alloc_goaldep (); deps->next = read_files; read_files = deps; ebuf.floc.filenm = filename; /* Use the original file name. */ ebuf.floc.lineno = 1; ebuf.floc.offset = 0; if (ISDB (DB_VERBOSE)) { printf (_("Reading makefile '%s'"), filename); if (flags & RM_NO_DEFAULT_GOAL) printf (_(" (no default goal)")); if (flags & RM_INCLUDED) printf (_(" (search path)")); if (flags & RM_DONTCARE) printf (_(" (don't care)")); if (flags & RM_NO_TILDE) printf (_(" (no ~ expansion)")); puts ("..."); } /* First, get a stream to read. */ /* Expand ~ in FILENAME unless it came from 'include', in which case it was already done. */ if (!(flags & RM_NO_TILDE) && filename[0] == '~') { expanded = tilde_expand (filename); if (expanded != 0) filename = expanded; } errno = 0; ENULLLOOP (ebuf.fp, fopen (filename, "r")); deps->error = errno; /* Check for unrecoverable errors: out of mem or FILE slots. */ switch (deps->error) { #ifdef EMFILE case EMFILE: #endif #ifdef ENFILE case ENFILE: #endif case ENOMEM: { const char *err = strerror (deps->error); OS (fatal, reading_file, "%s", err); } } /* If the makefile wasn't found and it's either a makefile from the 'MAKEFILES' variable or an included makefile, search the included makefile search path for this makefile. */ if (ebuf.fp == 0 && (flags & RM_INCLUDED) && *filename != '/') { unsigned int i; for (i = 0; include_directories[i] != 0; ++i) { const char *included = concat (3, include_directories[i], "/", filename); ebuf.fp = fopen (included, "r"); if (ebuf.fp) { filename = included; break; } } } /* Enter the final name for this makefile as a goaldep. */ filename = strcache_add (filename); deps->file = lookup_file (filename); if (deps->file == 0) deps->file = enter_file (filename); filename = deps->file->name; deps->flags = flags; free (expanded); if (ebuf.fp == 0) { /* The makefile can't be read at all, give up entirely. If we did some searching errno has the error from the last attempt, rather from FILENAME itself: recover the more accurate one. */ errno = deps->error; deps->file->last_mtime = NONEXISTENT_MTIME; return deps; } /* Success; clear errno. */ deps->error = 0; /* Avoid leaking the makefile to children. */ fd_noinherit (fileno (ebuf.fp)); /* Add this makefile to the list. */ do_variable_definition (&ebuf.floc, "MAKEFILE_LIST", filename, o_file, f_append_value, 0); /* Evaluate the makefile */ ebuf.size = 200; ebuf.buffer = ebuf.bufnext = ebuf.bufstart = xmalloc (ebuf.size); curfile = reading_file; reading_file = &ebuf.floc; eval (&ebuf, !(flags & RM_NO_DEFAULT_GOAL)); reading_file = curfile; fclose (ebuf.fp); free (ebuf.bufstart); alloca (0); errno = 0; return deps; } void eval_buffer (char *buffer, const floc *flocp) { struct ebuffer ebuf; struct conditionals *saved; struct conditionals new; const floc *curfile; /* Evaluate the buffer */ ebuf.size = strlen (buffer); ebuf.buffer = ebuf.bufnext = ebuf.bufstart = buffer; ebuf.fp = NULL; 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; reading_file = &ebuf.floc; saved = install_conditionals (&new); eval (&ebuf, 1); restore_conditionals (saved); reading_file = curfile; alloca (0); } /* Check LINE to see if it's a variable assignment or undefine. It might use one of the modifiers "export", "override", "private", or it might be one of the conditional tokens like "ifdef", "include", etc. If it's not a variable assignment or undefine, VMOD.V_ASSIGN is 0. Returns LINE. Returns a pointer to the first non-modifier character, and sets VMOD based on the modifiers found if any, plus V_ASSIGN is 1. */ static char * parse_var_assignment (const char *line, struct vmodifiers *vmod) { const char *p; memset (vmod, '\0', sizeof (*vmod)); /* Find the start of the next token. If there isn't one we're done. */ NEXT_TOKEN (line); if (*line == '\0') return (char *) line; p = line; while (1) { size_t wlen; const char *p2; struct variable v; p2 = parse_variable_definition (p, &v); /* If this is a variable assignment, we're done. */ if (p2) break; /* It's not a variable; see if it's a modifier. */ p2 = end_of_token (p); wlen = p2 - p; if (word1eq ("export")) vmod->export_v = 1; else if (word1eq ("override")) vmod->override_v = 1; else if (word1eq ("private")) vmod->private_v = 1; else if (word1eq ("define")) { /* We can't have modifiers after 'define' */ vmod->define_v = 1; p = next_token (p2); break; } else if (word1eq ("undefine")) { /* We can't have modifiers after 'undefine' */ vmod->undefine_v = 1; p = next_token (p2); break; } else /* Not a variable or modifier: this is not a variable assignment. */ return (char *) line; /* It was a modifier. Try the next word. */ p = next_token (p2); if (*p == '\0') return (char *) line; } /* Found a variable assignment or undefine. */ vmod->assign_v = 1; return (char *)p; } /* Read file FILENAME as a makefile and add its contents to the data base. SET_DEFAULT is true if we are allowed to set the default goal. */ static void eval (struct ebuffer *ebuf, int set_default) { char *collapsed = 0; size_t collapsed_length = 0; size_t commands_len = 200; char *commands; size_t commands_idx = 0; unsigned int cmds_started, tgts_started; int ignoring = 0, in_ignored_define = 0; int no_targets = 0; /* Set when reading a rule without targets. */ int also_make_targets = 0; /* Set when reading grouped targets. */ struct nameseq *filenames = 0; char *depstr = 0; long nlines = 0; int two_colon = 0; char prefix = cmd_prefix; const char *pattern = 0; const char *pattern_percent; floc *fstart; floc fi; #define record_waiting_files() \ do \ { \ if (filenames != 0) \ { \ fi.lineno = tgts_started; \ fi.offset = 0; \ record_files (filenames, also_make_targets, pattern, \ pattern_percent, depstr, \ cmds_started, commands, commands_idx, two_colon, \ prefix, &fi); \ filenames = 0; \ } \ commands_idx = 0; \ no_targets = 0; \ pattern = 0; \ also_make_targets = 0; \ } while (0) pattern_percent = 0; cmds_started = tgts_started = 1; fstart = &ebuf->floc; fi.filenm = ebuf->floc.filenm; /* Loop over lines in the file. The strategy is to accumulate target names in FILENAMES, dependencies in DEPS and commands in COMMANDS. These are used to define a rule when the start of the next rule (or eof) is encountered. When you see a "continue" in the loop below, that means we are moving on to the next line. If you see record_waiting_files(), then the statement we are parsing also finishes the previous rule. */ commands = xmalloc (200); while (1) { size_t linelen; char *line; size_t wlen; char *p; char *p2; struct vmodifiers vmod; /* At the top of this loop, we are starting a brand new line. */ /* Grab the next line to be evaluated */ ebuf->floc.lineno += nlines; nlines = readline (ebuf); /* If there is nothing left to eval, we're done. */ if (nlines < 0) break; line = ebuf->buffer; /* If this is the first line, check for a UTF-8 BOM and skip it. */ if (ebuf->floc.lineno == 1) { unsigned char *ul = (unsigned char *) line; if (ul[0] == 0xEF && ul[1] == 0xBB && ul[2] == 0xBF) { line += 3; if (ISDB(DB_BASIC)) { if (ebuf->floc.filenm) printf (_("Skipping UTF-8 BOM in makefile '%s'\n"), ebuf->floc.filenm); else printf (_("Skipping UTF-8 BOM in makefile buffer\n")); } } } /* If this line is empty, skip it. */ if (line[0] == '\0') continue; linelen = strlen (line); /* Check for a shell command line first. If it is not one, we can stop treating cmd_prefix specially. */ if (line[0] == cmd_prefix) { if (no_targets) /* Ignore the commands in a rule with no targets. */ continue; /* If there is no preceding rule line, don't treat this line as a command, even though it begins with a recipe prefix. SunOS 4 make appears to behave this way. */ if (filenames != 0) { if (ignoring) /* Yep, this is a shell command, and we don't care. */ continue; if (commands_idx == 0) cmds_started = ebuf->floc.lineno; /* Append this command line to the line being accumulated. Skip the initial command prefix character. */ if (linelen + commands_idx > commands_len) { commands_len = (linelen + commands_idx) * 2; commands = xrealloc (commands, commands_len); } memcpy (&commands[commands_idx], line + 1, linelen - 1); commands_idx += linelen - 1; commands[commands_idx++] = '\n'; continue; } } /* This line is not a shell command line. Don't worry about whitespace. Get more space if we need it; we don't need to preserve the current contents of the buffer. */ if (collapsed_length < linelen+1) { collapsed_length = linelen+1; free (collapsed); /* Don't need xrealloc: we don't need to preserve the content. */ collapsed = xmalloc (collapsed_length); } strcpy (collapsed, line); /* Collapse continuation lines. */ collapse_continuations (collapsed); remove_comments (collapsed); /* Get rid if starting space (including formfeed, vtab, etc.) */ p = collapsed; 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. */ p = parse_var_assignment (p, &vmod); if (vmod.assign_v) { struct variable *v; enum variable_origin origin = vmod.override_v ? o_override : o_file; /* If we're ignoring then we're done now. */ if (ignoring) { if (vmod.define_v) in_ignored_define = 1; continue; } /* Variable assignment ends the previous rule. */ record_waiting_files (); if (vmod.undefine_v) { do_undefine (p, origin, ebuf); continue; } else if (vmod.define_v) v = do_define (p, origin, ebuf); else v = try_variable_definition (fstart, p, origin, 0); assert (v != NULL); if (vmod.export_v) v->export = v_export; if (vmod.private_v) v->private_var = 1; /* This line has been dealt with. */ continue; } /* If this line is completely empty, ignore it. */ if (*p == '\0') continue; p2 = end_of_token (p); wlen = p2 - p; NEXT_TOKEN (p2); /* If we're in an ignored define, skip this line (but maybe get out). */ if (in_ignored_define) { /* See if this is an endef line (plus optional comment). */ if (word1eq ("endef") && STOP_SET (*p2, MAP_COMMENT|MAP_NUL)) in_ignored_define = 0; continue; } /* Check for conditional state changes. */ { int i = conditional_line (p, wlen, fstart); if (i != -2) { if (i == -1) O (fatal, fstart, _("invalid syntax in conditional")); ignoring = i; continue; } } /* Nothing to see here... move along. */ if (ignoring) continue; /* Manage the "export" keyword used outside of variable assignment as well as "unexport". */ if (word1eq ("export") || word1eq ("unexport")) { int exporting = *p == 'u' ? 0 : 1; /* Export/unexport ends the previous rule. */ record_waiting_files (); /* (un)export by itself causes everything to be (un)exported. */ if (*p2 == '\0') export_all_variables = exporting; else { size_t l; const char *cp; char *ap; /* Expand the line so we can use indirect and constructed variable names in an (un)export command. */ cp = ap = allocated_variable_expand (p2); for (p = find_next_token (&cp, &l); p != 0; p = find_next_token (&cp, &l)) { struct variable *v = lookup_variable (p, l); if (v == 0) v = define_variable_global (p, l, "", o_file, 0, fstart); v->export = exporting ? v_export : v_noexport; } free (ap); } continue; } /* Handle the special syntax for vpath. */ if (word1eq ("vpath")) { const char *cp; char *vpat; size_t l; /* vpath ends the previous rule. */ record_waiting_files (); cp = variable_expand (p2); p = find_next_token (&cp, &l); if (p != 0) { vpat = xstrndup (p, l); p = find_next_token (&cp, &l); /* No searchpath means remove all previous selective VPATH's with the same pattern. */ } else /* No pattern means remove all previous selective VPATH's. */ vpat = 0; construct_vpath_list (vpat, p); free (vpat); continue; } /* Handle include and variants. */ if (word1eq ("include") || word1eq ("-include") || word1eq ("sinclude")) { /* We have found an 'include' line specifying a nested makefile to be read at this point. */ struct conditionals *save; struct conditionals new_conditionals; struct nameseq *files; /* "-include" (vs "include") says no error if the file does not exist. "sinclude" is an alias for this from SGI. */ int noerror = (p[0] != 'i'); /* Include ends the previous rule. */ record_waiting_files (); p = allocated_variable_expand (p2); /* If no filenames, it's a no-op. */ if (*p == '\0') { free (p); continue; } /* Parse the list of file names. Don't expand archive references! */ p2 = p; files = PARSE_FILE_SEQ (&p2, struct nameseq, MAP_NUL, NULL, PARSEFS_NOAR); free (p); /* Save the state of conditionals and start the included makefile with a clean slate. */ save = install_conditionals (&new_conditionals); /* Record the rules that are waiting so they will determine the default goal before those in the included makefile. */ record_waiting_files (); /* Read each included makefile. */ while (files != 0) { struct nameseq *next = files->next; unsigned short flags = (RM_INCLUDED | RM_NO_TILDE | (noerror ? RM_DONTCARE : 0) | (set_default ? 0 : RM_NO_DEFAULT_GOAL)); struct goaldep *d = eval_makefile (files->name, flags); if (errno) d->floc = *fstart; free_ns (files); files = next; } /* Restore conditional state. */ restore_conditionals (save); continue; } /* Handle the load operations. */ if (word1eq ("load") || word1eq ("-load")) { /* A 'load' line specifies a dynamic object to load. */ struct nameseq *files; int noerror = (p[0] == '-'); /* Load ends the previous rule. */ record_waiting_files (); p = allocated_variable_expand (p2); /* If no filenames, it's a no-op. */ if (*p == '\0') { free (p); continue; } /* Parse the list of file names. Don't expand archive references or strip "./" */ p2 = p; files = PARSE_FILE_SEQ (&p2, struct nameseq, MAP_NUL, NULL, PARSEFS_NOAR); free (p); /* Load each file. */ while (files != 0) { struct nameseq *next = files->next; const char *name = files->name; struct goaldep *deps; int r; /* Load the file. 0 means failure. */ r = load_file (&ebuf->floc, &name, noerror); if (! r && ! noerror) OS (fatal, &ebuf->floc, _("%s: failed to load"), name); free_ns (files); files = next; /* Return of -1 means a special load: don't rebuild it. */ if (r == -1) continue; /* It succeeded, so add it to the list "to be rebuilt". */ deps = alloc_goaldep (); deps->next = read_files; read_files = deps; deps->file = lookup_file (name); if (deps->file == 0) deps->file = enter_file (name); deps->file->loaded = 1; } continue; } /* This line starts with a tab but was not caught above because there was no preceding target, and the line might have been usable as a variable definition. But now we know it is definitely lossage. */ if (line[0] == cmd_prefix) O (fatal, fstart, _("recipe commences before first target")); /* This line describes some target files. This is complicated by the existence of target-specific variables, because we can't expand the entire line until we know if we have one or not. So we expand the line word by word until we find the first ':', then check to see if it's a target-specific variable. In this algorithm, 'lb_next' will point to the beginning of the unexpanded parts of the input buffer, while 'p2' points to the parts of the expanded buffer we haven't searched yet. */ { enum make_word_type wtype; char *cmdleft, *semip, *lb_next; size_t plen = 0; char *colonp; const char *end, *beg; /* Helpers for whitespace stripping. */ /* Record the previous rule. */ record_waiting_files (); tgts_started = fstart->lineno; /* Search the line for an unquoted ; that is not after an unquoted #. */ cmdleft = find_map_unquote (line, MAP_SEMI|MAP_COMMENT|MAP_VARIABLE); if (cmdleft != 0 && *cmdleft == '#') { /* We found a comment before a semicolon. */ *cmdleft = '\0'; cmdleft = 0; } else if (cmdleft != 0) /* Found one. Cut the line short there before expanding it. */ *(cmdleft++) = '\0'; semip = cmdleft; collapse_continuations (line); /* We can't expand the entire line, since if it's a per-target variable we don't want to expand it. So, walk from the beginning, expanding as we go, and looking for "interesting" chars. The first word is always expandable. */ wtype = get_next_mword (line, &lb_next, &wlen); switch (wtype) { case w_eol: if (cmdleft != 0) O (fatal, fstart, _("missing rule before recipe")); /* This line contained something but turned out to be nothing but whitespace (a comment?). */ continue; case w_colon: case w_dcolon: case w_ampcolon: case w_ampdcolon: /* We accept and ignore rules without targets for compatibility with SunOS 4 make. */ no_targets = 1; continue; default: break; } p2 = variable_expand_string (NULL, lb_next, wlen); while (1) { lb_next += wlen; if (cmdleft == 0) { /* Look for a semicolon in the expanded line. */ cmdleft = find_char_unquote (p2, ';'); if (cmdleft != 0) { size_t p2_off = p2 - variable_buffer; size_t cmd_off = cmdleft - variable_buffer; char *pend = p2 + strlen (p2); /* Append any remnants of lb, then cut the line short at the semicolon. */ *cmdleft = '\0'; /* One school of thought says that you shouldn't expand here, but merely copy, since now you're beyond a ";" and into a command script. However, the old parser expanded the whole line, so we continue that for backwards-compatibility. Also, it wouldn't be entirely consistent, since we do an unconditional expand below once we know we don't have a target-specific variable. */ variable_expand_string (pend, lb_next, SIZE_MAX); lb_next += strlen (lb_next); p2 = variable_buffer + p2_off; cmdleft = variable_buffer + cmd_off + 1; } } colonp = find_char_unquote (p2, ':'); #ifdef HAVE_DOS_PATHS if (colonp > p2) /* The drive spec brain-damage strikes again... Note that the only separators of targets in this context are whitespace and a left paren. If others are possible, add them to the string in the call to strchr. */ while (colonp && (colonp[1] == '/' || colonp[1] == '\\') && isalpha ((unsigned char) colonp[-1]) && (colonp == p2 + 1 || strchr (" \t(", colonp[-2]) != 0)) colonp = find_char_unquote (colonp + 1, ':'); #endif if (colonp) { /* If the previous character is '&', back up before '&:' */ if (colonp > p2 && colonp[-1] == '&') --colonp; break; } wtype = get_next_mword (lb_next, &lb_next, &wlen); if (wtype == w_eol) break; p2 += strlen (p2); *(p2++) = ' '; p2 = variable_expand_string (p2, lb_next, wlen); /* We don't need to worry about cmdleft here, because if it was found in the variable_buffer the entire buffer has already been expanded... we'll never get here. */ } p2 = next_token (variable_buffer); /* If the word we're looking at is EOL, see if there's _anything_ on the line. If not, a variable expanded to nothing, so ignore it. If so, we can't parse this line so punt. */ if (wtype == w_eol) { if (*p2 == '\0') continue; /* There's no need to be ivory-tower about this: check for one of the most common bugs found in makefiles... */ if (cmd_prefix == '\t' && strneq (line, " ", 8)) O (fatal, fstart, _("missing separator (did you mean TAB instead of 8 spaces?)")); else O (fatal, fstart, _("missing separator")); } { char save = *colonp; /* If we have &:, it specifies that the targets are understood to be updated/created together by a single invocation of the recipe. */ if (save == '&') also_make_targets = 1; /* Make the colon the end-of-string so we know where to stop looking for targets. Start there again once we're done. */ *colonp = '\0'; filenames = PARSE_SIMPLE_SEQ (&p2, struct nameseq); *colonp = save; p2 = colonp + (save == '&'); } if (!filenames) { /* We accept and ignore rules without targets for compatibility with SunOS 4 make. */ no_targets = 1; continue; } /* This should never be possible; we handled it above. */ assert (*p2 != '\0'); ++p2; /* Is this a one-colon or two-colon entry? */ two_colon = *p2 == ':'; if (two_colon) p2++; /* Test to see if it's a target-specific variable. Copy the rest of the buffer over, possibly temporarily (we'll expand it later if it's not a target-specific variable). PLEN saves the length of the unparsed section of p2, for later. */ if (*lb_next != '\0') { size_t l = p2 - variable_buffer; plen = strlen (p2); variable_buffer_output (p2+plen, lb_next, strlen (lb_next)+1); p2 = variable_buffer + l; } p2 = parse_var_assignment (p2, &vmod); if (vmod.assign_v) { /* If there was a semicolon found, add it back, plus anything after it. */ if (semip) { size_t l = p2 - variable_buffer; *(--semip) = ';'; collapse_continuations (semip); variable_buffer_output (p2 + strlen (p2), semip, strlen (semip)+1); p2 = variable_buffer + l; } record_target_var (filenames, p2, vmod.override_v ? o_override : o_file, &vmod, fstart); filenames = 0; continue; } /* This is a normal target, _not_ a target-specific variable. Unquote any = in the dependency list. */ find_char_unquote (lb_next, '='); /* Remember the command prefix for this target. */ prefix = cmd_prefix; /* We have some targets, so don't ignore the following commands. */ no_targets = 0; /* Expand the dependencies, etc. */ if (*lb_next != '\0') { size_t l = p2 - variable_buffer; variable_expand_string (p2 + plen, lb_next, SIZE_MAX); p2 = variable_buffer + l; /* Look for a semicolon in the expanded line. */ if (cmdleft == 0) { cmdleft = find_char_unquote (p2, ';'); if (cmdleft != 0) *(cmdleft++) = '\0'; } } /* Is this a static pattern rule: 'target: %targ: %dep; ...'? */ p = strchr (p2, ':'); while (p != 0 && p[-1] == '\\') { char *q = &p[-1]; int backslash = 0; while (*q-- == '\\') backslash = !backslash; if (backslash) p = strchr (p + 1, ':'); else break; } #ifdef _AMIGA /* Here, the situation is quite complicated. Let's have a look at a couple of targets: install: dev:make dev:make: make dev:make:: xyz The rule is that it's only a target, if there are TWO :'s OR a space around the :. */ if (p && !(ISSPACE (p[1]) || !p[1] || ISSPACE (p[-1]))) p = 0; #endif #ifdef HAVE_DOS_PATHS { int check_again; do { check_again = 0; /* For DOS-style paths, skip a "C:\..." or a "C:/..." */ if (p != 0 && (p[1] == '\\' || p[1] == '/') && isalpha ((unsigned char)p[-1]) && (p == p2 + 1 || strchr (" \t:(", p[-2]) != 0)) { p = strchr (p + 1, ':'); check_again = 1; } } while (check_again); } #endif if (p != 0) { struct nameseq *target; target = PARSE_FILE_SEQ (&p2, struct nameseq, MAP_COLON, NULL, PARSEFS_NOGLOB); ++p2; if (target == 0) O (fatal, fstart, _("missing target pattern")); else if (target->next != 0) O (fatal, fstart, _("multiple target patterns")); pattern_percent = find_percent_cached (&target->name); pattern = target->name; if (pattern_percent == 0) O (fatal, fstart, _("target pattern contains no '%%'")); free_ns (target); } else pattern = 0; /* Strip leading and trailing whitespaces. */ beg = p2; end = beg + strlen (beg) - 1; strip_whitespace (&beg, &end); /* Put all the prerequisites here; they'll be parsed later. */ if (beg <= end && *beg != '\0') depstr = xstrndup (beg, end - beg + 1); else depstr = 0; commands_idx = 0; if (cmdleft != 0) { /* Semicolon means rest of line is a command. */ size_t l = strlen (cmdleft); cmds_started = fstart->lineno; /* Add this command line to the buffer. */ if (l + 2 > commands_len) { commands_len = (l + 2) * 2; commands = xrealloc (commands, commands_len); } memcpy (commands, cmdleft, l); commands_idx += l; commands[commands_idx++] = '\n'; } /* Determine if this target should be made default. We used to do this in record_files() but because of the delayed target recording and because preprocessor directives are legal in target's commands it is too late. Consider this fragment for example: foo: ifeq ($(.DEFAULT_GOAL),foo) ... endif Because the target is not recorded until after ifeq directive is evaluated the .DEFAULT_GOAL does not contain foo yet as one would expect. Because of this we have to move the logic here. */ if (set_default && default_goal_var->value[0] == '\0') { struct dep *d; struct nameseq *t = filenames; for (; t != 0; t = t->next) { int reject = 0; const char *name = t->name; /* We have nothing to do if this is an implicit rule. */ if (strchr (name, '%') != 0) break; /* See if this target's name does not start with a '.', unless it contains a slash. */ if (*name == '.' && strchr (name, '/') == 0 #ifdef HAVE_DOS_PATHS && strchr (name, '\\') == 0 #endif ) continue; /* If this file is a suffix, don't let it be the default goal file. */ for (d = suffix_file->deps; d != 0; d = d->next) { struct dep *d2; if (*dep_name (d) != '.' && streq (name, dep_name (d))) { reject = 1; break; } for (d2 = suffix_file->deps; d2 != 0; d2 = d2->next) { size_t l = strlen (dep_name (d2)); if (!strneq (name, dep_name (d2), l)) continue; if (streq (name + l, dep_name (d))) { reject = 1; break; } } if (reject) break; } if (!reject) { define_variable_global (".DEFAULT_GOAL", 13, t->name, o_file, 0, NILF); break; } } } } } #undef word1eq if (conditionals->if_cmds) O (fatal, fstart, _("missing 'endif'")); /* At eof, record the last rule. */ record_waiting_files (); free (collapsed); free (commands); } /* Remove comments from LINE. This will also remove backslashes that escape things. It ignores comment characters that appear inside variable references. */ static void remove_comments (char *line) { char *comment; comment = find_map_unquote (line, MAP_COMMENT|MAP_VARIABLE); if (comment != 0) /* Cut off the line at the #. */ *comment = '\0'; } /* Execute a 'undefine' directive. The undefine line has already been read, and NAME is the name of the variable to be undefined. */ static void do_undefine (char *name, enum variable_origin origin, struct ebuffer *ebuf) { char *p, *var; /* Expand the variable name and find the beginning (NAME) and end. */ var = allocated_variable_expand (name); name = next_token (var); if (*name == '\0') O (fatal, &ebuf->floc, _("empty variable name")); p = name + strlen (name) - 1; while (p > name && ISBLANK (*p)) --p; p[1] = '\0'; undefine_variable_global (name, p - name + 1, origin); free (var); } /* Execute a 'define' directive. The first line has already been read, and NAME is the name of the variable to be defined. The following lines remain to be read. */ static struct variable * do_define (char *name, enum variable_origin origin, struct ebuffer *ebuf) { struct variable *v; struct variable var; floc defstart; int nlevels = 1; size_t length = 100; char *definition = xmalloc (length); size_t idx = 0; char *p, *n; defstart = ebuf->floc; p = parse_variable_definition (name, &var); if (p == NULL) /* No assignment token, so assume recursive. */ var.flavor = f_recursive; else { if (var.value[0] != '\0') O (error, &defstart, _("extraneous text after 'define' directive")); /* Chop the string before the assignment token to get the name. */ var.name[var.length] = '\0'; } /* Expand the variable name and find the beginning (NAME) and end. */ n = allocated_variable_expand (name); name = next_token (n); if (name[0] == '\0') O (fatal, &defstart, _("empty variable name")); p = name + strlen (name) - 1; while (p > name && ISBLANK (*p)) --p; p[1] = '\0'; /* Now read the value of the variable. */ while (1) { size_t len; char *line; long nlines = readline (ebuf); /* If there is nothing left to be eval'd, there's no 'endef'!! */ if (nlines < 0) O (fatal, &defstart, _("missing 'endef', unterminated 'define'")); ebuf->floc.lineno += nlines; line = ebuf->buffer; collapse_continuations (line); /* If the line doesn't begin with a tab, test to see if it introduces another define, or ends one. Stop if we find an 'endef' */ if (line[0] != cmd_prefix) { p = next_token (line); len = strlen (p); /* If this is another 'define', increment the level count. */ 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 (p[5]))) && strneq (p, "endef", 5)) { p += 5; remove_comments (p); if (*(next_token (p)) != '\0') O (error, &ebuf->floc, _("extraneous text after 'endef' directive")); if (--nlevels == 0) break; } } /* Add this line to the variable definition. */ len = strlen (line); if (idx + len + 1 > length) { length = (idx + len) * 2; definition = xrealloc (definition, length + 1); } memcpy (&definition[idx], line, len); idx += len; /* Separate lines with a newline. */ definition[idx++] = '\n'; } /* We've got what we need; define the variable. */ if (idx == 0) definition[0] = '\0'; else definition[idx - 1] = '\0'; v = do_variable_definition (&defstart, name, definition, origin, var.flavor, 0); free (definition); free (n); return (v); } /* Interpret conditional commands "ifdef", "ifndef", "ifeq", "ifneq", "else" and "endif". LINE is the input line, with the command as its first word. FILENAME and LINENO are the filename and line number in the current makefile. They are used for error messages. Value is -2 if the line is not a conditional at all, -1 if the line is an invalid conditional, 0 if following text should be interpreted, 1 if following text should be ignored. */ static int conditional_line (char *line, size_t len, const floc *flocp) { const char *cmdname; enum { c_ifdef, c_ifndef, c_ifeq, c_ifneq, c_else, c_endif } cmdtype; unsigned int i; unsigned int o; /* Compare a word, both length and contents. */ #define word1eq(s) (len == CSTRLEN (s) && strneq (s, line, CSTRLEN (s))) #define chkword(s, t) if (word1eq (s)) { cmdtype = (t); cmdname = (s); } /* Make sure this line is a conditional. */ chkword ("ifdef", c_ifdef) else chkword ("ifndef", c_ifndef) else chkword ("ifeq", c_ifeq) else chkword ("ifneq", c_ifneq) else chkword ("else", c_else) else chkword ("endif", c_endif) else return -2; /* Found one: skip past it and any whitespace after it. */ line += len; NEXT_TOKEN (line); #define EXTRATEXT() OS (error, flocp, _("extraneous text after '%s' directive"), cmdname) #define EXTRACMD() OS (fatal, flocp, _("extraneous '%s'"), cmdname) /* An 'endif' cannot contain extra text, and reduces the if-depth by 1 */ if (cmdtype == c_endif) { if (*line != '\0') EXTRATEXT (); if (!conditionals->if_cmds) EXTRACMD (); --conditionals->if_cmds; goto DONE; } /* An 'else' statement can either be simple, or it can have another conditional after it. */ if (cmdtype == c_else) { const char *p; if (!conditionals->if_cmds) EXTRACMD (); o = conditionals->if_cmds - 1; if (conditionals->seen_else[o]) O (fatal, flocp, _("only one 'else' per conditional")); /* Change the state of ignorance. */ switch (conditionals->ignoring[o]) { case 0: /* We've just been interpreting. Never do it again. */ conditionals->ignoring[o] = 2; break; case 1: /* We've never interpreted yet. Maybe this time! */ conditionals->ignoring[o] = 0; break; } /* It's a simple 'else'. */ if (*line == '\0') { conditionals->seen_else[o] = 1; goto DONE; } /* The 'else' has extra text. That text must be another conditional and cannot be an 'else' or 'endif'. */ /* Find the length of the next word. */ for (p = line+1; ! STOP_SET (*p, MAP_SPACE|MAP_NUL); ++p) ; len = p - line; /* If it's 'else' or 'endif' or an illegal conditional, fail. */ if (word1eq ("else") || word1eq ("endif") || conditional_line (line, len, flocp) < 0) EXTRATEXT (); else { /* conditional_line() created a new level of conditional. Raise it back to this level. */ if (conditionals->ignoring[o] < 2) conditionals->ignoring[o] = conditionals->ignoring[o+1]; --conditionals->if_cmds; } goto DONE; } if (conditionals->allocated == 0) { conditionals->allocated = 5; conditionals->ignoring = xmalloc (conditionals->allocated); conditionals->seen_else = xmalloc (conditionals->allocated); } o = conditionals->if_cmds++; if (conditionals->if_cmds > conditionals->allocated) { conditionals->allocated += 5; conditionals->ignoring = xrealloc (conditionals->ignoring, conditionals->allocated); conditionals->seen_else = xrealloc (conditionals->seen_else, conditionals->allocated); } /* Record that we have seen an 'if...' but no 'else' so far. */ conditionals->seen_else[o] = 0; /* Search through the stack to see if we're already ignoring. */ for (i = 0; i < o; ++i) if (conditionals->ignoring[i]) { /* We are already ignoring, so just push a level to match the next "else" or "endif", and keep ignoring. We don't want to expand variables in the condition. */ conditionals->ignoring[o] = 1; return 1; } if (cmdtype == c_ifdef || cmdtype == c_ifndef) { size_t l; char *var; struct variable *v; char *p; /* Expand the thing we're looking up, so we can use indirect and constructed variable names. */ var = allocated_variable_expand (line); /* Make sure there's only one variable name to test. */ p = end_of_token (var); l = p - var; NEXT_TOKEN (p); if (*p != '\0') return -1; var[l] = '\0'; v = lookup_variable (var, l); conditionals->ignoring[o] = ((v != 0 && *v->value != '\0') == (cmdtype == c_ifndef)); free (var); } else { /* "ifeq" or "ifneq". */ char *s1, *s2; size_t l; char termin = *line == '(' ? ',' : *line; if (termin != ',' && termin != '"' && termin != '\'') return -1; s1 = ++line; /* Find the end of the first string. */ if (termin == ',') { int count = 0; for (; *line != '\0'; ++line) if (*line == '(') ++count; else if (*line == ')') --count; else if (*line == ',' && count <= 0) break; } else while (*line != '\0' && *line != termin) ++line; if (*line == '\0') return -1; if (termin == ',') { /* Strip blanks after the first string. */ char *p = line++; while (ISBLANK (p[-1])) --p; *p = '\0'; } else *line++ = '\0'; s2 = variable_expand (s1); /* We must allocate a new copy of the expanded string because variable_expand re-uses the same buffer. */ l = strlen (s2); s1 = alloca (l + 1); memcpy (s1, s2, l + 1); if (termin != ',') /* Find the start of the second string. */ NEXT_TOKEN (line); termin = termin == ',' ? ')' : *line; if (termin != ')' && termin != '"' && termin != '\'') return -1; /* Find the end of the second string. */ if (termin == ')') { int count = 0; s2 = next_token (line); for (line = s2; *line != '\0'; ++line) { if (*line == '(') ++count; else if (*line == ')') { if (count <= 0) break; else --count; } } } else { ++line; s2 = line; while (*line != '\0' && *line != termin) ++line; } if (*line == '\0') return -1; *(line++) = '\0'; NEXT_TOKEN (line); if (*line != '\0') EXTRATEXT (); s2 = variable_expand (s2); conditionals->ignoring[o] = (streq (s1, s2) == (cmdtype == c_ifneq)); } DONE: /* Search through the stack to see if we're ignoring. */ for (i = 0; i < conditionals->if_cmds; ++i) if (conditionals->ignoring[i]) return 1; return 0; } /* Record target-specific variable values for files FILENAMES. TWO_COLON is nonzero if a double colon was used. The links of FILENAMES are freed, and so are any names in it that are not incorporated into other data structures. If the target is a pattern, add the variable to the pattern-specific variable value list. */ static void record_target_var (struct nameseq *filenames, char *defn, enum variable_origin origin, struct vmodifiers *vmod, const floc *flocp) { struct nameseq *nextf; struct variable_set_list *global; global = current_variable_set_list; /* If the variable is an append version, store that but treat it as a normal recursive variable. */ for (; filenames != 0; filenames = nextf) { struct variable *v; const char *name = filenames->name; const char *percent; struct pattern_var *p; nextf = filenames->next; free_ns (filenames); /* If it's a pattern target, then add it to the pattern-specific variable list. */ percent = find_percent_cached (&name); if (percent) { /* Get a reference for this pattern-specific variable struct. */ p = create_pattern_var (name, percent); p->variable.fileinfo = *flocp; /* I don't think this can fail since we already determined it was a variable definition. */ v = assign_variable_definition (&p->variable, defn); assert (v != 0); v->origin = origin; if (v->flavor == f_simple) v->value = allocated_variable_expand (v->value); else v->value = xstrdup (v->value); } else { struct file *f; /* Get a file reference for this file, and initialize it. We don't want to just call enter_file() because that allocates a new entry if the file is a double-colon, which we don't want in this situation. */ f = lookup_file (name); if (!f) f = enter_file (strcache_add (name)); else if (f->double_colon) f = f->double_colon; initialize_file_variables (f, 1); current_variable_set_list = f->variables; v = try_variable_definition (flocp, defn, origin, 1); if (!v) O (fatal, flocp, _("Malformed target-specific variable definition")); current_variable_set_list = global; } /* Set up the variable to be *-specific. */ v->per_target = 1; v->private_var = vmod->private_v; v->export = vmod->export_v ? v_export : v_default; /* If it's not an override, check to see if there was a command-line setting. If so, reset the value. */ if (v->origin != o_override) { struct variable *gv; size_t len = strlen (v->name); gv = lookup_variable (v->name, len); if (gv && v != gv && (gv->origin == o_env_override || gv->origin == o_command)) { free (v->value); v->value = xstrdup (gv->value); v->origin = gv->origin; v->recursive = gv->recursive; v->append = 0; } } } } /* Record a description line for files FILENAMES, with dependencies DEPS, commands to execute described by COMMANDS and COMMANDS_IDX, coming from FILENAME:COMMANDS_STARTED. TWO_COLON is nonzero if a double colon was used. If not nil, PATTERN is the '%' pattern to make this a static pattern rule, and PATTERN_PERCENT is a pointer to the '%' within it. The links of FILENAMES are freed, and so are any names in it that are not incorporated into other data structures. */ static void record_files (struct nameseq *filenames, int are_also_makes, const char *pattern, const char *pattern_percent, char *depstr, unsigned int cmds_started, char *commands, size_t commands_idx, int two_colon, char prefix, const floc *flocp) { struct commands *cmds; struct dep *deps; struct dep *also_make = NULL; const char *implicit_percent; const char *name; /* If we've already snapped deps, that means we're in an eval being resolved after the makefiles have been read in. We can't add more rules at this time, since they won't get snapped and we'll get core dumps. See Savannah bug # 12124. */ if (snapped_deps) O (fatal, flocp, _("prerequisites cannot be defined in recipes")); /* Determine if this is a pattern rule or not. */ name = filenames->name; implicit_percent = find_percent_cached (&name); /* If there's a recipe, set up a struct for it. */ if (commands_idx > 0) { 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; } else if (are_also_makes) O (fatal, flocp, _("grouped targets must provide a recipe")); else cmds = NULL; /* If there's a prereq string then parse it--unless it's eligible for 2nd expansion: if so, snap_deps() will do it. */ if (depstr == 0) deps = 0; else { depstr = unescape_char (depstr, ':'); if (second_expansion && strchr (depstr, '$')) { deps = alloc_dep (); deps->name = depstr; deps->need_2nd_expansion = 1; deps->staticpattern = pattern != 0; } else { deps = split_prereqs (depstr); free (depstr); /* We'll enter static pattern prereqs later when we have the stem. We don't want to enter pattern rules at all so that we don't think that they ought to exist (make manual "Implicit Rule Search Algorithm", item 5c). */ if (! pattern && ! implicit_percent) deps = enter_prereqs (deps, NULL); } } /* For implicit rules, _all_ the targets must have a pattern. That means we can test the first one to see if we're working with an implicit rule; if so we handle it specially. */ if (implicit_percent) { struct nameseq *nextf; const char **targets, **target_pats; unsigned short c; if (pattern != 0) O (fatal, flocp, _("mixed implicit and static pattern rules")); /* Count the targets to create an array of target names. We already have the first one. */ nextf = filenames->next; free_ns (filenames); filenames = nextf; for (c = 1; nextf; ++c, nextf = nextf->next) ; targets = xmalloc (c * sizeof (const char *)); target_pats = xmalloc (c * sizeof (const char *)); targets[0] = name; target_pats[0] = implicit_percent; c = 1; while (filenames) { name = filenames->name; implicit_percent = find_percent_cached (&name); if (implicit_percent == 0) O (fatal, flocp, _("mixed implicit and normal rules")); targets[c] = name; target_pats[c] = implicit_percent; ++c; nextf = filenames->next; free_ns (filenames); filenames = nextf; } create_pattern_rule (targets, target_pats, c, two_colon, deps, cmds, 1); return; } /* Walk through each target and create it in the database. We already set up the first target, above. */ while (1) { struct nameseq *nextf = filenames->next; struct file *f; struct dep *this = 0; free_ns (filenames); /* Check for special targets. Do it here instead of, say, snap_deps() so that we can immediately use the value. */ if (!posix_pedantic && streq (name, ".POSIX")) { posix_pedantic = 1; define_variable_cname (".SHELLFLAGS", "-ec", o_default, 0); /* These default values are based on IEEE Std 1003.1-2008. It requires '-O 1' for [CF]FLAGS, but GCC doesn't allow space between -O and the number so omit it here. */ define_variable_cname ("ARFLAGS", "-rv", o_default, 0); define_variable_cname ("CC", "c99", o_default, 0); define_variable_cname ("CFLAGS", "-O1", o_default, 0); define_variable_cname ("FC", "fort77", o_default, 0); define_variable_cname ("FFLAGS", "-O1", o_default, 0); define_variable_cname ("SCCSGETFLAGS", "-s", o_default, 0); } else if (!second_expansion && streq (name, ".SECONDEXPANSION")) second_expansion = 1; #if !defined (__MSDOS__) && !defined (__EMX__) else if (!one_shell && streq (name, ".ONESHELL")) one_shell = 1; #endif /* If this is a static pattern rule: 'targets: target%pattern: prereq%pattern; recipe', make sure the pattern matches this target name. */ if (pattern && !pattern_matches (pattern, pattern_percent, name)) OS (error, flocp, _("target '%s' doesn't match the target pattern"), name); else if (deps) /* If there are multiple targets, copy the chain DEPS for all but the last one. It is not safe for the same deps to go in more than one place in the database. */ this = nextf != 0 ? copy_dep_chain (deps) : deps; /* Find or create an entry in the file database for this target. */ if (!two_colon) { /* Single-colon. Combine this rule with the file's existing record, if any. */ f = enter_file (strcache_add (name)); if (f->double_colon) OS (fatal, flocp, _("target file '%s' has both : and :: entries"), f->name); /* If CMDS == F->CMDS, this target was listed in this rule more than once. Just give a warning since this is harmless. */ if (cmds != 0 && cmds == f->cmds) OS (error, flocp, _("target '%s' given more than once in the same rule"), f->name); /* Check for two single-colon entries both with commands. Check is_target so that we don't lose on files such as .c.o whose commands were preinitialized. */ else if (cmds != 0 && f->cmds != 0 && f->is_target) { size_t l = strlen (f->name); error (&cmds->fileinfo, l, _("warning: overriding recipe for target '%s'"), f->name); error (&f->cmds->fileinfo, l, _("warning: ignoring old recipe for target '%s'"), f->name); } /* Defining .DEFAULT with no deps or cmds clears it. */ if (f == default_file && this == 0 && cmds == 0) f->cmds = 0; if (cmds != 0) f->cmds = cmds; /* Defining .SUFFIXES with no dependencies clears out the list of suffixes. */ if (f == suffix_file && this == 0) { free_dep_chain (f->deps); f->deps = 0; } } else { /* Double-colon. Make a new record even if there already is one. */ f = lookup_file (name); /* Check for both : and :: rules. Check is_target so we don't lose on default suffix rules or makefiles. */ if (f != 0 && f->is_target && !f->double_colon) OS (fatal, flocp, _("target file '%s' has both : and :: entries"), f->name); f = enter_file (strcache_add (name)); /* If there was an existing entry and it was a double-colon entry, enter_file will have returned a new one, making it the prev pointer of the old one, and setting its double_colon pointer to the first one. */ if (f->double_colon == 0) /* This is the first entry for this name, so we must set its double_colon pointer to itself. */ f->double_colon = f; f->cmds = cmds; } if (are_also_makes) { struct dep *also = alloc_dep(); also->name = f->name; also->file = f; also->next = also_make; also_make = also; } f->is_target = 1; /* If this is a static pattern rule, set the stem to the part of its name that matched the '%' in the pattern, so you can use $* in the commands. If we didn't do it before, enter the prereqs now. */ if (pattern) { static const char *percent = "%"; char *buffer = variable_expand (""); char *o = patsubst_expand_pat (buffer, name, pattern, percent, pattern_percent+1, percent+1); f->stem = strcache_add_len (buffer, o - buffer); if (this) { if (! this->need_2nd_expansion) this = enter_prereqs (this, f->stem); else this->stem = f->stem; } } /* Add the dependencies to this file entry. */ if (this != 0) { /* Add the file's old deps and the new ones in THIS together. */ if (f->deps == 0) f->deps = this; else if (cmds != 0) { struct dep *d = this; /* If this rule has commands, put these deps first. */ while (d->next != 0) d = d->next; d->next = f->deps; f->deps = this; } else { struct dep *d = f->deps; /* A rule without commands: put its prereqs at the end. */ while (d->next != 0) d = d->next; d->next = this; } } name = f->name; /* All done! Set up for the next one. */ if (nextf == 0) break; filenames = nextf; /* Reduce escaped percents. If there are any unescaped it's an error */ name = filenames->name; if (find_percent_cached (&name)) O (error, flocp, _("*** mixed implicit and normal rules: deprecated syntax")); } /* If there are also-makes, then populate a copy of the also-make list into each one. For the last file, we take our original also_make list instead wastefully copying it one more time and freeing it. */ { struct dep *i; for (i = also_make; i != NULL; i = i->next) { struct file *f = i->file; struct dep *cpy = i->next ? copy_dep_chain (also_make) : also_make; if (f->also_make) { OS (error, &cmds->fileinfo, _("warning: overriding group membership for target '%s'"), f->name); free_dep_chain (f->also_make); } f->also_make = cpy; } } } /* Search STRING for an unquoted STOPMAP. Backslashes quote elements from STOPMAP and backslash. Quoting backslashes are removed from STRING by compacting it into itself. Returns a pointer to the first unquoted STOPCHAR if there is one, or nil if there are none. If MAP_VARIABLE is set, then the complete contents of variable references are skipped, even if the contain STOPMAP characters. */ static char * find_map_unquote (char *string, int stopmap) { size_t string_len = 0; char *p = string; /* Always stop on NUL. */ stopmap |= MAP_NUL; while (1) { while (! STOP_SET (*p, stopmap)) ++p; if (*p == '\0') break; /* If we stopped due to a variable reference, skip over its contents. */ if (*p == '$') { 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. */ if (openparen == '(' || openparen == '{') { unsigned int pcount = 1; char closeparen = (openparen == '(' ? ')' : '}'); while (*p) { if (*p == openparen) ++pcount; else if (*p == closeparen) if (--pcount == 0) { ++p; break; } ++p; } } /* Skipped the variable reference: look for STOPCHARS again. */ continue; } if (p > string && p[-1] == '\\') { /* Search for more backslashes. */ int i = -2; while (&p[i] >= string && p[i] == '\\') --i; ++i; /* Only compute the length if really needed. */ if (string_len == 0) string_len = strlen (string); /* The number of backslashes is now -I. Copy P over itself to swallow half of them. */ memmove (&p[i], &p[i/2], (string_len - (p - string)) - (i/2) + 1); p += i/2; if (i % 2 == 0) /* All the backslashes quoted each other; the STOPCHAR was unquoted. */ return p; /* The STOPCHAR was quoted by a backslash. Look for another. */ } else /* No backslash in sight. */ return p; } /* Never hit a STOPCHAR or blank (with BLANK nonzero). */ return 0; } static char * find_char_unquote (char *string, int stop) { size_t string_len = 0; char *p = string; while (1) { p = strchr(p, stop); if (!p) return NULL; if (p > string && p[-1] == '\\') { /* Search for more backslashes. */ int i = -2; while (&p[i] >= string && p[i] == '\\') --i; ++i; /* Only compute the length if really needed. */ if (string_len == 0) string_len = strlen (string); /* The number of backslashes is now -I. Copy P over itself to swallow half of them. */ memmove (&p[i], &p[i/2], (string_len - (p - string)) - (i/2) + 1); p += i/2; if (i % 2 == 0) /* All the backslashes quoted each other; the STOPCHAR was unquoted. */ return p; /* The STOPCHAR was quoted by a backslash. Look for another. */ } else /* No backslash in sight. */ return p; } } /* Unescape a character in a string. The string is compressed onto itself. */ static char * unescape_char (char *string, int c) { char *p = string; char *s = string; while (*s != '\0') { if (*s == '\\') { char *e = s; size_t l; /* We found a backslash. See if it's escaping our character. */ while (*e == '\\') ++e; l = e - s; if (*e != c || l%2 == 0) { /* 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) { /* It is, and there's >1 backslash. Take half of them. */ l /= 2; memmove (p, s, l); p += l; } s = e; } *(p++) = *(s++); } *p = '\0'; return string; } /* Search PATTERN for an unquoted % and handle quoting. */ char * find_percent (char *pattern) { return find_char_unquote (pattern, '%'); } /* Search STRING for an unquoted % and handle quoting. Returns a pointer to the % or NULL if no % was found. This version is used with strings in the string cache: if there's a need to modify the string a new version will be added to the string cache and *STRING will be set to that. */ const char * find_percent_cached (const char **string) { const char *p = *string; char *new = 0; size_t slen = 0; /* If the first char is a % return now. This lets us avoid extra tests inside the loop. */ if (*p == '%') return p; while (1) { p = strchr(p, '%'); if (!p) break; /* See if this % is escaped with a backslash; if not we're done. */ if (p[-1] != '\\') break; { /* Search for more backslashes. */ char *pv; int i = -2; while (&p[i] >= *string && p[i] == '\\') --i; ++i; /* At this point we know we'll need to allocate a new string. Make a copy if we haven't yet done so. */ if (! new) { slen = strlen (*string); new = alloca (slen + 1); memcpy (new, *string, slen + 1); p = new + (p - *string); *string = new; } /* At this point *string, p, and new all point into the same string. Get a non-const version of p so we can modify new. */ pv = new + (p - *string); /* The number of backslashes is now -I. Copy P over itself to swallow half of them. */ memmove (&pv[i], &pv[i/2], (slen - (pv - new)) - (i/2) + 1); p += i/2; /* If the backslashes quoted each other; the % was unquoted. */ if (i % 2 == 0) break; } } /* If we had to change STRING, add it to the strcache. */ if (new) { *string = strcache_add (*string); if (p) p = *string + (p - new); } /* If we didn't find a %, return NULL. Otherwise return a ptr to it. */ return p; } /* Find the next line of text in an eval buffer, combining continuation lines into one line. Return the number of actual lines read (> 1 if continuation lines). Returns -1 if there's nothing left in the buffer. After this function, ebuf->buffer points to the first character of the line we just found. */ /* Read a line of text from a STRING. Since we aren't really reading from a file, don't bother with linenumbers. */ static long readstring (struct ebuffer *ebuf) { char *eol; /* If there is nothing left in this buffer, return 0. */ if (ebuf->bufnext >= ebuf->bufstart + ebuf->size) return -1; /* Set up a new starting point for the buffer, and find the end of the next logical line (taking into account backslash/newline pairs). */ eol = ebuf->buffer = ebuf->bufnext; while (1) { int backslash = 0; const char *bol = eol; const char *p; /* Find the next newline. At EOS, stop. */ p = eol = strchr (eol , '\n'); if (!eol) { ebuf->bufnext = ebuf->bufstart + ebuf->size + 1; return 0; } /* Found a newline; if it's escaped continue; else we're done. */ while (p > bol && *(--p) == '\\') backslash = !backslash; if (!backslash) break; ++eol; } /* Overwrite the newline char. */ *eol = '\0'; ebuf->bufnext = eol+1; return 0; } static long readline (struct ebuffer *ebuf) { char *p; char *end; char *start; long nlines = 0; /* The behaviors between string and stream buffers are different enough to warrant different functions. Do the Right Thing. */ if (!ebuf->fp) return readstring (ebuf); /* When reading from a file, we always start over at the beginning of the buffer for each new line. */ p = start = ebuf->bufstart; end = p + ebuf->size; *p = '\0'; while (fgets (p, (int) (end - p), ebuf->fp) != 0) { char *p2; size_t len; int backslash; len = strlen (p); if (len == 0) { /* This only happens when the first thing on the line is a '\0'. It is a pretty hopeless case, but (wonder of wonders) Athena lossage strikes again! (xmkmf puts NULs in its makefiles.) There is nothing really to be done; we synthesize a newline so the following line doesn't appear to be part of this line. */ O (error, &ebuf->floc, _("warning: NUL character seen; rest of line ignored")); p[0] = '\n'; len = 1; } /* Jump past the text we just read. */ p += len; /* If the last char isn't a newline, the whole line didn't fit into the buffer. Get some more buffer and try again. */ if (p[-1] != '\n') goto more_buffer; /* We got a newline, so add one to the count of lines. */ ++nlines; #if !defined(WINDOWS32) && !defined(__MSDOS__) && !defined(__EMX__) /* Check to see if the line was really ended with CRLF; if so ignore the CR. */ if ((p - start) > 1 && p[-2] == '\r') { --p; memmove (p-1, p, strlen (p) + 1); } #endif backslash = 0; for (p2 = p - 2; p2 >= start; --p2) { if (*p2 != '\\') break; backslash = !backslash; } if (!backslash) { p[-1] = '\0'; break; } /* It was a backslash/newline combo. If we have more space, read another line. */ if (end - p >= 80) continue; /* We need more space at the end of our buffer, so realloc it. Make sure to preserve the current offset of p. */ more_buffer: { size_t off = p - start; ebuf->size *= 2; start = ebuf->buffer = ebuf->bufstart = xrealloc (start, ebuf->size); p = start + off; end = start + ebuf->size; *p = '\0'; } } if (ferror (ebuf->fp)) pfatal_with_name (ebuf->floc.filenm); /* If we found some lines, return how many. If we didn't, but we did find _something_, that indicates we read the last line of a file with no final newline; return 1. If we read nothing, we're at EOF; return -1. */ return nlines ? nlines : p == ebuf->bufstart ? -1 : 1; } /* Parse the next "makefile word" from the input buffer, and return info about it. A "makefile word" is one of: w_bogus Should never happen w_eol End of input w_static A static word; cannot be expanded w_variable A word containing one or more variables/functions w_colon A colon w_dcolon A double-colon w_ampcolon An ampersand-colon (&:) token w_ampdcolon An ampersand-double-colon (&::) token w_semicolon A semicolon w_varassign A variable assignment operator (=, :=, ::=, +=, ?=, or !=) Note that this function is only used when reading certain parts of the makefile. Don't use it where special rules hold sway (RHS of a variable, in a command list, etc.) */ static enum make_word_type get_next_mword (char *buffer, char **startp, size_t *length) { enum make_word_type wtype; char *p = buffer, *beg; char c; /* Skip any leading whitespace. */ while (ISBLANK (*p)) ++p; beg = p; c = *(p++); /* Look at the start of the word to see if it's simple. */ switch (c) { case '\0': wtype = w_eol; goto done; case ';': wtype = w_semicolon; goto done; case '=': wtype = w_varassign; goto done; case ':': if (*p == '=') { ++p; wtype = w_varassign; /* := */ } else if (*p == ':') { ++p; if (p[1] == '=') { ++p; wtype = w_varassign; /* ::= */ } else wtype = w_dcolon; } else wtype = w_colon; goto done; case '&': if (*p == ':') { ++p; if (*p != ':') wtype = w_ampcolon; /* &: */ else { ++p; wtype = w_ampdcolon; /* &:: */ } goto done; } break; case '+': case '?': case '!': if (*p == '=') { ++p; wtype = w_varassign; /* += or ?= or != */ goto done; } break; default: break; } /* This is some non-operator word. A word consists of the longest string of characters that doesn't contain whitespace, one of [:=#], or [?+!]=, or &:. */ /* We start out assuming a static word; if we see a variable we'll adjust our assumptions then. */ wtype = w_static; /* We already found the first value of "c", above. */ while (1) { char closeparen; int count; switch (c) { case '\0': case ' ': case '\t': case '=': goto done_word; case ':': #ifdef HAVE_DOS_PATHS /* A word CAN include a colon in its drive spec. The drive spec is allowed either at the beginning of a word, or as part of the archive member name, like in "libfoo.a(d:/foo/bar.o)". */ if ((p - beg == 2 || (p - beg > 2 && p[-3] == '(')) && isalpha ((unsigned char)p[-2])) break; #endif goto done_word; case '$': 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. */ wtype = w_variable; if (c == '(') closeparen = ')'; else if (c == '{') closeparen = '}'; else /* This is a single-letter variable reference. */ break; for (count=0; *p != '\0'; ++p) { if (*p == c) ++count; else if (*p == closeparen && --count < 0) { ++p; break; } } break; case '?': case '+': if (*p == '=') goto done_word; break; case '\\': switch (*p) { case ':': case ';': case '=': case '\\': ++p; break; } break; case '&': if (*p == ':') goto done_word; break; default: break; } c = *(p++); } done_word: --p; done: if (startp) *startp = beg; if (length) *length = p - beg; return wtype; } /* Construct the list of include directories from the arguments and the default list. */ void construct_include_path (const char **arg_dirs) { #ifdef VAXC /* just don't ask ... */ stat_t stbuf; #else struct stat stbuf; #endif const char **dirs; const char **cpp; size_t idx; /* Compute the number of pointers we need in the table. */ idx = sizeof (default_include_directories) / sizeof (const char *); if (arg_dirs) for (cpp = arg_dirs; *cpp != 0; ++cpp) ++idx; #ifdef __MSDOS__ /* Add one for $DJDIR. */ ++idx; #endif dirs = xmalloc (idx * sizeof (const char *)); idx = 0; max_incl_len = 0; /* First consider any dirs specified with -I switches. Ignore any that don't exist. Remember the maximum string length. */ if (arg_dirs) while (*arg_dirs != 0) { const char *dir = *(arg_dirs++); char *expanded = 0; int e; if (dir[0] == '~') { expanded = tilde_expand (dir); if (expanded != 0) dir = expanded; } EINTRLOOP (e, stat (dir, &stbuf)); if (e == 0 && S_ISDIR (stbuf.st_mode)) { size_t len = strlen (dir); /* If dir name is written with trailing slashes, discard them. */ while (len > 1 && dir[len - 1] == '/') --len; if (len > max_incl_len) max_incl_len = len; dirs[idx++] = strcache_add_len (dir, len); } free (expanded); } /* Now add the standard default dirs at the end. */ #ifdef __MSDOS__ { /* The environment variable $DJDIR holds the root of the DJGPP directory tree; add ${DJDIR}/include. */ struct variable *djdir = lookup_variable ("DJDIR", 5); if (djdir) { size_t len = strlen (djdir->value) + 8; char *defdir = alloca (len + 1); strcat (strcpy (defdir, djdir->value), "/include"); dirs[idx++] = strcache_add (defdir); if (len > max_incl_len) max_incl_len = len; } } #endif for (cpp = default_include_directories; *cpp != 0; ++cpp) { int e; EINTRLOOP (e, stat (*cpp, &stbuf)); if (e == 0 && S_ISDIR (stbuf.st_mode)) { size_t len = strlen (*cpp); /* If dir name is written with trailing slashes, discard them. */ while (len > 1 && (*cpp)[len - 1] == '/') --len; if (len > max_incl_len) max_incl_len = len; dirs[idx++] = strcache_add_len (*cpp, len); } } dirs[idx] = 0; /* Now add each dir to the .INCLUDE_DIRS variable. */ for (cpp = dirs; *cpp != 0; ++cpp) do_variable_definition (NILF, ".INCLUDE_DIRS", *cpp, o_default, f_append, 0); include_directories = dirs; } /* Expand ~ or ~USER at the beginning of NAME. Return a newly malloc'd string or 0. */ char * tilde_expand (const char *name) { #ifndef VMS if (name[1] == '/' || name[1] == '\0') { char *home_dir; int is_variable; { /* Turn off --warn-undefined-variables while we expand HOME. */ int save = warn_undefined_variables_flag; warn_undefined_variables_flag = 0; home_dir = allocated_variable_expand ("$(HOME)"); warn_undefined_variables_flag = save; } is_variable = home_dir[0] != '\0'; if (!is_variable) { free (home_dir); home_dir = getenv ("HOME"); } # if !defined(_AMIGA) && !defined(WINDOWS32) if (home_dir == 0 || home_dir[0] == '\0') { char *logname = getlogin (); home_dir = 0; if (logname != 0) { struct passwd *p = getpwnam (logname); if (p != 0) home_dir = p->pw_dir; } } # endif /* !AMIGA && !WINDOWS32 */ if (home_dir != 0) { char *new = xstrdup (concat (2, home_dir, name + 1)); if (is_variable) free (home_dir); return new; } } # if !defined(_AMIGA) && !defined(WINDOWS32) else { struct passwd *pwent; char *userend = strchr (name + 1, '/'); if (userend != 0) *userend = '\0'; pwent = getpwnam (name + 1); if (pwent != 0) { if (userend == 0) return xstrdup (pwent->pw_dir); else return xstrdup (concat (3, pwent->pw_dir, "/", userend + 1)); } else if (userend != 0) *userend = '/'; } # endif /* !AMIGA && !WINDOWS32 */ #endif /* !VMS */ return 0; } /* Parse a string into a sequence of filenames represented as a chain of struct nameseq's and return that chain. Optionally expand the strings via glob(). The string is passed as STRINGP, the address of a string pointer. The string pointer is updated to point at the first character not parsed, which either is a null char or equals STOPMAP. SIZE is how large (in bytes) each element in the new chain should be. This is useful if we want them actually to be other structures that have room for additional info. STOPMAP is a map of characters that tell us to stop parsing. PREFIX, if non-null, is added to the beginning of each filename. FLAGS allows one or more of the following bitflags to be set: PARSEFS_NOSTRIP - Do no strip './'s off the beginning PARSEFS_NOAR - Do not check filenames for archive references PARSEFS_NOGLOB - Do not expand globbing characters PARSEFS_EXISTS - Only return globbed files that actually exist (cannot also set NOGLOB) PARSEFS_NOCACHE - Do not add filenames to the strcache (caller frees) */ void * parse_file_seq (char **stringp, size_t size, int stopmap, const char *prefix, int flags) { /* tmp points to tmpbuf after the prefix, if any. tp is the end of the buffer. */ static char *tmpbuf = NULL; int cachep = NONE_SET (flags, PARSEFS_NOCACHE); struct nameseq *new = 0; struct nameseq **newp = &new; #define NEWELT(_n) do { \ const char *__n = (_n); \ *newp = xcalloc (size); \ (*newp)->name = (cachep ? strcache_add (__n) : xstrdup (__n)); \ newp = &(*newp)->next; \ } while(0) char *p; glob_t gl; char *tp; int findmap = stopmap|MAP_VMSCOMMA|MAP_NUL; if (NONE_SET (flags, PARSEFS_ONEWORD)) findmap |= MAP_BLANK; /* Always stop on NUL. */ stopmap |= MAP_NUL; if (size < sizeof (struct nameseq)) size = sizeof (struct nameseq); if (NONE_SET (flags, PARSEFS_NOGLOB)) dir_setup_glob (&gl); /* Get enough temporary space to construct the largest possible target. */ { static size_t tmpbuf_len = 0; size_t l = strlen (*stringp) + 1; if (l > tmpbuf_len) { tmpbuf = xrealloc (tmpbuf, l); tmpbuf_len = l; } } tp = tmpbuf; /* Parse STRING. P will always point to the end of the parsed content. */ p = *stringp; while (1) { const char *name; const char **nlist = 0; char *tildep = 0; int globme = 1; #ifndef NO_ARCHIVES char *arname = 0; char *memname = 0; #endif char *s; size_t nlen; int tot, i; /* Skip whitespace; at the end of the string or STOPCHAR we're done. */ NEXT_TOKEN (p); if (STOP_SET (*p, stopmap)) break; /* There are names left, so find the end of the next name. Throughout this iteration S points to the start. */ s = p; p = find_map_unquote (p, findmap); #ifdef VMS /* convert comma separated list to space separated */ if (p && *p == ',') *p =' '; #endif #ifdef _AMIGA /* If we stopped due to a device name, skip it. */ if (p && p != s+1 && p[0] == ':') p = find_map_unquote (p+1, findmap); #endif #ifdef HAVE_DOS_PATHS /* If we stopped due to a drive specifier, skip it. Tokens separated by spaces are treated as separate paths since make doesn't allow path names with spaces. */ if (p && p == s+1 && p[0] == ':' && isalpha ((unsigned char)s[0]) && STOP_SET (p[1], MAP_DIRSEP)) p = find_map_unquote (p+1, findmap); #endif if (!p) p = s + strlen (s); /* Strip leading "this directory" references. */ if (NONE_SET (flags, PARSEFS_NOSTRIP)) #ifdef VMS /* 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] == '/') { /* Skip "./" and all following slashes. */ s += 2; while (*s == '/') ++s; } /* Extract the filename just found, and skip it. Set NAME to the string, and NLEN to its length. */ if (s == p) { /* The name was stripped to empty ("./"). */ #if defined(_AMIGA) /* PDS-- This cannot be right!! */ tp[0] = '\0'; nlen = 0; #else tp[0] = '.'; tp[1] = '/'; tp[2] = '\0'; nlen = 2; #endif } else { #ifdef VMS /* VMS filenames can have a ':' in them but they have to be '\'ed but we need * to remove this '\' before we can use the filename. * xstrdup called because S may be read-only string constant. */ char *n = tp; while (s < p) { if (s[0] == '\\' && s[1] == ':') ++s; *(n++) = *(s++); } n[0] = '\0'; nlen = strlen (tp); #else nlen = p - s; memcpy (tp, s, nlen); tp[nlen] = '\0'; #endif } /* At this point, TP points to the element and NLEN is its length. */ #ifndef NO_ARCHIVES /* If this is the start of an archive group that isn't complete, set up to add the archive prefix for future files. A file list like: "libf.a(x.o y.o z.o)" needs to be expanded as: "libf.a(x.o) libf.a(y.o) libf.a(z.o)" TP == TMP means we're not already in an archive group. Ignore something starting with '(', as that cannot actually be an archive-member reference (and treating it as such results in an empty file name, which causes much lossage). Also if it ends in ")" then it's a complete reference so we don't need to treat it specially. Finally, note that archive groups must end with ')' as the last character, so ensure there's some word ending like that before considering this an archive group. */ if (NONE_SET (flags, PARSEFS_NOAR) && tp == tmpbuf && tp[0] != '(' && tp[nlen-1] != ')') { char *n = strchr (tp, '('); if (n) { /* This looks like the first element in an open archive group. A valid group MUST have ')' as the last character. */ const char *e = p; do { const char *o = 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. */ while (! STOP_SET (*e, findmap)) ++e; /* If we didn't move, we're done now. */ if (e == o) break; if (e[-1] == ')') { /* Found the end, so this is the first element in an open archive group. It looks like "lib(mem". Reset TP past the open paren. */ nlen -= (n + 1) - tp; tp = n + 1; /* We can stop looking now. */ break; } } while (*e != '\0'); /* If we have just "lib(", part of something like "lib( a b)", go to the next item. */ if (! nlen) continue; } } /* If we are inside an archive group, make sure it has an end. */ if (tp > tmpbuf) { if (tp[nlen-1] == ')') { /* This is the natural end; reset TP. */ tp = tmpbuf; /* This is just ")", something like "lib(a b )": skip it. */ if (nlen == 1) continue; } else { /* Not the end, so add a "fake" end. */ tp[nlen++] = ')'; tp[nlen] = '\0'; } } #endif /* If we're not globbing we're done: add it to the end of the chain. Go to the next item in the string. */ if (ANY_SET (flags, PARSEFS_NOGLOB)) { NEWELT (concat (2, prefix, tmpbuf)); continue; } /* If we get here we know we're doing glob expansion. TP is a string in tmpbuf. NLEN is no longer used. We may need to do more work: after this NAME will be set. */ name = tmpbuf; /* Expand tilde if applicable. */ if (tmpbuf[0] == '~') { tildep = tilde_expand (tmpbuf); if (tildep != 0) name = tildep; } #ifndef NO_ARCHIVES /* If NAME is an archive member reference replace it with the archive file name, and save the member name in MEMNAME. We will glob on the archive name and then reattach MEMNAME later. */ if (NONE_SET (flags, PARSEFS_NOAR) && ar_name (name)) { ar_parse_name (name, &arname, &memname); name = arname; } #endif /* !NO_ARCHIVES */ /* glob() is expensive: don't call it unless we need to. */ if (NONE_SET (flags, PARSEFS_EXISTS) && strpbrk (name, "?*[") == NULL) { globme = 0; tot = 1; nlist = &name; } else switch (glob (name, GLOB_ALTDIRFUNC, NULL, &gl)) { case GLOB_NOSPACE: out_of_memory (); case 0: /* Success. */ tot = gl.gl_pathc; nlist = (const char **)gl.gl_pathv; break; case GLOB_NOMATCH: /* If we want only existing items, skip this one. */ if (ANY_SET (flags, PARSEFS_EXISTS)) { tot = 0; break; } /* FALLTHROUGH */ default: /* By default keep this name. */ tot = 1; nlist = &name; break; } /* For each matched element, add it to the list. */ for (i = 0; i < tot; ++i) #ifndef NO_ARCHIVES if (memname != 0) { /* Try to glob on MEMNAME within the archive. */ struct nameseq *found = ar_glob (nlist[i], memname, size); if (! found) /* No matches. Use MEMNAME as-is. */ NEWELT (concat (5, prefix, nlist[i], "(", memname, ")")); else { /* We got a chain of items. Attach them. */ if (*newp) (*newp)->next = found; else *newp = found; /* Find and set the new end. Massage names if necessary. */ while (1) { if (! cachep) found->name = xstrdup (concat (2, prefix, name)); else if (prefix) found->name = strcache_add (concat (2, prefix, name)); if (found->next == 0) break; found = found->next; } newp = &found->next; } } else #endif /* !NO_ARCHIVES */ NEWELT (concat (2, prefix, nlist[i])); if (globme) globfree (&gl); #ifndef NO_ARCHIVES free (arname); #endif free (tildep); } *stringp = p; return new; } make-4.3/src/amiga.h0000644000175000017500000000146013603564437011250 00000000000000/* Definitions for amiga specific things Copyright (C) 1995-2020 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 . */ int MyExecute (char ** argv); char * wildcard_expansion (char * wc, char * o); make-4.3/src/vpath.c0000644000175000017500000004517613603564437011323 00000000000000/* Implementation of pattern-matching file search paths for GNU Make. Copyright (C) 1988-2020 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 . */ #include "makeint.h" #include "filedef.h" #include "variable.h" #ifdef WINDOWS32 #include "pathstuff.h" #endif /* Structure used to represent a selective VPATH searchpath. */ struct vpath { struct vpath *next; /* Pointer to next struct in the linked list. */ const char *pattern; /* The pattern to match. */ const char *percent; /* Pointer into 'pattern' where the '%' is. */ size_t patlen; /* Length of the pattern. */ const char **searchpath; /* Null-terminated list of directories. */ size_t maxlen; /* Maximum length of any entry in the list. */ }; /* Linked-list of all selective VPATHs. */ static struct vpath *vpaths; /* Structure for the general VPATH given in the variable. */ static struct vpath *general_vpath; /* Structure for GPATH given in the variable. */ static struct vpath *gpaths; /* Reverse the chain of selective VPATH lists so they will be searched in the order given in the makefiles and construct the list from the VPATH variable. */ void build_vpath_lists (void) { struct vpath *new = 0; struct vpath *old, *nexto; char *p; /* Reverse the chain. */ for (old = vpaths; old != 0; old = nexto) { nexto = old->next; old->next = new; new = old; } vpaths = new; /* If there is a VPATH variable with a nonnull value, construct the general VPATH list from it. We use variable_expand rather than just calling lookup_variable so that it will be recursively expanded. */ { /* Turn off --warn-undefined-variables while we expand SHELL and IFS. */ int save = warn_undefined_variables_flag; warn_undefined_variables_flag = 0; p = variable_expand ("$(strip $(VPATH))"); warn_undefined_variables_flag = save; } if (*p != '\0') { /* Save the list of vpaths. */ struct vpath *save_vpaths = vpaths; char gp[] = "%"; /* Empty 'vpaths' so the new one will have no next, and 'vpaths' will still be nil if P contains no existing directories. */ vpaths = 0; /* Parse P. */ construct_vpath_list (gp, p); /* Store the created path as the general path, and restore the old list of vpaths. */ general_vpath = vpaths; vpaths = save_vpaths; } /* If there is a GPATH variable with a nonnull value, construct the GPATH list from it. We use variable_expand rather than just calling lookup_variable so that it will be recursively expanded. */ { /* Turn off --warn-undefined-variables while we expand SHELL and IFS. */ int save = warn_undefined_variables_flag; warn_undefined_variables_flag = 0; p = variable_expand ("$(strip $(GPATH))"); warn_undefined_variables_flag = save; } if (*p != '\0') { /* Save the list of vpaths. */ struct vpath *save_vpaths = vpaths; char gp[] = "%"; /* Empty 'vpaths' so the new one will have no next, and 'vpaths' will still be nil if P contains no existing directories. */ vpaths = 0; /* Parse P. */ construct_vpath_list (gp, p); /* Store the created path as the GPATH, and restore the old list of vpaths. */ gpaths = vpaths; vpaths = save_vpaths; } } /* Construct the VPATH listing for the PATTERN and DIRPATH given. This function is called to generate selective VPATH lists and also for the general VPATH list (which is in fact just a selective VPATH that is applied to everything). The returned pointer is either put in the linked list of all selective VPATH lists or in the GENERAL_VPATH variable. If DIRPATH is nil, remove all previous listings with the same pattern. If PATTERN is nil, remove all VPATH listings. Existing and readable directories that are not "." given in the DIRPATH separated by the path element separator (defined in makeint.h) are loaded into the directory hash table if they are not there already and put in the VPATH searchpath for the given pattern with trailing slashes stripped off if present (and if the directory is not the root, "/"). The length of the longest entry in the list is put in the structure as well. The new entry will be at the head of the VPATHS chain. */ void construct_vpath_list (char *pattern, char *dirpath) { unsigned int elem; char *p; const char **vpath; size_t maxvpath; unsigned int maxelem; const char *percent = NULL; if (pattern != 0) percent = find_percent (pattern); if (dirpath == 0) { /* Remove matching listings. */ struct vpath *path, *lastpath; lastpath = 0; path = vpaths; while (path != 0) { struct vpath *next = path->next; if (pattern == 0 || (((percent == 0 && path->percent == 0) || (percent - pattern == path->percent - path->pattern)) && streq (pattern, path->pattern))) { /* Remove it from the linked list. */ if (lastpath == 0) vpaths = path->next; else lastpath->next = next; /* Free its unused storage. */ /* MSVC erroneously warns without a cast here. */ free ((void *)path->searchpath); free (path); } else lastpath = path; path = next; } return; } #ifdef WINDOWS32 convert_vpath_to_windows32 (dirpath, ';'); #endif /* Skip over any initial separators and blanks. */ while (STOP_SET (*dirpath, MAP_BLANK|MAP_PATHSEP)) ++dirpath; /* Figure out the maximum number of VPATH entries and put it in MAXELEM. We start with 2, one before the first separator and one nil (the list terminator) and increment our estimated number for each separator or blank we find. */ maxelem = 2; p = dirpath; while (*p != '\0') if (STOP_SET (*p++, MAP_BLANK|MAP_PATHSEP)) ++maxelem; vpath = xmalloc (maxelem * sizeof (const char *)); maxvpath = 0; elem = 0; p = dirpath; while (*p != '\0') { char *v; size_t len; /* Find the end of this entry. */ v = p; while (*p != '\0' #if defined(HAVE_DOS_PATHS) && (PATH_SEPARATOR_CHAR == ':') /* Platforms whose PATH_SEPARATOR_CHAR is ':' and which also define HAVE_DOS_PATHS would like us to recognize colons after the drive letter in the likes of "D:/foo/bar:C:/xyzzy". */ && (*p != PATH_SEPARATOR_CHAR || (p == v + 1 && (p[1] == '/' || p[1] == '\\'))) #else && *p != PATH_SEPARATOR_CHAR #endif && !ISBLANK (*p)) ++p; len = p - v; /* Make sure there's no trailing slash, but still allow "/" as a directory. */ #if defined(__MSDOS__) || defined(__EMX__) || defined(HAVE_DOS_PATHS) /* We need also to leave alone a trailing slash in "d:/". */ if (len > 3 || (len > 1 && v[1] != ':')) #endif if (len > 1 && p[-1] == '/') --len; /* Put the directory on the vpath list. */ if (len > 1 || *v != '.') { vpath[elem++] = dir_name (strcache_add_len (v, len)); if (len > maxvpath) maxvpath = len; } /* Skip over separators and blanks between entries. */ while (STOP_SET (*p, MAP_BLANK|MAP_PATHSEP)) ++p; } if (elem > 0) { struct vpath *path; /* ELEM is now incremented one element past the last entry, to where the nil-pointer terminator goes. Usually this is maxelem - 1. If not, shrink down. */ if (elem < (maxelem - 1)) vpath = xrealloc (vpath, (elem+1) * sizeof (const char *)); /* Put the nil-pointer terminator on the end of the VPATH list. */ vpath[elem] = NULL; /* Construct the vpath structure and put it into the linked list. */ path = xmalloc (sizeof (struct vpath)); path->searchpath = vpath; path->maxlen = maxvpath; path->next = vpaths; vpaths = path; /* Set up the members. */ path->pattern = strcache_add (pattern); path->patlen = strlen (pattern); path->percent = percent ? path->pattern + (percent - pattern) : 0; } else /* There were no entries, so free whatever space we allocated. */ /* MSVC erroneously warns without a cast here. */ free ((void *)vpath); } /* Search the GPATH list for a pathname string that matches the one passed in. If it is found, return 1. Otherwise we return 0. */ int gpath_search (const char *file, size_t len) { if (gpaths && (len <= gpaths->maxlen)) { const char **gp; for (gp = gpaths->searchpath; *gp != NULL; ++gp) if (strneq (*gp, file, len) && (*gp)[len] == '\0') return 1; } return 0; } /* Search the given VPATH list for a directory where the name pointed to by FILE exists. If it is found, we return a cached name of the existing file and set *MTIME_PTR (if MTIME_PTR is not NULL) to its modtime (or zero if no stat call was done). Also set the matching directory index in PATH_INDEX if it is not NULL. Otherwise we return NULL. */ static const char * selective_vpath_search (struct vpath *path, const char *file, FILE_TIMESTAMP *mtime_ptr, unsigned int* path_index) { int not_target; char *name; const char *n; const char *filename; const char **vpath = path->searchpath; size_t maxvpath = path->maxlen; unsigned int i; size_t flen, name_dplen; int exists = 0; /* Find out if *FILE is a target. If and only if it is NOT a target, we will accept prospective files that don't exist but are mentioned in a makefile. */ { struct file *f = lookup_file (file); not_target = f == 0 || !f->is_target; } flen = strlen (file); /* Split *FILE into a directory prefix and a name-within-directory. NAME_DPLEN gets the length of the prefix; FILENAME gets the pointer to the name-within-directory and FLEN is its length. */ n = strrchr (file, '/'); #ifdef HAVE_DOS_PATHS /* We need the rightmost slash or backslash. */ { const char *bslash = strrchr (file, '\\'); if (!n || bslash > n) n = bslash; } #endif name_dplen = n != 0 ? n - file : 0; filename = name_dplen > 0 ? n + 1 : file; if (name_dplen > 0) flen -= name_dplen + 1; /* Get enough space for the biggest VPATH entry, a slash, the directory prefix that came with FILE, another slash (although this one may not always be necessary), the filename, and a null terminator. */ name = alloca (maxvpath + 1 + name_dplen + 1 + flen + 1); /* Try each VPATH entry. */ for (i = 0; vpath[i] != 0; ++i) { int exists_in_cache = 0; char *p = name; size_t vlen = strlen (vpath[i]); /* Put the next VPATH entry into NAME at P and increment P past it. */ memcpy (p, vpath[i], vlen); p += vlen; /* Add the directory prefix already in *FILE. */ if (name_dplen > 0) { #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; } #ifdef HAVE_DOS_PATHS /* Cause the next if to treat backslash and slash alike. */ if (p != name && p[-1] == '\\' ) p[-1] = '/'; #endif /* Now add the name-within-directory at the end of NAME. */ #ifndef VMS if (p != name && p[-1] != '/') { *p = '/'; 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); /* Check if the file is mentioned in a makefile. If *FILE is not a target, that is enough for us to decide this file exists. If *FILE is a target, then the file must be mentioned in the makefile also as a target to be chosen. The restriction that *FILE must not be a target for a makefile-mentioned file to be chosen was added by an inadequately commented change in July 1990; I am not sure off hand what problem it fixes. In December 1993 I loosened this restriction to allow a file to be chosen if it is mentioned as a target in a makefile. This seem logical. Special handling for -W / -o: make sure we preserve the special values here. Actually this whole thing is a little bogus: I think we should ditch the name/hname thing and look into the renamed capability that already exists for files: that is, have a new struct file* entry for the VPATH-found file, and set the renamed field if we use it. */ { struct file *f = lookup_file (name); if (f != 0) { exists = not_target || f->is_target; if (exists && mtime_ptr && (f->last_mtime == OLD_MTIME || f->last_mtime == NEW_MTIME)) { *mtime_ptr = f->last_mtime; mtime_ptr = 0; } } } if (!exists) { /* That file wasn't mentioned in the makefile. See if it actually exists. */ #ifdef VMS /* 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) { /* The file is in the directory cache. Now check that it actually exists in the filesystem. The cache may be out of date. When vpath thinks a file exists, but stat fails for it, confusion results in the higher levels. */ struct stat st; #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. */ { int e; EINTRLOOP (e, stat (name, &st)); /* Does it really exist? */ if (e != 0) { exists = 0; continue; } /* Store the modtime into *MTIME_PTR for the caller. */ if (mtime_ptr != 0) { *mtime_ptr = FILE_TIMESTAMP_STAT_MODTIME (name, st); mtime_ptr = 0; } } /* We have found a file. If we get here and mtime_ptr hasn't been set, record UNKNOWN_MTIME to indicate this. */ if (mtime_ptr != 0) *mtime_ptr = UNKNOWN_MTIME; /* Store the name we found and return it. */ if (path_index) *path_index = i; return strcache_add_len (name, (p + 1 - name) + flen); } } return 0; } /* Search the VPATH list whose pattern matches FILE for a directory where FILE exists. If it is found, return the cached name of an existing file, and set *MTIME_PTR (if MTIME_PTR is not NULL) to its modtime (or zero if no stat call was done). Also set the matching directory index in VPATH_INDEX and PATH_INDEX if they are not NULL. Otherwise we return 0. */ const char * vpath_search (const char *file, FILE_TIMESTAMP *mtime_ptr, unsigned int* vpath_index, unsigned int* path_index) { struct vpath *v; /* If there are no VPATH entries or FILENAME starts at the root, there is nothing we can do. */ if (file[0] == '/' #ifdef HAVE_DOS_PATHS || file[0] == '\\' || file[1] == ':' #endif || (vpaths == 0 && general_vpath == 0)) return 0; if (vpath_index) { *vpath_index = 0; *path_index = 0; } for (v = vpaths; v != 0; v = v->next) { if (pattern_matches (v->pattern, v->percent, file)) { const char *p = selective_vpath_search ( v, file, mtime_ptr, path_index); if (p) return p; } if (vpath_index) ++*vpath_index; } if (general_vpath != 0) { const char *p = selective_vpath_search ( general_vpath, file, mtime_ptr, path_index); if (p) return p; } return 0; } /* Print the data base of VPATH search paths. */ void print_vpath_data_base (void) { unsigned int nvpaths; struct vpath *v; puts (_("\n# VPATH Search Paths\n")); nvpaths = 0; for (v = vpaths; v != 0; v = v->next) { unsigned int i; ++nvpaths; printf ("vpath %s ", v->pattern); for (i = 0; v->searchpath[i] != 0; ++i) printf ("%s%c", v->searchpath[i], v->searchpath[i + 1] == 0 ? '\n' : PATH_SEPARATOR_CHAR); } if (vpaths == 0) puts (_("# No 'vpath' search paths.")); else printf (_("\n# %u 'vpath' search paths.\n"), nvpaths); if (general_vpath == 0) puts (_("\n# No general ('VPATH' variable) search path.")); else { const char **path = general_vpath->searchpath; unsigned int i; fputs (_("\n# General ('VPATH' variable) search path:\n# "), stdout); for (i = 0; path[i] != 0; ++i) printf ("%s%c", path[i], path[i + 1] == 0 ? '\n' : PATH_SEPARATOR_CHAR); } } make-4.3/src/vms_exit.c0000644000175000017500000000577013603564437012033 00000000000000/* 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-2020 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 . */ /* Per copyright assignment agreement with the Free Software Foundation this software may be available under under other license agreements and copyrights. */ #include #include 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); } make-4.3/src/hash.h0000644000175000017500000002050313603564437011114 00000000000000/* hash.h -- decls for hash table Copyright (C) 1995, 1999, 2002, 2010 Free Software Foundation, Inc. Written by Greg McGary 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 . */ #ifndef _hash_h_ #define _hash_h_ #include #include #if defined __cplusplus || (defined __STDC__ && __STDC__) || defined WINDOWS32 # if !defined __GLIBC__ || !defined __P # undef __P # define __P(protos) protos # endif #else /* Not C++ or ANSI C. */ # undef __P # define __P(protos) () /* We can get away without defining 'const' here only because in this file it is used only inside the prototype for 'fnmatch', which is elided in non-ANSI C where 'const' is problematical. */ #endif /* C++ or ANSI C. */ typedef unsigned long (*hash_func_t) __P((void const *key)); typedef int (*hash_cmp_func_t) __P((void const *x, void const *y)); typedef void (*hash_map_func_t) __P((void const *item)); typedef void (*hash_map_arg_func_t) __P((void const *item, void *arg)); struct hash_table { void **ht_vec; hash_func_t ht_hash_1; /* primary hash function */ hash_func_t ht_hash_2; /* secondary hash function */ hash_cmp_func_t ht_compare; /* comparison function */ unsigned long ht_size; /* total number of slots (power of 2) */ unsigned long ht_capacity; /* usable slots, limited by loading-factor */ unsigned long ht_fill; /* items in table */ unsigned long ht_empty_slots; /* empty slots not including deleted slots */ unsigned long ht_collisions; /* # of failed calls to comparison function */ unsigned long ht_lookups; /* # of queries */ unsigned int ht_rehashes; /* # of times we've expanded table */ }; typedef int (*qsort_cmp_t) __P((void const *, void const *)); void hash_init __P((struct hash_table *ht, unsigned long size, hash_func_t hash_1, hash_func_t hash_2, hash_cmp_func_t hash_cmp)); void hash_load __P((struct hash_table *ht, void *item_table, unsigned long cardinality, unsigned long size)); void **hash_find_slot __P((struct hash_table *ht, void const *key)); void *hash_find_item __P((struct hash_table *ht, void const *key)); void *hash_insert __P((struct hash_table *ht, const void *item)); void *hash_insert_at __P((struct hash_table *ht, const void *item, void const *slot)); void *hash_delete __P((struct hash_table *ht, void const *item)); void *hash_delete_at __P((struct hash_table *ht, void const *slot)); void hash_delete_items __P((struct hash_table *ht)); void hash_free_items __P((struct hash_table *ht)); void hash_free __P((struct hash_table *ht, int free_items)); void hash_map __P((struct hash_table *ht, hash_map_func_t map)); void hash_map_arg __P((struct hash_table *ht, hash_map_arg_func_t map, void *arg)); void hash_print_stats __P((struct hash_table *ht, FILE *out_FILE)); void **hash_dump __P((struct hash_table *ht, void **vector_0, qsort_cmp_t compare)); extern unsigned jhash(unsigned char const *key, int n); extern unsigned jhash_string(unsigned char const *key); extern void *hash_deleted_item; #define HASH_VACANT(item) ((item) == 0 || (void *) (item) == hash_deleted_item) /* hash and comparison macros for case-sensitive string keys. */ /* Due to the strcache, it's not uncommon for the string pointers to be identical. Take advantage of that to short-circuit string compares. */ #define STRING_HASH_1(KEY, RESULT) do { \ unsigned char const *_key_ = (unsigned char const *) (KEY); \ (RESULT) += jhash_string(_key_); \ } while (0) #define return_STRING_HASH_1(KEY) do { \ unsigned long _result_ = 0; \ STRING_HASH_1 ((KEY), _result_); \ return _result_; \ } while (0) /* No need for a second hash because jhash already provides pretty good results. However, do evaluate the arguments to avoid warnings. */ #define STRING_HASH_2(KEY, RESULT) do { \ (void)(KEY); \ } while (0) #define return_STRING_HASH_2(KEY) do { \ unsigned long _result_ = 0; \ STRING_HASH_2 ((KEY), _result_); \ return _result_; \ } while (0) #define STRING_COMPARE(X, Y, RESULT) do { \ RESULT = (X) == (Y) ? 0 : strcmp ((X), (Y)); \ } while (0) #define return_STRING_COMPARE(X, Y) do { \ return (X) == (Y) ? 0 : strcmp ((X), (Y)); \ } while (0) #define STRING_N_HASH_1(KEY, N, RESULT) do { \ unsigned char const *_key_ = (unsigned char const *) (KEY); \ (RESULT) += jhash(_key_, N); \ } while (0) #define return_STRING_N_HASH_1(KEY, N) do { \ unsigned long _result_ = 0; \ STRING_N_HASH_1 ((KEY), (N), _result_); \ return _result_; \ } while (0) /* No need for a second hash because jhash already provides pretty good results. However, do evaluate the arguments to avoid warnings. */ #define STRING_N_HASH_2(KEY, N, RESULT) do { \ (void)(KEY); \ (void)(N); \ } while (0) #define return_STRING_N_HASH_2(KEY, N) do { \ unsigned long _result_ = 0; \ STRING_N_HASH_2 ((KEY), (N), _result_); \ return _result_; \ } while (0) #define STRING_N_COMPARE(X, Y, N, RESULT) do { \ RESULT = (X) == (Y) ? 0 : memcmp ((X), (Y), (N)); \ } while (0) #define return_STRING_N_COMPARE(X, Y, N) do { \ return (X) == (Y) ? 0 : memcmp ((X), (Y), (N)); \ } while (0) #ifdef HAVE_CASE_INSENSITIVE_FS /* hash and comparison macros for case-insensitive string _key_s. */ #define ISTRING_HASH_1(KEY, RESULT) do { \ unsigned char const *_key_ = (unsigned char const *) (KEY) - 1; \ while (*++_key_) \ (RESULT) += ((isupper (*_key_) ? tolower (*_key_) : *_key_) << (_key_[1] & 0xf)); \ } while (0) #define return_ISTRING_HASH_1(KEY) do { \ unsigned long _result_ = 0; \ ISTRING_HASH_1 ((KEY), _result_); \ return _result_; \ } while (0) #define ISTRING_HASH_2(KEY, RESULT) do { \ unsigned char const *_key_ = (unsigned char const *) (KEY) - 1; \ while (*++_key_) \ (RESULT) += ((isupper (*_key_) ? tolower (*_key_) : *_key_) << (_key_[1] & 0x7)); \ } while (0) #define return_ISTRING_HASH_2(KEY) do { \ unsigned long _result_ = 0; \ ISTRING_HASH_2 ((KEY), _result_); \ return _result_; \ } while (0) #define ISTRING_COMPARE(X, Y, RESULT) do { \ RESULT = (X) == (Y) ? 0 : strcasecmp ((X), (Y)); \ } while (0) #define return_ISTRING_COMPARE(X, Y) do { \ return (X) == (Y) ? 0 : strcasecmp ((X), (Y)); \ } while (0) #else #define ISTRING_HASH_1(KEY, RESULT) STRING_HASH_1 ((KEY), (RESULT)) #define return_ISTRING_HASH_1(KEY) return_STRING_HASH_1 (KEY) #define ISTRING_HASH_2(KEY, RESULT) STRING_HASH_2 ((KEY), (RESULT)) #define return_ISTRING_HASH_2(KEY) return_STRING_HASH_2 (KEY) #define ISTRING_COMPARE(X, Y, RESULT) STRING_COMPARE ((X), (Y), (RESULT)) #define return_ISTRING_COMPARE(X, Y) return_STRING_COMPARE ((X), (Y)) #endif /* hash and comparison macros for integer _key_s. */ #define INTEGER_HASH_1(KEY, RESULT) do { \ (RESULT) += ((unsigned long)(KEY)); \ } while (0) #define return_INTEGER_HASH_1(KEY) do { \ unsigned long _result_ = 0; \ INTEGER_HASH_1 ((KEY), _result_); \ return _result_; \ } while (0) #define INTEGER_HASH_2(KEY, RESULT) do { \ (RESULT) += ~((unsigned long)(KEY)); \ } while (0) #define return_INTEGER_HASH_2(KEY) do { \ unsigned long _result_ = 0; \ INTEGER_HASH_2 ((KEY), _result_); \ return _result_; \ } while (0) #define INTEGER_COMPARE(X, Y, RESULT) do { \ (RESULT) = X - Y; \ } while (0) #define return_INTEGER_COMPARE(X, Y) do { \ int _result_; \ INTEGER_COMPARE (X, Y, _result_); \ return _result_; \ } while (0) /* hash and comparison macros for address keys. */ #define ADDRESS_HASH_1(KEY, RESULT) INTEGER_HASH_1 (((unsigned long)(KEY)) >> 3, (RESULT)) #define ADDRESS_HASH_2(KEY, RESULT) INTEGER_HASH_2 (((unsigned long)(KEY)) >> 3, (RESULT)) #define ADDRESS_COMPARE(X, Y, RESULT) INTEGER_COMPARE ((X), (Y), (RESULT)) #define return_ADDRESS_HASH_1(KEY) return_INTEGER_HASH_1 (((unsigned long)(KEY)) >> 3) #define return_ADDRESS_HASH_2(KEY) return_INTEGER_HASH_2 (((unsigned long)(KEY)) >> 3) #define return_ADDRESS_COMPARE(X, Y) return_INTEGER_COMPARE ((X), (Y)) #endif /* not _hash_h_ */ make-4.3/src/load.c0000644000175000017500000001547413603564437011116 00000000000000/* Loading dynamic objects for GNU Make. Copyright (C) 2012-2020 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 . */ #include "makeint.h" #if MAKE_LOAD #include #include #include #include #include #define SYMBOL_EXTENSION "_gmk_setup" #include "debug.h" #include "filedef.h" #include "variable.h" /* Tru64 V4.0 does not have this flag */ #ifndef RTLD_GLOBAL # define RTLD_GLOBAL 0 #endif struct load_list { struct load_list *next; const char *name; void *dlp; }; static struct load_list *loaded_syms = NULL; static load_func_t load_object (const floc *flocp, int noerror, const char *ldname, const char *symname) { static void *global_dl = NULL; load_func_t symp; if (! global_dl) { global_dl = dlopen (NULL, RTLD_NOW|RTLD_GLOBAL); if (! global_dl) { const char *err = dlerror (); OS (fatal, flocp, _("Failed to open global symbol table: %s"), err); } } symp = (load_func_t) dlsym (global_dl, symname); if (! symp) { struct load_list *new; void *dlp = NULL; /* If the path has no "/", try the current directory first. */ if (! strchr (ldname, '/') #ifdef HAVE_DOS_PATHS && ! strchr (ldname, '\\') #endif ) dlp = dlopen (concat (2, "./", ldname), RTLD_LAZY|RTLD_GLOBAL); /* If we haven't opened it yet, try the default search path. */ if (! dlp) dlp = dlopen (ldname, RTLD_LAZY|RTLD_GLOBAL); /* Still no? Then fail. */ if (! dlp) { const char *err = dlerror (); if (noerror) DB (DB_BASIC, ("%s", err)); else OS (error, flocp, "%s", err); return NULL; } /* Assert that the GPL license symbol is defined. */ symp = (load_func_t) dlsym (dlp, "plugin_is_GPL_compatible"); if (! symp) OS (fatal, flocp, _("Loaded object %s is not declared to be GPL compatible"), ldname); symp = (load_func_t) dlsym (dlp, symname); if (! symp) { const char *err = dlerror (); OSSS (fatal, flocp, _("Failed to load symbol %s from %s: %s"), symname, ldname, err); } /* Add this symbol to a trivial lookup table. This is not efficient but it's highly unlikely we'll be loading lots of objects, and we only need it to look them up on unload, if we rebuild them. */ new = xmalloc (sizeof (struct load_list)); new->name = xstrdup (ldname); new->dlp = dlp; new->next = loaded_syms; loaded_syms = new; } return symp; } int load_file (const floc *flocp, const char **ldname, int noerror) { size_t nmlen = strlen (*ldname); char *new = alloca (nmlen + CSTRLEN (SYMBOL_EXTENSION) + 1); char *symname = NULL; char *loaded; const char *fp; int r; load_func_t symp; /* Break the input into an object file name and a symbol name. If no symbol name was provided, compute one from the object file name. */ fp = strchr (*ldname, '('); if (fp) { const char *ep; /* There's an open paren, so see if there's a close paren: if so use that as the symbol name. We can't have whitespace: it would have been chopped up before this function is called. */ ep = strchr (fp+1, ')'); if (ep && ep[1] == '\0') { size_t l = fp - *ldname;; ++fp; if (fp == ep) OS (fatal, flocp, _("Empty symbol name for load: %s"), *ldname); /* Make a copy of the ldname part. */ memcpy (new, *ldname, l); new[l] = '\0'; *ldname = new; nmlen = l; /* Make a copy of the symbol name part. */ symname = new + l + 1; memcpy (symname, fp, ep - fp); symname[ep - fp] = '\0'; } } /* Add this name to the string cache so it can be reused later. */ *ldname = strcache_add (*ldname); /* If this object has been loaded, we're done. */ loaded = allocated_variable_expand ("$(.LOADED)"); fp = strstr (loaded, *ldname); r = fp && (fp==loaded || fp[-1]==' ') && (fp[nmlen]=='\0' || fp[nmlen]==' '); if (r) goto exit; /* If we didn't find a symbol name yet, construct it from the ldname. */ if (! symname) { char *p = new; fp = strrchr (*ldname, '/'); #ifdef HAVE_DOS_PATHS if (fp) { const char *fp2 = strchr (fp, '\\'); if (fp2 > fp) fp = fp2; } else fp = strrchr (*ldname, '\\'); /* The (improbable) case of d:foo. */ if (fp && *fp && fp[1] == ':') fp++; #endif if (!fp) fp = *ldname; else ++fp; while (isalnum (*fp) || *fp == '_') *(p++) = *(fp++); strcpy (p, SYMBOL_EXTENSION); symname = new; } DB (DB_VERBOSE, (_("Loading symbol %s from %s\n"), symname, *ldname)); /* Load it! */ symp = load_object (flocp, noerror, *ldname, symname); if (! symp) return 0; /* Invoke the symbol. */ r = (*symp) (flocp); /* If it succeeded, add the load file to the loaded variable. */ if (r > 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; } void unload_file (const char *name) { struct load_list *d; for (d = loaded_syms; d != NULL; d = d->next) if (streq (d->name, name) && d->dlp) { if (dlclose (d->dlp)) perror_with_name ("dlclose: ", d->name); d->dlp = NULL; break; } } #else int load_file (const floc *flocp, const char **ldname UNUSED, int noerror) { if (! noerror) O (fatal, flocp, _("The 'load' operation is not supported on this platform.")); return 0; } void unload_file (const char *name UNUSED) { O (fatal, NILF, "INTERNAL: Cannot unload when load is not supported!"); } #endif /* MAKE_LOAD */ make-4.3/src/commands.h0000644000175000017500000000362713603564437012002 00000000000000/* Definition of data structures describing shell commands for GNU Make. Copyright (C) 1988-2020 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 . */ /* Structure that gives the commands to make a file and information about where these commands came from. */ struct commands { floc fileinfo; /* Where commands were defined. */ char *commands; /* Commands text. */ char **command_lines; /* Commands chopped up into lines. */ 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 */ /* the COMMANDS_RECURSE bit set. */ }; /* Bits in 'lines_flags'. */ #define COMMANDS_RECURSE 1 /* Recurses: + or $(MAKE). */ #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); void chop_commands (struct commands *cmds); void set_file_variables (struct file *file); make-4.3/src/arscan.c0000644000175000017500000006607113603564437011445 00000000000000/* Library function for scanning an archive file. Copyright (C) 1987-2020 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 . */ #include "makeint.h" #ifdef TEST /* Hack, the real error() routine eventually pulls in die from main.c */ #define error(a, b, c, d) #endif #ifdef HAVE_FCNTL_H #include #else #include #endif #ifndef NO_ARCHIVES #ifdef VMS #include #include #include #include #include #include #include #include /* This symbol should be present in lbrdef.h. */ #if !defined LBR$_HDRTRUNC #pragma extern_model save #pragma extern_model globalvalue extern unsigned int LBR$_HDRTRUNC; #pragma extern_model restore #endif #include #include const char * vmsify (const char *name, int type); /* Time conversion from VMS to Unix Conversion from local time (stored in library) to GMT (needed for gmake) Note: The tm_gmtoff element is a VMS extension to the ANSI standard. */ static time_t vms_time_to_unix(void *vms_time) { struct tm *tmp; time_t unix_time; unix_time = decc$fix_time(vms_time); tmp = localtime(&unix_time); unix_time -= tmp->tm_gmtoff; return unix_time; } /* VMS library routines need static variables for callback */ static void *VMS_lib_idx; static const void *VMS_saved_arg; static long int (*VMS_function) (); static long int VMS_function_ret; /* This is a callback procedure for lib$get_index */ static int VMS_get_member_info(struct dsc$descriptor_s *module, unsigned long *rfa) { int status, i; const int truncated = 0; /* Member name may be truncated */ time_t member_date; /* Member date */ char *filename; unsigned int buffer_length; /* Actual buffer length */ /* Unused constants - Make does not actually use most of these */ const int file_desc = -1; /* archive file descriptor for reading the data */ const int header_position = 0; /* Header position */ const int data_position = 0; /* Data position in file */ const int data_size = 0; /* Data size */ const int uid = 0; /* member gid */ const int gid = 0; /* member gid */ const int mode = 0; /* member protection mode */ /* End of unused constants */ static struct dsc$descriptor_s bufdesc = { 0, DSC$K_DTYPE_T, DSC$K_CLASS_S, NULL }; /* Only need the module definition */ struct mhddef *mhd; /* If a previous callback is non-zero, just return that status */ if (VMS_function_ret) { return SS$_NORMAL; } /* lbr_set_module returns more than just the module header. So allocate a buffer which is big enough: the maximum LBR$C_MAXHDRSIZ. That's at least bigger than the size of struct mhddef. If the request is too small, a buffer truncated warning is issued so it can be reissued with a larger buffer. We do not care if the buffer is truncated, so that is still a success. */ mhd = xmalloc(LBR$C_MAXHDRSIZ); bufdesc.dsc$a_pointer = (char *) mhd; bufdesc.dsc$w_length = LBR$C_MAXHDRSIZ; status = lbr$set_module(&VMS_lib_idx, rfa, &bufdesc, &buffer_length, 0); if ((status != LBR$_HDRTRUNC) && !$VMS_STATUS_SUCCESS(status)) { ON(error, NILF, _("lbr$set_module() failed to extract module info, status = %d"), status); lbr$close(&VMS_lib_idx); return status; } #ifdef TEST /* When testing this code, it is useful to know the length returned */ printf ("Input length = %d, actual = %u\n", bufdesc.dsc$w_length, buffer_length); #endif /* Conversion from VMS time to C time. VMS defectlet - mhddef is sub-optimal, for the time, it has a 32 bit longword, mhd$l_datim, and a 32 bit fill instead of two longwords, or equivalent. */ member_date = vms_time_to_unix(&mhd->mhd$l_datim); free(mhd); /* Here we have a problem. The module name on VMS does not have a file type, but the filename pattern in the "VMS_saved_arg" may have one. But only the method being called knows how to interpret the filename pattern. There are currently two different formats being used. This means that we need a VMS specific code in those methods to handle it. */ filename = xmalloc(module->dsc$w_length + 1); /* TODO: We may need an option to preserve the case of the module For now force the module name to lower case */ for (i = 0; i < module->dsc$w_length; i++) filename[i] = _tolower((unsigned char )module->dsc$a_pointer[i]); filename[i] = '\0'; VMS_function_ret = (*VMS_function)(file_desc, filename, truncated, header_position, data_position, data_size, member_date, uid, gid, mode, VMS_saved_arg); free(filename); return SS$_NORMAL; } /* Takes three arguments ARCHIVE, FUNCTION and ARG. Open the archive named ARCHIVE, find its members one by one, and for each one call FUNCTION with the following arguments: archive file descriptor for reading the data, member name, member name might be truncated flag, member header position in file, member data position in file, member data size, member date, member uid, member gid, member protection mode, ARG. NOTE: on VMS systems, only name, date, and arg are meaningful! The descriptor is poised to read the data of the member when FUNCTION is called. It does not matter how much data FUNCTION reads. If FUNCTION returns nonzero, we immediately return what FUNCTION returned. Returns -1 if archive does not exist, Returns -2 if archive has invalid format. Returns 0 if have scanned successfully. */ long int ar_scan (const char *archive, ar_member_func_t function, const void *varg) { char *vms_archive; static struct dsc$descriptor_s libdesc = { 0, DSC$K_DTYPE_T, DSC$K_CLASS_S, NULL }; const unsigned long func = LBR$C_READ; const unsigned long type = LBR$C_TYP_UNK; const unsigned long index = 1; unsigned long lib_idx; int status; VMS_saved_arg = varg; /* Null archive string can show up in test and cause an access violation */ if (archive == NULL) { /* Null filenames do not exist */ return -1; } /* archive path name must be in VMS format */ vms_archive = (char *) vmsify(archive, 0); status = lbr$ini_control(&VMS_lib_idx, &func, &type, 0); if (!$VMS_STATUS_SUCCESS(status)) { ON(error, NILF, _("lbr$ini_control() failed with status = %d"), status); return -2; } libdesc.dsc$a_pointer = vms_archive; libdesc.dsc$w_length = strlen(vms_archive); status = lbr$open(&VMS_lib_idx, &libdesc, 0, NULL, 0, NULL, 0); if (!$VMS_STATUS_SUCCESS(status)) { /* TODO: A library format failure could mean that this is a file generated by the GNU AR utility and in that case, we need to take the UNIX codepath. This will also take a change to the GNV AR wrapper program. */ switch (status) { case RMS$_FNF: /* Archive does not exist */ return -1; default: #ifndef TEST OSN(error, NILF, _("unable to open library '%s' to lookup member status %d"), archive, status); #endif /* For library format errors, specification says to return -2 */ return -2; } } VMS_function = function; /* Clear the return status, as we are supposed to stop calling the callback function if it becomes non-zero, and this is a static variable. */ VMS_function_ret = 0; status = lbr$get_index(&VMS_lib_idx, &index, VMS_get_member_info, NULL, 0); lbr$close(&VMS_lib_idx); /* Unless a failure occurred in the lbr$ routines, return the the status from the 'function' routine. */ if ($VMS_STATUS_SUCCESS(status)) { return VMS_function_ret; } /* This must be something wrong with the library and an error message should already have been printed. */ return -2; } #else /* !VMS */ /* SCO Unix's compiler defines both of these. */ #ifdef M_UNIX #undef M_XENIX #endif /* On the sun386i and in System V rel 3, ar.h defines two different archive formats depending upon whether you have defined PORTAR (normal) or PORT5AR (System V Release 1). There is no default, one or the other must be defined to have a nonzero value. */ #if (!defined (PORTAR) || PORTAR == 0) && (!defined (PORT5AR) || PORT5AR == 0) #undef PORTAR #ifdef M_XENIX /* According to Jim Sievert , for SCO XENIX defining PORTAR to 1 gets the wrong archive format, and defining it to 0 gets the right one. */ #define PORTAR 0 #else #define PORTAR 1 #endif #endif /* On AIX, define these symbols to be sure to get both archive formats. AIX 4.3 introduced the "big" archive format to support 64-bit object files, so on AIX 4.3 systems we need to support both the "normal" and "big" archive formats. An archive's format is indicated in the "fl_magic" field of the "FL_HDR" structure. For a normal archive, this field will be the string defined by the AIAMAG symbol. For a "big" archive, it will be the string defined by the AIAMAGBIG symbol (at least on AIX it works this way). Note: we'll define these symbols regardless of which AIX version we're compiling on, but this is okay since we'll use the new symbols only if they're present. */ #ifdef _AIX # define __AR_SMALL__ # define __AR_BIG__ #endif #ifndef WINDOWS32 # if !defined (__ANDROID__) && !defined (__BEOS__) # include # else /* These platforms don't have but have archives in the same format * as many other Unices. This was taken from GNU binutils for BeOS. */ # define ARMAG "!\n" /* String that begins an archive file. */ # define SARMAG 8 /* Size of that string. */ # define ARFMAG "`\n" /* String in ar_fmag at end of each header. */ struct ar_hdr { char ar_name[16]; /* Member file name, sometimes / terminated. */ char ar_date[12]; /* File date, decimal seconds since Epoch. */ char ar_uid[6], ar_gid[6]; /* User and group IDs, in ASCII decimal. */ char ar_mode[8]; /* File mode, in ASCII octal. */ char ar_size[10]; /* File size, in ASCII decimal. */ char ar_fmag[2]; /* Always contains ARFMAG. */ }; # endif # define TOCHAR(_m) (_m) #else /* These should allow us to read Windows (VC++) libraries (according to Frank * Libbrecht ) */ # include # include # include # define ARMAG IMAGE_ARCHIVE_START # define SARMAG IMAGE_ARCHIVE_START_SIZE # define ar_hdr _IMAGE_ARCHIVE_MEMBER_HEADER # define ar_name Name # define ar_mode Mode # define ar_size Size # define ar_date Date # define ar_uid UserID # define ar_gid GroupID /* In Windows the member names have type BYTE so we must cast them. */ # define TOCHAR(_m) ((char *)(_m)) #endif /* Cray's apparently defines this. */ #ifndef AR_HDR_SIZE # define AR_HDR_SIZE (sizeof (struct ar_hdr)) #endif #include "output.h" /* Takes three arguments ARCHIVE, FUNCTION and ARG. Open the archive named ARCHIVE, find its members one by one, and for each one call FUNCTION with the following arguments: archive file descriptor for reading the data, member name, member name might be truncated flag, member header position in file, member data position in file, member data size, member date, member uid, member gid, member protection mode, ARG. The descriptor is poised to read the data of the member when FUNCTION is called. It does not matter how much data FUNCTION reads. If FUNCTION returns nonzero, we immediately return what FUNCTION returned. Returns -1 if archive does not exist, Returns -2 if archive has invalid format. Returns 0 if have scanned successfully. */ long int ar_scan (const char *archive, ar_member_func_t function, const void *arg) { #ifdef AIAMAG FL_HDR fl_header; # ifdef AIAMAGBIG int big_archive = 0; FL_HDR_BIG fl_header_big; # endif #endif char *namemap = 0; int namemap_size = 0; int desc = open (archive, O_RDONLY, 0); if (desc < 0) return -1; #ifdef SARMAG { char buf[SARMAG]; int nread; nread = readbuf (desc, buf, SARMAG); if (nread != SARMAG || memcmp (buf, ARMAG, SARMAG)) goto invalid; } #else #ifdef AIAMAG { int nread; nread = readbuf (desc, &fl_header, FL_HSZ); if (nread != FL_HSZ) goto invalid; #ifdef AIAMAGBIG /* If this is a "big" archive, then set the flag and 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 */ EINTRLOOP (o, lseek (desc, 0, 0)); if (o < 0) goto invalid; /* re-read the header into the "big" structure */ nread = readbuf (desc, &fl_header_big, FL_HSZ_BIG); if (nread != FL_HSZ_BIG) goto invalid; } else #endif /* Check to make sure this is a "normal" archive. */ if (memcmp (fl_header.fl_magic, AIAMAG, SAIAMAG)) goto invalid; } #else { #ifndef M_XENIX int buf; #else unsigned short int buf; #endif int nread; nread = readbuf (desc, &buf, sizeof (buf)); if (nread != sizeof (buf) || buf != ARMAG) goto invalid; } #endif #endif /* Now find the members one by one. */ { #ifdef SARMAG long int member_offset = SARMAG; #else #ifdef AIAMAG long int member_offset; long int last_member_offset; #ifdef AIAMAGBIG if ( big_archive ) { sscanf (fl_header_big.fl_fstmoff, "%20ld", &member_offset); sscanf (fl_header_big.fl_lstmoff, "%20ld", &last_member_offset); } else #endif { sscanf (fl_header.fl_fstmoff, "%12ld", &member_offset); sscanf (fl_header.fl_lstmoff, "%12ld", &last_member_offset); } if (member_offset == 0) { /* Empty archive. */ close (desc); return 0; } #else #ifndef M_XENIX long int member_offset = sizeof (int); #else /* Xenix. */ long int member_offset = sizeof (unsigned short int); #endif /* Not Xenix. */ #endif #endif while (1) { int nread; struct ar_hdr member_header; #ifdef AIAMAGBIG struct ar_hdr_big member_header_big; #endif #ifdef AIAMAG # define ARNAME_MAX 255 char name[ARNAME_MAX + 1]; int name_len; long int dateval; int uidval, gidval; long int data_offset; #else # define ARNAME_MAX (int)sizeof(member_header.ar_name) char namebuf[ARNAME_MAX + 1]; char *name; int is_namemap; /* Nonzero if this entry maps long names. */ int long_name = 0; #endif long int eltsize; unsigned int eltmode; long int fnval; off_t o; EINTRLOOP (o, lseek (desc, member_offset, 0)); if (o < 0) goto invalid; #ifdef AIAMAG #define AR_MEMHDR_SZ(x) (sizeof(x) - sizeof (x._ar_name)) #ifdef AIAMAGBIG if (big_archive) { nread = readbuf (desc, &member_header_big, AR_MEMHDR_SZ(member_header_big)); if (nread != AR_MEMHDR_SZ(member_header_big)) goto invalid; sscanf (member_header_big.ar_namlen, "%4d", &name_len); if (name_len < 1 || name_len > ARNAME_MAX) goto invalid; nread = readbuf (desc, name, name_len); if (nread != name_len) goto invalid; name[name_len] = '\0'; sscanf (member_header_big.ar_date, "%12ld", &dateval); sscanf (member_header_big.ar_uid, "%12d", &uidval); sscanf (member_header_big.ar_gid, "%12d", &gidval); sscanf (member_header_big.ar_mode, "%12o", &eltmode); sscanf (member_header_big.ar_size, "%20ld", &eltsize); data_offset = (member_offset + AR_MEMHDR_SZ(member_header_big) + name_len + 2); } else #endif { nread = readbuf (desc, &member_header, AR_MEMHDR_SZ(member_header)); if (nread != AR_MEMHDR_SZ(member_header)) goto invalid; sscanf (member_header.ar_namlen, "%4d", &name_len); if (name_len < 1 || name_len > ARNAME_MAX) goto invalid; nread = readbuf (desc, name, name_len); if (nread != name_len) goto invalid; name[name_len] = '\0'; sscanf (member_header.ar_date, "%12ld", &dateval); sscanf (member_header.ar_uid, "%12d", &uidval); sscanf (member_header.ar_gid, "%12d", &gidval); sscanf (member_header.ar_mode, "%12o", &eltmode); sscanf (member_header.ar_size, "%12ld", &eltsize); data_offset = (member_offset + AR_MEMHDR_SZ(member_header) + name_len + 2); } data_offset += data_offset % 2; fnval = (*function) (desc, name, 0, member_offset, data_offset, eltsize, dateval, uidval, gidval, eltmode, arg); #else /* Not AIAMAG. */ nread = readbuf (desc, &member_header, AR_HDR_SIZE); if (nread == 0) /* No data left means end of file; that is OK. */ break; if (nread != AR_HDR_SIZE #if defined(ARFMAG) || defined(ARFZMAG) || ( # ifdef ARFMAG memcmp (member_header.ar_fmag, ARFMAG, 2) # else 1 # endif && # ifdef ARFZMAG memcmp (member_header.ar_fmag, ARFZMAG, 2) # else 1 # endif ) #endif ) goto invalid; name = namebuf; memcpy (name, member_header.ar_name, sizeof member_header.ar_name); { char *p = name + sizeof member_header.ar_name; do *p = '\0'; while (p > name && *--p == ' '); #ifndef AIAMAG /* If the member name is "//" or "ARFILENAMES/" this may be a list of file name mappings. The maximum file name length supported by the standard archive format is 14 characters. This member will actually always be the first or second entry in the archive, but we don't check that. */ is_namemap = (!strcmp (name, "//") || !strcmp (name, "ARFILENAMES/")); #endif /* Not AIAMAG. */ /* On some systems, there is a slash after each member name. */ if (*p == '/') *p = '\0'; #ifndef AIAMAG /* If the member name starts with a space or a slash, this is an index into the file name mappings (used by GNU ar). Otherwise if the member name looks like #1/NUMBER the real member name appears in the element data (used by 4.4BSD). */ if (! is_namemap && (name[0] == ' ' || name[0] == '/') && namemap != 0) { int name_off = atoi (name + 1); int name_len; if (name_off < 0 || name_off >= namemap_size) goto invalid; name = namemap + name_off; name_len = strlen (name); if (name_len < 1) goto invalid; long_name = 1; } else if (name[0] == '#' && name[1] == '1' && name[2] == '/') { int name_len = atoi (name + 3); if (name_len < 1) goto invalid; name = alloca (name_len + 1); nread = readbuf (desc, name, name_len); if (nread != name_len) goto invalid; name[name_len] = '\0'; long_name = 1; } #endif /* Not AIAMAG. */ } #ifndef M_XENIX sscanf (TOCHAR (member_header.ar_mode), "%8o", &eltmode); eltsize = atol (TOCHAR (member_header.ar_size)); #else /* Xenix. */ eltmode = (unsigned short int) member_header.ar_mode; eltsize = member_header.ar_size; #endif /* Not Xenix. */ fnval = (*function) (desc, name, ! long_name, member_offset, member_offset + AR_HDR_SIZE, eltsize, #ifndef M_XENIX atol (TOCHAR (member_header.ar_date)), atoi (TOCHAR (member_header.ar_uid)), atoi (TOCHAR (member_header.ar_gid)), #else /* Xenix. */ member_header.ar_date, member_header.ar_uid, member_header.ar_gid, #endif /* Not Xenix. */ eltmode, arg); #endif /* AIAMAG. */ if (fnval) { (void) close (desc); return fnval; } #ifdef AIAMAG if (member_offset == last_member_offset) /* End of the chain. */ break; #ifdef AIAMAGBIG if (big_archive) sscanf (member_header_big.ar_nxtmem, "%20ld", &member_offset); else #endif sscanf (member_header.ar_nxtmem, "%12ld", &member_offset); if (lseek (desc, member_offset, 0) != member_offset) goto invalid; #else /* If this member maps archive names, we must read it in. The name map will always precede any members whose names must be mapped. */ if (is_namemap) { char *clear; char *limit; if (eltsize > INT_MAX) goto invalid; namemap = alloca (eltsize + 1); nread = readbuf (desc, namemap, eltsize); if (nread != eltsize) goto invalid; namemap_size = eltsize; /* The names are separated by newlines. Some formats have a trailing slash. Null terminate the strings for convenience. */ limit = namemap + eltsize; for (clear = namemap; clear < limit; clear++) { if (*clear == '\n') { *clear = '\0'; if (clear[-1] == '/') clear[-1] = '\0'; } } *limit = '\0'; is_namemap = 0; } member_offset += AR_HDR_SIZE + eltsize; if (member_offset % 2 != 0) member_offset++; #endif } } close (desc); return 0; invalid: close (desc); return -2; } #endif /* !VMS */ /* Return nonzero iff NAME matches MEM. If TRUNCATED is nonzero, MEM may be truncated to sizeof (struct ar_hdr.ar_name) - 1. */ int ar_name_equal (const char *name, const char *mem, int truncated) { const char *p; p = strrchr (name, '/'); if (p != 0) name = p + 1; #ifndef VMS if (truncated) { #ifdef AIAMAG /* TRUNCATED should never be set on this system. */ abort (); #else struct ar_hdr hdr; #if !defined (__hpux) && !defined (cray) return strneq (name, mem, sizeof (hdr.ar_name) - 1); #else return strneq (name, mem, sizeof (hdr.ar_name) - 2); #endif /* !__hpux && !cray */ #endif /* !AIAMAG */ } return !strcmp (name, mem); #else /* VMS members do not have suffixes, but the filenames usually have. Do we need to strip VMS disk/directory format paths? Most VMS compilers etc. by default are case insensitive but produce uppercase external names, incl. module names. However the VMS librarian (ar) and the linker by default are case sensitive: they take what they get, usually uppercase names. So for the non-default settings of the compilers etc. there is a need to have a case sensitive mode. */ { int len; len = strlen(mem); int match; char *dot; if ((dot=strrchr(name,'.'))) match = (len == dot - name) && !strncasecmp(name, mem, len); else match = !strcasecmp (name, mem); return match; } #endif /* !VMS */ } #ifndef VMS /* ARGSUSED */ 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, unsigned int mode UNUSED, const void *name) { if (!ar_name_equal (name, mem, truncated)) return 0; return hdrpos; } /* Set date of member MEMNAME in archive ARNAME to current time. Returns 0 if successful, -1 if file ARNAME does not exist, -2 if not a valid archive, -3 if other random system call error (including file read-only), 1 if valid but member MEMNAME does not exist. */ int 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; off_t o; int r; unsigned int ui; struct stat statbuf; if (pos < 0) return (int) pos; if (!pos) return 1; EINTRLOOP (fd, open (arname, O_RDWR, 0666)); if (fd < 0) return -3; /* Read in this member's header */ EINTRLOOP (o, lseek (fd, pos, 0)); if (o < 0) goto lose; r = readbuf (fd, &ar_hdr, AR_HDR_SIZE); if (r != AR_HDR_SIZE) goto lose; /* The file's mtime is the time we we want. */ EINTRLOOP (r, fstat (fd, &statbuf)); if (r < 0) goto lose; /* Advance member's time to that time */ #if defined(ARFMAG) || defined(ARFZMAG) || defined(AIAMAG) || defined(WINDOWS32) for (ui = 0; ui < sizeof ar_hdr.ar_date; ui++) ar_hdr.ar_date[ui] = ' '; sprintf (TOCHAR (ar_hdr.ar_date), "%lu", (long unsigned) statbuf.st_mtime); ar_hdr.ar_date[strlen ((char *) ar_hdr.ar_date)] = ' '; #else ar_hdr.ar_date = statbuf.st_mtime; #endif /* Write back this member's header */ EINTRLOOP (o, lseek (fd, pos, 0)); if (o < 0) goto lose; r = writebuf (fd, &ar_hdr, AR_HDR_SIZE); if (r != AR_HDR_SIZE) goto lose; close (fd); return 0; lose: r = errno; close (fd); errno = r; return -3; } #endif #ifdef TEST 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, unsigned int mode, const void *arg) { extern char *ctime (); printf (_("Member '%s'%s: %ld bytes at %ld (%ld).\n"), name, truncated ? _(" (name might be truncated)") : "", size, hdrpos, datapos); printf (_(" Date %s"), ctime (&date)); printf (_(" uid = %d, gid = %d, mode = 0%o.\n"), uid, gid, mode); return 0; } int main (int argc, char **argv) { ar_scan (argv[1], describe_member, NULL); return 0; } #endif /* TEST. */ #endif /* NO_ARCHIVES. */ make-4.3/src/amiga.c0000644000175000017500000000550313603564437011245 00000000000000/* Running commands on Amiga Copyright (C) 1995-2020 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 . */ #include "makeint.h" #include "variable.h" #include "amiga.h" #include #include #include #include #include static const char Amiga_version[] = "$VER: Make 3.74.3 (12.05.96) \n" "Amiga Port by A. Digulla (digulla@home.lake.de)"; int MyExecute (char **argv) { char * buffer, * ptr; char ** aptr; int len = 0; int status; for (aptr=argv; *aptr; aptr++) { len += strlen (*aptr) + 4; } buffer = AllocMem (len, MEMF_ANY); if (!buffer) O (fatal, NILF, "MyExecute: Cannot allocate space for calling a command\n"); ptr = buffer; for (aptr=argv; *aptr; aptr++) { if (((*aptr)[0] == ';' && !(*aptr)[1])) { *ptr ++ = '"'; strcpy (ptr, *aptr); ptr += strlen (ptr); *ptr ++ = '"'; } else if ((*aptr)[0] == '@' && (*aptr)[1] == '@' && !(*aptr)[2]) { *ptr ++ = '\n'; continue; } else { strcpy (ptr, *aptr); ptr += strlen (ptr); } *ptr ++ = ' '; *ptr = 0; } ptr[-1] = '\n'; status = SystemTags (buffer, SYS_UserShell, TRUE, TAG_END); FreeMem (buffer, len); if (SetSignal (0L,0L) & SIGBREAKF_CTRL_C) status = 20; /* Warnings don't count */ if (status == 5) status = 0; return status; } char * wildcard_expansion (char *wc, char *o) { # define PATH_SIZE 1024 struct AnchorPath * apath; if ( (apath = AllocMem (sizeof (struct AnchorPath) + PATH_SIZE, MEMF_CLEAR)) ) { apath->ap_Strlen = PATH_SIZE; if (MatchFirst (wc, apath) == 0) { do { o = variable_buffer_output (o, apath->ap_Buf, strlen (apath->ap_Buf)); o = variable_buffer_output (o, " ",1); } while (MatchNext (apath) == 0); } MatchEnd (apath); FreeMem (apath, sizeof (struct AnchorPath) + PATH_SIZE); } return o; } make-4.3/src/signame.c0000644000175000017500000001531613603564437011615 00000000000000/* Convert between signal names and numbers. Copyright (C) 1990-2020 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 . */ #include "makeint.h" /* If the system provides strsignal, we don't need it. */ #if !HAVE_STRSIGNAL /* If the system provides sys_siglist, we'll use that. Otherwise create our own. */ #if !HAVE_DECL_SYS_SIGLIST /* Some systems do not define NSIG in . */ #ifndef NSIG #ifdef _NSIG #define NSIG _NSIG #else #define NSIG 32 #endif #endif /* There is too much variation in Sys V signal numbers and names, so we must initialize them at runtime. */ static const char *undoc; static const char *sys_siglist[NSIG]; /* Table of abbreviations for signals. Note: A given number can appear more than once with different abbreviations. */ #define SIG_TABLE_SIZE (NSIG*2) typedef struct { int number; const char *abbrev; } num_abbrev; static num_abbrev sig_table[SIG_TABLE_SIZE]; /* Number of elements of sig_table used. */ static int sig_table_nelts = 0; /* Enter signal number NUMBER into the tables with ABBREV and NAME. */ static void init_sig (int number, const char *abbrev, const char *name) { /* If this value is ever greater than NSIG it seems like it'd be a bug in the system headers, but... better safe than sorry. We know, for example, that this isn't always true on VMS. */ if (number >= 0 && number < NSIG) sys_siglist[number] = name; if (sig_table_nelts < SIG_TABLE_SIZE) { sig_table[sig_table_nelts].number = number; sig_table[sig_table_nelts++].abbrev = abbrev; } } static int signame_init (void) { int i; undoc = xstrdup (_("unknown signal")); /* Initialize signal names. */ for (i = 0; i < NSIG; i++) sys_siglist[i] = undoc; /* Initialize signal names. */ #if defined (SIGHUP) init_sig (SIGHUP, "HUP", _("Hangup")); #endif #if defined (SIGINT) init_sig (SIGINT, "INT", _("Interrupt")); #endif #if defined (SIGQUIT) init_sig (SIGQUIT, "QUIT", _("Quit")); #endif #if defined (SIGILL) init_sig (SIGILL, "ILL", _("Illegal Instruction")); #endif #if defined (SIGTRAP) init_sig (SIGTRAP, "TRAP", _("Trace/breakpoint trap")); #endif /* If SIGIOT == SIGABRT, we want to print it as SIGABRT because SIGABRT is in ANSI and POSIX.1 and SIGIOT isn't. */ #if defined (SIGABRT) init_sig (SIGABRT, "ABRT", _("Aborted")); #endif #if defined (SIGIOT) init_sig (SIGIOT, "IOT", _("IOT trap")); #endif #if defined (SIGEMT) init_sig (SIGEMT, "EMT", _("EMT trap")); #endif #if defined (SIGFPE) init_sig (SIGFPE, "FPE", _("Floating point exception")); #endif #if defined (SIGKILL) init_sig (SIGKILL, "KILL", _("Killed")); #endif #if defined (SIGBUS) init_sig (SIGBUS, "BUS", _("Bus error")); #endif #if defined (SIGSEGV) init_sig (SIGSEGV, "SEGV", _("Segmentation fault")); #endif #if defined (SIGSYS) init_sig (SIGSYS, "SYS", _("Bad system call")); #endif #if defined (SIGPIPE) init_sig (SIGPIPE, "PIPE", _("Broken pipe")); #endif #if defined (SIGALRM) init_sig (SIGALRM, "ALRM", _("Alarm clock")); #endif #if defined (SIGTERM) init_sig (SIGTERM, "TERM", _("Terminated")); #endif #if defined (SIGUSR1) init_sig (SIGUSR1, "USR1", _("User defined signal 1")); #endif #if defined (SIGUSR2) init_sig (SIGUSR2, "USR2", _("User defined signal 2")); #endif /* If SIGCLD == SIGCHLD, we want to print it as SIGCHLD because that is what is in POSIX.1. */ #if defined (SIGCHLD) init_sig (SIGCHLD, "CHLD", _("Child exited")); #endif #if defined (SIGCLD) init_sig (SIGCLD, "CLD", _("Child exited")); #endif #if defined (SIGPWR) init_sig (SIGPWR, "PWR", _("Power failure")); #endif #if defined (SIGTSTP) init_sig (SIGTSTP, "TSTP", _("Stopped")); #endif #if defined (SIGTTIN) init_sig (SIGTTIN, "TTIN", _("Stopped (tty input)")); #endif #if defined (SIGTTOU) init_sig (SIGTTOU, "TTOU", _("Stopped (tty output)")); #endif #if defined (SIGSTOP) init_sig (SIGSTOP, "STOP", _("Stopped (signal)")); #endif #if defined (SIGXCPU) init_sig (SIGXCPU, "XCPU", _("CPU time limit exceeded")); #endif #if defined (SIGXFSZ) init_sig (SIGXFSZ, "XFSZ", _("File size limit exceeded")); #endif #if defined (SIGVTALRM) init_sig (SIGVTALRM, "VTALRM", _("Virtual timer expired")); #endif #if defined (SIGPROF) init_sig (SIGPROF, "PROF", _("Profiling timer expired")); #endif #if defined (SIGWINCH) /* "Window size changed" might be more accurate, but even if that is all that it means now, perhaps in the future it will be extended to cover other kinds of window changes. */ init_sig (SIGWINCH, "WINCH", _("Window changed")); #endif #if defined (SIGCONT) init_sig (SIGCONT, "CONT", _("Continued")); #endif #if defined (SIGURG) init_sig (SIGURG, "URG", _("Urgent I/O condition")); #endif #if defined (SIGIO) /* "I/O pending" has also been suggested. A disadvantage is that signal only happens when the process has asked for it, not every time I/O is pending. Another disadvantage is the confusion from giving it a different name than under Unix. */ init_sig (SIGIO, "IO", _("I/O possible")); #endif #if defined (SIGWIND) init_sig (SIGWIND, "WIND", _("SIGWIND")); #endif #if defined (SIGPHONE) init_sig (SIGPHONE, "PHONE", _("SIGPHONE")); #endif #if defined (SIGPOLL) init_sig (SIGPOLL, "POLL", _("I/O possible")); #endif #if defined (SIGLOST) init_sig (SIGLOST, "LOST", _("Resource lost")); #endif #if defined (SIGDANGER) init_sig (SIGDANGER, "DANGER", _("Danger signal")); #endif #if defined (SIGINFO) init_sig (SIGINFO, "INFO", _("Information request")); #endif #if defined (SIGNOFP) init_sig (SIGNOFP, "NOFP", _("Floating point co-processor not available")); #endif return 1; } #endif /* HAVE_DECL_SYS_SIGLIST */ char * strsignal (int sig) { static char buf[] = "Signal 12345678901234567890"; #if ! HAVE_DECL_SYS_SIGLIST # if HAVE_DECL__SYS_SIGLIST # define sys_siglist _sys_siglist # elif HAVE_DECL___SYS_SIGLIST # define sys_siglist __sys_siglist # else static int sig_initted = 0; if (!sig_initted) sig_initted = signame_init (); # endif #endif if (sig > 0 && sig < NSIG) return (char *) sys_siglist[sig]; sprintf (buf, "Signal %d", sig); return buf; } #endif /* HAVE_STRSIGNAL */ make-4.3/src/function.c0000644000175000017500000021162413603564437012017 00000000000000/* Builtin function expansion for GNU Make. Copyright (C) 1988-2020 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 . */ #include "makeint.h" #include "filedef.h" #include "variable.h" #include "dep.h" #include "job.h" #include "os.h" #include "commands.h" #include "debug.h" #ifdef _AMIGA #include "amiga.h" #endif struct function_table_entry { union { char *(*func_ptr) (char *output, char **argv, const char *fname); gmk_func_ptr alloc_func_ptr; } fptr; const char *name; unsigned char len; unsigned char minimum_args; unsigned char maximum_args; unsigned int expand_args:1; unsigned int alloc_fn:1; }; static unsigned long function_table_entry_hash_1 (const void *keyv) { const struct function_table_entry *key = keyv; return_STRING_N_HASH_1 (key->name, key->len); } static unsigned long function_table_entry_hash_2 (const void *keyv) { const struct function_table_entry *key = keyv; return_STRING_N_HASH_2 (key->name, key->len); } static int function_table_entry_hash_cmp (const void *xv, const void *yv) { const struct function_table_entry *x = xv; const struct function_table_entry *y = yv; int result = x->len - y->len; if (result) return result; return_STRING_N_COMPARE (x->name, y->name, x->len); } static struct hash_table function_table; /* Store into VARIABLE_BUFFER at O the result of scanning TEXT and replacing each occurrence of SUBST with REPLACE. TEXT is null-terminated. SLEN is the length of SUBST and RLEN is the length of REPLACE. If BY_WORD is nonzero, substitutions are done only on matches which are complete whitespace-delimited words. */ char * subst_expand (char *o, const char *text, const char *subst, const char *replace, size_t slen, size_t rlen, int by_word) { const char *t = text; const char *p; if (slen == 0 && !by_word) { /* The first occurrence of "" in any string is its end. */ o = variable_buffer_output (o, t, strlen (t)); if (rlen > 0) o = variable_buffer_output (o, replace, rlen); return o; } do { if (by_word && slen == 0) /* When matching by words, the empty string should match the end of each word, rather than the end of the whole text. */ p = end_of_token (next_token (t)); else { p = strstr (t, subst); if (p == 0) { /* No more matches. Output everything left on the end. */ o = variable_buffer_output (o, t, strlen (t)); return o; } } /* Output everything before this occurrence of the string to replace. */ if (p > t) o = variable_buffer_output (o, t, p - t); /* 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 && !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); else if (rlen > 0) /* Output the replacement string. */ o = variable_buffer_output (o, replace, rlen); /* Advance T past the string to be replaced. */ t = p + slen; } while (*t != '\0'); return o; } /* Store into VARIABLE_BUFFER at O the result of scanning TEXT and replacing strings matching PATTERN with REPLACE. If PATTERN_PERCENT is not nil, PATTERN has already been run through find_percent, and PATTERN_PERCENT is the result. If REPLACE_PERCENT is not nil, REPLACE has already been run through find_percent, and REPLACE_PERCENT is the result. Note that we expect PATTERN_PERCENT and REPLACE_PERCENT to point to the character _AFTER_ the %, not to the % itself. */ char * patsubst_expand_pat (char *o, const char *text, const char *pattern, const char *replace, const char *pattern_percent, const char *replace_percent) { size_t pattern_prepercent_len, pattern_postpercent_len; size_t replace_prepercent_len, replace_postpercent_len; const char *t; size_t len; int doneany = 0; /* Record the length of REPLACE before and after the % so we don't have to compute these lengths more than once. */ if (replace_percent) { replace_prepercent_len = replace_percent - replace - 1; replace_postpercent_len = strlen (replace_percent); } else { replace_prepercent_len = strlen (replace); replace_postpercent_len = 0; } if (!pattern_percent) /* With no % in the pattern, this is just a simple substitution. */ return subst_expand (o, text, pattern, replace, strlen (pattern), strlen (replace), 1); /* Record the length of PATTERN before and after the % so we don't have to compute it more than once. */ pattern_prepercent_len = pattern_percent - pattern - 1; pattern_postpercent_len = strlen (pattern_percent); while ((t = find_next_token (&text, &len)) != 0) { int fail = 0; /* Is it big enough to match? */ if (len < pattern_prepercent_len + pattern_postpercent_len) fail = 1; /* Does the prefix match? */ if (!fail && pattern_prepercent_len > 0 && (*t != *pattern || t[pattern_prepercent_len - 1] != pattern_percent[-2] || !strneq (t + 1, pattern + 1, pattern_prepercent_len - 1))) fail = 1; /* Does the suffix match? */ if (!fail && pattern_postpercent_len > 0 && (t[len - 1] != pattern_percent[pattern_postpercent_len - 1] || t[len - pattern_postpercent_len] != *pattern_percent || !strneq (&t[len - pattern_postpercent_len], pattern_percent, pattern_postpercent_len - 1))) fail = 1; if (fail) /* It didn't match. Output the string. */ o = variable_buffer_output (o, t, len); else { /* It matched. Output the replacement. */ /* Output the part of the replacement before the %. */ o = variable_buffer_output (o, replace, replace_prepercent_len); if (replace_percent != 0) { /* Output the part of the matched string that matched the % in the pattern. */ o = variable_buffer_output (o, t + pattern_prepercent_len, len - (pattern_prepercent_len + pattern_postpercent_len)); /* Output the part of the replacement after the %. */ o = variable_buffer_output (o, replace_percent, replace_postpercent_len); } } /* Output a space, but not if the replacement is "". */ if (fail || replace_prepercent_len > 0 || (replace_percent != 0 && len + replace_postpercent_len > 0)) { o = variable_buffer_output (o, " ", 1); doneany = 1; } } if (doneany) /* Kill the last space. */ --o; return o; } /* Store into VARIABLE_BUFFER at O the result of scanning TEXT and replacing strings matching PATTERN with REPLACE. If PATTERN_PERCENT is not nil, PATTERN has already been run through find_percent, and PATTERN_PERCENT is the result. If REPLACE_PERCENT is not nil, REPLACE has already been run through find_percent, and REPLACE_PERCENT is the result. Note that we expect PATTERN_PERCENT and REPLACE_PERCENT to point to the character _AFTER_ the %, not to the % itself. */ char * patsubst_expand (char *o, const char *text, char *pattern, char *replace) { const char *pattern_percent = find_percent (pattern); const char *replace_percent = find_percent (replace); /* If there's a percent in the pattern or replacement skip it. */ if (replace_percent) ++replace_percent; if (pattern_percent) ++pattern_percent; return patsubst_expand_pat (o, text, pattern, replace, pattern_percent, replace_percent); } /* Look up a function by name. */ static const struct function_table_entry * lookup_function (const char *s) { struct function_table_entry function_table_entry_key; const char *e = s; while (STOP_SET (*e, MAP_USERFUNC)) e++; if (e == s || !STOP_SET(*e, MAP_NUL|MAP_SPACE)) return NULL; function_table_entry_key.name = s; function_table_entry_key.len = (unsigned char) (e - s); return hash_find_item (&function_table, &function_table_entry_key); } /* Return 1 if PATTERN matches STR, 0 if not. */ int pattern_matches (const char *pattern, const char *percent, const char *str) { size_t sfxlen, strlength; if (percent == 0) { size_t len = strlen (pattern) + 1; char *new_chars = alloca (len); memcpy (new_chars, pattern, len); percent = find_percent (new_chars); if (percent == 0) return streq (new_chars, str); pattern = new_chars; } sfxlen = strlen (percent + 1); strlength = strlen (str); if (strlength < (percent - pattern) + sfxlen || !strneq (pattern, str, percent - pattern)) return 0; return !strcmp (percent + 1, str + (strlength - sfxlen)); } /* Find the next comma or ENDPAREN (counting nested STARTPAREN and ENDPARENtheses), starting at PTR before END. Return a pointer to next character. If no next argument is found, return NULL. */ static char * find_next_argument (char startparen, char endparen, const char *ptr, const char *end) { int count = 0; for (; ptr < end; ++ptr) if (!STOP_SET (*ptr, MAP_VARSEP|MAP_COMMA)) continue; else if (*ptr == startparen) ++count; else if (*ptr == endparen) { --count; if (count < 0) return NULL; } else if (*ptr == ',' && !count) return (char *)ptr; /* We didn't find anything. */ return NULL; } /* Glob-expand LINE. The returned pointer is only good until the next call to string_glob. */ static char * string_glob (char *line) { static char *result = 0; static size_t length; struct nameseq *chain; size_t idx; chain = PARSE_FILE_SEQ (&line, struct nameseq, MAP_NUL, NULL, /* We do not want parse_file_seq to strip './'s. That would break examples like: $(patsubst ./%.c,obj/%.o,$(wildcard ./?*.c)). */ PARSEFS_NOSTRIP|PARSEFS_NOCACHE|PARSEFS_EXISTS); if (result == 0) { length = 100; result = xmalloc (100); } idx = 0; while (chain != 0) { struct nameseq *next = chain->next; size_t len = strlen (chain->name); if (idx + len + 1 > length) { length += (len + 1) * 2; result = xrealloc (result, length); } memcpy (&result[idx], chain->name, len); idx += len; result[idx++] = ' '; /* Because we used PARSEFS_NOCACHE above, we have to free() NAME. */ free ((char *)chain->name); free (chain); chain = next; } /* Kill the last space and terminate the string. */ if (idx == 0) result[0] = '\0'; else result[idx - 1] = '\0'; return result; } /* Builtin functions */ static char * func_patsubst (char *o, char **argv, const char *funcname UNUSED) { o = patsubst_expand (o, argv[2], argv[0], argv[1]); return o; } static char * func_join (char *o, char **argv, const char *funcname UNUSED) { int doneany = 0; /* Write each word of the first argument directly followed by the corresponding word of the second argument. If the two arguments have a different number of words, the excess words are just output separated by blanks. */ const char *tp; const char *pp; const char *list1_iterator = argv[0]; const char *list2_iterator = argv[1]; do { size_t len1, len2; tp = find_next_token (&list1_iterator, &len1); if (tp != 0) o = variable_buffer_output (o, tp, len1); pp = find_next_token (&list2_iterator, &len2); if (pp != 0) o = variable_buffer_output (o, pp, len2); if (tp != 0 || pp != 0) { o = variable_buffer_output (o, " ", 1); doneany = 1; } } while (tp != 0 || pp != 0); if (doneany) /* Kill the last blank. */ --o; return o; } static char * func_origin (char *o, char **argv, const char *funcname UNUSED) { /* Expand the argument. */ struct variable *v = lookup_variable (argv[0], strlen (argv[0])); if (v == 0) o = variable_buffer_output (o, "undefined", 9); else switch (v->origin) { default: case o_invalid: abort (); break; case o_default: o = variable_buffer_output (o, "default", 7); break; case o_env: o = variable_buffer_output (o, "environment", 11); break; case o_file: o = variable_buffer_output (o, "file", 4); break; case o_env_override: o = variable_buffer_output (o, "environment override", 20); break; case o_command: o = variable_buffer_output (o, "command line", 12); break; case o_override: o = variable_buffer_output (o, "override", 8); break; case o_automatic: o = variable_buffer_output (o, "automatic", 9); break; } return o; } static char * func_flavor (char *o, char **argv, const char *funcname UNUSED) { struct variable *v = lookup_variable (argv[0], strlen (argv[0])); if (v == 0) o = variable_buffer_output (o, "undefined", 9); else if (v->recursive) o = variable_buffer_output (o, "recursive", 9); else o = variable_buffer_output (o, "simple", 6); return o; } static char * func_notdir_suffix (char *o, char **argv, const char *funcname) { /* Expand the argument. */ const char *list_iterator = argv[0]; const char *p2; int doneany =0; size_t len=0; int is_suffix = funcname[0] == 's'; int is_notdir = !is_suffix; int stop = MAP_DIRSEP | (is_suffix ? MAP_DOT : 0); #ifdef VMS /* For VMS list_iterator points to a comma separated list. To use the common [find_]next_token, create a local copy and replace the commas with spaces. Obviously, there is a problem if there is a ',' in the VMS filename (can only happen on ODS5), the same problem as with spaces in filenames, which seems to be present in make on all platforms. */ char *vms_list_iterator = alloca(strlen(list_iterator) + 1); int i; for (i = 0; list_iterator[i]; i++) if (list_iterator[i] == ',') vms_list_iterator[i] = ' '; else vms_list_iterator[i] = list_iterator[i]; vms_list_iterator[i] = list_iterator[i]; while ((p2 = find_next_token((const char**) &vms_list_iterator, &len)) != 0) #else while ((p2 = find_next_token (&list_iterator, &len)) != 0) #endif { const char *p = p2 + len - 1; while (p >= p2 && ! STOP_SET (*p, stop)) --p; if (p >= p2) { if (is_notdir) ++p; else if (*p != '.') continue; o = variable_buffer_output (o, p, len - (p - p2)); } #ifdef HAVE_DOS_PATHS /* Handle the case of "d:foo/bar". */ else if (is_notdir && p2[0] && p2[1] == ':') { p = p2 + 2; o = variable_buffer_output (o, p, len - (p - p2)); } #endif else if (is_notdir) o = variable_buffer_output (o, p2, len); if (is_notdir || p >= p2) { #ifdef VMS if (vms_comma_separator) o = variable_buffer_output (o, ",", 1); else #endif o = variable_buffer_output (o, " ", 1); doneany = 1; } } if (doneany) /* Kill last space. */ --o; return o; } static char * func_basename_dir (char *o, char **argv, const char *funcname) { /* Expand the argument. */ const char *p3 = argv[0]; const char *p2; int doneany = 0; size_t len = 0; int is_basename = funcname[0] == 'b'; int is_dir = !is_basename; 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); int i; for (i = 0; p3[i]; i++) if (p3[i] == ',') vms_p3[i] = ' '; else vms_p3[i] = p3[i]; vms_p3[i] = p3[i]; while ((p2 = find_next_token((const char**) &vms_p3, &len)) != 0) #else while ((p2 = find_next_token (&p3, &len)) != 0) #endif { const char *p = p2 + len - 1; while (p >= p2 && ! STOP_SET (*p, stop)) --p; if (p >= p2 && (is_dir)) o = variable_buffer_output (o, p2, ++p - p2); else if (p >= p2 && (*p == '.')) o = variable_buffer_output (o, p2, p - p2); #ifdef HAVE_DOS_PATHS /* Handle the "d:foobar" case */ else if (p2[0] && p2[1] == ':' && is_dir) o = variable_buffer_output (o, p2, 2); #endif else if (is_dir) #ifdef VMS { 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); #else ; /* Just a nop... */ #endif /* AMIGA */ #endif /* !VMS */ else /* The entire name is the basename. */ o = variable_buffer_output (o, p2, len); #ifdef VMS if (vms_comma_separator) o = variable_buffer_output (o, ",", 1); else #endif o = variable_buffer_output (o, " ", 1); doneany = 1; } if (doneany) /* Kill last space. */ --o; return o; } static char * func_addsuffix_addprefix (char *o, char **argv, const char *funcname) { size_t fixlen = strlen (argv[0]); const char *list_iterator = argv[1]; int is_addprefix = funcname[3] == 'p'; int is_addsuffix = !is_addprefix; int doneany = 0; const char *p; size_t len; while ((p = find_next_token (&list_iterator, &len)) != 0) { if (is_addprefix) o = variable_buffer_output (o, argv[0], fixlen); o = variable_buffer_output (o, p, len); if (is_addsuffix) o = variable_buffer_output (o, argv[0], fixlen); o = variable_buffer_output (o, " ", 1); doneany = 1; } if (doneany) /* Kill last space. */ --o; return o; } static char * func_subst (char *o, char **argv, const char *funcname UNUSED) { o = subst_expand (o, argv[2], argv[0], argv[1], strlen (argv[0]), strlen (argv[1]), 0); return o; } static char * func_firstword (char *o, char **argv, const char *funcname UNUSED) { size_t i; const char *words = argv[0]; /* Use a temp variable for find_next_token */ const char *p = find_next_token (&words, &i); if (p != 0) o = variable_buffer_output (o, p, i); return o; } static char * func_lastword (char *o, char **argv, const char *funcname UNUSED) { size_t i; const char *words = argv[0]; /* Use a temp variable for find_next_token */ const char *p = NULL; const char *t; while ((t = find_next_token (&words, &i)) != NULL) p = t; if (p != 0) o = variable_buffer_output (o, p, i); return o; } static char * func_words (char *o, char **argv, const char *funcname UNUSED) { int i = 0; const char *word_iterator = argv[0]; char buf[20]; while (find_next_token (&word_iterator, NULL) != 0) ++i; sprintf (buf, "%d", i); o = variable_buffer_output (o, buf, strlen (buf)); return o; } /* Set begpp to point to the first non-whitespace character of the string, * and endpp to point to the last non-whitespace character of the string. * If the string is empty or contains nothing but whitespace, endpp will be * begpp-1. */ char * strip_whitespace (const char **begpp, const char **endpp) { while (*begpp <= *endpp && ISSPACE (**begpp)) (*begpp) ++; while (*endpp >= *begpp && ISSPACE (**endpp)) (*endpp) --; return (char *)*begpp; } static void check_numeric (const char *s, const char *msg) { const char *end = s + strlen (s) - 1; const char *beg = s; strip_whitespace (&s, &end); for (; s <= end; ++s) if (!ISDIGIT (*s)) /* ISDIGIT only evals its arg once: see makeint.h. */ break; if (s <= end || end - beg < 0) OSS (fatal, *expanding_var, "%s: '%s'", msg, beg); } static char * func_word (char *o, char **argv, const char *funcname UNUSED) { const char *end_p; const char *p; int i; /* Check the first argument. */ check_numeric (argv[0], _("non-numeric first argument to 'word' function")); i = atoi (argv[0]); if (i == 0) O (fatal, *expanding_var, _("first argument to 'word' function must be greater than 0")); end_p = argv[1]; while ((p = find_next_token (&end_p, 0)) != 0) if (--i == 0) break; if (i == 0) o = variable_buffer_output (o, p, end_p - p); return o; } static char * func_wordlist (char *o, char **argv, const char *funcname UNUSED) { int start, count; /* Check the arguments. */ check_numeric (argv[0], _("non-numeric first argument to 'wordlist' function")); check_numeric (argv[1], _("non-numeric second argument to 'wordlist' function")); start = atoi (argv[0]); if (start < 1) ON (fatal, *expanding_var, "invalid first argument to 'wordlist' function: '%d'", start); count = atoi (argv[1]) - start + 1; if (count > 0) { const char *p; const char *end_p = argv[2]; /* Find the beginning of the "start"th word. */ while (((p = find_next_token (&end_p, 0)) != 0) && --start) ; if (p) { /* Find the end of the "count"th word from start. */ while (--count && (find_next_token (&end_p, 0) != 0)) ; /* Return the stuff in the middle. */ o = variable_buffer_output (o, p, end_p - p); } } return o; } static char * func_findstring (char *o, char **argv, const char *funcname UNUSED) { /* Find the first occurrence of the first string in the second. */ if (strstr (argv[1], argv[0]) != 0) o = variable_buffer_output (o, argv[0], strlen (argv[0])); return o; } static char * func_foreach (char *o, char **argv, const char *funcname UNUSED) { /* expand only the first two. */ char *varname = expand_argument (argv[0], NULL); char *list = expand_argument (argv[1], NULL); const char *body = argv[2]; int doneany = 0; const char *list_iterator = list; const char *p; size_t 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 (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) { char *result = 0; free (var->value); var->value = xstrndup (p, len); result = allocated_variable_expand (body); o = variable_buffer_output (o, result, strlen (result)); o = variable_buffer_output (o, " ", 1); doneany = 1; free (result); } if (doneany) /* Kill the last space. */ --o; pop_variable_scope (); free (varname); free (list); return o; } struct a_word { struct a_word *next; struct a_word *chain; char *str; size_t length; int matched; }; static unsigned long a_word_hash_1 (const void *key) { return_STRING_HASH_1 (((struct a_word const *) key)->str); } static unsigned long a_word_hash_2 (const void *key) { return_STRING_HASH_2 (((struct a_word const *) key)->str); } static int a_word_hash_cmp (const void *x, const void *y) { int result = (int) ((struct a_word const *) x)->length - ((struct a_word const *) y)->length; if (result) return result; return_STRING_COMPARE (((struct a_word const *) x)->str, ((struct a_word const *) y)->str); } struct a_pattern { struct a_pattern *next; char *str; char *percent; size_t length; }; static char * func_filter_filterout (char *o, char **argv, const char *funcname) { struct a_word *wordhead; struct a_word **wordtail; struct a_word *wp; struct a_pattern *pathead; struct a_pattern **pattail; struct a_pattern *pp; struct hash_table a_word_table; int is_filter = funcname[CSTRLEN ("filter")] == '\0'; const char *pat_iterator = argv[0]; const char *word_iterator = argv[1]; int literals = 0; int words = 0; int hashing = 0; char *p; size_t len; /* Chop ARGV[0] up into patterns to match against the words. We don't need to preserve it because our caller frees all the argument memory anyway. */ pattail = &pathead; while ((p = find_next_token (&pat_iterator, &len)) != 0) { struct a_pattern *pat = alloca (sizeof (struct a_pattern)); *pattail = pat; pattail = &pat->next; if (*pat_iterator != '\0') ++pat_iterator; pat->str = p; p[len] = '\0'; pat->percent = find_percent (p); if (pat->percent == 0) literals++; /* find_percent() might shorten the string so LEN is wrong. */ pat->length = strlen (pat->str); } *pattail = 0; /* Chop ARGV[1] up into words to match against the patterns. */ wordtail = &wordhead; while ((p = find_next_token (&word_iterator, &len)) != 0) { struct a_word *word = alloca (sizeof (struct a_word)); *wordtail = word; wordtail = &word->next; if (*word_iterator != '\0') ++word_iterator; p[len] = '\0'; word->str = p; word->length = len; word->matched = 0; word->chain = 0; words++; } *wordtail = 0; /* Only use a hash table if arg list lengths justifies the cost. */ hashing = (literals >= 2 && (literals * words) >= 10); if (hashing) { hash_init (&a_word_table, words, a_word_hash_1, a_word_hash_2, a_word_hash_cmp); for (wp = wordhead; wp != 0; wp = wp->next) { struct a_word *owp = hash_insert (&a_word_table, wp); if (owp) wp->chain = owp; } } if (words) { int doneany = 0; /* Run each pattern through the words, killing words. */ for (pp = pathead; pp != 0; pp = pp->next) { if (pp->percent) for (wp = wordhead; wp != 0; wp = wp->next) wp->matched |= pattern_matches (pp->str, pp->percent, wp->str); else if (hashing) { struct a_word a_word_key; a_word_key.str = pp->str; a_word_key.length = pp->length; wp = hash_find_item (&a_word_table, &a_word_key); while (wp) { wp->matched |= 1; wp = wp->chain; } } else for (wp = wordhead; wp != 0; wp = wp->next) wp->matched |= (wp->length == pp->length && strneq (pp->str, wp->str, wp->length)); } /* Output the words that matched (or didn't, for filter-out). */ for (wp = wordhead; wp != 0; wp = wp->next) if (is_filter ? wp->matched : !wp->matched) { o = variable_buffer_output (o, wp->str, strlen (wp->str)); o = variable_buffer_output (o, " ", 1); doneany = 1; } if (doneany) /* Kill the last space. */ --o; } if (hashing) hash_free (&a_word_table, 0); return o; } static char * func_strip (char *o, char **argv, const char *funcname UNUSED) { const char *p = argv[0]; int doneany = 0; while (*p != '\0') { int i=0; const char *word_start; NEXT_TOKEN (p); word_start = p; for (i=0; *p != '\0' && !ISSPACE (*p); ++p, ++i) {} if (!i) break; o = variable_buffer_output (o, word_start, i); o = variable_buffer_output (o, " ", 1); doneany = 1; } if (doneany) /* Kill the last space. */ --o; return o; } /* Print a warning or fatal message. */ static char * func_error (char *o, char **argv, const char *funcname) { char **argvp; char *msg, *p; size_t len; /* The arguments will be broken on commas. Rather than create yet another special case where function arguments aren't broken up, just create a format string that puts them back together. */ for (len=0, argvp=argv; *argvp != 0; ++argvp) len += strlen (*argvp) + 2; p = msg = alloca (len + 1); msg[0] = '\0'; for (argvp=argv; argvp[1] != 0; ++argvp) { strcpy (p, *argvp); p += strlen (*argvp); *(p++) = ','; *(p++) = ' '; } strcpy (p, *argvp); switch (*funcname) { case 'e': OS (fatal, reading_file, "%s", msg); case 'w': OS (error, reading_file, "%s", msg); break; case 'i': outputs (0, msg); outputs (0, "\n"); break; default: OS (fatal, *expanding_var, "Internal error: func_error: '%s'", funcname); } /* The warning function expands to the empty string. */ return o; } /* chop argv[0] into words, and sort them. */ static char * func_sort (char *o, char **argv, const char *funcname UNUSED) { const char *t; char **words; int wordi; char *p; size_t len; /* Find the maximum number of words we'll have. */ t = argv[0]; wordi = 0; while ((p = find_next_token (&t, NULL)) != 0) { ++t; ++wordi; } words = xmalloc ((wordi == 0 ? 1 : wordi) * sizeof (char *)); /* Now assign pointers to each string in the array. */ t = argv[0]; wordi = 0; while ((p = find_next_token (&t, &len)) != 0) { ++t; p[len] = '\0'; words[wordi++] = p; } if (wordi) { int i; /* Now sort the list of words. */ qsort (words, wordi, sizeof (char *), alpha_compare); /* Now write the sorted list, uniquified. */ for (i = 0; i < wordi; ++i) { len = strlen (words[i]); if (i == wordi - 1 || strlen (words[i + 1]) != len || strcmp (words[i], words[i + 1])) { o = variable_buffer_output (o, words[i], len); o = variable_buffer_output (o, " ", 1); } } /* Kill the last space. */ --o; } free (words); return o; } /* $(if condition,true-part[,false-part]) CONDITION is false iff it evaluates to an empty string. White space before and after condition are stripped before evaluation. If CONDITION is true, then TRUE-PART is evaluated, otherwise FALSE-PART is evaluated (if it exists). Because only one of the two PARTs is evaluated, you can use $(if ...) to create side-effects (with $(shell ...), for example). */ static char * func_if (char *o, char **argv, const char *funcname UNUSED) { const char *begp = argv[0]; const char *endp = begp + strlen (argv[0]) - 1; int result = 0; /* Find the result of the condition: if we have a value, and it's not empty, the condition is true. If we don't have a value, or it's the empty string, then it's false. */ strip_whitespace (&begp, &endp); if (begp <= endp) { char *expansion = expand_argument (begp, endp+1); result = expansion[0] != '\0'; free (expansion); } /* If the result is true (1) we want to eval the first argument, and if it's false (0) we want to eval the second. If the argument doesn't exist we do nothing, otherwise expand it and add to the buffer. */ argv += 1 + !result; if (*argv) { char *expansion = expand_argument (*argv, NULL); o = variable_buffer_output (o, expansion, strlen (expansion)); free (expansion); } return o; } /* $(or condition1[,condition2[,condition3[...]]]) A CONDITION is false iff it evaluates to an empty string. White space before and after CONDITION are stripped before evaluation. CONDITION1 is evaluated. If it's true, then this is the result of expansion. If it's false, CONDITION2 is evaluated, and so on. If none of the conditions are true, the expansion is the empty string. Once a CONDITION is true no further conditions are evaluated (short-circuiting). */ static char * func_or (char *o, char **argv, const char *funcname UNUSED) { for ( ; *argv ; ++argv) { const char *begp = *argv; const char *endp = begp + strlen (*argv) - 1; char *expansion; size_t result = 0; /* Find the result of the condition: if it's false keep going. */ strip_whitespace (&begp, &endp); if (begp > endp) continue; expansion = expand_argument (begp, endp+1); result = strlen (expansion); /* If the result is false keep going. */ if (!result) { free (expansion); continue; } /* It's true! Keep this result and return. */ o = variable_buffer_output (o, expansion, result); free (expansion); break; } return o; } /* $(and condition1[,condition2[,condition3[...]]]) A CONDITION is false iff it evaluates to an empty string. White space before and after CONDITION are stripped before evaluation. CONDITION1 is evaluated. If it's false, then this is the result of expansion. If it's true, CONDITION2 is evaluated, and so on. If all of the conditions are true, the expansion is the result of the last condition. Once a CONDITION is false no further conditions are evaluated (short-circuiting). */ static char * func_and (char *o, char **argv, const char *funcname UNUSED) { char *expansion; while (1) { const char *begp = *argv; const char *endp = begp + strlen (*argv) - 1; size_t result; /* An empty condition is always false. */ strip_whitespace (&begp, &endp); if (begp > endp) return o; expansion = expand_argument (begp, endp+1); result = strlen (expansion); /* If the result is false, stop here: we're done. */ if (!result) break; /* Otherwise the result is true. If this is the last one, keep this result and quit. Otherwise go on to the next one! */ if (*(++argv)) free (expansion); else { o = variable_buffer_output (o, expansion, result); break; } } free (expansion); return o; } static char * func_wildcard (char *o, char **argv, const char *funcname UNUSED) { #ifdef _AMIGA o = wildcard_expansion (argv[0], o); #else char *p = string_glob (argv[0]); o = variable_buffer_output (o, p, strlen (p)); #endif return o; } /* $(eval ) Always resolves to the empty string. Treat the arguments as a segment of makefile, and parse them. */ static char * func_eval (char *o, char **argv, const char *funcname UNUSED) { char *buf; size_t len; /* Eval the buffer. Pop the current variable buffer setting so that the eval'd code can use its own without conflicting. */ install_variable_buffer (&buf, &len); eval_buffer (argv[0], NULL); restore_variable_buffer (buf, len); return o; } static char * func_value (char *o, char **argv, const char *funcname UNUSED) { /* Look up the variable. */ struct variable *v = lookup_variable (argv[0], strlen (argv[0])); /* Copy its value into the output buffer without expanding it. */ if (v) o = variable_buffer_output (o, v->value, strlen (v->value)); return o; } /* \r is replaced on UNIX as well. Is this desirable? */ static void fold_newlines (char *buffer, size_t *length, int trim_newlines) { char *dst = buffer; char *src = buffer; char *last_nonnl = buffer - 1; src[*length] = 0; for (; *src != '\0'; ++src) { if (src[0] == '\r' && src[1] == '\n') continue; if (*src == '\n') { *dst++ = ' '; } else { last_nonnl = dst; *dst++ = *src; } } if (!trim_newlines && (last_nonnl < (dst - 2))) last_nonnl = dst - 2; *(++last_nonnl) = '\0'; *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]; shell_function_pid = 0; if (exit_sig == 0 && exit_code == 127) shell_function_completed = -1; else shell_function_completed = 1; if (exit_code == 0 && exit_sig > 0) exit_code = 128 + exit_sig; sprintf (buf, "%d", exit_code); define_variable_cname (".SHELLSTATUS", buf, o_override, 0); } #ifdef WINDOWS32 /*untested*/ #include #include #include "sub_proc.h" int windows32_openpipe (int *pipedes, int errfd, pid_t *pid_p, char **command_argv, char **envp) { SECURITY_ATTRIBUTES saAttr; HANDLE hIn = INVALID_HANDLE_VALUE; HANDLE hErr = INVALID_HANDLE_VALUE; HANDLE hChildOutRd; HANDLE hChildOutWr; HANDLE hProcess, tmpIn, tmpErr; DWORD e; /* Set status for return. */ pipedes[0] = pipedes[1] = -1; *pid_p = (pid_t)-1; saAttr.nLength = sizeof (SECURITY_ATTRIBUTES); saAttr.bInheritHandle = TRUE; saAttr.lpSecurityDescriptor = NULL; /* Standard handles returned by GetStdHandle can be NULL or INVALID_HANDLE_VALUE if the parent process closed them. If that happens, we open the null device and pass its handle to process_begin below as the corresponding handle to inherit. */ tmpIn = GetStdHandle (STD_INPUT_HANDLE); if (DuplicateHandle (GetCurrentProcess (), tmpIn, GetCurrentProcess (), &hIn, 0, TRUE, DUPLICATE_SAME_ACCESS) == FALSE) { e = GetLastError (); if (e == ERROR_INVALID_HANDLE) { tmpIn = CreateFile ("NUL", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (tmpIn != INVALID_HANDLE_VALUE && DuplicateHandle (GetCurrentProcess (), tmpIn, GetCurrentProcess (), &hIn, 0, TRUE, DUPLICATE_SAME_ACCESS) == FALSE) CloseHandle (tmpIn); } if (hIn == INVALID_HANDLE_VALUE) { ON (error, NILF, _("windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n"), e); return -1; } } tmpErr = (HANDLE)_get_osfhandle (errfd); if (DuplicateHandle (GetCurrentProcess (), tmpErr, GetCurrentProcess (), &hErr, 0, TRUE, DUPLICATE_SAME_ACCESS) == FALSE) { e = GetLastError (); if (e == ERROR_INVALID_HANDLE) { tmpErr = CreateFile ("NUL", GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (tmpErr != INVALID_HANDLE_VALUE && DuplicateHandle (GetCurrentProcess (), tmpErr, GetCurrentProcess (), &hErr, 0, TRUE, DUPLICATE_SAME_ACCESS) == FALSE) CloseHandle (tmpErr); } if (hErr == INVALID_HANDLE_VALUE) { ON (error, NILF, _("windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n"), e); return -1; } } if (! CreatePipe (&hChildOutRd, &hChildOutWr, &saAttr, 0)) { ON (error, NILF, _("CreatePipe() failed (e=%ld)\n"), GetLastError()); return -1; } hProcess = process_init_fd (hIn, hChildOutWr, hErr); if (!hProcess) { O (error, NILF, _("windows32_openpipe(): process_init_fd() failed\n")); return -1; } /* make sure that CreateProcess() has Path it needs */ sync_Path_environment (); /* 'sync_Path_environment' may realloc 'environ', so take note of the new value. */ envp = environ; if (! process_begin (hProcess, command_argv, envp, command_argv[0], NULL)) { /* register process for wait */ process_register (hProcess); /* set the pid for returning to caller */ *pid_p = (pid_t) hProcess; /* set up to read data from child */ pipedes[0] = _open_osfhandle ((intptr_t) hChildOutRd, O_RDONLY); /* this will be closed almost right away */ pipedes[1] = _open_osfhandle ((intptr_t) hChildOutWr, O_APPEND); return 0; } else { /* reap/cleanup the failed process */ process_cleanup (hProcess); /* close handles which were duplicated, they weren't used */ if (hIn != INVALID_HANDLE_VALUE) CloseHandle (hIn); if (hErr != INVALID_HANDLE_VALUE) CloseHandle (hErr); /* close pipe handles, they won't be used */ CloseHandle (hChildOutRd); CloseHandle (hChildOutWr); return -1; } } #endif #ifdef __MSDOS__ FILE * msdos_openpipe (int* pipedes, int *pidp, char *text) { FILE *fpipe=0; /* MSDOS can't fork, but it has 'popen'. */ struct variable *sh = lookup_variable ("SHELL", 5); int e; extern int dos_command_running, dos_status; /* Make sure not to bother processing an empty line. */ NEXT_TOKEN (text); if (*text == '\0') return 0; if (sh) { char buf[PATH_MAX + 7]; /* This makes sure $SHELL value is used by $(shell), even though the target environment is not passed to it. */ sprintf (buf, "SHELL=%s", sh->value); putenv (buf); } e = errno; errno = 0; dos_command_running = 1; dos_status = 0; /* If dos_status becomes non-zero, it means the child process was interrupted by a signal, like SIGINT or SIGQUIT. See fatal_error_signal in commands.c. */ fpipe = popen (text, "rt"); dos_command_running = 0; if (!fpipe || dos_status) { pipedes[0] = -1; *pidp = -1; if (dos_status) errno = EINTR; else if (errno == 0) errno = ENOMEM; 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; } return fpipe; } #endif /* Do shell spawning, with the naughty bits for different OSes. */ #ifdef VMS /* VMS can't do $(shell ...) */ char * func_shell_base (char *o, char **argv, int trim_newlines) { fprintf (stderr, "This platform does not support shell\n"); die (MAKE_TROUBLE); return NULL; } #define func_shell 0 #else #ifndef _AMIGA char * func_shell_base (char *o, char **argv, int trim_newlines) { char *batch_filename = NULL; int errfd; #ifdef __MSDOS__ FILE *fpipe; #endif char **command_argv = NULL; char **envp; int pipedes[2]; pid_t pid; #ifndef __MSDOS__ #ifdef WINDOWS32 /* Reset just_print_flag. This is needed on Windows when batch files are used to run the commands, because we normally refrain from creating batch files under -n. */ int j_p_f = just_print_flag; just_print_flag = 0; #endif /* Construct the argument list. */ command_argv = construct_command_argv (argv[0], NULL, NULL, 0, &batch_filename); if (command_argv == 0) { #ifdef WINDOWS32 just_print_flag = j_p_f; #endif return o; } #endif /* !__MSDOS__ */ /* Using a target environment for 'shell' loses in cases like: export var = $(shell echo foobie) bad := $(var) because target_environment hits a loop trying to expand $(var) to put it in the environment. This is even more confusing when 'var' was not explicitly exported, but just appeared in the calling environment. See Savannah bug #10593. envp = target_environment (NULL); */ envp = environ; /* Set up the output in case the shell writes something. */ output_start (); errfd = (output_context && output_context->err >= 0 ? output_context->err : FD_STDERR); #if defined(__MSDOS__) fpipe = msdos_openpipe (pipedes, &pid, argv[0]); if (pipedes[0] < 0) { OS (error, reading_file, "pipe: %s", strerror (errno)); pid = -1; goto done; } #elif defined(WINDOWS32) windows32_openpipe (pipedes, errfd, &pid, command_argv, envp); /* Restore the value of just_print_flag. */ just_print_flag = j_p_f; if (pipedes[0] < 0) { /* Open of the pipe failed, mark as failed execution. */ shell_completed (127, 0); OS (error, reading_file, "pipe: %s", strerror (errno)); pid = -1; goto done; } #else if (pipe (pipedes) < 0) { OS (error, reading_file, "pipe: %s", strerror (errno)); pid = -1; goto done; } /* Close handles that are unnecessary for the child process. */ fd_noinherit (pipedes[1]); fd_noinherit (pipedes[0]); { struct childbase child; child.cmd_name = NULL; child.output.syncout = 1; child.output.out = pipedes[1]; child.output.err = errfd; child.environment = envp; pid = child_execute_job (&child, 1, command_argv); free (child.cmd_name); } if (pid < 0) { shell_completed (127, 0); goto done; } #endif { char *buffer; size_t maxlen, i; int cc; /* Record the PID for reap_children. */ shell_function_pid = pid; #ifndef __MSDOS__ shell_function_completed = 0; /* 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. */ 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); } EINTRLOOP (cc, read (pipedes[0], &buffer[i], maxlen - i)); if (cc <= 0) break; } buffer[i] = '\0'; /* Close the read side of the pipe. */ #ifdef __MSDOS__ if (fpipe) { int st = pclose (fpipe); shell_completed (st, 0); } #else (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); 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; /* 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); } free (buffer); } done: if (command_argv) { /* Free the storage only the child needed. */ free (command_argv[0]); free (command_argv); } return o; } #else /* _AMIGA */ /* Do the Amiga version of func_shell. */ char * func_shell_base (char *o, char **argv, int trim_newlines) { /* Amiga can't fork nor spawn, but I can start a program with redirection of my choice. However, this means that we don't have an opportunity to reopen stdout to trap it. Thus, we save our own stdout onto a new descriptor and dup a temp file's descriptor onto our stdout temporarily. After we spawn the shell program, we dup our own stdout back to the stdout descriptor. The buffer reading is the same as above, except that we're now reading from a file. */ #include #include BPTR child_stdout; char tmp_output[FILENAME_MAX]; size_t maxlen = 200, i; int cc; char * buffer, * ptr; char ** aptr; size_t len = 0; char* batch_filename = NULL; /* Construct the argument list. */ command_argv = construct_command_argv (argv[0], NULL, NULL, 0, &batch_filename); if (command_argv == 0) return o; /* Note the mktemp() is a security hole, but this only runs on Amiga. Ideally we would use get_tmpfile(), but this uses a special Open(), not fopen(), and I'm not familiar enough with the code to mess with it. */ strcpy (tmp_output, "t:MakeshXXXXXXXX"); mktemp (tmp_output); child_stdout = Open (tmp_output, MODE_NEWFILE); for (aptr=command_argv; *aptr; aptr++) len += strlen (*aptr) + 1; buffer = xmalloc (len + 1); ptr = buffer; for (aptr=command_argv; *aptr; aptr++) { strcpy (ptr, *aptr); ptr += strlen (ptr) + 1; *ptr ++ = ' '; *ptr = 0; } ptr[-1] = '\n'; Execute (buffer, NULL, child_stdout); free (buffer); Close (child_stdout); child_stdout = Open (tmp_output, MODE_OLDFILE); buffer = xmalloc (maxlen); i = 0; do { if (i == maxlen) { maxlen += 512; buffer = xrealloc (buffer, maxlen + 1); } cc = Read (child_stdout, &buffer[i], maxlen - i); if (cc > 0) i += cc; } while (cc > 0); Close (child_stdout); fold_newlines (buffer, &i, trim_newlines); o = variable_buffer_output (o, buffer, i); free (buffer); return o; } #endif /* _AMIGA */ static char * func_shell (char *o, char **argv, const char *funcname UNUSED) { return func_shell_base (o, argv, 1); } #endif /* !VMS */ #ifdef EXPERIMENTAL /* equality. Return is string-boolean, i.e., the empty string is false. */ static char * func_eq (char *o, char **argv, char *funcname UNUSED) { int result = ! strcmp (argv[0], argv[1]); o = variable_buffer_output (o, result ? "1" : "", result); return o; } /* string-boolean not operator. */ static char * func_not (char *o, char **argv, char *funcname UNUSED) { const char *s = argv[0]; int result = 0; NEXT_TOKEN (s); result = ! (*s); o = variable_buffer_output (o, result ? "1" : "", result); return o; } #endif #ifdef HAVE_DOS_PATHS # ifdef __CYGWIN__ # define IS_ABSOLUTE(n) ((n[0] && n[1] == ':') || STOP_SET (n[0], MAP_DIRSEP)) # else # define IS_ABSOLUTE(n) (n[0] && n[1] == ':') # endif # define ROOT_LEN 3 #else # define IS_ABSOLUTE(n) (n[0] == '/') # define ROOT_LEN 1 #endif /* Return the absolute name of file NAME which does not contain any '.', '..' components nor any repeated path separators ('/'). */ static char * abspath (const char *name, char *apath) { char *dest; const char *start, *end, *apath_limit; unsigned long root_len = ROOT_LEN; if (name[0] == '\0') return NULL; apath_limit = apath + GET_PATH_MAX; if (!IS_ABSOLUTE(name)) { /* It is unlikely we would make it until here but just to make sure. */ if (!starting_directory) return NULL; strcpy (apath, starting_directory); #ifdef HAVE_DOS_PATHS if (STOP_SET (name[0], MAP_DIRSEP)) { if (STOP_SET (name[1], MAP_DIRSEP)) { /* A UNC. Don't prepend a drive letter. */ apath[0] = name[0]; apath[1] = name[1]; root_len = 2; } /* We have /foo, an absolute file name except for the drive letter. Assume the missing drive letter is the current drive, which we can get if we remove from starting_directory everything past the root directory. */ apath[root_len] = '\0'; } #endif dest = strchr (apath, '\0'); } else { #if defined(__CYGWIN__) && defined(HAVE_DOS_PATHS) if (STOP_SET (name[0], MAP_DIRSEP)) root_len = 1; #endif memcpy (apath, name, root_len); apath[root_len] = '\0'; dest = apath + root_len; /* Get past the root, since we already copied it. */ name += root_len; #ifdef HAVE_DOS_PATHS if (! STOP_SET (apath[root_len - 1], MAP_DIRSEP)) { /* Convert d:foo into d:./foo and increase root_len. */ apath[2] = '.'; apath[3] = '/'; dest++; root_len++; /* strncpy above copied one character too many. */ name--; } else apath[root_len - 1] = '/'; /* make sure it's a forward slash */ #endif } for (start = end = name; *start != '\0'; start = end) { size_t len; /* Skip sequence of multiple path-separators. */ while (STOP_SET (*start, MAP_DIRSEP)) ++start; /* Find end of path component. */ for (end = start; ! STOP_SET (*end, MAP_DIRSEP|MAP_NUL); ++end) ; len = end - start; if (len == 0) break; else if (len == 1 && start[0] == '.') /* nothing */; else if (len == 2 && start[0] == '.' && start[1] == '.') { /* Back up to previous component, ignore if at root already. */ if (dest > apath + root_len) for (--dest; ! STOP_SET (dest[-1], MAP_DIRSEP); --dest) ; } else { if (! STOP_SET (dest[-1], MAP_DIRSEP)) *dest++ = '/'; if (dest + len >= apath_limit) return NULL; dest = memcpy (dest, start, len); dest += len; *dest = '\0'; } } /* Unless it is root strip trailing separator. */ if (dest > apath + root_len && STOP_SET (dest[-1], MAP_DIRSEP)) --dest; *dest = '\0'; return apath; } static char * func_realpath (char *o, char **argv, const char *funcname UNUSED) { /* Expand the argument. */ const char *p = argv[0]; const char *path = 0; int doneany = 0; size_t len = 0; while ((path = find_next_token (&p, &len)) != 0) { if (len < GET_PATH_MAX) { char *rp; struct stat st; PATH_VAR (in); PATH_VAR (out); strncpy (in, path, len); in[len] = '\0'; #ifdef HAVE_REALPATH ENULLLOOP (rp, realpath (in, out)); # if defined _AIX /* AIX realpath() doesn't remove trailing slashes correctly. */ if (rp) { char *ep = rp + strlen (rp) - 1; while (ep > rp && ep[0] == '/') *(ep--) = '\0'; } # endif #else rp = abspath (in, out); #endif if (rp) { int r; EINTRLOOP (r, stat (out, &st)); if (r == 0) { o = variable_buffer_output (o, out, strlen (out)); o = variable_buffer_output (o, " ", 1); doneany = 1; } } } } /* Kill last space. */ if (doneany) --o; return o; } static char * func_file (char *o, char **argv, const char *funcname UNUSED) { char *fn = argv[0]; if (fn[0] == '>') { FILE *fp; const char *mode = "w"; /* We are writing a file. */ ++fn; if (fn[0] == '>') { mode = "a"; ++fn; } NEXT_TOKEN (fn); if (fn[0] == '\0') O (fatal, *expanding_var, _("file: missing filename")); ENULLLOOP (fp, fopen (fn, mode)); if (fp == NULL) OSS (fatal, reading_file, _("open: %s: %s"), fn, strerror (errno)); if (argv[1]) { size_t l = strlen (argv[1]); int nl = l == 0 || argv[1][l-1] != '\n'; if (fputs (argv[1], fp) == EOF || (nl && fputc ('\n', fp) == EOF)) OSS (fatal, reading_file, _("write: %s: %s"), fn, strerror (errno)); } 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, *expanding_var, _("file: invalid file operation: %s"), fn); return o; } static char * func_abspath (char *o, char **argv, const char *funcname UNUSED) { /* Expand the argument. */ const char *p = argv[0]; const char *path = 0; int doneany = 0; size_t len = 0; while ((path = find_next_token (&p, &len)) != 0) { if (len < GET_PATH_MAX) { PATH_VAR (in); PATH_VAR (out); strncpy (in, path, len); in[len] = '\0'; if (abspath (in, out)) { o = variable_buffer_output (o, out, strlen (out)); o = variable_buffer_output (o, " ", 1); doneany = 1; } } } /* Kill last space. */ if (doneany) --o; return o; } /* Lookup table for builtin functions. This doesn't have to be sorted; we use a straight lookup. We might gain some efficiency by moving most often used functions to the start of the table. If MAXIMUM_ARGS is 0, that means there is no maximum and all comma-separated values are treated as arguments. EXPAND_ARGS means that all arguments should be expanded before invocation. Functions that do namespace tricks (foreach) don't automatically expand. */ static char *func_call (char *o, char **argv, const char *funcname); #define FT_ENTRY(_name, _min, _max, _exp, _func) \ { { (_func) }, STRING_SIZE_TUPLE(_name), (_min), (_max), (_exp), 0 } static struct function_table_entry function_table_init[] = { /* Name MIN MAX EXP? Function */ FT_ENTRY ("abspath", 0, 1, 1, func_abspath), FT_ENTRY ("addprefix", 2, 2, 1, func_addsuffix_addprefix), FT_ENTRY ("addsuffix", 2, 2, 1, func_addsuffix_addprefix), FT_ENTRY ("basename", 0, 1, 1, func_basename_dir), FT_ENTRY ("dir", 0, 1, 1, func_basename_dir), FT_ENTRY ("notdir", 0, 1, 1, func_notdir_suffix), FT_ENTRY ("subst", 3, 3, 1, func_subst), FT_ENTRY ("suffix", 0, 1, 1, func_notdir_suffix), FT_ENTRY ("filter", 2, 2, 1, func_filter_filterout), FT_ENTRY ("filter-out", 2, 2, 1, func_filter_filterout), FT_ENTRY ("findstring", 2, 2, 1, func_findstring), FT_ENTRY ("firstword", 0, 1, 1, func_firstword), FT_ENTRY ("flavor", 0, 1, 1, func_flavor), FT_ENTRY ("join", 2, 2, 1, func_join), FT_ENTRY ("lastword", 0, 1, 1, func_lastword), FT_ENTRY ("patsubst", 3, 3, 1, func_patsubst), FT_ENTRY ("realpath", 0, 1, 1, func_realpath), FT_ENTRY ("shell", 0, 1, 1, func_shell), FT_ENTRY ("sort", 0, 1, 1, func_sort), FT_ENTRY ("strip", 0, 1, 1, func_strip), FT_ENTRY ("wildcard", 0, 1, 1, func_wildcard), FT_ENTRY ("word", 2, 2, 1, func_word), FT_ENTRY ("wordlist", 3, 3, 1, func_wordlist), FT_ENTRY ("words", 0, 1, 1, func_words), FT_ENTRY ("origin", 0, 1, 1, func_origin), FT_ENTRY ("foreach", 3, 3, 0, func_foreach), FT_ENTRY ("call", 1, 0, 1, func_call), FT_ENTRY ("info", 0, 1, 1, func_error), FT_ENTRY ("error", 0, 1, 1, func_error), FT_ENTRY ("warning", 0, 1, 1, func_error), FT_ENTRY ("if", 2, 3, 0, func_if), FT_ENTRY ("or", 1, 0, 0, func_or), FT_ENTRY ("and", 1, 0, 0, func_and), FT_ENTRY ("value", 0, 1, 1, func_value), FT_ENTRY ("eval", 0, 1, 1, func_eval), FT_ENTRY ("file", 1, 2, 1, func_file), #ifdef EXPERIMENTAL FT_ENTRY ("eq", 2, 2, 1, func_eq), FT_ENTRY ("not", 0, 1, 1, func_not), #endif }; #define FUNCTION_TABLE_ENTRIES (sizeof (function_table_init) / sizeof (struct function_table_entry)) /* These must come after the definition of function_table. */ static char * expand_builtin_function (char *o, int argc, char **argv, const struct function_table_entry *entry_p) { char *p; if (argc < (int)entry_p->minimum_args) fatal (*expanding_var, strlen (entry_p->name), _("insufficient number of arguments (%d) to function '%s'"), argc, entry_p->name); /* I suppose technically some function could do something with no arguments, but so far no internal ones do, so just test it for all functions here rather than in each one. We can change it later if necessary. */ if (!argc && !entry_p->alloc_fn) return o; if (!entry_p->fptr.func_ptr) OS (fatal, *expanding_var, _("unimplemented on this platform: function '%s'"), entry_p->name); if (!entry_p->alloc_fn) return entry_p->fptr.func_ptr (o, argv, entry_p->name); /* This function allocates memory and returns it to us. Write it to the variable buffer, then free it. */ p = entry_p->fptr.alloc_func_ptr (entry_p->name, argc, argv); if (p) { o = variable_buffer_output (o, p, strlen (p)); free (p); } return o; } /* Check for a function invocation in *STRINGP. *STRINGP points at the opening ( or { and is not null-terminated. If a function invocation is found, expand it into the buffer at *OP, updating *OP, incrementing *STRINGP past the reference and returning nonzero. If not, return zero. */ int handle_function (char **op, const char **stringp) { const struct function_table_entry *entry_p; char openparen = (*stringp)[0]; char closeparen = openparen == '(' ? ')' : '}'; const char *beg; const char *end; int count = 0; char *abeg = NULL; char **argv, **argvp; int nargs; beg = *stringp + 1; entry_p = lookup_function (beg); if (!entry_p) return 0; /* We found a builtin function. Find the beginning of its arguments (skip whitespace after the name). */ 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 to get a rough estimate of how many arguments we might have. The count might be high, but it'll never be low. */ for (nargs=1, end=beg; *end != '\0'; ++end) if (!STOP_SET (*end, MAP_VARSEP|MAP_COMMA)) continue; else if (*end == ',') ++nargs; else if (*end == openparen) ++count; else if (*end == closeparen && --count < 0) break; if (count >= 0) fatal (*expanding_var, strlen (entry_p->name), _("unterminated call to function '%s': missing '%c'"), entry_p->name, closeparen); *stringp = end; /* Get some memory to store the arg pointers. */ argvp = argv = alloca (sizeof (char *) * (nargs + 2)); /* Chop the string into arguments, then a nul. As soon as we hit MAXIMUM_ARGS (if it's >0) assume the rest of the string is part of the last argument. If we're expanding, store pointers to the expansion of each one. If not, make a duplicate of the string and point into that, nul-terminating each argument. */ if (entry_p->expand_args) { const char *p; for (p=beg, nargs=0; p <= end; ++argvp) { const char *next; ++nargs; if (nargs == entry_p->maximum_args || ((next = find_next_argument (openparen, closeparen, p, end)) == NULL)) next = end; *argvp = expand_argument (p, next); p = next + 1; } } else { size_t len = end - beg; char *p, *aend; abeg = xmalloc (len+1); memcpy (abeg, beg, len); abeg[len] = '\0'; aend = abeg + len; for (p=abeg, nargs=0; p <= aend; ++argvp) { char *next; ++nargs; if (nargs == entry_p->maximum_args || ((next = find_next_argument (openparen, closeparen, p, aend)) == NULL)) next = aend; *argvp = p; *next = '\0'; p = next + 1; } } *argvp = NULL; /* Finally! Run the function... */ *op = expand_builtin_function (*op, nargs, argv, entry_p); /* Free memory. */ if (entry_p->expand_args) for (argvp=argv; *argvp != 0; ++argvp) free (*argvp); else free (abeg); return 1; } /* User-defined functions. Expand the first argument as either a builtin function or a make variable, in the context of the rest of the arguments assigned to $1, $2, ... $N. $0 is the name of the function. */ static char * func_call (char *o, char **argv, const char *funcname UNUSED) { static int max_args = 0; char *fname; char *body; size_t flen; int i; int saved_args; const struct function_table_entry *entry_p; struct variable *v; /* 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') return o; /* Are we invoking a builtin function? */ entry_p = lookup_function (fname); if (entry_p) { /* How many arguments do we have? */ for (i=0; argv[i+1]; ++i) ; return expand_builtin_function (o, i, argv+1, entry_p); } /* Not a builtin, so the first argument is the name of a variable to be expanded and interpreted as a function. Find it. */ flen = strlen (fname); v = lookup_variable (fname, flen); if (v == 0) warn_undefined (fname, flen); if (v == 0 || *v->value == '\0') return o; body = alloca (flen + 4); body[0] = '$'; body[1] = '('; memcpy (body + 2, fname, flen); body[flen+2] = ')'; body[flen+3] = '\0'; /* Set up arguments $(1) .. $(N). $(0) is the function name. */ push_new_variable_scope (); for (i=0; *argv; ++i, ++argv) { char num[11]; sprintf (num, "%d", i); define_variable (num, strlen (num), *argv, o_automatic, 0); } /* If the number of arguments we have is < max_args, it means we're inside a recursive invocation of $(call ...). Fill in the remaining arguments in the new scope with the empty value, to hide them from this invocation. */ for (; i < max_args; ++i) { char num[11]; sprintf (num, "%d", i); define_variable (num, strlen (num), "", o_automatic, 0); } /* Expand the body in the context of the arguments, adding the result to the variable buffer. */ v->exp_count = EXP_COUNT_MAX; saved_args = max_args; max_args = i; o = variable_expand_string (o, body, flen+3); max_args = saved_args; v->exp_count = 0; pop_variable_scope (); return o + strlen (o); } void define_new_function (const floc *flocp, const char *name, unsigned int min, unsigned int max, unsigned int flags, gmk_func_ptr func) { const char *e = name; struct function_table_entry *ent; size_t len; while (STOP_SET (*e, MAP_USERFUNC)) e++; len = e - name; if (len == 0) O (fatal, flocp, _("Empty function name")); if (*name == '.' || *e != '\0') OS (fatal, flocp, _("Invalid function name: %s"), name); if (len > 255) OS (fatal, flocp, _("Function name too long: %s"), name); if (min > 255) ONS (fatal, flocp, _("Invalid minimum argument count (%u) for function %s"), min, name); if (max > 255 || (max && max < min)) ONS (fatal, flocp, _("Invalid maximum argument count (%u) for function %s"), max, name); ent = xmalloc (sizeof (struct function_table_entry)); ent->name = name; ent->len = (unsigned char) len; ent->minimum_args = (unsigned char) min; ent->maximum_args = (unsigned char) max; ent->expand_args = ANY_SET(flags, GMK_FUNC_NOEXPAND) ? 0 : 1; ent->alloc_fn = 1; ent->fptr.alloc_func_ptr = func; hash_insert (&function_table, ent); } void hash_init_function_table (void) { hash_init (&function_table, FUNCTION_TABLE_ENTRIES * 2, function_table_entry_hash_1, function_table_entry_hash_2, function_table_entry_hash_cmp); hash_load (&function_table, function_table_init, FUNCTION_TABLE_ENTRIES, sizeof (struct function_table_entry)); } make-4.3/src/config.h-vms0000444000175000017500000003130513611136527012233 00000000000000/* config.h-vms. Generated by hand by Klaus Kämpf -*-C-*- Copyright (C) 1996-2020 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 . */ /* config.h. Generated automatically by configure. */ /* config.h.in. Generated automatically from configure.ac by autoheader. */ /* Pull in types.h here to get __CRTL_VER defined for old versions of the compiler which don't define it. */ #ifdef __DECC # include #endif /* Define to 1 if on AIX 3. System headers sometimes define this. We just want to avoid a redefinition error message. */ #ifndef _ALL_SOURCE /* #undef _ALL_SOURCE */ #endif /* Define to 1 if NLS is requested. */ /* #undef ENABLE_NLS */ /* Define as 1 if you have dcgettext. */ /* #undef HAVE_DCGETTEXT */ /* Define as 1 if you have gettext and don't want to use GNU gettext. */ /* #undef HAVE_GETTEXT */ /* Embed GNU Guile support */ /* #undef HAVE_GUILE */ /* Define to 1 if your locale.h file contains LC_MESSAGES. */ /* #undef HAVE_LC_MESSAGES */ /* Define to the installation directory for locales. */ #define LOCALEDIR "" /* Define as 1 if you have the stpcpy function. */ /* #undef HAVE_STPCPY */ /* Define to 1 if the closedir function returns void instead of int. */ /* #undef CLOSEDIR_VOID */ /* Define to empty if the keyword does not work. */ /* #undef const */ /* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems. This function is required for alloca.c support on those systems. */ /* #undef CRAY_STACKSEG_END */ /* Define for DGUX with . */ /* #undef DGUX */ /* Define to 1 if the 'getloadavg' function needs to be run setuid or setgid. */ /* #undef GETLOADAVG_PRIVILEGED */ /* Define to 'unsigned long' or 'unsigned long long' if doesn't define. */ #define uintmax_t unsigned long /* Define to 'int' if doesn't define. */ /* #undef gid_t */ /* Define to 1 if you have alloca, as a function or macro. */ #define HAVE_ALLOCA 1 /* Define to 1 if you have and it should be used (not on Ultrix). */ /* #undef HAVE_ALLOCA_H */ /* Define to 1 if you have the fdopen function. */ #define HAVE_FDOPEN 1 /* Define to 1 if your system has a working fnmatch function. */ /* #undef HAVE_FNMATCH */ /* Define to 1 if your system has its own 'getloadavg' function. */ /* #undef HAVE_GETLOADAVG */ /* Define to 1 if you have the getmntent function. */ /* #undef HAVE_GETMNTENT */ /* Define to 1 if the 'long double' type works. */ /* #undef HAVE_LONG_DOUBLE */ /* Define to 1 if you support file names longer than 14 characters. */ #define HAVE_LONG_FILE_NAMES 1 /* Define to 1 if you have a working 'mmap' system call. */ /* #undef HAVE_MMAP */ /* Define to 1 if system calls automatically restart after interruption by a signal. */ /* #undef HAVE_RESTARTABLE_SYSCALLS */ /* Define to 1 if your struct stat has st_blksize. */ /* #undef HAVE_ST_BLKSIZE */ /* Define to 1 if your struct stat has st_blocks. */ /* #undef HAVE_ST_BLOCKS */ /* Define to 1 if you have the strcoll function and it is properly defined. */ /* #undef HAVE_STRCOLL */ /* Define to 1 if you have the strncasecmp' function. */ #if __CRTL_VER >= 70000000 #define HAVE_STRNCASECMP 1 #endif /* Define to 1 if your struct stat has st_rdev. */ /* #undef HAVE_ST_RDEV */ /* Define to 1 if you have the strftime function. */ /* #undef HAVE_STRFTIME */ /* Define to 1 if you have that is POSIX.1 compatible. */ /* #undef HAVE_SYS_WAIT_H */ /* Define to 1 if your struct tm has tm_zone. */ /* #undef HAVE_TM_ZONE */ /* Define to 1 if you don't have tm_zone but do have the external array tzname. */ /* #undef HAVE_TZNAME */ /* Define to 1 if you have . */ #ifdef __DECC #define HAVE_UNISTD_H 1 #endif /* Define to 1 if utime(file, NULL) sets file's timestamp to the present. */ /* #undef HAVE_UTIME_NULL */ /* Define to 1 if you have the wait3 system call. */ /* #undef HAVE_WAIT3 */ /* Define to 1 if on MINIX. */ /* #undef _MINIX */ /* Define to 1 if your struct nlist has an n_un member. */ /* #undef NLIST_NAME_UNION */ /* Define to 1 if you have . */ /* #undef NLIST_STRUCT */ /* Define to 1 if your C compiler doesn't accept -c and -o together. */ /* #undef NO_MINUS_C_MINUS_O */ /* Define to 'int' if doesn't define. */ /* I assume types.h is available for all 5.0 cc/cxx compilers */ #if __DECC_VER < 50090000 #define pid_t int #endif /* Define to 1 if the system does not provide POSIX.1 features except with this defined. */ /* #undef _POSIX_1_SOURCE */ /* Define to 1 if you need to in order for stat and other things to work. */ /* #undef _POSIX_SOURCE */ /* Define as the return type of signal handlers (int or void). */ #define RETSIGTYPE void /* Define to 1 if the setvbuf function takes the buffering type as its second argument and the buffer pointer as the third, as on System V before release 3. */ /* #undef SETVBUF_REVERSED */ /* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at run-time. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ /* #undef STACK_DIRECTION */ /* Define to 1 if the 'S_IS*' macros in do not work properly. */ /* #undef STAT_MACROS_BROKEN */ /* Define to 1 if you have the ANSI C header files. */ /* #undef STDC_HEADERS */ /* Define on System V Release 4. */ /* #undef SVR4 */ /* Define to 1 if 'sys_siglist' is declared by . */ /* #undef SYS_SIGLIST_DECLARED */ /* Define to 'int' if doesn't define. */ #if __DECC_VER < 50090000 #define uid_t int #endif /* Define for Encore UMAX. */ /* #undef UMAX */ /* Define for Encore UMAX 4.3 that has instead of . */ /* #undef UMAX4_3 */ /* Name of this package (needed by automake) */ #define PACKAGE "make" /* Version of this package (needed by automake) */ #define VERSION "4.3" /* Define to the name of the SCCS 'get' command. */ /* #undef SCCS_GET */ /* Define this if the SCCS 'get' command understands the '-G' option. */ /* #undef SCCS_GET_MINUS_G */ /* Define this to enable job server support in GNU make. */ /* #undef MAKE_JOBSERVER */ /* Define to be the nanoseconds member of struct stat's st_mtim, if it exists. */ /* #undef ST_MTIM_NSEC */ /* Define to 1 if the C library defines the variable 'sys_siglist'. */ /* #undefine HAVE_SYS_SIGLIST */ /* Define to 1 if the C library defines the variable '_sys_siglist'. */ /* #undef HAVE__SYS_SIGLIST */ /* Define to 1 if you have the 'union wait' type in . */ /* #undef HAVE_UNION_WAIT */ /* Define to 1 if you have the dup2 function. */ #define HAVE_DUP2 1 /* Define to 1 if you have the getcwd function. */ #define HAVE_GETCWD 1 /* Define to 1 if you have the getgroups function. */ /* #undef HAVE_GETGROUPS */ /* Define to 1 if you have the gethostbyname function. */ /* #undef HAVE_GETHOSTBYNAME */ /* Define to 1 if you have the gethostname function. */ /* #undef HAVE_GETHOSTNAME */ /* Define to 1 if you have the memmove function. */ #define HAVE_MEMMOVE 1 /* Define to 1 if you have the mktemp function. */ #define HAVE_MKTEMP 1 /* Define to 1 if you have the psignal function. */ /* #undef HAVE_PSIGNAL */ /* Define to 1 if you have the pstat_getdynamic function. */ /* #undef HAVE_PSTAT_GETDYNAMIC */ /* Define to 1 if you have the setegid function. */ /* #undef HAVE_SETEGID */ /* Define to 1 if you have the seteuid function. */ /* #undef HAVE_SETEUID */ /* Define to 1 if you have the setlinebuf function. */ /* #undef HAVE_SETLINEBUF */ /* Define to 1 if you have the setregid function. */ /* #undefine HAVE_SETREGID */ /* Define to 1 if you have the setreuid function. */ /* #define HAVE_SETREUID */ /* Define to 1 if you have the sigsetmask function. */ #define HAVE_SIGSETMASK 1 /* Define to 1 if you have the socket function. */ /* #undef HAVE_SOCKET */ /* Define to 1 if you have the strcasecmp function. */ #define HAVE_STRCASECMP 1 /* Define to 1 if you have the strcmpi function. */ /* #undef HAVE_STRCMPI */ /* Define to 1 if you have the stricmp function. */ /* #undef HAVE_STRICMP */ /* Define to 1 if you have the strsignal function. */ /* #undef HAVE_STRSIGNAL */ /* 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 you have the header file. */ #define HAVE_DIRENT_H 1 /* Define to 1 if you have the header file. */ #ifdef __DECC #define HAVE_FCNTL_H 1 #endif /* Define to 1 if you have the header file. */ #define HAVE_LIMITS_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_MACH_MACH_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_MEMORY_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_NDIR_H */ /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_DIR_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_NDIR_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_PARAM_H */ /* Define to 1 if you have the header file. */ #ifndef __GNUC__ #define HAVE_SYS_TIMEB_H 1 #endif /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_WAIT_H */ /* Define to 1 if you have the dgc library (-ldgc). */ /* #undef HAVE_LIBDGC */ /* Define to 1 if you have the kstat library (-lkstat). */ /* #undef HAVE_LIBKSTAT * /* Define to 1 if you have the sun library (-lsun). */ /* #undef HAVE_LIBSUN */ /* Define to 1 if you have the `isatty' function. */ /* #undef HAVE_ISATTY */ /* Define to 1 if you have the `ttyname' function. */ /* #undef HAVE_TTYNAME */ /* Use high resolution file timestamps if nonzero. */ #define FILE_TIMESTAMP_HI_RES 0 /* Define for case insensitve filenames */ #define HAVE_CASE_INSENSITIVE_FS 1 /* VMS specific, define it if you want to use case sensitive targets */ /* #undef WANT_CASE_SENSITIVE_TARGETS */ /* VMS specific, V7.0 has opendir() and friends, so it's undefined */ /* If you want to use non-VMS code for opendir() etc. on V7.0 and greater define the first or both macros AND change the compile command to get the non-VMS versions linked: (prefix=(all,except=(opendir,... */ /* #undef HAVE_VMSDIR_H */ /* #undef _DIRENT_HAVE_D_NAMLEN */ /* On older systems without 7.0 backport of CRTL use non-VMS code for opendir() etc. */ #if __CRTL_VER < 70000000 # define HAVE_VMSDIR_H 1 #endif #if defined(HAVE_VMSDIR_H) && defined(HAVE_DIRENT_H) #undef HAVE_DIRENT_H #endif #define HAVE_STDLIB_H 1 #define INCLUDEDIR "sys$sysroot:[syslib]" #define LIBDIR "sys$sysroot:[syslib]" /* Don't use RTL functions of OpenVMS */ #ifdef __DECC #include #include #define getopt gnu_getopt #define optarg gnu_optarg #define optopt gnu_optopt #define optind gnu_optind #define opterr gnu_opterr #define globfree gnu_globfree #define glob gnu_glob #endif /* Define if using alloca.c. */ /* #undef C_ALLOCA */ /* maybe this should be placed into makeint.h */ #if defined(__VAX) && defined(__DECC) #define alloca(n) __ALLOCA(n) #endif /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ /* # undef WORDS_BIGENDIAN */ /* Output sync sypport */ #define NO_OUTPUT_SYNC /* Define to 1 to write even short single-line actions into a VMS/DCL command file; this also enables exporting make environment variables into the (sub-)process, which executes the action. The usual make rules apply whether a shell variable - here a DCL symbol or VMS logical [see CRTL getenv()] - is added to the make environment and is exported. */ #define USE_DCL_COM_FILE 1 /* Build host information. */ #define MAKE_HOST "VMS" make-4.3/src/guile.c0000644000175000017500000000764713603564437011307 00000000000000/* GNU Guile interface for GNU Make. Copyright (C) 2011-2020 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 . */ #include "makeint.h" #ifdef HAVE_GUILE #include "gnumake.h" #include "debug.h" #include "filedef.h" #include "dep.h" #include "variable.h" #include /* Pre-2.0 versions of Guile don't have a typedef for gsubr function types. */ #if SCM_MAJOR_VERSION < 2 # define GSUBR_TYPE SCM (*) () /* Guile 1.x doesn't really support i18n. */ # define EVAL_STRING(_s) scm_c_eval_string (_s) #else # define GSUBR_TYPE scm_t_subr # define EVAL_STRING(_s) scm_eval_string (scm_from_utf8_string (_s)) #endif static SCM make_mod = SCM_EOL; static SCM obj_to_str = SCM_EOL; /* Convert an SCM object into a string. */ static char * cvt_scm_to_str (SCM obj) { return scm_to_locale_string (scm_call_1 (obj_to_str, obj)); } /* Perform the GNU make expansion function. */ static SCM guile_expand_wrapper (SCM obj) { char *str = cvt_scm_to_str (obj); SCM ret; char *res; DB (DB_BASIC, (_("guile: Expanding '%s'\n"), str)); res = gmk_expand (str); ret = scm_from_locale_string (res); free (str); free (res); return ret; } /* Perform the GNU make eval function. */ static SCM guile_eval_wrapper (SCM obj) { char *str = cvt_scm_to_str (obj); DB (DB_BASIC, (_("guile: Evaluating '%s'\n"), str)); gmk_eval (str, 0); return SCM_BOOL_F; } /* Invoked by scm_c_define_module(), in the context of the GNU make module. */ static void guile_define_module (void *data UNUSED) { /* Ingest the predefined Guile module for GNU make. */ #include "gmk-default.h" /* Register a subr for GNU make's eval capability. */ scm_c_define_gsubr ("gmk-expand", 1, 0, 0, (GSUBR_TYPE) guile_expand_wrapper); /* Register a subr for GNU make's eval capability. */ scm_c_define_gsubr ("gmk-eval", 1, 0, 0, (GSUBR_TYPE) guile_eval_wrapper); /* Define the rest of the module. */ scm_c_eval_string (GUILE_module_defn); } /* Initialize the GNU make Guile module. */ static void * guile_init (void *arg UNUSED) { /* Define the module. */ make_mod = scm_c_define_module ("gnu make", guile_define_module, NULL); /* Get a reference to the object-to-string translator, for later. */ obj_to_str = scm_variable_ref (scm_c_module_lookup (make_mod, "obj-to-str")); /* Import the GNU make module exports into the generic space. */ scm_c_eval_string ("(use-modules (gnu make))"); return NULL; } static void * internal_guile_eval (void *arg) { return cvt_scm_to_str (EVAL_STRING (arg)); } /* This is the function registered with make */ static char * func_guile (const char *funcname UNUSED, unsigned int argc UNUSED, char **argv) { static int init = 0; if (! init) { /* Initialize the Guile interpreter. */ scm_with_guile (guile_init, NULL); init = 1; } if (argv[0] && argv[0][0] != '\0') return scm_with_guile (internal_guile_eval, argv[0]); return NULL; } /* ----- Public interface ----- */ /* 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 floc *flocp UNUSED) { /* Create a make function "guile". */ gmk_add_function ("guile", func_guile, 0, 1, GMK_FUNC_DEFAULT); return 1; } #else int guile_gmake_setup (const floc *flocp UNUSED) { return 1; } #endif make-4.3/src/vmsify.c0000644000175000017500000004430513603564437011507 00000000000000/* vmsify.c -- Module for vms <-> unix file name conversion Copyright (C) 1996-2020 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 . */ /* Written by Klaus Kämpf (kkaempf@progis.de) of proGIS Software, Aachen, Germany */ #include #include #include #include "makeint.h" #if VMS #include #include #include #include #include #include #include #include /* Initialize a string descriptor (struct dsc$descriptor_s) for an arbitrary string. ADDR is a pointer to the first character of the string, and LEN is the length of the string. */ #define INIT_DSC_S(dsc, addr, len) do { \ (dsc).dsc$b_dtype = DSC$K_DTYPE_T; \ (dsc).dsc$b_class = DSC$K_CLASS_S; \ (dsc).dsc$w_length = (len); \ (dsc).dsc$a_pointer = (addr); \ } while (0) /* Initialize a string descriptor (struct dsc$descriptor_s) for a NUL-terminated string. S is a pointer to the string; the length is determined by calling strlen(). */ #define INIT_DSC_CSTRING(dsc, s) INIT_DSC_S(dsc, s, strlen(s)) #endif /* copy 'from' to 'to' up to but not including 'upto' return 0 if eos on from return 1 if upto found return 'to' at last char + 1 return 'from' at match + 1 or eos if no match if as_dir == 1, change all '.' to '_' else change all '.' but the last to '_' */ static int copyto (char **to, const char **from, char upto, int as_dir) { const char *s; s = strrchr (*from, '.'); while (**from) { if (**from == upto) { do { (*from)++; } while (**from == upto); return 1; } if (**from == '.') { if ((as_dir == 1) || (*from != s)) **to = '_'; else **to = '.'; } else { #ifdef HAVE_CASE_INSENSITIVE_FS if (isupper ((unsigned char)**from)) **to = tolower ((unsigned char)**from); else #endif **to = **from; } (*to)++; (*from)++; } return 0; } /* get translation of logical name */ static char * trnlog (const char *name) { int stat; static char reslt[1024]; $DESCRIPTOR (reslt_dsc, reslt); short resltlen; struct dsc$descriptor_s name_dsc; char *s; /* * the string isn't changed, but there is no string descriptor with * "const char *dsc$a_pointer" */ INIT_DSC_CSTRING (name_dsc, (char *)name); stat = lib$sys_trnlog (&name_dsc, &resltlen, &reslt_dsc); if ((stat&1) == 0) { return ""; } if (stat == SS$_NOTRAN) { return ""; } reslt[resltlen] = '\0'; s = xmalloc (resltlen+1); strcpy (s, reslt); return s; } static char * showall (char *s) { static char t[512]; char *pt; pt = t; if (strchr (s, '\\') == 0) return s; while (*s) { if (*s == '\\') { *pt++ = *s; } *pt++ = *s++; } return pt; } enum namestate { N_START, N_DEVICE, N_OPEN, N_DOT, N_CLOSED, N_DONE }; /* convert unix style name to vms style type = 0 -> name is a full name (directory and filename part) type = 1 -> name is a directory type = 2 -> name is a filename without directory The following conversions are applied (0) (1) (2) input full name dir name file name 1 ./ [] .dir 2 ../ .dir 3 // : :[000000] :000000.dir 4 //a a: a: a: 5 //a/ a: a: a:000000.dir 9 / [000000] [000000] 000000.dir 10 /a [000000]a [a] [000000]a 11 /a/ [a] [a] [000000]a.dir 12 /a/b [a]b [a.b] [a]b 13 /a/b/ [a.b] [a.b] [a]b.dir 14 /a/b/c [a.b]c [a.b.c] [a.b]c 15 /a/b/c/ [a.b.c] [a.b.c] [a.b]c.dir 16 a a [.a] a 17 a/ [.a] [.a] a.dir 18 a/b [.a]b [.a.b] [.a]b 19 a/b/ [.a.b] [.a.b] [.a]b.dir 20 a/b/c [.a.b]c [.a.b.c] [.a.b]c 21 a/b/c/ [.a.b.c] [.a.b.c] [.a.b]c.dir 22 a.b.c a_b.c [.a_b_c] a_b_c.dir 23 [x][y]z [x.y]z [x.y]z [x.y]z 24 [x][.y]z [x.y]z [x.y]z [x.y]z 25 filenames with '$' are left unchanged if they contain no '/' 25 filenames with ':' are left unchanged 26 filenames with a single pair of '[' ']' are left unchanged The input string is not written to. The result is also const because it's a static buffer; we don't want to change it. */ const char * vmsify (const char *name, int type) { /* max 255 device max 39 directory max 39 filename max 39 filetype max 5 version */ /* todo: VMSMAXPATHLEN is defined for ODS2 names: it needs to be adjusted. */ #define VMSMAXPATHLEN 512 enum namestate nstate; static char vmsname[VMSMAXPATHLEN+1]; const char *fptr; const char *t; char *vptr; int as_dir; int count; const char *s; const char *s1; const char *s2; if (name == 0) return 0; fptr = name; vptr = vmsname; nstate = N_START; /* case 25a */ t = strpbrk (name, "$:"); if (t != 0) { // const char *s1; // const char *s2; if (type == 1) { s1 = strchr (t+1, '['); s2 = strchr (t+1, ']'); } if (*t == '$') { if (strchr (name, '/') == 0) { strcpy (vmsname, name); if ((type == 1) && (s1 != 0) && (s2 == 0)) strcat (vmsname, "]"); return vmsname; } } else { strcpy (vmsname, name); if ((type == 1) && (s1 != 0) && (s2 == 0)) strcat (vmsname, "]"); return vmsname; } } /* case 26 */ t = strchr (name, '['); if (t != 0) { // const char *s; // const char *s1 = strchr (t+1, '['); s1 = strchr (t+1, '['); if (s1 == 0) { strcpy (vmsname, name); if ((type == 1) && (strchr (t+1, ']') == 0)) strcat (vmsname, "]"); return vmsname; } s1--; if (*s1 != ']') { strcpy (vmsname, name); return vmsname; /* not ][, keep unchanged */ } /* we have ][ */ s = name; /* s -> starting char s1 -> ending ']' */ do { strncpy (vptr, s, s1-s); /* copy up to but not including ']' */ vptr += s1-s; if (*s1 == 0) break; s = s1 + 1; /* s -> char behind ']' */ if (*s != '[') /* was '][' ? */ break; /* no, last ] found, exit */ s++; if (*s != '.') *vptr++ = '.'; s1 = strchr (s, ']'); if (s1 == 0) /* no closing ] */ s1 = s + strlen (s); } while (1); *vptr++ = ']'; fptr = s; } else /* no [ in name */ { int state = 0; int rooted = 1; /* flag if logical is rooted, else insert [000000] */ do { switch (state) { case 0: /* start of loop */ if (*fptr == '/') { fptr++; state = 1; } else if (*fptr == '.') { fptr++; state = 10; } else state = 2; break; case 1: /* '/' at start */ if (*fptr == '/') { fptr++; state = 3; } else state = 4; break; case 2: /* no '/' at start */ { const char *s = strchr (fptr, '/'); if (s == 0) /* no '/' (16) */ { if (type == 1) { strcpy (vptr, "[."); vptr += 2; } copyto (&vptr, &fptr, 0, (type==1)); if (type == 1) *vptr++ = ']'; state = -1; } else /* found '/' (17..21) */ { if ((type == 2) && (*(s+1) == 0)) /* 17(2) */ { copyto (&vptr, &fptr, '/', 1); state = 7; } else { strcpy (vptr, "[."); vptr += 2; copyto (&vptr, &fptr, '/', 1); nstate = N_OPEN; state = 9; } } break; } case 3: /* '//' at start */ { // const char *s; // const char *s1; char *vp; while (*fptr == '/') /* collapse all '/' */ fptr++; if (*fptr == 0) /* just // */ { char cwdbuf[VMSMAXPATHLEN+1]; s1 = getcwd(cwdbuf, VMSMAXPATHLEN); if (s1 == 0) { vmsname[0] = '\0'; return vmsname; /* FIXME, err getcwd */ } s = strchr (s1, ':'); if (s == 0) { vmsname[0] = '\0'; return vmsname; /* FIXME, err no device */ } strncpy (vptr, s1, s-s1+1); vptr += s-s1+1; state = -1; break; } s = vptr; if (copyto (&vptr, &fptr, '/', 1) == 0) /* copy device part */ { *vptr++ = ':'; state = -1; break; } *vptr = ':'; nstate = N_DEVICE; if (*fptr == 0) /* just '//a/' */ { strcpy (vptr+1, "[000000]"); vptr += 9; state = -1; break; } *vptr = 0; /* check logical for [000000] insertion */ vp = trnlog (s); if (*vp != '\0') { /* found translation */ for (;;) /* loop over all nested logicals */ { char *vp2 = vp + strlen (vp) - 1; if (*vp2 == ':') /* translation ends in ':' */ { vp2 = trnlog (vp); free (vp); if (*vp2 == 0) { rooted = 0; break; } vp = vp2; continue; /* next iteration */ } if (*vp2 == ']') /* translation ends in ']' */ { if (*(vp2-1) == '.') /* ends in '.]' */ { if (strncmp (fptr, "000000", 6) != 0) rooted = 0; } else { strcpy (vmsname, s1); vp = strchr (vmsname, ']'); *vp = '.'; nstate = N_DOT; vptr = vp; } } break; } free (vp); } else rooted = 0; if (*vptr == 0) { nstate = N_DEVICE; *vptr++ = ':'; } else vptr++; if (rooted == 0) { nstate = N_DOT; strcpy (vptr, "[000000."); vptr += 8; vp = vptr-1; } else vp = 0; /* vp-> '.' after 000000 or NULL */ s = strchr (fptr, '/'); if (s == 0) { /* no next '/' */ if (*(vptr-1) == '.') *(vptr-1) = ']'; else if (rooted == 0) *vptr++ = ']'; copyto (&vptr, &fptr, 0, (type == 1)); state = -1; break; } else { while (*(s+1) == '/') /* skip multiple '/' */ s++; } if ((rooted != 0) && (*(vptr-1) != '.')) { *vptr++ = '['; nstate = N_DOT; } else if ((nstate == N_DOT) && (vp != 0) && (*(s+1) == 0)) { if (type == 2) { *vp = ']'; nstate = N_CLOSED; } } state = 9; break; } case 4: /* single '/' at start (9..15) */ if (*fptr == 0) state = 5; else state = 6; break; case 5: /* just '/' at start (9) */ if (type != 2) { *vptr++ = '['; nstate = N_OPEN; } strcpy (vptr, "000000"); vptr += 6; if (type == 2) state = 7; else state = 8; break; case 6: /* chars following '/' at start 10..15 */ { const char *s; *vptr++ = '['; nstate = N_OPEN; s = strchr (fptr, '/'); if (s == 0) /* 10 */ { if (type != 1) { strcpy (vptr, "000000]"); vptr += 7; } copyto (&vptr, &fptr, 0, (type == 1)); if (type == 1) { *vptr++ = ']'; } state = -1; } else /* 11..15 */ { if ( (type == 2) && (*(s+1) == 0)) /* 11(2) */ { strcpy (vptr, "000000]"); nstate = N_CLOSED; vptr += 7; } copyto (&vptr, &fptr, '/', (*(vptr-1) != ']')); state = 9; } break; } case 7: /* add '.dir' and exit */ if ((nstate == N_OPEN) || (nstate == N_DOT)) { char *vp = vptr-1; while (vp > vmsname) { if (*vp == ']') { break; } if (*vp == '.') { *vp = ']'; break; } vp--; } } strcpy (vptr, ".dir"); vptr += 4; state = -1; break; case 8: /* add ']' and exit */ *vptr++ = ']'; state = -1; break; case 9: /* 17..21, fptr -> 1st '/' + 1 */ { const char *s; if (*fptr == 0) { if (type == 2) { state = 7; } else state = 8; break; } s = strchr (fptr, '/'); if (s == 0) { if (type != 1) { if (nstate == N_OPEN) { *vptr++ = ']'; nstate = N_CLOSED; } as_dir = 0; } else { if (nstate == N_OPEN) { *vptr++ = '.'; nstate = N_DOT; } as_dir = 1; } } else { while (*(s+1) == '/') s++; if ( (type == 2) && (*(s+1) == 0)) /* 19(2), 21(2)*/ { if (nstate != N_CLOSED) { *vptr++ = ']'; nstate = N_CLOSED; } as_dir = 1; } else { if (nstate == N_OPEN) { *vptr++ = '.'; nstate = N_DOT; } as_dir = 1; } } if ( (*fptr == '.') /* check for '..' or '../' */ && (*(fptr+1) == '.') && ((*(fptr+2) == '/') || (*(fptr+2) == 0)) ) { char *vp; fptr += 2; if (*fptr == '/') { do { fptr++; } while (*fptr == '/'); } else if (*fptr == 0) type = 1; vptr--; /* vptr -> '.' or ']' */ vp = vptr; for (;;) { vp--; if (*vp == '.') /* one back */ { vptr = vp; nstate = N_OPEN; break; } if (*vp == '[') /* top level reached */ { if (*fptr == 0) { strcpy (vp, "[000000]"); vptr = vp + 8; nstate = N_CLOSED; s = 0; break; } else { vptr = vp+1; nstate = N_OPEN; break; } } } } else { copyto (&vptr, &fptr, '/', as_dir); if (nstate == N_DOT) nstate = N_OPEN; } if (s == 0) { /* 18,20 */ if (type == 1) *vptr++ = ']'; state = -1; } else { if (*(s+1) == 0) { if (type == 2) /* 19,21 */ { state = 7; } else { *vptr++ = ']'; state = -1; } } } break; } case 10: /* 1,2 first is '.' */ if (*fptr == '.') { fptr++; state = 11; } else state = 12; break; case 11: /* 2, '..' at start */ count = 1; if (*fptr != 0) { if (*fptr != '/') /* got ..xxx */ { strcpy (vmsname, name); return vmsname; } do /* got ../ */ { fptr++; while (*fptr == '/') fptr++; if (*fptr != '.') break; if (*(fptr+1) != '.') break; fptr += 2; if ((*fptr == 0) || (*fptr == '/')) count++; } while (*fptr == '/'); } { /* got '..' or '../' */ char *vp; char cwdbuf[VMSMAXPATHLEN+1]; vp = getcwd(cwdbuf, VMSMAXPATHLEN); if (vp == 0) { vmsname[0] = '\0'; return vmsname; /* FIXME, err getcwd */ } strcpy (vptr, vp); vp = strchr (vptr, ']'); if (vp != 0) { nstate = N_OPEN; while (vp > vptr) { vp--; if (*vp == '[') { vp++; strcpy (vp, "000000]"); state = -1; break; } else if (*vp == '.') { if (--count == 0) { if (*fptr == 0) /* had '..' or '../' */ { *vp++ = ']'; state = -1; } else /* had '../xxx' */ { state = 9; } *vp = '\0'; break; } } } } vptr += strlen (vptr); } break; case 12: /* 1, '.' at start */ if (*fptr != 0) { if (*fptr != '/') { strcpy (vmsname, name); return vmsname; } while (*fptr == '/') fptr++; } { char *vp; char cwdbuf[VMSMAXPATHLEN+1]; vp = getcwd(cwdbuf, VMSMAXPATHLEN); if (vp == 0) { vmsname[0] = '\0'; return vmsname; /*FIXME, err getcwd */ } strcpy (vptr, vp); } if (*fptr == 0) { state = -1; break; } else { char *vp = strchr (vptr, ']'); if (vp == 0) { state = -1; break; } *vp = '\0'; nstate = N_OPEN; vptr += strlen (vptr); state = 9; } break; } } while (state > 0); } /* directory conversion done fptr -> filename part of input string vptr -> free space in vmsname */ *vptr++ = 0; return vmsname; } /* convert from vms-style to unix-style dev:[dir1.dir2] //dev/dir1/dir2/ */ const char * unixify (const char *name) { static char piece[512]; const char *s; char *p; if (strchr (name, '/') != 0) /* already in unix style */ { strcpy (piece, name); return piece; } p = piece; *p = 0; /* device part */ s = strchr (name, ':'); if (s != 0) { int l = s - name; *p++ = '/'; *p++ = '/'; strncpy (p, name, l); p += l; } /* directory part */ *p++ = '/'; s = strchr (name, '['); if (s != 0) { s++; switch (*s) { case ']': /* [] */ strcat (p, "./"); break; case '-': /* [- */ strcat (p, "../"); break; case '.': strcat (p, "./"); /* [. */ break; default: s--; break; } s++; while (*s) { if (*s == '.') *p++ = '/'; else *p++ = *s; s++; if (*s == ']') { s++; break; } } if (*s != 0) /* more after ']' ?? */ { if (*(p-1) != '/') *p++ = '/'; strcpy (p, s); /* copy it anyway */ } } else /* no '[' anywhere */ { *p++ = 0; } /* force end with '/' */ if (*(p-1) != '/') *p++ = '/'; *p = 0; return piece; } /* EOF */ make-4.3/src/ar.c0000644000175000017500000002043313603564437010570 00000000000000/* Interface to 'ar' archives for GNU Make. Copyright (C) 1988-2020 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 . */ #include "makeint.h" #ifndef NO_ARCHIVES #include "filedef.h" #include "dep.h" #include /* Return nonzero if NAME is an archive-member reference, zero if not. An archive-member reference is a name like 'lib(member)' where member is a non-empty string. If a name like 'lib((entry))' is used, a fatal error is signaled at the attempt to use this unsupported feature. */ int ar_name (const char *name) { const char *p = strchr (name, '('); const char *end; if (p == 0 || p == name) return 0; end = p + strlen (p) - 1; if (*end != ')' || end == p + 1) return 0; if (p[1] == '(' && end[-1] == ')') OS (fatal, NILF, _("attempt to use unsupported feature: '%s'"), name); return 1; } /* Parse the archive-member reference NAME into the archive and member names. Creates one allocated string containing both names, pointed to by ARNAME_P. MEMNAME_P points to the member. */ void ar_parse_name (const char *name, char **arname_p, char **memname_p) { char *p; *arname_p = xstrdup (name); p = strchr (*arname_p, '('); *(p++) = '\0'; p[strlen (p) - 1] = '\0'; *memname_p = p; } /* This function is called by 'ar_scan' to find which member to look at. */ /* ARGSUSED */ 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, unsigned int mode UNUSED, const void *name) { return ar_name_equal (name, mem, truncated) ? date : 0; } /* Return the modtime of NAME. */ time_t ar_member_date (const char *name) { char *arname; char *memname; long int val; ar_parse_name (name, &arname, &memname); /* Make sure we know the modtime of the archive itself because we are likely to be called just before commands to remake a member are run, and they will change the archive itself. But we must be careful not to enter_file the archive itself if it does not exist, because pattern_search assumes that files found in the data base exist or can be made. */ { struct file *arfile; arfile = lookup_file (arname); if (arfile == 0 && file_exists_p (arname)) arfile = enter_file (strcache_add (arname)); if (arfile != 0) (void) f_mtime (arfile, 0); } val = ar_scan (arname, ar_member_date_1, memname); free (arname); return (val <= 0 ? (time_t) -1 : (time_t) val); } /* Set the archive-member NAME's modtime to now. */ #ifdef VMS int ar_touch (const char *name) { O (error, NILF, _("touch archive member is not available on VMS")); return -1; } #else int ar_touch (const char *name) { char *arname, *memname; int val; ar_parse_name (name, &arname, &memname); /* Make sure we know the modtime of the archive itself before we touch the member, since this will change the archive modtime. */ { struct file *arfile; arfile = enter_file (strcache_add (arname)); f_mtime (arfile, 0); } val = 1; switch (ar_member_touch (arname, memname)) { case -1: OS (error, NILF, _("touch: Archive '%s' does not exist"), arname); break; case -2: OS (error, NILF, _("touch: '%s' is not a valid archive"), arname); break; case -3: perror_with_name ("touch: ", arname); break; case 1: OSS (error, NILF, _("touch: Member '%s' does not exist in '%s'"), memname, arname); break; case 0: val = 0; break; default: OS (error, NILF, _("touch: Bad return code from ar_member_touch on '%s'"), name); } free (arname); return val; } #endif /* !VMS */ /* State of an 'ar_glob' run, passed to 'ar_glob_match'. */ /* On VMS, (object) modules in libraries do not have suffixes. That is, to find a match for a pattern, the pattern must not have any suffix. So the suffix of the pattern is saved and the pattern is stripped (ar_glob). If there is a match and the match, which is a module name, is added to the chain, the saved suffix is added back to construct a source filename (ar_glob_match). */ struct ar_glob_state { const char *arname; const char *pattern; #ifdef VMS char *suffix; #endif size_t size; struct nameseq *chain; unsigned int n; }; /* This function is called by 'ar_scan' to match one archive element against the pattern in STATE. */ 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, unsigned int mode UNUSED, const void *arg) { struct ar_glob_state *state = (struct ar_glob_state *)arg; if (fnmatch (state->pattern, mem, FNM_PATHNAME|FNM_PERIOD) == 0) { /* We have a match. Add it to the chain. */ struct nameseq *new = xcalloc (state->size); #ifdef VMS if (state->suffix) new->name = strcache_add( concat(5, state->arname, "(", mem, state->suffix, ")")); else #endif new->name = strcache_add(concat(4, state->arname, "(", mem, ")")); new->next = state->chain; state->chain = new; ++state->n; } return 0L; } /* Return nonzero if PATTERN contains any metacharacters. Metacharacters can be quoted with backslashes if QUOTE is nonzero. */ static int ar_glob_pattern_p (const char *pattern, int quote) { const char *p; int opened = 0; for (p = pattern; *p != '\0'; ++p) switch (*p) { case '?': case '*': return 1; case '\\': if (quote) ++p; break; case '[': opened = 1; break; case ']': if (opened) return 1; break; } return 0; } /* Glob for MEMBER_PATTERN in archive ARNAME. Return a malloc'd chain of matching elements (or nil if none). */ struct nameseq * ar_glob (const char *arname, const char *member_pattern, size_t size) { struct ar_glob_state state; struct nameseq *n; const char **names; unsigned int i; #ifdef VMS char *vms_member_pattern; #endif if (! ar_glob_pattern_p (member_pattern, 1)) return 0; /* Scan the archive for matches. ar_glob_match will accumulate them in STATE.chain. */ state.arname = arname; state.pattern = member_pattern; #ifdef VMS { /* In a copy of the pattern, find the suffix, save it and remove it from the pattern */ char *lastdot; vms_member_pattern = xstrdup(member_pattern); lastdot = strrchr(vms_member_pattern, '.'); state.suffix = lastdot; if (lastdot) { state.suffix = xstrdup(lastdot); *lastdot = 0; } state.pattern = vms_member_pattern; } #endif state.size = size; state.chain = 0; state.n = 0; ar_scan (arname, ar_glob_match, &state); #ifdef VMS /* Deallocate any duplicated string */ free(vms_member_pattern); if (state.suffix) { free(state.suffix); } #endif if (state.chain == 0) return 0; /* Now put the names into a vector for sorting. */ names = alloca (state.n * sizeof (const char *)); i = 0; for (n = state.chain; n != 0; n = n->next) names[i++] = n->name; /* Sort them alphabetically. */ /* MSVC erroneously warns without a cast here. */ qsort ((void *)names, i, sizeof (*names), alpha_compare); /* Put them back into the chain in the sorted order. */ i = 0; for (n = state.chain; n != 0; n = n->next) n->name = names[i++]; return state.chain; } #endif /* Not NO_ARCHIVES. */ make-4.3/src/getopt.c0000644000175000017500000007176313603564437011504 00000000000000/* Getopt for GNU. 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-2020 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. 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 . */ /* This tells Alpha OSF/1 not to define a getopt prototype in . Ditto for AIX 3.2 and . */ #ifndef _NO_PROTO # define _NO_PROTO #endif #ifdef HAVE_CONFIG_H # include #endif #if !defined __STDC__ || !__STDC__ /* This is a separate conditional since some stdc systems reject `defined (const)'. */ # ifndef const # define const # endif #endif #include /* Comment out all this code if we are using the GNU C Library, and are not actually compiling the library itself. This code is part of the GNU C Library, but also included in many other GNU distributions. Compiling and linking in this code is a waste when using the GNU C library (especially if it is a shared library). Rather than having every GNU program understand `configure --with-gnu-libc' and omit the object files, it is simpler to just do this in the source for each such file. */ #define GETOPT_INTERFACE_VERSION 2 #if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2 # include # if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION # define ELIDE_CODE # endif #endif #ifndef ELIDE_CODE /* This needs to come after some library #include to get __GNU_LIBRARY__ defined. */ #ifdef __GNU_LIBRARY__ /* Don't include stdlib.h for non-GNU C libraries because some of them contain conflicting prototypes for getopt. */ # include # include #endif /* GNU C library. */ #ifdef VMS # include # if HAVE_STRING_H - 0 # include # endif #endif /* This is for other GNU distributions with internationalized messages. When compiling libc, the _ macro is predefined. */ #include "gettext.h" #define _(msgid) gettext (msgid) /* This version of `getopt' appears to the caller like standard Unix 'getopt' but it behaves differently for the user, since it allows the user to intersperse the options with the other arguments. As `getopt' works, it permutes the elements of ARGV so that, when it is done, all the options precede everything else. Thus all application programs are extended to handle flexible argument order. Setting the environment variable POSIXLY_CORRECT disables permutation. Then the behavior is completely standard. GNU application programs can use a third alternative mode in which they can distinguish the relative order of options and other arguments. */ #include "getopt.h" /* For communication from `getopt' to the caller. When `getopt' finds an option that takes an argument, the argument value is returned here. Also, when `ordering' is RETURN_IN_ORDER, each non-option ARGV-element is returned here. */ char *optarg = NULL; /* Index in ARGV of the next element to be scanned. This is used for communication to and from the caller and for communication between successive calls to `getopt'. On entry to `getopt', zero means this is the first call; initialize. When `getopt' returns -1, this is the index of the first of the non-option elements that the caller should itself scan. Otherwise, `optind' communicates from one call to the next how much of ARGV has been scanned so far. */ /* 1003.2 says this must be 1 before any call. */ int optind = 1; /* Formerly, initialization of getopt depended on optind==0, which causes problems with re-calling getopt as programs generally don't know that. */ int __getopt_initialized = 0; /* The next char to be scanned in the option-element in which the last option character we returned was found. This allows us to pick up the scan where we left off. If this is zero, or a null string, it means resume the scan by advancing to the next ARGV-element. */ static char *nextchar; /* Callers store zero here to inhibit the error message for unrecognized options. */ int opterr = 1; /* Set to an option character which was unrecognized. This must be initialized on some systems to avoid linking in the system's own getopt implementation. */ int optopt = '?'; /* Describe how to deal with options that follow non-option ARGV-elements. If the caller did not specify anything, the default is REQUIRE_ORDER if the environment variable POSIXLY_CORRECT is defined, PERMUTE otherwise. REQUIRE_ORDER means don't recognize them as options; stop option processing when the first non-option is seen. This is what Unix does. This mode of operation is selected by either setting the environment variable POSIXLY_CORRECT, or using `+' as the first character of the list of option characters. PERMUTE is the default. We permute the contents of ARGV as we scan, so that eventually all the non-options are at the end. This allows options to be given in any order, even with programs that were not written to expect this. RETURN_IN_ORDER is an option available to programs that were written to expect options and other ARGV-elements in any order and that care about the ordering of the two. We describe each non-option ARGV-element as if it were the argument of an option with character code 1. Using `-' as the first character of the list of option characters selects this mode of operation. The special argument `--' forces an end of option-scanning regardless of the value of `ordering'. In the case of RETURN_IN_ORDER, only `--' can cause `getopt' to return -1 with `optind' != ARGC. */ static enum { REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER } ordering; /* Value of POSIXLY_CORRECT environment variable. */ static char *posixly_correct; #ifdef __GNU_LIBRARY__ /* We want to avoid inclusion of string.h with non-GNU libraries because there are many ways it can cause trouble. On some systems, it contains special magic macros that don't work in GCC. */ # include # define my_index strchr #else # if HAVE_STRING_H # include # else # include # endif /* Avoid depending on library functions or files whose names are inconsistent. */ #ifndef getenv extern char *getenv (); #endif static char * my_index (const char *str, int chr) { while (*str) { if (*str == chr) return (char *) str; str++; } return 0; } /* If using GCC, we can safely declare strlen this way. If not using GCC, it is ok not to declare it. */ #ifdef __GNUC__ /* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h. That was relevant to code that was here before. */ # if (!defined __STDC__ || !__STDC__) && !defined strlen /* gcc with -traditional declares the built-in strlen to return int, and has done so at least since version 2.4.5. -- rms. */ extern int strlen (const char *); # endif /* not __STDC__ */ #endif /* __GNUC__ */ #endif /* not __GNU_LIBRARY__ */ /* Handle permutation of arguments. */ /* Describe the part of ARGV that contains non-options that have been skipped. `first_nonopt' is the index in ARGV of the first of them; `last_nonopt' is the index after the last of them. */ static int first_nonopt; static int last_nonopt; #ifdef _LIBC /* Bash 2.0 gives us an environment variable containing flags indicating ARGV elements that should not be considered arguments. */ /* Defined in getopt_init.c */ extern char *__getopt_nonoption_flags; static int nonoption_flags_max_len; static int nonoption_flags_len; static int original_argc; static char *const *original_argv; /* Make sure the environment variable bash 2.0 puts in the environment is valid for the getopt call we must make sure that the ARGV passed to getopt is that one passed to the process. */ static void __attribute__ ((unused)) store_args_and_env (int argc, char *const *argv) { /* XXX This is no good solution. We should rather copy the args so that we can compare them later. But we must not use malloc(3). */ original_argc = argc; original_argv = argv; } # ifdef text_set_element text_set_element (__libc_subinit, store_args_and_env); # endif /* text_set_element */ # define SWAP_FLAGS(ch1, ch2) \ if (nonoption_flags_len > 0) \ { \ char __tmp = __getopt_nonoption_flags[ch1]; \ __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2]; \ __getopt_nonoption_flags[ch2] = __tmp; \ } #else /* !_LIBC */ # define SWAP_FLAGS(ch1, ch2) #endif /* _LIBC */ /* Exchange two adjacent subsequences of ARGV. One subsequence is elements [first_nonopt,last_nonopt) which contains all the non-options that have been skipped so far. The other is elements [last_nonopt,optind), which contains all the options processed since those non-options were skipped. `first_nonopt' and `last_nonopt' are relocated so that they describe the new indices of the non-options in ARGV after they are moved. */ #if defined __STDC__ && __STDC__ static void exchange (char **); #endif static void exchange (char **argv) { int bottom = first_nonopt; int middle = last_nonopt; int top = optind; char *tem; /* Exchange the shorter segment with the far end of the longer segment. That puts the shorter segment into the right place. It leaves the longer segment in the right place overall, but it consists of two parts that need to be swapped next. */ #ifdef _LIBC /* First make sure the handling of the `__getopt_nonoption_flags' string can work normally. Our top argument must be in the range of the string. */ if (nonoption_flags_len > 0 && top >= nonoption_flags_max_len) { /* We must extend the array. The user plays games with us and presents new arguments. */ char *new_str = malloc (top + 1); if (new_str == NULL) nonoption_flags_len = nonoption_flags_max_len = 0; else { memset (__mempcpy (new_str, __getopt_nonoption_flags, nonoption_flags_max_len), '\0', top + 1 - nonoption_flags_max_len); nonoption_flags_max_len = top + 1; __getopt_nonoption_flags = new_str; } } #endif while (top > middle && middle > bottom) { if (top - middle > middle - bottom) { /* Bottom segment is the short one. */ int len = middle - bottom; register int i; /* Swap it with the top part of the top segment. */ for (i = 0; i < len; i++) { tem = argv[bottom + i]; argv[bottom + i] = argv[top - (middle - bottom) + i]; argv[top - (middle - bottom) + i] = tem; SWAP_FLAGS (bottom + i, top - (middle - bottom) + i); } /* Exclude the moved bottom segment from further swapping. */ top -= len; } else { /* Top segment is the short one. */ int len = top - middle; register int i; /* Swap it with the bottom part of the bottom segment. */ for (i = 0; i < len; i++) { tem = argv[bottom + i]; argv[bottom + i] = argv[middle + i]; argv[middle + i] = tem; SWAP_FLAGS (bottom + i, middle + i); } /* Exclude the moved top segment from further swapping. */ bottom += len; } } /* Update records for the slots the non-options now occupy. */ first_nonopt += (optind - last_nonopt); last_nonopt = optind; } /* Initialize the internal data when the first call is made. */ #if defined __STDC__ && __STDC__ static const char *_getopt_initialize (int, char *const *, const char *); #endif static const char * _getopt_initialize (int argc, char *const *argv, const char *optstring) { /* Start processing options with ARGV-element 1 (since ARGV-element 0 is the program name); the sequence of previously skipped non-option ARGV-elements is empty. */ first_nonopt = last_nonopt = optind; nextchar = NULL; posixly_correct = getenv ("POSIXLY_CORRECT"); /* Determine how to handle the ordering of options and nonoptions. */ if (optstring[0] == '-') { ordering = RETURN_IN_ORDER; ++optstring; } else if (optstring[0] == '+') { ordering = REQUIRE_ORDER; ++optstring; } else if (posixly_correct != NULL) ordering = REQUIRE_ORDER; else ordering = PERMUTE; #ifdef _LIBC if (posixly_correct == NULL && argc == original_argc && argv == original_argv) { if (nonoption_flags_max_len == 0) { if (__getopt_nonoption_flags == NULL || __getopt_nonoption_flags[0] == '\0') nonoption_flags_max_len = -1; else { const char *orig_str = __getopt_nonoption_flags; int len = nonoption_flags_max_len = strlen (orig_str); if (nonoption_flags_max_len < argc) nonoption_flags_max_len = argc; __getopt_nonoption_flags = (char *) malloc (nonoption_flags_max_len); if (__getopt_nonoption_flags == NULL) nonoption_flags_max_len = -1; else memset (__mempcpy (__getopt_nonoption_flags, orig_str, len), '\0', nonoption_flags_max_len - len); } } nonoption_flags_len = nonoption_flags_max_len; } else nonoption_flags_len = 0; #endif return optstring; } /* Scan elements of ARGV (whose length is ARGC) for option characters given in OPTSTRING. If an element of ARGV starts with '-', and is not exactly "-" or "--", then it is an option element. The characters of this element (aside from the initial '-') are option characters. If `getopt' is called repeatedly, it returns successively each of the option characters from each of the option elements. If `getopt' finds another option character, it returns that character, updating `optind' and `nextchar' so that the next call to `getopt' can resume the scan with the following option character or ARGV-element. If there are no more option characters, `getopt' returns -1. Then `optind' is the index in ARGV of the first ARGV-element that is not an option. (The ARGV-elements have been permuted so that those that are not options now come last.) OPTSTRING is a string containing the legitimate option characters. If an option character is seen that is not listed in OPTSTRING, return '?' after printing an error message. If you set `opterr' to zero, the error message is suppressed but we still return '?'. If a char in OPTSTRING is followed by a colon, that means it wants an arg, so the following text in the same ARGV-element, or the text of the following ARGV-element, is returned in `optarg'. Two colons mean an option that wants an optional arg; if there is text in the current ARGV-element, it is returned in `optarg', otherwise `optarg' is set to zero. If OPTSTRING starts with `-' or `+', it requests different methods of handling the non-option ARGV-elements. See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. Long-named options begin with `--' instead of `-'. Their names may be abbreviated as long as the abbreviation is unique or is an exact match for some defined option. If they have an argument, it follows the option name in the same ARGV-element, separated from the option name by a `=', or else the in next ARGV-element. When `getopt' finds a long-named option, it returns 0 if that option's `flag' field is nonzero, the value of the option's `val' field if the `flag' field is zero. The elements of ARGV aren't really const, because we permute them. But we pretend they're const in the prototype to be compatible with other systems. LONGOPTS is a vector of `struct option' terminated by an element containing a name which is zero. LONGIND returns the index in LONGOPT of the long-named option found. It is only valid when a long-named option has been found by the most recent call. If LONG_ONLY is nonzero, '-' as well as '--' can introduce long-named options. */ int _getopt_internal (int argc, char *const *argv, const char *optstring, const struct option *longopts, int *longind, int long_only) { optarg = NULL; if (optind == 0 || !__getopt_initialized) { if (optind == 0) optind = 1; /* Don't scan ARGV[0], the program name. */ optstring = _getopt_initialize (argc, argv, optstring); __getopt_initialized = 1; } /* Test whether ARGV[optind] points to a non-option argument. Either it does not have option syntax, or there is an environment flag from the shell indicating it is not an option. The later information is only used when the used in the GNU libc. */ #ifdef _LIBC # define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0' \ || (optind < nonoption_flags_len \ && __getopt_nonoption_flags[optind] == '1')) #else # define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0') #endif if (nextchar == NULL || *nextchar == '\0') { /* Advance to the next ARGV-element. */ /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been moved back by the user (who may also have changed the arguments). */ if (last_nonopt > optind) last_nonopt = optind; if (first_nonopt > optind) first_nonopt = optind; if (ordering == PERMUTE) { /* If we have just processed some options following some non-options, exchange them so that the options come first. */ if (first_nonopt != last_nonopt && last_nonopt != optind) exchange ((char **) argv); else if (last_nonopt != optind) first_nonopt = optind; /* Skip any additional non-options and extend the range of non-options previously skipped. */ while (optind < argc && NONOPTION_P) optind++; last_nonopt = optind; } /* The special ARGV-element `--' means premature end of options. Skip it like a null option, then exchange with previous non-options as if it were an option, then skip everything else like a non-option. */ if (optind != argc && !strcmp (argv[optind], "--")) { optind++; if (first_nonopt != last_nonopt && last_nonopt != optind) exchange ((char **) argv); else if (first_nonopt == last_nonopt) first_nonopt = optind; last_nonopt = argc; optind = argc; } /* If we have done all the ARGV-elements, stop the scan and back over any non-options that we skipped and permuted. */ if (optind == argc) { /* Set the next-arg-index to point at the non-options that we previously skipped, so the caller will digest them. */ if (first_nonopt != last_nonopt) optind = first_nonopt; return -1; } /* If we have come to a non-option and did not permute it, either stop the scan or describe it to the caller and pass it by. */ if (NONOPTION_P) { if (ordering == REQUIRE_ORDER) return -1; optarg = argv[optind++]; return 1; } /* We have found another option-ARGV-element. Skip the initial punctuation. */ nextchar = (argv[optind] + 1 + (longopts != NULL && argv[optind][1] == '-')); } /* Decode the current option-ARGV-element. */ /* Check whether the ARGV-element is a long option. If long_only and the ARGV-element has the form "-f", where f is a valid short option, don't consider it an abbreviated form of a long option that starts with f. Otherwise there would be no way to give the -f short option. On the other hand, if there's a long option "fubar" and the ARGV-element is "-fu", do consider that an abbreviation of the long option, just like "--fu", and not "-f" with arg "u". This distinction seems to be the most useful approach. */ if (longopts != NULL && (argv[optind][1] == '-' || (long_only && (argv[optind][2] || !my_index (optstring, argv[optind][1]))))) { char *nameend; const struct option *p; const struct option *pfound = NULL; int exact = 0; int ambig = 0; int indfound = -1; int option_index; for (nameend = nextchar; *nameend && *nameend != '='; nameend++) /* Do nothing. */ ; /* Test all long options for either exact match or abbreviated matches. */ for (p = longopts, option_index = 0; p->name; p++, option_index++) if (!strncmp (p->name, nextchar, nameend - nextchar)) { if ((unsigned int) (nameend - nextchar) == (unsigned int) strlen (p->name)) { /* Exact match found. */ pfound = p; indfound = option_index; exact = 1; break; } else if (pfound == NULL) { /* First nonexact match found. */ pfound = p; indfound = option_index; } else /* Second or later nonexact match found. */ ambig = 1; } if (ambig && !exact) { if (opterr) fprintf (stderr, _("%s: option '%s' is ambiguous\n"), argv[0], argv[optind]); nextchar += strlen (nextchar); optind++; optopt = 0; return '?'; } if (pfound != NULL) { option_index = indfound; optind++; if (*nameend) { /* Don't test has_arg with >, because some C compilers don't allow it to be used on enums. */ if (pfound->has_arg) optarg = nameend + 1; else { if (opterr) if (argv[optind - 1][1] == '-') /* --option */ fprintf (stderr, _("%s: option '--%s' doesn't allow an argument\n"), argv[0], pfound->name); else /* +option or -option */ fprintf (stderr, _("%s: option '%c%s' doesn't allow an argument\n"), argv[0], argv[optind - 1][0], pfound->name); nextchar += strlen (nextchar); optopt = pfound->val; return '?'; } } else if (pfound->has_arg == 1) { if (optind < argc) optarg = argv[optind++]; else { if (opterr) fprintf (stderr, _("%s: option '%s' requires an argument\n"), argv[0], argv[optind - 1]); nextchar += strlen (nextchar); optopt = pfound->val; return optstring[0] == ':' ? ':' : '?'; } } nextchar += strlen (nextchar); if (longind != NULL) *longind = option_index; if (pfound->flag) { *(pfound->flag) = pfound->val; return 0; } return pfound->val; } /* Can't find it as a long option. If this is not getopt_long_only, or the option starts with '--' or is not a valid short option, then it's an error. Otherwise interpret it as a short option. */ if (!long_only || argv[optind][1] == '-' || my_index (optstring, *nextchar) == NULL) { if (opterr) { if (argv[optind][1] == '-') /* --option */ fprintf (stderr, _("%s: unrecognized option '--%s'\n"), argv[0], nextchar); else /* +option or -option */ fprintf (stderr, _("%s: unrecognized option '%c%s'\n"), argv[0], argv[optind][0], nextchar); } nextchar = (char *) ""; optind++; optopt = 0; return '?'; } } /* Look at and handle the next short option-character. */ { char c = *nextchar++; char *temp = my_index (optstring, c); /* Increment `optind' when we start to process its last character. */ if (*nextchar == '\0') ++optind; if (temp == NULL || c == ':') { if (opterr) { if (posixly_correct) /* 1003.2 specifies the format of this message. */ fprintf (stderr, _("%s: illegal option -- %c\n"), argv[0], c); else fprintf (stderr, _("%s: invalid option -- %c\n"), argv[0], c); } optopt = c; return '?'; } /* Convenience. Treat POSIX -W foo same as long option --foo */ if (temp[0] == 'W' && temp[1] == ';') { char *nameend; const struct option *p; const struct option *pfound = NULL; int exact = 0; int ambig = 0; int indfound = 0; int option_index; /* This is an option that requires an argument. */ if (*nextchar != '\0') { optarg = nextchar; /* If we end this ARGV-element by taking the rest as an arg, we must advance to the next element now. */ optind++; } else if (optind == argc) { if (opterr) { /* 1003.2 specifies the format of this message. */ fprintf (stderr, _("%s: option requires an argument -- %c\n"), argv[0], c); } optopt = c; if (optstring[0] == ':') c = ':'; else c = '?'; return c; } else /* We already incremented `optind' once; increment it again when taking next ARGV-elt as argument. */ optarg = argv[optind++]; /* optarg is now the argument, see if it's in the table of longopts. */ for (nextchar = nameend = optarg; *nameend && *nameend != '='; nameend++) /* Do nothing. */ ; /* Test all long options for either exact match or abbreviated matches. */ for (p = longopts, option_index = 0; p->name; p++, option_index++) if (!strncmp (p->name, nextchar, nameend - nextchar)) { if ((unsigned int) (nameend - nextchar) == strlen (p->name)) { /* Exact match found. */ pfound = p; indfound = option_index; exact = 1; break; } else if (pfound == NULL) { /* First nonexact match found. */ pfound = p; indfound = option_index; } else /* Second or later nonexact match found. */ ambig = 1; } if (ambig && !exact) { if (opterr) fprintf (stderr, _("%s: option '-W %s' is ambiguous\n"), argv[0], argv[optind]); nextchar += strlen (nextchar); optind++; return '?'; } if (pfound != NULL) { option_index = indfound; if (*nameend) { /* Don't test has_arg with >, because some C compilers don't allow it to be used on enums. */ if (pfound->has_arg) optarg = nameend + 1; else { if (opterr) fprintf (stderr, _("\ %s: option '-W %s' doesn't allow an argument\n"), argv[0], pfound->name); nextchar += strlen (nextchar); return '?'; } } else if (pfound->has_arg == 1) { if (optind < argc) optarg = argv[optind++]; else { if (opterr) fprintf (stderr, _("%s: option '%s' requires an argument\n"), argv[0], argv[optind - 1]); nextchar += strlen (nextchar); return optstring[0] == ':' ? ':' : '?'; } } nextchar += strlen (nextchar); if (longind != NULL) *longind = option_index; if (pfound->flag) { *(pfound->flag) = pfound->val; return 0; } return pfound->val; } nextchar = NULL; return 'W'; /* Let the application handle it. */ } if (temp[1] == ':') { if (temp[2] == ':') { /* This is an option that accepts an argument optionally. */ if (*nextchar != '\0') { optarg = nextchar; optind++; } else optarg = NULL; nextchar = NULL; } else { /* This is an option that requires an argument. */ if (*nextchar != '\0') { optarg = nextchar; /* If we end this ARGV-element by taking the rest as an arg, we must advance to the next element now. */ optind++; } else if (optind == argc) { if (opterr) { /* 1003.2 specifies the format of this message. */ fprintf (stderr, _("%s: option requires an argument -- %c\n"), argv[0], c); } optopt = c; if (optstring[0] == ':') c = ':'; else c = '?'; } else /* We already incremented `optind' once; increment it again when taking next ARGV-elt as argument. */ optarg = argv[optind++]; nextchar = NULL; } } return c; } } int getopt (int argc, char *const *argv, const char *optstring) { return _getopt_internal (argc, argv, optstring, (const struct option *) 0, (int *) 0, 0); } #endif /* Not ELIDE_CODE. */ #ifdef TEST /* Compile with -DTEST to make an executable for use in testing the above definition of `getopt'. */ int main (int argc, char **argv) { int c; int digit_optind = 0; while (1) { int this_option_optind = optind ? optind : 1; c = getopt (argc, argv, "abc:d:0123456789"); if (c == -1) break; switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (digit_optind != 0 && digit_optind != this_option_optind) printf ("digits occur in two different argv-elements.\n"); digit_optind = this_option_optind; printf ("option %c\n", c); break; case 'a': printf ("option a\n"); break; case 'b': printf ("option b\n"); break; case 'c': printf ("option c with value '%s'\n", optarg); break; case '?': break; default: printf ("?? getopt returned character code 0%o ??\n", c); } } if (optind < argc) { printf ("non-option ARGV-elements: "); while (optind < argc) printf ("%s ", argv[optind++]); printf ("\n"); } exit (0); } #endif /* TEST */ make-4.3/src/rule.c0000644000175000017500000004026313611136373011131 00000000000000/* Pattern and suffix rule internals for GNU Make. Copyright (C) 1988-2020 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 . */ #include "makeint.h" #include #include "filedef.h" #include "dep.h" #include "job.h" #include "commands.h" #include "variable.h" #include "rule.h" static void freerule (struct rule *rule, struct rule *lastrule); /* Chain of all pattern rules. */ struct rule *pattern_rules; /* Pointer to last rule in the chain, so we can add onto the end. */ struct rule *last_pattern_rule; /* Number of rules in the chain. */ unsigned int num_pattern_rules; /* Maximum number of target patterns of any pattern rule. */ unsigned int max_pattern_targets; /* Maximum number of dependencies of any pattern rule. */ unsigned int max_pattern_deps; /* Maximum length of the name of a dependencies of any pattern rule. */ size_t max_pattern_dep_length; /* Pointer to structure for the file .SUFFIXES whose dependencies are the suffixes to be searched. */ struct file *suffix_file; /* Maximum length of a suffix. */ static size_t maxsuffix; /* Compute the maximum dependency length and maximum number of dependencies of all implicit rules. Also sets the subdir flag for a rule when appropriate, possibly removing the rule completely when appropriate. Add any global EXTRA_PREREQS here as well. */ void snap_implicit_rules (void) { char *name = NULL; size_t namelen = 0; struct rule *rule; struct dep *dep; struct dep *prereqs = expand_extra_prereqs (lookup_variable (STRING_SIZE_TUPLE(".EXTRA_PREREQS"))); unsigned int pre_deps = 0; max_pattern_dep_length = 0; for (dep = prereqs; dep; dep = dep->next) { size_t l = strlen (dep_name (dep)); if (l > max_pattern_dep_length) max_pattern_dep_length = l; ++pre_deps; } num_pattern_rules = max_pattern_targets = max_pattern_deps = 0; for (rule = pattern_rules; rule; rule = rule->next) { unsigned int ndeps = pre_deps; struct dep *lastdep = NULL; ++num_pattern_rules; if (rule->num > max_pattern_targets) max_pattern_targets = rule->num; for (dep = rule->deps; dep != 0; dep = dep->next) { const char *dname = dep_name (dep); size_t len = strlen (dname); #ifdef VMS const char *p = strrchr (dname, ']'); const char *p2; if (p == 0) p = strrchr (dname, ':'); p2 = p ? strchr (p, '%') : 0; #else const char *p = strrchr (dname, '/'); const char *p2 = p ? strchr (p, '%') : 0; #endif ndeps++; if (len > max_pattern_dep_length) max_pattern_dep_length = len; if (!dep->next) lastdep = dep; if (p2) { /* There is a slash before the % in the dep name. Extract the directory name. */ if (p == dname) ++p; if ((size_t) (p - dname) > namelen) { namelen = p - dname; name = xrealloc (name, namelen + 1); } memcpy (name, dname, p - dname); name[p - dname] = '\0'; /* In the deps of an implicit rule the 'changed' flag actually indicates that the dependency is in a nonexistent subdirectory. */ dep->changed = !dir_file_exists_p (name, ""); } else /* This dependency does not reside in a subdirectory. */ dep->changed = 0; } if (prereqs) { if (lastdep) lastdep->next = copy_dep_chain (prereqs); else rule->deps = copy_dep_chain (prereqs); } if (ndeps > max_pattern_deps) max_pattern_deps = ndeps; } free (name); free_dep_chain (prereqs); } /* Create a pattern rule from a suffix rule. TARGET is the target suffix; SOURCE is the source suffix. CMDS are the commands. If TARGET is nil, it means the target pattern should be '(%.o)'. If SOURCE is nil, it means there should be no deps. */ static void convert_suffix_rule (const char *target, const char *source, struct commands *cmds) { const char **names, **percents; struct dep *deps; names = xmalloc (sizeof (const char *)); percents = xmalloc (sizeof (const char *)); if (target == 0) { /* Special case: TARGET being nil means we are defining a '.X.a' suffix rule; the target pattern is always '(%.o)'. */ #ifdef VMS *names = strcache_add_len ("(%.obj)", 7); #else *names = strcache_add_len ("(%.o)", 5); #endif *percents = *names + 1; } else { /* Construct the target name. */ size_t len = strlen (target); char *p = alloca (1 + len + 1); p[0] = '%'; memcpy (p + 1, target, len + 1); *names = strcache_add_len (p, len + 1); *percents = *names; } if (source == 0) deps = 0; else { /* Construct the dependency name. */ size_t len = strlen (source); char *p = alloca (1 + len + 1); p[0] = '%'; memcpy (p + 1, source, len + 1); deps = alloc_dep (); deps->name = strcache_add_len (p, len + 1); } create_pattern_rule (names, percents, 1, 0, deps, cmds, 0); } /* Convert old-style suffix rules to pattern rules. All rules for the suffixes on the .SUFFIXES list are converted and added to the chain of pattern rules. */ void convert_to_pattern (void) { struct dep *d, *d2; char *rulename; /* We will compute every potential suffix rule (.x.y) from the list of suffixes in the .SUFFIXES target's dependencies and see if it exists. First find the longest of the suffixes. */ maxsuffix = 0; for (d = suffix_file->deps; d != 0; d = d->next) { size_t l = strlen (dep_name (d)); if (l > maxsuffix) maxsuffix = l; } /* Space to construct the suffix rule target name. */ rulename = alloca ((maxsuffix * 2) + 1); for (d = suffix_file->deps; d != 0; d = d->next) { size_t slen; /* Make a rule that is just the suffix, with no deps or commands. This rule exists solely to disqualify match-anything rules. */ convert_suffix_rule (dep_name (d), 0, 0); if (d->file->cmds != 0) /* Record a pattern for this suffix's null-suffix rule. */ convert_suffix_rule ("", dep_name (d), d->file->cmds); /* Add every other suffix to this one and see if it exists as a two-suffix rule. */ slen = strlen (dep_name (d)); memcpy (rulename, dep_name (d), slen); for (d2 = suffix_file->deps; d2 != 0; d2 = d2->next) { struct file *f; size_t s2len; s2len = strlen (dep_name (d2)); /* Can't build something from itself. */ if (slen == s2len && streq (dep_name (d), dep_name (d2))) continue; memcpy (rulename + slen, dep_name (d2), s2len + 1); f = lookup_file (rulename); /* No target, or no commands: it can't be a suffix rule. */ if (f == 0 || f->cmds == 0) continue; /* POSIX says that suffix rules can't have prerequisites. In POSIX mode, don't make this a suffix rule. Previous versions of GNU make did treat this as a suffix rule and ignored the prerequisites, which is bad. In the future we'll do the same as POSIX, but for now preserve the old behavior and warn about it. */ if (f->deps != 0) { if (posix_pedantic) continue; error (&f->cmds->fileinfo, 0, _("warning: ignoring prerequisites on suffix rule definition")); } if (s2len == 2 && rulename[slen] == '.' && rulename[slen + 1] == 'a') /* A suffix rule '.X.a:' generates the pattern rule '(%.o): %.X'. It also generates a normal '%.a: %.X' rule below. */ convert_suffix_rule (NULL, /* Indicates '(%.o)'. */ dep_name (d), f->cmds); /* The suffix rule '.X.Y:' is converted to the pattern rule '%.Y: %.X'. */ convert_suffix_rule (dep_name (d2), dep_name (d), f->cmds); } } } /* Install the pattern rule RULE (whose fields have been filled in) at the end of the list (so that any rules previously defined will take precedence). If this rule duplicates a previous one (identical target and dependencies), the old one is replaced if OVERRIDE is nonzero, otherwise this new one is thrown out. When an old rule is replaced, the new one is put at the end of the list. Return nonzero if RULE is used; zero if not. */ static int new_pattern_rule (struct rule *rule, int override) { struct rule *r, *lastrule; unsigned int i, j; rule->in_use = 0; rule->terminal = 0; rule->next = 0; /* Search for an identical rule. */ lastrule = 0; for (r = pattern_rules; r != 0; lastrule = r, r = r->next) for (i = 0; i < rule->num; ++i) { for (j = 0; j < r->num; ++j) if (!streq (rule->targets[i], r->targets[j])) break; /* If all the targets matched... */ if (j == r->num) { struct dep *d, *d2; for (d = rule->deps, d2 = r->deps; d != 0 && d2 != 0; d = d->next, d2 = d2->next) if (!streq (dep_name (d), dep_name (d2))) break; if (d == 0 && d2 == 0) { /* All the dependencies matched. */ if (override) { /* Remove the old rule. */ freerule (r, lastrule); /* Install the new one. */ if (pattern_rules == 0) pattern_rules = rule; else last_pattern_rule->next = rule; last_pattern_rule = rule; /* We got one. Stop looking. */ goto matched; } else { /* The old rule stays intact. Destroy the new one. */ freerule (rule, (struct rule *) 0); return 0; } } } } matched:; if (r == 0) { /* There was no rule to replace. */ if (pattern_rules == 0) pattern_rules = rule; else last_pattern_rule->next = rule; last_pattern_rule = rule; } return 1; } /* Install an implicit pattern rule based on the three text strings in the structure P points to. These strings come from one of the arrays of default implicit pattern rules. TERMINAL specifies what the 'terminal' field of the rule should be. */ void install_pattern_rule (struct pspec *p, int terminal) { struct rule *r; const char *ptr; r = xmalloc (sizeof (struct rule)); r->num = 1; r->targets = xmalloc (sizeof (const char *)); r->suffixes = xmalloc (sizeof (const char *)); r->lens = xmalloc (sizeof (unsigned int)); r->lens[0] = (unsigned int) strlen (p->target); r->targets[0] = p->target; r->suffixes[0] = find_percent_cached (&r->targets[0]); assert (r->suffixes[0] != NULL); ++r->suffixes[0]; ptr = p->dep; r->deps = PARSE_SIMPLE_SEQ ((char **)&ptr, struct dep); if (new_pattern_rule (r, 0)) { r->terminal = terminal ? 1 : 0; 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); r->cmds->command_lines = 0; r->cmds->recipe_prefix = RECIPEPREFIX_DEFAULT; } } /* Free all the storage used in RULE and take it out of the pattern_rules chain. LASTRULE is the rule whose next pointer points to RULE. */ static void freerule (struct rule *rule, struct rule *lastrule) { struct rule *next = rule->next; free_dep_chain (rule->deps); /* MSVC erroneously warns without a cast here. */ free ((void *)rule->targets); free ((void *)rule->suffixes); free (rule->lens); /* We can't free the storage for the commands because there are ways that they could be in more than one place: * If the commands came from a suffix rule, they could also be in the 'struct file's for other suffix rules or plain targets given on the same makefile line. * If two suffixes that together make a two-suffix rule were each given twice in the .SUFFIXES list, and in the proper order, two identical pattern rules would be created and the second one would be discarded here, but both would contain the same 'struct commands' pointer from the 'struct file' for the suffix rule. */ free (rule); if (pattern_rules == rule) if (lastrule != 0) abort (); else pattern_rules = next; else if (lastrule != 0) lastrule->next = next; if (last_pattern_rule == rule) last_pattern_rule = lastrule; } /* Create a new pattern rule with the targets in the nil-terminated array TARGETS. TARGET_PERCENTS is an array of pointers to the % in each element of TARGETS. N is the number of items in the array (not counting the nil element). The new rule has dependencies DEPS and commands from COMMANDS. It is a terminal rule if TERMINAL is nonzero. This rule overrides identical rules with different commands if OVERRIDE is nonzero. The storage for TARGETS and its elements and TARGET_PERCENTS is used and must not be freed until the rule is destroyed. */ void create_pattern_rule (const char **targets, const char **target_percents, unsigned short n, int terminal, struct dep *deps, struct commands *commands, int override) { unsigned int i; struct rule *r = xmalloc (sizeof (struct rule)); r->num = n; r->cmds = commands; r->deps = deps; r->targets = targets; r->suffixes = target_percents; r->lens = xmalloc (n * sizeof (unsigned int)); for (i = 0; i < n; ++i) { r->lens[i] = (unsigned int) strlen (targets[i]); assert (r->suffixes[i] != NULL); ++r->suffixes[i]; } if (new_pattern_rule (r, override)) r->terminal = terminal ? 1 : 0; } /* Print the data base of rules. */ static void /* Useful to call from gdb. */ print_rule (struct rule *r) { unsigned int i; for (i = 0; i < r->num; ++i) { fputs (r->targets[i], stdout); putchar ((i + 1 == r->num) ? ':' : ' '); } if (r->terminal) putchar (':'); print_prereqs (r->deps); if (r->cmds != 0) print_commands (r->cmds); } void print_rule_data_base (void) { unsigned int rules, terminal; struct rule *r; puts (_("\n# Implicit Rules")); rules = terminal = 0; for (r = pattern_rules; r != 0; r = r->next) { ++rules; putchar ('\n'); print_rule (r); if (r->terminal) ++terminal; } if (rules == 0) puts (_("\n# No implicit rules.")); else { printf (_("\n# %u implicit rules, %u (%.1f%%) terminal."), rules, terminal, (double) terminal / (double) rules * 100.0); } if (num_pattern_rules != rules) { /* This can happen if a fatal error was detected while reading the makefiles and thus count_implicit_rule_limits wasn't called yet. */ if (num_pattern_rules != 0) ONN (fatal, NILF, _("BUG: num_pattern_rules is wrong! %u != %u"), num_pattern_rules, rules); } } make-4.3/src/misc.c0000644000175000017500000004360713603564437011131 00000000000000/* Miscellaneous generic support functions for GNU Make. Copyright (C) 1988-2020 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 . */ #include "makeint.h" #include "filedef.h" #include "dep.h" #include "debug.h" /* GNU make no longer supports pre-ANSI89 environments. */ #include #ifdef WINDOWS32 # include # include #endif #ifdef HAVE_FCNTL_H # include #else # include #endif /* Compare strings *S1 and *S2. Return negative if the first is less, positive if it is greater, zero if they are equal. */ int alpha_compare (const void *v1, const void *v2) { const char *s1 = *((char **)v1); const char *s2 = *((char **)v2); if (*s1 != *s2) return *s1 - *s2; return strcmp (s1, s2); } /* Discard each backslash-newline combination from LINE. Backslash-backslash-newline combinations become backslash-newlines. This is done by copying the text at LINE into itself. */ void collapse_continuations (char *line) { char *out = line; char *in = line; char *q; q = strchr(in, '\n'); if (q == 0) return; do { char *p = q; int i; size_t out_line_length; if (q > line && q[-1] == '\\') { /* Search for more backslashes. */ i = -2; while (&p[i] >= line && p[i] == '\\') --i; ++i; } else i = 0; /* The number of backslashes is now -I, keep half of them. */ out_line_length = (p - in) + i - i/2; if (out != in) memmove (out, in, out_line_length); out += out_line_length; /* When advancing IN, skip the newline too. */ in = q + 1; if (i & 1) { /* Backslash/newline handling: In traditional GNU make all trailing whitespace, consecutive 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. */ while (ISBLANK (*in)) ++in; if (! posix_pedantic) while (out > line && ISBLANK (out[-1])) --out; *out++ = ' '; } else { /* If the newline isn't quoted, put it in the output. */ *out++ = '\n'; } q = strchr(in, '\n'); } while (q); memmove(out, in, strlen(in) + 1); } /* Print N spaces (used in debug for target-depth). */ void print_spaces (unsigned int n) { while (n-- > 0) putchar (' '); } /* Return a string whose contents concatenate the NUM strings provided This string lives in static, re-used memory. */ const char * concat (unsigned int num, ...) { static size_t rlen = 0; static char *result = NULL; size_t ri = 0; va_list args; va_start (args, num); while (num-- > 0) { const char *s = va_arg (args, const char *); size_t l = xstrlen (s); if (l == 0) continue; if (ri + l > rlen) { rlen = ((rlen ? rlen : 60) + l) * 2; result = xrealloc (result, rlen); } memcpy (result + ri, s, l); ri += l; } va_end (args); /* Get some more memory if we don't have enough space for the terminating '\0'. */ if (ri == rlen) { rlen = (rlen ? rlen : 60) * 2; result = xrealloc (result, rlen); } result[ri] = '\0'; return result; } /* Like malloc but get fatal error if memory is exhausted. */ /* Don't bother if we're using dmalloc; it provides these for us. */ #ifndef HAVE_DMALLOC_H #undef xmalloc #undef xcalloc #undef xrealloc #undef xstrdup void * xmalloc (size_t size) { /* Make sure we don't allocate 0, for pre-ISO implementations. */ void *result = malloc (size ? size : 1); if (result == 0) out_of_memory (); return result; } void * xcalloc (size_t size) { /* Make sure we don't allocate 0, for pre-ISO implementations. */ void *result = calloc (size ? size : 1, 1); if (result == 0) out_of_memory (); return result; } void * xrealloc (void *ptr, size_t size) { void *result; /* Some older implementations of realloc() don't conform to ISO. */ if (! size) size = 1; result = ptr ? realloc (ptr, size) : malloc (size); if (result == 0) out_of_memory (); return result; } char * xstrdup (const char *ptr) { char *result; #ifdef HAVE_STRDUP result = strdup (ptr); #else result = malloc (strlen (ptr) + 1); #endif if (result == 0) out_of_memory (); #ifdef HAVE_STRDUP return result; #else return strcpy (result, ptr); #endif } #endif /* HAVE_DMALLOC_H */ char * xstrndup (const char *str, size_t length) { char *result; #ifdef HAVE_STRNDUP result = strndup (str, length); if (result == 0) out_of_memory (); #else result = xmalloc (length + 1); if (length > 0) strncpy (result, str, length); result[length] = '\0'; #endif return result; } #ifndef HAVE_MEMRCHR void * memrchr(const void* str, int ch, size_t len) { const char* sp = str; const char* cp = sp; if (len == 0) return NULL; cp += len - 1; while (cp[0] != ch) { if (cp == sp) return NULL; --cp; } return (void*)cp; } #endif /* Limited INDEX: Search through the string STRING, which ends at LIMIT, for the character C. Returns a pointer to the first occurrence, or nil if none is found. Like INDEX except that the string searched ends where specified instead of at the first null. */ char * lindex (const char *s, const char *limit, int c) { while (s < limit) if (*s++ == c) return (char *)(s - 1); return 0; } /* Return the address of the first whitespace or null in the string S. */ char * end_of_token (const char *s) { END_OF_TOKEN (s); return (char *)s; } /* Return the address of the first nonwhitespace or null in the string S. */ char * next_token (const char *s) { NEXT_TOKEN (s); return (char *)s; } /* Find the next token in PTR; return the address of it, and store the length of the token into *LENGTHPTR if LENGTHPTR is not nil. Set *PTR to the end of the token, so this function can be called repeatedly in a loop. */ char * find_next_token (const char **ptr, size_t *lengthptr) { const char *p = next_token (*ptr); if (*p == '\0') return 0; *ptr = end_of_token (p); if (lengthptr != 0) *lengthptr = *ptr - p; return (char *)p; } /* Write a BUFFER of size LEN to file descriptor FD. Retry short writes from EINTR. Return LEN, or -1 on error. */ ssize_t writebuf (int fd, const void *buffer, size_t len) { const char *msg = buffer; size_t l = len; while (l) { ssize_t r; EINTRLOOP (r, write (fd, msg, l)); if (r < 0) return r; l -= r; msg += r; } return (ssize_t)len; } /* Read until we get LEN bytes from file descriptor FD, into BUFFER. Retry short reads on EINTR. If we get an error, return it. Return 0 at EOF. */ ssize_t readbuf (int fd, void *buffer, size_t len) { char *msg = buffer; while (len) { ssize_t r; EINTRLOOP (r, read (fd, msg, len)); if (r < 0) return r; if (r == 0) break; len -= r; msg += r; } return (ssize_t)(msg - (char*)buffer); } /* Copy a chain of 'struct dep'. For 2nd expansion deps, dup the name. */ struct dep * copy_dep_chain (const struct dep *d) { struct dep *firstnew = 0; struct dep *lastnew = 0; while (d != 0) { struct dep *c = xmalloc (sizeof (struct dep)); memcpy (c, d, sizeof (struct dep)); if (c->need_2nd_expansion) c->name = xstrdup (c->name); c->next = 0; if (firstnew == 0) firstnew = lastnew = c; else lastnew = lastnew->next = c; d = d->next; } return firstnew; } /* Free a chain of struct nameseq. For struct dep chains use free_dep_chain. */ void free_ns_chain (struct nameseq *ns) { while (ns != 0) { struct nameseq *t = ns; ns = ns->next; free_ns (t); } } #ifdef MAKE_MAINTAINER_MODE void spin (const char* type) { char filenm[256]; struct stat dummy; sprintf (filenm, ".make-spin-%s", type); if (stat (filenm, &dummy) == 0) { fprintf (stderr, "SPIN on %s\n", filenm); do #ifdef WINDOWS32 Sleep (1000); #else sleep (1); #endif while (stat (filenm, &dummy) == 0); } } #endif /* Provide support for temporary files. */ #ifndef HAVE_STDLIB_H # ifdef HAVE_MKSTEMP int mkstemp (char *template); # else char *mktemp (char *template); # endif #endif #ifndef HAVE_UMASK mode_t umask (mode_t mask) { return 0; } #endif FILE * get_tmpfile (char **name, const char *template) { FILE *file; #ifdef HAVE_FDOPEN int fd; #endif /* Preserve the current umask, and set a restrictive one for temp files. */ mode_t mask = umask (0077); #if defined(HAVE_MKSTEMP) || defined(HAVE_MKTEMP) # define TEMPLATE_LEN strlen (template) #else # define TEMPLATE_LEN L_tmpnam #endif *name = xmalloc (TEMPLATE_LEN + 1); strcpy (*name, template); #if defined(HAVE_MKSTEMP) && defined(HAVE_FDOPEN) /* It's safest to use mkstemp(), if we can. */ EINTRLOOP (fd, mkstemp (*name)); if (fd == -1) file = NULL; else file = fdopen (fd, "w"); #else # ifdef HAVE_MKTEMP (void) mktemp (*name); # else (void) tmpnam (*name); # endif # ifdef HAVE_FDOPEN /* Can't use mkstemp(), but guard against a race condition. */ EINTRLOOP (fd, open (*name, O_CREAT|O_EXCL|O_WRONLY, 0600)); if (fd == -1) return 0; file = fdopen (fd, "w"); # else /* Not secure, but what can we do? */ file = fopen (*name, "w"); # endif #endif umask (mask); return file; } #if !HAVE_STRCASECMP && !HAVE_STRICMP && !HAVE_STRCMPI /* If we don't have strcasecmp() (from POSIX), or anything that can substitute for it, define our own version. */ int strcasecmp (const char *s1, const char *s2) { while (1) { int c1 = (int) *(s1++); int c2 = (int) *(s2++); if (isalpha (c1)) c1 = tolower (c1); if (isalpha (c2)) c2 = tolower (c2); if (c1 != '\0' && c1 == c2) continue; return (c1 - c2); } } #endif #if !HAVE_STRNCASECMP && !HAVE_STRNICMP && !HAVE_STRNCMPI /* If we don't have strncasecmp() (from POSIX), or anything that can substitute for it, define our own version. */ int strncasecmp (const char *s1, const char *s2, int n) { while (n-- > 0) { int c1 = (int) *(s1++); int c2 = (int) *(s2++); if (isalpha (c1)) c1 = tolower (c1); if (isalpha (c2)) c2 = tolower (c2); if (c1 != '\0' && c1 == c2) continue; return (c1 - c2); } return 0; } #endif #ifdef GETLOADAVG_PRIVILEGED #ifdef POSIX /* Hopefully if a system says it's POSIX.1 and has the setuid and setgid functions, they work as POSIX.1 says. Some systems (Alpha OSF/1 1.2, for example) which claim to be POSIX.1 also have the BSD setreuid and setregid functions, but they don't work as in BSD and only the POSIX.1 way works. */ #undef HAVE_SETREUID #undef HAVE_SETREGID #else /* Not POSIX. */ /* Some POSIX.1 systems have the seteuid and setegid functions. In a POSIX-like system, they are the best thing to use. However, some non-POSIX systems have them too but they do not work in the POSIX style and we must use setreuid and setregid instead. */ #undef HAVE_SETEUID #undef HAVE_SETEGID #endif /* POSIX. */ #ifndef HAVE_UNISTD_H extern int getuid (), getgid (), geteuid (), getegid (); extern int setuid (), setgid (); #ifdef HAVE_SETEUID extern int seteuid (); #else #ifdef HAVE_SETREUID extern int setreuid (); #endif /* Have setreuid. */ #endif /* Have seteuid. */ #ifdef HAVE_SETEGID extern int setegid (); #else #ifdef HAVE_SETREGID extern int setregid (); #endif /* Have setregid. */ #endif /* Have setegid. */ #endif /* No . */ /* Keep track of the user and group IDs for user- and make- access. */ static int user_uid = -1, user_gid = -1, make_uid = -1, make_gid = -1; #define access_inited (user_uid != -1) static enum { make, user } current_access; /* Under -d, write a message describing the current IDs. */ static void log_access (const char *flavor) { if (! ISDB (DB_JOBS)) return; /* All the other debugging messages go to stdout, but we write this one to stderr because it might be run in a child fork whose stdout is piped. */ fprintf (stderr, _("%s: user %lu (real %lu), group %lu (real %lu)\n"), flavor, (unsigned long) geteuid (), (unsigned long) getuid (), (unsigned long) getegid (), (unsigned long) getgid ()); fflush (stderr); } static void init_access (void) { #ifndef VMS user_uid = getuid (); user_gid = getgid (); make_uid = geteuid (); make_gid = getegid (); /* Do these ever fail? */ if (user_uid == -1 || user_gid == -1 || make_uid == -1 || make_gid == -1) pfatal_with_name ("get{e}[gu]id"); log_access (_("Initialized access")); current_access = make; #endif } #endif /* GETLOADAVG_PRIVILEGED */ /* Give the process appropriate permissions for access to user data (i.e., to stat files, or to spawn a child process). */ void user_access (void) { #ifdef GETLOADAVG_PRIVILEGED if (!access_inited) init_access (); if (current_access == user) return; /* We are in "make access" mode. This means that the effective user and group IDs are those of make (if it was installed setuid or setgid). We now want to set the effective user and group IDs to the real IDs, which are the IDs of the process that exec'd make. */ #ifdef HAVE_SETEUID /* Modern systems have the seteuid/setegid calls which set only the effective IDs, which is ideal. */ if (seteuid (user_uid) < 0) pfatal_with_name ("user_access: seteuid"); #else /* Not HAVE_SETEUID. */ #ifndef HAVE_SETREUID /* System V has only the setuid/setgid calls to set user/group IDs. There is an effective ID, which can be set by setuid/setgid. It can be set (unless you are root) only to either what it already is (returned by geteuid/getegid, now in make_uid/make_gid), the real ID (return by getuid/getgid, now in user_uid/user_gid), or the saved set ID (what the effective ID was before this set-ID executable (make) was exec'd). */ if (setuid (user_uid) < 0) pfatal_with_name ("user_access: setuid"); #else /* HAVE_SETREUID. */ /* In 4BSD, the setreuid/setregid calls set both the real and effective IDs. They may be set to themselves or each other. So you have two alternatives at any one time. If you use setuid/setgid, the effective will be set to the real, leaving only one alternative. Using setreuid/setregid, however, you can toggle between your two alternatives by swapping the values in a single setreuid or setregid call. */ if (setreuid (make_uid, user_uid) < 0) pfatal_with_name ("user_access: setreuid"); #endif /* Not HAVE_SETREUID. */ #endif /* HAVE_SETEUID. */ #ifdef HAVE_SETEGID if (setegid (user_gid) < 0) pfatal_with_name ("user_access: setegid"); #else #ifndef HAVE_SETREGID if (setgid (user_gid) < 0) pfatal_with_name ("user_access: setgid"); #else if (setregid (make_gid, user_gid) < 0) pfatal_with_name ("user_access: setregid"); #endif #endif current_access = user; log_access (_("User access")); #endif /* GETLOADAVG_PRIVILEGED */ } /* Give the process appropriate permissions for access to make data (i.e., the load average). */ void make_access (void) { #ifdef GETLOADAVG_PRIVILEGED if (!access_inited) init_access (); if (current_access == make) return; /* See comments in user_access, above. */ #ifdef HAVE_SETEUID if (seteuid (make_uid) < 0) pfatal_with_name ("make_access: seteuid"); #else #ifndef HAVE_SETREUID if (setuid (make_uid) < 0) pfatal_with_name ("make_access: setuid"); #else if (setreuid (user_uid, make_uid) < 0) pfatal_with_name ("make_access: setreuid"); #endif #endif #ifdef HAVE_SETEGID if (setegid (make_gid) < 0) pfatal_with_name ("make_access: setegid"); #else #ifndef HAVE_SETREGID if (setgid (make_gid) < 0) pfatal_with_name ("make_access: setgid"); #else if (setregid (user_gid, make_gid) < 0) pfatal_with_name ("make_access: setregid"); #endif #endif current_access = make; log_access (_("Make access")); #endif /* GETLOADAVG_PRIVILEGED */ } /* Give the process appropriate permissions for a child process. This is like user_access, but you can't get back to make_access. */ void child_access (void) { #ifdef GETLOADAVG_PRIVILEGED if (!access_inited) abort (); /* Set both the real and effective UID and GID to the user's. They cannot be changed back to make's. */ #ifndef HAVE_SETREUID if (setuid (user_uid) < 0) pfatal_with_name ("child_access: setuid"); #else if (setreuid (user_uid, user_uid) < 0) pfatal_with_name ("child_access: setreuid"); #endif #ifndef HAVE_SETREGID if (setgid (user_gid) < 0) pfatal_with_name ("child_access: setgid"); #else if (setregid (user_gid, user_gid) < 0) pfatal_with_name ("child_access: setregid"); #endif log_access (_("Child access")); #endif /* GETLOADAVG_PRIVILEGED */ } #ifdef NEED_GET_PATH_MAX unsigned int get_path_max (void) { static unsigned int value; if (value == 0) { long int x = pathconf ("/", _PC_PATH_MAX); if (x > 0) value = x; else return MAXPATHLEN; } return value; } #endif make-4.3/src/rule.h0000644000175000017500000000412013603564437011135 00000000000000/* Definitions for using pattern rules in GNU Make. Copyright (C) 1988-2020 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 . */ /* Structure used for pattern (implicit) rules. */ struct rule { struct rule *next; const char **targets; /* Targets of the rule. */ unsigned int *lens; /* Lengths of each target. */ const char **suffixes; /* Suffixes (after '%') of each target. */ struct dep *deps; /* Dependencies of the rule. */ struct commands *cmds; /* Commands to execute. */ unsigned short num; /* Number of targets. */ char terminal; /* If terminal (double-colon). */ char in_use; /* If in use by a parent pattern_search. */ }; /* For calling install_pattern_rule. */ struct pspec { const char *target, *dep, *commands; }; extern struct rule *pattern_rules; extern struct rule *last_pattern_rule; extern unsigned int num_pattern_rules; extern unsigned int max_pattern_deps; extern unsigned int max_pattern_targets; extern size_t max_pattern_dep_length; extern struct file *suffix_file; void snap_implicit_rules (void); void convert_to_pattern (void); void install_pattern_rule (struct pspec *p, int terminal); void create_pattern_rule (const char **targets, const char **target_percents, unsigned short num, int terminal, struct dep *deps, struct commands *commands, int override); void print_rule_data_base (void); make-4.3/src/remake.c0000644000175000017500000015622513603564437011443 00000000000000/* Basic dependency engine for GNU Make. Copyright (C) 1988-2020 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 . */ #include "makeint.h" #include "filedef.h" #include "job.h" #include "commands.h" #include "dep.h" #include "variable.h" #include "debug.h" #include #ifdef HAVE_FCNTL_H #include #else #include #endif #ifdef VMS #include #endif #ifdef WINDOWS32 #include #endif /* The test for circular dependencies is based on the 'updating' bit in 'struct file'. However, double colon targets have separate 'struct file's; make sure we always use the base of the double colon chain. */ #define start_updating(_f) (((_f)->double_colon ? (_f)->double_colon : (_f))\ ->updating = 1) #define finish_updating(_f) (((_f)->double_colon ? (_f)->double_colon : (_f))\ ->updating = 0) #define is_updating(_f) (((_f)->double_colon ? (_f)->double_colon : (_f))\ ->updating) /* 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. All files start with considered == 0. */ static unsigned int considered = 0; static enum update_status update_file (struct file *file, unsigned int depth); static enum update_status update_file_1 (struct file *file, unsigned int depth); static enum update_status check_dep (struct file *file, unsigned int depth, FILE_TIMESTAMP this_mtime, int *must_make); static enum update_status touch_file (struct file *file); static void remake_file (struct file *file); static FILE_TIMESTAMP name_mtime (const char *name); static const char *library_search (const char *lib, FILE_TIMESTAMP *mtime_ptr); /* Remake all the goals in the 'struct dep' chain GOALS. Return -1 if nothing was done, 0 if all goals were updated successfully, or 1 if a goal failed. If rebuilding_makefiles is nonzero, these goals are makefiles, so -t, -q, and -n should be disabled for them unless they were also command-line targets, and we should only make one goal at a time and return as soon as one goal whose 'changed' member is nonzero is successfully made. */ enum update_status update_goal_chain (struct goaldep *goaldeps) { int t = touch_flag, q = question_flag, n = just_print_flag; enum update_status status = us_none; /* Duplicate the chain so we can remove things from it. */ struct dep *goals = copy_dep_chain ((struct dep *)goaldeps); goal_list = rebuilding_makefiles ? goaldeps : NULL; #define MTIME(file) (rebuilding_makefiles ? file_mtime_no_search (file) \ : file_mtime (file)) /* Start a fresh batch of consideration. */ ++considered; /* Update all the goals until they are all finished. */ while (goals != 0) { struct dep *g, *lastgoal; /* Start jobs that are waiting for the load to go down. */ start_waiting_jobs (); /* Wait for a child to die. */ reap_children (1, 0); lastgoal = 0; g = goals; while (g != 0) { /* Iterate over all double-colon entries for this file. */ 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) { unsigned int ocommands_started; enum update_status fail; file->dontcare = ANY_SET (g->flags, RM_DONTCARE); check_renamed (file); if (rebuilding_makefiles) { if (file->cmd_target) { touch_flag = t; question_flag = q; just_print_flag = n; } else touch_flag = question_flag = just_print_flag = 0; } /* Save the old value of 'commands_started' so we can compare later. It will be incremented when any commands are actually run. */ ocommands_started = commands_started; fail = update_file (file, rebuilding_makefiles ? 1 : 0); check_renamed (file); /* Set the goal's 'changed' flag if any commands were started by calling update_file above. We check this flag below to decide when to give an "up to date" diagnostic. */ if (commands_started > ocommands_started) g->changed = 1; stop = 0; if ((fail || file->updated) && status < us_question) { /* We updated this goal. Update STATUS and decide whether to stop. */ if (file->update_status) { /* Updating failed, or -q triggered. The STATUS value tells our caller which. */ status = file->update_status; /* If -q just triggered, stop immediately. It doesn't matter how much more we run, since we already know the answer to return. */ stop = (question_flag && !keep_going_flag && !rebuilding_makefiles); } else { FILE_TIMESTAMP mtime = MTIME (file); check_renamed (file); if (file->updated && g->changed && mtime != file->mtime_before_update) { /* Updating was done. If this is a makefile and just_print_flag or question_flag is set (meaning -n or -q was given and this file was specified as a command-line target), don't change STATUS. If STATUS is changed, we will get re-exec'd, and enter an infinite loop. */ if (!rebuilding_makefiles || (!just_print_flag && !question_flag)) status = us_success; if (rebuilding_makefiles && file->dontcare) /* This is a default makefile; stop remaking. */ stop = 1; } } } /* Keep track if any double-colon entry is not finished. When they are all finished, the goal is finished. */ any_not_updated |= !file->updated; file->dontcare = 0; if (stop) break; } /* Reset FILE since it is null at the end of the loop. */ file = g->file; if (stop || !any_not_updated) { /* If we have found nothing whatever to do for the goal, print a message saying nothing needs doing. */ if (!rebuilding_makefiles /* If the update_status is success, we updated successfully or not at all. G->changed will have been set above if any commands were actually started for this goal. */ && file->update_status == us_success && !g->changed /* Never give a message under -s or -q. */ && !run_silent && !question_flag) OS (message, 1, ((file->phony || file->cmds == 0) ? _("Nothing to be done for '%s'.") : _("'%s' is up to date.")), file->name); /* This goal is finished. Remove it from the chain. */ if (lastgoal == 0) goals = g->next; else lastgoal->next = g->next; /* Free the storage. */ free (g); g = lastgoal == 0 ? goals : lastgoal->next; if (stop) break; } else { lastgoal = g; g = g->next; } } /* If we reached the end of the dependency graph update CONSIDERED for the next pass. */ if (g == 0) ++considered; } if (rebuilding_makefiles) { touch_flag = t; question_flag = q; just_print_flag = n; } return status; } /* 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; } } /* 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. DEPTH is the depth in recursions of this function. We increment it during the consideration of our dependencies, then decrement it again after finding out whether this file is out of date. If there are multiple double-colon entries for FILE, each is considered in turn. */ static enum update_status update_file (struct file *file, unsigned int depth) { enum update_status status = us_success; struct file *f; f = file->double_colon ? file->double_colon : file; /* Prune the dependency graph: if we've already been here on _this_ pass through the dependency graph, we don't have to go any further. We won't reap_children until we start the next pass, so no state change is possible below here until then. */ if (f->considered == considered) { /* Check for the case where a target has been tried and failed but the diagnostics haven't been issued. If we need the diagnostics then we will have to continue. */ if (!(f->updated && f->update_status > us_none && !f->dontcare && f->no_diag)) { DBF (DB_VERBOSE, _("Pruning file '%s'.\n")); return f->command_state == cs_finished ? f->update_status : us_success; } } /* This loop runs until we start commands for a double colon rule, or until the chain is exhausted. */ for (; f != 0; f = f->prev) { enum update_status new; f->considered = considered; new = update_file_1 (f, depth); check_renamed (f); /* Clean up any alloca() used during the update. */ alloca (0); /* If we got an error, don't bother with double_colon etc. */ if (new && !keep_going_flag) return new; if (f->command_state == cs_running || f->command_state == cs_deps_running) /* Don't run other :: rules for this target until this rule is finished. */ return us_success; if (new > status) status = new; } return status; } /* Show a message stating the target failed to build. */ static void complain (struct file *file) { /* If this file has no_diag set then it means we tried to update it before in the dontcare mode and failed. The target that actually failed is not necessarily this file but could be one of its direct or indirect dependencies. So traverse this file's dependencies and find the one that actually caused the failure. */ struct dep *d; for (d = file->deps; d != 0; d = d->next) { if (d->file->updated && d->file->update_status > us_none && file->no_diag) { complain (d->file); break; } } 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, m, "", 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, m, "", file->name, ""); error (NILF, l, m, "*** ", file->name, "."); } file->no_diag = 0; } } /* Consider a single 'struct file' and update it as appropriate. Return 0 on success, or non-0 on failure. */ static enum update_status update_file_1 (struct file *file, unsigned int depth) { enum update_status dep_status = us_success; FILE_TIMESTAMP this_mtime; int noexist, must_make, deps_changed; struct file *ofile; struct dep *d, *ad; struct dep amake; int running = 0; DBF (DB_VERBOSE, _("Considering target file '%s'.\n")); if (file->updated) { if (file->update_status > us_none) { DBF (DB_VERBOSE, _("Recently tried and failed to update file '%s'.\n")); /* If the file we tried to make is marked no_diag then no message was printed about it when it failed during the makefile rebuild. If we're trying to build it again in the normal rebuild, print a message now. */ if (file->no_diag && !file->dontcare) complain (file); return file->update_status; } DBF (DB_VERBOSE, _("File '%s' was considered already.\n")); return 0; } switch (file->command_state) { case cs_not_started: case cs_deps_running: break; case cs_running: DBF (DB_VERBOSE, _("Still updating file '%s'.\n")); return 0; case cs_finished: DBF (DB_VERBOSE, _("Finished updating file '%s'.\n")); return file->update_status; default: abort (); } /* Determine whether the diagnostics will be issued should this update fail. */ file->no_diag = file->dontcare; ++depth; /* Notice recursive update of the same file. */ start_updating (file); /* We might change file if we find a different one via vpath; remember this one to turn off updating. */ ofile = file; /* Looking at the file's modtime beforehand allows the possibility that its name may be changed by a VPATH search, and thus it may not need an implicit rule. If this were not done, the file might get implicit commands that apply to its initial name, only to have that name replaced with another found by VPATH search. */ this_mtime = file_mtime (file); check_renamed (file); noexist = this_mtime == NONEXISTENT_MTIME; if (noexist) DBF (DB_BASIC, _("File '%s' does not exist.\n")); else if (ORDINARY_MTIME_MIN <= this_mtime && this_mtime <= ORDINARY_MTIME_MAX && file->low_resolution_time) { /* Avoid spurious rebuilds due to low resolution time stamps. */ int ns = FILE_TIMESTAMP_NS (this_mtime); if (ns != 0) OS (error, NILF, _("*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp"), file->name); this_mtime += FILE_TIMESTAMPS_PER_S - 1 - ns; } must_make = noexist; /* If file was specified as a target with no commands, come up with some default commands. */ if (!file->phony && file->cmds == 0 && !file->tried_implicit) { if (try_implicit_rule (file, depth)) DBF (DB_IMPLICIT, _("Found an implicit rule for '%s'.\n")); else DBF (DB_IMPLICIT, _("No implicit rule found for '%s'.\n")); file->tried_implicit = 1; } if (file->cmds == 0 && !file->is_target && default_file != 0 && default_file->cmds != 0) { DBF (DB_IMPLICIT, _("Using default recipe for '%s'.\n")); file->cmds = default_file->cmds; } /* Update all non-intermediate files we depend on, if necessary, and see whether any of them is more recent than this file. We need to walk our deps, AND the deps of any also_make targets to ensure everything happens in the correct order. */ amake.file = file; amake.next = file->also_make; ad = &amake; while (ad) { struct dep *lastd = 0; /* Find the deps we're scanning */ d = ad->file->deps; ad = ad->next; while (d) { enum update_status new; FILE_TIMESTAMP mtime; int maybe_make; int dontcare = 0; check_renamed (d->file); mtime = file_mtime (d->file); check_renamed (d->file); if (is_updating (d->file)) { OSS (error, NILF, _("Circular %s <- %s dependency dropped."), file->name, d->file->name); /* We cannot free D here because our the caller will still have a reference to it when we were called recursively via check_dep below. */ if (lastd == 0) file->deps = d->next; else lastd->next = d->next; d = d->next; continue; } d->file->parent = file; maybe_make = must_make; /* Inherit dontcare flag from our parent. */ if (rebuilding_makefiles) { dontcare = d->file->dontcare; d->file->dontcare = file->dontcare; } new = check_dep (d->file, depth, this_mtime, &maybe_make); if (new > dep_status) dep_status = new; /* Restore original dontcare flag. */ if (rebuilding_makefiles) d->file->dontcare = dontcare; if (! d->ignore_mtime) must_make = maybe_make; check_renamed (d->file); { struct file *f = d->file; if (f->double_colon) f = f->double_colon; do { running |= (f->command_state == cs_running || f->command_state == cs_deps_running); f = f->prev; } while (f != 0); } if (dep_status && !keep_going_flag) break; if (!running) /* The prereq is considered changed if the timestamp has changed while it was built, OR it doesn't exist. */ d->changed = ((file_mtime (d->file) != mtime) || (mtime == NONEXISTENT_MTIME)); lastd = d; d = d->next; } } /* Now we know whether this target needs updating. If it does, update all the intermediate files we depend on. */ if (must_make || always_make_flag) { for (d = file->deps; d != 0; d = d->next) if (d->file->intermediate) { enum update_status new; int dontcare = 0; FILE_TIMESTAMP mtime = file_mtime (d->file); check_renamed (d->file); d->file->parent = file; /* Inherit dontcare flag from our parent. */ if (rebuilding_makefiles) { dontcare = d->file->dontcare; d->file->dontcare = file->dontcare; } /* We may have already considered this file, when we didn't know we'd need to update it. Force update_file() to consider it and not prune it. */ d->file->considered = 0; new = update_file (d->file, depth); if (new > dep_status) dep_status = new; /* Restore original dontcare flag. */ if (rebuilding_makefiles) d->file->dontcare = dontcare; check_renamed (d->file); { struct file *f = d->file; if (f->double_colon) f = f->double_colon; do { running |= (f->command_state == cs_running || f->command_state == cs_deps_running); f = f->prev; } while (f != 0); } if (dep_status && !keep_going_flag) break; if (!running) d->changed = ((file->phony && file->cmds != 0) || file_mtime (d->file) != mtime); } } finish_updating (file); finish_updating (ofile); DBF (DB_VERBOSE, _("Finished prerequisites of target file '%s'.\n")); if (running) { set_command_state (file, cs_deps_running); --depth; DBF (DB_VERBOSE, _("The prerequisites of '%s' are being made.\n")); return 0; } /* If any dependency failed, give up now. */ if (dep_status) { /* I'm not sure if we can't just assign dep_status... */ file->update_status = dep_status == us_none ? us_failed : dep_status; notice_finished_file (file); --depth; DBF (DB_VERBOSE, _("Giving up on target file '%s'.\n")); if (depth == 0 && keep_going_flag && !just_print_flag && !question_flag) OS (error, NILF, _("Target '%s' not remade because of errors."), file->name); return dep_status; } if (file->command_state == cs_deps_running) /* The commands for some deps were running on the last iteration, but they have finished now. Reset the command_state to not_started to simplify later bookkeeping. It is important that we do this only when the prior state was cs_deps_running, because that prior state was definitely propagated to FILE's also_make's by set_command_state (called above), but in another state an also_make may have independently changed to finished state, and we would confuse that file's bookkeeping (updated, but not_started is bogus state). */ set_command_state (file, cs_not_started); /* Now record which prerequisites are more recent than this file, so we can define $?. */ deps_changed = 0; for (d = file->deps; d != 0; d = d->next) { FILE_TIMESTAMP d_mtime = file_mtime (d->file); check_renamed (d->file); if (! d->ignore_mtime) { #if 1 /* %%% In version 4, remove this code completely to implement not remaking deps if their deps are newer than their parents. */ if (d_mtime == NONEXISTENT_MTIME && !d->file->intermediate) /* We must remake if this dep does not exist and is not intermediate. */ must_make = 1; #endif /* Set DEPS_CHANGED if this dep actually changed. */ deps_changed |= d->changed; } /* Set D->changed if either this dep actually changed, or its dependent, FILE, is older or does not exist. */ d->changed |= noexist || d_mtime > this_mtime; if (!noexist && ISDB (DB_BASIC|DB_VERBOSE)) { const char *fmt = 0; if (d->ignore_mtime) { if (ISDB (DB_VERBOSE)) fmt = _("Prerequisite '%s' is order-only for target '%s'.\n"); } else if (d_mtime == NONEXISTENT_MTIME) { if (ISDB (DB_BASIC)) fmt = _("Prerequisite '%s' of target '%s' does not exist.\n"); } else if (d->changed) { if (ISDB (DB_BASIC)) fmt = _("Prerequisite '%s' is newer than target '%s'.\n"); } else if (ISDB (DB_VERBOSE)) fmt = _("Prerequisite '%s' is older than target '%s'.\n"); if (fmt) { print_spaces (depth); printf (fmt, dep_name (d), file->name); fflush (stdout); } } } /* Here depth returns to the value it had when we were called. */ depth--; if (file->double_colon && file->deps == 0) { must_make = 1; DBF (DB_BASIC, _("Target '%s' is double-colon and has no prerequisites.\n")); } else if (!noexist && file->is_target && !deps_changed && file->cmds == 0 && !always_make_flag) { must_make = 0; DBF (DB_VERBOSE, _("No recipe for '%s' and no prerequisites actually changed.\n")); } else if (!must_make && file->cmds != 0 && always_make_flag) { must_make = 1; DBF (DB_VERBOSE, _("Making '%s' due to always-make flag.\n")); } if (!must_make) { if (ISDB (DB_VERBOSE)) { print_spaces (depth); printf (_("No need to remake target '%s'"), file->name); if (!streq (file->name, file->hname)) printf (_("; using VPATH name '%s'"), file->hname); puts ("."); fflush (stdout); } notice_finished_file (file); /* Since we don't need to remake the file, convert it to use the VPATH filename if we found one. hfile will be either the local name if no VPATH or the VPATH name if one was found. */ while (file) { file->name = file->hname; file = file->prev; } return 0; } DBF (DB_BASIC, _("Must remake target '%s'.\n")); /* It needs to be remade. If it's VPATH and not reset via GPATH, toss the VPATH. */ if (!streq (file->name, file->hname)) { DB (DB_BASIC, (_(" Ignoring VPATH name '%s'.\n"), file->hname)); file->ignore_vpath = 1; } /* Now, take appropriate actions to remake the file. */ remake_file (file); if (file->command_state != cs_finished) { DBF (DB_VERBOSE, _("Recipe of '%s' is being run.\n")); return 0; } switch (file->update_status) { case us_failed: DBF (DB_BASIC, _("Failed to remake target file '%s'.\n")); break; case us_success: DBF (DB_BASIC, _("Successfully remade target file '%s'.\n")); break; case us_question: DBF (DB_BASIC, _("Target file '%s' needs to be remade under -q.\n")); break; case us_none: break; } file->updated = 1; return file->update_status; } /* Set FILE's 'updated' flag and re-check its mtime and the mtime's of all files listed in its 'also_make' member. Under -t, this function also touches FILE. On return, FILE->update_status will no longer be us_none if it was. */ void notice_finished_file (struct file *file) { struct dep *d; int ran = file->command_state == cs_running; int touched = 0; file->command_state = cs_finished; file->updated = 1; if (touch_flag /* The update status will be: us_success if 0 or more commands (+ or ${MAKE}) were run and won; us_none if this target was not remade; >us_none if some commands were run and lost. We touch the target if it has commands which either were not run or won when they ran (i.e. status is 0). */ && file->update_status == us_success) { if (file->cmds != 0 && file->cmds->any_recurse) { /* If all the command lines were recursive, we don't want to do the touching. */ unsigned int i; for (i = 0; i < file->cmds->ncommand_lines; ++i) if (!(file->cmds->lines_flags[i] & COMMANDS_RECURSE)) goto have_nonrecursing; } else { have_nonrecursing: if (file->phony) file->update_status = us_success; /* According to POSIX, -t doesn't affect targets with no cmds. */ else if (file->cmds != 0) { /* Should set file's modification date and do nothing else. */ file->update_status = touch_file (file); /* Pretend we ran a real touch command, to suppress the "'foo' is up to date" message. */ commands_started++; /* Request for the timestamp to be updated (and distributed to the double-colon entries). Simply setting ran=1 would almost have done the trick, but messes up with the also_make updating logic below. */ touched = 1; } } } if (file->mtime_before_update == UNKNOWN_MTIME) file->mtime_before_update = file->last_mtime; if ((ran && !file->phony) || touched) { int i = 0; /* If -n, -t, or -q and all the commands are recursive, we ran them so really check the target's mtime again. Otherwise, assume the target would have been updated. */ if ((question_flag || just_print_flag || touch_flag) && file->cmds) { for (i = file->cmds->ncommand_lines; i > 0; --i) if (! (file->cmds->lines_flags[i-1] & COMMANDS_RECURSE)) break; } /* If there were no commands at all, it's always new. */ else if (file->is_target && file->cmds == 0) i = 1; file->last_mtime = i == 0 ? UNKNOWN_MTIME : NEW_MTIME; } if (file->double_colon) { /* If this is a double colon rule and it is the last one to be updated, propagate the change of modification time to all the double-colon entries for this file. We do it on the last update because it is important to handle individual entries as separate rules with separate timestamps while they are treated as targets and then as one rule with the unified timestamp when they are considered as a prerequisite of some target. */ struct file *f; FILE_TIMESTAMP max_mtime = file->last_mtime; /* Check that all rules were updated and at the same time find the max timestamp. We assume UNKNOWN_MTIME is newer then any other value. */ for (f = file->double_colon; f != 0 && f->updated; f = f->prev) if (max_mtime != UNKNOWN_MTIME && (f->last_mtime == UNKNOWN_MTIME || f->last_mtime > max_mtime)) max_mtime = f->last_mtime; if (f == 0) for (f = file->double_colon; f != 0; f = f->prev) f->last_mtime = max_mtime; } if (ran && file->update_status != us_none) /* We actually tried to update FILE, which has updated its also_make's as well (if it worked). If it didn't work, it wouldn't work again for them. So mark them as updated with the same status. */ for (d = file->also_make; d != 0; d = d->next) { d->file->command_state = cs_finished; d->file->updated = 1; d->file->update_status = file->update_status; if (ran && !d->file->phony) /* Fetch the new modification time. We do this instead of just invalidating the cached time so that a vpath_search can happen. Otherwise, it would never be done because the target is already updated. */ f_mtime (d->file, 0); } else if (file->update_status == us_none) /* Nothing was done for FILE, but it needed nothing done. So mark it now as "succeeded". */ file->update_status = us_success; } /* Check whether another file (whose mtime is THIS_MTIME) needs updating on account of a dependency which is file FILE. If it does, store 1 in *MUST_MAKE_PTR. In the process, update any non-intermediate files that FILE depends on (including FILE itself). Return nonzero if any updating failed. */ static enum update_status check_dep (struct file *file, unsigned int depth, FILE_TIMESTAMP this_mtime, int *must_make_ptr) { struct file *ofile; struct dep *d; enum update_status dep_status = us_success; ++depth; start_updating (file); /* We might change file if we find a different one via vpath; remember this one to turn off updating. */ ofile = file; if (file->phony || !file->intermediate) { /* If this is a non-intermediate file, update it and record whether it is newer than THIS_MTIME. */ FILE_TIMESTAMP mtime; dep_status = update_file (file, depth); check_renamed (file); mtime = file_mtime (file); check_renamed (file); if (mtime == NONEXISTENT_MTIME || mtime > this_mtime) *must_make_ptr = 1; } else { /* FILE is an intermediate file. */ FILE_TIMESTAMP mtime; if (!file->phony && file->cmds == 0 && !file->tried_implicit) { if (try_implicit_rule (file, depth)) DBF (DB_IMPLICIT, _("Found an implicit rule for '%s'.\n")); else DBF (DB_IMPLICIT, _("No implicit rule found for '%s'.\n")); file->tried_implicit = 1; } if (file->cmds == 0 && !file->is_target && default_file != 0 && default_file->cmds != 0) { DBF (DB_IMPLICIT, _("Using default commands for '%s'.\n")); file->cmds = default_file->cmds; } check_renamed (file); mtime = file_mtime (file); check_renamed (file); if (mtime != NONEXISTENT_MTIME && mtime > this_mtime) /* If the intermediate file actually exists and is newer, then we should remake from it. */ *must_make_ptr = 1; else { /* Otherwise, update all non-intermediate files we depend on, if necessary, and see whether any of them is more recent than the file on whose behalf we are checking. */ struct dep *ld; int deps_running = 0; /* If this target is not running, set it's state so that we check it fresh. It could be it was checked as part of an order-only prerequisite and so wasn't rebuilt then, but should be now. */ if (file->command_state != cs_running) { /* If the target was waiting for a dependency it has to be reconsidered, as that dependency might have finished. */ if (file->command_state == cs_deps_running) file->considered = 0; set_command_state (file, cs_not_started); } ld = 0; d = file->deps; while (d != 0) { enum update_status new; int maybe_make; if (is_updating (d->file)) { OSS (error, NILF, _("Circular %s <- %s dependency dropped."), file->name, d->file->name); if (ld == 0) { file->deps = d->next; free_dep (d); d = file->deps; } else { ld->next = d->next; free_dep (d); d = ld->next; } continue; } d->file->parent = file; maybe_make = *must_make_ptr; new = check_dep (d->file, depth, this_mtime, &maybe_make); if (new > dep_status) dep_status = new; if (! d->ignore_mtime) *must_make_ptr = maybe_make; check_renamed (d->file); if (dep_status && !keep_going_flag) break; if (d->file->command_state == cs_running || d->file->command_state == cs_deps_running) deps_running = 1; ld = d; d = d->next; } if (deps_running) /* Record that some of FILE's deps are still being made. This tells the upper levels to wait on processing it until the commands are finished. */ set_command_state (file, cs_deps_running); } } finish_updating (file); finish_updating (ofile); return dep_status; } /* Touch FILE. Return us_success if successful, us_failed if not. */ #define TOUCH_ERROR(call) do{ perror_with_name ((call), file->name); \ return us_failed; }while(0) static enum update_status touch_file (struct file *file) { if (!run_silent) OS (message, 0, "touch %s", file->name); /* Print-only (-n) takes precedence over touch (-t). */ if (just_print_flag) return us_success; #ifndef NO_ARCHIVES if (ar_name (file->name)) return ar_touch (file->name) ? us_failed : us_success; else #endif { int fd; EINTRLOOP (fd, open (file->name, O_RDWR | O_CREAT, 0666)); if (fd < 0) TOUCH_ERROR ("touch: open: "); else { struct stat statbuf; char buf = 'x'; int e; EINTRLOOP (e, fstat (fd, &statbuf)); if (e < 0) TOUCH_ERROR ("touch: fstat: "); /* Rewrite character 0 same as it already is. */ EINTRLOOP (e, read (fd, &buf, 1)); if (e < 0) TOUCH_ERROR ("touch: read: "); { 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 (statbuf.st_size == 0) { (void) close (fd); EINTRLOOP (fd, open (file->name, O_RDWR | O_TRUNC, 0666)); if (fd < 0) TOUCH_ERROR ("touch: open: "); } (void) close (fd); } } return us_success; } /* Having checked and updated the dependencies of FILE, do whatever is appropriate to remake FILE itself. Return the status from executing FILE's commands. */ static void remake_file (struct file *file) { if (file->cmds == 0) { if (file->phony) /* Phony target. Pretend it succeeded. */ file->update_status = us_success; else if (file->is_target) /* This is a nonexistent target file we cannot make. Pretend it was successfully remade. */ file->update_status = us_success; else { /* This is a dependency file we cannot remake. Fail. */ if (!rebuilding_makefiles || !file->dontcare) complain (file); file->update_status = us_failed; } } else { chop_commands (file->cmds); /* The normal case: start some commands. */ if (!touch_flag || file->cmds->any_recurse) { execute_file_commands (file); return; } /* This tells notice_finished_file it is ok to touch the file. */ file->update_status = us_success; } /* This does the touching under -t. */ notice_finished_file (file); } /* Return the mtime of a file, given a 'struct file'. Caches the time in the struct file to avoid excess stat calls. If the file is not found, and SEARCH is nonzero, VPATH searching and replacement is done. If that fails, a library (-lLIBNAME) is tried and the library's actual name (/lib/libLIBNAME.a, etc.) is substituted into FILE. */ FILE_TIMESTAMP f_mtime (struct file *file, int search) { FILE_TIMESTAMP mtime; unsigned int propagate_timestamp; /* File's mtime is not known; must get it from the system. */ #ifndef NO_ARCHIVES if (ar_name (file->name)) { /* This file is an archive-member reference. */ char *arname, *memname; struct file *arfile; time_t member_date; /* Find the archive's name. */ ar_parse_name (file->name, &arname, &memname); /* Find the modification time of the archive itself. Also allow for its name to be changed via VPATH search. */ arfile = lookup_file (arname); if (arfile == 0) arfile = enter_file (strcache_add (arname)); mtime = f_mtime (arfile, search); check_renamed (arfile); if (search && strcmp (arfile->hname, arname)) { /* The archive's name has changed. Change the archive-member reference accordingly. */ char *name; size_t arlen, memlen; arlen = strlen (arfile->hname); memlen = strlen (memname); name = alloca (arlen + 1 + memlen + 2); memcpy (name, arfile->hname, arlen); name[arlen] = '('; memcpy (name + arlen + 1, memname, memlen); name[arlen + 1 + memlen] = ')'; name[arlen + 1 + memlen + 1] = '\0'; /* If the archive was found with GPATH, make the change permanent; otherwise defer it until later. */ if (arfile->name == arfile->hname) rename_file (file, strcache_add (name)); else rehash_file (file, strcache_add (name)); check_renamed (file); } free (arname); file->low_resolution_time = 1; if (mtime == NONEXISTENT_MTIME) /* The archive doesn't exist, so its members don't exist either. */ return NONEXISTENT_MTIME; member_date = ar_member_date (file->hname); mtime = (member_date == (time_t) -1 ? NONEXISTENT_MTIME : file_timestamp_cons (file->hname, member_date, 0)); } else #endif { mtime = name_mtime (file->name); if (mtime == NONEXISTENT_MTIME && search && !file->ignore_vpath) { /* If name_mtime failed, search VPATH. */ const char *name = vpath_search (file->name, &mtime, NULL, NULL); if (name /* Last resort, is it a library (-lxxx)? */ || (file->name[0] == '-' && file->name[1] == 'l' && (name = library_search (file->name, &mtime)) != 0)) { size_t 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. */ file->last_mtime = mtime; /* 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. */ #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); return file_mtime (file); } rehash_file (file, name); check_renamed (file); /* If the result of a vpath search is -o or -W, preserve it. Otherwise, find the mtime of the resulting file. */ if (mtime != OLD_MTIME && mtime != NEW_MTIME) mtime = name_mtime (name); } } } /* Files can have bogus timestamps that nothing newly made will be "newer" than. Updating their dependents could just result in loops. So notify the user of the anomaly with a warning. We only need to do this once, for now. */ if (!clock_skew_detected && mtime != NONEXISTENT_MTIME && mtime != NEW_MTIME && !file->updated) { static FILE_TIMESTAMP adjusted_now; FILE_TIMESTAMP adjusted_mtime = mtime; #if defined(WINDOWS32) || defined(__MSDOS__) /* Experimentation has shown that FAT filesystems can set file times up to 3 seconds into the future! Play it safe. */ #define FAT_ADJ_OFFSET (FILE_TIMESTAMP) 3 FILE_TIMESTAMP adjustment = FAT_ADJ_OFFSET << FILE_TIMESTAMP_LO_BITS; if (ORDINARY_MTIME_MIN + adjustment <= adjusted_mtime) adjusted_mtime -= adjustment; #elif defined(__EMX__) /* FAT filesystems round time to the nearest even second! Allow for any file (NTFS or FAT) to perhaps suffer from this brain damage. */ FILE_TIMESTAMP adjustment = (((FILE_TIMESTAMP_S (adjusted_mtime) & 1) == 0 && FILE_TIMESTAMP_NS (adjusted_mtime) == 0) ? (FILE_TIMESTAMP) 1 << FILE_TIMESTAMP_LO_BITS : 0); #endif /* If the file's time appears to be in the future, update our concept of the present and try once more. */ if (adjusted_now < adjusted_mtime) { int resolution; FILE_TIMESTAMP now = file_timestamp_now (&resolution); adjusted_now = now + (resolution - 1); if (adjusted_now < adjusted_mtime) { double from_now = (FILE_TIMESTAMP_S (mtime) - FILE_TIMESTAMP_S (now) + ((FILE_TIMESTAMP_NS (mtime) - FILE_TIMESTAMP_NS (now)) / 1e9)); char from_now_string[100]; if (from_now >= 99 && from_now <= ULONG_MAX) sprintf (from_now_string, "%lu", (unsigned long) from_now); else sprintf (from_now_string, "%.2g", from_now); OSS (error, NILF, _("Warning: File '%s' has modification time %s s in the future"), file->name, from_now_string); clock_skew_detected = 1; } } } /* 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 made so by the .INTERMEDIATE target. If this file has never been built by us but was found now, it existed before make started. So, turn off the intermediate bit so make doesn't delete it, since it didn't create it. */ if (mtime != NONEXISTENT_MTIME && file->command_state == cs_not_started && !file->tried_implicit && file->intermediate) file->intermediate = 0; if (file->updated == propagate_timestamp) file->last_mtime = mtime; file = file->prev; } while (file != 0); return mtime; } /* Return the mtime of the file or archive-member reference NAME. */ /* First, we check with stat(). If the file does not exist, then we return NONEXISTENT_MTIME. If it does, and the symlink check flag is set, then examine each indirection of the symlink and find the newest mtime. This causes one duplicate stat() when -L is being used, but the code is much cleaner. */ static FILE_TIMESTAMP name_mtime (const char *name) { FILE_TIMESTAMP mtime; struct stat st; int e; #if defined(WINDOWS32) { char tem[MAXPATHLEN], *tstart, *tend; const char *p = name + strlen (name); /* Remove any trailing slashes and "."/"..". MS-Windows stat fails on valid directories if NAME ends in a slash, and we need to emulate the Posix behavior where stat on "foo/" or "foo/." succeeds ONLY if "foo" is a directory. */ if (p > name) { memcpy (tem, name, p - name + 1); tstart = tem; if (tstart[1] == ':') tstart += 2; tend = tem + (p - name - 1); if (*tend == '.' && tend > tstart) tend--; if (*tend == '.' && tend > tstart) tend--; for ( ; tend > tstart && (*tend == '/' || *tend == '\\'); tend--) *tend = '\0'; } else { tem[0] = '\0'; tend = &tem[0]; } e = stat (tem, &st); if (e == 0 && !_S_ISDIR (st.st_mode) && tend < tem + (p - name - 1)) { errno = ENOTDIR; e = -1; } } #else EINTRLOOP (e, stat (name, &st)); #endif if (e == 0) mtime = FILE_TIMESTAMP_STAT_MODTIME (name, st); else if (errno == ENOENT || errno == ENOTDIR) mtime = NONEXISTENT_MTIME; else { perror_with_name ("stat: ", name); return NONEXISTENT_MTIME; } /* If we get here we either found it, or it doesn't exist. If it doesn't exist see if we can use a symlink mtime instead. */ #ifdef MAKE_SYMLINKS #ifndef S_ISLNK # define S_ISLNK(_m) (((_m)&S_IFMT)==S_IFLNK) #endif if (check_symlink_flag && strlen (name) <= GET_PATH_MAX) { PATH_VAR (lpath); /* Check each symbolic link segment (if any). Find the latest mtime amongst all of them (and the target file of course). Note that we have already successfully dereferenced all the links above. So, if we run into any error trying to lstat(), or readlink(), or whatever, something bizarre-o happened. Just give up and use whatever mtime we've already computed at that point. */ strcpy (lpath, name); while (1) { FILE_TIMESTAMP ltime; PATH_VAR (lbuf); long llen; char *p; EINTRLOOP (e, lstat (lpath, &st)); if (e) { /* Just take what we have so far. */ if (errno != ENOENT && errno != ENOTDIR) perror_with_name ("lstat: ", lpath); break; } /* If this is not a symlink, we're done (we started with the real file's mtime so we don't need to test it again). */ if (!S_ISLNK (st.st_mode)) break; /* If this mtime is newer than what we had, keep the new one. */ ltime = FILE_TIMESTAMP_STAT_MODTIME (lpath, st); if (ltime > mtime) mtime = ltime; /* Set up to check the file pointed to by this link. */ EINTRLOOP (llen, readlink (lpath, lbuf, GET_PATH_MAX)); if (llen < 0) { /* Eh? Just take what we have. */ perror_with_name ("readlink: ", lpath); break; } lbuf[llen] = '\0'; /* If the target is fully-qualified or the source is just a filename, then the new path is the target. Otherwise it's the source directory plus the target. */ if (lbuf[0] == '/' || (p = strrchr (lpath, '/')) == NULL) strcpy (lpath, lbuf); else if ((p - lpath) + llen + 2 > GET_PATH_MAX) /* Eh? Path too long! Again, just go with what we have. */ break; else /* Create the next step in the symlink chain. */ strcpy (p+1, lbuf); } } #endif return mtime; } /* Search for a library file specified as -lLIBNAME, searching for a suitable library file in the system library directories and the VPATH directories. */ static const char * library_search (const char *lib, FILE_TIMESTAMP *mtime_ptr) { static const char *dirs[] = { #ifndef _AMIGA "/lib", "/usr/lib", #endif #if defined(WINDOWS32) && !defined(LIBDIR) /* * This is completely up to the user at product install time. Just define * a placeholder. */ #define LIBDIR "." #endif LIBDIR, /* Defined by configuration. */ 0 }; const char *file = 0; char *libpatterns; FILE_TIMESTAMP mtime; /* Loop variables for the libpatterns value. */ char *p; const char *p2; size_t len; size_t liblen; /* Information about the earliest (in the vpath sequence) match. */ unsigned int best_vpath = 0, best_path = 0; const char **dp; libpatterns = xstrdup (variable_expand ("$(.LIBPATTERNS)")); /* Skip the '-l'. */ lib += 2; liblen = strlen (lib); /* Loop through all the patterns in .LIBPATTERNS, and search on each one. To implement the linker-compatible behavior we have to search through all entries in .LIBPATTERNS and choose the "earliest" one. */ p2 = libpatterns; while ((p = find_next_token (&p2, &len)) != 0) { static char *buf = NULL; static size_t buflen = 0; static size_t libdir_maxlen = 0; static unsigned int std_dirs = 0; char *libbuf = variable_expand (""); /* Expand the pattern using LIB as a replacement. */ { char c = p[len]; char *p3, *p4; p[len] = '\0'; p3 = find_percent (p); if (!p3) { /* Give a warning if there is no pattern. */ OS (error, NILF, _(".LIBPATTERNS element '%s' is not a pattern"), p); p[len] = c; continue; } p4 = variable_buffer_output (libbuf, p, p3-p); p4 = variable_buffer_output (p4, lib, liblen); p4 = variable_buffer_output (p4, p3+1, len - (p3-p)); p[len] = c; } /* Look first for 'libNAME.a' in the current directory. */ mtime = name_mtime (libbuf); if (mtime != NONEXISTENT_MTIME) { if (mtime_ptr != 0) *mtime_ptr = mtime; file = strcache_add (libbuf); /* This by definition will have the best index, so stop now. */ break; } /* Now try VPATH search on that. */ { unsigned int vpath_index, path_index; const char* f = vpath_search (libbuf, mtime_ptr ? &mtime : NULL, &vpath_index, &path_index); if (f) { /* If we have a better match, record it. */ if (file == 0 || vpath_index < best_vpath || (vpath_index == best_vpath && path_index < best_path)) { file = f; best_vpath = vpath_index; best_path = path_index; if (mtime_ptr != 0) *mtime_ptr = mtime; } } } /* Now try the standard set of directories. */ if (!buflen) { for (dp = dirs; *dp != 0; ++dp) { size_t l = strlen (*dp); if (l > libdir_maxlen) libdir_maxlen = l; std_dirs++; } buflen = strlen (libbuf); buf = xmalloc (libdir_maxlen + buflen + 2); } else if (buflen < strlen (libbuf)) { buflen = strlen (libbuf); buf = xrealloc (buf, libdir_maxlen + buflen + 2); } { /* Use the last std_dirs index for standard directories. This was it will always be greater than the VPATH index. */ unsigned int vpath_index = ~((unsigned int)0) - std_dirs; for (dp = dirs; *dp != 0; ++dp) { sprintf (buf, "%s/%s", *dp, libbuf); mtime = name_mtime (buf); if (mtime != NONEXISTENT_MTIME) { if (file == 0 || vpath_index < best_vpath) { file = strcache_add (buf); best_vpath = vpath_index; if (mtime_ptr != 0) *mtime_ptr = mtime; } } vpath_index++; } } } free (libpatterns); return file; } make-4.3/src/dep.h0000644000175000017500000001142013611136373010730 00000000000000/* Definitions of dependency data structures for GNU Make. Copyright (C) 1988-2020 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 . */ /* 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 '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. */ #define RM_DONTCARE (1 << 2) /* No error if it doesn't exist. */ #define RM_NO_TILDE (1 << 3) /* Don't expand ~ in file name. */ #define RM_NOFLAG 0 /* Structure representing one dependency of a file. 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 int flags : 8; \ unsigned int changed : 1; \ unsigned int ignore_mtime : 1; \ unsigned int staticpattern : 1; \ unsigned int need_2nd_expansion : 1; \ unsigned int ignore_automatic_vars : 1 struct dep { 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. */ struct goaldep { DEP (struct goaldep); int error; floc floc; }; /* Options for parsing lists of filenames. */ #define PARSEFS_NONE 0x0000 #define PARSEFS_NOSTRIP 0x0001 #define PARSEFS_NOAR 0x0002 #define PARSEFS_NOGLOB 0x0004 #define PARSEFS_EXISTS 0x0008 #define PARSEFS_NOCACHE 0x0010 #define PARSEFS_ONEWORD 0x0020 #define PARSE_FILE_SEQ(_s,_t,_c,_p,_f) \ (_t *)parse_file_seq ((_s),sizeof (_t),(_c),(_p),(_f)) #define PARSE_SIMPLE_SEQ(_s,_t) \ (_t *)parse_file_seq ((_s),sizeof (_t),MAP_NUL,NULL,PARSEFS_NONE) #ifdef VMS void *parse_file_seq (); #else void *parse_file_seq (char **stringp, size_t size, int stopmap, const char *prefix, int flags); #endif char *tilde_expand (const char *name); #ifndef NO_ARCHIVES struct nameseq *ar_glob (const char *arname, const char *member_pattern, size_t size); #endif #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__) && !defined(__STRICT_ANSI__) /* 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); } 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); 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); make-4.3/src/expand.c0000644000175000017500000004317413603564437011454 00000000000000/* Variable expansion functions for GNU Make. Copyright (C) 1988-2020 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 . */ #include "makeint.h" #include #include "filedef.h" #include "job.h" #include "commands.h" #include "variable.h" #include "rule.h" /* Initially, any errors reported when expanding strings will be reported against the file where the error appears. */ 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 makefile. It is made bigger with realloc whenever it is too small. variable_buffer_length is the size currently allocated. variable_buffer is the address of the buffer. For efficiency, it's guaranteed that the buffer will always have VARIABLE_BUFFER_ZONE extra bytes allocated. This allows you to add a few extra chars without having to call a function. Note you should never use these bytes unless you're _sure_ you have room (you know when the buffer length was last checked. */ #define VARIABLE_BUFFER_ZONE 5 static size_t variable_buffer_length; char *variable_buffer; /* Subroutine of variable_expand and friends: The text to add is LENGTH chars starting at STRING to the variable_buffer. The text is added to the buffer at PTR, and the updated pointer into the buffer is returned as the value. Thus, the value returned by each call to variable_buffer_output should be the first argument to the following call. */ char * variable_buffer_output (char *ptr, const char *string, size_t length) { size_t newlen = length + (ptr - variable_buffer); if ((newlen + VARIABLE_BUFFER_ZONE) > variable_buffer_length) { size_t offset = ptr - variable_buffer; variable_buffer_length = (newlen + 100 > 2 * variable_buffer_length ? newlen + 100 : 2 * variable_buffer_length); variable_buffer = xrealloc (variable_buffer, variable_buffer_length); ptr = variable_buffer + offset; } memcpy (ptr, string, length); return ptr + length; } /* Return a pointer to the beginning of the variable buffer. */ static char * initialize_variable_output (void) { /* If we don't have a variable output buffer yet, get one. */ if (variable_buffer == 0) { variable_buffer_length = 200; variable_buffer = xmalloc (variable_buffer_length); variable_buffer[0] = '\0'; } return variable_buffer; } /* Recursively expand V. The returned string is malloc'd. */ static char *allocated_variable_append (const struct variable *v); char * recursively_expand_for_file (struct variable *v, struct file *file) { char *value; const floc *this_var; const floc **saved_varp; struct variable_set_list *save = 0; int set_reading = 0; /* Don't install a new location if this location is empty. This can happen for command-line variables, builtin variables, etc. */ saved_varp = expanding_var; if (v->fileinfo.filenm) { this_var = &v->fileinfo; expanding_var = &this_var; } /* If we have no other file-reading context, use the variable's context. */ if (!reading_file) { set_reading = 1; reading_file = &v->fileinfo; } if (v->expanding) { if (!v->exp_count) /* Expanding V causes infinite recursion. Lose. */ OS (fatal, *expanding_var, _("Recursive variable '%s' references itself (eventually)"), v->name); --v->exp_count; } if (file) { save = current_variable_set_list; current_variable_set_list = file->variables; } v->expanding = 1; if (v->append) value = allocated_variable_append (v); else value = allocated_variable_expand (v->value); v->expanding = 0; if (set_reading) reading_file = 0; if (file) current_variable_set_list = save; expanding_var = saved_varp; return value; } /* Expand a simple reference to variable NAME, which is LENGTH chars long. */ #ifdef __GNUC__ __inline #endif static char * reference_variable (char *o, const char *name, size_t length) { struct variable *v; char *value; v = lookup_variable (name, length); if (v == 0) warn_undefined (name, length); /* If there's no variable by that name or it has no value, stop now. */ if (v == 0 || (*v->value == '\0' && !v->append)) return o; value = (v->recursive ? recursively_expand (v) : v->value); o = variable_buffer_output (o, value, strlen (value)); if (v->recursive) free (value); return o; } /* Scan STRING for variable references and expansion-function calls. Only LENGTH bytes of STRING are actually scanned. If LENGTH is -1, scan until a null byte is found. Write the results to LINE, which must point into 'variable_buffer'. If LINE is NULL, start at the beginning of the buffer. Return a pointer to LINE, or to the beginning of the buffer if LINE is NULL. */ char * variable_expand_string (char *line, const char *string, size_t length) { struct variable *v; const char *p, *p1; char *save; char *o; size_t line_offset; if (!line) line = initialize_variable_output (); o = line; line_offset = line - variable_buffer; if (length == 0) { variable_buffer_output (o, "", 1); return (variable_buffer); } /* We need a copy of STRING: due to eval, it's possible that it will get freed as we process it (it might be the value of a variable that's reset for example). Also having a nil-terminated string is handy. */ save = length == SIZE_MAX ? xstrdup (string) : xstrndup (string, length); p = save; while (1) { /* Copy all following uninteresting chars all at once to the variable output buffer, and skip them. Uninteresting chars end at the next $ or the end of the input. */ p1 = strchr (p, '$'); o = variable_buffer_output (o, p, p1 != 0 ? (size_t) (p1 - p) : strlen (p) + 1); if (p1 == 0) break; p = p1 + 1; /* Dispatch on the char that follows the $. */ switch (*p) { case '$': 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 '(': case '{': /* $(...) or ${...} is the general case of substitution. */ { char openparen = *p; char closeparen = (openparen == '(') ? ')' : '}'; const char *begp; const char *beg = p + 1; char *op; char *abeg = NULL; const char *end, *colon; op = o; begp = p; if (handle_function (&op, &begp)) { o = op; p = begp; break; } /* Is there a variable reference inside the parens or braces? If so, expand it before expanding the entire reference. */ end = strchr (beg, closeparen); if (end == 0) /* Unterminated variable reference. */ O (fatal, *expanding_var, _("unterminated variable reference")); p1 = lindex (beg, end, '$'); if (p1 != 0) { /* BEG now points past the opening paren or brace. Count parens or braces until it is matched. */ int count = 0; for (p = beg; *p != '\0'; ++p) { if (*p == openparen) ++count; else if (*p == closeparen && --count < 0) break; } /* If COUNT is >= 0, there were unmatched opening parens or braces, so we go to the simple case of a variable name such as '$($(a)'. */ if (count < 0) { abeg = expand_argument (beg, p); /* Expand the name. */ beg = abeg; end = strchr (beg, '\0'); } } else /* Advance P to the end of this reference. After we are finished expanding this one, P will be incremented to continue the scan. */ p = end; /* This is not a reference to a built-in function and any variable references inside are now expanded. Is the resultant text a substitution reference? */ colon = lindex (beg, end, ':'); if (colon) { /* This looks like a substitution reference: $(FOO:A=B). */ const char *subst_beg = colon + 1; const char *subst_end = lindex (subst_beg, end, '='); if (subst_end == 0) /* There is no = in sight. Punt on the substitution reference and treat this as a variable name containing a colon, in the code below. */ colon = 0; else { const char *replace_beg = subst_end + 1; const char *replace_end = end; /* Extract the variable name before the colon and look up that variable. */ v = lookup_variable (beg, colon - beg); if (v == 0) warn_undefined (beg, colon - beg); /* If the variable is not empty, perform the substitution. */ if (v != 0 && *v->value != '\0') { char *pattern, *replace, *ppercent, *rpercent; char *value = (v->recursive ? recursively_expand (v) : v->value); /* Copy the pattern and the replacement. Add in an extra % at the beginning to use in case there isn't one in the pattern. */ pattern = alloca (subst_end - subst_beg + 2); *(pattern++) = '%'; memcpy (pattern, subst_beg, subst_end - subst_beg); pattern[subst_end - subst_beg] = '\0'; replace = alloca (replace_end - replace_beg + 2); *(replace++) = '%'; memcpy (replace, replace_beg, replace_end - replace_beg); replace[replace_end - replace_beg] = '\0'; /* Look for %. Set the percent pointers properly based on whether we find one or not. */ ppercent = find_percent (pattern); if (ppercent) { ++ppercent; rpercent = find_percent (replace); if (rpercent) ++rpercent; } else { ppercent = pattern; rpercent = replace; --pattern; --replace; } o = patsubst_expand_pat (o, value, pattern, replace, ppercent, rpercent); if (v->recursive) free (value); } } } if (colon == 0) /* This is an ordinary variable reference. Look up the value of the variable. */ o = reference_variable (o, beg, end - beg); free (abeg); } break; default: if (ISSPACE (p[-1])) break; /* A $ followed by a random char is a variable reference: $a is equivalent to $(a). */ o = reference_variable (o, p, 1); break; } if (*p == '\0') break; ++p; } free (save); variable_buffer_output (o, "", 1); return (variable_buffer + line_offset); } /* Scan LINE for variable references and expansion-function calls. Build in 'variable_buffer' the result of expanding the references and calls. Return the address of the resulting string, which is null-terminated and is valid only until the next time this function is called. */ char * variable_expand (const char *line) { return variable_expand_string (NULL, line, SIZE_MAX); } /* Expand an argument for an expansion function. The text starting at STR and ending at END is variable-expanded into a null-terminated string that is returned as the value. This is done without clobbering 'variable_buffer' or the current variable-expansion that is in progress. */ char * expand_argument (const char *str, const char *end) { char *tmp, *alloc = NULL; char *r; if (str == end) return xstrdup (""); if (!end || *end == '\0') return allocated_variable_expand (str); if (end - str + 1 > 1000) tmp = alloc = xmalloc (end - str + 1); else tmp = alloca (end - str + 1); memcpy (tmp, str, end - str); tmp[end - str] = '\0'; r = allocated_variable_expand (tmp); free (alloc); return r; } /* Expand LINE for FILE. Error messages refer to the file and line where FILE's commands were found. Expansion uses FILE's variable set list. */ char * variable_expand_for_file (const char *line, struct file *file) { char *result; struct variable_set_list *savev; const floc *savef; if (file == 0) return variable_expand (line); savev = current_variable_set_list; current_variable_set_list = file->variables; savef = reading_file; if (file->cmds && file->cmds->fileinfo.filenm) reading_file = &file->cmds->fileinfo; else reading_file = 0; result = variable_expand (line); current_variable_set_list = savev; reading_file = savef; return result; } /* Like allocated_variable_expand, but for += target-specific variables. First recursively construct the variable value from its appended parts in any upper variable sets. Then expand the resulting value. */ static char * variable_append (const char *name, size_t length, const struct variable_set_list *set, int local) { const struct variable *v; char *buf = 0; int nextlocal; /* If there's nothing left to check, return the empty buffer. */ if (!set) return initialize_variable_output (); /* If this set is local and the next is not a parent, then next is local. */ nextlocal = local && set->next_is_parent == 0; /* Try to find the variable in this variable set. */ v = lookup_variable_in_set (name, length, set->set); /* If there isn't one, or this one is private, try the set above us. */ if (!v || (!local && v->private_var)) return variable_append (name, length, set->next, nextlocal); /* If this variable type is append, first get any upper values. If not, initialize the buffer. */ if (v->append) buf = variable_append (name, length, set->next, nextlocal); else buf = initialize_variable_output (); /* Append this value to the buffer, and return it. If we already have a value, first add a space. */ if (buf > variable_buffer) buf = variable_buffer_output (buf, " ", 1); /* Either expand it or copy it, depending. */ if (! v->recursive) return variable_buffer_output (buf, v->value, strlen (v->value)); buf = variable_expand_string (buf, v->value, strlen (v->value)); return (buf + strlen (buf)); } static char * allocated_variable_append (const struct variable *v) { char *val; /* Construct the appended variable value. */ char *obuf = variable_buffer; size_t olen = variable_buffer_length; variable_buffer = 0; val = variable_append (v->name, strlen (v->name), current_variable_set_list, 1); variable_buffer_output (val, "", 1); val = variable_buffer; variable_buffer = obuf; variable_buffer_length = olen; return val; } /* Like variable_expand_for_file, but the returned string is malloc'd. This function is called a lot. It wants to be efficient. */ char * allocated_variable_expand_for_file (const char *line, struct file *file) { char *value; char *obuf = variable_buffer; size_t olen = variable_buffer_length; variable_buffer = 0; value = variable_expand_for_file (line, file); variable_buffer = obuf; variable_buffer_length = olen; return value; } /* Install a new variable_buffer context, returning the current one for safe-keeping. */ void install_variable_buffer (char **bufp, size_t *lenp) { *bufp = variable_buffer; *lenp = variable_buffer_length; variable_buffer = 0; initialize_variable_output (); } /* Restore a previously-saved variable_buffer setting (free the current one). */ void restore_variable_buffer (char *buf, size_t len) { free (variable_buffer); variable_buffer = buf; variable_buffer_length = len; } make-4.3/src/gnumake.h0000644000175000017500000000554013603564437011624 00000000000000/* 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-2020 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 . */ #ifndef _GNUMAKE_H_ #define _GNUMAKE_H_ /* Specify the location of elements read from makefiles. */ typedef struct { const char *filenm; unsigned long lineno; } gmk_floc; typedef char *(*gmk_func_ptr)(const char *nm, unsigned int argc, char **argv); #ifdef _WIN32 # ifdef GMK_BUILDING_MAKE # define GMK_EXPORT __declspec(dllexport) # else # define GMK_EXPORT __declspec(dllimport) # endif #else # define GMK_EXPORT #endif /* Free memory returned by the gmk_expand() function. */ GMK_EXPORT void gmk_free (char *str); /* Allocate memory in GNU make's context. */ GMK_EXPORT char *gmk_alloc (unsigned int len); /* Run $(eval ...) on the provided string BUFFER. */ GMK_EXPORT void gmk_eval (const char *buffer, const gmk_floc *floc); /* Run GNU make expansion on the provided string STR. Returns an allocated buffer that the caller must free with gmk_free(). */ GMK_EXPORT char *gmk_expand (const char *str); /* Register a new GNU make function NAME (maximum of 255 chars long). When the function is expanded in the makefile, FUNC will be invoked with the appropriate arguments. The return value of FUNC must be either NULL, in which case it expands to the empty string, or a pointer to the result of the expansion in a string created by gmk_alloc(). GNU make will free the memory when it's done. MIN_ARGS is the minimum number of arguments the function requires. MAX_ARGS is the maximum number of arguments (or 0 if there's no maximum). MIN_ARGS and MAX_ARGS may not exceed 255. The FLAGS value may be GMK_FUNC_DEFAULT, or one or more of the following flags OR'd together: GMK_FUNC_NOEXPAND: the arguments to the function will be not be expanded before FUNC is called. */ GMK_EXPORT void gmk_add_function (const char *name, gmk_func_ptr func, unsigned int min_args, unsigned int max_args, unsigned int flags); #define GMK_FUNC_DEFAULT 0x00 #define GMK_FUNC_NOEXPAND 0x01 #endif /* _GNUMAKE_H_ */ make-4.3/src/debug.h0000644000175000017500000000300613603564437011256 00000000000000/* Debugging macros and interface. Copyright (C) 1999-2020 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 . */ #define DB_NONE (0x000) #define DB_BASIC (0x001) #define DB_VERBOSE (0x002) #define DB_JOBS (0x004) #define DB_IMPLICIT (0x008) #define DB_MAKEFILES (0x100) #define DB_ALL (0xfff) extern int db_level; #define ISDB(_l) ((_l)&db_level) /* When adding macros to this list be sure to update the value of XGETTEXT_OPTIONS in the po/Makevars file. */ #define DBS(_l,_x) do{ if(ISDB(_l)) {print_spaces (depth); \ printf _x; fflush (stdout);} }while(0) #define DBF(_l,_x) do{ if(ISDB(_l)) {print_spaces (depth); \ printf (_x, file->name); \ fflush (stdout);} }while(0) #define DB(_l,_x) do{ if(ISDB(_l)) {printf _x; fflush (stdout);} }while(0) make-4.3/AUTHORS0000644000175000017500000000574413603564437010313 00000000000000----------------------------------- GNU make development up to version 3.75 by: Roland McGrath Development starting with GNU make 3.76 by: Paul D. Smith Additional development starting with GNU make 3.81 by: Boris Kolpackov GNU Make User's Manual Written by: Richard M. Stallman Edited by: Roland McGrath Bob Chassell Melissa Weisshaus Paul D. Smith ----------------------------------- GNU make porting efforts: Port to VMS by: Klaus Kaempf Hartmut Becker Archive support/Bug fixes by: John W. Eaton Martin Zinser Port to Amiga by: Aaron Digulla Port to MS-DOS (DJGPP), OS/2, and MS-Windows (native/MinGW) by: DJ Delorie Rob Tulloh Eli Zaretskii Jonathan Grant Andreas Beuning Earnie Boyd Troy Runkel ----------------------------------- Other contributors: Janet Carson Howard Chu Ludovic Courtès Paul Eggert Ramon Garcia Fernandez Klaus Heinz Michael Joosten Jim Kelton David Lubbren Tim Magill Markus Mauhart Greg McGary Thien-Thi Nguyen Thomas Riedl Han-Wen Nienhuys Andreas Schwab Carl Staelin (Princeton University) Ian Stewartson (Data Logic Limited) David A. Wheeler David Boyce Frank Heckenbach Kaz Kylheku Christof Warlich With suggestions/comments/bug reports from a cast of ... well ... hundreds, anyway :) ------------------------------------------------------------------------------- Copyright (C) 1997-2020 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 . make-4.3/ChangeLog0000644000175000017500000032617413611151237011005 000000000000002020-01-19 Paul Smith GNU Make release 4.3 * NEWS: Update for the release * configure.ac: New release number * doc/make.texi: New edition number * configure.ac (guile): Check for Guile 3.0 installations * src/job.c (sh_cmds): [SV 57625] Update builtin shell command list Resolve some documentation issues * doc/make.texi (Interrupts): [SV 46193] Recommend defensive recipes * doc/make.texi: [SV 49262] Clarify interaction of prerequisites and non-terminal match-anything rules. 2020-01-19 Paul Smith [SV 40657] Reinstate old behavior for suffix rules with prereqs POSIX says that suffix rules cannot have prerequisites, but after making this change we observed a number of makefiles "in the wild" that were relying on this behavior and failed. For .POSIX: makefiles, obey POSIX. Otherwise preserve the old behavior. However, generate a warning so users know this is a problem. In a future version we will change all behavior to be POSIX-conforming. * NEWS: describe the change * src/rule.c (convert_to_pattern): If posix_pedantic don't make a pattern rule if prereqs exist. Otherwise show a warning. * tests/scripts/features/suffixrules: Add tests for the new behavior including .POSIX vs. non-.POSIX. 2020-01-05 Dmitry Goncharov * tests/test_driver.pl: Enhance error messages 2020-01-04 Paul Smith * doc/make.texi: Change the GFDL to an Appendix * NEWS: Clarify authorship of new features. Enable compilation with C90 compilers * configure.ac: Try compiling Guile headers: they don't work with C90. * maintMakefile: Simplify config checks via target-specific variables. * src/makeint.h: Use ATTRIBUTE rather than defining __attribute__, as that causes compile issues with system headers. (ENUM_BITFIELD): Don't use enum bitfields in ANSI mode. * src/main.c: Use ATTRIBUTE instead of __attribute__. * src/job.h: Ditto. * src/file.c: Don't define variables inside for loops. * src/rule.c: Ditto. * src/dep.h (SI): Only use static inline in non-ANSI mode. 2020-01-03 Paul Smith * bootstrap: Update to the latest gnulib version Release GNU make 4.2.93 * NEWS: Update the release and date * configure.ac: Update the release number Update copyright statements for 2020 2020-01-03 Paul Smith Support the .EXTRA_PREREQS special variable Initial implementation by Christof Warlich * NEWS: Announce the new feature. * doc/make.texi (Other Special Variables): Document .EXTRA_PREREQS. * src/dep.h (struct dep): New flag to note extra prereq deps. * src/filedef.h (expand_extra_prereqs): Declare a function to expand the value of .EXTRA_PREREQS. * src/file.c (expand_extra_prereqs): Given a struct variable lookup of .EXTRA_PREREQS, convert it into a list of deps and for each one make sure it has a struct file and has the new flag set. (snap_file): A new function invoked by hash_map that will perform per-file operations: set up second expansion, intermediate, and also .EXTRA_PREREQS. Manage circular dependencies by ignoring them. (snap_deps): Defer per-file operations until the end. Look up the global .EXTRA_PREREQS and pass it along to snap_file for each file. * src/implicit.c (struct patdeps): Remember the extra prereqs flag. (pattern_search): Transfer extra prereqs flag settings into the matched pattern rule. * src/rule.h (snap_implicit_rules): Rename count_implicit_rules to snap_implicit_rules since we now do more than count. * src/rule.c (snap_implicit_rules): As we walk through all the pattern rules, add in any global .EXTRA_PREREQS to the dep list. Ensure we take them into account for the max number of prereqs and name length. * src/main.c (main): Add extra-prereqs to .FEATURES. Call the renamed snap_implicit_rules. * tests/scripts/variables/EXTRA_PREREQS: Add tests. 2020-01-03 Paul Smith * tests/scripts/features/patternrules: Use Windows-compatible quoting * tests/test_driver.pl: Compute full path to Perl interpreter * tests/scripts/features/exec: Don't use $ENV in the description * src/makeint.h: Add a declaration for memrchr() 2019-12-27 Paul Smith * NEWS: Remove info about disabled /proc/loadavg usage. 2019-12-27 Paul Smith [SV 57022] Avoid posix_spawn which fails asynchronously Avoid using posix_spawn implementations that fail asynchronously when the spawned program can't be invoked: this means instead of getting an error such as "No such file or directory" we get just "Exit 127". Original implementation of the configure.ac macro provided by Martin Dorey Original implementation of the regression tests provided by Dmitry Goncharov * configure.ac: Test whether posix_spawn fails asynchronously. In a cross-compilation environment, assume that it does not. If we detect that it does, fall back to fork/exec. * tests/scripts/features/exec: Add regression tests for different shebang invocation methods. 2019-12-26 Paul Smith [SV 56655] Allow pattern expansion to contain spaces * src/dep.h: Add a new flag PARSEFS_ONEWORD * src/read.c (parse_file_seq): If PARSEFS_ONEWORD is given, treat the entire incoming string as a single pattern. * src/implicit.c (pattern_search): Pass PARSEFS_ONEWORD when parsing patterns for wildcards. * tests/scripts/features/patternrules: Add a new test. 2019-12-18 Ben Wijen * src/misc.c (spin): On WINDOWS32 use Sleep() instead of sleep() * bootstrap.bat: Fix typo in batch file name 2019-12-18 Paul Smith * src/config.h.W32.template: [SV 57152] MinGW32 doesn't support d_type 2019-12-18 Jouke Witteveen [SV 54161] Fix second expansion of $* for paths If the stem matches a path containing a directory not just a filename, make sure the second expansion of $* in the prerequisites matches $* in the recipe. This requires using $(*F) when replacing % in the first expansion to preserve the simple filename. * src/implicit.c (pattern_search): If lastslash is set prepend the directory onto the stem. Then use $(*F) when expanding %. * tests/scripts/features/se_implicit: Add a test case 2019-12-17 Jouke Witteveen * src/implicit.c (pattern_search): Set lastslash correctly If filename contained multiple slashes lastslash is wrongly set to 0. * configure.ac: Check for the GNU memrchr() extension function. * src/misc.c (memrchr): Supply memrchr() if not available. * src/implicit.c (pattern-search): Remove unneeded 'dir' variable 2019-12-17 Paul Smith * Makefile.am: Build lzip package instead of bzip2 * README.git: Mention changed requirements. * src/job.c (load_too_high): Disable Linux /proc/loadavg for now This new feature has a problem: if you provide a load which is larger than the number of cores then it will always run every job. Before we can enable it we need to at the least learn how to clamp this value to the number of cores. To experiment with it, set PROC_FD_INIT to -2 in job.c to re-enable the feature. * tests/run_make_tests.pl (set_more_defaults): Fix typo 2019-12-16 Paul Smith * tests/run_make_tests.pl (subst_make_string): Force use of / On Windows the path to the helper tool will contain '\': this will fail if recipes are run with a POSIX shell. Convert '\' to '/' on Windows. While here, escape any spaces in the path as well. Rename jhelp.pl to thelp.pl and make it a generic test helper. * tests/thelp.pl: Rename from tests/jhelp.pl. (op): Use names instead of options for the operations. (op): Add new operations for sleep, mkdir, and rm. (op): Enhance wait to time out * tests/run_make_tests.pl: Add a new #HELPER# replacement (subst_make_string): Use fully-qualified path to thelp.pl * tests/scripts/features/parallelism: Update to use thelp.pl and the new named operations. Use thelp.pl sleep instead of system-specific sleep commands. * tests/scripts/features/output-sync: Update to use thelp.pl instead of complex shell scripts. * Makefile.am: Distribute tests/thelp.pl instead of tests/jhelp.pl 2019-10-10 Paul Eggert Port functions/shell test to Solaris 10 * tests/scripts/functions/shell: Port exit-status calculation to Solaris 10 with Perl 5.8.4. 2019-10-08 Paul Smith Release GNU make 4.2.92 * NEWS: Update the release and date * configure.ac: Update the release number 2019-10-06 Paul Smith * doc/make.text (Reading Makefiles): Rewrite to be more clear. 2019-10-05 Paul Smith * Makefile.am (check-regression): Use PERLFLAGS when running Perl * maintMakefile: Set PERLFLAGS to enable warnings. * tests/run_make_tests.pl: Clean up issues pointed out by perl -w. * tests/scripts/functions/wildcard: Skip slash tests for local glob. tests: Convert %CONFIG_FLAGS to get_config() * tests/config-flags.pm.W32: Create a predefined Windows file. * Makefile.am (test_FILES): Add it to the distribution. * build_w32.bat: Install tests/config-flags.pm if not existing. * tests/run_make_tests.pl (get_config): Create new function. * tests/scripts/features/archives: Call get_config() rather than using %CONFIG_FLAGS directly. * tests/scripts/features/load: Ditto. * tests/scripts/features/loadapi: Ditto. * tests/scripts/functions/wildcard: Ditto. * src/hash.c (jhash_string): Don't read past end of string. Original patch from Dmitry Goncharov . * tests/run_make_tests.pl (valid_option): Add missing File::Spec 2019-09-23 Paul Smith * src/function.c (func_realpath) [AIX]: Remove trailing slashes. 2019-09-22 Paul Smith * tests/scripts/features/vpathplus: Fix output for big-endian systems. Our hashing algorithm gives different ordering on LE vs BE systems. Patch from Dmitry Goncharov . 2019-09-22 Florian Weimer (tiny change) * configure.ac (HAVE_GETTIMEOFDAY): Avoid undeclared exit function. 2019-09-22 Paul Smith * test/test_driver.el (_run_with_timeout): Show error message. * job.c (child_error): Modify error message string. This reverts commit 6264deece3bb77798240a906ceed79097adbcf48. Further investigation discovers that the real issue is that GNU Emacs compile mode doesn't have a matching regex for GNU make error messages generated when targets fail. I submitted a patch to GNU Emacs adding a matcher for compile mode. 2019-09-21 Paul Smith * tests: Convert from File::Spec::Functions to File::Spec. Users report the Functions version doesn't work correctly for some older versions of Perl. * tests/scripts/function/guile: Valgrind doesn't work with Guile. * src/job.c (child_execute_job): Allocate space for argv NULL. 2019-09-21 Paul Smith [SV 56918] Compute job slots properly on failing command Ensure we properly reduce job_slots_used if a command fails because it doesn't exist/can't be started. * src/job.h (struct child): Add a field jobslot to be set when using a job slot. * src/job.c (start_waiting_job): Remember if we are using a job slot. (reap_children): Reduce number of job slots used by jobslot. 2019-09-21 Paul Smith * src/arscan.c (ar_scan): Restrict length for sscanf of ar_mode. * tests/scripts/functions/shell: Detect correct SHELLSTATUS code. * tests/run_make_test.pl: Fix support for valgrind. Change the variable holding the make command to be a list that can hold extra commands and options, not just a string. * tests/run_make_tests.pl (find_prog): Fix syntax error. 2019-09-16 Paul Smith * NEWS: Update date and clarify -l change. * tests/run_make_tests.pl: Create $scriptsuffix for Windows/VMS. * tests/scripts/features/targetvars: Add a suffix to scripts. * tests/scripts/misc/general4: Ditto. 2019-09-16 Paul Smith Refresh the test suite framework implementation. Go through both run_make_tests.pl and test_driver.pl and slightly modernize the Perl and clean up indentation etc. Fix a number of warnings in the test scripts detected by running with -w. * tests/test_driver.pl: Move make error string detection out of the base test driver. (run_all_tests): Ensure that we always look for tests in the cwd. * tests/run_make_tests.pl: Use File::Spec for path manipulations. Correctly use setlocale() when detecting error strings. Get configuration from the config-flags.pm file not config.status. * tests/scripts/features/archives: Use new $cwddir variable. * tests/scripts/features/reinvoke: Add missing semicolon. * tests/scripts/features/vpath2: Avoid non-existent variable. * tests/scripts/functions/foreach: Escape variables. * tests/scripts/misc/bs-nl: Remove non-existing \v escape sequence. * tests/scripts/misc/general4: Use handy create_file(). * tests/scripts/options/dash-C: Use Cwd/$cwddir. * tests/scripts/options/dash-I: Use subst_make_string() and #PWD#. * tests/scripts/options/symlinks: Use File::Spec. * tests/scripts/targets/DEFAULT: Use create_file and run_make_test. * tests/scripts/variables/CURDIR: Use run_make_test. * tests/scripts/variables/automatic: Remove extraneous "\". * tests/scripts/vms/library: Remove extra "my" and extraneous "\". 2019-09-16 Paul Smith * tests/config-flags.pm.in: Add USE_SYSTEM_GLOB. * tests/config_flags_pm.com [VMS]: Ditto. * README.git: [SV 56895] Provide more info about "maintainer mode". * src/read.c (get_next_mword) [HAVE_DOS_PATHS]: Don't fall through to parsing variable references if we find a drivespec in a word! * tests/test_driver.pl: Remember error for "running" a directory. * tests/scripts/features/errors: Check errors "running" a directory. * src/job.c (child_execute_job): Use errno from find_in_given_path(). * tests/test_driver.pl: Determine non-executable error message. * tests/scripts/features/errors: Use the local non-executable error. * src/job.c (child_execute_job): Use newer gnulib findprog version. 2019-09-10 Eli Zaretskii Revert "[SV 56449] (Windows) Use slow path if '%' appears in the command" This reverts commit 38e96eadea6e2cd42a0f414959bac327de9f468a. Per discussion on Savannah, the modified behavior matches the way % is handled in batch files, but not in cmd command lines. And since Make mostly tries to emulate the command line, the new behavior is unexpected and backward-incompatible. 2019-09-09 Paul Smith Rework the creation of build.sh so it's not a template. * build.sh: Rename from build.template. Get the list of objects from the Makefile. Move configure-replaced variables ... * build.cfg.in: to this new .in file. * configure.ac: Remove special handling of build.sh.in and add build.cfg as a generated file. * Makefile.am (EXTRA_DIST): Remove build.sh.in and add build.sh and build.cfg.in for build.sh.in. * maintMakefile: Remove handling for build.template. Treat build.sh as a source file, not a generated file. * .gitignore: Ignore generated build.cfg file. 2019-09-08 Paul Smith * gl/modules/make-glob: Move local glob configure.ac to here * configure.ac: from here. 2019-09-08 Paul Smith [SV 56834] Support local PATH search with posix_spawnp When using exec we install the child's environment before invoking execlp(), so commands are found on the child's PATH. posix_spawnp searches on the parent's PATH, which we don't want. Import gnulib's findprog-in module and use it to search the child's PATH, then use posix_spawn() to run it. Also, posix_spawn() does not fall back to trying sh on ENOEXEC, as execlp() does, so implement that as well. * bootstrap.conf: Add the findprog-in gnulib module * src/job.c: Include findprog.h if we're using posix_spawn. (start_job_command): Remove the handling of child->cmd_name, (child_execute_job): and add it here. Look up the command to be run in the child's path and invoke it if found. If it fails with ENOEXEC then retry it as an argument to the default shell. * tests/scripts/misc/general4: Test makefile PATH assignments. * tests/scripts/features/targetvars: Ditto, for target variables. 2019-09-07 Paul Smith * doc/make.texi (Recipe Execution): Correct example to use $(<[DF]) * configure.ac: Check whether struct dirent has a d_type field * src/dir.c (dir_contents_file_exists_p): Use the autoconf macro HAVE_STRUCT_DIRENT_D_TYPE rather than relying on the GNU libc- specific _DIRENT_HAVE_D_TYPE. * lib/glob.c: Set HAVE_D_TYPE if HAVE_STRUCT_DIRENT_D_TYPE. * src/config.h.W32.template [W32]: Add support for dirent.d_type * src/w32/include/dirent.h: Add DT_* values for dirent.d_type (struct dirent): Add d_type * src/w32/compat/durent.c (readdir): Set dirent.d_type based on Windows file attributes. * src/makeint.h: Add typedef for mode_t if !HAVE_UMASK * build.template: Rewrite to allow gnulib support. * doc/make.texi: Clarify that the jobserver pipe is "blocking" 2019-09-07 Paul Smith Align child_execute_job among different ports Create a struct childbase which is the basics of struct child needed to invoke child_execute_job(), and can be cast back and forth to a struct child. Ensure all implementations of child_execute_job() take the same arguments. * src/job.h (CHILDBASE): Create a macro to hold the base parts. (struct childbase): A structure containing CHILDBASE. (struct child): Use CHILDBASE as the initial part of child. [VMS]: Remove declaration of VMS version of child_execute_job. * src/job.c (start_job_command): Use new child_execute_job() call. (child_execute_job) [__EMX__]: Implement new calling signature. (child_execute_job): Implement new calling signature. * src/main.c (main) [__EMX__]: Use new child_execute_job() call. * src/function.c (func_shell_base): Use new child_execute_job() call. * src/vmsjobs.c (vmsHandleChildTerm): Accept struct childbase. * src/vmsjobs.c (child_execute_job): Implement new calling signature. Modify the return value to be pid_t, not a boolean, and return the PID rather than setting it in the child. This is OK because our only caller immediately reset PID to -1 anyway if we return 0. 2019-09-07 Paul Smith * doc/make.tex (Substitution Refs): Clarify patsubst relationship. * src/job.c (start_job_command) [VMS]: Correct VMS comment. 2019-09-07 Paul Smith Show useful errors when posix_spawn() doesn't do so The posix_spawn() function may not detect that the command to run is invalid when it's invoked. Instead, it will run then exit with error code 127. If that happens do our best to present the user with a useful error message. * src/job.h (struct child): Add cmd_name to hold the command we ran. * src/job.c (start_job_command): On success, remember the cmd_name. (reap_children): On exit 127, stat cmd_name and show a useful error. (free_child): Free cmd_name. 2019-09-07 Paul Smith * README.git: Describe GCC and GNU make requirements * maintMakefile: Put custom C flags into a separate variable so they can be overridden more easily on the command line. * tests/scripts/features/archives: Fix expected long ar name output. * tetss/run_make_test.pl: Avoid 'sh -c' for Windows portability. Update to GNU make release candidate 4.2.91 * tests/scripts/functions/wildcard: Skip dangling symlink test. The built-in glob implementation does not correctly handle dangling symlinks. This needs to be fixed by switching to the latest glob implementation from gnulib but that's a big job: for now avoid the test if we know it will fail. * maintMakefile: Use check-local when testing build.sh. Running 'make check' will rebuild 'make' so we're not testing the build.sh-generated make binary. 2019-09-07 Paul Smith Don't reset stack size when using posix_spawn() There's no way to run setrlimit() from posix_spawn() so we can't reset the stack limit in children; thus, don't change it in the parent. * src/makeint.h (SET_STACK_SIZE): Don't set this when HAVE_POSIX_SPAWN. * src/job.c (child_execute_job): Remove useless comment. 2019-09-07 Paul Smith * configure.ac: Remove redundant getloadavg gnulib support * src/dir.c (dir_setup_glob): Initialize unused gl_offs. * tests/scripts/functions/wildcard: Add trailing slash tests. Initial changes by Dmitry Goncharov 2019-09-02 Paul Eggert Pacify Oracle Studio c99 * src/dep.h (DEP): * src/function.c (struct function_table_entry): Use unsigned int, not unsigned short. Without this patch, c99 complains ‘warning: nonportable bit-field type’. Port grouped_targets test to Solaris 10 * tests/scripts/features/grouped_targets: Use ‘printf ''’ instead of ‘echo -n’, as POSIX says the latter is not portable. Remove useless code in eval * src/read.c (eval): Remove useless code. Without this patch, Oracle Studio 12.6 complains ‘"src/read.c", line 1405: warning: loop not entered at top’. Pacify Oracle Studio 12.6 in init_switches * src/main.c (init_switches): Use a cast to convert char const * to char *. Without this patch, the compiler complains ‘"src/main.c", line 2643: warning: assignment type mismatch: pointer to char "=" pointer to const char’. Pacify Oracle Studio 12.6 * src/arscan.c [VMS]: Use ‘#if !defined LBR$_HDRTRUNC’ instead of ‘#ifndef LBR$_HDRTRUNC’ to pacify Oracle Studio 12.6, which looks inside unused #if branches for preprocessor syntax errors. Without this patch it complains ‘"src/arscan.c", line 43: warning: tokens ignored at end of directive line’. 2019-09-02 Paul Smith * NEWS: Fix incorrect notes. * src/read.c (parse_file_seq): [SV 52076] Don't reverse glob() results. 2019-08-28 Eli Zaretskii Fix MS-Windows MinGW build * src/w32/subproc/sub_proc.c (process_wait_for_multiple_objects): Fix format specifier for GetLastError's value. * src/job.c (reap_children): Define the 'remote_status_lose' label only for Posix platforms, to avoid compiler warning. * build_w32.bat (LNKOUT): New variable, using forward slashes. Use forward slashes in calls to :Compile, so that linking with GNU ld works. * src/makeint.h [!HAVE_UMASK]: Prototype for 'umask'. (UMASK, MODE_T): Don't define. * src/misc.c (get_tmpfile): Don't call UMASK, call umask, to avoid compilation warning on !HAVE_UMASK platforms. * src/output.c (output_tmpfd): Likewise. * src/misc.c (umask) [!HAVE_UMASK]: New no-op function. * src/config.h.W32.template (__USE_MINGW_ANSI_STDIO) [__MINGW32__]: Define to 1, to force Make use ANSI-compatible stdio functions, which also support the non-standard 'Id' and 'Ix' specifiers. (HAVE_UMASK) [__MINGW32__]: Define to 1. * src/arscan.c (ar_member_touch): Type-cast argument of strlen to avoid compiler warnings. 2019-08-26 Paul Smith * NEWS: Update for pre-release 2019-08-26 Paul Smith Update maintainer mode to support debug wait points. Make a spin() method available when compiled in maintainer mode. If a file exists in the working directory with a specific name, make will sleep until the file is deleted. Ensure that maintainer mode is enabled on Windows, using the same algorithm we use on POSIX / autoconf systems. * build_w32.bat: If maintMakefile exists, enable maintainer mode. * src/main.c (main): Replace Windows-only suspend flag with spin(). * src/makeint.h: A SPIN() macro calls spin() in maintainer mode. * src/misc.c (spin): If a spin file exists sleep until it's deleted. 2019-08-26 Paul Smith * tests/scripts/features/archives: [SV 54395] Support non-GNU ar. * tests/scripts/misc/general3: Add more tests for SHELL/.SHELLFLAGS 2019-08-25 Paul Smith * src/job.c (construct_command_argv): Remove unused VMS code * src/job.c (child_execute_job): Set pid to -1 on posix_spawn failure. 2019-08-24 Paul Smith * bootstrap: Update from latest gnulib version * scripts/copyright-update: Use git ls-files for controlled files * po/LINGUAS: Add a translation for Bulgarian. 2019-07-14 Christian Eggers (tiny change) [SV 56449] (Windows) Use slow path if '%' appears in the command * src/job.c (sh_chars_dos): Add '%' as a special character * src/job.c (construct_command_argv_internal): Check for '%' in quotes For the windows version of make, a recipe line cannot be executed diretly by make (without a shell) if a '%' character is present. This character starts a cmd.exe escape sequence. 2019-07-14 Paul Smith * src/read.c (parse_file_seq): Update comments. 2019-07-13 Mike Haboustak (tiny change) [SV 28456] Don't override $< when no default rule has been defined The check for matching a file's command to the default rule's command does not account for null. If no .DEFAULT is defined a rule with no recipe has it's $< variable set to the value of $@. This breaks second expansion, particularly when used with pattern rules. * src/commands.c [set_file_variables]: Check that cmds is set * tests/scripts/features/se_explicit: Test case * tests/scripts/features/se_implicit: Test case 2019-07-13 Paul Smith Switch to the gnulib version of strerror() * bootstrap.conf: Add strerror module * configure.ac: Remove strerror check * src/misc.c: Remove local strerror() implementation * src/config.ami.template: Remove HAVE_STRERROR * src/config.h-vms.template: Ditto. * src/config.h.W32.template: Ditto. 2019-05-19 Paul Smith * doc/make.texi: [SV 51974] Clarify makefile parsing operations. * doc/make.texi: [SV 54116] Document whitespace removal trick. Discovered and explained by Michael Henry * tests/scripts/variables/flavors: Add a test to preserve the behavior. 2019-05-19 Paul Smith [SV 46013] Allow recursive variable overrides from Makefiles Ensure that variable overrides are passed to recursive make instances even if no overrides were provided on the command line. Fix suggested by Rici Lake * src/main.c (define_makeflags): Add overrides without respect to the value of command_variables. * tests/scripts/features/recursion: Add a test. 2019-05-19 Paul Smith Update developer customizations * .ccls: Remove -std=c99: it disables __attribute__ causing warnings. * .dir-locals.el: Force the C coding style to "gnu". * make-gdb.py: Add GDB macros for pretty-printing GNU make structs. * scripts/copyright-update: Use GNULIB_SRCDIR to find update-copyright. 2019-05-19 Paul Smith [SV 54549] Don't free used set_lists during merge When merging the variable_set_lists for two targets it could be that the "from" set list is a subset of the "to" set list: check for this situation to avoid freeing used memory. * src/variable.c (merge_variable_set_lists): Walk the "to" list and if the "from" list is contained in it, nothing to do. * tests/scripts/features/se_explicit: Add a test. 2019-05-19 Paul Smith * src/hash.c (jash_string): [SV 54980] Avoid ASAN error 2019-05-19 Paul Smith [SV 54740] Ensure .SILENT settings do not leak into sub-makes Create a new variable run_silent to hold the current instance's global silence setting, allowing silent_flag to represent only whether the -s option was provided on the command line. * src/makeint.h: Change silent_flag variable to run_silent. * src/job.c: Ditto. * src/remake.c: Ditto. * src/file.c: Ditto. * src/main.c: Add a new global variable run_silent. (decode_switches): After switches are decoded, initialize run_silent. * tests/scripts/targets/SILENT: Add a test for recursive behavior. 2019-05-19 Paul Smith Update copyright statements for 2019 2019-05-12 Kaz Kylheku [SV 8297] Implement "grouped targets" for explicit rules. This patch allows "grouped targets" using the &: syntax: tgt1 tgt2 ... tgtn &: pre1 pre2 ... recipe When the &: separator is used (in single or double colon forms), all the targets are understood to be built by a single invocation of the recipe. This is accomplished by piggy-backing on the already-existing pattern rule feature, using the file's "also_make" list. * NEWS: Add information about grouped targets. * doc/make.texi (Multiple Targets): Add information on grouped targets. (Pattern Intro): Refer to the new section to discuss multiple patterns. * src/main.c (main): Add "grouped-targets" to .FEATURES * src/read.c (make_word_type): Add new types for &: and &::. (eval): Recognize the &: and &:: separator and remember when used. (record_files): Accept an indicator of whether the rule is grouped. If so, update also_make for each file to depend on the other files. (get_next_mword): Recognize the &: and &:: word types. * tests/scripts/features/grouped_targets: New test script. * AUTHORS: Add Kaz Kylheku 2019-05-12 Paul Smith * variable.c (define_variable_in_set): Clear new structs * po/LINGUAS: Add Portuguese translation Add developer customizations * .ccls: Configure the ccls LSP server * .dir-locals.el: Reset some parameters for ccls and lsp-mode * .gitignore: Update for GTAGS and ccls * maintMakefile: Don't search hidden directories for sources 2018-09-16 Paul Smith * src/arscan.c (ar_member_touch): [SV 54533] Stop \0 in archive headers Change output_write() to writebuf(), add readbuf() helper. * src/misc.c (writebuf, readbuf): Create helper functions that will reliably write a buffer to a file descriptor in the face of EINTR causing short writes, and read from a file descriptor into a buffer in the face of EINTR causing short reads. * src/makeint.h: Declare these functions. * src/output.c: Remove output_write() and replace with writebuf(). (_outputs, out_of_memory): Call writebuf(), not output_write(). * src/arscan.c (ar_scan): Call readbuf() instead of read(2). (ar_member_touch): Remove duplicate header write, call writebuf() instead of output_write(), and readbuf() instead of read(2). 2018-09-15 Paul Smith * doc/make.texi (Remaking Makefiles): [SV 52273] Note MAKE_RESTARTS * src/main.c (main): Set jobserver permissions before re-execing Fixes an issue seen in the Linux kernel build system, reported by Masahiro Yamada . Fix suggested on the bug-make mailing list by Mike Shal . * tests/scripts/features/parallelism: Add a test to verify this. * doc/make.texi: [SV 48970] Clarify the value of $? * doc/make.text: [SV 54360] Weaken "obsolete" language in the manual. There's no need to frighten users away from capabilities which are perfectly reasonable and definitely not going away, by calling them obsolete or discouraged in the manual. [SV 40657] Don't create pattern rules for suffix rules with deps. * NEWS: Update with a backward-compatibility warning. * src/rule.c (convert_to_pattern): If a suffix rule has dependencies, do not create a pattern rule for it. According to the manual suffix rules with prerequisites are treated as normal targets. * tests/scrips/features/suffixrules: Create some regression tests for .SUFFIXES and suffix rules. 2018-08-04 Paul Smith * NEWS: Update for the latest changes. 2018-08-04 Paul Smith [SV 54233] Preserve higher command_state values on also_make targets. If multiple pattern rules have the same pattern as also-make targets and we attempt to run them at the same time, we might downgrade the command state from 'running' to 'deps_running'; this will prevent that also_make from being considered complete causing make to wait forever for it to finish. Ensure that set_command_state never downgrades the state of a target. * src/file.c (set_command_state): Don't downgrade command_state. * src/filedef.h (struct file): Document the order prerequisite. * test/scripts/features/patternrules: Test the behavior. 2018-08-04 Paul Smith * src/job.c (reap_children): Fix inverted win/lose message. * tests/scripts/functions/wildcard: [SV 52018] Test dangling symlink. 2018-08-04 Bernhard M. Wiedemann * src/read.c (parse_file_seq): [SV 52076] Sort wildcard results. 2018-08-04 Paul Smith * tests/scripts/features/archives: [SV 54395] Test long archive names. 2018-08-04 Ben Hutchings * src/arscan.c (ar_scan): [SV 54395] Allow long names in archives. Commit bc9d72beb0cb "Resolve issues discovered by static code analysis." added range checks on archive member name length. However, on non-AIX systems it also checked BSD-style long names against the short name limits and and checked the *offset* for GNU-style long names against the short name limits. This caused valid long names to be rejected. * Record the size of the GNU name map and validate offsets against it * Ensure that the last entry in the name map is null-terminated * Apply a maximum length of INT_MAX for element sizes Reported-by: Philipp Wolski 2018-08-04 Paul Smith * lib/glob.c (glob_in_dir): [SV 53465] Allow symlinks to directories. Fix from Rich Felker on the musl mailing list. * tests/scripts/functions/wildcard: Create a regression test for this. * configure.ac: Add --disable-posix-spawn option * maintMakefile: Add a test for the option * src/job.c: Change HAVE_* preprocessor checks to USE_POSIX_SPAWN * src/job.c (child_execute_job): Clean up posix_spawn invocation 2018-08-04 Aron Barath * job.c (child_execute_job): Prefer posix_spawn() over fork()/exec() 2018-08-04 Paul Smith Clean up errors for invalid commands and add regression tests. * src/function.c (func_shell_base): Use error() instead of recreating the error output. * src/job.c (exec_command): Show more standard error messages. * src/load.c (unload_file): Fix whitespace in the error message. * tests/scripts/features/errors: Add tests for starting non- existent commands and new error message formats. * tests/scripts/features/output-sync: New error message formats. * tests/scripts/functions/shell: Ditto. 2018-08-04 Paul Smith Queue failed fork() (etc.) to be handled like any other failed job. If we failed to fork() we were essentially exiting make immediately without respect to ignore flags, etc. On one hand that makes sense because if you can't fork you're in real trouble, but it doesn't work so well on systems where we don't fork at all. Instead, treat a fork error like any other error by delaying the handling until the next call to reap_children(). Any child with a PID of -1 is considered to have died before starting so check these first without waiting for them. * src/commands.c (fatal_error_signal): Don't kill children that never started. * src/function.c (func_shell_base): Handle cleanup properly if the child doesn't start. * src/job.c (reap_children): Check for children that died before starting and handle them without waiting for the PID. (start_job_command): Free memory when the child doesn't start. (start_waiting_job): Don't manage children who never started. (child_execute_job): If the fork fails return PID -1. * src/vmsjobs.c: Check for children that never started. * tests/run_make_tests.pl: Parse config.status to get all options. 2018-08-02 Aron Barath * configure.ac: Check for posix_spawnattr_setsigmask * configure.ac: Check for spawn.h and posix_spawn() * src/makeint.h: Use pid_t to store PIDs, of int. * src/commands.c (getpid): Ditto. * src/job.h (*): Ditto. * src/job.c (*): Ditto. * src/main.c (main): Ditto. * src/remote-cstms.c (start_remote_job): Ditto. * src/remote-stub.c (start_remote_job): Ditto. 2018-08-02 spagoveanu@gmail.com (tiny change) * src/dir.c: Preserve glob d_type field When using GNU make on a system with glibc glob a pattern ending in a slash is also matching regular files, but only in subdirectories: $ mkdir -p dir/subdir $ cd dir $ touch file1 subdir/file2 $ echo 'test:; @echo $(wildcard */ */*/)' | make -f - subdir/ subdir/file2 $ echo 'test: */ */*/; @echo "$?" != */ */*/' | make -f - subdir/ subdir/file2 != subdir/ */*/ It happens because in the gl->gl_readdir callback supplied to glob(), dirent->d_type is set to DT_UNKNOWN, and the glob() implementation in glibc assumes that such a directory entry *cannot* possibly be a regular file. Pass the actual d_type down to glob(); this is the right thing to do even if glibc is fixed, because it saves an extra stat() syscall for each dirent. 2018-08-02 Paul Smith * src/read.c(unescape_char): Use C comments not C++ comments. * src/posixos.c(set_blocking): Ditto. * src/w32/subproc/sub_proc.c(process_init): Ditto Enhance the Basic.mk environment to work with Gnulib * maintMakefile: Omit generated headers from Basic.mk prerequisites. * Basic.mk.template: Rework commands to use with $(call ...) macros. * mk/Amiga.mk: Ditto. * mk/VMS.mk: Ditto. * mk/Windows32.mk: Ditto, plus P2W to convert POSIX to Windows paths. * mk/msdosdjgpp.mk: Ditto. 2018-07-02 Paul Smith Resolve most of the Windows Visual Studio warnings. * Convert integer types to size_t where necessary. * Align other integral types to avoid casts and type warnings. 2018-07-02 Paul Smith Update regression tests for Windows. * tests/scripts/features/jobserver: Windows doesn't use pipes * tests/scripts/functions/shell: Don't test kill -2 on Windows * tests/scripts/misc/bs-nl: Windows doesn't handle single quotes * tests/scripts/misc/general3: Ditto. * maintMakefile: Preserve comments during compilation * function.c(abspath): Use memcpy() to avoid GCC 8.1 warnings 2018-07-02 Paul Smith Convert GNU make to use the gnulib portability library Move content from glob/* and config/* into standard GNU directory locations lib/* and m4/*. Install the gnulib bootstrap script and its configuration file, and create a bootstrap.bat file for Windows. Update the README.git file with new requirements and instructions for building from Git. At this point we only install the alloca, getloadavg, and FDL modules from gnulib. We keep our old glob/fnmatch implementation since the gnulib versions require significant amounts of infrastructure which doesn't exist on Windows yet. Further work is required here. Due to a problem with gnulib's version of getloadavg, we need to bump the minimum required version of automake to 1.16.1 unfortunately. * README.git: Update instructions * NEWS: Move developer news to a separate section * configure.ac: Update for use with gnulib modules * bootstrap: Bootstrap from Git workspace (import from gnulib) * bootstrap.conf: Bootstrap configuration for GNU make * bootstrap.bat: Bootstrap from Git workspace for Windows * gl/modules/make-glob: Support our local fnmatch/glob implementation * config/acinclude.m4: Move to m4/ * config/dospaths.m4: Move to m4/ * glob/fnmatch.c: Move to lib/ * glob/fnmatch.h.in: Move to lib/ * glob/glob.c: Move to lib/ * glob/glob.h.in: Move to lib/ * Makefile.am: Update for new directories * build.template: Update for new directories * build_w32.bat: Update for new directories * builddos.bat: Update for new directories * maintMakefile: Update for new directories * makefile.com: Update for new directories * mk/Amiga.mk: Update for new directories * mk/Posix.mk.in: Update for new directories * mk/VMS.mk: Update for new directories * mk/Windows32.mk: Update for new directories * mk/msdosdjgpp.mk: Update for new directories * po/LINGUAS: One language per line (needed by gnulib) * INSTALL: Remove (obtained from gnulib) * src/alloca.c: Remove (obtained from gnulib) * src/getloadavg.c: Remove (obtained from gnulib) * po/Makevars: Remove (created by bootstrap) * config/*: Remove leftover files * glob/*: Remove leftover files 2018-07-01 Paul Smith * Makefile.ami, glob/Makefile.ami: Remove obsolete files 2018-07-01 Ola Olsson * doc/make.texi: Updated language 2018-07-01 Paul Smith * all: Update Copyright statements for 2018 * scripts/copyright-update: Maintainer's script for copyright mgmt 2018-02-10 Paul Smith * build_w32.bat: Support Visual Studio 17. 2017-11-19 Paul Smith * configure.ac: Support GLIBC glob interface version 2 2017-11-19 Paul Smith Rework directory structure to use GNU-recommended "src" directory. Move the source code (other than glob) into the "src" subdirectory. Update all scripting and recommendations to support this change. * *.c, *.h, w32/*: Move to src/ * configure.ac, Makefile.am, maintMakefile: Locate new source files. * Basic.mk.template, mk/*: Update for new source file locations. * NEWS, README.DOS.template: Update for new locations. * build.template, build_w32.bat, builddos.bat: Ditto. * po/POTFILES.in: Ditto * tests/run_make_tests.pl, tests/scripts/features/load*: Ditto. * make.1: Move to doc. * mk/VMS.mk: Add support for building on VMS (hopefully). * makefile.vms, prepare_w32.bat: Remove. * SCOPTIONS: Update to define HAVE_CONFIG_H 2017-11-18 Paul Smith * job.c: Add "command" as a known shell built-in. This is not a POSIX shell built-in but it's common in UNIX shells. Reported by Nick Bowler . * tests/scripts/features/output-sync: Revert bad change in 0c5a9f9b92a 2017-11-18 Paul Smith Remove unsupported build facilities. Over time the non-standard build and install systems (nmake files, smake files, Visual Studio project files, etc.) have atrophied and maintaining them is not worth the effort, for such a simple utility as make. Remove all the non-standard build tool support and unify OS-specific build rules under a basic set of (GNU make) makefiles. Preserve the existing bootstrapping scripts (for POSIX, Windows, and MS-DOS). Also the existing VMS build scripts are left unchanged: I don't have enough experience with VMS to venture into this area. Perhaps one of the VMS maintainers might like to determine whether conversion would be appropriate. Rather than create libraries for w32 and glob (non-POSIX), simply link the object files directly to remove the complexity. * NEWS: Update with user-facing notes. * Makefile.am: Clean up to use the latest automake best practices. Build Windows code directly from the root makefile to avoid recursion. * README.Amiga, README.DOS.template, README.W32.template: Updated. * INSTALL: Point readers at the README.git file. * maintMakefile: Remove obsolete files. Create Basic.mk file. * Basic.mk.template, mk/*.mk: Create basic GNU make-based makefiles. * build_w32.bat: Copy Basic.mk to Makefile * configure.ac: We no longer need AM_PROG_AR. * dosbuild.bat: Rename to builddos.bat. Incorporate configure.bat. * Makefile.DOS.template: Remove. * NMakefile.template, w32/subproc/NMakefile: Remove. * SMakefile.template, glob/SMakefile, glob/SCOPTIONS, make.lnk: Remove. * configure.bat, glob/configure.bat: Remove. * w32/Makefile.am: Remove. * make_msvc_net2003.sln, make_msvc_net2003.vcproj: Remove. 2017-11-11 Paul Smith * Makefile.am: Add jhelp.pl to remote test setup. 2017-11-11 Paolo Bonzini Do not use STOP_SET for singleton compares. Compare against '$' directly rather than using MAP_VARIABLE. This saves ~10% for find_map_function, which is the top hotspot in QEMU's no-op build. The build is sped up overall by about 1.5% more (from 11.1s to 10.95s). * read.c (find_map_function): Do not compare against singleton sets. 2017-11-11 Paolo Bonzini Speedup parsing of functions. Use the stopchar map to quickly jump over everything that is not an open/close brace, an open/close parenthesis or a comma. This saves 1% on QEMU's noop build (from 11.23s to 11.1s). * function.c (find_next_argument, handle_function): Check with STOP_SET before comparing against individual characters. * main.c (initialize_stopchar_map): Initialize MAP_VARSEP mappings in stopchar_map. * makeint.h (MAP_VARSEP): New. 2017-11-11 Paolo Bonzini Remove MAP_PERCENT as strchr is faster. * read.c (find_percent_cached): Use strchr instead of STOP_SET to find % or nul. * makeint.h (MAP_PERCENT): Remove. * main.c (initialize_stopchar_map): Remove. 2017-11-11 Paolo Bonzini Use Jenkins hash. This is about twice as fast as the current hash, and removes the need for double hashing (improving locality of reference). The hash function is based on Bob Jenkins' design, slightly adapted wherever Make needs to hash NUL-terminated strings. The old hash function is kept for case-insensitive hashing. This saves 8.5% on QEMU's no-op build (from 12.87s to 11.78s). * configure.ac: Check endianness. * hash.c (rol32, jhash_mix, jhash_final, JHASH_INITVAL, sum_get_unaligned_32, jhash): New. * hash.h (STRING_HASH_1, STRING_N_HASH_1): Use jhash. (STRING_HASH_2, STRING_N_HASH_2): Return a dummy value. (STRING_N_COMPARE, return_STRING_N_COMPARE): Prefer memcmp to strncmp. 2017-11-11 Paolo Bonzini Use strchr for simple case of find_char_unquote. In most cases, find_char_unquote has a single stopchar. In that case we can look for it using strchr's optimized implementation. This saves 3.5% on QEMU's noop build (from 11.78s to 11.37s). * read.c (find_char_unquote): Rename to find_map_unquote. Replace with an implementation optimized for the case where the stopchar is a singleton. Adjust all callers. 2017-11-11 Paolo Bonzini Use strchr/memmove in collapse_continuations. collapse_continuations is already using strchr to speed up the common case of no backslash-newline sequence, but on modern processors it is faster to scan the string twice with strchr+memmove (or strlen+memmove) than to move bytes manually. Saves about 1.5% on QEMU's no-op build (from 11.37s to 11.23s). * misc.c (collapse_continuations): Rewrite the scanning of LINE. 2017-10-31 Paul Smith * main.c (main): [SV 48274] Allow -j in makefile MAKEFLAGS variable. * tests/jhelp.pl: New file to allow testing parallelism without sleep. * tests/scripts/features/parallelism: Test this. * tests/scripts/features/jobserver: Update tests. * tests/scripts/features/output-sync: Remove useless rm command. 2017-10-30 Paul Smith * job.c (child_error): Modify error message string. Ensure Emacs compile-mode's next-error doesn't match target failure messages. Syntax errors in makefiles are still matched. * function.c (func_if): Check the first character of condition. Reported by Rob W 2017-10-30 Paul Eggert glob: Do not assume glibc glob internals. It has been proposed that glibc glob start using gl_lstat, which the API allows it to do. GNU 'make' should not get in the way of this. See: https://sourceware.org/ml/libc-alpha/2017-09/msg00409.html * dir.c (local_lstat): New function, like local_stat. (dir_setup_glob): Use it to initialize gl_lstat too, as the API requires. 2017-10-30 Paul Smith Compute load from number of running processes. * job.c (load_too_high): If /proc/loadavg is available, compare the maximum load against the number of processes currently running. If we can't parse /proc/loadavg, use the previous algorithm. Concept and initial patch from Sven C. Dack 2017-09-30 Eli Zaretskii Fix checking existence of directories on MS-Windows * remake.c (name_mtime) [WINDOWS32]: Emulate Posix behavior of 'stat' with the likes of "foo/" and "foo/.". 2017-07-09 Paul Smith Update copyright statements for 2017. Remove uses of unnecessary "register" keyword. * variable.c (create_pattern_var): [SV 51266] Create with xcalloc(). Reported by Chris Metcalf [SV 51400] Only unblock fatal signals after child invocation * job.c (unblock_sigs): Only unblock fatal signals not all signals. (unblock_all_sigs): Unblock all signals not just fatal signals. (child_execute_job): Call unblock_all_sigs() in child process. * job.h: Remove unused function definitions. * remote-cstms.c (start_remote_job): Call unblock_all_sigs() in child process. Reported by Koen Van Hoof 2017-07-01 Paul Smith * function.c (shell_completed): [SV 51014] Add signal to .SHELLSTATUS * tests/scripts/functions/shell: Verify that .SHELLSTATUS contains a non-0 value when the shell exits due to a signal. 2017-06-07 Eli Zaretskii Avoid crashes when SHELL=abcde is specified on the command line * variable.c (do_variable_definition): If $SHELL was not found, process "SHELL=foo" as any other variable definition. This avoids segfaults when SHELL=foo is specified on the Make command line. Reported by Orgad Shaneh . 2017-06-04 Paul Smith [SV 51159] Use a non-blocking read with pselect to avoid hangs. * posixos.c (set_blocking): Set blocking on a file descriptor. (jobserver_setup): Set non-blocking on the jobserver read side. (jobserver_parse_auth): Ditto. (jobserver_acquire_all): Set blocking to avoid a busy-wait loop. (jobserver_acquire): If the non-blocking read() returns without taking a token then try again. [SV 50823] Support filenames containing '$' in MAKEFILE_LIST * variable.h (enum variable_flavor: Add a new flavor for appended values that shouldn't be expanded. * variable.c (do_variable_definition): If given this new flavor, do not expand the value before appending it. * read.c (eval_makefile): Use this new flavor for MAKEFILE_LIST * tests/scripts/variables/MFILE_LIST: Test filenames containing '$'. * tests/test_driver.pl: Useful error if given an invalid test name. * NEWS: Do not insert a space during '+=' if the value is empty. * doc/make.texi (Appending): Document this behavior. * variable.c (do_variable_definition): Only add a space if the variable value is not empty. * tests/scripts/variables/flavors: Test this behavior. 2017-06-04 Enrique Olaizola (tiny change) * read.c (read_all_makefiles): [SV 50909] Add MAKEFILES to strcache 2017-06-04 Paul Smith * po/LINGUAS: Add support for traditional Chinese (zh_TW) Rename output_tmpfile() to a misc function get_tmpfile() * output.c: Remove output_tmpfile() and umask handling. * output.h: Ditto. * misc.c: Add get_tmpfile() and umask handling. * makeint.h: Ditto. * function.c: Rename output_tmpfile() to get_tmpfile(). * main.c: Ditto. * vmsjobs.c: Ditto. [SV 13651] Handle out-of-memory conditions slightly more gracefully. * makeint.h: Change OUT_OF_MEM() macro to out_of_memory() function. * output.h, job.h: Move FD_* macros from job.h to output.h. * output.c (output_write): Write a buffer to an FD directly. (out_of_memory): Use output_write() to avoid allocating more memory while writing the error, and call exit() instead of die(). This does mean we can't translate the error string, though. * misc.c (xmalloc, xcalloc, xrealloc, xstrdup, xstrndup): Call new out_of_memory() rather than OUT_OF_MEM(). * read.c (parse_file_seq): Ditto. Clean up close-on-exec, particularly with jobserver pipes. * configure.ac: Check sys/file.h and assume fileno() always exists. * output.h: Move output-specific content from job.h to output.h. * os.h (fd_inherit, fd_noinherit): New functions manage FD inheritance. * posixos.c (fd_inherit, fd_noinherit): Implement for POSIX systems. (jobserver_setup): Force jobserver FDs to not be inherited by default. (jobserver_pre_child): Enable inheritance in recursive invocations. (jobserver_post_child): Disable inheritance after recursive invocations. * w32/w32os.c (fd_inherit, fd_noinherit): Implement for W32 systems. * job.h (CLOSE_ON_EXEC): Remove macro in deference to new fd_noinherit. * function.c (func_shell_base): Convert CLOSE_ON_EXEC to fd_noinherit. * job.c (child_execute_job): Ditto. * output.c (setup_tmpfile): Ditto. * read.c (eval_makefile): Ditto, plus remove HAVE_FILENO check. * w32/include/sub_proc.h: Remove process_noinherit for fd_noinherit. * w32/subproc/sub_proc.c: Ditto. [SV 50300] Use CFLAGS value of "-O1" in POSIX mode. * read.c (record_files): Use "-O1" not "-O" for CFLAGS and FFLAGS. * tests/scripts/targets/POSIX: Test for the new value. * configure.ac: [SV 50648] Detect Guile 2.2 packages. * doc/make.texi: [SV 50304] Add missing close parenthesis. Add test suite support to Windows * main.c (main): Sanitize program name detection on Windows. * makeint.h: 'program' is a const string on all platforms now. * tests/run_make_tests.bat: Windows bat file to invoke tests * tests/test_driver.pl: Obtain system-specific error messages. (get_osname): Compute the $port_type here. Add more $osname checks for different Windows Perl ports. (_run_command): Rewrite the timeout capability to work properly with Windows. Don't use Perl fork/exec; instead use system(1,...) which allows a more reliable/proper kill operation. Also, allow options to be given as a list instead of a string, to allow more complex quoting of command-line arguments. * tests/run_make_tests.pl (run_make_with_options): Allow options to be provided as a list in addition to a simple string. (set_more_defaults): Write sample makefiles and run make on them instead of trying to run echo and invoking make with -f-, to avoid relying on shell and echo to get basic configuration values. Also create a $sh_name variable instead of hard-coding /bin/sh. * tests/scripts/features/archives: Skip on Windows. * tests/scripts/features/escape: Use list method for passing options. * tests/scripts/features/include: Use system-specific error messages. * tests/scripts/features/output-sync: "Command not found" errors generate very different / odd output on Windows. This needs to be addressed but for now disable these tests on Windows. * tests/scripts/functions/abspath: Disable on Windows. * tests/scripts/functions/file: Use system-specific error messages. * tests/scripts/functions/shell: "Command not found" errors generate very different / odd output on Windows. This needs to be addressed but for now disable these tests on Windows. * tests/scripts/misc/close_stdout: Disable on Windows. * tests/scripts/options/dash-k: Use system-specific error messages. * tests/scripts/options/dash-l: Disable on Windows. * tests/scripts/options/eval: Use list method for passing options. * tests/scripts/options/general: Skip some non-portable tests. * tests/scripts/targets/ONESHELL: Skip some non-portable tests. * tests/scripts/targets/POSIX: Skip some non-portable tests. * tests/scripts/variables/MAKEFILES: Skip some non-portable tests. * tests/scripts/variables/SHELL: Use a makefile not -f- for testing. 2017-06-04 Enrique Olaizola * tests/run_make_tests.pl: [SV 50902] Find Perl modules 2017-01-11 Eli Zaretskii [SV 50021] Avoid infloop on MS-Windows with short scripts * job.c (reap_children) [WINDOWS32]: Avoid recursive call to reap_children when the argument passed to map_windows32_error_to_string is negative or too large. 2016-12-28 Paul Smith * main.c (switches): Add -E as an alias for --eval. * make.1: Document the -E and --eval options. * doc/make.texi: Document the -E option. * tests/scripts/options/eval: Test the -E option and MAKEFILES. * NEWS: Add information about the new option. * main.c (switches): Add --no-silent to undo -s options. * make.1: Document the new flag. * doc/make.texi: Document the new flag. Remove suggestions that the .SILENT special target is deprecated or should not be used. * tests/scripts/options/dash-s: Test the -s and --no-silent options. * NEWS: Add information about the new option. 2016-12-26 Martin Dorey * job.c (child_execute_job): [SV 49938] Avoid spurious GCC warning. * main.c (main): [SV 49935] Fix uninitialized variable. 2016-12-26 Paul Smith [SV 40236] Handle included file open failures properly. * read.c (eval_makefile): Set deps->error if we discovered any error reading makefiles, and set NONEXISTENT_MTIME so we know it needs to be rebuilt. * main.c (main): Clean up management of makefile_mtimes. * tests/scripts/features/include: Add open failure testcases. Portability changes for the test suite. * tests/test_driver.pl: Save error strings for later comparison. * tests/run_make_tests.pl: Create portable commands for later use. * tests/*: Use these new variables. [SV 20513] Un-escaped # are not comments in function invocations * NEWS: Document the change, as a backward-incompatible change. * main.c (main): Add 'nocomment' to the .FEATURES variable. * read.c (remove_comments): Skip variable references during remove. (find_char_unquote): Fix comments for new STOPMAP support. * tests/scripts/features/escape: Test new escape syntax. * tests/scripts/functions/guile: Ditto. * tests/scripts/functions/shell: Ditto. * main.c (main): [SV 40234] Show correct error message. 2016-12-26 Christoph Schulz * main.c (switches): [SV 48809] Accept obsolete jobserver flag. 2016-12-26 Paul Smith * read.c (get_next_mword): [SV 49865] Make fallthrough explicit. [SV 49114] Remove support for the NO_FLOAT compile flag. * makeint.h (max_load_average): Always a double. * main.c (max_load_average, default_load_average): Always doubles. (switches): -l option is a "floating" format. (decode_switches, define_makeflags): Support "floating" format. * remake.c (f_mtime): Show time skew as double. * rule.c (print_rule_data_base): Show percentages as double. * Makefile.ami, README.DOS.template, SMakefile.template: Remove references to NO_FLOAT. * SCOPTIONS, glob/SCOPTIONS: Remove NO_FLOAT settings. [SV 45477] [SV 49115] Parse DOS/Windows drivespecs correctly. * read.c (parse_file_seq) [WINDOWS32]: Only consider a colon part of a path if it's in a valid Windows drivespec. 2016-12-25 Paul Smith [SV 49116] Check potential null pointer dereference. * w32/subproc/sub_proc.c (make_command_line): Simplify cygwin shell check for correctness. 2016-12-25 Jaak Ristioja * expand.c (variable_append): [SV 49113] Possible null ptr deref * w32/*/dirent.*: [SV 49111] Remove unused telldir() 2016-12-25 Paul Smith Add more GCC warnings to the maintainer build. * arscan.c: [SV 49112] Correct TEST printf() formatting. Recommended by Jaak Ristioja * hash.c: Correct fprintf() formatting. * maintMakefile: Add extra GCC warning flags. * po/Makevars, makeint.h, debug.h: Add xgettext C format flags. * po/LINGUAS: Added Serbian translation. * README.template: Clarify some items in the README * doc/make.texi: [SV 48951] Fix documentation typo. * maintMakefile: Update default GPG ID for new key. 2016-12-14 Paul Smith Resolve issues discovered by static code analysis. * maintMakefile: Add a rule to submit code for analysis. * configure.ac: Check for availability of the umask() function. * output.c (output_tmpfd, output_tmpfile): Use umask on temp files. * makeint.h (PATH_VAR): Reserve an extra character for nul bytes. * function.c (func_error): Initialize buffer to empty string. * job.c (child_execute_job): Verify validity of fdin. * main.c (main): Simplify code for makefile updating algorithm. * arscan.c (ar_scan): Verify member name length before reading. * read.c (readline): Cast pointer arithmetic to avoid warnings. * remake.c (update_file): Remove unreachable code. (name_mtime): Verify symlink name length. 2016-11-12 Eli Zaretskii * NEWS: Mention the extended support for -jN on MS-Windows. 2016-11-12 Marc Ullman Support more than 63 jobs on MS-Windows * job.c (start_waiting_job, load_too_high): * w32/w32os.c (jobserver_setup, jobserver_acquire): Abstracted out MAXIMUM_WAIT_OBJECTS. Call process_table_full instead. * w32/include/sub_proc.h: Update and add prototypes. * w32/subproc/sub_proc.c (GMAKE_MAXIMUM_WAIT_OBJECTS): New macro. (process_wait_for_multiple_objects): Drop-in replacement for Windows API WaitForMultipleOjects. (process_wait_for_any_private): Replaced MAXIMUM_WAIT_OBJECTS with GMAKE_MAXIMUM_WAIT_OBJECTS. (process_table_full): Replacement for process_used_slots. (process_used_slots): Removed, as no longer needed. (process_table_usable_size): Returns maximum usable size of process table. (process_table_actual_size): Returns actual size of process table. (process_register): Added assertion. (process_easy): Abstracted out MAXIMUM_WAIT_OBJECTS. 2016-10-09 Eli Zaretskii Only include strings.h in MinGW builds * main.c: * job.c: Include strings.h only if HAVE_STRINGS_H is defined. * config.h.W32.template (HAVE_STRINGS_H): Define only for MinGW, as MSVC doesn't have this header. 2016-10-06 Eli Zaretskii Update the Guile version tested with the MS-Windows build. Avoid compiler warnings with MinGW runtime 3.22.2 * main.c: * job.c: Include strings.h, to get the prototypes of strcasecmp and strncasecmp with latest MinGW runtime versions. * config.h.W32.template (HAVE_STRINGS_H): Define. 2016-06-24 Paul Smith * README.W32.template: Update the build documentation. * build_w32.bat: Fix issues with Visual Studio builds. Fix an error that always created Debug builds. Support 32bit and 64bit builds. * Update to pre-release version 4.2.90. 2016-06-10 Paul Smith GNU Make release 4.2.1. 2016-06-06 Paul Smith * maintMakefile: TP recommends rsync for retrieving PO files. 2016-05-31 Jeremy Devenport (tiny change) * main.c (main): [SV 48009] Reset stack limit for make re-exec. 2016-05-31 Paul Smith [SV 47995] Ensure forced double-colon rules work with -j. The fix for SV 44742 had a side-effect that some double-colon targets were skipped. This happens because the "considered" facility assumed that all targets would be visited on each walk through the dependency graph: we used a bit for considered and toggled it on each pass; if we didn't walk the entire graph on every pass the bit would get out of sync. The new behavior after SV 44742 might return early without walking the entire graph. To fix this I changed the considered value to an integer which is monotonically increasing: it is then never possible to incorrectly determine that a previous pass through the graph already considered the current target. * filedef.h (struct file): make CONSIDERED an unsigned int. * main.c (main): No longer need to reset CONSIDERED. * remake.c (update_goal_chain): increment CONSIDERED rather than inverting it between 0<->1. (update_file_1): Reset CONSIDERED to 0 so it's re-considered. (check_dep): Ditto. * tests/scripts/features/double_colon: Add a regression test. 2016-05-31 Paul Smith * DELETE_ON_ERROR: [SV 48061] Use "exit 1" for portability. Reported by Joel Fredrikson * w32/pathstuff.c: [SV 47996] Use ISBLANK() not isblank(). 2016-05-28 Eli Zaretskii Fix printing time stamps on MS-Windows * dir.c (print_dir_data_base) [WINDOWS32]: Use %I64u format for printing unsigned 64-bit data types, as %ull is not universally supported. 2016-05-27 Luke Allardyce (tiny change) [SV 48037] Fix MinGW build with Posix configury tools * w32/Makefile.am (libw32_a_CPPFLAGS): Add -I$(srcdir)/glob. 2016-05-22 Paul Smith GNU Make release 4.2. 2016-05-21 Joe Crayne (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 * 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 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 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 [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 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 * 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 * NEWS: Update for pre-release * dep.h, makeint.h (show_goal_error): Move to makeint.h. 2016-04-11 Paul Smith [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 * 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 * 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 2016-04-04 Paul Smith 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 * 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 * 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 * 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 * 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 * 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 * variable.c: Align type of variable_changenum. 2016-03-13 Paul Smith [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 [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 * job.c (exec_command): [SV 47365] Show error on exec failure. 2016-03-08 Paul Smith [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 * 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 * 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 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 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 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 [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 * 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 [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 * 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 (tiny change) * job.c [RISCOS]: Remove logic that is no longer required. 2015-07-12 Paul Smith * remake.c (update_file): [SV 44742] Keep double-colon rule status. Fix suggested by Everett Boyer 2015-07-10 James Johnston (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 [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 2015-02-28 Eli Zaretskii [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 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 (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 * main.c (main): [SV 43434] Handle NULL returns from ttyname(). 2014-10-20 Benedikt Morbach (tiny change) * tests/scripts/features/archives: [SV 43405] override AR variable. 2014-10-20 John Malmberg 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 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 [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 [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 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 * configure.ac, NEWS, README.git: Set up for the next release. 2014-10-05 Paul Smith GNU Make release 4.1. 2014-10-02 Eli Zaretskii Fix Cygwin compilation error. * job.c (construct_command_argv_internal) [HAVE_DOS_PATHS]: Fix initializer for sh_chars_sh. Reported by Denis Excoffier. 2014-10-01 Gisle Vanem Fix last commit. * makeint.h (ftruncate): Define also for __WATCOMC__. 2014-10-01 Eli Zaretskii 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 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 * 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 (tiny change) * configure.ac: Fix spacing in helptext of customs 2014-09-15 Eli Zaretskii 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 * 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 * 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 * 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 2014-09-07 Hartmut Becker 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 * configure.ac, maintMakefile, w32/Makefile.am: Fix autotools issues. Reported by Paul Eggert 2014-08-30 Eli Zaretskii 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 . 2014-07-16 Eli Zaretskii 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 [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 (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 (tiny change) * arscan.c [ANDROID]: Android has no ar.h but supports archives. 2014-07-07 Paul Smith * read.c (eval): [SV 41677] Correct test for TAB vs. 8 spaces. 2014-07-07 Piotr Jaroszynski (tiny change) * output.c (pump_from_tmp): [SV 42378] Flush the output file regularly. 2014-07-07 John Malmberg 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 * 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 * 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 NMakefile.template ($(OUTDIR)/posixfcn.obj): Fix a typo. 2014-05-01 Paul Smith [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 * Rename MAP_PATHSEP to MAP_DIRSEP. * configure.ac: Fixup for newer autoconf/automake 2014-02-08 Ray Donnelly (tiny change) * output.c: Ensure space for final nul byte in fmtbuf. 2014-02-07 Gisle Vanem (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 * job.c (set_child_handler_action_flags): [SV 41341] Ensure signal handler is in place before alarm(1). 2014-01-20 Alan Hourihane (tiny change) * configure.ac: [SV 40790] Fix load autoconf variables. 2014-01-17 Pavel Fedin (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 * 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 (tiny change) Fix .LIBPATTERNS for MS-Windows builds. default.c (.LIBPATTERNS) [__CYGWIN__ || WINDOWS32]: Provide library patterns for MS-Windows. 2013-11-27 Paul Smith * 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 2013-11-27 Stephan T. Lavavej (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 * 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 (tiny change) * load.c: [SV 40515] Define RTLD_GLOBAL if not set. 2013-11-23 Paul Smith [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 * 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 2013-10-24 Gerte Hoogewerf Fix MS Visual Studio NET2003 build. * make_msvc_net2003.vcproj: Do not exclude guile.c from compilation. 2013-10-23 Christian Boos 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 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 . * makeint.h (guile_gmake_setup): Define prototype unconditionally, to avoid compiler warnings. 2013-10-22 Eli Zaretskii 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 * 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 * README.git: Add some missing release steps. 2013-10-19 Paul Smith [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 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 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 . 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 . NMakefile.template (OBJS): Add load.obj and posixfcn.obj. ($(OUTDIR)/pathstuff.obj): New dependency. Suggested by Christian Boos . 2013-10-13 Paul Smith [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. make-4.3/Makefile.in0000644000175000017500000022522513611136507011276 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in 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. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # This is a -*-Makefile-*-, or close enough # # Copyright (C) 1997-2020 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 . VPATH = @srcdir@ 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 \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = make$(EXEEXT) @WINDOWSENV_TRUE@am__append_1 = $(w32_SRCS) @WINDOWSENV_TRUE@am__append_2 = -I $(top_srcdir)/src/w32/include @WINDOWSENV_FALSE@am__append_3 = src/posixos.c @USE_CUSTOMS_TRUE@am__append_4 = src/remote-cstms.c @USE_CUSTOMS_FALSE@am__append_5 = src/remote-stub.c subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/access.m4 \ $(top_srcdir)/m4/acinclude.m4 $(top_srcdir)/m4/alloca.m4 \ $(top_srcdir)/m4/asm-underscore.m4 $(top_srcdir)/m4/close.m4 \ $(top_srcdir)/m4/dirname.m4 $(top_srcdir)/m4/dospaths.m4 \ $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \ $(top_srcdir)/m4/eaccess.m4 $(top_srcdir)/m4/errno_h.m4 \ $(top_srcdir)/m4/error.m4 $(top_srcdir)/m4/extensions.m4 \ $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/fcntl-o.m4 \ $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ $(top_srcdir)/m4/findprog-in.m4 \ $(top_srcdir)/m4/getdtablesize.m4 \ $(top_srcdir)/m4/getloadavg.m4 $(top_srcdir)/m4/getprogname.m4 \ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gnulib-common.m4 \ $(top_srcdir)/m4/gnulib-comp.m4 \ $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/include_next.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/limits-h.m4 $(top_srcdir)/m4/longlong.m4 \ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/msvc-inval.m4 \ $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/off_t.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stdbool.m4 \ $(top_srcdir)/m4/stddef_h.m4 $(top_srcdir)/m4/stdint.m4 \ $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ $(top_srcdir)/m4/stpcpy.m4 $(top_srcdir)/m4/strerror.m4 \ $(top_srcdir)/m4/string_h.m4 $(top_srcdir)/m4/sys_socket_h.m4 \ $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/unistd_h.m4 \ $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_t.m4 \ $(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/xalloc.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) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h CONFIG_CLEAN_FILES = build.cfg tests/config-flags.pm CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" \ "$(DESTDIR)$(includedir)" PROGRAMS = $(bin_PROGRAMS) am__make_SOURCES_DIST = src/ar.c src/arscan.c src/commands.c \ src/commands.h src/debug.h src/default.c src/dep.h src/dir.c \ src/expand.c src/file.c src/filedef.h src/function.c \ src/getopt.c src/getopt.h src/getopt1.c src/gettext.h \ src/guile.c src/hash.c src/hash.h src/implicit.c src/job.c \ src/job.h src/load.c src/loadapi.c src/main.c src/makeint.h \ src/misc.c src/os.h src/output.c src/output.h src/read.c \ src/remake.c src/rule.c src/rule.h src/signame.c \ src/strcache.c src/variable.c src/variable.h src/version.c \ src/vpath.c src/w32/pathstuff.c src/w32/w32os.c \ src/w32/compat/dirent.c src/w32/compat/posixfcn.c \ src/w32/include/dirent.h src/w32/include/dlfcn.h \ src/w32/include/pathstuff.h src/w32/include/sub_proc.h \ src/w32/include/w32err.h src/w32/subproc/misc.c \ src/w32/subproc/proc.h src/w32/subproc/sub_proc.c \ src/w32/subproc/w32err.c src/posixos.c src/remote-cstms.c \ src/remote-stub.c am__dirstamp = $(am__leading_dot)dirstamp am__objects_1 = src/ar.$(OBJEXT) src/arscan.$(OBJEXT) \ src/commands.$(OBJEXT) src/default.$(OBJEXT) src/dir.$(OBJEXT) \ src/expand.$(OBJEXT) src/file.$(OBJEXT) src/function.$(OBJEXT) \ src/getopt.$(OBJEXT) src/getopt1.$(OBJEXT) src/guile.$(OBJEXT) \ src/hash.$(OBJEXT) src/implicit.$(OBJEXT) src/job.$(OBJEXT) \ src/load.$(OBJEXT) src/loadapi.$(OBJEXT) src/main.$(OBJEXT) \ src/misc.$(OBJEXT) src/output.$(OBJEXT) src/read.$(OBJEXT) \ src/remake.$(OBJEXT) src/rule.$(OBJEXT) src/signame.$(OBJEXT) \ src/strcache.$(OBJEXT) src/variable.$(OBJEXT) \ src/version.$(OBJEXT) src/vpath.$(OBJEXT) am__objects_2 = src/w32/pathstuff.$(OBJEXT) src/w32/w32os.$(OBJEXT) \ src/w32/compat/dirent.$(OBJEXT) \ src/w32/compat/posixfcn.$(OBJEXT) \ src/w32/subproc/misc.$(OBJEXT) \ src/w32/subproc/sub_proc.$(OBJEXT) \ src/w32/subproc/w32err.$(OBJEXT) @WINDOWSENV_TRUE@am__objects_3 = $(am__objects_2) @WINDOWSENV_FALSE@am__objects_4 = src/posixos.$(OBJEXT) @USE_CUSTOMS_TRUE@am__objects_5 = src/remote-cstms.$(OBJEXT) @USE_CUSTOMS_FALSE@am__objects_6 = src/remote-stub.$(OBJEXT) am_make_OBJECTS = $(am__objects_1) $(am__objects_3) $(am__objects_4) \ $(am__objects_5) $(am__objects_6) make_OBJECTS = $(am_make_OBJECTS) am__DEPENDENCIES_1 = make_DEPENDENCIES = $(LIBOBJS) $(am__DEPENDENCIES_1) lib/libgnu.a \ $(am__DEPENDENCIES_1) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = src/$(DEPDIR)/amiga.Po src/$(DEPDIR)/ar.Po \ src/$(DEPDIR)/arscan.Po src/$(DEPDIR)/commands.Po \ src/$(DEPDIR)/default.Po src/$(DEPDIR)/dir.Po \ src/$(DEPDIR)/expand.Po src/$(DEPDIR)/file.Po \ src/$(DEPDIR)/function.Po src/$(DEPDIR)/getopt.Po \ src/$(DEPDIR)/getopt1.Po src/$(DEPDIR)/guile.Po \ src/$(DEPDIR)/hash.Po src/$(DEPDIR)/implicit.Po \ src/$(DEPDIR)/job.Po src/$(DEPDIR)/load.Po \ src/$(DEPDIR)/loadapi.Po src/$(DEPDIR)/main.Po \ src/$(DEPDIR)/misc.Po src/$(DEPDIR)/output.Po \ src/$(DEPDIR)/posixos.Po src/$(DEPDIR)/read.Po \ src/$(DEPDIR)/remake.Po src/$(DEPDIR)/remote-cstms.Po \ src/$(DEPDIR)/remote-stub.Po src/$(DEPDIR)/rule.Po \ src/$(DEPDIR)/signame.Po src/$(DEPDIR)/strcache.Po \ src/$(DEPDIR)/variable.Po src/$(DEPDIR)/version.Po \ src/$(DEPDIR)/vms_exit.Po src/$(DEPDIR)/vms_export_symbol.Po \ src/$(DEPDIR)/vms_progname.Po src/$(DEPDIR)/vmsfunctions.Po \ src/$(DEPDIR)/vmsify.Po src/$(DEPDIR)/vpath.Po \ src/w32/$(DEPDIR)/pathstuff.Po src/w32/$(DEPDIR)/w32os.Po \ src/w32/compat/$(DEPDIR)/dirent.Po \ src/w32/compat/$(DEPDIR)/posixfcn.Po \ src/w32/subproc/$(DEPDIR)/misc.Po \ src/w32/subproc/$(DEPDIR)/sub_proc.Po \ src/w32/subproc/$(DEPDIR)/w32err.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(make_SOURCES) $(EXTRA_make_SOURCES) DIST_SOURCES = $(am__make_SOURCES_DIST) $(EXTRA_make_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man_MANS) HEADERS = $(include_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir distdir-am dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/build.cfg.in \ $(top_srcdir)/build-aux/compile \ $(top_srcdir)/build-aux/config.guess \ $(top_srcdir)/build-aux/config.rpath \ $(top_srcdir)/build-aux/config.sub \ $(top_srcdir)/build-aux/depcomp \ $(top_srcdir)/build-aux/install-sh \ $(top_srcdir)/build-aux/missing $(top_srcdir)/src/config.h.in \ $(top_srcdir)/tests/config-flags.pm.in ABOUT-NLS AUTHORS \ COPYING NEWS README build-aux/compile build-aux/config.guess \ build-aux/config.rpath build-aux/config.sub build-aux/depcomp \ build-aux/install-sh build-aux/missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.lz GZIP_ENV = --best DIST_TARGETS = dist-lzip dist-gzip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_LDFLAGS = @AM_LDFLAGS@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ GETLOADAVG_LIBS = @GETLOADAVG_LIBS@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIB_ACCESS = @GNULIB_ACCESS@ GNULIB_ATOLL = @GNULIB_ATOLL@ GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_COPY_FILE_RANGE = @GNULIB_COPY_FILE_RANGE@ GNULIB_CREAT = @GNULIB_CREAT@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FCLOSE = @GNULIB_FCLOSE@ GNULIB_FCNTL = @GNULIB_FCNTL@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FDOPEN = @GNULIB_FDOPEN@ GNULIB_FFLUSH = @GNULIB_FFLUSH@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FGETC = @GNULIB_FGETC@ GNULIB_FGETS = @GNULIB_FGETS@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ GNULIB_FPURGE = @GNULIB_FPURGE@ GNULIB_FPUTC = @GNULIB_FPUTC@ GNULIB_FPUTS = @GNULIB_FPUTS@ GNULIB_FREAD = @GNULIB_FREAD@ GNULIB_FREOPEN = @GNULIB_FREOPEN@ GNULIB_FSCANF = @GNULIB_FSCANF@ GNULIB_FSEEK = @GNULIB_FSEEK@ GNULIB_FSEEKO = @GNULIB_FSEEKO@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTELL = @GNULIB_FTELL@ GNULIB_FTELLO = @GNULIB_FTELLO@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_FWRITE = @GNULIB_FWRITE@ GNULIB_GETC = @GNULIB_GETC@ GNULIB_GETCHAR = @GNULIB_GETCHAR@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETPASS = @GNULIB_GETPASS@ GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GRANTPT = @GNULIB_GRANTPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_ISATTY = @GNULIB_ISATTY@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MBTOWC = @GNULIB_MBTOWC@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_OPEN = @GNULIB_OPEN@ GNULIB_OPENAT = @GNULIB_OPENAT@ GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POPEN = @GNULIB_POPEN@ GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PRINTF = @GNULIB_PRINTF@ GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ GNULIB_PTSNAME = @GNULIB_PTSNAME@ GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ GNULIB_PUTC = @GNULIB_PUTC@ GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ GNULIB_PUTENV = @GNULIB_PUTENV@ GNULIB_PUTS = @GNULIB_PUTS@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_QSORT_R = @GNULIB_QSORT_R@ GNULIB_RANDOM = @GNULIB_RANDOM@ GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ GNULIB_REALPATH = @GNULIB_REALPATH@ GNULIB_REMOVE = @GNULIB_REMOVE@ GNULIB_RENAME = @GNULIB_RENAME@ GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_RPMATCH = @GNULIB_RPMATCH@ GNULIB_SCANF = @GNULIB_SCANF@ GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ GNULIB_SETENV = @GNULIB_SETENV@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOD = @GNULIB_STRTOD@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRTOLD = @GNULIB_STRTOLD@ GNULIB_STRTOLL = @GNULIB_STRTOLL@ GNULIB_STRTOULL = @GNULIB_STRTOULL@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ GNULIB_UNSETENV = @GNULIB_UNSETENV@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ GNULIB_VFSCANF = @GNULIB_VFSCANF@ GNULIB_VPRINTF = @GNULIB_VPRINTF@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ GNULIB_WCTOMB = @GNULIB_WCTOMB@ GNULIB_WRITE = @GNULIB_WRITE@ GNULIB__EXIT = @GNULIB__EXIT@ GREP = @GREP@ GUILE_CFLAGS = @GUILE_CFLAGS@ GUILE_LIBS = @GUILE_LIBS@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ HOST_CPU = @HOST_CPU@ HOST_CPU_C_ABI = @HOST_CPU_C_ABI@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LDFLAGS = @LDFLAGS@ LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@ LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIMITS_H = @LIMITS_H@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_HOST = @MAKE_HOST@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REMOTE = @REMOTE@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_CALLOC = @REPLACE_CALLOC@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_MALLOC = @REPLACE_MALLOC@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOC = @REPLACE_REALLOC@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ USE_NLS = @USE_NLS@ USE_SYSTEM_GLOB = @USE_SYSTEM_GLOB@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = $(datadir)/locale localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = dist-lzip silent-rules std-options subdir-objects nostdinc ACLOCAL_AMFLAGS = -I m4 SUBDIRS = lib po doc include_HEADERS = src/gnumake.h man_MANS = doc/make.1 make_SRCS = src/ar.c src/arscan.c src/commands.c src/commands.h \ src/debug.h src/default.c src/dep.h src/dir.c src/expand.c \ src/file.c src/filedef.h src/function.c src/getopt.c \ src/getopt.h src/getopt1.c src/gettext.h src/guile.c \ src/hash.c src/hash.h src/implicit.c src/job.c src/job.h \ src/load.c src/loadapi.c src/main.c src/makeint.h src/misc.c \ src/os.h src/output.c src/output.h src/read.c src/remake.c \ src/rule.c src/rule.h src/signame.c src/strcache.c \ src/variable.c src/variable.h src/version.c src/vpath.c w32_SRCS = src/w32/pathstuff.c src/w32/w32os.c src/w32/compat/dirent.c \ src/w32/compat/posixfcn.c src/w32/include/dirent.h \ src/w32/include/dlfcn.h src/w32/include/pathstuff.h \ src/w32/include/sub_proc.h src/w32/include/w32err.h \ src/w32/subproc/misc.c src/w32/subproc/proc.h \ src/w32/subproc/sub_proc.c src/w32/subproc/w32err.c vms_SRCS = src/vms_exit.c src/vms_export_symbol.c src/vms_progname.c \ src/vmsdir.h src/vmsfunctions.c src/vmsify.c amiga_SRCS = src/amiga.c src/amiga.h glob_SRCS = lib/fnmatch.c lib/fnmatch.h lib/glob.c lib/glob.h alloca_SRCS = lib/alloca.c loadavg_SRCS = lib/getloadavg.c make_SOURCES = $(make_SRCS) $(am__append_1) $(am__append_3) \ $(am__append_4) $(am__append_5) EXTRA_make_SOURCES = $(amiga_SRCS) $(vms_SRCS) make_LDADD = $(LIBOBJS) $(GUILE_LIBS) lib/libgnu.a $(GETLOADAVG_LIBS) \ @LIBINTL@ AM_CPPFLAGS = -Isrc -I$(top_srcdir)/src -Ilib -I$(top_srcdir)/lib \ -DLIBDIR=\"$(libdir)\" -DINCLUDEDIR=\"$(includedir)\" \ -DLOCALEDIR=\"$(localedir)\" $(am__append_2) AM_CFLAGS = $(GUILE_CFLAGS) # Extra stuff to include in the distribution. mk_FILES = Basic.mk mk/msdosdjgpp.mk mk/Amiga.mk mk/VMS.mk mk/Windows32.mk # We don't need this, since the standard automake output will do. #mk/Posix.mk.in m4_FILES = m4/gnulib-cache.m4 test_FILES = tests/run_make_tests tests/run_make_tests.bat \ tests/run_make_tests.pl tests/test_driver.pl \ tests/config-flags.pm.in tests/config_flags_pm.com \ tests/config-flags.pm.W32 \ tests/mkshadow tests/thelp.pl tests/guile.supp tests/README # test/scripts are added via dist-hook below. EXTRA_DIST = ChangeLog README build.sh build.cfg.in $(man_MANS) \ README.customs README.OS2 \ README.Amiga SCOPTIONS src/config.ami \ README.DOS builddos.bat src/configh.dos \ README.W32 build_w32.bat src/config.h.W32 \ README.VMS makefile.com src/config.h-vms src/vmsjobs.c \ vms_export_symbol_test.com \ src/gmk-default.scm src/gmk-default.h \ $(mk_FILES) $(m4_FILES) $(test_FILES) # > check-regression # # Look for the make test suite, and run it if found and we can find perl. # If we're building outside the tree, we use symlinks to make a local copy of # the test suite. Unfortunately the test suite itself isn't localizable yet. # MAKETESTFLAGS = all: all-recursive .SUFFIXES: .SUFFIXES: .c .o .obj am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): src/config.h: src/stamp-h1 @test -f $@ || rm -f src/stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) src/stamp-h1 src/stamp-h1: $(top_srcdir)/src/config.h.in $(top_builddir)/config.status @rm -f src/stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status src/config.h $(top_srcdir)/src/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f src/stamp-h1 touch $@ distclean-hdr: -rm -f src/config.h src/stamp-h1 build.cfg: $(top_builddir)/config.status $(srcdir)/build.cfg.in cd $(top_builddir) && $(SHELL) ./config.status $@ tests/config-flags.pm: $(top_builddir)/config.status $(top_srcdir)/tests/config-flags.pm.in cd $(top_builddir) && $(SHELL) ./config.status $@ install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files 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 &2; bad=1; fi; \ done; \ done; rm -f c$${pid}_.???; exit $$bad src/$(am__dirstamp): @$(MKDIR_P) src @: > src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/$(DEPDIR) @: > src/$(DEPDIR)/$(am__dirstamp) src/ar.$(OBJEXT): src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) src/arscan.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/commands.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/default.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/dir.$(OBJEXT): src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) src/expand.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/file.$(OBJEXT): src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) src/function.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/getopt.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/getopt1.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/guile.$(OBJEXT): src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) src/hash.$(OBJEXT): src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) src/implicit.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/job.$(OBJEXT): src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) src/load.$(OBJEXT): src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) src/loadapi.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/main.$(OBJEXT): src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) src/misc.$(OBJEXT): src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) src/output.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/read.$(OBJEXT): src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) src/remake.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/rule.$(OBJEXT): src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) src/signame.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/strcache.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/variable.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/version.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/vpath.$(OBJEXT): src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) src/w32/$(am__dirstamp): @$(MKDIR_P) src/w32 @: > src/w32/$(am__dirstamp) src/w32/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/w32/$(DEPDIR) @: > src/w32/$(DEPDIR)/$(am__dirstamp) src/w32/pathstuff.$(OBJEXT): src/w32/$(am__dirstamp) \ src/w32/$(DEPDIR)/$(am__dirstamp) src/w32/w32os.$(OBJEXT): src/w32/$(am__dirstamp) \ src/w32/$(DEPDIR)/$(am__dirstamp) src/w32/compat/$(am__dirstamp): @$(MKDIR_P) src/w32/compat @: > src/w32/compat/$(am__dirstamp) src/w32/compat/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/w32/compat/$(DEPDIR) @: > src/w32/compat/$(DEPDIR)/$(am__dirstamp) src/w32/compat/dirent.$(OBJEXT): src/w32/compat/$(am__dirstamp) \ src/w32/compat/$(DEPDIR)/$(am__dirstamp) src/w32/compat/posixfcn.$(OBJEXT): src/w32/compat/$(am__dirstamp) \ src/w32/compat/$(DEPDIR)/$(am__dirstamp) src/w32/subproc/$(am__dirstamp): @$(MKDIR_P) src/w32/subproc @: > src/w32/subproc/$(am__dirstamp) src/w32/subproc/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/w32/subproc/$(DEPDIR) @: > src/w32/subproc/$(DEPDIR)/$(am__dirstamp) src/w32/subproc/misc.$(OBJEXT): src/w32/subproc/$(am__dirstamp) \ src/w32/subproc/$(DEPDIR)/$(am__dirstamp) src/w32/subproc/sub_proc.$(OBJEXT): src/w32/subproc/$(am__dirstamp) \ src/w32/subproc/$(DEPDIR)/$(am__dirstamp) src/w32/subproc/w32err.$(OBJEXT): src/w32/subproc/$(am__dirstamp) \ src/w32/subproc/$(DEPDIR)/$(am__dirstamp) src/posixos.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/remote-cstms.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/remote-stub.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/amiga.$(OBJEXT): src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp) src/vms_exit.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/vms_export_symbol.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/vms_progname.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/vmsfunctions.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/vmsify.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) make$(EXEEXT): $(make_OBJECTS) $(make_DEPENDENCIES) $(EXTRA_make_DEPENDENCIES) @rm -f make$(EXEEXT) $(AM_V_CCLD)$(LINK) $(make_OBJECTS) $(make_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f src/*.$(OBJEXT) -rm -f src/w32/*.$(OBJEXT) -rm -f src/w32/compat/*.$(OBJEXT) -rm -f src/w32/subproc/*.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/amiga.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/ar.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/arscan.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/commands.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/default.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/dir.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/expand.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/file.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/function.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/getopt.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/getopt1.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/guile.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/hash.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/implicit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/job.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/load.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/loadapi.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/misc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/output.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/posixos.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/read.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/remake.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/remote-cstms.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/remote-stub.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/rule.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/signame.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/strcache.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/variable.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/version.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/vms_exit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/vms_export_symbol.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/vms_progname.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/vmsfunctions.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/vmsify.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/vpath.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/w32/$(DEPDIR)/pathstuff.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/w32/$(DEPDIR)/w32os.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/w32/compat/$(DEPDIR)/dirent.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/w32/compat/$(DEPDIR)/posixfcn.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/w32/subproc/$(DEPDIR)/misc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/w32/subproc/$(DEPDIR)/sub_proc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/w32/subproc/$(DEPDIR)/w32err.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` install-man1: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) install-includeHEADERS: $(include_HEADERS) @$(NORMAL_INSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ done uninstall-includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir @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 shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) 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/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-local check: check-recursive all-am: Makefile $(PROGRAMS) $(MANS) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f src/$(DEPDIR)/$(am__dirstamp) -rm -f src/$(am__dirstamp) -rm -f src/w32/$(DEPDIR)/$(am__dirstamp) -rm -f src/w32/$(am__dirstamp) -rm -f src/w32/compat/$(DEPDIR)/$(am__dirstamp) -rm -f src/w32/compat/$(am__dirstamp) -rm -f src/w32/subproc/$(DEPDIR)/$(am__dirstamp) -rm -f src/w32/subproc/$(am__dirstamp) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f src/$(DEPDIR)/amiga.Po -rm -f src/$(DEPDIR)/ar.Po -rm -f src/$(DEPDIR)/arscan.Po -rm -f src/$(DEPDIR)/commands.Po -rm -f src/$(DEPDIR)/default.Po -rm -f src/$(DEPDIR)/dir.Po -rm -f src/$(DEPDIR)/expand.Po -rm -f src/$(DEPDIR)/file.Po -rm -f src/$(DEPDIR)/function.Po -rm -f src/$(DEPDIR)/getopt.Po -rm -f src/$(DEPDIR)/getopt1.Po -rm -f src/$(DEPDIR)/guile.Po -rm -f src/$(DEPDIR)/hash.Po -rm -f src/$(DEPDIR)/implicit.Po -rm -f src/$(DEPDIR)/job.Po -rm -f src/$(DEPDIR)/load.Po -rm -f src/$(DEPDIR)/loadapi.Po -rm -f src/$(DEPDIR)/main.Po -rm -f src/$(DEPDIR)/misc.Po -rm -f src/$(DEPDIR)/output.Po -rm -f src/$(DEPDIR)/posixos.Po -rm -f src/$(DEPDIR)/read.Po -rm -f src/$(DEPDIR)/remake.Po -rm -f src/$(DEPDIR)/remote-cstms.Po -rm -f src/$(DEPDIR)/remote-stub.Po -rm -f src/$(DEPDIR)/rule.Po -rm -f src/$(DEPDIR)/signame.Po -rm -f src/$(DEPDIR)/strcache.Po -rm -f src/$(DEPDIR)/variable.Po -rm -f src/$(DEPDIR)/version.Po -rm -f src/$(DEPDIR)/vms_exit.Po -rm -f src/$(DEPDIR)/vms_export_symbol.Po -rm -f src/$(DEPDIR)/vms_progname.Po -rm -f src/$(DEPDIR)/vmsfunctions.Po -rm -f src/$(DEPDIR)/vmsify.Po -rm -f src/$(DEPDIR)/vpath.Po -rm -f src/w32/$(DEPDIR)/pathstuff.Po -rm -f src/w32/$(DEPDIR)/w32os.Po -rm -f src/w32/compat/$(DEPDIR)/dirent.Po -rm -f src/w32/compat/$(DEPDIR)/posixfcn.Po -rm -f src/w32/subproc/$(DEPDIR)/misc.Po -rm -f src/w32/subproc/$(DEPDIR)/sub_proc.Po -rm -f src/w32/subproc/$(DEPDIR)/w32err.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-includeHEADERS install-man install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-man1 install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: installcheck-binPROGRAMS maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f src/$(DEPDIR)/amiga.Po -rm -f src/$(DEPDIR)/ar.Po -rm -f src/$(DEPDIR)/arscan.Po -rm -f src/$(DEPDIR)/commands.Po -rm -f src/$(DEPDIR)/default.Po -rm -f src/$(DEPDIR)/dir.Po -rm -f src/$(DEPDIR)/expand.Po -rm -f src/$(DEPDIR)/file.Po -rm -f src/$(DEPDIR)/function.Po -rm -f src/$(DEPDIR)/getopt.Po -rm -f src/$(DEPDIR)/getopt1.Po -rm -f src/$(DEPDIR)/guile.Po -rm -f src/$(DEPDIR)/hash.Po -rm -f src/$(DEPDIR)/implicit.Po -rm -f src/$(DEPDIR)/job.Po -rm -f src/$(DEPDIR)/load.Po -rm -f src/$(DEPDIR)/loadapi.Po -rm -f src/$(DEPDIR)/main.Po -rm -f src/$(DEPDIR)/misc.Po -rm -f src/$(DEPDIR)/output.Po -rm -f src/$(DEPDIR)/posixos.Po -rm -f src/$(DEPDIR)/read.Po -rm -f src/$(DEPDIR)/remake.Po -rm -f src/$(DEPDIR)/remote-cstms.Po -rm -f src/$(DEPDIR)/remote-stub.Po -rm -f src/$(DEPDIR)/rule.Po -rm -f src/$(DEPDIR)/signame.Po -rm -f src/$(DEPDIR)/strcache.Po -rm -f src/$(DEPDIR)/variable.Po -rm -f src/$(DEPDIR)/version.Po -rm -f src/$(DEPDIR)/vms_exit.Po -rm -f src/$(DEPDIR)/vms_export_symbol.Po -rm -f src/$(DEPDIR)/vms_progname.Po -rm -f src/$(DEPDIR)/vmsfunctions.Po -rm -f src/$(DEPDIR)/vmsify.Po -rm -f src/$(DEPDIR)/vpath.Po -rm -f src/w32/$(DEPDIR)/pathstuff.Po -rm -f src/w32/$(DEPDIR)/w32os.Po -rm -f src/w32/compat/$(DEPDIR)/dirent.Po -rm -f src/w32/compat/$(DEPDIR)/posixfcn.Po -rm -f src/w32/subproc/$(DEPDIR)/misc.Po -rm -f src/w32/subproc/$(DEPDIR)/sub_proc.Po -rm -f src/w32/subproc/$(DEPDIR)/w32err.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-includeHEADERS \ uninstall-man uninstall-man: uninstall-man1 .MAKE: $(am__recursive_targets) check-am install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles am--refresh check check-am check-local clean \ clean-binPROGRAMS clean-cscope clean-generic cscope \ cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ dist-gzip dist-hook dist-lzip dist-shar dist-tarZ dist-xz \ dist-zip distcheck distclean distclean-compile \ distclean-generic distclean-hdr distclean-tags distcleancheck \ distdir distuninstallcheck dvi dvi-am html html-am info \ info-am install install-am install-binPROGRAMS install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html 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 \ 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 # --------------- Generate the Guile default module content src/guile.$(OBJEXT): src/gmk-default.h src/gmk-default.h: $(top_srcdir)/src/gmk-default.scm (echo 'static const char *const GUILE_module_defn = " '\\ \ && sed -e 's/;.*//' -e '/^[ \t]*$$/d' -e 's/"/\\"/g' -e 's/$$/ \\/' \ $(top_srcdir)/src/gmk-default.scm \ && echo '";') > src/gmk-default.h # --------------- Local DIST Section # Install the mk and tests subdirectories # dist-hook: (cd $(top_srcdir); \ sub=`find tests/scripts -follow \( -name .git -o -name .deps -o -name work -o -name .gitignore -o -name \*.orig -o -name \*.rej -o -name \*~ -o -name \*.out -o -name Makefile \) -prune -o -type f -print`; \ tar chf - $$sub) \ | (cd $(distdir); tar xfBp -) # --------------- Local CHECK Section check-local: check-regression @banner=" Regression PASSED: GNU Make $(VERSION) ($(MAKE_HOST)) built with $(CC) "; \ dashes=`echo "$$banner" | sed s/./=/g`; \ echo; \ echo "$$dashes"; \ echo "$$banner"; \ echo "$$dashes"; \ echo .PHONY: check-regression check-regression: tests/config-flags.pm @if test -f '$(top_srcdir)/tests/run_make_tests'; then \ ulimit -n 128; \ if $(PERL) -v >/dev/null 2>&1; then \ case `cd '$(top_srcdir)'; pwd` in `pwd`) : ;; \ *) test -d tests || mkdir tests; \ rm -f srctests; \ if ln -s '$(top_srcdir)/tests' srctests; then \ for f in run_make_tests run_make_tests.pl test_driver.pl scripts jhelp.pl; do \ rm -f tests/$$f; ln -s ../srctests/$$f tests; \ done; fi ;; \ esac; \ echo "cd tests && $(PERL) $(PERLFLAGS) ./run_make_tests.pl -srcdir $(abs_top_srcdir) -make ../make$(EXEEXT) $(MAKETESTFLAGS)"; \ cd tests && $(PERL) $(PERLFLAGS) ./run_make_tests.pl -srcdir '$(abs_top_srcdir)' -make '../make$(EXEEXT)' $(MAKETESTFLAGS); \ else \ echo "Can't find a working Perl ($(PERL)); the test suite requires Perl."; \ fi; \ else \ echo "Can't find the GNU Make test suite ($(top_srcdir)/tests)."; \ fi # --------------- Maintainer's Section # Tell automake that I haven't forgotten about this file and it will be # created before we build a distribution (see maintMakefile in the Git # distribution). README: @MAINT_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. .NOEXPORT: make-4.3/po/0000755000175000017500000000000013611151241007707 500000000000000make-4.3/po/insert-header.sin0000644000175000017500000000124013611136462013101 00000000000000# Sed script that inserts the file called HEADER before the header entry. # # At each occurrence of a line starting with "msgid ", we execute the following # commands. At the first occurrence, insert the file. At the following # occurrences, do nothing. The distinction between the first and the following # occurrences is achieved by looking at the hold space. /^msgid /{ x # Test if the hold space is empty. s/m/m/ ta # Yes it was empty. First occurrence. Read the file. r HEADER # Output the file's contents by reading the next line. But don't lose the # current line while doing this. g N bb :a # The hold space was nonempty. Following occurrences. Do nothing. x :b } make-4.3/po/stamp-po0000644000175000017500000000001213611136532011311 00000000000000timestamp make-4.3/po/be.gmo0000644000175000017500000001466413611136532010742 00000000000000Þ•Ida¬01A JX tJ•;à>;[ —"¡ ÄÑìÿ /Ga”#©Íæöÿ+ 2 L &f . #¼ à ð ü   ! . B V -] ‹ Ž ™ 6£ Ú ð " 3 ; L ` u € !˜ º É Ó à ó !û  ) @ X a ,d ‘   ˆº C R`:y?´RôhG[°G  T(b‹4¢%×ý&"<_&|+£$Ï*ôF+f’£¬l³1 +R2~_±<*N%yŸ·Ëç1ú", OR\¯´ÄlÓ$@:eH  éö"0S+f=’Ðê4PR_²Éç [u “.+2A=D<H513 ,;CI "? !9(@-4G%8/B6 7&#* ) E:0$>'F # Directories # Files # Variables This program built for %s This program built for %s (%s) -S, --no-keep-going, --stop Turns off -k. -h, --help Print this message and exit. -p, --print-data-base Print make's internal database. -w, --print-directory Print the current directory. Date %s uid = %d, gid = %d, mode = 0%o. (built-in): (name might be truncated) (no default goal) (search path) files, so far.# Also makes:# File does not exist.# File has been updated.# File has not been updated.# File is very old.# Last modified %s # Modification time never checked.# Successfully updated.# Not a target:%s%s: %s%s: %s%s: Timestamp out of range; substituting %s%s: illegal option -- %c %s: invalid option -- %c %s: option requires an argument -- %c %s: user %lu (real %lu), group %lu (real %lu) *** Waiting for unfinished jobs....Bad system callBroken pipeBus errorCurrent timeDanger signalI/O possibleIllegal InstructionInformation requestKilledMakefile from standard input specified twice.NoNo targetsOptions: Parallel jobs (-j) are not supported on this platform.Reading makefiles... Removing intermediate files... Report bugs to StoppedStopped (signal)Stopped (tty input)Stopped (tty output)TerminatedUpdating makefiles.... Usage: %s [options] [target] ... Window changedautomaticcommand linecreating jobs pipedefaultempty string invalid as file nameenvironmentfopen (temporary file)fwrite (temporary file)makefilenotouch archive member is not available on VMSunknown signalunlink (temporary file): Project-Id-Version: make 3.80 Report-Msgid-Bugs-To: bug-make@gnu.org PO-Revision-Date: 2003-10-21 11:50+0300 Last-Translator: Ales Nyakhaychyk Language-Team: Belarusian Language: be MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. X-Generator: KBabel 0.9.6 # ТÑчкі # Файлы # ÐŸÐµÑ€Ð°Ð¼ÐµÐ½Ð½Ñ‹Ñ Ð“Ñта праграма пабудавана Ð´Ð»Ñ %s ГÑта праграма падубавана Ð´Ð»Ñ %s (%s) -S, --no-keep-going, --stop Выключае -k. -h, --help Друкуе гÑтае паведамленьне й выходзіць. -p, --print-data-base Друкуе нутраную базу даньнÑÑž make. -w, --print-directory Друкуе бÑгучую Ñ‚Ñчку. Дата %s uid = %d, gid = %d, Ñ€Ñжым = 0%o. (убудаваны): (назва муÑіла быць абрÑзана) (нÑма дапомнае мÑты) (пошук шлÑху) файлаў, так далёка.# Так Ñама робÑцца:# Файл Ð½Ñ Ð¹Ñнуе.# Файл быў абноўлены.# Файл Ð½Ñ Ð±Ñ‹Ñž абноўлены.# Файл вельмі Ñтары.# ÐпошнÑе зьмÑненьне %s # Ð§Ð°Ñ Ð·ÑŒÐ¼ÑÐ½ÐµÐ½ÑŒÐ½Ñ Ð½Ñ–ÐºÐ¾Ð»Ñ– не правÑраўÑÑ.# ПаÑьпÑхова абноўлены.# ÐÑ Ð¼Ñта:%s%s: %s%s: %s%s: адбітак чаÑу па-за дапушчальнымі межамі, падÑтаўлÑецца %s%s: недапушчальны выбар -- %c. %s: нерÑчаіÑны выбар -- %c. %s: выбар патрабуе довад -- %c. %s: карыÑтальнік %lu (наÑамрÑч %lu), група %lu (наÑамрÑч %lu) *** Чакаюцца Ð½ÐµÐ·Ð°Ð²ÐµÑ€ÑˆÐ°Ð½Ñ‹Ñ Ð¿Ñ€Ð°Ñ†Ñ‹....ДрÑнны ÑÑ‹ÑÑ‚Ñмны выклікЗламаны трубаправодПамылка шыныБÑгучы чаÑСыгнал пагрозымагчым У/Ð’ÐÐµÐ´Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ñ–Ð½ÑтрукцыÑЗапыт аб зьвеÑткахЗабітыMakefile Ñа Ñтандартнага ўводу зададзены двойчы.ÐеÐÑма мÑтВыбары: ÐŸÐ°Ñ€Ð°Ð»ÐµÐ»ÑŒÐ½Ñ Ð¿Ñ€Ð°Ñ†Ñ‹ (-j) не падтрымліваюцца на гÑтае плÑтхорме.Чытаюцца make-файлы... ВыдалÑюцца Ð¿Ñ€Ð°Ð¼ÐµÐ¶ÐºÐ°Ð²Ñ‹Ñ Ñ„Ð°Ð¹Ð»Ñ‹... ПаведамлÑйце пра памылкі на . СпыненСпынена (Ñыгнал)Спынен (tty увод)Спынен (вывад на tty)ЗавершаныÐбнаўлÑюцца make-файлы.... ВыкарыÑтаньне: %s [выбары] [мÑта] ... Ðкно зьмененааўтаматычназагадны радокÑтвараецца трубаправод працдапомныпуÑты радок нерÑчаіÑны Ñž ÑкаÑьці назвы файлааÑÑродзьдзеfopen (чаÑовы файл)fwrite (чаÑовы файл)make-файлнедакрананьне да ўдзельніку архіва недаÑтупна на VMSневÑдомы Ñыгналunlink (чаÑовы файл): make-4.3/po/hr.gmo0000644000175000017500000013176613611136532010770 00000000000000Þ•®Œ Aü$$+$&J$q$$!Š$-¬$Ú$ ì$- %;%'Q%#y%% ´%Â%à%Pù%;J&"†&©& Å&tæ&L['P¨'Dù'9>(Mx(@Æ(o)Gw)o¿)P/*l€*Fí*J4+€+9,C:,f~,_å,;E-:-O¼-J .}W.uÕ.~K/>Ê/M 0CW02›0FÎ0I1;_1 ›1¥1"Â1 å1ò1 22&2 ?2J2e2x2 Š2”2£2¬2%½2ã27ì2$333C3/[3‹3¤3¼3Ö3(ô34&24*Y4&„4+«4×4#ì4#5)45-^5,Œ5¹5Ò5$ç59 6F63e6™61¶6è677/7!F7$h7=7GË7G89[8•8ž8"¥8È8å8;9!?9a9+}9©9¼9Ö9,ð9:%;:,a:-Ž: ¼:&Ý:;#;C;!c;.…;´;Ä;ÍÙ;§</Ç<÷<& = 4=%U={=›=¯=1Ä= ö=>#>#=>La>6®>å>6?A8?>z? ¹?+Ã?*ï?@ 2@<@1D@2v@ ©@µ@Î@"ã@*A1A@A PAqA A ™A£A»A ÛA èA%õAB+;B$gBŒB¦B ÅBÏBéBC+CHC!eC ‡C”C®C ·CÅCÎCâCD$D&_0X_‰_=©_;ç_:#`1^`,`H½`4a*;a"fa/‰a8¹a7òa*b>b Nb\b+md/™d1Édûd e4e@Lee+£eBÏef4/f.df!“f µf#Ãf$çf] g>jg6©g"àg'hv+hN¢hJñhJw[wsw!“w-µwãw;þw=:x5xx/®xÞx/ýx--y-[y9‰yDÃyz!z%5zA[zz;½z0ùzL*{)w{+¡{Í{ã{'|@)|Bj|c­|Q}Dc}¨}±}!¸}#Ú}8þ}<7~!t~&–~?½~ý~7+S#'£+Ë,÷&$€$K€p€#€#±€)Õ€8ÿ€8Mg)‚F«‚ò‚% ƒ'0ƒ%Xƒ*~ƒ©ƒÁƒ:Úƒ „"„3B„'v„mž„? …$L…Kq…H½…R†Y†,k†'˜†!À† â†î†:ÿ†9:‡t‡‡‡¤‡.¿‡++ˆ&Jˆ!qˆ“ˆ­ˆ:ʈ)‰ /‰-P‰'~‰/¦‰AÖ‰-ŠFŠ&\ŠƒŠ/šŠ&ÊŠ'ñŠ0‹$J‹)o‹™‹&­‹Ô‹Ý‹ü‹Œ"#ŒFŒ)dŒ3ŽŒ1ÂŒ/ôŒ$+C6o2¦,ÙEŽ)LŽ.vŽ.¥Ž!ÔŽ0öŽ'BUh-!­Ïãô87J‚ ¢*Ãî<ÿ<‘?Z‘š‘@·‘-ø‘:&’a’Fq’ ¸’2Ù’: “4G“:|“!·“Ù“8Ü“$”K:” †”=“”%Ñ”7÷”/•88•q•DŽ•EÓ• –0%—+V—‚—<¢—ß—ç—˜˜D5˜Az˜;¼˜@ø˜A9™ {™(œ™4Å™Aú™ <š3Hš0|š9­š:çš."›„Q›.Ö›œ#œ,œ 4œ+Uœ1œ&³œ+Úœ !3"U2x4«6à6ž?NžŽž0¢ž%Óžùž,Ÿ4AŸ*vŸ¡Ÿ¼ŸÙŸ êŸ  ' 'F $n #“ '· fß %F¡0l¡ ¡;¨¡Gä¡R,¢R¢)Ò¢Fü¢C£S£c£0£°£"·£'Ú£¤¤¤.¤'@¤+h¤*”¤-¿¤í¤ ¥B)¥2l¥6Ÿ¥Ö¥ò¥'¦7¦Q¦!p¦4’¦BǦ[ §$f§‹§ §+¿§Fë§R2¨…¨*ލ¹¨ʨå¨4õ¨*©,>©4k© ©¹©W¼©KªL`ª+­ª/Ùª0 «(:«c«,r«5Ÿ«Õ«î« ¬#¬3<¬Fp¬8·¬'ð¬,­:E­4€­ µ­1Ö­6®W?®#—®!»®1Ý®9¯GI¯8‘¯7ʯ,°/°@°1_°$‘°M¶°B±AG±=‰±5DZaý±8_²/˜²'Ȳ7ð²A(³?j³*ª³Õ³æ³’’ž­u› ÙfŠœ´hcÓ='6݉#‰€“þEAf—)«$­¡É ~‘à k©µŒ9|jè2e-S„&vs•Ü`N¡H !š¨' ¦1uD§ô{}&.Y« Ïÿê?V¶50 mO¾v…JõK‡سöºxWQ ]tr–9 {C4ƒB±ÂMT†,\Z0š˰q:¨ó œU71ÌrHÛl™<:øò¿3B¢|/æjcP¸¯g5²Š—ç(+Áb-[+@†}~ŽzÊ™bFYä>n›"*]€,˜íÑlðQ =£‹Ldaã`8Ð÷åZÍ”#©@%ÎgnMÃsª_ÕD\S®ùTR„^7‚Ò ‹ _kEKž¬Vh6$¤/dwŸŸXúƒN4R¢^xtëLª®Ö»‘q*Åâ>W[ì§¹‡Ô·˜ÇF;!3PJe•y‚ÆoG¥ ;¥¼£I”ŽpˆéĈ"ß×GÚŒ“zÀo)ÞmUXa8¤Aý¬ip2(ïO–IiȦ…y½.ñîü%áCûw<? # %u 'vpath' search paths. # %u implicit rules, %u (%.1f%%) terminal. # %u pattern-specific variable values # Directories # Files # Finished Make data base on %s # General ('VPATH' variable) search path: # # Implicit Rules # Make data base, printed on %s # No general ('VPATH' variable) search path. # No implicit rules. # No pattern-specific variable values. # Pattern-specific Variable Values # VPATH Search Paths # Variables # files hash-table stats: # %s No strcache buffers %s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu B %s strcache performance: lookups = %lu / hit rate = %lu%% Counted %d args in failed launch This program built for %s This program built for %s (%s) Unhandled exception filter called from program %s ExceptionCode = %lx ExceptionFlags = %lx ExceptionAddress = 0x%p --debug[=FLAGS] Print various types of debugging information. --no-print-directory Turn off -w, even if it was turned on implicitly. --no-silent Echo recipes (disable --silent mode). --trace Print tracing information. --warn-undefined-variables Warn when an undefined variable is referenced. -B, --always-make Unconditionally make all targets. -C DIRECTORY, --directory=DIRECTORY Change to DIRECTORY before doing anything. -E STRING, --eval=STRING Evaluate STRING as a makefile statement. -I DIRECTORY, --include-dir=DIRECTORY Search DIRECTORY for included makefiles. -L, --check-symlink-times Use the latest mtime between symlinks and target. -O[TYPE], --output-sync[=TYPE] Synchronize output of parallel jobs by TYPE. -R, --no-builtin-variables Disable the built-in variable settings. -S, --no-keep-going, --stop Turns off -k. -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE Consider FILE to be infinitely new. -b, -m Ignored for compatibility. -d Print lots of debugging information. -e, --environment-overrides Environment variables override makefiles. -f FILE, --file=FILE, --makefile=FILE Read FILE as a makefile. -h, --help Print this message and exit. -i, --ignore-errors Ignore errors from recipes. -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no arg. -k, --keep-going Keep going when some targets can't be made. -l [N], --load-average[=N], --max-load[=N] Don't start multiple jobs unless load is below N. -n, --just-print, --dry-run, --recon Don't actually run any recipe; just print them. -o FILE, --old-file=FILE, --assume-old=FILE Consider FILE to be very old and don't remake it. -p, --print-data-base Print make's internal database. -q, --question Run no recipe; exit status says if up to date. -r, --no-builtin-rules Disable the built-in implicit rules. -s, --silent, --quiet Don't echo recipes. -t, --touch Touch targets instead of remaking them. -v, --version Print the version number of make and exit. -w, --print-directory Print the current directory. Date %s Ignoring VPATH name '%s'. uid = %d, gid = %d, mode = 0%o. (built-in): (core dumped) (don't care) (from '%s', line %lu) (from '%s', line %lu): (ignored) (name might be truncated) (no default goal) (no ~ expansion) (remote) (search path) files, impossibilities impossibilities in %lu directories. so far.# A default, MAKEFILES, or -include/sinclude makefile.# Also makes:# Builtin rule# Command line target.# Dependencies recipe running (THIS IS A BUG).# Failed to be updated.# File does not exist.# File has been updated.# File has not been updated.# File is an intermediate prerequisite.# File is very old.# Implicit rule search has been done.# Implicit rule search has not been done.# Implicit/static pattern stem: '%s' # Invalid value in 'command_state' member!# Last modified %s # Modification time never checked.# Needs to be updated (-q is set).# Phony target (prerequisite of .PHONY).# Precious file (prerequisite of .PRECIOUS).# Recipe currently running (THIS IS A BUG).# Successfully updated.# recipe to execute# %s (device %d, inode [%d,%d,%d]): # %s (device %d, inode [%d,%d,%d]): could not be opened. # %s (device %ld, inode %ld): # %s (device %ld, inode %ld): could not be opened. # %s (key %s, mtime %I64u): # %s (key %s, mtime %I64u): could not be opened. # %s: could not be stat'd. # No 'vpath' search paths.# Not a target:# hash-table stats: # # variable set hash-table stats: $SHELL changed (was '%s', now '%s') %s (line %d) Bad shell context (!unixy && !batch_mode_shell) %s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B %s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B %s other used: total = %lu B / count = %lu / avg = %lu B %s%s: %s%s: %s%s: Entering an unknown directory %s: Entering directory '%s' %s: Field '%s' not cached: %s%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p) %s: Leaving an unknown directory %s: Leaving directory '%s' %s: Timestamp out of range; substituting %s%s: failed to load%s: illegal option -- %c %s: invalid option -- %c %s: option '%c%s' doesn't allow an argument %s: option '%s' is ambiguous %s: option '%s' requires an argument %s: option '--%s' doesn't allow an argument %s: option '-W %s' doesn't allow an argument %s: option '-W %s' is ambiguous %s: option requires an argument -- %c %s: target '%s' does not exist%s: unrecognized option '%c%s' %s: unrecognized option '--%s' %s: update target '%s' due to: %s%s: user %lu (real %lu), group %lu (real %lu) %sBuilt for %s %sBuilt for %s (%s) %sLicense GPLv3+: GNU GPL version 3 or later %sThis is free software: you are free to change and redistribute it. %sThere is NO WARRANTY, to the extent permitted by law. %sNo rule to make target '%s'%s%sNo rule to make target '%s', needed by '%s'%s%s[%s: %s] Error %d%s%s[%u]: Entering an unknown directory %s[%u]: Entering directory '%s' %s[%u]: Leaving an unknown directory %s[%u]: Leaving directory '%s' '%s' is up to date.'override' directive*** Archive member '%s' may be bogus; not deleted*** Break. *** Deleting file '%s'*** Deleting intermediate file '%s'*** Waiting for unfinished jobs....*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp*** [%s] Archive member '%s' may be bogus; not deleted*** [%s] Deleting file '%s'*** mixed implicit and normal rules: deprecated syntax-O[TYPE] (--output-sync[=TYPE]) is not configured for this build.-warning, you may have to re-enable CTRL-Y handling from DCL. . Stop. .DEFAULT_GOAL contains more than one target.LIBPATTERNS element '%s' is not a pattern; using VPATH name '%s'AbortedAccess violation: read operation at address 0x%p Access violation: write operation at address 0x%p Alarm clockAppend %.*s and cleanup Append output to %s Avoiding implicit rule recursion. BUG: num_pattern_rules is wrong! %u != %uBUILTIN CD %s Bad system callBatch file contents: @echo off Batch file contents:%s %s Broken pipeBus errorCPU time limit exceededCannot create a temporary file Child accessChild exitedCircular %s <- %s dependency dropped.Cleaning up temp batch file %s Cleaning up temp batch file %s failed (%d) Cleaning up temporary batch file %s Collisions=%lu/%lu=%.0f%%Considering target file '%s'. ContinuedCould not restore stderr Could not restore stdin Could not restore stdout Couldn't change back to original directory.CreatePipe() failed (e=%ld) Creating temporary batch file %s Current timeCustoms won't export: %s DCL: %s Danger signalEMT trapEmpty function nameEmpty symbol name for load: %sExecuting %s instead Failed to load symbol %s from %s: %sFailed to open global symbol table: %sFailed to remake makefile '%s'.Failed to remake target file '%s'. File '%s' does not exist. File '%s' was considered already. File size limit exceededFinished prerequisites of target file '%s'. Finished updating file '%s'. Floating point co-processor not availableFloating point exceptionFound an implicit rule for '%s'. Found prerequisite '%s' as VPATH '%s' Function name too long: %sGiving up on target file '%s'. HangupI/O possibleIOT trapIllegal InstructionIncluded makefile '%s' was not found.Information requestInitialized accessInterruptInvalid function name: %sInvalid maximum argument count (%u) for function %sInvalid minimum argument count (%u) for function %sJobserver client (fds %d,%d) Jobserver client (semaphore %s) Jobserver slots limited to %d KilledLive child %p (%s) PID %s %s Load=%lu/%lu=%.0f%%, Loaded object %s is not declared to be GPL compatibleLoading symbol %s from %s Looking for a rule with intermediate file '%s'. Looking for an implicit rule for '%s'. Looking for archive-member implicit rule for '%s'. Make accessMakefile '%s' might loop; not remaking it. Makefile '%s' was not foundMakefile from standard input specified twice.Making '%s' due to always-make flag. Malformed target-specific variable definitionMember '%s'%s: %ld bytes at %ld (%ld). Must remake target '%s'. NoNo implicit rule found for '%s'. No need to remake target '%s'No recipe for '%s' and no prerequisites actually changed. No targetsNo targets specified and no makefile foundNothing to be done for '%s'.Obtained token for child %p (%s). Options: Parallel jobs (-j) are not supported on this platform.Power failurePrerequisite '%s' is newer than target '%s'. Prerequisite '%s' is older than target '%s'. Prerequisite '%s' is order-only for target '%s'. Prerequisite '%s' of target '%s' does not exist. Profiling timer expiredPruning file '%s'. Putting child %p (%s) PID %s%s on the chain. QuitRe-executing[%u]:Reading makefile '%s'Reading makefiles... Reaping losing child %p PID %s %s Reaping winning child %p PID %s %s Recently tried and failed to update file '%s'. Recipe for '%s' will be ignored in favor of the one for '%s'.Recipe for file '%s' was found by implicit rule search,Recipe has too many lines (%ud)Recipe of '%s' is being run. Recipe was specified for file '%s' at %s:%lu,Recursive variable '%s' references itself (eventually)Rehash=%u, Rejecting impossible implicit prerequisite '%s'. Rejecting impossible rule prerequisite '%s'. Released token for child %p (%s). Removing child %p PID %s%s from chain. Removing intermediate files... Report bugs to Resetting to single job (-j1) mode.Resource lostSIGPHONESIGWINDSegmentation faultSkipping UTF-8 BOM in makefile '%s' Skipping UTF-8 BOM in makefile buffer Stem too long: '%s%.*s'. Still updating file '%s'. StoppedStopped (signal)Stopped (tty input)Stopped (tty output)Successfully remade target file '%s'. Symbolic links not supported: disabling -L.Target '%s' is double-colon and has no prerequisites. Target '%s' not remade because of errors.Target file '%s' needs to be remade under -q. TerminatedThe 'load' operation is not supported on this platform.The prerequisites of '%s' are being made. Trace/breakpoint trapTrying implicit prerequisite '%s'. Trying pattern rule with stem '%.*s'. Trying rule prerequisite '%s'. Updating goal targets.... Updating makefiles.... Urgent I/O conditionUsage: %s [options] [target] ... User accessUser defined signal 1User defined signal 2Using default commands for '%s'. Using default recipe for '%s'. Virtual timer expiredWarning: File '%s' has modification time %s s in the futureWindow changedattempt to use unsupported feature: '%s'automaticbut '%s' is now considered the same file as '%s'.can't allocate %lu bytes for hash table: memory exhaustedcan't rename double-colon '%s' to single-colon '%s'can't rename single-colon '%s' to double-colon '%s'cannot enforce load limit: cannot enforce load limits on this operating systemclose: %s: %scommand linecreating jobs pipecreating jobserver semaphore: (Error %ld: %s)defaultduping jobs pipeempty string invalid as file nameempty variable nameenvironmentenvironment under -eextraneous '%s'extraneous text after '%s' directiveextraneous text after 'define' directiveextraneous text after 'endef' directivefile: invalid file operation: %sfile: missing filenamefile: too many argumentsfind_and_set_shell() path search set default_shell = %s find_and_set_shell() setting default_shell = %s first argument to 'word' function must be greater than 0fopen (temporary file)fwrite (temporary file)grouped targets must provide a recipeguile: Evaluating '%s' guile: Expanding '%s' init jobserver pipeinsufficient number of arguments (%d) to function '%s'internal error: invalid --jobserver-auth string '%s'internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)invalid syntax in conditionaljob server shut downjobserver pipelinelbr$ini_control() failed with status = %dlbr$set_module() failed to extract module info, status = %dmake reaped child pid %s, still waiting for pid %s makefilemissing 'endef', unterminated 'define'missing 'endif'missing rule before recipemissing separatormissing separator (did you mean TAB instead of 8 spaces?)missing target patternmixed implicit and normal rulesmixed implicit and static pattern rulesmultiple target patternsnono more file handles: could not duplicate stderr no more file handles: could not duplicate stdin no more file handles: could not duplicate stdout non-numeric first argument to 'word' functionnon-numeric first argument to 'wordlist' functionnon-numeric second argument to 'wordlist' functiononly one 'else' per conditionalopen: %s: %sprerequisites cannot be defined in recipesprocess_easy() failed to launch process (e=%ld) pselect jobs piperead jobs piperead: %s: %srecipe commences before first targetrelease jobserver semaphore: (Error %ld: %s)semaphore or child process wait: (Error %ld: %s)spawnvpe: environment space might be exhaustedsys$search() failed with %d target '%s' doesn't match the target patterntarget '%s' given more than once in the same ruletarget file '%s' has both : and :: entriestarget pattern contains no '%%'the '%s%s' option requires a non-empty string argumentthe '-%c' option requires a positive integer argumenttouch archive member is not available on VMStouch: '%s' is not a valid archivetouch: Archive '%s' does not existtouch: Bad return code from ar_member_touch on '%s'touch: Member '%s' does not exist in '%s'unable to open library '%s' to lookup member status %dunimplemented on this platform: function '%s'unknown debug level specification '%s'unknown output-sync type '%s'unknown signalunlink (temporary file): unterminated call to function '%s': missing '%c'unterminated variable referencewarning: Clock skew detected. Your build may be incomplete.warning: -j%d forced in makefile: resetting jobserver mode.warning: -j%d forced in submake: resetting jobserver mode.warning: NUL character seen; rest of line ignoredwarning: ignoring old recipe for target '%s'warning: jobserver unavailable: using -j1. Add '+' to parent make rule.warning: overriding group membership for target '%s'warning: overriding recipe for target '%s'warning: undefined variable '%.*s'windows32_openpipe(): process_init_fd() failed windows32_openpipe: DuplicateHandle(Err) failed (e=%ld) windows32_openpipe: DuplicateHandle(In) failed (e=%ld) write error: stdoutwrite jobserverwrite: %s: %sProject-Id-Version: make 4.2.93 Report-Msgid-Bugs-To: bug-make@gnu.org PO-Revision-Date: 2020-01-06 11:39-0800 Last-Translator: Božidar Putanec Language-Team: Croatian Language: hr MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. 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); X-Generator: Lokalize 19.04.3 # %u „vpath“ staza za pretraživanje. # %u implicitnih pravila, %u (%.1f%%) terminal # %u vrijednosti varijabli specifiÄne za uzorke # Direktoriji # Datoteke # Gotova „Make“ baza podataka je spremna na %s # Općenita („VPATH“ varijabla) staza za pretraživanje: # # Implicitna pravila # „Make“ baza podataka, ispisana na %s # Nema općenite („VPATH“ varijable) staze za pretraživanje. # Nema implicitnih pravila. # Nema vrijednosti varijabli specifiÄne za uzorke. # Vrijednosti varijabli specifiÄne za uzorke # VPATH staza za pretraživanje # Varijable # status datoteka hash-tablice: # %s Nema meÄ‘uspremnika za strcache %s strcache meÄ‘uspremnici: %lu (%lu) / stringova = %lu pohrana = %lu B / prosjek = %lu B %s strcache uÄinkovitost: pretraga = %lu / pogodaka = %lu%% %d argumenata izbrojeno je pri neuspjelom pokretanju Ovaj program je proizveden za %s Ovaj program je proizveden za %s (%s) Filtar neobraÄ‘ene iznimke pozvan je iz programa %s ExceptionCode = %lx ExceptionFlags = %lx ExceptionAddress = 0x%p --debug[=ZASTAVICE] ispisuje razne vrste informacija za debugiranje --no-print-directory ukida opciju -w (Äak i ako je implicirana) --no-silent odjekuje recepte (poniÅ¡ti --silent naÄin) -d ispisuje informacije praćenja (tracing) --warn-undefined-variables upozori na referiranje nedefinirane varijable -B, --always-make bezuvjetno napravi sve ciljeve -C DIREKTORIJ, --directory=DIREKTORIJ prije poÄetka rada prijeÄ‘e u DIREKTORIJ -E STRING, --eval=STRING evaluira STRING kao Makefile direktivu -I DIREKTORIJ, --include-dir=DIREKTORIJ traži include-Makefiles u DIREKTORIJU -L, --check-symlink-times od simboliÄke veze i njezinoga cilja koristi se kasnije vrijeme izmjene (mtime) -O[TYPE], --output-sync[=TIP] TIP sinkronizacije izlaznih paralelnih poslova -R, --no-builtin-variables onemogući ugraÄ‘ene vrijednosti varijabli -S, --no-keep-going, --stop ukida opciju -k -W DATOTEKA, --what-if=DATOTEKA, --new-file=DATOTEKA, --assume-new=DATOTEKA smatra da je DATOTEKA zauvijek nova -b, -m ignorira se zbog kompatibilnosti -d ispisuje puno podataka za debugiranje -e, --environment-overrides uÄini da „make“ rabi varijable okoline umjesto tih istih varijabli iz Makefiles -f DATOTEKA, --file=DATOTEKA, --makefile=DATOTEKA Äita i koristi DATOTEKU kao Makefile -h, --help ova pomoć -i, --ignore-errors ignorira sve greÅ¡ke u receptima -j [N], --jobs[=N] dopuÅ¡ta N istovremenih poslova; ako se izostavi argument N, nema ograniÄenja broju poslova -k, --keep-going nastavlja raditi (iako se neki od ciljeva ne mogu napraviti). -l [N], --load-average[=N], --max-load[=N] ne pokreće viÅ¡e poslova istovremeno ako je opterećenje veće od N -n, --just-print, --dry-run, --recon ne pokreće recepte već ih samo ispiÅ¡e -o DATOTEKA, --old-file=DATOTEKA, --assume-old=DATOTEKA ne obnavlja DATOTEKU jer je vrlo stara -p, --print-data-base ispiÅ¡e internu bazu podataka „make“ programa -q, --question ne pokreće recepte; izlazni status pokaže jesu li aktualni -r, --no-builtin-rules onemogući ugraÄ‘ena implicitna pravila -s, --silent, --quiet ne ispisuje recepte -t, --touch „touch“ (ažurira vrijeme) ciljeve umjesto da ih iznova napravi -v, --version informacije o ovoj inaÄici programa -w, --print-directory ispiÅ¡e trenutaÄni direktorij Datum %s Zanemaruje se naziv „%s“ za VPATH. uid = %d, gid = %d, mÈd = 0%o. (ugraÄ‘eno): (**krah**: stanje memorije je dokumentirano!) (nije važno) (iz „%s“, redak %lu) (iz „%s“, redak %lu): (ignorira se) (može biti da je skraćeno) (nema zadanog cilja) (bez proÅ¡irivanja znaka ~) (udaljeno) (staza pretraživanja) datoteke, nemogućnosti nemogućnosti u %lu direktorija. do sada.# Zadani Makefile, MAKEFILES, ili include/sinclude-makefile# TakoÄ‘er napravi:# UgraÄ‘eno pravilo# Cilj naredbenog retka.# Recept za ovisnosti koji se joÅ¡ uvijek izvrÅ¡ava (OVO JE PROGRAMSKA GREÅ KA)# Ažuriranje nije uspjelo.# Datoteka ne postoji.# Datoteka je bila ažurirana.# Datoteka nije bila ažurirana.# Datoteka je privremeni posredni preduvjet.# Datoteka je vrlo stara.# Provedeno je pretraživanje pomoću implicitnih pravila.# Nije provedeno pretraživanje pomoću implicitnih pravila.# Implicitni ili statiÄki korijen uzorka: „%s“ # Nevaljana vrijednost u command_state Älanu!# Vrijeme zadnje promjene %s # Nikad nije provjereno vrijeme zadnje izmjene# Ažuriranje je nužno (opcija -q je dana).# Lažni (phony) cilj (preduvjet za .PHONY).# Vrijedna (precious) datoteka (preduvjet za .PRECIOUS).# Recept koji se joÅ¡ uvijek izvrÅ¡ava (OVO JE PROGRAMSKA GREÅ KA).# UspjeÅ¡no ažurirano.# pokrenuti recept# %s (ureÄ‘aj %d, inode [%d,%d,%d]): # %s (ureÄ‘aj %d, inode [%d,%d,%d]): nije bilo moguće otvoriti. # %s (ureÄ‘aj %ld, inode %ld): # %s (ureÄ‘aj %ld, inode %ld): nije bilo moguće otvoriti. # %s (kljuÄ %s, vrijeme zadnje izmjene %I64u): # %s (kljuÄ %s, vrijeme zadnje izmjene %I64u): nije bilo moguće otvoriti. # nije bilo moguće dobiti status od %s. # Nema „vpath“ staze za pretraživanje.# Nije cilj (target):# statistika hash-tablice: # # statistika varijabli u hash-tablici: Varijabla $SHELL se promijenila (prije „%s“, sada „%s“) %s (redak %d) LoÅ¡i kontekst ljuske (!unixy && !batch_mode_shell) %s trenutaÄni meÄ‘uspremnik: veliÄina = %hu B / koriÅ¡teno = %hu B broj = %hu / prosjek = %u B %s ostalo slobodno: ukupno = %lu B / max = %lu B / min = %lu B prosjek = %hu B %s ostalo koriÅ¡teno: ukupno = %lu B / broj = %lu / prosjek = %lu B %s%s: %s%s: %s%s: Unos nepoznatoga direktorija %s: Ulazi se u direktorij „%s“ %s: Polja „%s“ nema u predmemoriji (nije cached): %s%s: Prekid/iznimka primljena (kÈd = 0x%lx, adresa = 0x%p) %s: Nema nepoznatoga direktorija %s: Izlazi se iz direktorija „%s“ %s: Vremenski žig je izvan granica raspona; zamjenjuje se s %s%s: uÄitavanje nije uspjelo%s: nepropisna opcija -- %c %s: nevaljana opcija -- %c %s: opcija „%c%s“ ne dopuÅ¡ta argument %s: opcija „%s“ je dvosmislena %s: opcija „%s“ zahtijeva argument %s: opcija „--%s“ ne dopuÅ¡ta argument %s: opcija „-W %s“ ne dopuÅ¡ta argument %s: opcija „-W %s“ je dvosmislena %s: opcija zahtijeva argument -- %c %s: cilj „%s“ ne postoji%s: neprepoznata opcija „%c%s“ %s: neprepoznata opcija „--%s“ %s: ažurira cilj „%s“ za potrebe: %s%s: korisnik %lu (stvarni %lu), grupa %lu (stvarna %lu) %sProizvedeno za %s %sProizvedeno za %s (%s) %sLicencija GPLv3+: GNU GPL inaÄica 3 ili kasnija v. %sOvo je slobodan softver: slobodno ga mijenjajte i distribuirajte. %sNEMA JAMSTVA do granica dopuÅ¡tenih zakonom. PogreÅ¡ke u prijevodu i vaÅ¡e prijedloge javite na %sNema pravila za izradu cilja „%s“%s%sNema pravila za izradu cilja „%s“ koji je potrebni za „%s“%s%s[%s: %s] GreÅ¡ka %d%s%s[%u]: Unos nepoznatoga direktorija %s[%u]: Ulazi se u direktorij „%s“ %s[%u]: Nema nepoznatoga direktorija %s[%u]: Izlazi se iz direktorija „%s“ „%s“ je ažurirani.„override“ direktiva*** ÄŒlan arhive „%s“ je možda lažan; nije izbrisani*** Prekid. *** BriÅ¡e se datoteka „%s“*** BriÅ¡e se privremena posredna datoteka „%s“*** ÄŒeka se na nedovrÅ¡ene poslove....*** Upozorenje: .LOW_RESOLUTION_TIME datoteka „%s“ ima vremensku oznaku visoke rezolucije*** [%s] ÄŒlan arhive „%s“ je možda lažan; nije izbrisani*** [%s] BriÅ¡e se datoteka „%s“*** pomijeÅ¡ana su implicitna i normalna pravila: to je zastarjela sintaksaOpcija -O[TYPE] (--output-sync[=TYPE]) nije ugraÄ‘ena u ovu kompilaciju.-upozorenje, možda ćete morati ponovno omogućiti obraÄ‘ivanje CTRL-Y iz DCL-a. . Zaustavljeno. .DEFAULT_GOAL sadrži viÅ¡e od jednoga cilja.LIBPATTERNS Älan „%s“ nije uzorak; rabi se naziv „%s“ za VPATHPrekid (SIGABRT)Povreda prava pristupa: operacija Äitanja na adresi 0x%p Povreda prava pristupa: operacija pisanja na adresi 0x%p Budilica (SIGALRM)%.*s pripojiti i poÄistiti Izlaz pripojen na kraj %s SprjeÄavanje rekurzije implicitnog pravila. BUG: pogreÅ¡na num_pattern_rules! %u != %uUGRAÄENI CD %s LoÅ¡i sustavski poziv (SIGSYS)Sadržaj (batch) datoteke: @echo off Sadržaj (batch) datoteke:%s %s Prekinuta cijev (SIGPIPE)SabirniÄka greÅ¡ka (SIGBUS)PrekoraÄeno je vremensko ograniÄenje procesora (SIGXCPU)Ne može se stvoriti privremena datoteka Pristup potomkom (dijete-proces)Potomak (child process) je zavrÅ¡io (SIGCHLD)Kružna ovisnost %s <- %s je odbaÄena.ÄŒišćenje iza privremene (batch) datoteke %s ÄŒišćenje iza privremene (batch) datoteke %s nije uspjelo (%d) Izbrisana je privremena (batch) datoteka %s. Sudari=%lu/%lu=%.0f%%Razmatra se ciljna datoteka „%s“. Nastavlja se (SIGCONT)Nije moguće obnoviti standardni izlaz greÅ¡ki Nije moguće obnoviti standardni ulaz Nije moguće obnoviti standardni izlaz Ne bilo moguće vratiti se u izvorni direktorij.CreatePipe() nije uspjeÅ¡na (e=%ld) Stvara se privremena (batch) datoteka %s TrenutaÄno vrijemeCustoms nije moguće eksportirati: %s DCL: %s Signal za opasnost (SIGDANGER)EMT zamka (SIGEMT)Prazno ime funkcijePrazno ime simbola za uÄitati: %sUmjesto toga izvrÅ¡ava se %s Simbol %s iz %s nije uspjelo uÄitati: %sOtvaranje globalne tablice simbola nije uspjelo: %sNije uspjelo ponovno napraviti Makefile „%s“.Prerada ciljne datoteke „%s“ nije uspjela. Datoteka „%s“ ne postoji. Datoteka „%s“ je već bila razmatrana. PrekoraÄeno ograniÄenje veliÄine datoteke (SIGXFS2)Preduvjeti za ciljnu datoteku „%s“ su gotovi. Ažuriranje datoteke „%s“ je zavrÅ¡eno. Koprocesor za rad s pomiÄnim zarezom/toÄkom nije dostupan (SIGNOFP)Iznimka (broja) pomiÄnog zareza (SIGFPE)PronaÄ‘eno je implicitno pravilo za „%s“. NaÄ‘eni preduvjet „%s“ kao VPATH „%s“ Naziv funkcije je predugaÄak: %sOdustaje se od izrade ciljne datoteke „%s“. Terminal zatvoren (SIGHUP)U/I je sada mogućIOT zamka (SIGIOT)Nepropisna instrukcija„%s“ include-Makefile nije bio pronaÄ‘en.Zahtjev za informacijom (SIGINFO)Pristup je iniciranPrekini (SIGINT)Nevaljani naziv funkcije: %sNevaljani maksimalni broj argumenata (%u) za funkciju %sNevaljani minimalni broj argumenata (%u) za funkciju %sKlijent jobservera (fds %d,%d) Klijent jobservera (semafor %s) Jobserver broj mjesta je ograniÄen na %d Ubijen (SIGKILL)Živi potomak (nedovrÅ¡eni dijete-proces) %p (%s) PID %s %s Opterećenje=%lu/%lu=%.0f%%, UÄitani objekt %s nema deklaraciju da je kompatibilan s GPL-omUÄitava se simbol %s iz %s Potraga za pravilom s privremenom posrednom datotekom „%s“. Potraga za implicitnim pravilom za „%s“. Traži se implicitno pravilo za Älana arhive za „%s“ Pristup make-omMakefile „%s“ bi mogao ući u petlju; neće se ponovno napraviti. Makefile „%s“ nije pronaÄ‘enMakefile je dva puta naveden na standardnom ulazu.„%s“ se zbog zastavice always-make ponovno izraÄ‘uje. Deformirana definicija varijable specifiÄne za ciljÄŒlan arhive „%s“%s: %ld bajtova na adresi %ld (%ld). Cilj „%s“ se mora preraditi. NeNijedno implicitno pravilo nije pronaÄ‘eno za „%s“. Nema potrebe preraditi cilj „%s“Nema recepta za „%s“ i zapravo nijedan od preduvjeta nije promijenjen. Nema ciljevaNije navedeni nijedan cilj i nije pronaÄ‘eni nijedan MakefileNema niÅ¡ta za napraviti za „%s“.Dobiveni je token za potomka (dijete-procesa) %p (%s). Opcije: Paralelni poslovi (-j) nisu podržani na ovoj platformi.Prekinuto napajanje (SIGPWR)Preduvjet „%s“ je noviji nego od od njega ovisni cilj „%s“. Preduvjet „%s“ je stariji nego od od njega ovisni cilj „%s“. Preduvjet „%s“ je order-only za cilj „%s“. order-only: make neće preraditi (remake) „normalne“ recepte ako se izmjeni vremenska oznaka na order-only cilju (normalno, make uvijek preradi recepte kad god se izmjeni vremenska oznaka na bilo kojem objektu). Preduvjet „%s“ za cilj „%s“ ne postoji. Isteklo je vrijeme za profiliranj (SIGPROF)ÄŒišćenje datoteke „%s“. Umetanje potomka (dijete-procesa) %p (%s) PID %s%s u lanac. ZavrÅ¡iPonovno izvrÅ¡avanje[%u]:ÄŒita se Makefile „%s“Čitaju se Makefiles... ÄŒišćenje iza neuspjeÅ¡noga potomka (dijete-procesa) %p PID %s %s ÄŒišćenje iza uspjeÅ¡nog potomka (dijete-procesa) %p PID %s %s Nedavni pokuÅ¡aj ažuriranja datoteke „%s“ nije uspio. Recept za „%s“ će se ignorirati a koristit će se „%s“.Recept za datoteku „%s“ je pronaÄ‘en u implicitnim pravilima,Recept ima previÅ¡e redaka (%ud)Recept za „%s“ se upravo izvrÅ¡ava. Recept za datoteku „%s“ bio je naveden u %s:%lu,Rekurzivna varijabla „%s“ ukazuje na samu sebe (u konaÄnici)Rehash=%u, Odbija se nemogući implicitni preduvjet „%s“. Odbija se nemogući preduvjet pravila „%s“. OsloboÄ‘en je token za potomka (dijete-procesa) %p (%s). Potomak (dijete-proces) %p PID %s%s je uklonjen iz lanca. Uklanjanju se privremene posredne datoteke... GreÅ¡ke (bugs) na engleskom javite na PogreÅ¡ke u prijevodu i vaÅ¡e prijedloge javite na Povratak na naÄin rada s jednim poslom (-j1).Resurs je izgubljen (SIGLOST)SIGPHONESIGWINDSegmentacijska greÅ¡ka (SIGSEGV)PreskaÄe se UTF-8 BOM u Makefile „%s“ PreskaÄe se UTF-8 BOM u Makefile meÄ‘uspremniku Predugi korijen uzorka: „%s%.*s“. Datoteka „%s“ se joÅ¡ uvijek ažurira. ZaustavljenoZaustavljeno (signal) (SIGSTOP)Zaustavljeno (tty ulaz) (SIGTTIN)Zaustavljeno (tty izlaz) (SIGTTOU)Ciljna datoteka „%s“ je uspjeÅ¡no preraÄ‘ena. SimboliÄke veze nisu podržane: onemogućuje se -L.Cilj „%s“ je s dvije dvotoÄke i nema preduvjeta. Cilj „%s“ nije bio zbog greÅ¡aka ponovno izraÄ‘en.Ciljnu datoteku „%s“ treba ponovno preraditi s opcijom -q. ZavrÅ¡eno (SIGTERM)Operacija load nije podržana na ovoj platformi.Preduvjeti za „%s“ se izraÄ‘uju. Trace/breakpoint (SIGTRAP)Isprobava se implicitni preduvjet „%s“. Isprobava se pravilo s korijenom uzorka „%.*s“. Isprobava se pravilo preduvjeta „%s“. Ažuriraju se ciljevi.... Ažuriraju se Makefiles.... Hitno U/I stanjeUporaba: %s [opcije] [cilj] ... Pristup korisnikomKorisnikom definiran signal 1 (SIGUSR1)Korisnikom definiran signal 2 (SIGUSR2)Rabe se zadane naredbe za „%s“. Rabi se zadani recept za „%s“. Virtualni tajmer je istekao (SIGVTALRM)Upozorenje: Vremenska oznaka modifikacije datoteke „%s“ je za %s sekunda u budućnostiPromjena veliÄine prozora (SIGWINCH)pokuÅ¡aj upotrebe nepodržane znaÄajke „%s“automatskoali „%s“ se sada smatra istom datotekom kao i „%s“.ne može dodijeliti %lu bajtova za hash-tablicu: nema dovoljno memorijene može se preimenovati „%s“ s dvije dvotoÄke u „%s“ s jednom dvotoÄkomne može se preimenovati „%s“ s jednom dvotoÄkom u „%s“ s dvije dvotoÄkene može nametnuti granice opterećenja: ne mogu se nametnuti granice opterećenja na ovom operacijskom sustavuclose(): %s: %snaredbeni redakstvaranje cijevi za poslovekreiranje semafora jobservera: (GreÅ¡ka %ld: %s)zadanostvaranje kopije cijevi za posloveprazni string nije valjano ime datotekeprazno ime varijableokolinaokolina pod -esuviÅ¡ni „%s“suviÅ¡ni tekst nakon „%s“ direktivesuviÅ¡ni tekst nakon „define“ direktivesuviÅ¡ni tekst nakon „endef“ direktivedatoteka: nevaljana operacija na datoteci: %sdatoteka: nema imena datotekedatoteka: previÅ¡e argumenatafind_and_set_shell() pretragom staze postavlja default_shell = %s find_and_set_shell() postavlja default_shell = %s prvi argument funkcije „word“ mora biti veći od 0fopen (privremena datoteka)fwrite (privremena datoteka)grupirani ciljevi moraju predati receptguile: Procjena „%s“ guile: ProÅ¡iruje se „%s“ inicijalizacija cijevi jobserveranedovoljan broj argumenata (%d) za funkciju „%s“**interna greÅ¡ka**: nevaljani string „%s“ za --jobserver-auth**interna greÅ¡ka**: nije moguće otvoriti semafor jobservera „%s“: (GreÅ¡ka %ld: %s)nevaljana sintaksa u uvjetnom izrazujobserver iskljuÄencjevovod (pipeline) jobserveralbr$ini_control() nije uspjela, status = %dlbr$set_module() nije uspjela izvući obavijesti o modulu, status = %dmake je poÄistio potomka (dijete-proces) PID %s, ali joÅ¡ uvijek Äeka na PID %s Makefilenema „endef“, nedovrÅ¡eni „define“nema „endif“nema pravila prije receptanema separatoranema separatora (Mislili ste TAB umjesto 8 razmaka?)nema uzorka za ciljpomijeÅ¡ana su implicitna i normalna pravilapomijeÅ¡ana su implicitna i statiÄka uzorak-pravilanekoliko uzoraka za ciljnenema viÅ¡e datoteÄnih kvaÄica: nije se mogao duplicirati standardni izlaz za greÅ¡ke nema viÅ¡e datoteÄnih kvaÄica: nije se mogao duplicirati standardni ulaz nema viÅ¡e datoteÄnih kvaÄica: nije se mogao duplicirati standardni izlaz prvi argument funkcije „word“ nije brojprvi argument funkcije „wordlist“ nije brojdrugi argument funkcije „wordlist“ nije brojsamo jedan „else“ po uvjetnom izrazuopen(): %s: %spreduvjeti se ne mogu definirani u receptimaprocess_easy() nije uspjela pokrenuti proces (e=%ld) pselect() cijevi poslovaÄitanje iz cijevi poslovaread(): %s: %srecept zapoÄinje prije prvog ciljaoslobaÄ‘anje semafora jobservera: (GreÅ¡ka %ld: %s)Äekanje na semafor ili na potomka (dijete-procesa): (GreÅ¡ka %ld: %s)spawnvpe: može biti da u okolini nema dovoljno prostoraneuspjeÅ¡na sys$search() s greÅ¡kom %d cilj „%s“ se ne podudara s uzorkom ciljacilj „%s“ je naveden viÅ¡e od jedanput u istom praviluciljna datoteka „%s“ sadrži „:“ i „::“uzorak cilja ne sadrži „%%“opcija %s%s zahtijeva neprazni string za argumentopcija -%c zahtijeva pozitivni cijeli broj za argumentu VMS sustavu nije moguće „touch“ (promijeniti vrijeme modifikacije) Älana arhivetouch: „%s“ nije valjana arhivatouch: arhiva „%s“ ne postojitouch: ar_member_touch() na „%s“ nije uspjelatouch: Älan arhive „%s“ ne postoji u arhivi „%s“nemoguće je otvoriti biblioteku „%s“ radi uvida u status Älana %dnije implementirana na ovoj platformi: funkcija „%s“nepoznata specifikacija „%s“ za razinu dijagnostikenepoznati tip sinkronizacije izlaza „%s“nepoznati signalunlink (privremena datoteka): nedovrÅ¡eni poziv funkciji „%s“: nedostaje %cnedovrÅ¡ena referencija na varijabluupozorenje: Otkriveni je problem sa satom. Kompilacija možda nije kompletna.upozorenje: -j%d je forsiran u makefile: resetira mÈd jobservera.upozorenje: -j%d je forsiran u submake: resetira mÈd jobservera.upozorenje: proÄitani je NUL znak; ostatak retka se ignoriraupozorenje: ignorira se stari recept za cilj „%s“upozorenje: jobserver nije dostupni: koristi se -j1. Dodajte „+“ make pravilu pretka (parent)upozorenje: ignorira se Älanstvo grupe za cilj „%s“upozorenje: ignorira se recept za cilj „%s“upozorenje: nedefinirana varijabla %.*swindows32_openpipe(): process_init_fd() nije uspjeÅ¡na windows32_open_pipe: DuplicateHandle(Err) nije uspjeÅ¡na (e=%ld) windows32_openpipe: DuplicateHandle(In) nije uspjeÅ¡na (e=%ld) greÅ¡ka pisanja: standardni izlaz (stdout)zapis jobserverawrite(): %s: %smake-4.3/po/pl.po0000644000175000017500000015717713611136531010631 00000000000000# Polish translation for GNU make. # Copyright (C) 1996, 2002, 2005, 2006, 2010, 2013, 2014, 2016, 2019, 2020 Free Software Foundation, Inc. # This file is distributed under the same license as the make package. # PaweÅ‚ Krawczyk , 1996. # Jakub Bogusz , 2002-2020. # msgid "" msgstr "" "Project-Id-Version: make 4.2.93\n" "Report-Msgid-Bugs-To: bug-make@gnu.org\n" "POT-Creation-Date: 2020-01-19 15:34-0500\n" "PO-Revision-Date: 2020-01-03 20:30+0100\n" "Last-Translator: Jakub Bogusz \n" "Language-Team: Polish \n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" #: src/ar.c:46 #, c-format msgid "attempt to use unsupported feature: '%s'" msgstr "próba użycia nieistniejÄ…cej funkcji: '%s'" #: src/ar.c:123 #, c-format msgid "touch archive member is not available on VMS" msgstr "element biblioteki `touch' jest niedostÄ™pny pod VMS" #: src/ar.c:147 #, c-format msgid "touch: Archive '%s' does not exist" msgstr "touch: Archiwum '%s' nie istnieje" #: src/ar.c:150 #, c-format msgid "touch: '%s' is not a valid archive" msgstr "touch: '%s' nie jest poprawnym archiwum" #: src/ar.c:157 #, c-format msgid "touch: Member '%s' does not exist in '%s'" msgstr "touch: Brak elementu '%s' w '%s'" #: src/ar.c:164 #, c-format msgid "touch: Bad return code from ar_member_touch on '%s'" msgstr "touch: Błędny kod powrotu z ar_member_touch w '%s'" #: src/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" #: src/arscan.c:236 #, c-format msgid "lbr$ini_control() failed with status = %d" msgstr "lbr$ini_control() nie powiodÅ‚o siÄ™, status = %d" #: src/arscan.c:261 #, c-format msgid "unable to open library '%s' to lookup member status %d" msgstr "błąd otwarcia biblioteki '%s' podczas szukania stanu elementu %d" #: src/arscan.c:944 #, c-format msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n" msgstr "Element '%s'%s: %ld bajtów pod %ld (%ld).\n" #: src/arscan.c:945 msgid " (name might be truncated)" msgstr " (nazwa może zostać okrojona)" #: src/arscan.c:947 #, c-format msgid " Date %s" msgstr " Data %s" #: src/arscan.c:948 #, c-format msgid " uid = %d, gid = %d, mode = 0%o.\n" msgstr " uid = %d, gid = %d, mode = 0%o.\n" #: src/commands.c:403 #, c-format msgid "Recipe has too many lines (%ud)" msgstr "Polecenia majÄ… za dużo linii (%ud)" #: src/commands.c:504 msgid "*** Break.\n" msgstr "*** Przerwano.\n" #: src/commands.c:628 #, 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" #: src/commands.c:632 #, c-format msgid "*** Archive member '%s' may be bogus; not deleted" msgstr "*** Element archiwum '%s' może być faÅ‚szywy; nie usuniÄ™ty" #: src/commands.c:646 #, c-format msgid "*** [%s] Deleting file '%s'" msgstr "*** [%s] KasujÄ™ plik '%s'" #: src/commands.c:648 #, c-format msgid "*** Deleting file '%s'" msgstr "*** KasujÄ™ plik '%s'" #: src/commands.c:684 msgid "# recipe to execute" msgstr "# polecenia do wykonania" #: src/commands.c:687 msgid " (built-in):" msgstr " (wbudowane):" #: src/commands.c:689 #, c-format msgid " (from '%s', line %lu):\n" msgstr " (z '%s', linia %lu):\n" #: src/dir.c:1073 msgid "" "\n" "# Directories\n" msgstr "" "\n" "# Katalogi\n" #: src/dir.c:1085 #, c-format msgid "# %s: could not be stat'd.\n" msgstr "# %s: stat() zwraca błąd.\n" #: src/dir.c:1089 msgid "# %s (key %s, mtime %I64u): could not be opened.\n" msgstr "# %s (klucz %s, czas modyfikacji %I64u): otwarcie byÅ‚o niemożliwe.\n" #: src/dir.c:1094 #, 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" #: src/dir.c:1099 #, 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" #: src/dir.c:1126 msgid "# %s (key %s, mtime %I64u): " msgstr "# %s (klucz %s, czas modyfikacji %I64u): " #: src/dir.c:1131 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): " msgstr "# %s (urzÄ…dzenie %d, i-wÄ™zeÅ‚ [%d,%d,%d]): " #: src/dir.c:1136 #, c-format msgid "# %s (device %ld, inode %ld): " msgstr "# %s (urzÄ…dzenie %ld, i-wÄ™zeÅ‚ %ld): " #: src/dir.c:1142 src/dir.c:1163 msgid "No" msgstr "Nie" #: src/dir.c:1145 src/dir.c:1166 msgid " files, " msgstr " pliki, " #: src/dir.c:1147 src/dir.c:1168 msgid "no" msgstr "nie" #: src/dir.c:1150 msgid " impossibilities" msgstr " niemożliwoÅ›ci" #: src/dir.c:1154 msgid " so far." msgstr " jak dotÄ…d." #: src/dir.c:1171 #, c-format msgid " impossibilities in %lu directories.\n" msgstr " niemożliwoÅ›ci w %lu katalogach.\n" #: src/expand.c:125 #, c-format msgid "Recursive variable '%s' references itself (eventually)" msgstr "Rekurencyjna zmienna '%s' wskazuje na samÄ… siebie" #: src/expand.c:271 #, c-format msgid "unterminated variable reference" msgstr "niezakoÅ„czone odwoÅ‚anie do zmiennej" #: src/file.c:278 #, c-format msgid "Recipe was specified for file '%s' at %s:%lu," msgstr "Polecenia dla pliku '%s' podano w %s:%lu," #: src/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," #: src/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'." #: src/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'." #: src/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" #: src/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" #: src/file.c:408 #, c-format msgid "*** Deleting intermediate file '%s'" msgstr "*** Kasowanie pliku poÅ›redniego '%s'" #: src/file.c:412 #, c-format msgid "Removing intermediate files...\n" msgstr "Kasowanie plików poÅ›rednich...\n" #: src/file.c:872 msgid "Current time" msgstr "Aktualny czas" #: src/file.c:876 #, c-format msgid "%s: Timestamp out of range; substituting %s" msgstr "%s: Oznaczenie czasu spoza zakresu; zastÄ…piono %s" #: src/file.c:1016 msgid "# Not a target:" msgstr "# To nie jest obiekt:" #: src/file.c:1021 msgid "# Precious file (prerequisite of .PRECIOUS)." msgstr "# Cenny plik (zależność .PRECIOUS)." #: src/file.c:1023 msgid "# Phony target (prerequisite of .PHONY)." msgstr "# Obiekt niejawny (zależność .PHONY)." #: src/file.c:1025 msgid "# Command line target." msgstr "# Obiekt podany w linii poleceÅ„." #: src/file.c:1027 msgid "# A default, MAKEFILES, or -include/sinclude makefile." msgstr "# Makefile domyÅ›lny, wymieniony w MAKEFILES lub -include/sinclude." #: src/file.c:1029 msgid "# Builtin rule" msgstr "# ReguÅ‚a wbudowana" #: src/file.c:1031 msgid "# Implicit rule search has been done." msgstr "# Szukanie reguÅ‚ domyÅ›lnych zostaÅ‚o wykonane." #: src/file.c:1032 msgid "# Implicit rule search has not been done." msgstr "# Szukanie reguÅ‚ domyÅ›lnych nie zostaÅ‚o wykonane." #: src/file.c:1034 #, c-format msgid "# Implicit/static pattern stem: '%s'\n" msgstr "# Gałąź wzorców domyÅ›lnych/statycznych: '%s'\n" #: src/file.c:1036 msgid "# File is an intermediate prerequisite." msgstr "# Plik jest zależnoÅ›ciÄ… przejÅ›ciowÄ…." #: src/file.c:1040 msgid "# Also makes:" msgstr "# Robi również:" #: src/file.c:1046 msgid "# Modification time never checked." msgstr "# Czas modyfikacji nie byÅ‚ sprawdzany." #: src/file.c:1048 msgid "# File does not exist." msgstr "# Plik nie istnieje." #: src/file.c:1050 msgid "# File is very old." msgstr "# Plik jest bardzo stary." #: src/file.c:1055 #, c-format msgid "# Last modified %s\n" msgstr "# Ostatnio modyfikowany %s\n" #: src/file.c:1058 msgid "# File has been updated." msgstr "# Plik zostaÅ‚ uaktualniony." #: src/file.c:1058 msgid "# File has not been updated." msgstr "# Plik nie zostaÅ‚ uaktualniony." #: src/file.c:1062 msgid "# Recipe currently running (THIS IS A BUG)." msgstr "# Aktualnie uruchamiane polecenia (TO JEST BÅÄ„D)." #: src/file.c:1065 msgid "# Dependencies recipe running (THIS IS A BUG)." msgstr "# Aktualnie uruchamiane polecenia zależnoÅ›ci (TO JEST BÅÄ„D)." #: src/file.c:1074 msgid "# Successfully updated." msgstr "# Uaktualnienie powiodÅ‚o siÄ™." #: src/file.c:1078 msgid "# Needs to be updated (-q is set)." msgstr "# Powinien być uaktualniony (-q jest włączone)." #: src/file.c:1081 msgid "# Failed to be updated." msgstr "# Uaktualnianie nie powiodÅ‚o siÄ™." #: src/file.c:1086 msgid "# Invalid value in 'command_state' member!" msgstr "# Błędna wartość w elemencie 'command_state'!" #: src/file.c:1105 msgid "" "\n" "# Files" msgstr "" "\n" "# Pliki" #: src/file.c:1109 msgid "" "\n" "# files hash-table stats:\n" "# " msgstr "" "\n" "# statystyki tablic haszujÄ…cych plików:\n" "# " #: src/file.c:1119 #, c-format msgid "%s: Field '%s' not cached: %s" msgstr "%s: Pole '%s' nie zapamiÄ™tane w pamiÄ™ci podrÄ™cznej: %s" #: src/function.c:794 msgid "non-numeric first argument to 'word' function" msgstr "pierwszy argument funkcji 'word' nie jest liczbowy" #: src/function.c:799 #, c-format msgid "first argument to 'word' function must be greater than 0" msgstr "pierwszy argument funkcji 'word' musi być wiÄ™kszy od 0" #: src/function.c:819 msgid "non-numeric first argument to 'wordlist' function" msgstr "pierwszy argument funkcji 'wordlist' nie jest liczbowy" #: src/function.c:821 msgid "non-numeric second argument to 'wordlist' function" msgstr "drugi argument funkcji 'wordlist' nie jest liczbowy" #: src/function.c:1533 #, c-format msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n" msgstr "windows32_openpipe: DuplicateHandle(In) nie powiodÅ‚o siÄ™ (e=%ld)\n" #: src/function.c:1557 #, c-format msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n" msgstr "windows32_openpipe: DuplicateHandle(Err) nie powiodÅ‚o siÄ™ (e=%ld)\n" #: src/function.c:1564 #, c-format msgid "CreatePipe() failed (e=%ld)\n" msgstr "CreatePipe() nie powiodÅ‚o siÄ™ (e=%ld)\n" #: src/function.c:1572 #, c-format msgid "windows32_openpipe(): process_init_fd() failed\n" msgstr "windows32_openpipe(): process_init_fd() nie powiodÅ‚o siÄ™\n" #: src/function.c:1857 #, c-format msgid "Cleaning up temporary batch file %s\n" msgstr "CzyszczÄ™ tymczasowy plik wsadowy %s\n" #: src/function.c:2230 src/function.c:2255 #, c-format msgid "file: missing filename" msgstr "plik: brak nazwy" #: src/function.c:2234 src/function.c:2265 #, c-format msgid "open: %s: %s" msgstr "otwarcie: %s: %s" #: src/function.c:2242 #, c-format msgid "write: %s: %s" msgstr "zapis: %s: %s" #: src/function.c:2245 src/function.c:2282 #, c-format msgid "close: %s: %s" msgstr "zamkniÄ™cie: %s: %s" #: src/function.c:2258 #, c-format msgid "file: too many arguments" msgstr "plik: zbyt dużo argumentów" #: src/function.c:2277 #, c-format msgid "read: %s: %s" msgstr "odczyt: %s: %s" #: src/function.c:2290 #, c-format msgid "file: invalid file operation: %s" msgstr "plik: błędna operacja na pliku: %s" #: src/function.c:2405 #, c-format msgid "insufficient number of arguments (%d) to function '%s'" msgstr "niewystarczajÄ…ca liczba argumentów (%d) dla funkcji '%s'" #: src/function.c:2417 #, c-format msgid "unimplemented on this platform: function '%s'" msgstr "funkcja '%s' nie jest zaimplementowana na tej platformie" #: src/function.c:2483 #, c-format msgid "unterminated call to function '%s': missing '%c'" msgstr "nie dokoÅ„czone wywoÅ‚anie funkcji '%s': brak '%c'" #: src/function.c:2667 #, c-format msgid "Empty function name" msgstr "Pusta nazwa funkcji" #: src/function.c:2669 #, c-format msgid "Invalid function name: %s" msgstr "Błędna nazwa funkcji: %s" #: src/function.c:2671 #, c-format msgid "Function name too long: %s" msgstr "Zbyt dÅ‚uga nazwa funkcji: %s" #: src/function.c:2674 #, c-format msgid "Invalid minimum argument count (%u) for function %s" msgstr "Błędna minimalna liczba argumentów (%u) dla funkcji %s" #: src/function.c:2677 #, c-format msgid "Invalid maximum argument count (%u) for function %s" msgstr "Błędna maksymalna liczba argumentów (%u) dla funkcji %s" #: src/getopt.c:659 #, c-format msgid "%s: option '%s' is ambiguous\n" msgstr "%s: opcja '%s' jest niejednoznaczna\n" #: src/getopt.c:683 #, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s: opcja '--%s' nie przyjmuje argumentów\n" #: src/getopt.c:688 #, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s: opcja '%c%s' nie może mieć argumentów\n" #: src/getopt.c:705 src/getopt.c:878 #, c-format msgid "%s: option '%s' requires an argument\n" msgstr "%s: opcja '%s' musi mieć argument\n" #: src/getopt.c:734 #, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s: nieznana opcja '--%s'\n" #: src/getopt.c:738 #, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s: nieznana opcja '%c%s'\n" #: src/getopt.c:764 #, c-format msgid "%s: illegal option -- %c\n" msgstr "%s: niedozwolona opcja -- %c\n" #: src/getopt.c:767 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s: błędna opcja -- %c\n" #: src/getopt.c:797 src/getopt.c:927 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: opcja musi mieć argument -- %c\n" #: src/getopt.c:844 #, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s: opcja '-W %s' jest niejednoznaczna\n" #: src/getopt.c:862 #, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s: opcja '-W %s' nie może mieć argumentów\n" #: src/guile.c:58 #, c-format msgid "guile: Expanding '%s'\n" msgstr "guile: Rozwijanie '%s'\n" #: src/guile.c:74 #, c-format msgid "guile: Evaluating '%s'\n" msgstr "guile: Wyliczanie '%s'\n" #: src/hash.c:50 #, c-format msgid "can't allocate %lu bytes for hash table: memory exhausted" msgstr "" "nie można przydzielić %lu bajtów na tablicÄ™ haszujÄ…cÄ…: pamięć wyczerpana" #: src/hash.c:280 #, c-format msgid "Load=%lu/%lu=%.0f%%, " msgstr "WypeÅ‚nienie=%lu/%lu=%.0f%%, " #: src/hash.c:282 #, c-format msgid "Rehash=%u, " msgstr "Przehaszowania=%u, " #: src/hash.c:283 #, c-format msgid "Collisions=%lu/%lu=%.0f%%" msgstr "Kolizje=%lu/%lu=%.0f%%" #: src/implicit.c:38 #, c-format msgid "Looking for an implicit rule for '%s'.\n" msgstr "Szukanie standardowej reguÅ‚y dla '%s'.\n" #: src/implicit.c:54 #, c-format msgid "Looking for archive-member implicit rule for '%s'.\n" msgstr "Szukanie standardowej reguÅ‚y typu archive-member dla '%s'.\n" #: src/implicit.c:311 #, c-format msgid "Avoiding implicit rule recursion.\n" msgstr "Pomijanie rekurencyjnego wywoÅ‚ania reguÅ‚y standardowej.\n" #: src/implicit.c:484 #, c-format msgid "Stem too long: '%s%.*s'.\n" msgstr "Gałąź zbyt dÅ‚uga: '%s%.*s'.\n" #: src/implicit.c:490 #, c-format msgid "Trying pattern rule with stem '%.*s'.\n" msgstr "Próbowanie reguÅ‚y wzorcowej z gałęziÄ… '%.*s'.\n" #: src/implicit.c:717 #, c-format msgid "Rejecting impossible rule prerequisite '%s'.\n" msgstr "Odrzucenie niemożliwej zależnoÅ›ci reguÅ‚y '%s'.\n" #: src/implicit.c:718 #, c-format msgid "Rejecting impossible implicit prerequisite '%s'.\n" msgstr "Odrzucenie niemożliwej zależnoÅ›ci domyÅ›lnej '%s'.\n" #: src/implicit.c:732 #, c-format msgid "Trying rule prerequisite '%s'.\n" msgstr "Próbowanie zależnoÅ›ci reguÅ‚y '%s'.\n" #: src/implicit.c:733 #, c-format msgid "Trying implicit prerequisite '%s'.\n" msgstr "Próbowanie zależnoÅ›ci domyÅ›lnej '%s'.\n" #: src/implicit.c:772 #, c-format msgid "Found prerequisite '%s' as VPATH '%s'\n" msgstr "Znaleziono zależność '%s' jako VPATH '%s'\n" #: src/implicit.c:786 #, c-format msgid "Looking for a rule with intermediate file '%s'.\n" msgstr "Szukanie reguÅ‚y zawierajÄ…cej plik przejÅ›ciowy '%s'.\n" #: src/job.c:370 msgid "Cannot create a temporary file\n" msgstr "Nie można utworzyć pliku tymczasowego\n" #: src/job.c:548 msgid " (core dumped)" msgstr " (zrzut pamiÄ™ci)" #: src/job.c:553 msgid " (ignored)" msgstr " (zignorowano)" #: src/job.c:557 src/job.c:1892 msgid "" msgstr "" #: src/job.c:573 #, c-format msgid "%s[%s: %s] Error %d%s" msgstr "%s[%s: %s] Błąd %d%s" #: src/job.c:662 #, c-format msgid "*** Waiting for unfinished jobs...." msgstr "*** Oczekiwanie na niezakoÅ„czone zadania...." #: src/job.c:704 #, c-format msgid "Live child %p (%s) PID %s %s\n" msgstr "Å»yjÄ…cy potomek %p (%s) PID %s %s\n" #: src/job.c:706 src/job.c:900 src/job.c:1072 src/job.c:1644 #, c-format msgid " (remote)" msgstr " (zdalne)" #: src/job.c:898 #, c-format msgid "Reaping winning child %p PID %s %s\n" msgstr "Zbieranie wygrywajÄ…cego potomka %p PID %s %s\n" #: src/job.c:899 #, c-format msgid "Reaping losing child %p PID %s %s\n" msgstr "Zbieranie przegrywajÄ…cego potomka %p PID %s %s\n" #: src/job.c:950 #, c-format msgid "Cleaning up temp batch file %s\n" msgstr "Czyszczenie tymczasowego pliku wsadowego %s\n" #: src/job.c:956 #, c-format msgid "Cleaning up temp batch file %s failed (%d)\n" msgstr "Czyszczenie tymczasowego pliku wsadowego %s nie powiodÅ‚o siÄ™ (%d)\n" #: src/job.c:1071 #, c-format msgid "Removing child %p PID %s%s from chain.\n" msgstr "Usuwanie potomka %p PID %s%s z kolejki.\n" #: src/job.c:1120 #, c-format msgid "Released token for child %p (%s).\n" msgstr "Zwolniony token dla potomka %p (%s).\n" #: src/job.c:1575 src/job.c:2487 #, c-format msgid "process_easy() failed to launch process (e=%ld)\n" msgstr "process_easy() nie mógÅ‚ uruchomić procesu (e=%ld)\n" #: src/job.c:1579 src/job.c:2491 #, c-format msgid "" "\n" "Counted %d args in failed launch\n" msgstr "" "\n" "Naliczono %d parametrów nieudanego uruchomienia\n" #: src/job.c:1642 #, 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" #: src/job.c:1875 #, c-format msgid "Obtained token for child %p (%s).\n" msgstr "Otrzymano token dla potomka %p (%s).\n" #: src/job.c:1902 #, c-format msgid "%s: target '%s' does not exist" msgstr "%s: obiekt '%s' nie istnieje" #: src/job.c:1905 #, c-format msgid "%s: update target '%s' due to: %s" msgstr "%s: uaktualnianie obiektu '%s' z powodu: %s" #: src/job.c:2108 #, c-format msgid "cannot enforce load limits on this operating system" msgstr "niemożliwe wymuszenie limitów obciążenia w tym systemie" #: src/job.c:2110 msgid "cannot enforce load limit: " msgstr "niemożliwe wymuszenie limitu obciążenia: " #: src/job.c:2200 #, c-format 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" #: src/job.c:2212 #, c-format 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" #: src/job.c:2226 #, c-format 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" #: src/job.c:2241 #, c-format msgid "Could not restore stdin\n" msgstr "Nie można odtworzyć stdin\n" #: src/job.c:2249 #, c-format msgid "Could not restore stdout\n" msgstr "Nie można odtworzyć stdout\n" #: src/job.c:2257 #, c-format msgid "Could not restore stderr\n" msgstr "Nie można odtworzyć stderr\n" #: src/job.c:2520 #, 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" #: src/job.c:2623 #, c-format msgid "spawnvpe: environment space might be exhausted" msgstr "spawnvpe: mogÅ‚o zabraknąć miejsca na Å›rodowisko" #: src/job.c:2862 #, c-format msgid "$SHELL changed (was '%s', now '%s')\n" msgstr "$SHELL siÄ™ zmieniÅ‚ (byÅ‚ '%s', jest '%s')\n" #: src/job.c:3300 src/job.c:3485 #, c-format msgid "Creating temporary batch file %s\n" msgstr "Tworzenie tymczasowego pliku wsadowego %s\n" #: src/job.c:3308 #, c-format msgid "" "Batch file contents:\n" "\t@echo off\n" msgstr "" "Zawartość pliku wsadowego:\n" "\t@echo off\n" #: src/job.c:3497 #, c-format msgid "" "Batch file contents:%s\n" "\t%s\n" msgstr "" "Zawartość pliku wsadowego:%s\n" "\t%s\n" #: src/job.c:3605 #, 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" #: src/load.c:60 #, c-format msgid "Failed to open global symbol table: %s" msgstr "Nie udaÅ‚o siÄ™ otworzyć tablicy symboli globalnych: %s" #: src/load.c:97 #, c-format msgid "Loaded object %s is not declared to be GPL compatible" msgstr "Wczytany obiekt %s nie jest zadeklarowany jako kompatybilny z GPL" #: src/load.c:104 #, c-format msgid "Failed to load symbol %s from %s: %s" msgstr "Nie udaÅ‚o siÄ™ wczytać symbolu %s z %s: %s" #: src/load.c:149 #, c-format msgid "Empty symbol name for load: %s" msgstr "Pusta nazwa symbolu do wczytania: %s" #: src/load.c:204 #, c-format msgid "Loading symbol %s from %s\n" msgstr "Wczytywanie symbolu %s z %s\n" #: src/load.c:256 #, c-format msgid "The 'load' operation is not supported on this platform." msgstr "Operacja 'load' nie jest obsÅ‚ugiwana na tej platformie" #: src/main.c:335 msgid "Options:\n" msgstr "Opcje:\n" #: src/main.c:336 msgid " -b, -m Ignored for compatibility.\n" msgstr " -b, -m Ignorowane dla kompatybilnoÅ›ci.\n" #: src/main.c:338 msgid " -B, --always-make Unconditionally make all targets.\n" msgstr "" " -B, --always-make Bezwarunkowe utworzenie wszystkich obiektów.\n" #: src/main.c:340 msgid "" " -C DIRECTORY, --directory=DIRECTORY\n" " Change to DIRECTORY before doing anything.\n" msgstr "" " -C KATALOG, --directory=KATALOG\n" " PrzejÅ›cie do KATALOGu przed robieniem\n" " czegokolwiek.\n" #: src/main.c:343 msgid " -d Print lots of debugging information.\n" msgstr "" " -d WyÅ›wietla dużo informacji diagnostycznych.\n" #: src/main.c:345 msgid "" " --debug[=FLAGS] Print various types of debugging information.\n" msgstr "" " --debug[=FLAGI] WyÅ›wietla różne rodzaje informacji\n" " diagnostycznych.\n" #: src/main.c:347 msgid "" " -e, --environment-overrides\n" " Environment variables override makefiles.\n" msgstr "" " -e, --environment-overrides\n" " Zmienne Å›rodowiska przykrywajÄ… makefile.\n" #: src/main.c:350 msgid "" " -E STRING, --eval=STRING Evaluate STRING as a makefile statement.\n" msgstr "" " -E ÅAŃCUCH, --eval=ÅAŃCUCH Wyznacza ÅAŃCUCH jako instrukcjÄ™ pliku " "makefile.\n" #: src/main.c:352 msgid "" " -f FILE, --file=FILE, --makefile=FILE\n" " Read FILE as a makefile.\n" msgstr "" " -f PLIK, --file=PLIK, --makefile=PLIK\n" " Czyta PLIK jako makefile.\n" #: src/main.c:355 msgid " -h, --help Print this message and exit.\n" msgstr "" " -h, --help WyÅ›wietla ten komunikat i koÅ„czy dziaÅ‚anie.\n" #: src/main.c:357 msgid " -i, --ignore-errors Ignore errors from recipes.\n" msgstr " -i, --ignore-errors Ignoruje błędy poleceÅ„.\n" #: src/main.c:359 msgid "" " -I DIRECTORY, --include-dir=DIRECTORY\n" " Search DIRECTORY for included makefiles.\n" msgstr "" " -I KATALOG, --include-dir=KATALOG\n" " Szuka dołączanych makefile w KATALOGu.\n" #: src/main.c:362 msgid "" " -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no " "arg.\n" msgstr "" " -j [N], --jobs[=N] Dopuszcza N zadaÅ„ naraz; brak N oznacza brak\n" " ograniczeÅ„.\n" #: src/main.c:364 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" #: src/main.c:366 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" " Nie uruchamiaj wielu zadaÅ„ jeÅ›li load nie " "jest\n" " poniżej N.\n" #: src/main.c:369 msgid "" " -L, --check-symlink-times Use the latest mtime between symlinks and " "target.\n" msgstr "" " -L, --check-symlink-times Używanie ostatniego mtime miÄ™dzy dowiÄ…zaniem a " "celem.\n" #: src/main.c:371 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" " Nie wykonuje poleceÅ„; jedynie je wyÅ›wietla.\n" #: src/main.c:374 msgid "" " -o FILE, --old-file=FILE, --assume-old=FILE\n" " Consider FILE to be very old and don't remake " "it.\n" msgstr "" " -o PLIK, --old-file=PLIK, --assume-old=PLIK\n" " Uznanie PLIKu za bardzo stary i nie tworzenie " "go\n" " ponownie.\n" #: src/main.c:377 msgid "" " -O[TYPE], --output-sync[=TYPE]\n" " Synchronize output of parallel jobs by TYPE.\n" msgstr "" " -O[SPOSÓB], --output-sync[=SPOSÓB]\n" " Sposób synchronizacji wyjÅ›cia zadaÅ„ " "równolegÅ‚ych.\n" #: src/main.c:380 msgid " -p, --print-data-base Print make's internal database.\n" msgstr " -p, --print-data-base WyÅ›wietla wewnÄ™trznÄ… bazÄ™ danych make.\n" #: src/main.c:382 msgid "" " -q, --question Run no recipe; exit status says if up to " "date.\n" msgstr "" " -q, --question Nie uruchamia żadnych poleceÅ„; status powrotu\n" " wskazuje aktualność.\n" #: src/main.c:384 msgid " -r, --no-builtin-rules Disable the built-in implicit rules.\n" msgstr " -r, --no-builtin-rules Wyłącza wbudowane reguÅ‚y standardowe.\n" #: src/main.c:386 msgid " -R, --no-builtin-variables Disable the built-in variable settings.\n" msgstr "" " -R, --no-builtin-variables Wyłącza ustawianie wbudowanych zmiennych.\n" #: src/main.c:388 msgid " -s, --silent, --quiet Don't echo recipes.\n" msgstr " -s, --silent, --quiet Nie wypisuje poleceÅ„.\n" #: src/main.c:390 msgid " --no-silent Echo recipes (disable --silent mode).\n" msgstr "" " --no-silent Wypisuje polecenia (wyłącza tryb --silent).\n" #: src/main.c:392 msgid "" " -S, --no-keep-going, --stop\n" " Turns off -k.\n" msgstr "" " -S, --no-keep-going, --stop\n" " Wyłącza -k.\n" #: src/main.c:395 msgid " -t, --touch Touch targets instead of remaking them.\n" msgstr " -t, --touch Uaktualnia obiekty zamiast je robić.\n" #: src/main.c:397 msgid " --trace Print tracing information.\n" msgstr " --trace Wypisywanie informacji ze Å›ledzenia.\n" #: src/main.c:399 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" #: src/main.c:401 msgid " -w, --print-directory Print the current directory.\n" msgstr " -w, --print-directory WyÅ›wietla aktualny katalog.\n" #: src/main.c:403 msgid "" " --no-print-directory Turn off -w, even if it was turned on " "implicitly.\n" msgstr "" " --no-print-directory Wyłącza -w, nawet jeÅ›li byÅ‚o ono włączone\n" " domyÅ›lnie.\n" #: src/main.c:405 msgid "" " -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n" " Consider FILE to be infinitely new.\n" msgstr "" " -W PLIK, --what-if=PLIK, --new-file=PLIK, --assume-new=PLIK\n" " Uznaje PLIK za nieskoÅ„czenie nowy.\n" #: src/main.c:408 msgid "" " --warn-undefined-variables Warn when an undefined variable is " "referenced.\n" msgstr "" " --warn-undefined-variables Ostrzega przy odwoÅ‚aniach do " "niezdefiniowanych\n" " zmiennych.\n" #: src/main.c:671 #, c-format msgid "empty string invalid as file name" msgstr "pusty Å‚aÅ„cuch nie może być nazwÄ… pliku" #: src/main.c:754 #, c-format msgid "unknown debug level specification '%s'" msgstr "nieznany poziom diagnostyki '%s'" #: src/main.c:794 #, c-format msgid "unknown output-sync type '%s'" msgstr "nieznany sposób synchronizacji wyjÅ›cia '%s'" #: src/main.c:849 #, 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" #: src/main.c:856 #, c-format msgid "" "\n" "Unhandled exception filter called from program %s\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" msgstr "" "\n" "NieobsÅ‚ugiwany filtr wyjÄ…tku wywoÅ‚any z programu %s\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" #: src/main.c:864 #, c-format msgid "Access violation: write operation at address 0x%p\n" msgstr "Naruszenie praw dostÄ™pu: zapis pod adresem 0x%p\n" #: src/main.c:865 #, c-format msgid "Access violation: read operation at address 0x%p\n" msgstr "Naruszenie praw dostÄ™pu: odczyt spod adresu 0x%p\n" #: src/main.c:941 src/main.c:956 #, c-format msgid "find_and_set_shell() setting default_shell = %s\n" msgstr "find_and_set_shell() ustawia default_shell = %s\n" #: src/main.c:1009 #, 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" #: src/main.c:1609 #, c-format 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." #: src/main.c:1617 #, c-format msgid "warning: -j%d forced in submake: resetting jobserver mode." msgstr "uwaga: -j%d wymuszone w podzadaniu: wyłączanie trybu serwera zadaÅ„." #: src/main.c:1781 #, c-format msgid "Makefile from standard input specified twice." msgstr "Makefile ze standardowego wejÅ›cia podano dwukrotnie." #: src/main.c:1819 src/vmsjobs.c:1248 msgid "fopen (temporary file)" msgstr "fopen (plik tymczasowy)" #: src/main.c:1825 msgid "fwrite (temporary file)" msgstr "fwrite (plik tymczasowy)" #: src/main.c:2004 #, c-format msgid "warning: -j%d forced in makefile: resetting jobserver mode." msgstr "uwaga: -j%d wymuszone w podzadaniu: wyłączanie trybu serwera zadaÅ„." #: src/main.c:2068 #, c-format msgid "Parallel jobs (-j) are not supported on this platform." msgstr "RównolegÅ‚e zadania (-j) nie sÄ… obsÅ‚ugiwane na tej platformie" #: src/main.c:2069 #, c-format msgid "Resetting to single job (-j1) mode." msgstr "Przełączanie w tryb jednozadaniowy (-j1)." #: src/main.c:2109 #, c-format msgid "Symbolic links not supported: disabling -L." msgstr "DowiÄ…zania symboliczne nie sÄ… obsÅ‚ugiwane: wyłączono -L." #: src/main.c:2190 #, c-format msgid "Updating makefiles....\n" msgstr "Uaktualnianie plików makefile....\n" #: src/main.c:2226 #, c-format msgid "Makefile '%s' might loop; not remaking it.\n" msgstr "Plik makefile '%s' może siÄ™ zapÄ™tlić; bez ponownego przetwarzania.\n" #: src/main.c:2303 #, c-format msgid "Failed to remake makefile '%s'." msgstr "Nie udaÅ‚o siÄ™ ponownie przetworzyć pliku makefile '%s'." #: src/main.c:2323 #, c-format msgid "Included makefile '%s' was not found." msgstr "Nie znaleziono włączanego pliku makefile '%s'." #: src/main.c:2328 #, c-format msgid "Makefile '%s' was not found" msgstr "Nie znaleziono pliku makefile '%s'" #: src/main.c:2394 #, c-format msgid "Couldn't change back to original directory." msgstr "Niemożliwy powrót do katalogu startowego." #: src/main.c:2402 #, c-format msgid "Re-executing[%u]:" msgstr "Ponowne uruchamianie[%u]:" #: src/main.c:2522 msgid "unlink (temporary file): " msgstr "unlink (plik tymczasowy): " #: src/main.c:2555 #, c-format msgid ".DEFAULT_GOAL contains more than one target" msgstr ".DEFAULT_GOAL zawiera wiÄ™cej niż jeden cel" #: src/main.c:2579 #, c-format msgid "No targets" msgstr "Brak obiektów" #: src/main.c:2581 #, c-format msgid "No targets specified and no makefile found" msgstr "Nie podano obiektów i nie znaleziono makefile" #: src/main.c:2586 #, c-format msgid "Updating goal targets....\n" msgstr "Uaktualnianie obiektów docelowych....\n" #: src/main.c:2610 #, c-format msgid "warning: Clock skew detected. Your build may be incomplete." msgstr "uwaga: Wykryto przestawienie zegara. Budowanie może być niekompletne." #: src/main.c:2804 #, c-format msgid "Usage: %s [options] [target] ...\n" msgstr "SkÅ‚adnia: %s [opcje] [obiekt] ...\n" #: src/main.c:2810 #, c-format msgid "" "\n" "This program built for %s\n" msgstr "" "\n" "Ten program zostaÅ‚ zbudowany dla %s\n" #: src/main.c:2812 #, c-format msgid "" "\n" "This program built for %s (%s)\n" msgstr "" "\n" "Ten program zostaÅ‚ zbudowany dla %s (%s)\n" #: src/main.c:2815 #, c-format msgid "Report bugs to \n" msgstr "Błędy proszÄ™ zgÅ‚aszać na adres \n" #: src/main.c:2901 #, c-format msgid "the '%s%s' option requires a non-empty string argument" msgstr "opcja '%s%s' wymaga niepustego Å‚aÅ„cucha jako argumentu" #: src/main.c:2965 #, c-format msgid "the '-%c' option requires a positive integer argument" msgstr "opcja '-%c' wymaga argumentu bÄ™dÄ…cego liczbÄ… caÅ‚kowitÄ… dodatniÄ…" #: src/main.c:3363 #, c-format msgid "%sBuilt for %s\n" msgstr "%sTen program zostaÅ‚ zbudowany dla systemu %s\n" #: src/main.c:3365 #, c-format msgid "%sBuilt for %s (%s)\n" msgstr "%sTen program zostaÅ‚ zbudowany dla systemu %s (%s)\n" #: src/main.c:3376 #, c-format msgid "" "%sLicense GPLv3+: GNU GPL version 3 or later \n" "%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 "" "%sLicencja GPLv3+: GNU GPL wersja 3 lub nowsza \n" "%sTo oprogramowanie jest wolnodostÄ™pne: można je swobodnie zmieniać i " "rozpowszechniać.\n" "%sNie ma Å»ADNEJ GWARANCJI w zakresie dopuszczalnym przez prawo.\n" #: src/main.c:3397 #, c-format msgid "" "\n" "# Make data base, printed on %s" msgstr "" "\n" "# Baza danych Make, wyÅ›wietlana na %s" #: src/main.c:3407 #, c-format msgid "" "\n" "# Finished Make data base on %s\n" msgstr "" "\n" "# ZakoÅ„czono tworzenie bazy danych Make na %s\n" #: src/misc.c:643 #, 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" #: src/misc.c:664 msgid "Initialized access" msgstr "Zainicjalizowany dostÄ™p" #: src/misc.c:743 msgid "User access" msgstr "DostÄ™p użytkownika" #: src/misc.c:791 msgid "Make access" msgstr "DostÄ™p make" #: src/misc.c:825 msgid "Child access" msgstr "DostÄ™p potomka" #: src/output.c:97 #, c-format msgid "%s: Entering an unknown directory\n" msgstr "%s: WejÅ›cie do nieznanego katalogu\n" #: src/output.c:99 #, c-format msgid "%s: Leaving an unknown directory\n" msgstr "%s: Opuszczenie nieznanego katalogu\n" #: src/output.c:102 #, c-format msgid "%s: Entering directory '%s'\n" msgstr "%s: WejÅ›cie do katalogu '%s'\n" #: src/output.c:104 #, c-format msgid "%s: Leaving directory '%s'\n" msgstr "%s: Opuszczenie katalogu '%s'\n" #: src/output.c:108 #, c-format msgid "%s[%u]: Entering an unknown directory\n" msgstr "%s[%u]: WejÅ›cie do nieznanego katalogu\n" #: src/output.c:110 #, c-format msgid "%s[%u]: Leaving an unknown directory\n" msgstr "%s[%u]: Opuszczenie nieznanego katalogu\n" #: src/output.c:113 #, c-format msgid "%s[%u]: Entering directory '%s'\n" msgstr "%s[%u]: WejÅ›cie do katalogu '%s'\n" #: src/output.c:115 #, c-format msgid "%s[%u]: Leaving directory '%s'\n" msgstr "%s[%u]: Opuszczenie katalogu '%s'\n" #: src/output.c:442 src/output.c:444 #, c-format msgid "write error: stdout" msgstr "błąd zapisu: standardowe wyjÅ›cie" #: src/output.c:624 msgid ". Stop.\n" msgstr ". Stop.\n" #: src/output.c:658 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" #: src/output.c:667 #, c-format msgid "%s: %s" msgstr "%s: %s" #: src/output.h:62 #, c-format msgid "-O[TYPE] (--output-sync[=TYPE]) is not configured for this build." msgstr "" "-O[TYP] (--output-sync[=TYP]) nie zostaÅ‚o skonfigurowane przy tym budowaniu." #: src/posixos.c:90 msgid "creating jobs pipe" msgstr "tworzenie potoku zadaÅ„" #: src/posixos.c:98 src/posixos.c:251 msgid "duping jobs pipe" msgstr "duplikowanie potoku zadaÅ„" #: src/posixos.c:104 msgid "init jobserver pipe" msgstr "inicjowanie potoku serwera zadaÅ„" #: src/posixos.c:119 #, c-format msgid "internal error: invalid --jobserver-auth string '%s'" msgstr "błąd wewnÄ™trzny: błędny Å‚aÅ„cuch --jobserver-auth '%s'" #: src/posixos.c:122 #, c-format msgid "Jobserver client (fds %d,%d)\n" msgstr "Klient serwera zadaÅ„ (fds %d,%d)\n" #: src/posixos.c:138 msgid "jobserver pipeline" msgstr "potok serwera zadaÅ„" #: src/posixos.c:186 msgid "write jobserver" msgstr "zapis do serwera zadaÅ„" #: src/posixos.c:300 #, c-format msgid "job server shut down" msgstr "serwer zadaÅ„ zamkniÄ™ty" #: src/posixos.c:303 msgid "pselect jobs pipe" msgstr "pselect potoku zadaÅ„" #: src/posixos.c:319 src/posixos.c:433 msgid "read jobs pipe" msgstr "odczyt potoku zadaÅ„" #: src/read.c:181 #, c-format msgid "Reading makefiles...\n" msgstr "Czytanie makefile...\n" #: src/read.c:336 #, c-format msgid "Reading makefile '%s'" msgstr "Czytanie pliku makefile '%s'" #: src/read.c:338 #, c-format msgid " (no default goal)" msgstr " (brak celu domyÅ›lnego)" #: src/read.c:340 #, c-format msgid " (search path)" msgstr " (przeszukiwana Å›cieżka)" #: src/read.c:342 #, c-format msgid " (don't care)" msgstr " (nieważne)" #: src/read.c:344 #, c-format msgid " (no ~ expansion)" msgstr " (brak rozszerzenia ~)" #: src/read.c:655 #, c-format msgid "Skipping UTF-8 BOM in makefile '%s'\n" msgstr "PominiÄ™to BOM UTF-8 w pliku makefile '%s'\n" #: src/read.c:658 #, c-format msgid "Skipping UTF-8 BOM in makefile buffer\n" msgstr "PominiÄ™to BOM UTF-8 w buforze pliku makefile\n" #: src/read.c:787 #, c-format msgid "invalid syntax in conditional" msgstr "błędna skÅ‚adnia wyrażenia warunkowego" #: src/read.c:960 #, c-format msgid "%s: failed to load" msgstr "%s: nie udaÅ‚o siÄ™ zaÅ‚adować" #: src/read.c:986 #, c-format msgid "recipe commences before first target" msgstr "polecenia zaczynajÄ… siÄ™ przed pierwszym obiektem" #: src/read.c:1035 #, c-format msgid "missing rule before recipe" msgstr "brakuje reguÅ‚y przed poleceniami" #: src/read.c:1136 #, c-format msgid "missing separator (did you mean TAB instead of 8 spaces?)" msgstr "brakujÄ…cy separator (czyżby miaÅ‚ być TAB zamiast 8 spacji?)" #: src/read.c:1138 #, c-format msgid "missing separator" msgstr "brakujÄ…cy separator" #: src/read.c:1283 #, c-format msgid "missing target pattern" msgstr "brakujÄ…cy wzorzec obiektu" #: src/read.c:1285 #, c-format msgid "multiple target patterns" msgstr "wielokrotne wzorce obiektu" #: src/read.c:1289 #, c-format msgid "target pattern contains no '%%'" msgstr "wzorzec obiektu nie zawiera '%%'" #: src/read.c:1404 #, c-format msgid "missing 'endif'" msgstr "brakujÄ…cy 'endif'" #: src/read.c:1443 src/read.c:1488 src/variable.c:1600 #, c-format msgid "empty variable name" msgstr "pusta nazwa zmiennej" #: src/read.c:1478 #, c-format msgid "extraneous text after 'define' directive" msgstr "nadmiarowy tekst po dyrektywie 'define'" #: src/read.c:1503 #, c-format msgid "missing 'endef', unterminated 'define'" msgstr "brakujÄ…cy 'endef', niezakoÅ„czone 'define'" #: src/read.c:1531 #, c-format msgid "extraneous text after 'endef' directive" msgstr "nadmiarowy tekst po dyrektywie 'endef'" #: src/read.c:1603 #, c-format msgid "extraneous text after '%s' directive" msgstr "niezwiÄ…zany tekst po dyrektywie '%s'" #: src/read.c:1604 #, c-format msgid "extraneous '%s'" msgstr "nadmiarowy '%s'" #: src/read.c:1632 #, c-format msgid "only one 'else' per conditional" msgstr "tylko jedno 'else' w wyrażeniu warunkowym" #: src/read.c:1908 #, c-format msgid "Malformed target-specific variable definition" msgstr "Źle sformuÅ‚owana definicja zmiennej dla celu" #: src/read.c:1968 #, c-format msgid "prerequisites cannot be defined in recipes" msgstr "wymagania nie mogÄ… być definiowane w opisach poleceÅ„" #: src/read.c:1986 #, c-format msgid "grouped targets must provide a recipe" msgstr "pogrupowane obiekty muszÄ… dostarczać opis polecenia" #: src/read.c:2029 #, c-format msgid "mixed implicit and static pattern rules" msgstr "pomieszane standardowe i statyczne reguÅ‚y wzorców" #: src/read.c:2052 #, c-format msgid "mixed implicit and normal rules" msgstr "pomieszane standardowe i normalne reguÅ‚y" #: src/read.c:2107 #, c-format msgid "target '%s' doesn't match the target pattern" msgstr "obiekt '%s' nie pasuje do wzorca obiektu" #: src/read.c:2122 src/read.c:2168 #, c-format msgid "target file '%s' has both : and :: entries" msgstr "plik obiektu '%s' ma pozycje i : i ::" #: src/read.c:2128 #, c-format msgid "target '%s' given more than once in the same rule" msgstr "obiekt '%s' podany wielokrotnie w tej samej regule" #: src/read.c:2138 #, c-format msgid "warning: overriding recipe for target '%s'" msgstr "uwaga: polecenia zakrywajÄ…ce dla obiektu '%s'" #: src/read.c:2141 #, c-format msgid "warning: ignoring old recipe for target '%s'" msgstr "uwaga: ignorujÄ™ stare polecenia dla obiektu '%s'" #: src/read.c:2254 #, c-format msgid "*** mixed implicit and normal rules: deprecated syntax" msgstr "*** pomieszane reguÅ‚y standardowe i normalne: przestarzaÅ‚a skÅ‚adnia" #: src/read.c:2271 #, c-format msgid "warning: overriding group membership for target '%s'" msgstr "uwaga: zakrycie czÅ‚onkowstwa w grupie dla obiektu '%s'" #: src/read.c:2636 #, c-format msgid "warning: NUL character seen; rest of line ignored" msgstr "uwaga: napotkaÅ‚em na znak NUL; reszta linii zignorowana" #: src/remake.c:226 #, c-format msgid "Nothing to be done for '%s'." msgstr "Nie ma nic do zrobienia w '%s'." #: src/remake.c:227 #, c-format msgid "'%s' is up to date." msgstr "'%s' jest aktualne." #: src/remake.c:323 #, c-format msgid "Pruning file '%s'.\n" msgstr "Czyszczenie pliku '%s'.\n" #: src/remake.c:389 #, c-format msgid "%sNo rule to make target '%s', needed by '%s'%s" msgstr "%sBrak reguÅ‚ do zrobienia obiektu '%s', wymaganego przez '%s'%s" #: src/remake.c:399 #, c-format msgid "%sNo rule to make target '%s'%s" msgstr "%sBrak reguÅ‚ do wykonania obiektu '%s'%s" #: src/remake.c:425 #, c-format msgid "Considering target file '%s'.\n" msgstr "Przetwarzanie pliku obiektowego '%s'.\n" #: src/remake.c:432 #, c-format msgid "Recently tried and failed to update file '%s'.\n" msgstr "Już bez powodzenia próbowaÅ‚em uaktualnić plik '%s'.\n" #: src/remake.c:444 #, c-format msgid "File '%s' was considered already.\n" msgstr "Plik '%s' byÅ‚ już przetwarzany.\n" #: src/remake.c:454 #, c-format msgid "Still updating file '%s'.\n" msgstr "Wciąż uaktualniam plik '%s'.\n" #: src/remake.c:457 #, c-format msgid "Finished updating file '%s'.\n" msgstr "SkoÅ„czyÅ‚em uaktualniać plik '%s'.\n" #: src/remake.c:486 #, c-format msgid "File '%s' does not exist.\n" msgstr "Plik '%s' nie istnieje.\n" #: src/remake.c:494 #, c-format msgid "" "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp" msgstr "" "*** Uwaga: plik .LOW_RESOLUTION_TIME '%s' ma dużą rozdzielczość znacznika " "czasu" #: src/remake.c:507 src/remake.c:1039 #, c-format msgid "Found an implicit rule for '%s'.\n" msgstr "Znaleziono standardowÄ… regułę dla '%s'.\n" #: src/remake.c:509 src/remake.c:1041 #, c-format msgid "No implicit rule found for '%s'.\n" msgstr "Brak standardowych reguÅ‚ dla '%s'.\n" #: src/remake.c:515 #, c-format msgid "Using default recipe for '%s'.\n" msgstr "Stosowanie standardowych poleceÅ„ dla '%s'.\n" #: src/remake.c:549 src/remake.c:1088 #, c-format msgid "Circular %s <- %s dependency dropped." msgstr "Okrężna dyrektywa %s <- %s porzucona." #: src/remake.c:674 #, c-format msgid "Finished prerequisites of target file '%s'.\n" msgstr "ZakoÅ„czono zależnoÅ›ci pliku obiektu '%s'.\n" #: src/remake.c:680 #, c-format msgid "The prerequisites of '%s' are being made.\n" msgstr "ZależnoÅ›ci '%s' sÄ… wykonywane.\n" #: src/remake.c:694 #, c-format msgid "Giving up on target file '%s'.\n" msgstr "Zaniechany plik obiektowy '%s'.\n" #: src/remake.c:699 #, c-format msgid "Target '%s' not remade because of errors." msgstr "Obiekt '%s' nie zostaÅ‚ ponownie wykonany z powodu błędów." #: src/remake.c:751 #, c-format msgid "Prerequisite '%s' is order-only for target '%s'.\n" msgstr "Zależność '%s' dotyczy tylko kolejnoÅ›ci dla obiektu '%s'.\n" #: src/remake.c:756 #, c-format msgid "Prerequisite '%s' of target '%s' does not exist.\n" msgstr "Zależność '%s' obiektu '%s' nie istnieje.\n" #: src/remake.c:761 #, c-format msgid "Prerequisite '%s' is newer than target '%s'.\n" msgstr "Zależność '%s' jest nowsza od obiektu '%s'.\n" #: src/remake.c:764 #, c-format msgid "Prerequisite '%s' is older than target '%s'.\n" msgstr "Zależność '%s' jest starsza od obiektu '%s'.\n" #: src/remake.c:782 #, 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" #: src/remake.c:789 #, 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" #: src/remake.c:794 #, c-format msgid "Making '%s' due to always-make flag.\n" msgstr "Tworzenie '%s' z powodu flagi always-make.\n" #: src/remake.c:802 #, c-format msgid "No need to remake target '%s'" msgstr "Nie ma potrzeby ponownego robienia obiektu '%s'" #: src/remake.c:804 #, c-format msgid "; using VPATH name '%s'" msgstr "; użyto nazwy VPATH '%s'" #: src/remake.c:824 #, c-format msgid "Must remake target '%s'.\n" msgstr "Konieczne ponowne wykonanie obiektu '%s'.\n" #: src/remake.c:830 #, c-format msgid " Ignoring VPATH name '%s'.\n" msgstr " Zignorowano nazwÄ™ VPATH '%s'.\n" #: src/remake.c:839 #, c-format msgid "Recipe of '%s' is being run.\n" msgstr "Uruchomiono polecenia dla '%s'.\n" #: src/remake.c:846 #, c-format msgid "Failed to remake target file '%s'.\n" msgstr "Ponowne tworzenie pliku obiektu '%s' nie powiodÅ‚o siÄ™.\n" #: src/remake.c:849 #, c-format msgid "Successfully remade target file '%s'.\n" msgstr "Ponowne tworzenie pliku obiektu '%s' powiodÅ‚o siÄ™.\n" #: src/remake.c:852 #, 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" #: src/remake.c:1047 #, c-format msgid "Using default commands for '%s'.\n" msgstr "Stosowanie standardowych poleceÅ„ dla '%s'.\n" #: src/remake.c:1422 #, 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" #: src/remake.c:1662 #, c-format msgid ".LIBPATTERNS element '%s' is not a pattern" msgstr "Element .LIBPATTERNS '%s' nie jest wzorcem" #: src/remote-cstms.c:122 #, c-format msgid "Customs won't export: %s\n" msgstr "Zasady nie eksportowane: %s\n" #: src/rule.c:289 #, c-format msgid "warning: ignoring prerequisites on suffix rule definition" msgstr "" #: src/rule.c:530 msgid "" "\n" "# Implicit Rules" msgstr "" "\n" "# ReguÅ‚y stadardowe" #: src/rule.c:545 msgid "" "\n" "# No implicit rules." msgstr "" "\n" "# Brak standardowych reguÅ‚." #: src/rule.c:548 #, c-format msgid "" "\n" "# %u implicit rules, %u (%.1f%%) terminal." msgstr "" "\n" "# %u standardowych reguÅ‚, %u (%.1f%%) koÅ„cowych." #: src/rule.c:557 #, c-format msgid "BUG: num_pattern_rules is wrong! %u != %u" msgstr "BÅÄ„D: zÅ‚e num_pattern_rules! %u != %u" #: src/signame.c:84 msgid "unknown signal" msgstr "nieznany sygnaÅ‚" #: src/signame.c:92 msgid "Hangup" msgstr "Rozłączenie" #: src/signame.c:95 msgid "Interrupt" msgstr "Przerwanie" #: src/signame.c:98 msgid "Quit" msgstr "WyjÅ›cie" #: src/signame.c:101 msgid "Illegal Instruction" msgstr "Błędna instrukcja" #: src/signame.c:104 msgid "Trace/breakpoint trap" msgstr "PuÅ‚apka Å›ledzenia" #: src/signame.c:109 msgid "Aborted" msgstr "Przerwany" #: src/signame.c:112 msgid "IOT trap" msgstr "PuÅ‚apka IOT" #: src/signame.c:115 msgid "EMT trap" msgstr "PuÅ‚apka EMT" #: src/signame.c:118 msgid "Floating point exception" msgstr "WyjÄ…tek zmiennoprzecinkowy" #: src/signame.c:121 msgid "Killed" msgstr "Zabity" #: src/signame.c:124 msgid "Bus error" msgstr "Błąd szyny" #: src/signame.c:127 msgid "Segmentation fault" msgstr "Naruszenie ochrony pamiÄ™ci" #: src/signame.c:130 msgid "Bad system call" msgstr "Błędne wywoÅ‚anie systemowe" #: src/signame.c:133 msgid "Broken pipe" msgstr "Przerwany potok" #: src/signame.c:136 msgid "Alarm clock" msgstr "Budzik" #: src/signame.c:139 msgid "Terminated" msgstr "ZakoÅ„czony" #: src/signame.c:142 msgid "User defined signal 1" msgstr "SygnaÅ‚ użytkownika 1" #: src/signame.c:145 msgid "User defined signal 2" msgstr "SygnaÅ‚ użytkownika 2" #: src/signame.c:150 src/signame.c:153 msgid "Child exited" msgstr "Potomek powróciÅ‚" #: src/signame.c:156 msgid "Power failure" msgstr "Przerwa w zasilaniu" #: src/signame.c:159 msgid "Stopped" msgstr "Zatrzymany" #: src/signame.c:162 msgid "Stopped (tty input)" msgstr "Zatrzymany (wejÅ›cie z tty)" #: src/signame.c:165 msgid "Stopped (tty output)" msgstr "Zatrzymany (wyjÅ›cie na tty)" #: src/signame.c:168 msgid "Stopped (signal)" msgstr "Zatrzymany (sygnaÅ‚)" #: src/signame.c:171 msgid "CPU time limit exceeded" msgstr "Przekroczony czas CPU" #: src/signame.c:174 msgid "File size limit exceeded" msgstr "Przekroczony limit wielkoÅ›ci pliku" #: src/signame.c:177 msgid "Virtual timer expired" msgstr "Wyczerpany stoper wirtualny" #: src/signame.c:180 msgid "Profiling timer expired" msgstr "Wyczerpany stoper profilujÄ…cy" #: src/signame.c:186 msgid "Window changed" msgstr "Zmienione okno" #: src/signame.c:189 msgid "Continued" msgstr "Kontynuowany" #: src/signame.c:192 msgid "Urgent I/O condition" msgstr "NagÅ‚a sytuacja I/O" #: src/signame.c:199 src/signame.c:208 msgid "I/O possible" msgstr "I/O możliwe" #: src/signame.c:202 msgid "SIGWIND" msgstr "SIGWIND" #: src/signame.c:205 msgid "SIGPHONE" msgstr "SIGPHONE" #: src/signame.c:211 msgid "Resource lost" msgstr "Zaginione zasoby" #: src/signame.c:214 msgid "Danger signal" msgstr "SygnaÅ‚ niebezpieczeÅ„stwa" #: src/signame.c:217 msgid "Information request" msgstr "Żądanie informacji" #: src/signame.c:220 msgid "Floating point co-processor not available" msgstr "Koprocesor obliczeÅ„ zmiennoprzecinkowych niedostÄ™pny" #: src/strcache.c:274 #, c-format msgid "" "\n" "%s No strcache buffers\n" msgstr "" "\n" "%s Brak buforów strcache\n" #: src/strcache.c:304 #, c-format msgid "" "\n" "%s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu " "B\n" msgstr "" "\n" "%s bufory strcache: %lu (%lu) / Å‚aÅ„cuchów = %lu / miejsce = %lu B / Å›r = %lu " "B\n" #: src/strcache.c:308 #, c-format msgid "" "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B\n" msgstr "" "%s bieżący buf: rozmiar = %hu B / użyty = %hu B / liczba = %hu / Å›r = %u B\n" #: src/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" #: src/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" #: src/strcache.c:326 #, c-format msgid "" "\n" "%s strcache performance: lookups = %lu / hit rate = %lu%%\n" msgstr "" "\n" "%s wydajność strcache: wyszukiwaÅ„ = %lu / wsp. trafieÅ„ = %lu%%\n" #: src/strcache.c:328 msgid "" "# hash-table stats:\n" "# " msgstr "" "# statystyki tablic haszujÄ…cych:\n" "# " #: src/variable.c:1653 msgid "automatic" msgstr "automatyczna" #: src/variable.c:1656 msgid "default" msgstr "domyÅ›lna" #: src/variable.c:1659 msgid "environment" msgstr "Å›rodowiskowa" #: src/variable.c:1662 msgid "makefile" msgstr "makefile" #: src/variable.c:1665 msgid "environment under -e" msgstr "Å›rodowisko pod -e" #: src/variable.c:1668 msgid "command line" msgstr "z linii poleceÅ„" #: src/variable.c:1671 msgid "'override' directive" msgstr "dyrektywa 'override'" #: src/variable.c:1682 #, c-format msgid " (from '%s', line %lu)" msgstr " (z '%s', linia %lu)" #: src/variable.c:1745 msgid "# variable set hash-table stats:\n" msgstr "# statystyki tablic haszujÄ…cych ustawionych zmiennych:\n" #: src/variable.c:1756 msgid "" "\n" "# Variables\n" msgstr "" "\n" "# Zmienne\n" #: src/variable.c:1760 msgid "" "\n" "# Pattern-specific Variable Values" msgstr "" "\n" "# WartoÅ›ci zmiennych dla wzorca" #: src/variable.c:1774 msgid "" "\n" "# No pattern-specific variable values." msgstr "" "\n" "# Brak wartoÅ›ci zmiennych dla wzorca." #: src/variable.c:1776 #, c-format msgid "" "\n" "# %u pattern-specific variable values" msgstr "" "\n" "# %u wartoÅ›ci zmiennych dla wzorca" #: src/variable.h:229 #, c-format msgid "warning: undefined variable '%.*s'" msgstr "uwaga: niezdefiniowana zmienna '%.*s'" #: src/vmsfunctions.c:91 #, c-format msgid "sys$search() failed with %d\n" msgstr "sys$search() nie powiodÅ‚o siÄ™ - %d\n" #: src/vmsjobs.c:244 #, 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" #: src/vmsjobs.c:681 #, c-format msgid "BUILTIN CD %s\n" msgstr "WBUDOWANE CD %s\n" #: src/vmsjobs.c:1224 #, c-format msgid "DCL: %s\n" msgstr "DCL: %s\n" #: src/vmsjobs.c:1284 #, c-format msgid "Append output to %s\n" msgstr "Dołączanie wyjÅ›cia do %s\n" #: src/vmsjobs.c:1309 #, c-format msgid "Append %.*s and cleanup\n" msgstr "Dołączanie %.*s i czyszczenie\n" #: src/vmsjobs.c:1322 #, c-format msgid "Executing %s instead\n" msgstr "Zamiast tego wykonywanie %s\n" #: src/vpath.c:603 msgid "" "\n" "# VPATH Search Paths\n" msgstr "" "\n" "# Åšcieżki przeszukiwania VPATH\n" #: src/vpath.c:620 msgid "# No 'vpath' search paths." msgstr "# Brak Å›cieżek przeszukiwania 'vpath'" #: src/vpath.c:622 #, c-format msgid "" "\n" "# %u 'vpath' search paths.\n" msgstr "" "\n" "# %u Å›cieżek przeszukiwania 'vpath'.\n" #: src/vpath.c:625 msgid "" "\n" "# No general ('VPATH' variable) search path." msgstr "" "\n" "# Brak ogólnej (zmienna 'VPATH') Å›cieżki przeszukiwania." #: src/vpath.c:631 msgid "" "\n" "# General ('VPATH' variable) search path:\n" "# " msgstr "" "\n" "# Ogólna (zmienna 'VPATH') Å›cieżka przeszukiwania:\n" "# " #: src/w32/w32os.c:44 #, c-format msgid "Jobserver slots limited to %d\n" msgstr "Pojemność serwera zadaÅ„ ograniczona do %d\n" #: src/w32/w32os.c:60 #, c-format msgid "creating jobserver semaphore: (Error %ld: %s)" msgstr "tworzenie semafora serwera zadaÅ„: (Błąd %ld: %s)" #: src/w32/w32os.c:79 #, 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)" #: src/w32/w32os.c:82 #, c-format msgid "Jobserver client (semaphore %s)\n" msgstr "Klient serwera zadaÅ„ (semafor %s)\n" #: src/w32/w32os.c:123 #, c-format msgid "release jobserver semaphore: (Error %ld: %s)" msgstr "zwalnianie semafora serwera zadaÅ„: (Błąd %ld: %s)" #: src/w32/w32os.c:194 #, c-format msgid "semaphore or child process wait: (Error %ld: %s)" msgstr "oczekiwanie na semafor lub proces potomny: (Błąd %ld: %s)" make-4.3/po/fr.po0000644000175000017500000021036313611136530010607 00000000000000# Messages français pour make. # Copyright © 2010 Free Software Foundation, Inc. # This file is distributed under the same license as the make package. # # 30-juillet-2001, n'avons plus de nouvelle de Marc depuis 5 janvier 1997 # Marc Baudoin , Frédéric Liné , 1996. # Michel Robitaille , 1996-2006 # Christophe Combelles , 2009, 2010 # Kévin Raymond , 2012-2016, 2018 # msgid "" msgstr "" "Project-Id-Version: GNU make 4.2.1\n" "Report-Msgid-Bugs-To: bug-make@gnu.org\n" "POT-Creation-Date: 2020-01-19 15:34-0500\n" "PO-Revision-Date: 2018-08-28 17:59+0200\n" "Last-Translator: Kévin Raymond \n" "Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: Poedit 2.1.1\n" #: src/ar.c:46 #, c-format msgid "attempt to use unsupported feature: '%s'" msgstr "tentative d'utiliser une fonctionnalité non prise en charge : « %s »" #: src/ar.c:123 #, c-format msgid "touch archive member is not available on VMS" msgstr "impossible de modifier la date d'un membre d'une archive sur VMS" #: src/ar.c:147 #, c-format msgid "touch: Archive '%s' does not exist" msgstr "touch : l'archive « %s » n'existe pas" #: src/ar.c:150 #, c-format msgid "touch: '%s' is not a valid archive" msgstr "touch : « %s » n'est pas une archive valide" #: src/ar.c:157 #, c-format msgid "touch: Member '%s' does not exist in '%s'" msgstr "touch : le membre « %s » n'existe pas dans « %s »" #: src/ar.c:164 #, c-format msgid "touch: Bad return code from ar_member_touch on '%s'" msgstr "touch : mauvais code de retour de ar_member_touch pour « %s »" #: src/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" #: src/arscan.c:236 #, c-format msgid "lbr$ini_control() failed with status = %d" msgstr "lbr$ini_control() a échoué avec un code = %d" #: src/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 statut du " "membre « %d »" #: src/arscan.c:944 #, c-format msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n" msgstr "Membre `%s'%s : %ld octets à %ld (%ld).\n" #: src/arscan.c:945 msgid " (name might be truncated)" msgstr " (le nom peut être tronqué)" #: src/arscan.c:947 #, c-format msgid " Date %s" msgstr " Date %s" #: src/arscan.c:948 #, c-format msgid " uid = %d, gid = %d, mode = 0%o.\n" msgstr " uid = %d, gid = %d, mode = 0%o.\n" #: src/commands.c:403 #, c-format msgid "Recipe has too many lines (%ud)" msgstr "La recette contient trop de lignes (%ud)" #: src/commands.c:504 msgid "*** Break.\n" msgstr "*** Arrêt.\n" #: src/commands.c:628 #, 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é" #: src/commands.c:632 #, 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é" #: src/commands.c:646 #, c-format msgid "*** [%s] Deleting file '%s'" msgstr "*** [%s] Suppression du fichier « %s »" #: src/commands.c:648 #, c-format msgid "*** Deleting file '%s'" msgstr "*** Suppression du fichier « %s »" #: src/commands.c:684 msgid "# recipe to execute" msgstr "# recette à exécuter" #: src/commands.c:687 msgid " (built-in):" msgstr " (commande interne) :" #: src/commands.c:689 #, c-format msgid " (from '%s', line %lu):\n" msgstr " (de « %s », ligne %lu) : \n" #: src/dir.c:1073 msgid "" "\n" "# Directories\n" msgstr "" "\n" "# Répertoires\n" #: src/dir.c:1085 #, c-format msgid "# %s: could not be stat'd.\n" msgstr "# %s: « stat » impossible.\n" #: src/dir.c:1089 msgid "# %s (key %s, mtime %I64u): could not be opened.\n" msgstr "# %s (clé %s, mtime %I64u) : ouverture impossible.\n" #: src/dir.c:1094 #, 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" #: src/dir.c:1099 #, c-format msgid "# %s (device %ld, inode %ld): could not be opened.\n" msgstr "# %s (périphérique %ld, inode %ld) : ouverture impossible.\n" #: src/dir.c:1126 msgid "# %s (key %s, mtime %I64u): " msgstr "# %s (clé %s, mtime %I64u) : " #: src/dir.c:1131 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): " msgstr "# %s (périphérique %d, inode [%d,%d,%d]) : " #: src/dir.c:1136 #, c-format msgid "# %s (device %ld, inode %ld): " msgstr "# %s (périphérique %ld, inode %ld) : " #: src/dir.c:1142 src/dir.c:1163 msgid "No" msgstr "Aucun" #: src/dir.c:1145 src/dir.c:1166 msgid " files, " msgstr " fichier(s), " #: src/dir.c:1147 src/dir.c:1168 msgid "no" msgstr "aucune" #: src/dir.c:1150 msgid " impossibilities" msgstr " impossibilité(s)" #: src/dir.c:1154 msgid " so far." msgstr " jusqu'ici." #: src/dir.c:1171 #, c-format msgid " impossibilities in %lu directories.\n" msgstr " impossibilités dans %lu répertoires.\n" #: src/expand.c:125 #, c-format msgid "Recursive variable '%s' references itself (eventually)" msgstr "La variable récursive « %s » se référence elle-même (à la fin)" #: src/expand.c:271 #, c-format msgid "unterminated variable reference" msgstr "référence incomplète à une variable" #: src/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," #: src/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," #: src/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 »." #: src/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 »." #: src/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 »" #: src/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 »" #: src/file.c:408 #, c-format msgid "*** Deleting intermediate file '%s'" msgstr "*** Suppression du fichier intermédiaire « %s »" #: src/file.c:412 #, c-format msgid "Removing intermediate files...\n" msgstr "Suppression des fichiers intermédiaires...\n" #: src/file.c:872 msgid "Current time" msgstr "Heure actuelle" #: src/file.c:876 #, c-format msgid "%s: Timestamp out of range; substituting %s" msgstr "%s : horodatage hors limite ; remplacement par %s" #: src/file.c:1016 msgid "# Not a target:" msgstr "# Pas une cible :" #: src/file.c:1021 msgid "# Precious file (prerequisite of .PRECIOUS)." msgstr "# Fichier précieux (dépendance de .PRECIOUS)." #: src/file.c:1023 msgid "# Phony target (prerequisite of .PHONY)." msgstr "# Cible factice (dépendance de .PHONY)." #: src/file.c:1025 msgid "# Command line target." msgstr "# Cible de la ligne de commande." #: src/file.c:1027 msgid "# A default, MAKEFILES, or -include/sinclude makefile." msgstr "# Une valeur par défaut, MAKEFILES ou -include/sinclude makefile." #: src/file.c:1029 msgid "# Builtin rule" msgstr "# Pas de règle interne" #: src/file.c:1031 msgid "# Implicit rule search has been done." msgstr "# La recherche de règle implicite a été effectuée." #: src/file.c:1032 msgid "# Implicit rule search has not been done." msgstr "# La recherche de règle implicite n'a pas été effectuée." #: src/file.c:1034 #, c-format msgid "# Implicit/static pattern stem: '%s'\n" msgstr "# Préfixe de motif implicite ou statique : « %s »\n" #: src/file.c:1036 msgid "# File is an intermediate prerequisite." msgstr "# Le fichier est une dépendance intermédiaire." #: src/file.c:1040 msgid "# Also makes:" msgstr "# Fabrique également :" #: src/file.c:1046 msgid "# Modification time never checked." msgstr "# Heure de modification jamais vérifiée." #: src/file.c:1048 msgid "# File does not exist." msgstr "# Le fichier n'existe pas." #: src/file.c:1050 msgid "# File is very old." msgstr "# Le fichier est très ancien." #: src/file.c:1055 #, c-format msgid "# Last modified %s\n" msgstr "# Dernière modification %s\n" #: src/file.c:1058 msgid "# File has been updated." msgstr "# Le fichier a été mis à jour." #: src/file.c:1058 msgid "# File has not been updated." msgstr "# Le fichier n'a pas été mis à jour." #: src/file.c:1062 msgid "# Recipe currently running (THIS IS A BUG)." msgstr "# Recette en cours d'exécution (CECI EST UNE ANOMALIE)." #: src/file.c:1065 msgid "# Dependencies recipe running (THIS IS A BUG)." msgstr "" "# Recette de dépendances en cours d'exécution (CECI EST UNE ANOMALIE)." #: src/file.c:1074 msgid "# Successfully updated." msgstr "# Mise à jour réussie." #: src/file.c:1078 msgid "# Needs to be updated (-q is set)." msgstr "# À besoin d'être mis à jour (l'option -q est activée)." #: src/file.c:1081 msgid "# Failed to be updated." msgstr "# N'a pas pu être mis à jour." #: src/file.c:1086 msgid "# Invalid value in 'command_state' member!" msgstr "# Valeur non valable dans le membre « command_state » !" #: src/file.c:1105 msgid "" "\n" "# Files" msgstr "" "\n" "# Fichiers" #: src/file.c:1109 msgid "" "\n" "# files hash-table stats:\n" "# " msgstr "" "\n" "# stats des tables de hachage des fichiers :\n" "# " #: src/file.c:1119 #, c-format msgid "%s: Field '%s' not cached: %s" msgstr "%s : le champ « %s » n'est pas en cache : %s" #: src/function.c:794 msgid "non-numeric first argument to 'word' function" msgstr "le premier argument de la fonction « word » doit être numérique" #: src/function.c:799 #, c-format msgid "first argument to 'word' function must be greater than 0" msgstr "le premier argument de la fonction « word » doit être supérieur à 0" #: src/function.c:819 msgid "non-numeric first argument to 'wordlist' function" msgstr "le premier argument de la fonction « wordlist » doit être numérique" #: src/function.c:821 msgid "non-numeric second argument to 'wordlist' function" msgstr "le deuxième argument de la fonction « wordlist » doit être numérique" #: src/function.c:1533 #, c-format msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n" msgstr "windows32_openpipe : DuplicateHandle(In) a échoué (e=%ld)\n" #: src/function.c:1557 #, c-format msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n" msgstr "windows32_openpipe : DuplicateHandle(Err) a échoué (e=%ld)\n" #: src/function.c:1564 #, c-format msgid "CreatePipe() failed (e=%ld)\n" msgstr "CreatePipe() a échoué (e=%ld)\n" #: src/function.c:1572 #, c-format msgid "windows32_openpipe(): process_init_fd() failed\n" msgstr "windows32_openpipe() : process_init_fd() a échoué\n" #: src/function.c:1857 #, c-format msgid "Cleaning up temporary batch file %s\n" msgstr "Nettoyage du fichier de commandes temporaire %s\n" #: src/function.c:2230 src/function.c:2255 #, c-format msgid "file: missing filename" msgstr "file : fichier manquant" #: src/function.c:2234 src/function.c:2265 #, c-format msgid "open: %s: %s" msgstr "open : %s : %s" #: src/function.c:2242 #, c-format msgid "write: %s: %s" msgstr "write : %s : %s" #: src/function.c:2245 src/function.c:2282 #, c-format msgid "close: %s: %s" msgstr "close : %s : %s" #: src/function.c:2258 #, c-format msgid "file: too many arguments" msgstr "file : trop d'arguments" #: src/function.c:2277 #, c-format msgid "read: %s: %s" msgstr "read : %s : %s" #: src/function.c:2290 #, c-format msgid "file: invalid file operation: %s" msgstr "file : opération invalide : %s" #: src/function.c:2405 #, c-format msgid "insufficient number of arguments (%d) to function '%s'" msgstr "nombre d'arguments insuffisant (%d) pour la fonction « %s »" #: src/function.c:2417 #, c-format msgid "unimplemented on this platform: function '%s'" msgstr "non implémenté sur cette plateforme : fonction « %s »" #: src/function.c:2483 #, c-format msgid "unterminated call to function '%s': missing '%c'" msgstr "appel à la fonction « %s » non terminé : « %c » manquant" #: src/function.c:2667 #, c-format msgid "Empty function name" msgstr "Nom de fonction absent" #: src/function.c:2669 #, c-format msgid "Invalid function name: %s" msgstr "Nom de fonction invalide : %s" #: src/function.c:2671 #, c-format msgid "Function name too long: %s" msgstr "Nom de fonction trop long : %s" #: src/function.c:2674 #, c-format msgid "Invalid minimum argument count (%u) for function %s" msgstr "Nombre d'arguments insuffisant (%u) pour la fonction %s" #: src/function.c:2677 #, c-format msgid "Invalid maximum argument count (%u) for function %s" msgstr "Nombre d'arguments excessif (%u) pour la fonction %s" #: src/getopt.c:659 #, c-format msgid "%s: option '%s' is ambiguous\n" msgstr "%s : l'option « %s » est ambiguë\n" #: src/getopt.c:683 #, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s : l'option « --%s » ne prend pas d'argument\n" #: src/getopt.c:688 #, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s : l'option « %c%s » ne prend pas d'argument\n" #: src/getopt.c:705 src/getopt.c:878 #, c-format msgid "%s: option '%s' requires an argument\n" msgstr "%s : l'option « %s » nécessite un argument\n" #: src/getopt.c:734 #, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s : option non reconnue « --%s »\n" #: src/getopt.c:738 #, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s : option non reconnue « %c%s »\n" #: src/getopt.c:764 #, c-format msgid "%s: illegal option -- %c\n" msgstr "%s : option non admise -- %c\n" #: src/getopt.c:767 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s : option incorrecte -- %c\n" #: src/getopt.c:797 src/getopt.c:927 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s : l'option nécessite un argument -- %c\n" #: src/getopt.c:844 #, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s : l'option « -W %s » est ambiguë\n" #: src/getopt.c:862 #, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s : l'option « -W %s » ne prend pas d'argument\n" #: src/guile.c:58 #, c-format msgid "guile: Expanding '%s'\n" msgstr "guile : expansion de « %s »\n" #: src/guile.c:74 #, c-format msgid "guile: Evaluating '%s'\n" msgstr "guile : évaluation de « %s »\n" #: src/hash.c:50 #, c-format msgid "can't allocate %lu bytes for hash table: memory exhausted" msgstr "" "impossible d'allouer %lu octets pour la table de hachage : mémoire épuisée" #: src/hash.c:280 #, fuzzy, c-format msgid "Load=%lu/%lu=%.0f%%, " msgstr "Charge=%ld/%ld=%.0f%%, " #: src/hash.c:282 #, fuzzy, c-format msgid "Rehash=%u, " msgstr "Rehash=%d, " #: src/hash.c:283 #, fuzzy, c-format msgid "Collisions=%lu/%lu=%.0f%%" msgstr "Collisions=%ld/%ld=%.0f%%" #: src/implicit.c:38 #, c-format msgid "Looking for an implicit rule for '%s'.\n" msgstr "Recherche d'une règle implicite pour « %s ».\n" #: src/implicit.c:54 #, c-format msgid "Looking for archive-member implicit rule for '%s'.\n" msgstr "Recherche d'une règle implicite de membre d'archive pour « %s ».\n" #: src/implicit.c:311 #, c-format msgid "Avoiding implicit rule recursion.\n" msgstr "Évitement de récursion dans une règle implicite.\n" #: src/implicit.c:484 #, fuzzy, c-format msgid "Stem too long: '%s%.*s'.\n" msgstr "Motif trop long : « %.*s ».\n" #: src/implicit.c:490 #, c-format msgid "Trying pattern rule with stem '%.*s'.\n" msgstr "Essai du motif avec « %.*s » comme radical.\n" #: src/implicit.c:717 #, c-format msgid "Rejecting impossible rule prerequisite '%s'.\n" msgstr "Rejet d'une dépendance de règle impossible « %s ».\n" #: src/implicit.c:718 #, c-format msgid "Rejecting impossible implicit prerequisite '%s'.\n" msgstr "Rejet d'une dépendance implicite impossible « %s ».\n" #: src/implicit.c:732 #, c-format msgid "Trying rule prerequisite '%s'.\n" msgstr "Essai de la dépendance de règle « %s ».\n" #: src/implicit.c:733 #, c-format msgid "Trying implicit prerequisite '%s'.\n" msgstr "Essai de la dépendance implicite « %s ».\n" #: src/implicit.c:772 #, c-format msgid "Found prerequisite '%s' as VPATH '%s'\n" msgstr "Dépendance trouvée « %s » comme VPATH « %s »\n" #: src/implicit.c:786 #, c-format msgid "Looking for a rule with intermediate file '%s'.\n" msgstr "Recherche d'une règle contenant le fichier intermédaire « %s ».\n" #: src/job.c:370 msgid "Cannot create a temporary file\n" msgstr "Impossible de créer un fichier temporaire\n" #: src/job.c:548 msgid " (core dumped)" msgstr " (core dump créé)" #: src/job.c:553 msgid " (ignored)" msgstr " (ignorée)" #: src/job.c:557 src/job.c:1892 msgid "" msgstr "" #: src/job.c:573 #, c-format msgid "%s[%s: %s] Error %d%s" msgstr "%s[%s : %s] Erreur %d%s" #: src/job.c:662 #, c-format msgid "*** Waiting for unfinished jobs...." msgstr "*** Attente des tâches non terminées...." #: src/job.c:704 #, c-format msgid "Live child %p (%s) PID %s %s\n" msgstr "Processus fils actif %p (%s) PID %s %s\n" #: src/job.c:706 src/job.c:900 src/job.c:1072 src/job.c:1644 #, c-format msgid " (remote)" msgstr " (distant)" #: src/job.c:898 #, c-format msgid "Reaping winning child %p PID %s %s\n" msgstr "Récolte du processus fils gagnant %p PID %s %s\n" #: src/job.c:899 #, c-format msgid "Reaping losing child %p PID %s %s\n" msgstr "Récolte du processus fils perdant %p PID %s %s\n" #: src/job.c:950 #, c-format msgid "Cleaning up temp batch file %s\n" msgstr "Nettoyage du fichier de commande temporaire %s\n" #: src/job.c:956 #, 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" #: src/job.c:1071 #, 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" #: src/job.c:1120 #, c-format msgid "Released token for child %p (%s).\n" msgstr "Jeton relâché pour le processus fils %p (%s).\n" #: src/job.c:1575 src/job.c:2487 #, 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" #: src/job.c:1579 src/job.c:2491 #, c-format msgid "" "\n" "Counted %d args in failed launch\n" msgstr "" "\n" "%d arguments comptés lors du lancement échoué\n" #: src/job.c:1642 #, 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" #: src/job.c:1875 #, c-format msgid "Obtained token for child %p (%s).\n" msgstr "Jeton obtenu pour le processus fils %p (%s).\n" #: src/job.c:1902 #, c-format msgid "%s: target '%s' does not exist" msgstr "%s : la cible « %s » n'existe pas" #: src/job.c:1905 #, c-format msgid "%s: update target '%s' due to: %s" msgstr "%s : mise à jour de la cible « %s » causée par : %s" #: src/job.c:2108 #, c-format msgid "cannot enforce load limits on this operating system" msgstr "" "impossible d'imposer des limites de charge sur ce système d'exploitation" #: src/job.c:2110 msgid "cannot enforce load limit: " msgstr "impossible d'imposer des limites de charge : " #: src/job.c:2200 #, c-format msgid "no more file handles: could not duplicate stdin\n" msgstr "" "plus d'identificateur de fichier disponible : impossible de dupliquer stdin\n" #: src/job.c:2212 #, c-format msgid "no more file handles: could not duplicate stdout\n" msgstr "" "plus d'identificateur de fichier disponible : impossible de dupliquer " "stdout\n" #: src/job.c:2226 #, c-format msgid "no more file handles: could not duplicate stderr\n" msgstr "" "plus d'identificateurs de fichier disponible : impossible de dupliquer " "stderr\n" #: src/job.c:2241 #, c-format msgid "Could not restore stdin\n" msgstr "Impossible de restaurer stdin\n" #: src/job.c:2249 #, c-format msgid "Could not restore stdout\n" msgstr "Impossible de restaurer stdout\n" #: src/job.c:2257 #, c-format msgid "Could not restore stderr\n" msgstr "Impossible de restaurer stderr\n" #: src/job.c:2520 #, 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" #: src/job.c:2623 #, c-format msgid "spawnvpe: environment space might be exhausted" msgstr "spawnvpe : l'espace d'environnement est peut-être épuisé" #: src/job.c:2862 #, c-format msgid "$SHELL changed (was '%s', now '%s')\n" msgstr "$SHELL a été modifié (de « %s » à « %s »)\n" #: src/job.c:3300 src/job.c:3485 #, c-format msgid "Creating temporary batch file %s\n" msgstr "Création d'un fichier de commande temporaire %s\n" #: src/job.c:3308 #, c-format msgid "" "Batch file contents:\n" "\t@echo off\n" msgstr "" "Contenu du fichier de commande :\n" "\t@echo off\n" #: src/job.c:3497 #, c-format msgid "" "Batch file contents:%s\n" "\t%s\n" msgstr "" "Contenu du fichier Batch :%s\n" "\t%s\n" #: src/job.c:3605 #, c-format msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n" msgstr "" "%s (ligne %d) Mauvais contexte du shell (!unixy && !batch_mode_shell)\n" #: src/load.c:60 #, c-format msgid "Failed to open global symbol table: %s" msgstr "Echec de l'ouverture de la table des symboles générale : %s" #: src/load.c:97 #, c-format msgid "Loaded object %s is not declared to be GPL compatible" msgstr "L'objet chargé « %s » n'est pas déclaré compatible avec la GPL" #: src/load.c:104 #, c-format msgid "Failed to load symbol %s from %s: %s" msgstr "Echec du chargement du symbole %s à partir de %s : %s" #: src/load.c:149 #, c-format msgid "Empty symbol name for load: %s" msgstr "Nom du symbole absent pour l'opération « load » : %s" #: src/load.c:204 #, c-format msgid "Loading symbol %s from %s\n" msgstr "Chargement du symbole %s à partir de %s\n" #: src/load.c:256 #, c-format msgid "The 'load' operation is not supported on this platform." msgstr "" "Les opérations « load » ne sont pas prises en charge sur cette plateforme." #: src/main.c:335 msgid "Options:\n" msgstr "Options :\n" #: src/main.c:336 msgid " -b, -m Ignored for compatibility.\n" msgstr " -b, -m Ignoré pour compatibilité.\n" #: src/main.c:338 msgid " -B, --always-make Unconditionally make all targets.\n" msgstr "" " -B, --always-make Fabriquer toutes les cibles sans condition.\n" #: src/main.c:340 msgid "" " -C DIRECTORY, --directory=DIRECTORY\n" " Change to DIRECTORY before doing anything.\n" msgstr "" " -C RÉPERTOIRE, --directory=RÉPERTOIRE\n" " Se placer dans le RÉPERTOIRE avant toute " "action.\n" #: src/main.c:343 msgid " -d Print lots of debugging information.\n" msgstr "" " -d Afficher beaucoup d'informations de débogage.\n" #: src/main.c:345 msgid "" " --debug[=FLAGS] Print various types of debugging information.\n" msgstr "" " --debug[=FLAGS] Afficher divers types d'informations de " "débogage.\n" #: src/main.c:347 msgid "" " -e, --environment-overrides\n" " Environment variables override makefiles.\n" msgstr "" " -e, --environment-overrides\n" " Les variables d'environment sont prioritaires " "sur les makefiles.\n" #: src/main.c:350 #, fuzzy msgid "" " -E STRING, --eval=STRING Evaluate STRING as a makefile statement.\n" msgstr "" " --eval=CHAINE Évaluer la CHAÃŽNE comme une instruction de " "makefile.\n" #: src/main.c:352 msgid "" " -f FILE, --file=FILE, --makefile=FILE\n" " Read FILE as a makefile.\n" msgstr "" " -f FICHIER, --file=FICHIER, --makefile=FICHIER\n" " Lire le FICHIER comme un makefile.\n" #: src/main.c:355 msgid " -h, --help Print this message and exit.\n" msgstr " -h, --help Afficher ce message et quitter.\n" #: src/main.c:357 msgid " -i, --ignore-errors Ignore errors from recipes.\n" msgstr "" " -i, --ignore-errors Ignorer les erreurs venant des recettes.\n" #: src/main.c:359 msgid "" " -I DIRECTORY, --include-dir=DIRECTORY\n" " Search DIRECTORY for included makefiles.\n" msgstr "" " -I RÉPERTOIRE, --include-dir=RÉPERTOIRE\n" " Chercher dans le RÉPERTOIRE les makefiles " "traités par inclusion.\n" #: src/main.c:362 msgid "" " -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no " "arg.\n" msgstr "" " -j [N], --jobs[=N] Autoriser N tâches simultanées ; nombre infini " "si utilisé sans argument.\n" #: src/main.c:364 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" #: src/main.c:366 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 pas lancer de tâches multiples à moins que " "la charge soit inférieure à N.\n" #: src/main.c:369 msgid "" " -L, --check-symlink-times Use the latest mtime between symlinks and " "target.\n" msgstr "" " -L, --check-symlink-times Utiliser le « mtime » le plus récent entre les " "liens symboliques et la cible.\n" #: src/main.c:371 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'exécuter aucune recette ; seulement les " "afficher.\n" #: src/main.c:374 msgid "" " -o FILE, --old-file=FILE, --assume-old=FILE\n" " Consider FILE to be very old and don't remake " "it.\n" msgstr "" " -o FICHIER, --old-file=FICHIER, --assume-old=FICHIER\n" " Considérer le FICHIER comme étant très ancien " "et ne pas le refabriquer.\n" #: src/main.c:377 msgid "" " -O[TYPE], --output-sync[=TYPE]\n" " Synchronize output of parallel jobs by TYPE.\n" msgstr "" " -O[TYPE], --output-sync[=TYPE]\n" " Synchronise la sortie des tâches parallèles " "par TYPE.\n" #: src/main.c:380 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" #: src/main.c:382 msgid "" " -q, --question Run no recipe; exit status says if up to " "date.\n" msgstr "" " -q, --question Ne pas exécuter de recette ; le code de sortie " "indique si la cible est à jour.\n" #: src/main.c:384 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" #: src/main.c:386 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" #: src/main.c:388 msgid " -s, --silent, --quiet Don't echo recipes.\n" msgstr " -s, --silent, --quiet Ne pas répéter les recettes.\n" #: src/main.c:390 #, fuzzy msgid " --no-silent Echo recipes (disable --silent mode).\n" msgstr "" " -q, --question Ne pas exécuter de recette ; le code de sortie " "indique si la cible est à jour.\n" #: src/main.c:392 msgid "" " -S, --no-keep-going, --stop\n" " Turns off -k.\n" msgstr "" " -S, --no-keep-going, --stop\n" " Désactiver -k.\n" #: src/main.c:395 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" #: src/main.c:397 msgid " --trace Print tracing information.\n" msgstr " --trace Afficher les traces mémoire.\n" #: src/main.c:399 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" #: src/main.c:401 msgid " -w, --print-directory Print the current directory.\n" msgstr " -w, --print-directory Afficher le répertoire courant.\n" #: src/main.c:403 msgid "" " --no-print-directory Turn off -w, even if it was turned on " "implicitly.\n" msgstr "" " --no-print-directory Désactiver l'option -w, même si elle a été " "activée implicitement.\n" #: src/main.c:405 msgid "" " -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n" " Consider FILE to be infinitely new.\n" msgstr "" " -W FICHIER, --what-if=FICHIER, --new-file=FICHIER, --assume-new=FICHIER\n" " Considérer le FICHIER comme étant toujours " "nouveau.\n" #: src/main.c:408 msgid "" " --warn-undefined-variables Warn when an undefined variable is " "referenced.\n" msgstr "" " --warn-undefined-variables Prévenir lorsqu'une variable non définie est " "référencée.\n" #: src/main.c:671 #, c-format msgid "empty string invalid as file name" msgstr "une chaîne vide n'est pas un nom de fichier valable" #: src/main.c:754 #, c-format msgid "unknown debug level specification '%s'" msgstr "niveau de débogage inconnu « %s »" #: src/main.c:794 #, c-format msgid "unknown output-sync type '%s'" msgstr "type de output-sync « %s » inconnu" #: src/main.c:849 #, 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" #: src/main.c:856 #, c-format msgid "" "\n" "Unhandled exception filter called from program %s\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" msgstr "" "\n" "Filtre d'exception non pris en charge appelé depuis le programme %s\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" #: src/main.c:864 #, 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" #: src/main.c:865 #, 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" #: src/main.c:941 src/main.c:956 #, c-format msgid "find_and_set_shell() setting default_shell = %s\n" msgstr "find_and_set_shell() définit default_shell = %s\n" #: src/main.c:1009 #, 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" #: src/main.c:1609 #, c-format 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." #: src/main.c:1617 #, fuzzy, c-format msgid "warning: -j%d forced in submake: resetting jobserver mode." msgstr "" "AVERTISSEMENT : -jN forcé dans un submake : désactivation du mode serveur de " "tâches." #: src/main.c:1781 #, c-format msgid "Makefile from standard input specified twice." msgstr "Makefile depuis l'entrée standard spécifié deux fois." #: src/main.c:1819 src/vmsjobs.c:1248 msgid "fopen (temporary file)" msgstr "fopen (fichier temporaire)" #: src/main.c:1825 msgid "fwrite (temporary file)" msgstr "fwrite (fichier temporaire)" #: src/main.c:2004 #, fuzzy, c-format msgid "warning: -j%d forced in makefile: resetting jobserver mode." msgstr "" "AVERTISSEMENT : -jN forcé dans un submake : désactivation du mode serveur de " "tâches." #: src/main.c:2068 #, c-format 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." #: src/main.c:2069 #, c-format msgid "Resetting to single job (-j1) mode." msgstr "On revient en mode monotâche (-j1)." #: src/main.c:2109 #, c-format msgid "Symbolic links not supported: disabling -L." msgstr "" "Les liens symboliques ne sont pas pris en charge : désactivation de -L." #: src/main.c:2190 #, c-format msgid "Updating makefiles....\n" msgstr "Mise à jour des makefiles....\n" #: src/main.c:2226 #, c-format msgid "Makefile '%s' might loop; not remaking it.\n" msgstr "Le makefile « %s » pourrait boucler ; on ne recommence pas.\n" #: src/main.c:2303 #, c-format msgid "Failed to remake makefile '%s'." msgstr "Échec de refabrication du makefile « %s »." #: src/main.c:2323 #, c-format msgid "Included makefile '%s' was not found." msgstr "Le makefile inclus « %s » est introuvable." #: src/main.c:2328 #, c-format msgid "Makefile '%s' was not found" msgstr "Le makefile « %s » est introuvable" #: src/main.c:2394 #, c-format msgid "Couldn't change back to original directory." msgstr "Impossible de revenir dans le répertoire d'origine." #: src/main.c:2402 #, c-format msgid "Re-executing[%u]:" msgstr "Réexécution[%u] :" #: src/main.c:2522 msgid "unlink (temporary file): " msgstr "unlink (fichier temporaire) :" #: src/main.c:2555 #, c-format msgid ".DEFAULT_GOAL contains more than one target" msgstr ".DEFAULT_GOAL contient plus d'une cible" #: src/main.c:2579 #, c-format msgid "No targets" msgstr "Pas de cible" #: src/main.c:2581 #, c-format msgid "No targets specified and no makefile found" msgstr "Pas de cible spécifiée et aucun makefile n'a été trouvé" #: src/main.c:2586 #, c-format msgid "Updating goal targets....\n" msgstr "Mise à jour des objectifs cibles....\n" #: src/main.c:2610 #, c-format msgid "warning: Clock skew detected. Your build may be incomplete." msgstr "" "AVERTISSEMENT : décalage d'horloge détecté. La construction peut être " "incomplète." #: src/main.c:2804 #, c-format msgid "Usage: %s [options] [target] ...\n" msgstr "Utilisation : %s [options] [cible] ...\n" #: src/main.c:2810 #, c-format msgid "" "\n" "This program built for %s\n" msgstr "" "\n" "Ce programme est construit pour %s\n" #: src/main.c:2812 #, c-format msgid "" "\n" "This program built for %s (%s)\n" msgstr "" "\n" "Ce programme est construit pour %s (%s)\n" #: src/main.c:2815 #, c-format msgid "Report bugs to \n" msgstr "Signaler les anomalies à .\n" #: src/main.c:2901 #, 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" #: src/main.c:2965 #, c-format msgid "the '-%c' option requires a positive integer argument" msgstr "l'option « -%c » prend en argument un entier positif" #: src/main.c:3363 #, c-format msgid "%sBuilt for %s\n" msgstr "%sConstruit pour %s\n" #: src/main.c:3365 #, c-format msgid "%sBuilt for %s (%s)\n" msgstr "%sConstruit pour %s (%s)\n" #: src/main.c:3376 #, c-format msgid "" "%sLicense GPLv3+: GNU GPL version 3 or later \n" "%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 "" "%sLicence GPLv3+ : GNU GPL version 3 ou ultérieure \n" "%sCeci est un logiciel libre : vous êtes autorisé à le modifier et à la " "redistribuer.\n" "%sIl ne comporte AUCUNE GARANTIE, dans la mesure de ce que permet la loi.\n" #: src/main.c:3397 #, c-format msgid "" "\n" "# Make data base, printed on %s" msgstr "" "\n" "# Base de données de Make, imprimée le %s" #: src/main.c:3407 #, c-format msgid "" "\n" "# Finished Make data base on %s\n" msgstr "" "\n" "# Base de données de Make terminée le %s\n" #: src/misc.c:643 #, 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" #: src/misc.c:664 msgid "Initialized access" msgstr "Accès initialisé" #: src/misc.c:743 msgid "User access" msgstr "Accès utilisateur" #: src/misc.c:791 msgid "Make access" msgstr "Accès de Make" #: src/misc.c:825 msgid "Child access" msgstr "Accès des fils" #: src/output.c:97 #, c-format msgid "%s: Entering an unknown directory\n" msgstr "%s : on entre dans un répertoire inconnu\n" #: src/output.c:99 #, c-format msgid "%s: Leaving an unknown directory\n" msgstr "%s : on quitte un répertoire inconnu\n" #: src/output.c:102 #, c-format msgid "%s: Entering directory '%s'\n" msgstr "%s : on entre dans le répertoire « %s »\n" #: src/output.c:104 #, c-format msgid "%s: Leaving directory '%s'\n" msgstr "%s : on quitte le répertoire « %s »\n" #: src/output.c:108 #, c-format msgid "%s[%u]: Entering an unknown directory\n" msgstr "%s[%u] : on entre dans un répertoire inconnu\n" #: src/output.c:110 #, c-format msgid "%s[%u]: Leaving an unknown directory\n" msgstr "%s[%u] : on quitte un répertoire inconnu\n" #: src/output.c:113 #, c-format msgid "%s[%u]: Entering directory '%s'\n" msgstr "%s[%u] : on entre dans le répertoire « %s »\n" #: src/output.c:115 #, c-format msgid "%s[%u]: Leaving directory '%s'\n" msgstr "%s[%u] : on quitte le répertoire « %s »\n" #: src/output.c:442 src/output.c:444 #, c-format msgid "write error: stdout" msgstr "erreur d'écriture : stdout" #: src/output.c:624 msgid ". Stop.\n" msgstr ". Arrêt.\n" #: src/output.c:658 #, c-format msgid "%s%s: %s" msgstr "%s%s : %s" #: src/output.c:667 #, c-format msgid "%s: %s" msgstr "%s : %s" #: src/output.h:62 #, c-format msgid "-O[TYPE] (--output-sync[=TYPE]) is not configured for this build." msgstr "" "-O[TYPE] (--output-sync[=TYPE]) n'est pas configuré pour cette construction." #: src/posixos.c:90 msgid "creating jobs pipe" msgstr "création d'un tube pour les tâches" #: src/posixos.c:98 src/posixos.c:251 msgid "duping jobs pipe" msgstr "duplication d'un tube pour les tâches" #: src/posixos.c:104 msgid "init jobserver pipe" msgstr "initialisation du tube du serveur de tâches" #: src/posixos.c:119 #, c-format msgid "internal error: invalid --jobserver-auth string '%s'" msgstr "erreur interne : chaîne --jobserver-auth incorrecte « %s »" #: src/posixos.c:122 #, c-format msgid "Jobserver client (fds %d,%d)\n" msgstr "client Jobserver (fds %d,%d)\n" #: src/posixos.c:138 msgid "jobserver pipeline" msgstr "pipeline du serveur de tâches" #: src/posixos.c:186 msgid "write jobserver" msgstr "écriture vers le serveur de tâches" #: src/posixos.c:300 #, c-format msgid "job server shut down" msgstr "" #: src/posixos.c:303 msgid "pselect jobs pipe" msgstr "pselect du tube de tâches" #: src/posixos.c:319 src/posixos.c:433 msgid "read jobs pipe" msgstr "lecture du tube des processus" #: src/read.c:181 #, c-format msgid "Reading makefiles...\n" msgstr "Lecture des makefiles...\n" #: src/read.c:336 #, c-format msgid "Reading makefile '%s'" msgstr "Lecture du makefile « %s »" #: src/read.c:338 #, c-format msgid " (no default goal)" msgstr " (pas d'objectif par défaut)" #: src/read.c:340 #, c-format msgid " (search path)" msgstr " (chemin de recherche)" #: src/read.c:342 #, c-format msgid " (don't care)" msgstr " (peu importe)" #: src/read.c:344 #, c-format msgid " (no ~ expansion)" msgstr " (pas de remplacement du ~)" #: src/read.c:655 #, c-format msgid "Skipping UTF-8 BOM in makefile '%s'\n" msgstr "On saute les BOM UTF-8 du makefile « %s »\n" #: src/read.c:658 #, c-format msgid "Skipping UTF-8 BOM in makefile buffer\n" msgstr "On saute les BOM UTF-8 du tampon makefile\n" #: src/read.c:787 #, c-format msgid "invalid syntax in conditional" msgstr "syntaxe incorrecte dans la condition" #: src/read.c:960 #, c-format msgid "%s: failed to load" msgstr "%s : echec du chargement" #: src/read.c:986 #, c-format msgid "recipe commences before first target" msgstr "La recette commence avant la première cible" #: src/read.c:1035 #, c-format msgid "missing rule before recipe" msgstr "règle manquante avant la recette" #: src/read.c:1136 #, c-format msgid "missing separator (did you mean TAB instead of 8 spaces?)" msgstr "séparateur manquant (vouliez-vous dire TAB au lieu des 8 espaces ?)" #: src/read.c:1138 #, c-format msgid "missing separator" msgstr "séparateur manquant" #: src/read.c:1283 #, c-format msgid "missing target pattern" msgstr "motif de cible manquant" #: src/read.c:1285 #, c-format msgid "multiple target patterns" msgstr "motifs de cible multiples" #: src/read.c:1289 #, c-format msgid "target pattern contains no '%%'" msgstr "le motif de cible ne contient pas « %% »" #: src/read.c:1404 #, c-format msgid "missing 'endif'" msgstr "« endif » manquant" #: src/read.c:1443 src/read.c:1488 src/variable.c:1600 #, c-format msgid "empty variable name" msgstr "nom de variable vide" #: src/read.c:1478 #, c-format msgid "extraneous text after 'define' directive" msgstr "texte superflu après la directive « define »" #: src/read.c:1503 #, c-format msgid "missing 'endef', unterminated 'define'" msgstr "« endef » manquant, « define » non terminé" #: src/read.c:1531 #, c-format msgid "extraneous text after 'endef' directive" msgstr "texte superflu après la directive « endef »" #: src/read.c:1603 #, c-format msgid "extraneous text after '%s' directive" msgstr "texte superflu après la directive « %s »" #: src/read.c:1604 #, c-format msgid "extraneous '%s'" msgstr "« %s » superflu" #: src/read.c:1632 #, c-format msgid "only one 'else' per conditional" msgstr "un seul « else » par condition" #: src/read.c:1908 #, c-format msgid "Malformed target-specific variable definition" msgstr "Définition malformée de variable spécifique à une cible" #: src/read.c:1968 #, c-format msgid "prerequisites cannot be defined in recipes" msgstr "les prérequis ne peuvent être définis dans des recettes" #: src/read.c:1986 #, c-format msgid "grouped targets must provide a recipe" msgstr "" #: src/read.c:2029 #, c-format msgid "mixed implicit and static pattern rules" msgstr "mélange de règles implicites et statiques pour le motif" #: src/read.c:2052 #, c-format msgid "mixed implicit and normal rules" msgstr "mélange de règles implicites et normales" #: src/read.c:2107 #, c-format msgid "target '%s' doesn't match the target pattern" msgstr "la cible « %s » ne correspond pas au motif de cible" #: src/read.c:2122 src/read.c:2168 #, c-format msgid "target file '%s' has both : and :: entries" msgstr "le fichier cible « %s » possède à la fois des entrées : et ::" #: src/read.c:2128 #, 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." #: src/read.c:2138 #, c-format msgid "warning: overriding recipe for target '%s'" msgstr "avertissement : surchargement de la recette pour la cible « %s »" #: src/read.c:2141 #, c-format msgid "warning: ignoring old recipe for target '%s'" msgstr "avertissement : ancienne recette ignorée pour la cible « %s »" #: src/read.c:2254 #, c-format msgid "*** mixed implicit and normal rules: deprecated syntax" msgstr "*** mélange de règles implicites et normales : syntaxe obsolète" #: src/read.c:2271 #, fuzzy, c-format msgid "warning: overriding group membership for target '%s'" msgstr "avertissement : surchargement de la recette pour la cible « %s »" #: src/read.c:2636 #, c-format msgid "warning: NUL character seen; rest of line ignored" msgstr "" "AVERTISSEMENT : caractère NUL détecté ; le reste de la ligne est ignoré" #: src/remake.c:226 #, c-format msgid "Nothing to be done for '%s'." msgstr "rien à faire pour « %s »." #: src/remake.c:227 #, c-format msgid "'%s' is up to date." msgstr "« %s » est à jour." #: src/remake.c:323 #, c-format msgid "Pruning file '%s'.\n" msgstr "Élagage du fichier « %s ».\n" #: src/remake.c:389 #, 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" #: src/remake.c:399 #, c-format msgid "%sNo rule to make target '%s'%s" msgstr "%sAucune règle pour fabriquer la cible « %s »%s" #: src/remake.c:425 #, c-format msgid "Considering target file '%s'.\n" msgstr "Étude du fichier cible « %s ».\n" #: src/remake.c:432 #, 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" #: src/remake.c:444 #, c-format msgid "File '%s' was considered already.\n" msgstr "Le fichier « %s » a déjà été étudié.\n" #: src/remake.c:454 #, c-format msgid "Still updating file '%s'.\n" msgstr "Mise à jour du fichier « %s » en cours.\n" #: src/remake.c:457 #, c-format msgid "Finished updating file '%s'.\n" msgstr "Fin de la mise à jour du fichier « %s ».\n" #: src/remake.c:486 #, c-format msgid "File '%s' does not exist.\n" msgstr "Le fichier « %s » n'existe pas.\n" #: src/remake.c:494 #, c-format msgid "" "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp" msgstr "" "*** Avertissement : le fichier .LOW_RESOLUTION_TIME « %s » a un horodatage à " "haute résolution" #: src/remake.c:507 src/remake.c:1039 #, c-format msgid "Found an implicit rule for '%s'.\n" msgstr "Règle implicite trouvée pour « %s ».\n" #: src/remake.c:509 src/remake.c:1041 #, c-format msgid "No implicit rule found for '%s'.\n" msgstr "Pas de règle implicite trouvée pour « %s ».\n" #: src/remake.c:515 #, c-format msgid "Using default recipe for '%s'.\n" msgstr "Utilisation de la recette par défaut pour « %s ».\n" #: src/remake.c:549 src/remake.c:1088 #, c-format msgid "Circular %s <- %s dependency dropped." msgstr "Dépendance circulaire %s <- %s abandonnée." #: src/remake.c:674 #, c-format msgid "Finished prerequisites of target file '%s'.\n" msgstr "Fin des dépendances du fichier cible « %s ».\n" #: src/remake.c:680 #, c-format msgid "The prerequisites of '%s' are being made.\n" msgstr "Les dépendances de « %s » sont en cours de fabrication.\n" #: src/remake.c:694 #, c-format msgid "Giving up on target file '%s'.\n" msgstr "Abandon du fichier cible « %s ».\n" #: src/remake.c:699 #, c-format msgid "Target '%s' not remade because of errors." msgstr "La cible « %s » n'a pas été refabriquée à cause d'erreurs." #: src/remake.c:751 #, c-format msgid "Prerequisite '%s' is order-only for target '%s'.\n" msgstr "La dépendance « %s » ne commande que la cible « %s ».\n" #: src/remake.c:756 #, 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" #: src/remake.c:761 #, 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" #: src/remake.c:764 #, c-format msgid "Prerequisite '%s' is older than target '%s'.\n" msgstr "uLa dépendance « %s » est plus ancienne que la cible « %s ».\n" #: src/remake.c:782 #, 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" #: src/remake.c:789 #, 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" #: src/remake.c:794 #, c-format msgid "Making '%s' due to always-make flag.\n" msgstr "Fabrication de « %s » à cause de l'indicateur « always-make ».\n" #: src/remake.c:802 #, c-format msgid "No need to remake target '%s'" msgstr "Inutile de refabriquer la cible « %s »" #: src/remake.c:804 #, c-format msgid "; using VPATH name '%s'" msgstr " ; utilisation du nom VPATH « %s »" #: src/remake.c:824 #, c-format msgid "Must remake target '%s'.\n" msgstr "Il faut refabriquer la cible « %s ».\n" #: src/remake.c:830 #, c-format msgid " Ignoring VPATH name '%s'.\n" msgstr " On ignore le nom VPATH « %s ».\n" #: src/remake.c:839 #, c-format msgid "Recipe of '%s' is being run.\n" msgstr "La recette de « %s » est en cours d'exécution.\n" #: src/remake.c:846 #, c-format msgid "Failed to remake target file '%s'.\n" msgstr "Échec de refabrication du fichier cible « %s ».\n" #: src/remake.c:849 #, c-format msgid "Successfully remade target file '%s'.\n" msgstr "Refabrication réussie du fichier cible « %s ».\n" #: src/remake.c:852 #, 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" #: src/remake.c:1047 #, c-format msgid "Using default commands for '%s'.\n" msgstr "Utilisation des commandes par défaut pour « %s ».\n" #: src/remake.c:1422 #, 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" #: src/remake.c:1662 #, c-format msgid ".LIBPATTERNS element '%s' is not a pattern" msgstr "l'élément « %s » de .LIBPATTERNS n'est pas un motif" #: src/remote-cstms.c:122 #, c-format msgid "Customs won't export: %s\n" msgstr "« customs » n'exportera pas : %s\n" #: src/rule.c:289 #, c-format msgid "warning: ignoring prerequisites on suffix rule definition" msgstr "" #: src/rule.c:530 msgid "" "\n" "# Implicit Rules" msgstr "" "\n" "# Règles implicites" #: src/rule.c:545 msgid "" "\n" "# No implicit rules." msgstr "" "\n" "# Pas de règle implicite." #: src/rule.c:548 #, fuzzy, c-format msgid "" "\n" "# %u implicit rules, %u (%.1f%%) terminal." msgstr "" "\n" "# %u règles implicites, %u" #: src/rule.c:557 #, c-format msgid "BUG: num_pattern_rules is wrong! %u != %u" msgstr "ANOMALIE : num_pattern_rules est faux ! %u != %u" #: src/signame.c:84 msgid "unknown signal" msgstr "signal inconnu" #: src/signame.c:92 msgid "Hangup" msgstr "Raccroche" #: src/signame.c:95 msgid "Interrupt" msgstr "Interrompt" #: src/signame.c:98 msgid "Quit" msgstr "Quitte" #: src/signame.c:101 msgid "Illegal Instruction" msgstr "Instruction non admise" #: src/signame.c:104 msgid "Trace/breakpoint trap" msgstr "Point de trace/arrêt" #: src/signame.c:109 msgid "Aborted" msgstr "Annulé" #: src/signame.c:112 msgid "IOT trap" msgstr "Appel IOT" #: src/signame.c:115 msgid "EMT trap" msgstr "Appel EMT" #: src/signame.c:118 msgid "Floating point exception" msgstr "Exception en virgule flottante" #: src/signame.c:121 msgid "Killed" msgstr "Tué" #: src/signame.c:124 msgid "Bus error" msgstr "Erreur de bus" #: src/signame.c:127 msgid "Segmentation fault" msgstr "Erreur de segmentation" #: src/signame.c:130 msgid "Bad system call" msgstr "Mauvais appel système" #: src/signame.c:133 msgid "Broken pipe" msgstr "Tube cassé" #: src/signame.c:136 msgid "Alarm clock" msgstr "Alarme" #: src/signame.c:139 msgid "Terminated" msgstr "Terminé" #: src/signame.c:142 msgid "User defined signal 1" msgstr "Signal utilisateur 1" #: src/signame.c:145 msgid "User defined signal 2" msgstr "Signal utilisateur 2" #: src/signame.c:150 src/signame.c:153 msgid "Child exited" msgstr "Processus fils terminé" #: src/signame.c:156 msgid "Power failure" msgstr "Coupure d'alimentation" #: src/signame.c:159 msgid "Stopped" msgstr "Arrêté" #: src/signame.c:162 msgid "Stopped (tty input)" msgstr "Arrêté (entrée tty)" #: src/signame.c:165 msgid "Stopped (tty output)" msgstr "Arrêté (sortie tty)" #: src/signame.c:168 msgid "Stopped (signal)" msgstr "Arrêté (signal)" #: src/signame.c:171 msgid "CPU time limit exceeded" msgstr "Limite du temps CPU dépassée" #: src/signame.c:174 msgid "File size limit exceeded" msgstr "Limite de taille de fichier dépassée" #: src/signame.c:177 msgid "Virtual timer expired" msgstr "Compteur virtuel expiré" #: src/signame.c:180 msgid "Profiling timer expired" msgstr "Compteur de profiling expiré" #: src/signame.c:186 msgid "Window changed" msgstr "Fenêtre modifiée" #: src/signame.c:189 msgid "Continued" msgstr "Reprise" #: src/signame.c:192 msgid "Urgent I/O condition" msgstr "Condition d'E/S urgente" #: src/signame.c:199 src/signame.c:208 msgid "I/O possible" msgstr "E/S possible" #: src/signame.c:202 msgid "SIGWIND" msgstr "SIGWIND" #: src/signame.c:205 msgid "SIGPHONE" msgstr "SIGPHONE" #: src/signame.c:211 msgid "Resource lost" msgstr "Ressource perdue" #: src/signame.c:214 msgid "Danger signal" msgstr "Signal de danger" #: src/signame.c:217 msgid "Information request" msgstr "Demande d'informations" #: src/signame.c:220 msgid "Floating point co-processor not available" msgstr "Coprocesseur en virgule flottante non disponible" #: src/strcache.c:274 #, c-format msgid "" "\n" "%s No strcache buffers\n" msgstr "" "\n" "%s pas de tampons strcache\n" #: src/strcache.c:304 #, c-format msgid "" "\n" "%s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu " "B\n" msgstr "" "\n" "%s strcache utilisé : %lu (%lu) / chaînes = %lu / espace = %lu o / moy = %lu " "o\n" #: src/strcache.c:308 #, fuzzy, c-format msgid "" "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B\n" msgstr "" "%s tampon courant : taille = %hu o / utilisé = %hu o / nombre = %hu / moy = " "%hu o\n" #: src/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" #: src/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" #: src/strcache.c:326 #, c-format msgid "" "\n" "%s strcache performance: lookups = %lu / hit rate = %lu%%\n" msgstr "" "\n" "%s performance strcache : lookups = %lu / accès = %lu%%\n" #: src/strcache.c:328 msgid "" "# hash-table stats:\n" "# " msgstr "" "# stats des tables de hachage :\n" "# " #: src/variable.c:1653 msgid "automatic" msgstr "automatique" #: src/variable.c:1656 msgid "default" msgstr "défaut" #: src/variable.c:1659 msgid "environment" msgstr "environnement" #: src/variable.c:1662 msgid "makefile" msgstr "makefile" #: src/variable.c:1665 msgid "environment under -e" msgstr "environnement avec l'option -e" #: src/variable.c:1668 msgid "command line" msgstr "ligne de commande" #: src/variable.c:1671 msgid "'override' directive" msgstr "directive « override »" #: src/variable.c:1682 #, c-format msgid " (from '%s', line %lu)" msgstr " (depuis « %s », ligne %lu)" #: src/variable.c:1745 msgid "# variable set hash-table stats:\n" msgstr "# stats des tables de hachage de la variable « set » :\n" #: src/variable.c:1756 msgid "" "\n" "# Variables\n" msgstr "" "\n" "# Variables\n" #: src/variable.c:1760 msgid "" "\n" "# Pattern-specific Variable Values" msgstr "" "\n" "# Valeurs de variable spécifiques au motif" #: src/variable.c:1774 msgid "" "\n" "# No pattern-specific variable values." msgstr "" "\n" "# pas de valeurs de variable spécifiques au motif" #: src/variable.c:1776 #, c-format msgid "" "\n" "# %u pattern-specific variable values" msgstr "" "\n" "# %u valeurs de variable spécifiques au motif" #: src/variable.h:229 #, c-format msgid "warning: undefined variable '%.*s'" msgstr "avertissement : variable « %.*s » indéfinie" #: src/vmsfunctions.c:91 #, c-format msgid "sys$search() failed with %d\n" msgstr "sys$search() a échoué avec %d\n" #: src/vmsjobs.c:244 #, c-format msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n" msgstr "" "-attention, vous pourriez avoir besoin de réactiver le traitement de CTRL-Y " "par DCL.\n" #: src/vmsjobs.c:681 #, c-format msgid "BUILTIN CD %s\n" msgstr "COMMANDE CD INTERNE %s\n" #: src/vmsjobs.c:1224 #, c-format msgid "DCL: %s\n" msgstr "DCL : %s\n" #: src/vmsjobs.c:1284 #, c-format msgid "Append output to %s\n" msgstr "Sortie ajoutée à %s\n" #: src/vmsjobs.c:1309 #, c-format msgid "Append %.*s and cleanup\n" msgstr "Ajoute %.*s et nettoie\n" #: src/vmsjobs.c:1322 #, c-format msgid "Executing %s instead\n" msgstr "Exécution de %s à la place\n" #: src/vpath.c:603 msgid "" "\n" "# VPATH Search Paths\n" msgstr "" "\n" "# Chemins de recherche VPATH\n" #: src/vpath.c:620 msgid "# No 'vpath' search paths." msgstr "# Aucun chemin de recherche « vpath »." #: src/vpath.c:622 #, c-format msgid "" "\n" "# %u 'vpath' search paths.\n" msgstr "" "\n" "# %u chemins de recherche « vpath ».\n" #: src/vpath.c:625 msgid "" "\n" "# No general ('VPATH' variable) search path." msgstr "" "\n" "# Aucun chemin de recherche général (variable « VPATH »)." #: src/vpath.c:631 msgid "" "\n" "# General ('VPATH' variable) search path:\n" "# " msgstr "" "\n" "# Chemin de recherche général (variable « VPATH ») :\n" "# " #: src/w32/w32os.c:44 #, c-format msgid "Jobserver slots limited to %d\n" msgstr "Nombre de clients jobserver limités à %d\n" #: src/w32/w32os.c:60 #, c-format msgid "creating jobserver semaphore: (Error %ld: %s)" msgstr "création de la sémaphore du jobserver : (erreur %ld : %s)" #: src/w32/w32os.c:79 #, 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) " #: src/w32/w32os.c:82 #, c-format msgid "Jobserver client (semaphore %s)\n" msgstr "client jobserver (semaphore %s)\n" #: src/w32/w32os.c:123 #, c-format msgid "release jobserver semaphore: (Error %ld: %s)" msgstr "libération de la sémaphore jobserver : erreur (%ld : %s)" #: src/w32/w32os.c:194 #, 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: %s: Command not found\n" #~ msgstr "%s : %s : commande introuvable\n" #~ msgid "%s[%u]: %s: Command not found\n" #~ msgstr "%s[%u] : %s : commande introuvable\n" #~ msgid "%s: Shell program not found" #~ msgstr "%s : programme Shell introuvable" #~ msgid "%s is suspending for 30 seconds..." #~ msgstr "%s s'arrête pendant 30 secondes..." #~ msgid "done sleep(30). Continuing.\n" #~ msgstr "sleep(30) terminé. On continue.\n" #~ msgid "Unknown error %d" #~ msgstr "Erreur inconnue %d" #~ msgid "Warning: File '%s' has modification time in the future" #~ msgstr "" #~ "Avertissement : le fichier « %s » a une date de modification dans le futur" #~ msgid " terminal." #~ msgstr " terminal." #~ 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" #~ msgid "internal error: multiple --jobserver-fds options" #~ msgstr "erreur interne : options --jobserver-fds multiples" #~ msgid "virtual memory exhausted" #~ msgstr "mémoire virtuelle épuisée" #~ msgid "write error" #~ msgstr "erreur d'écriture" #~ msgid "BUILTIN RM %s\n" #~ msgstr "COMMANDE RM INTERNE %s\n" #~ msgid "# Invalid value in `update_status' member!" #~ msgstr "# Valeur non valable dans le membre « update_status » !" #~ msgid "*** [%s] Error 0x%x (ignored)" #~ msgstr "*** [%s] Erreur 0x%x (ignorée)" #~ msgid "[%s] Error %d (ignored)" #~ msgstr "[%s] Erreur %d (ignorée)" #~ msgid "Invoking recipe from %s:%lu to update target `%s'.\n" #~ msgstr "" #~ "Invocation de recette de %s:%lu pour mettre à jour la cible « %s ».\n" #~ msgid "Invoking builtin recipe to update target `%s'.\n" #~ msgstr "" #~ "Invocation de la recette incorporée pour mettre à jour la cible « %s ».\n" #~ msgid "%s # of strcache buffers: %d (* %d B/buffer = %d B)\n" #~ msgstr "%s nombre de tampons strcache : %d (* %d B/buffer = %d B)\n" #~ msgid "" #~ "\n" #~ "# strcache hash-table stats:\n" #~ "# " #~ msgstr "" #~ "\n" #~ "# stats des tables de hachage strcache :\n" #~ "# " #~ msgid "process_easy() failed failed to launch process (e=%ld)\n" #~ msgstr "process_easy() n'a pas pu lancer de processus (e=%ld)\n" #~ 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" #~ "%sPARTICULAR PURPOSE.\n" #~ msgstr "" #~ "%sCeci est un logiciel libre ; consultez le code source pour connaître " #~ "les conditions de copie.\n" #~ "%sIl n'y a PAS de garantie ; ni pour une utilisation COMMERCIALE ni pour\n" #~ "%sune ADÉQUATION À UN BESOIN PARTICULIER.\n" #~ msgid "extraneous `endef'" #~ msgstr "« endef » superflu" #~ msgid "empty `override' directive" #~ msgstr "directive « override » vide" #~ msgid "invalid `override' directive" #~ msgstr "directive « override » incorrecte" #~ msgid "-warning, CTRL-Y will leave sub-process(es) around.\n" #~ msgstr "-warning, CTRL-Y va laisser des sous-processsus dans la nature.\n" #~ msgid "Do not specify -j or --jobs if sh.exe is not available." #~ msgstr "Ne pas spécifier -j ou --jobs si sh.exe n'est pas disponible." #~ msgid "Resetting make for single job mode." #~ msgstr "Réinitialisation de make en mode de traitement simple des tâches." #~ msgid "Syntax error, still inside '\"'\n" #~ msgstr "Erreur de syntaxe, toujours à l'intérieur de « \" »\n" #~ msgid "Got a SIGCHLD; %u unreaped children.\n" #~ msgstr "" #~ "Réception du signal SIGCHLD ; %u processus fils dont le statut de\n" #~ "sortie n'a pas été récupé.\n" #~ msgid "no file name for `%sinclude'" #~ msgstr "pas de nom de fichier pour « %sinclude »" #~ msgid "target `%s' leaves prerequisite pattern empty" #~ msgstr "la cible « %s » a laissé un schéma de dépendance vide" #~ msgid "" #~ "\n" #~ "# No files." #~ msgstr "" #~ "\n" #~ "# Pas de fichiers." #~ msgid "" #~ "\n" #~ "# %u files in %u hash buckets.\n" #~ msgstr "" #~ "\n" #~ "# %u fichiers dans %u tables de hachage.\n" #~ msgid "# average %.3f files per bucket, max %u files in one bucket.\n" #~ msgstr "" #~ "# moyenne de %.3f fichiers par table, maximum de %u fichiers dans une " #~ "table.\n" #~ msgid "DIRECTORY" #~ msgstr "RÉPERTOIRE" #~ msgid "Change to DIRECTORY before doing anything" #~ msgstr "Changer de RÉPERTOIRE avant de faire quoi que ce soit" #~ msgid "FLAGS" #~ msgstr "FANIONS" #~ msgid "Suspend process to allow a debugger to attach" #~ msgstr "Suspension de processus pour permettre au déboggeur de se rattacher" #~ msgid "Environment variables override makefiles" #~ msgstr "" #~ "Les variables d'environnement écrasent celles définies dans les makefiles" #~ msgid "FILE" #~ msgstr "FICHIER" #~ msgid "Read FILE as a makefile" #~ msgstr "Lit FICHIER en tant que makefile" #~ msgid "Search DIRECTORY for included makefiles" #~ msgstr "Recherche les makefiles inclus dans DIRECTORY" #~ msgid "Don't start multiple jobs unless load is below N" #~ msgstr "N'exécute pas de tâches multiples si la charge dépasse N" #~ msgid "Don't actually run any commands; just print them" #~ msgstr "N'exécute pas les commandes ; elles sont juste affichées" #~ msgid "Consider FILE to be very old and don't remake it" #~ msgstr "Considère FILE comme étant très vieux et ne le refabrique pas" #~ msgid "Don't echo commands" #~ msgstr "N'affiche pas les commandes" #~ msgid "Turns off -k" #~ msgstr "Désactive -k" #~ msgid "Consider FILE to be infinitely new" #~ msgstr "Considère FILE comme étant infiniment récent" #~ msgid "Entering" #~ msgstr "Entre dans" #~ msgid "Leaving" #~ msgstr "Quitte" #~ msgid "# No variables." #~ msgstr "# Pas de variables." #~ msgid "# average of %.1f variables per bucket, max %u in one bucket.\n" #~ msgstr "" #~ "# moyenne de %.1f variables par table, maximum de %u dans une table.\n" #~ msgid "# average of %d.%d variables per bucket, max %u in one bucket.\n" #~ msgstr "" #~ "# moyenne de %d.%d variables par table, maximum de %u dans une table.\n" #~ msgid "Error in lbr$ini_control, %d\n" #~ msgstr "Erreur dans lbr$ini_control, %d\n" #~ msgid "Error looking up module %s in library %s, %d\n" #~ msgstr "Erreur en recherchant le module %s dans la bibliothèque %s, %d\n" #~ msgid "Error getting module info, %d\n" #~ msgstr "Erreur lors de l'obtention des informations du module, %d\n" #~ msgid "touch: " #~ msgstr "touch: " #~ msgid " not" #~ msgstr " non" #~ msgid "# Last modified %.24s (%0lx)\n" #~ msgstr "# Dernière modification %.24s (%0lx)\n" #~ msgid "undefined" #~ msgstr "indéfini" #~ msgid "file" #~ msgstr "fichier" #~ msgid "environment override" #~ msgstr "écrasement par l'environnement" #~ msgid "override" #~ msgstr "écrasement" #~ msgid "the `word' function takes a one-origin index argument" #~ msgstr "la fonction `word' prend un argument d'index à une seule origine" #~ msgid "implicit" #~ msgstr "dépendance implicite" #~ msgid "rule" #~ msgstr "règle de dépendance" #~ msgid "Trying %s dependency `%s'.\n" #~ msgstr "Essai de la %s `%s'.\n" #~ msgid "Found dependency as `%s'.%s\n" #~ msgstr "Dépendance trouvée en tant que `%s'.%s\n" #~ msgid "intermediate" #~ msgstr "intermédiaire" #~ msgid "Unknown%s job %d" #~ msgstr "Tâche%s inconnue %d" #~ msgid " remote" #~ msgstr " distante" #~ msgid "%s finished." #~ msgstr "%s terminée." #~ msgid "losing" #~ msgstr "perdant" #~ msgid "winning" #~ msgstr "gagnant" #~ msgid "%sGNU Make version %s" #~ msgstr "%sGNU Make version %s" #~ msgid "Unknown error 12345678901234567890" #~ msgstr "Erreur inconnue 12345678901234567890" #~ msgid "User" #~ msgstr "utilisateur" #~ msgid "Make" #~ msgstr "make" #~ msgid "Child" #~ msgstr "enfant" #~ msgid "Dependency `%s' does not exist.\n" #~ msgstr "La dépendance `%s' n'existe pas.\n" #~ msgid "newer" #~ msgstr "plus récente" #~ msgid "older" #~ msgstr "plus ancienne" #~ msgid "exporting: Couldn't create return socket." #~ msgstr "exportation : N'a pas pu créer la socket de retour." #~ msgid "exporting: " #~ msgstr "exportation : " #~ msgid "exporting: %s" #~ msgstr "exportation : %s" #~ msgid "Job exported to %s ID %u\n" #~ msgstr "Tâche exportée vers %s ID %u\n" #~ msgid "Error getting load average" #~ msgstr "Erreur lors de l'obtention de la charge moyenne" #~ msgid "1-minute: %f " #~ msgstr "1 minute : %f " #~ msgid "5-minute: %f " #~ msgstr "5 minutes : %f " #~ msgid "15-minute: %f " #~ msgstr "15 minutes : %f " #~ msgid "digits occur in two different argv-elements.\n" #~ msgstr "des chiffres apparaissent dans deux éléments différents de argv.\n" #~ msgid "option %c\n" #~ msgstr "option %c\n" #~ msgid "option a\n" #~ msgstr "option a\n" #~ msgid "option b\n" #~ msgstr "option b\n" #~ msgid "option c with value `%s'\n" #~ msgstr "option c ayant pour valeur `%s'\n" #~ msgid "?? getopt returned character code 0%o ??\n" #~ msgstr "?? getopt a renvoyé le caractère de code 0%o ??\n" #~ msgid "non-option ARGV-elements: " #~ msgstr "éléments de ARGV qui ne sont pas des options : " #~ msgid "option d with value `%s'\n" #~ msgstr "option d ayant pour valeur `%s'\n" #~ msgid "%s: unknown signal" #~ msgstr "%s : signal inconnu" #~ msgid "Signal 12345678901234567890" #~ msgstr "Signal 12345678901234567890" #~ msgid "Signal %d" #~ msgstr "Signal %d" make-4.3/po/zh_CN.gmo0000644000175000017500000012221613611136532011346 00000000000000Þ•®Œ Aü$$+$&J$q$$!Š$-¬$Ú$ ì$- %;%'Q%#y%% ´%Â%à%Pù%;J&"†&©& Å&tæ&L['P¨'Dù'9>(Mx(@Æ(o)Gw)o¿)P/*l€*Fí*J4+€+9,C:,f~,_å,;E-:-O¼-J .}W.uÕ.~K/>Ê/M 0CW02›0FÎ0I1;_1 ›1¥1"Â1 å1ò1 22&2 ?2J2e2x2 Š2”2£2¬2%½2ã27ì2$333C3/[3‹3¤3¼3Ö3(ô34&24*Y4&„4+«4×4#ì4#5)45-^5,Œ5¹5Ò5$ç59 6F63e6™61¶6è677/7!F7$h7=7GË7G89[8•8ž8"¥8È8å8;9!?9a9+}9©9¼9Ö9,ð9:%;:,a:-Ž: ¼:&Ý:;#;C;!c;.…;´;Ä;ÍÙ;§</Ç<÷<& = 4=%U={=›=¯=1Ä= ö=>#>#=>La>6®>å>6?A8?>z? ¹?+Ã?*ï?@ 2@<@1D@2v@ ©@µ@Î@"ã@*A1A@A PAqA A ™A£A»A ÛA èA%õAB+;B$gBŒB¦B ÅBÏBéBC+CHC!eC ‡C”C®C ·CÅCÎCâCD$D&_0X_‰_=©_;ç_:#`1^`,`H½`4a*;a"fa/‰a8¹a7òa*b>b NbÇ\b!$d0Fd'wd Ÿd ªd&´d.Ûd e#e1>epe*‰e´eÒe éeôefP0f7f'¹fáfúfjg=ƒgDÁgSh4ZhOhEßhH%iOniR¾iajrsj:æjI!kkk7ík:%lh`loÉl:9mCtma¸mLn|gnpän„Uo@Úoap:}p7¸paðpCRq4–q Ëq!×q&ùq r-r @rMrfrƒr’r«rÁr ÔrÞr îr úrs%sL6sƒs–s¦s1¼sîstt3t!Otqt'Št*²t(Ýt4u;uOu"nu!‘u'³u(Ûuvv)-v9Wv#‘v3µv+év;w)Qw"{wžw¶wÒw3ïwD#xPhxS¹x@ yNyWy ^yy$™y9¾y øyz/3zcztzz%¦z Ìz&íz%{,:{#g{$‹{!°{%Ò{%ø{!|;@||||é£|'}<µ}ò}$ ~/~$M~r~~¨~3½~ñ~$&DQk8½#ö4€EO€>•€Ô€&ã€0 ;Z c+m+™ÅÌãú)‚A‚P‚$f‚‹‚«‚ »‚Ȃ߂ù‚ ƒƒ=ƒ+]ƒ%‰ƒ¯ƒ$Ńêƒñƒ „%„?„[„x„ ˜„¥„ Á„ Ë„ Ø„ ã„ ð„…()… R…&s…*š…Å…á…†*†D†c†‚†-’†)À†ê†‡!‡ (‡ 3‡ >‡)K‡ u‡‚‡’‡™‡3´‡3è‡/ˆ&Lˆ sˆ ”ˆ"žˆÁˆ-Ùˆ‰3&‰'Z‰3‚‰ ¶‰9‰ü‰-Š1FŠ$xŠ-Š$ËŠðŠ*ôŠ#‹EC‹ ‰‹*“‹ ¾‹%ß‹ Œ&Œ 7Œ&DŒ&kŒR’Œ0åŒ)+EqxŠ©,Ä,ñ3Ž=RŽGŽØŽ*÷Ž:"2]*¢*Í-ø(&O#l! ²¿È Ð(Ú*‘.‘!H‘ j‘t‘‡‘ž‘*µ‘!à‘6’/9’7i’ ¡’%«’!Ñ’ó’“/&“V“u“‡“¢“"´“ דä“ù“'”!6”X”9k”¥”)µ”ß”7æ”1•7P•7ˆ•À•-Ü• – –$–5=–s–z–!“– µ––É–â–2ú–/-—/]—(—¶—Í—Aá—/#˜0S˜„˜™˜'¯˜ט-$™>R™O‘™á™ý™š,)š>Vš8•šΚ,ך››2›=B›€››$¯›Ô›ç›6ë›6"œ6Yœ.œ2¿œ2òœ%% K$X*}¨½Ð!ß2ž/4ž+dž ž#±ž2Õž0Ÿ9Ÿ+WŸ$ƒŸ)¨Ÿ+ÒŸ%þŸ9$ 1^ 2 )à#í  ¡2¡B¡7[¡“¡K¬¡;ø¡;4¢8p¢/©¢TÙ¢/.£,^£%‹£/±£8á£7¤R¤j¤ €¤’’ž­u› ÙfŠœ´hcÓ='6݉#‰€“þEAf—)«$­¡É ~‘à k©µŒ9|jè2e-S„&vs•Ü`N¡H !š¨' ¦1uD§ô{}&.Y« Ïÿê?V¶50 mO¾v…JõK‡سöºxWQ ]tr–9 {C4ƒB±ÂMT†,\Z0š˰q:¨ó œU71ÌrHÛl™<:øò¿3B¢|/æjcP¸¯g5²Š—ç(+Áb-[+@†}~ŽzÊ™bFYä>n›"*]€,˜íÑlðQ =£‹Ldaã`8Ð÷åZÍ”#©@%ÎgnMÃsª_ÕD\S®ùTR„^7‚Ò ‹ _kEKž¬Vh6$¤/dwŸŸXúƒN4R¢^xtëLª®Ö»‘q*Åâ>W[ì§¹‡Ô·˜ÇF;!3PJe•y‚ÆoG¥ ;¥¼£I”ŽpˆéĈ"ß×GÚŒ“zÀo)ÞmUXa8¤Aý¬ip2(ïO–IiȦ…y½.ñîü%áCûw<? # %u 'vpath' search paths. # %u implicit rules, %u (%.1f%%) terminal. # %u pattern-specific variable values # Directories # Files # Finished Make data base on %s # General ('VPATH' variable) search path: # # Implicit Rules # Make data base, printed on %s # No general ('VPATH' variable) search path. # No implicit rules. # No pattern-specific variable values. # Pattern-specific Variable Values # VPATH Search Paths # Variables # files hash-table stats: # %s No strcache buffers %s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu B %s strcache performance: lookups = %lu / hit rate = %lu%% Counted %d args in failed launch This program built for %s This program built for %s (%s) Unhandled exception filter called from program %s ExceptionCode = %lx ExceptionFlags = %lx ExceptionAddress = 0x%p --debug[=FLAGS] Print various types of debugging information. --no-print-directory Turn off -w, even if it was turned on implicitly. --no-silent Echo recipes (disable --silent mode). --trace Print tracing information. --warn-undefined-variables Warn when an undefined variable is referenced. -B, --always-make Unconditionally make all targets. -C DIRECTORY, --directory=DIRECTORY Change to DIRECTORY before doing anything. -E STRING, --eval=STRING Evaluate STRING as a makefile statement. -I DIRECTORY, --include-dir=DIRECTORY Search DIRECTORY for included makefiles. -L, --check-symlink-times Use the latest mtime between symlinks and target. -O[TYPE], --output-sync[=TYPE] Synchronize output of parallel jobs by TYPE. -R, --no-builtin-variables Disable the built-in variable settings. -S, --no-keep-going, --stop Turns off -k. -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE Consider FILE to be infinitely new. -b, -m Ignored for compatibility. -d Print lots of debugging information. -e, --environment-overrides Environment variables override makefiles. -f FILE, --file=FILE, --makefile=FILE Read FILE as a makefile. -h, --help Print this message and exit. -i, --ignore-errors Ignore errors from recipes. -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no arg. -k, --keep-going Keep going when some targets can't be made. -l [N], --load-average[=N], --max-load[=N] Don't start multiple jobs unless load is below N. -n, --just-print, --dry-run, --recon Don't actually run any recipe; just print them. -o FILE, --old-file=FILE, --assume-old=FILE Consider FILE to be very old and don't remake it. -p, --print-data-base Print make's internal database. -q, --question Run no recipe; exit status says if up to date. -r, --no-builtin-rules Disable the built-in implicit rules. -s, --silent, --quiet Don't echo recipes. -t, --touch Touch targets instead of remaking them. -v, --version Print the version number of make and exit. -w, --print-directory Print the current directory. Date %s Ignoring VPATH name '%s'. uid = %d, gid = %d, mode = 0%o. (built-in): (core dumped) (don't care) (from '%s', line %lu) (from '%s', line %lu): (ignored) (name might be truncated) (no default goal) (no ~ expansion) (remote) (search path) files, impossibilities impossibilities in %lu directories. so far.# A default, MAKEFILES, or -include/sinclude makefile.# Also makes:# Builtin rule# Command line target.# Dependencies recipe running (THIS IS A BUG).# Failed to be updated.# File does not exist.# File has been updated.# File has not been updated.# File is an intermediate prerequisite.# File is very old.# Implicit rule search has been done.# Implicit rule search has not been done.# Implicit/static pattern stem: '%s' # Invalid value in 'command_state' member!# Last modified %s # Modification time never checked.# Needs to be updated (-q is set).# Phony target (prerequisite of .PHONY).# Precious file (prerequisite of .PRECIOUS).# Recipe currently running (THIS IS A BUG).# Successfully updated.# recipe to execute# %s (device %d, inode [%d,%d,%d]): # %s (device %d, inode [%d,%d,%d]): could not be opened. # %s (device %ld, inode %ld): # %s (device %ld, inode %ld): could not be opened. # %s (key %s, mtime %I64u): # %s (key %s, mtime %I64u): could not be opened. # %s: could not be stat'd. # No 'vpath' search paths.# Not a target:# hash-table stats: # # variable set hash-table stats: $SHELL changed (was '%s', now '%s') %s (line %d) Bad shell context (!unixy && !batch_mode_shell) %s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B %s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B %s other used: total = %lu B / count = %lu / avg = %lu B %s%s: %s%s: %s%s: Entering an unknown directory %s: Entering directory '%s' %s: Field '%s' not cached: %s%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p) %s: Leaving an unknown directory %s: Leaving directory '%s' %s: Timestamp out of range; substituting %s%s: failed to load%s: illegal option -- %c %s: invalid option -- %c %s: option '%c%s' doesn't allow an argument %s: option '%s' is ambiguous %s: option '%s' requires an argument %s: option '--%s' doesn't allow an argument %s: option '-W %s' doesn't allow an argument %s: option '-W %s' is ambiguous %s: option requires an argument -- %c %s: target '%s' does not exist%s: unrecognized option '%c%s' %s: unrecognized option '--%s' %s: update target '%s' due to: %s%s: user %lu (real %lu), group %lu (real %lu) %sBuilt for %s %sBuilt for %s (%s) %sLicense GPLv3+: GNU GPL version 3 or later %sThis is free software: you are free to change and redistribute it. %sThere is NO WARRANTY, to the extent permitted by law. %sNo rule to make target '%s'%s%sNo rule to make target '%s', needed by '%s'%s%s[%s: %s] Error %d%s%s[%u]: Entering an unknown directory %s[%u]: Entering directory '%s' %s[%u]: Leaving an unknown directory %s[%u]: Leaving directory '%s' '%s' is up to date.'override' directive*** Archive member '%s' may be bogus; not deleted*** Break. *** Deleting file '%s'*** Deleting intermediate file '%s'*** Waiting for unfinished jobs....*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp*** [%s] Archive member '%s' may be bogus; not deleted*** [%s] Deleting file '%s'*** mixed implicit and normal rules: deprecated syntax-O[TYPE] (--output-sync[=TYPE]) is not configured for this build.-warning, you may have to re-enable CTRL-Y handling from DCL. . Stop. .DEFAULT_GOAL contains more than one target.LIBPATTERNS element '%s' is not a pattern; using VPATH name '%s'AbortedAccess violation: read operation at address 0x%p Access violation: write operation at address 0x%p Alarm clockAppend %.*s and cleanup Append output to %s Avoiding implicit rule recursion. BUG: num_pattern_rules is wrong! %u != %uBUILTIN CD %s Bad system callBatch file contents: @echo off Batch file contents:%s %s Broken pipeBus errorCPU time limit exceededCannot create a temporary file Child accessChild exitedCircular %s <- %s dependency dropped.Cleaning up temp batch file %s Cleaning up temp batch file %s failed (%d) Cleaning up temporary batch file %s Collisions=%lu/%lu=%.0f%%Considering target file '%s'. ContinuedCould not restore stderr Could not restore stdin Could not restore stdout Couldn't change back to original directory.CreatePipe() failed (e=%ld) Creating temporary batch file %s Current timeCustoms won't export: %s DCL: %s Danger signalEMT trapEmpty function nameEmpty symbol name for load: %sExecuting %s instead Failed to load symbol %s from %s: %sFailed to open global symbol table: %sFailed to remake makefile '%s'.Failed to remake target file '%s'. File '%s' does not exist. File '%s' was considered already. File size limit exceededFinished prerequisites of target file '%s'. Finished updating file '%s'. Floating point co-processor not availableFloating point exceptionFound an implicit rule for '%s'. Found prerequisite '%s' as VPATH '%s' Function name too long: %sGiving up on target file '%s'. HangupI/O possibleIOT trapIllegal InstructionIncluded makefile '%s' was not found.Information requestInitialized accessInterruptInvalid function name: %sInvalid maximum argument count (%u) for function %sInvalid minimum argument count (%u) for function %sJobserver client (fds %d,%d) Jobserver client (semaphore %s) Jobserver slots limited to %d KilledLive child %p (%s) PID %s %s Load=%lu/%lu=%.0f%%, Loaded object %s is not declared to be GPL compatibleLoading symbol %s from %s Looking for a rule with intermediate file '%s'. Looking for an implicit rule for '%s'. Looking for archive-member implicit rule for '%s'. Make accessMakefile '%s' might loop; not remaking it. Makefile '%s' was not foundMakefile from standard input specified twice.Making '%s' due to always-make flag. Malformed target-specific variable definitionMember '%s'%s: %ld bytes at %ld (%ld). Must remake target '%s'. NoNo implicit rule found for '%s'. No need to remake target '%s'No recipe for '%s' and no prerequisites actually changed. No targetsNo targets specified and no makefile foundNothing to be done for '%s'.Obtained token for child %p (%s). Options: Parallel jobs (-j) are not supported on this platform.Power failurePrerequisite '%s' is newer than target '%s'. Prerequisite '%s' is older than target '%s'. Prerequisite '%s' is order-only for target '%s'. Prerequisite '%s' of target '%s' does not exist. Profiling timer expiredPruning file '%s'. Putting child %p (%s) PID %s%s on the chain. QuitRe-executing[%u]:Reading makefile '%s'Reading makefiles... Reaping losing child %p PID %s %s Reaping winning child %p PID %s %s Recently tried and failed to update file '%s'. Recipe for '%s' will be ignored in favor of the one for '%s'.Recipe for file '%s' was found by implicit rule search,Recipe has too many lines (%ud)Recipe of '%s' is being run. Recipe was specified for file '%s' at %s:%lu,Recursive variable '%s' references itself (eventually)Rehash=%u, Rejecting impossible implicit prerequisite '%s'. Rejecting impossible rule prerequisite '%s'. Released token for child %p (%s). Removing child %p PID %s%s from chain. Removing intermediate files... Report bugs to Resetting to single job (-j1) mode.Resource lostSIGPHONESIGWINDSegmentation faultSkipping UTF-8 BOM in makefile '%s' Skipping UTF-8 BOM in makefile buffer Stem too long: '%s%.*s'. Still updating file '%s'. StoppedStopped (signal)Stopped (tty input)Stopped (tty output)Successfully remade target file '%s'. Symbolic links not supported: disabling -L.Target '%s' is double-colon and has no prerequisites. Target '%s' not remade because of errors.Target file '%s' needs to be remade under -q. TerminatedThe 'load' operation is not supported on this platform.The prerequisites of '%s' are being made. Trace/breakpoint trapTrying implicit prerequisite '%s'. Trying pattern rule with stem '%.*s'. Trying rule prerequisite '%s'. Updating goal targets.... Updating makefiles.... Urgent I/O conditionUsage: %s [options] [target] ... User accessUser defined signal 1User defined signal 2Using default commands for '%s'. Using default recipe for '%s'. Virtual timer expiredWarning: File '%s' has modification time %s s in the futureWindow changedattempt to use unsupported feature: '%s'automaticbut '%s' is now considered the same file as '%s'.can't allocate %lu bytes for hash table: memory exhaustedcan't rename double-colon '%s' to single-colon '%s'can't rename single-colon '%s' to double-colon '%s'cannot enforce load limit: cannot enforce load limits on this operating systemclose: %s: %scommand linecreating jobs pipecreating jobserver semaphore: (Error %ld: %s)defaultduping jobs pipeempty string invalid as file nameempty variable nameenvironmentenvironment under -eextraneous '%s'extraneous text after '%s' directiveextraneous text after 'define' directiveextraneous text after 'endef' directivefile: invalid file operation: %sfile: missing filenamefile: too many argumentsfind_and_set_shell() path search set default_shell = %s find_and_set_shell() setting default_shell = %s first argument to 'word' function must be greater than 0fopen (temporary file)fwrite (temporary file)grouped targets must provide a recipeguile: Evaluating '%s' guile: Expanding '%s' init jobserver pipeinsufficient number of arguments (%d) to function '%s'internal error: invalid --jobserver-auth string '%s'internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)invalid syntax in conditionaljob server shut downjobserver pipelinelbr$ini_control() failed with status = %dlbr$set_module() failed to extract module info, status = %dmake reaped child pid %s, still waiting for pid %s makefilemissing 'endef', unterminated 'define'missing 'endif'missing rule before recipemissing separatormissing separator (did you mean TAB instead of 8 spaces?)missing target patternmixed implicit and normal rulesmixed implicit and static pattern rulesmultiple target patternsnono more file handles: could not duplicate stderr no more file handles: could not duplicate stdin no more file handles: could not duplicate stdout non-numeric first argument to 'word' functionnon-numeric first argument to 'wordlist' functionnon-numeric second argument to 'wordlist' functiononly one 'else' per conditionalopen: %s: %sprerequisites cannot be defined in recipesprocess_easy() failed to launch process (e=%ld) pselect jobs piperead jobs piperead: %s: %srecipe commences before first targetrelease jobserver semaphore: (Error %ld: %s)semaphore or child process wait: (Error %ld: %s)spawnvpe: environment space might be exhaustedsys$search() failed with %d target '%s' doesn't match the target patterntarget '%s' given more than once in the same ruletarget file '%s' has both : and :: entriestarget pattern contains no '%%'the '%s%s' option requires a non-empty string argumentthe '-%c' option requires a positive integer argumenttouch archive member is not available on VMStouch: '%s' is not a valid archivetouch: Archive '%s' does not existtouch: Bad return code from ar_member_touch on '%s'touch: Member '%s' does not exist in '%s'unable to open library '%s' to lookup member status %dunimplemented on this platform: function '%s'unknown debug level specification '%s'unknown output-sync type '%s'unknown signalunlink (temporary file): unterminated call to function '%s': missing '%c'unterminated variable referencewarning: Clock skew detected. Your build may be incomplete.warning: -j%d forced in makefile: resetting jobserver mode.warning: -j%d forced in submake: resetting jobserver mode.warning: NUL character seen; rest of line ignoredwarning: ignoring old recipe for target '%s'warning: jobserver unavailable: using -j1. Add '+' to parent make rule.warning: overriding group membership for target '%s'warning: overriding recipe for target '%s'warning: undefined variable '%.*s'windows32_openpipe(): process_init_fd() failed windows32_openpipe: DuplicateHandle(Err) failed (e=%ld) windows32_openpipe: DuplicateHandle(In) failed (e=%ld) write error: stdoutwrite jobserverwrite: %s: %sProject-Id-Version: make 4.2.93 Report-Msgid-Bugs-To: bug-make@gnu.org PO-Revision-Date: 2020-01-05 15:27-0500 Last-Translator: Boyuan Yang <073plan@gmail.com> Language-Team: Chinese (simplified) Language: zh_CN MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. X-Generator: Poedit 2.2.4 Plural-Forms: nplurals=1; plural=0; # %u “vpathâ€æœç´¢è·¯å¾„。 # %u æ¡éšå«è§„则,%u (%.1f%%) 为末端。 # %u 个 pattern-specific å˜é‡çš„值 # 目录 # 文件 # 在 %s ä¸Šå®Œæˆ make æ•°æ®åŸºç¡€ # 通用æœç´¢è·¯å¾„(“VPATHâ€å˜é‡): # # éšå«è§„则 # make æ•°æ®åŸºç¡€ï¼Œæ‰“å°åœ¨ %s # 没有通用æœç´¢è·¯å¾„(“VPATHâ€å˜é‡)。 # 没有éšå«è§„则。 # 没有 pattern-specific å˜é‡çš„值。 # Pattern-specific å˜é‡å€¼ # VPATH æœç´¢è·¯å¾„ # å˜é‡ # 文件æ‚凑表状æ€: # %s 没有 strcache 缓冲区 %s strcache 缓冲: %lu (%lu) / 字串 = %lu / 空间 = %lu B / å¹³å‡ = %lu B %s strcache 性能:查找 = %lu / 命中率 = %lu%% 失败执行中共有 %d ä¸ªå‚æ•°ã€‚ 该程åºä¸º %s 编译 该程åºä¸º %s (%s) 编译 ä»Žç¨‹åº %s 产生的未处ç†çš„异常过滤器 å¼‚å¸¸ç  = %lx 异常标志 = %lx å¼‚å¸¸åœ°å€ = 0x%p --debug[=æ——æ ‡] 打å°å„ç§è°ƒè¯•ä¿¡æ¯ã€‚ --no-print-directory 关闭 -w,å³ä½¿ -w 默认开å¯ã€‚ --no-silent 坹酿–¹è¿›è¡Œå›žæ˜¾ï¼ˆç¦ç”¨ --silent 模å¼ï¼‰ã€‚ --trace 打å°è·Ÿè¸ªä¿¡æ¯ã€‚ --warn-undefined-variables 当引用未定义å˜é‡çš„æ—¶å€™å‘出警告。 -B, --always-make æ— æ¡ä»¶åˆ¶ä½œ (make) 所有目标。 -C 目录, --directory=目录 在执行å‰å…ˆåˆ‡æ¢åˆ° <目录>。 -E 字串, --eval=字串 å°† <字串> 作为 makefile 语å¥ä¼°å€¼ã€‚ -I 目录, --include-dir=目录 在 <目录> 中æœç´¢è¢«åŒ…å«çš„ makefile。 -L, --check-symlink-times 使用软链接åŠè½¯é“¾æŽ¥ç›®æ ‡ä¸­ä¿®æ”¹æ—¶é—´è¾ƒæ™šçš„一个。 -O[类型], --output-sync[=类型] 使用 <类型> æ–¹å¼åŒæ­¥å¹¶è¡Œä»»åŠ¡è¾“å‡ºã€‚ -R, --no-builtin-variables ç¦ç”¨å†…ç½®å˜é‡è®¾ç½®ã€‚ -S, --no-keep-going, --stop 关闭 -k。 -W 文件, --what-if=文件, --new-file=文件, --assume-new=文件 å°† <文件> å½“åšæœ€æ–°ã€‚ -b, -m 为兼容性而忽略。 -d 打å°å¤§é‡è°ƒè¯•ä¿¡æ¯ã€‚ -e, --environment-overrides 环境å˜é‡è¦†ç›– makefile 中的å˜é‡ã€‚ -f 文件, --file=文件, --makefile=文件 从 <文件> 中读入 makefile。 -h, --help 打å°è¯¥æ¶ˆæ¯å¹¶é€€å‡ºã€‚ -i, --ignore-errors 忽略æ¥è‡ªå‘½ä»¤é…方的错误。 -j [N], --jobs[=N] åŒæ—¶å…许 N ä¸ªä»»åŠ¡ï¼›æ— å‚æ•°è¡¨æ˜Žå…许无é™ä¸ªä»»åŠ¡ã€‚ -k, --keep-going 当æŸäº›ç›®æ ‡æ— æ³•制作时ä»ç„¶ç»§ç»­ã€‚ -l [N], --load-average[=N], --max-load[=N] 在系统负载高于 N æ—¶ä¸å¯åŠ¨å¤šä»»åŠ¡ã€‚ -n, --just-print, --dry-run, --recon åªæ‰“å°å‘½ä»¤é…方,ä¸å®žé™…执行。 -o 文件, --old-file=文件, --assume-old=文件 å°† <文件> 当åšå¾ˆæ—§ï¼Œä¸å¿…釿–°åˆ¶ä½œã€‚ -p, --print-data-base æ‰“å° make 的内部数æ®åº“。 -q, --question ä¸è¿è¡Œä»»ä½•é…æ–¹ï¼›é€€å‡ºçжæ€è¯´æ˜Žæ˜¯å¦å·²å…¨éƒ¨æ›´æ–°ã€‚ -r, --no-builtin-rules ç¦ç”¨å†…ç½®éšå«è§„则。 -s, --silent, --quiet ä¸è¾“å‡ºé…æ–¹å‘½ä»¤ã€‚ -t, --touch touch ç›®æ ‡ï¼ˆæ›´æ–°ä¿®æ”¹æ—¶é—´ï¼‰è€Œä¸æ˜¯é‡æ–°åˆ¶ä½œå®ƒä»¬ã€‚ -v, --version æ‰“å° make 的版本å·å¹¶é€€å‡ºã€‚ -w, --print-directory 打å°å½“å‰ç›®å½•。 日期 %s 忽略 VPATH å称“%sâ€ã€‚ uid = %d,gid = %d,mode = 0%o。 (内置): (核心已转储) (ä¸ç”¨ç†) (从“%sâ€ï¼Œè¡Œ %lu) (从“%sâ€ï¼Œè¡Œ %lu): (已忽略) (åç§°å¯èƒ½è¢«æˆªæ–­) (没有缺çœç›®æ ‡) (没有 ~ 扩展) (远程) (æœç´¢è·¯å¾„) 文件, ä¸å¯èƒ½ ä¸å¯èƒ½åœ¨ %lu 目录中。 迄今为止。# 缺çœçš„ã€MAKEFILES 指定的ã€-include/sinclude 包å«çš„ makefile。# 还è¦åˆ¶ä½œï¼š# 内建规则# 命令行目标。# 正在è¿è¡Œçš„ä¾èµ–æ€§é…æ–¹ (这是 BUG)。# 更新失败。# 文件ä¸å­˜åœ¨ã€‚# 文件已ç»è¢«æ›´æ–°ã€‚# 文件尚未被更新。# æ–‡ä»¶æ˜¯ä¸€ä¸ªä¸­é—´å‰æã€‚# 文件éžå¸¸é™ˆæ—§ã€‚# 对éšå«è§„则的æœç´¢å·²å®Œæˆã€‚# 对éšå«è§„则的æœç´¢å°šæœªå®Œæˆã€‚# éšå«/陿€æ¨¡å¼ä¸»å¹²ï¼šâ€œ%s†# “command_stateâ€æˆå‘˜ä¸­å­˜åœ¨æ— æ•ˆçš„值ï¼# 最近更新 %s # ä»Žä¸æ£€æŸ¥ä¿®æ”¹æ—¶é—´ã€‚# éœ€è¦æ›´æ–° (用 -q 设定)。# å‡ç›®æ ‡ (.PHONYçš„å‰æ)。# é‡è¦æ–‡ä»¶ (.PRECIOUSçš„å‰æ)。# 正在è¿è¡Œçš„é…æ–¹ (这是 BUG)。# æ›´æ–°æˆåŠŸã€‚# è¦æ‰§è¡Œçš„é…æ–¹# %s (设备 %d,i-节点 [%d,%d,%d]):# %s (设备 %d,i-节点 [%d,%d,%d]):无法打开。 # %s (设备 %ld,i-节点 %ld):# %s (设备 %ld,i-节点 %ld):无法打开。 # %s (关键字 %s,修改时间 %I64u):# %s (关键字 %s,修改时间 %I64u):无法打开。 # %s:无法对其进行 stat æ“作。 # 没有“vpathâ€æœç´¢è·¯å¾„。# 䏿˜¯ä¸€ä¸ªç›®æ ‡ï¼š# æ‚凑表统计数æ®: # # å˜é‡çš„æ‚å‡‘è¡¨çŠ¶æ€: $SHELL å·²æ”¹å˜ (原为“%sâ€ï¼ŒçŽ°ä¸ºâ€œ%sâ€) %s (行 %d) 错误的 shell 上下文 (!unixy && !batch_mode_shell) %s ç›®å‰ç¼“冲: 尺寸 = %hu B / 已用 = %hu B / æ•°é‡ = %hu / å¹³å‡ = %u B %s 其他空余: 总共 = %lu B / 最大 = %lu B / æœ€å° = %lu B / å¹³å‡ = %hu B %s 其他已用: 总共 = %lu B / æ•°é‡ = %lu / å¹³å‡ = %lu B %s%s: %s%s: %s%s: 进入一个未知的目录 %s: 进入目录“%s†%s:字段“%sâ€æœªè¢«ç¼“存:%s%s:æ•获中断/异常 (ä»£ç  = 0x%lx, åœ°å€ = 0x%p) %s: 离开一个未知的目录 %s: 离开目录“%s†%sï¼šæ—¶é—´æ ‡è®°è¶…å‡ºèŒƒå›´ï¼›æ­£åœ¨æ›¿æ¢ %s%s: 加载失败%sï¼šéžæ³•选项 -- %c %sï¼šéžæ³•选项 -- %c %s:选项“%c%sâ€ä¸å…è®¸å‚æ•° %s:选项“%sâ€å«ä¹‰ä¸æ¸… %s:选项“%sâ€éœ€è¦ä¸€ä¸ªå‚æ•° %s:选项“--%sâ€ä¸å…è®¸å‚æ•° %s:选项“-W %sâ€ä¸å…è®¸ç»™å‡ºå‚æ•° %s:选项“-W %sâ€å«ä¹‰ä¸æ¸… %s:选项需è¦ä¸€ä¸ªå‚æ•° -- %c %s: 目标文件“%sâ€ä¸å­˜åœ¨%s:无法识别的选项“%c%s†%s:无法识别的选项“--%s†%s:更新“%sâ€ï¼Œå› ä¸ºï¼š%s%s: 用户 %lu (真实用户 %lu), 组 %lu (真实组 %lu) %s为 %s 编译 %s为 %s (%s) 编译 %s许å¯è¯ï¼šGPLv3+:GNU 通用公共许å¯è¯ç¬¬ 3 版或更新版本。 %s本软件是自由软件:您å¯ä»¥è‡ªç”±ä¿®æ”¹å’Œé‡æ–°å‘布它。 %s在法律å…许的范围内没有其他ä¿è¯ã€‚ %s没有规则å¯åˆ¶ä½œç›®æ ‡â€œ%sâ€%s%s没有规则å¯åˆ¶ä½œç›®æ ‡â€œ%sâ€ï¼Œç”±â€œ%sâ€%s 需求%s[%s:%s] 错误 %d%s%s[%u]: 进入一个未知的目录 %s[%u]: 进入目录“%s†%s[%u]: 离开一个未知的目录 %s[%u]: 离开目录“%s†“%sâ€å·²æ˜¯æœ€æ–°ã€‚“overrideâ€æŒ‡ä»¤*** å½’æ¡£æˆå‘˜â€œ%sâ€å¯èƒ½æ˜¯å‡çš„;未删除*** 中断。 *** 正在删除文件“%sâ€*** 正在删除中间文件“%sâ€*** 正在等待未完æˆçš„任务....*** 警告: .LOW_RESOLUTION_TIME 文件 `%s' 有一个高精度的的时间标志*** [%s] å½’æ¡£æˆå‘˜â€œ%sâ€å¯èƒ½æ˜¯å‡çš„;未删除*** [%s] 正在删除文件“%sâ€*** éšå«å’Œæ™®é€šè§„则混åˆï¼šå·²å¼ƒç”¨çš„语法-O[类型] (--output-sync[=类型]) 并未é…置入此 make 构建。-警告, ä½ å¯èƒ½å¿…须从 DCL 釿–°å¯ç”¨ CTRL-Y 处ç†ã€‚ 。 åœæ­¢ã€‚ .DEFAULT_GOAL 包å«å¤šä½™ä¸€ä¸ªç›®æ ‡.LIBPATTERNS 的元素“%sâ€ä¸æ˜¯ä¸€ä¸ªæ¨¡å¼ï¼›ä½¿ç”¨ VPATH å称“%sâ€<内置>已中止访问冲çªï¼šåœ°å€ 0x%p 处的读æ“作 访问冲çªï¼šåœ°å€ 0x%p 处的写æ“作 闹钟追加 %.*s å¹¶æ¸…ç† å°†è¾“å‡ºè¿½åŠ åˆ° %s é¿å…éšå«è§„则递归。 BUG:num_pattern_rules 出错ï¼%u != %uBUILTIN CD %s é”™è¯¯çš„ç³»ç»Ÿè°ƒç”¨æ‰¹å¤„ç†æ–‡ä»¶å†…容: @echo off æ‰¹å¤„ç†æ–‡ä»¶å†…容:%s %s æ–­å¼€çš„ç®¡é“æ€»çº¿é”™è¯¯CPU 时间超出é™åˆ¶æ— æ³•创建临时文件 å­è¿›ç¨‹ æƒé™å­è¿›ç¨‹å·²é€€å‡ºæ”¾å¼ƒå¾ªçޝä¾èµ– %s <- %s 。正在清除临时批文件 %s 清ç†ä¸´æ—¶æ‰¹å¤„ç†æ–‡ä»¶ %s 失败 (%d) æ­£åœ¨æ¸…é™¤ä¸´æ—¶æ‰¹å¤„ç†æ–‡ä»¶ %s 碰撞=%lu/%lu=%.0f%%正在考虑目标文件“%sâ€ã€‚ 继续无法还原标准错误 无法还原标准输入 无法还原标准输出 无法回到原始目录。CreatePipe() 失败 (e=%ld) 正在创建临时批文件 %s 当剿—¶é—´ç”¨æˆ·ä¸å¸Œæœ›å¯¼å‡ºï¼š%s DCL:%s å±é™©ä¿¡å·EMT 陷阱空函数åè¦åŠ è½½çš„ç¬¦å·å为空:%s执行 %s 作为替代 从 %2$s åŠ è½½ç¬¦å· %1$s 失败:%3$s打开全局符å·è¡¨å¤±è´¥ï¼š%s釿–°æ‰§è¡Œ makefile“%sâ€å¤±è´¥ã€‚釿–°åˆ¶ä½œç›®æ ‡æ–‡ä»¶â€œ%sâ€å¤±è´¥ã€‚ 文件“%sâ€ä¸å­˜åœ¨ã€‚ 已考虑过文件“%sâ€ã€‚ 文件大å°è¶…出é™åˆ¶ç›®æ ‡æ–‡ä»¶â€œ%sâ€çš„å‰æå·²å®Œæˆã€‚ 更新文件“%sâ€å®Œæˆã€‚ 浮点数å处ç†å™¨ä¸å¯ç”¨æµ®ç‚¹æ•°å¼‚常找到一æ¡å…³äºŽâ€œ%sâ€çš„éšå«è§„则。 å‰æâ€œ%sâ€åœ¨ VPATH“%sâ€ä¸­å‘现 函数å称太长:%s放弃目标文件“%sâ€ã€‚ 挂起I/O å¯è¡ŒIOT é™·é˜±éžæ³•指令找ä¸åˆ°è¢«å¼•入的 makefile“%sâ€ã€‚ä¿¡æ¯è¯·æ±‚åˆå§‹åŒ–æˆåŠŸä¸­æ–­æ— æ•ˆçš„å‡½æ•°å称:%s函数“%2$sâ€çš„æœ€å¤šå‚æ•°æ•°é‡ (%1$u) 无效函数“%2$sâ€çš„æœ€å°‘傿•°æ•°é‡ (%1$u) 无效Jobserver 客户端(文件æè¿°ç¬¦ %d,%d) Jobserver 客户端(信å·é‡ %s) Jobserver æ§½ä½æ•°é™åˆ¶ä¸º %d å·²æ€æ­»æ´»è·ƒå­è¿›ç¨‹ %p (%s) PID %s %s è´Ÿè½½=%lu/%lu=%.0f%%, 已加载的对象 %s 未声明为 GPL 兼容正从 %2$s åŠ è½½ç¬¦å· %1$s 正在寻找包å«ä¸­é—´æ–‡ä»¶â€œ%sâ€çš„规则。 正在为“%sâ€å¯»æ‰¾éšå«è§„则。 正在为“%sâ€å¯»æ‰¾å½’æ¡£æˆå‘˜éšå«è§„则。 Make æƒé™Makefile “%sâ€å¯èƒ½å¾ªçŽ¯ï¼›ä¸ä¼šé‡æ–°æ‰§è¡Œå®ƒã€‚ 找ä¸åˆ° makefile “%sâ€ä¸¤æ¬¡æŒ‡æ˜Žæ¥è‡ªæ ‡å‡†è¾“入的 makefile。由于 always-make 标志所以制作“%sâ€ã€‚ 畸形的针对目标的标é‡å®šä¹‰æˆå‘˜â€œ%sâ€%s: %ld 字节于 %ld (%ld)。 å¿…é¡»é‡æ–°åˆ¶ä½œç›®æ ‡â€œ%sâ€ã€‚ 无找ä¸åˆ°å…³äºŽâ€œ%sâ€çš„éšå«è§„则。 ä¸éœ€è¦é‡æ–°åˆ¶ä½œç›®æ ‡â€œ%sâ€æ²¡æœ‰å…³äºŽâ€œ%sâ€çš„é…æ–¹ï¼Œå¹¶ä¸”没有实际改å˜çš„å‰æã€‚ 无目标没有指明目标并且找ä¸åˆ° makefile对“%sâ€æ— éœ€åšä»»ä½•事。获得至进程 %p (%s) 的标记。 选项: 本平å°ä¸æ”¯æŒå¹¶è¡Œä»»åŠ¡ (-j)。电æºå¤±æ•ˆå‰æâ€œ%sâ€æ¯”目标“%sâ€æ–°ã€‚ å‰æâ€œ%sâ€æ¯”目标“%sâ€æ—§ã€‚ å‰æâ€œ%sâ€å¯¹ç›®æ ‡â€œ%sâ€æ¥è¯´ä»…ç”¨äºŽæŒ‡å®šæ‰§è¡Œé¡ºåº (order-only) 。 目标“%2$sâ€çš„å‰æâ€œ%1$sâ€ä¸å­˜åœ¨ã€‚ 测试时钟超市正删除文件“%sâ€ã€‚ å°†å­è¿›ç¨‹ %p (%s) PID %s%s 放入链。 é€€å‡ºé‡æ–°æ‰§è¡Œ[%u]:正在读入 makefile “%sâ€æ­£åœ¨è¯»å…¥ makefiles... 正在中止失败的å­è¿›ç¨‹ %p PID %s %s 正在中止获胜的å­è¿›ç¨‹ %p PID %s %s 最近已å°è¯•过更新文件“%sâ€å¹¶å¤±è´¥ã€‚ “%sâ€çš„命令酿–¹è¢«å¿½ç•¥ï¼Œè½¬è€Œä½¿ç”¨â€œ%sâ€çš„。关于文件“%sâ€çš„命令酿–¹é€šè¿‡éšå«è§„则æœç´¢è€Œæ‰¾åˆ°ï¼Œå‘½ä»¤é…方行数太多 (%ud)“%sâ€çš„命令酿–¹æ­£åœ¨è¢«æ‰§è¡Œã€‚ 关于文件“%sâ€çš„命令酿–¹åœ¨ %s:%lu 处指定,递归å˜é‡â€œ%sâ€ï¼ˆæœ€ç»ˆå°†ä¼šï¼‰å¼•ç”¨è‡ªèº«é‡æ–°æ‚凑=%u, æ‹’ç»ä¸å¯èƒ½çš„éšå«å‰æâ€œ%sâ€ã€‚ æ‹’ç»ä¸å¯èƒ½çš„è§„åˆ™å‰æâ€œ%sâ€ã€‚ 为å­è¿›ç¨‹ %p (%s) 释放令牌 (token)。 从链中删除å­è¿›ç¨‹ %p PID %s%s。 正在删除中间文件... 报告错误到 é‡ç½®ä¸ºå•ä»»åŠ¡æ¨¡å¼ (-j1)。资æºä¸¢å¤±SIGPHONESIGWIND段错误跳过 Makefile“%sâ€ä¸­çš„ UTF-8 BOM 跳过 Makefile 缓冲区中的 UTF-8 BOM 主干太长:'%s%.*s'. ä»ç„¶åœ¨æ›´æ–°æ–‡ä»¶â€œ%sâ€ã€‚ å·²åœæ­¢å·²åœæ­¢ (ä¿¡å·)å·²åœæ­¢ (tty 输入)å·²åœæ­¢ (tty 输出)釿–°åˆ¶ä½œç›®æ ‡æ–‡ä»¶â€œ%sâ€æˆåŠŸã€‚ 䏿”¯æŒè½¯é“¾æŽ¥ï¼šç¦ç”¨ -L。目标“%sâ€æ˜¯åŒå†’å·ç›®æ ‡å¹¶ä¸”æ²¡æœ‰å‰æã€‚ 由于错误目标“%sâ€å¹¶æœªé‡æ–°åˆ¶ä½œã€‚目标文件“%sâ€éœ€è¦ä»¥ -q 选项釿–°åˆ¶ä½œã€‚ 已终止本平å°ä¸æ”¯æŒâ€œloadâ€æ“作。正在制作“%sâ€çš„å‰æã€‚ 跟踪/断点陷阱å°è¯•éšå«å‰æâ€œ%sâ€ã€‚ 用主干“%.*sâ€å°è¯•åŒ¹é…æ¨¡å¼è§„则。 å°è¯•è§„åˆ™å‰æâ€œ%sâ€ã€‚ 更新目标.... 正在更新 makefile.... 紧急 I/O æ¡ä»¶ç”¨æ³•:%s [选项] [目标] ... 用户æƒé™ç”¨æˆ·å®šä¹‰ä¿¡å· 1ç”¨æˆ·å®šä¹‰ä¿¡å· 2使用关于“%sâ€çš„默认命令。 使用“%sâ€çš„é»˜è®¤é…æ–¹ã€‚ 虚拟时钟超时警告:文件“%sâ€çš„ä¿®æ”¹æ—¶é—´åœ¨æœªæ¥ %s ç§’åŽçª—å£å·²æ”¹å˜è¯•å›¾ä½¿ç”¨ä¸æ”¯æŒçš„功能:“%sâ€è‡ªåŠ¨ä½†â€œ%sâ€çŽ°åœ¨è¢«çœ‹åšâ€œ%sâ€çš„åŒä¸€ä¸ªæ–‡ä»¶ã€‚无法为æ‚å‡‘è¡¨åˆ†é… %lu 字节: 内存耗尽无法将åŒå†’å·â€œ%sâ€é‡å‘½å为å•冒å·â€œ%sâ€æ— æ³•å°†å•冒å·â€œ%sâ€é‡å‘½å为åŒå†’å·â€œ%sâ€æ— æ³•实施负载é™åˆ¶ï¼šæ— æ³•在本æ“作系统中实施负载é™åˆ¶close:%s:%så‘½ä»¤è¡Œæ­£åœ¨åˆ›å»ºä»»åŠ¡ç®¡é“æ­£åˆ›å»º jobserver ä¿¡å·é‡ï¼šï¼ˆé”™è¯¯ %ld:%s)默认正在å¤åˆ¶ä»»åŠ¡ç®¡é“空字符串是无效的文件å空å˜é‡å环境-e 指定的环境å˜é‡ä¸è¯¥å‡ºçŽ°çš„â€œ%sâ€åœ¨â€œ%sâ€æŒ‡ä»¤ä¹‹åŽå«æœ‰ä¸è¯¥å‡ºçŽ°çš„æ–‡å­—â€œendefâ€æŒ‡ä»¤åŽå«æœ‰ä¸è¯¥å‡ºçŽ°çš„æ–‡å­—â€œendefâ€æŒ‡ä»¤åŽå«æœ‰ä¸è¯¥å‡ºçŽ°çš„æ–‡å­—file:无效文件(file)æ“作:%sfile:缺少文件åfileï¼šå¤ªå¤šå‚æ•°find_and_set_shell() 路径æœç´¢ç»“果设置 default_shell = %s find_and_set_shell() 设置 default_shell = %s “wordâ€å‡½æ•°çš„ç¬¬ä¸€ä¸ªå‚æ•°å¿…须大于 0fopen (临时文件)fwrite (临时文件)æˆç»„的目标必须æä¾›ä¸€ä¸ªé…æ–¹guile: 正求值 '%s' guile: 正拓展 '%s' åˆå§‹åŒ–任务æœåŠ¡å™¨ç®¡é“函数“%2$sâ€çš„傿•°æ•°é‡ (%1$d) ä¸å¤Ÿå†…éƒ¨é”™è¯¯ï¼šéžæ³• --jobserver-auth 验è¯å­—符串“%sâ€å†…部错误:无法打开 jobserver ä¿¡å·é‡â€œ%sâ€ï¼šï¼ˆé”™è¯¯ %ld:%s)æ¡ä»¶ä¸­å«æœ‰æ— æ•ˆè¯­æ³•任务æœåŠ¡å™¨å…³é—­ä»»åŠ¡æœåŠ¡å™¨ç®¡é“lbr$ini_control() å¤±è´¥ï¼Œè¿”å›žçŠ¶æ€ = %dlbr$set_modules() èŽ·å–æ¨¡å—ä¿¡æ¯å¤±è´¥ï¼Œè¿”å›žçŠ¶æ€ = %dmake 已中止的å­è¿›ç¨‹ pid %s,ä»åœ¨ç­‰å¾… pid %s makefileé—æ¼â€œendefâ€ï¼Œæœªç»ˆæ­¢çš„“defineâ€é—æ¼â€œendifâ€é…方之å‰é—æ¼äº†è§„则缺失分隔符分隔符缺失 (你大概想用 TABï¼Œè€Œä¸æ˜¯å…«ä¸ªç©ºæ ¼)æ— ç›®æ ‡åŒ¹é…æ··å’Œçš„éšå«å’Œæ™®é€šè§„则混和的éšå«å’Œé™æ€æ¨¡å¼è§„åˆ™å¤šä¸ªç›®æ ‡åŒ¹é…æ— æ²¡æœ‰å‰©ä½™çš„æ–‡ä»¶å¥æŸ„: 无法å¤åˆ¶æ ‡å‡†é”™è¯¯ æ²¡æœ‰å‰©ä½™çš„æ–‡ä»¶å¥æŸ„: 无法å¤åˆ¶æ ‡å‡†è¾“å…¥ æ²¡æœ‰å‰©ä½™çš„æ–‡ä»¶å¥æŸ„: 无法å¤åˆ¶æ ‡å‡†è¾“出 “wordâ€å‡½æ•°çš„ç¬¬ä¸€ä¸ªå‚æ•°ä¸æ˜¯æ•°å­—“wordlistâ€å‡½æ•°çš„ç¬¬ä¸€ä¸ªå‚æ•°ä¸æ˜¯æ•°å­—“wordlistâ€å‡½æ•°çš„ç¬¬äºŒä¸ªå‚æ•°ä¸æ˜¯æ•°å­—æ¯ä¸ªæ¡ä»¶åªèƒ½æœ‰ä¸€ä¸ªâ€œelseâ€open: %s: %sä¾èµ–æ— æ³•åœ¨é…æ–¹è„šæœ¬ä¸­å®šä¹‰process_easy() å¯åŠ¨è¿›ç¨‹å¤±è´¥ (e=%ld) pselect 任务管é“读å–任务管é“read:%s:%sé…æ–¹åœ¨ç¬¬ä¸€ä¸ªç›®æ ‡å‰å¼€å§‹é‡Šæ”¾ jobserver ä¿¡å·é‡ï¼šï¼ˆé”™è¯¯ %ld:%s)信å·é‡æˆ–å­è¿›ç¨‹ç­‰å¾…:(错误 %ld:%s)spawnvpe: 环境å˜é‡ç©ºé—´å¯èƒ½ä¼šè€—å°½sys$search() 失败并返回 %d 目标“%sâ€ä¸åŒ¹é…目标模å¼ç›®æ ‡â€œ%sâ€åœ¨åŒä¸€ä¸ªè§„则中给出了多次目标文件“%sâ€å«æœ‰ : å’Œ :: ä¸¤ç§æ¡ç›®ç›®æ ‡æ¨¡å¼ä¸å«æœ‰â€œ%%â€â€œ%s%sâ€é€‰é¡¹éœ€è¦éžç©ºå­—ç¬¦ä¸²å‚æ•°â€œ-%câ€é€‰é¡¹éœ€è¦æ­£æ•´æ•°å‚æ•°VMS ç³»ç»Ÿä¸Šä¸æ”¯æŒ touch å½’æ¡£æˆå‘˜touch:“%sâ€ä¸æ˜¯åˆæ³•的归档文件touch:归档文件“%sâ€ä¸å­˜åœ¨touch:“%sâ€ä¸Šçš„ ar_member_touch 的返回ç ä¸å½“touch:在“%2$sâ€ä¸­ä¸å­˜åœ¨æˆå‘˜â€œ%1$sâ€æ— æ³•打开库“%sâ€ä»¥å¯»æ‰¾æˆå‘˜ï¼ŒçŠ¶æ€ %d在本平å°ä¸Šæœªå®žçŽ°ï¼šå‡½æ•°â€œ%sâ€æœªçŸ¥çš„调试级别定义“%sâ€ä¸æ˜Žè¾“å‡ºåŒæ­¥ç±»åž‹â€œ%sâ€æœªçŸ¥çš„ä¿¡å·åˆ é™¤ (临时文件):对函数“%sâ€çš„æœªç»ˆæ­¢çš„è°ƒç”¨ï¼šé—æ¼â€œ%câ€æœªç»ˆæ­¢çš„å˜é‡å¼•用警告:检测到时钟错误。您的构建版本å¯èƒ½æ˜¯ä¸å®Œæ•´çš„。警告: å­ make 中强制 -j%d: é‡ç½® jobserver 模å¼ã€‚警告: å­ make 中强制 -j%d: é‡ç½® jobserver 模å¼ã€‚警告:é‡åˆ°äº† NUL 字符;忽略行的剩余部分警告:忽略关于目标“%sâ€çš„æ—§é…方警告: jobserver ä¸å¯ç”¨: 正使用 -j1。添加 “+†到父 make 的规则。警告:覆盖关于目标“%sâ€çš„组æˆå‘˜è­¦å‘Šï¼šè¦†ç›–关于目标“%sâ€çš„é…æ–¹è­¦å‘Šï¼šæœªå®šä¹‰çš„å˜é‡â€œ%.*sâ€windows32_openpipe(): process_init_fd() 失败 windows32_openpipe: DuplicateHandle(Err) 失败 (e=%ld) windows32_openpipe: DuplicateHandle(In) 失败 (e=%ld) 写错误: 标准输出写入任务æœåС噍write: %s: %smake-4.3/po/boldquot.sed0000644000175000017500000000033113611136462012162 00000000000000s/"\([^"]*\)"/“\1â€/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“â€/""/g s/“/“/g s/â€/â€/g s/‘/‘/g s/’/’/g make-4.3/po/cs.gmo0000644000175000017500000013117113611136532010752 00000000000000Þ•®Œ Aü$$+$&J$q$$!Š$-¬$Ú$ ì$- %;%'Q%#y%% ´%Â%à%Pù%;J&"†&©& Å&tæ&L['P¨'Dù'9>(Mx(@Æ(o)Gw)o¿)P/*l€*Fí*J4+€+9,C:,f~,_å,;E-:-O¼-J .}W.uÕ.~K/>Ê/M 0CW02›0FÎ0I1;_1 ›1¥1"Â1 å1ò1 22&2 ?2J2e2x2 Š2”2£2¬2%½2ã27ì2$333C3/[3‹3¤3¼3Ö3(ô34&24*Y4&„4+«4×4#ì4#5)45-^5,Œ5¹5Ò5$ç59 6F63e6™61¶6è677/7!F7$h7=7GË7G89[8•8ž8"¥8È8å8;9!?9a9+}9©9¼9Ö9,ð9:%;:,a:-Ž: ¼:&Ý:;#;C;!c;.…;´;Ä;ÍÙ;§</Ç<÷<& = 4=%U={=›=¯=1Ä= ö=>#>#=>La>6®>å>6?A8?>z? ¹?+Ã?*ï?@ 2@<@1D@2v@ ©@µ@Î@"ã@*A1A@A PAqA A ™A£A»A ÛA èA%õAB+;B$gBŒB¦B ÅBÏBéBC+CHC!eC ‡C”C®C ·CÅCÎCâCD$D&_0X_‰_=©_;ç_:#`1^`,`H½`4a*;a"fa/‰a8¹a7òa*b>b NbŠ\b(çc7d1Hdzd ‰d”d;³dïd eA(e!je8Œe.Åeôef-!fOfjmfMØf6&g#]g(g}ªgM(hIvhFÀh:i|BiG¿izjK‚joÎj>kvÎkIElFl‹ÖlAbm@¤mmåmiSn@½n:þn9oO¹o¨ p¢²p¨UqJþq†IrFÐr0sHHsO‘s=ás t(*t#Stwt‡t t¯tËtétøtu2u HuVu muyu$ˆu­u6¶uíuvv@9vzv’v¨vÅv%äv w/%w1Uw4‡w3¼w"ðw,x,@x+mx-™x0Çxøxy).yCXy#œy=Ày,þyF+z.rz+¡zÍz#Ýz;{A={E{[Å{[!|H}|Æ|Ï|*Ö|'}()}BR}$•}$º}/ß}~#%~"I~3l~- ~,Î~4û~400e+–Â)ß) €03€=d€¢€¶€çЀ/¸Gè0‚.F‚+u‚)¡‚(Ë‚ô‚ ƒ9,ƒfƒxƒ$•ƒ(ºƒZãƒ>>„"}„D „Nå„A4… v…,€…(­…&Ö… ý… †6,†6c†š†«†Ɔ.߆-‡<‡"X‡&{‡!¢‡ć.à‡1ˆ!Aˆcˆvˆ*‘ˆ*¼ˆ6çˆ*‰I‰&g‰މ©‰ ɉ"ê‰4 Š!BŠ,dБСŠÀŠ*ÉŠôŠ‹*‹I‹*d‹:‹*Ê‹7õ‹-Œ#JŒ*nŒ5™Œ(ÏŒFøŒ9?,y3¦&Ú-Ž/ŽJŽhŽzŽ*™ŽÄŽäŽ÷Ž 6)6`*—#Â,æ!# E8fŸ5¼-ò; ‘\‘7l‘¤‘0Ä‘8õ‘:.’,i’'–’¾’7Ç’*ÿ’N*“y“7ˆ“"À“$ã“”?”W”8t”6­”<ä”1!•)S•}•5›•Ñ•á•ú•–1*–0\–0–F¾–I—)O—+y—0¥—:Ö—˜9'˜6a˜$˜˜1½˜&*¦™!Ñ™ó™š-,š.Zš-‰š+·š'ãš › › 5›"V›8y›7²›Bê›1-œB_œ¢œ@µœ&öœ"/@3p,¤Ñ$ëž(0žYž+ož+›ž2Çž+úž*&ŸLQŸžŸ1ºŸ ìŸ@ùŸD: Z ZÚ "5¡>X¡—¡©¡¾¡5ס ¢¢0-¢^¢ z¢†¢¤¢/º¢3ê¢2£(Q£z£"˜£M»£2 ¤;<¤x¤‘¤(«¤Ô¤ô¤!¥54¥>j¥Q©¥û¥¦-¦0C¦Lt¦;Á¦ý¦-§4§G§f§<y§¶§,ȧ2õ§(¨ ;¨DE¨EЍGШ.©2G©2z©#­©Ñ©'ä©6 ª"Cªfª}ª$ª3²ª2æª8«$R«&w«;ž«2Ú« ¬C,¬?p¬<°¬'í¬!­N7­,†­M³­6®,8®.e®”®¦®6® ù®F¯Ka¯S­¯;°6=°jt°=ß°,±*J±0u±J¦±?ñ±"1²T²j²’’ž­u› ÙfŠœ´hcÓ='6݉#‰€“þEAf—)«$­¡É ~‘à k©µŒ9|jè2e-S„&vs•Ü`N¡H !š¨' ¦1uD§ô{}&.Y« Ïÿê?V¶50 mO¾v…JõK‡سöºxWQ ]tr–9 {C4ƒB±ÂMT†,\Z0š˰q:¨ó œU71ÌrHÛl™<:øò¿3B¢|/æjcP¸¯g5²Š—ç(+Áb-[+@†}~ŽzÊ™bFYä>n›"*]€,˜íÑlðQ =£‹Ldaã`8Ð÷åZÍ”#©@%ÎgnMÃsª_ÕD\S®ùTR„^7‚Ò ‹ _kEKž¬Vh6$¤/dwŸŸXúƒN4R¢^xtëLª®Ö»‘q*Åâ>W[ì§¹‡Ô·˜ÇF;!3PJe•y‚ÆoG¥ ;¥¼£I”ŽpˆéĈ"ß×GÚŒ“zÀo)ÞmUXa8¤Aý¬ip2(ïO–IiȦ…y½.ñîü%áCûw<? # %u 'vpath' search paths. # %u implicit rules, %u (%.1f%%) terminal. # %u pattern-specific variable values # Directories # Files # Finished Make data base on %s # General ('VPATH' variable) search path: # # Implicit Rules # Make data base, printed on %s # No general ('VPATH' variable) search path. # No implicit rules. # No pattern-specific variable values. # Pattern-specific Variable Values # VPATH Search Paths # Variables # files hash-table stats: # %s No strcache buffers %s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu B %s strcache performance: lookups = %lu / hit rate = %lu%% Counted %d args in failed launch This program built for %s This program built for %s (%s) Unhandled exception filter called from program %s ExceptionCode = %lx ExceptionFlags = %lx ExceptionAddress = 0x%p --debug[=FLAGS] Print various types of debugging information. --no-print-directory Turn off -w, even if it was turned on implicitly. --no-silent Echo recipes (disable --silent mode). --trace Print tracing information. --warn-undefined-variables Warn when an undefined variable is referenced. -B, --always-make Unconditionally make all targets. -C DIRECTORY, --directory=DIRECTORY Change to DIRECTORY before doing anything. -E STRING, --eval=STRING Evaluate STRING as a makefile statement. -I DIRECTORY, --include-dir=DIRECTORY Search DIRECTORY for included makefiles. -L, --check-symlink-times Use the latest mtime between symlinks and target. -O[TYPE], --output-sync[=TYPE] Synchronize output of parallel jobs by TYPE. -R, --no-builtin-variables Disable the built-in variable settings. -S, --no-keep-going, --stop Turns off -k. -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE Consider FILE to be infinitely new. -b, -m Ignored for compatibility. -d Print lots of debugging information. -e, --environment-overrides Environment variables override makefiles. -f FILE, --file=FILE, --makefile=FILE Read FILE as a makefile. -h, --help Print this message and exit. -i, --ignore-errors Ignore errors from recipes. -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no arg. -k, --keep-going Keep going when some targets can't be made. -l [N], --load-average[=N], --max-load[=N] Don't start multiple jobs unless load is below N. -n, --just-print, --dry-run, --recon Don't actually run any recipe; just print them. -o FILE, --old-file=FILE, --assume-old=FILE Consider FILE to be very old and don't remake it. -p, --print-data-base Print make's internal database. -q, --question Run no recipe; exit status says if up to date. -r, --no-builtin-rules Disable the built-in implicit rules. -s, --silent, --quiet Don't echo recipes. -t, --touch Touch targets instead of remaking them. -v, --version Print the version number of make and exit. -w, --print-directory Print the current directory. Date %s Ignoring VPATH name '%s'. uid = %d, gid = %d, mode = 0%o. (built-in): (core dumped) (don't care) (from '%s', line %lu) (from '%s', line %lu): (ignored) (name might be truncated) (no default goal) (no ~ expansion) (remote) (search path) files, impossibilities impossibilities in %lu directories. so far.# A default, MAKEFILES, or -include/sinclude makefile.# Also makes:# Builtin rule# Command line target.# Dependencies recipe running (THIS IS A BUG).# Failed to be updated.# File does not exist.# File has been updated.# File has not been updated.# File is an intermediate prerequisite.# File is very old.# Implicit rule search has been done.# Implicit rule search has not been done.# Implicit/static pattern stem: '%s' # Invalid value in 'command_state' member!# Last modified %s # Modification time never checked.# Needs to be updated (-q is set).# Phony target (prerequisite of .PHONY).# Precious file (prerequisite of .PRECIOUS).# Recipe currently running (THIS IS A BUG).# Successfully updated.# recipe to execute# %s (device %d, inode [%d,%d,%d]): # %s (device %d, inode [%d,%d,%d]): could not be opened. # %s (device %ld, inode %ld): # %s (device %ld, inode %ld): could not be opened. # %s (key %s, mtime %I64u): # %s (key %s, mtime %I64u): could not be opened. # %s: could not be stat'd. # No 'vpath' search paths.# Not a target:# hash-table stats: # # variable set hash-table stats: $SHELL changed (was '%s', now '%s') %s (line %d) Bad shell context (!unixy && !batch_mode_shell) %s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B %s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B %s other used: total = %lu B / count = %lu / avg = %lu B %s%s: %s%s: %s%s: Entering an unknown directory %s: Entering directory '%s' %s: Field '%s' not cached: %s%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p) %s: Leaving an unknown directory %s: Leaving directory '%s' %s: Timestamp out of range; substituting %s%s: failed to load%s: illegal option -- %c %s: invalid option -- %c %s: option '%c%s' doesn't allow an argument %s: option '%s' is ambiguous %s: option '%s' requires an argument %s: option '--%s' doesn't allow an argument %s: option '-W %s' doesn't allow an argument %s: option '-W %s' is ambiguous %s: option requires an argument -- %c %s: target '%s' does not exist%s: unrecognized option '%c%s' %s: unrecognized option '--%s' %s: update target '%s' due to: %s%s: user %lu (real %lu), group %lu (real %lu) %sBuilt for %s %sBuilt for %s (%s) %sLicense GPLv3+: GNU GPL version 3 or later %sThis is free software: you are free to change and redistribute it. %sThere is NO WARRANTY, to the extent permitted by law. %sNo rule to make target '%s'%s%sNo rule to make target '%s', needed by '%s'%s%s[%s: %s] Error %d%s%s[%u]: Entering an unknown directory %s[%u]: Entering directory '%s' %s[%u]: Leaving an unknown directory %s[%u]: Leaving directory '%s' '%s' is up to date.'override' directive*** Archive member '%s' may be bogus; not deleted*** Break. *** Deleting file '%s'*** Deleting intermediate file '%s'*** Waiting for unfinished jobs....*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp*** [%s] Archive member '%s' may be bogus; not deleted*** [%s] Deleting file '%s'*** mixed implicit and normal rules: deprecated syntax-O[TYPE] (--output-sync[=TYPE]) is not configured for this build.-warning, you may have to re-enable CTRL-Y handling from DCL. . Stop. .DEFAULT_GOAL contains more than one target.LIBPATTERNS element '%s' is not a pattern; using VPATH name '%s'AbortedAccess violation: read operation at address 0x%p Access violation: write operation at address 0x%p Alarm clockAppend %.*s and cleanup Append output to %s Avoiding implicit rule recursion. BUG: num_pattern_rules is wrong! %u != %uBUILTIN CD %s Bad system callBatch file contents: @echo off Batch file contents:%s %s Broken pipeBus errorCPU time limit exceededCannot create a temporary file Child accessChild exitedCircular %s <- %s dependency dropped.Cleaning up temp batch file %s Cleaning up temp batch file %s failed (%d) Cleaning up temporary batch file %s Collisions=%lu/%lu=%.0f%%Considering target file '%s'. ContinuedCould not restore stderr Could not restore stdin Could not restore stdout Couldn't change back to original directory.CreatePipe() failed (e=%ld) Creating temporary batch file %s Current timeCustoms won't export: %s DCL: %s Danger signalEMT trapEmpty function nameEmpty symbol name for load: %sExecuting %s instead Failed to load symbol %s from %s: %sFailed to open global symbol table: %sFailed to remake makefile '%s'.Failed to remake target file '%s'. File '%s' does not exist. File '%s' was considered already. File size limit exceededFinished prerequisites of target file '%s'. Finished updating file '%s'. Floating point co-processor not availableFloating point exceptionFound an implicit rule for '%s'. Found prerequisite '%s' as VPATH '%s' Function name too long: %sGiving up on target file '%s'. HangupI/O possibleIOT trapIllegal InstructionIncluded makefile '%s' was not found.Information requestInitialized accessInterruptInvalid function name: %sInvalid maximum argument count (%u) for function %sInvalid minimum argument count (%u) for function %sJobserver client (fds %d,%d) Jobserver client (semaphore %s) Jobserver slots limited to %d KilledLive child %p (%s) PID %s %s Load=%lu/%lu=%.0f%%, Loaded object %s is not declared to be GPL compatibleLoading symbol %s from %s Looking for a rule with intermediate file '%s'. Looking for an implicit rule for '%s'. Looking for archive-member implicit rule for '%s'. Make accessMakefile '%s' might loop; not remaking it. Makefile '%s' was not foundMakefile from standard input specified twice.Making '%s' due to always-make flag. Malformed target-specific variable definitionMember '%s'%s: %ld bytes at %ld (%ld). Must remake target '%s'. NoNo implicit rule found for '%s'. No need to remake target '%s'No recipe for '%s' and no prerequisites actually changed. No targetsNo targets specified and no makefile foundNothing to be done for '%s'.Obtained token for child %p (%s). Options: Parallel jobs (-j) are not supported on this platform.Power failurePrerequisite '%s' is newer than target '%s'. Prerequisite '%s' is older than target '%s'. Prerequisite '%s' is order-only for target '%s'. Prerequisite '%s' of target '%s' does not exist. Profiling timer expiredPruning file '%s'. Putting child %p (%s) PID %s%s on the chain. QuitRe-executing[%u]:Reading makefile '%s'Reading makefiles... Reaping losing child %p PID %s %s Reaping winning child %p PID %s %s Recently tried and failed to update file '%s'. Recipe for '%s' will be ignored in favor of the one for '%s'.Recipe for file '%s' was found by implicit rule search,Recipe has too many lines (%ud)Recipe of '%s' is being run. Recipe was specified for file '%s' at %s:%lu,Recursive variable '%s' references itself (eventually)Rehash=%u, Rejecting impossible implicit prerequisite '%s'. Rejecting impossible rule prerequisite '%s'. Released token for child %p (%s). Removing child %p PID %s%s from chain. Removing intermediate files... Report bugs to Resetting to single job (-j1) mode.Resource lostSIGPHONESIGWINDSegmentation faultSkipping UTF-8 BOM in makefile '%s' Skipping UTF-8 BOM in makefile buffer Stem too long: '%s%.*s'. Still updating file '%s'. StoppedStopped (signal)Stopped (tty input)Stopped (tty output)Successfully remade target file '%s'. Symbolic links not supported: disabling -L.Target '%s' is double-colon and has no prerequisites. Target '%s' not remade because of errors.Target file '%s' needs to be remade under -q. TerminatedThe 'load' operation is not supported on this platform.The prerequisites of '%s' are being made. Trace/breakpoint trapTrying implicit prerequisite '%s'. Trying pattern rule with stem '%.*s'. Trying rule prerequisite '%s'. Updating goal targets.... Updating makefiles.... Urgent I/O conditionUsage: %s [options] [target] ... User accessUser defined signal 1User defined signal 2Using default commands for '%s'. Using default recipe for '%s'. Virtual timer expiredWarning: File '%s' has modification time %s s in the futureWindow changedattempt to use unsupported feature: '%s'automaticbut '%s' is now considered the same file as '%s'.can't allocate %lu bytes for hash table: memory exhaustedcan't rename double-colon '%s' to single-colon '%s'can't rename single-colon '%s' to double-colon '%s'cannot enforce load limit: cannot enforce load limits on this operating systemclose: %s: %scommand linecreating jobs pipecreating jobserver semaphore: (Error %ld: %s)defaultduping jobs pipeempty string invalid as file nameempty variable nameenvironmentenvironment under -eextraneous '%s'extraneous text after '%s' directiveextraneous text after 'define' directiveextraneous text after 'endef' directivefile: invalid file operation: %sfile: missing filenamefile: too many argumentsfind_and_set_shell() path search set default_shell = %s find_and_set_shell() setting default_shell = %s first argument to 'word' function must be greater than 0fopen (temporary file)fwrite (temporary file)grouped targets must provide a recipeguile: Evaluating '%s' guile: Expanding '%s' init jobserver pipeinsufficient number of arguments (%d) to function '%s'internal error: invalid --jobserver-auth string '%s'internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)invalid syntax in conditionaljob server shut downjobserver pipelinelbr$ini_control() failed with status = %dlbr$set_module() failed to extract module info, status = %dmake reaped child pid %s, still waiting for pid %s makefilemissing 'endef', unterminated 'define'missing 'endif'missing rule before recipemissing separatormissing separator (did you mean TAB instead of 8 spaces?)missing target patternmixed implicit and normal rulesmixed implicit and static pattern rulesmultiple target patternsnono more file handles: could not duplicate stderr no more file handles: could not duplicate stdin no more file handles: could not duplicate stdout non-numeric first argument to 'word' functionnon-numeric first argument to 'wordlist' functionnon-numeric second argument to 'wordlist' functiononly one 'else' per conditionalopen: %s: %sprerequisites cannot be defined in recipesprocess_easy() failed to launch process (e=%ld) pselect jobs piperead jobs piperead: %s: %srecipe commences before first targetrelease jobserver semaphore: (Error %ld: %s)semaphore or child process wait: (Error %ld: %s)spawnvpe: environment space might be exhaustedsys$search() failed with %d target '%s' doesn't match the target patterntarget '%s' given more than once in the same ruletarget file '%s' has both : and :: entriestarget pattern contains no '%%'the '%s%s' option requires a non-empty string argumentthe '-%c' option requires a positive integer argumenttouch archive member is not available on VMStouch: '%s' is not a valid archivetouch: Archive '%s' does not existtouch: Bad return code from ar_member_touch on '%s'touch: Member '%s' does not exist in '%s'unable to open library '%s' to lookup member status %dunimplemented on this platform: function '%s'unknown debug level specification '%s'unknown output-sync type '%s'unknown signalunlink (temporary file): unterminated call to function '%s': missing '%c'unterminated variable referencewarning: Clock skew detected. Your build may be incomplete.warning: -j%d forced in makefile: resetting jobserver mode.warning: -j%d forced in submake: resetting jobserver mode.warning: NUL character seen; rest of line ignoredwarning: ignoring old recipe for target '%s'warning: jobserver unavailable: using -j1. Add '+' to parent make rule.warning: overriding group membership for target '%s'warning: overriding recipe for target '%s'warning: undefined variable '%.*s'windows32_openpipe(): process_init_fd() failed windows32_openpipe: DuplicateHandle(Err) failed (e=%ld) windows32_openpipe: DuplicateHandle(In) failed (e=%ld) write error: stdoutwrite jobserverwrite: %s: %sProject-Id-Version: make 4.2.93 Report-Msgid-Bugs-To: bug-make@gnu.org PO-Revision-Date: 2020-01-03 17:47+01:00 Last-Translator: Petr Pisar Language-Team: Czech Language: cs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. $ Vyhledávacích cest „vpath“: %u # %u implicitních pravidel, %u (%.1f %%) koncových # Hodnot promÄ›nných specifických pro vzor: %u # Adresáře # Soubory # Konec databáze maku v %s # Obecná vyhledávací cesta (promÄ›nná „VPATH“): # # Implicitní pravidla # Databáze maku vypsána v %s # Žádná obecná vyhledávací cesta (promÄ›nná „VPATH“). # Žádná implicitní pravidla. # Žádné hodnoty promÄ›nných specifických pro vzor. # Hodnoty promÄ›nných specifických pro vzor # Vyhledávací cesty VPATH # PromÄ›nné # Statistika haÅ¡ovací tabulky souborů: # %s Žádná keÅ¡ Å™etÄ›zců %s užito z keÅ¡e Å™etÄ›zců: %lu (%lu) / Å™etÄ›zců = %lu / úložiÅ¡tÄ› = %lu B / prům. = %lu B %s vytížení keÅ¡e Å™etÄ›zců: dotazů = %lu / pomÄ›r nálezů = %lu %% NapoÄítáno %d argumentů v selhaném spuÅ¡tÄ›ní Tento program byl sestaven pro %s Tento program byl sestaven pro %s (%s) Filtr neoÅ¡etÅ™ených výjimek zavolán z programu %s Kód výjimky = %lx Příznaky výjimky = %lx Adresa výjimky = 0x%p --debug[=PŘÃZNAKY] Vypisuje ladicí údaje rozliÄných druhů. --no-print-directory Vypne -w, i kdyby byl zapnut implicitnÄ›. --no-silent Opisuje návod (vypne režim --silent). --trace Vypisuje trasovací údaje. --warn-undefined-variables Upozorní, kdykoliv je odkazováno na nedefinovanou promÄ›nnou. -B, --always-make BezpodmíneÄnÄ› vyrobí vÅ¡echny cíle. -C ADRESÃŘ, --directory=ADRESÃŘ PÅ™ed dÄ›láním Äehokoliv se pÅ™epne do ADRESÃŘE. -E ŘETÄšZEC, --eval=ŘETÄšZEC Vyhodnotí ŘETÄšZEC jako kód makefilu. -I ADRESÃŘ, --include-dir=ADRESÃŘ Vložené makefily hledá v ADRESÃŘI. -L, --check-symlink-times Použije nejnovÄ›jší Äas zmÄ›ny obsahu z Äasů symbolických odkazů a cíle. -O[DRUH], --output-sync[=DRUH] Synchronizuje výstup souběžných úloh podle DRUHU. -R, --no-builtin-variables Vypne vestavÄ›né nastavení promÄ›nných. -S, --no-keep-going, --stop Vypne -k. -W SOUBOR, --what-if=SOUBOR, --new-file=SOUBOR, --assume-new=SOUBOR Považuje SOUBOR za nekoneÄnÄ› nový. -b, -m Ignoruje se kvůli kompatibilitÄ›. -d Vypisuje mnoho ladicích údajů. -e, --environment-overrides PromÄ›nné prostÅ™edí pÅ™ebijí ty z makefilu. -f SOUBOR, --file=SOUBOR, --makefile=SOUBOR NaÄte SOUBOR coby makefile. -h, --help Vypíše tuto zprávu a skonÄí. -i, --ignore-errors Ignoruje chyby z návodů. -j [N], --jobs[=N] Dovolí nejvíce N úloh najednou; nekoneÄno úloh bez argumentu. -k, --keep-going PokraÄuje, když nÄ›které cíle nelze vyrobit. -l [N], --load-average[=N], --max-load[=N] NespouÅ¡tí souběžné úlohy, dokud zátěž neklesne pod N. -n, --just-print, --dry-run, --recon Ve skuteÄnosti nevykoná žádný návod, pouze jej vypíše. -o SOUBOR, --old-file=SOUBOR, --assume-old=SOUBOR Považuje SOUBOR za velmi starý a znovu jej nevyrobí. -p, --print-data-base Vypíše vnitÅ™ní databázi programu make. -q, --question Nespustí žádný návod. Návratový kód Å™ekne, jestli je aktuální. -r, --no-builtin-rules Vypne vestavÄ›ná implicitní pravidla. -s, --silent, --quiet Neopisuje návod. -t, --touch Namísto výroby cílů jim zmÄ›ní Äas. -v, --version Vypíše Äíslo verze programu make a skonÄí. -w, --print-directory Vypisuje aktuální adresář. Datum %s Ignoruje se název „%s“ z VPATH. UID = %d, GID = %d, práva = 0%o (vestavÄ›ný): (obraz pamÄ›ti uložen) (nestarat se) (z „%s“, řádek %lu) (z „%s“, řádek %lu): (ignorováno) (název může být zkrácen) (žádný výchozí cíl) (žádný expanze ~) (vzdálený) (vyhledávací cesta) souborů, nemožností nemožností v %lu adresářích. zatím.# Default, MAKEFILES nebo -include/sinclude makefile.# Rovněž vyrábí:# VestavÄ›né pravidlo# Cíl příkazové řádky.# Návod pro závislosti se právÄ› vykonává (TOTO JE CHYBA).# Aktualizace selhala.# Soubor neexistuje.# Soubor byl aktualizován.# Soubor nebyl aktualizován.# Soubor je mezilehlá prerekvizita.# Soubor je velmi starý.# Hledalo se za pomoci implicitních pravidel.# Nehledalo se za pomoci implicitních pravidel.# KoÅ™en implicitního/statického vzoru: „%s“ # Neplatná hodnota v Älenu „command_state“!# Obsah naposledy zmÄ›nÄ›n v %s # ÄŒas zmÄ›ny obsahu se nikdy nekontroluje.# Je tÅ™eba aktualizovat (-q je nastaveno).# FaleÅ¡ný cíl (prerekvizita k .PHONY).# Cenný soubor (prerekvizita k .PRECIOUS).# Návod se právÄ› vykonává (TOTO JE CHYBA).# ÚspěšnÄ› aktualizováno.# spustitelný návod# %s (zařízení %d, iuzel [%d,%d,%d]): # %s (zařízení %d, iuzel [%d,%d,%d]): nebylo možné otevřít. # %s (zařízení %ld, iuzel %ld): # %s (zařízení %ld, iuzel %ld): nebylo možné otevřít. # %s (klÃ­Ä %s, Äas zmÄ›ny obsahu %I64u): # %s (klÃ­Ä %s, Äas zmÄ›ny obsahu %I64u): nebylo možné otevřít. # %s: nebylo možné nad ním zavolat stat(). # Žádné vyhledávací cesty „vpath“.# Není cílem:# Statistika haÅ¡ovací tabulky: # # statistika haÅ¡ovací tabulky pro množinu promÄ›nných: PromÄ›nná $SHELL se zmÄ›nila (byla „%s“, nyní je „%s“) %s (řádek %d) Chybný kontext shellu (!unixy && !batch_mode_shell) %s souÄasná keÅ¡: velikost = %hu B / užito = %hu B / poÄet = %hu / prům. = %u B %s volno dalších: celkem = %lu B / max. = %lu B / min. = %lu B / prům. = %hu B %s užito dalších: celkem = %lu B / poÄet = %lu / prům. = %lu B %s%s: %s%s: %s%s: Vstupuje se do neznámého adresáře %s: Vstupuje se do adresáře „%s“ %s: Položka „%s“ není v keÅ¡i: %s%s: Zachyceno pÅ™eruÅ¡ení/výjimka (kód = 0x%lx, adresa = 0x%p) %s OpouÅ¡tí se neznámý adresář %s: OpouÅ¡tí se adresář „%s“ %s: ÄŒasový údaj mimo rozsah, nahrazuje se %s%s: zavedení selhalo%s: zakázaný pÅ™epínaÄ – %c %s: neplatný pÅ™epínaÄ – %c %s: pÅ™epínaÄ â€ž%c%s“ nepÅ™ipouÅ¡tí argument %s: pÅ™epínaÄ â€ž%s“ není jednoznaÄný %s: pÅ™epínaÄ â€ž%s“ vyžaduje argument %s: pÅ™epínaÄe „--%s“ nepÅ™ipouÅ¡tí argument %s: pÅ™epínaÄ â€ž-W %s“ nepÅ™ipouÅ¡tí argument %s: pÅ™epínaÄ â€ž-W %s“ není jednoznaÄný %s: pÅ™epínaÄ vyžaduje argument – %c %s: cíl „%s“ neexistuje%s: nerozpoznaný pÅ™epínaÄ â€ž%c%s“ %s: nerozpoznaný pÅ™epínaÄ â€ž--%s“ %s: aktualizovat cíl „%s“ potÅ™ebný pro %s%s: uživatel %lu (reálný %lu), skupina %lu (reálná %lu) %sSestaveno pro %s %s Sestaveno pro %s (%s) %sLicence GPLv3+: GNU GPL verze 3 nebo novÄ›jší %sToto je svobodné programové vybavení: máte právo jej mÄ›nit a dále šířit. %sNesposkytuje se ŽÃDNà ZÃRUKA, jak jen zákon dovoluje. %sŽádné pravidlo jak vyrobit cíl „%s“%s%sŽádné pravidlo jak vyrobit cíl „%s“ potÅ™ebný pro „%s“%s%s[%s: %s] Chyba %d%s%s[%u]: Vstupuje se do neznámého adresáře %s[%u]: Vstupuje se do adresáře „%s“ %s[%u]: OpouÅ¡tí se neznámý adresář %s[%u]: OpouÅ¡tí se adresář „%s“ „%s“ je aktuální.klíÄové slovo „override“*** Prvek archivu „%s“ ne možná chybný, nesmazáno*** PÅ™eruÅ¡eno. *** Maže se soubor „%s“Maže se mezilehlý soubor „%s“ *** ÄŒeká se na nedokonÄené úlohy…*** Pozor: Soubor .LOW_RESOLUTION_TIME „%s“ má Äasový údaj ve vysokém rozliÅ¡ení*** [%s] Prvek archivu „%s“ je možná chybný, nesmazáno*** [%s] Maže se soubor „%s“*** smíšená implicitní a normální pravidla: zastaralá skladbaPÅ™epínaÄ -O[DRUH] (--output-sync[=DRUH]) není v tomto sestavení zahrnut.-pozor, možná byste mÄ›li znovu povolit obsluhu CTRL-Y z DCL. . Konec. .DEFAULT_GOAL obsahuje více než jeden cílPrvek .LIBPATTERNS „%s“ není vzorem; použije se název „%s“ z VPATHNeúspěšnÄ› ukonÄen (SIGABRT)PoruÅ¡ení přístupu: operace Ätení na adrese 0x%p PoruÅ¡ení přístupu: operace zápisu na adrese 0x%p Budík (SIGALRM)PÅ™ipojit %.*s a uklidit Výstup pÅ™ipojen k %s Zabraňuje se rekurzi implicitního pravidla. CHYBA: num_pattern_rules je chybný! %u != %uVESTAVÄšNà PŘÃKAZ CD %s Chybné volání systému (SIGSYS)Obsah dávkového souboru: @echo off Obsah dávkového souboru:%s %s Roura pÅ™eruÅ¡ena (SIGPIPE)Chyba na sbÄ›rnici (neplatná adresa) (SIGBUS)PÅ™ekroÄen Äasový limit pro procesor (SIGXCPU)DoÄasný soubor nelze vytvoÅ™it Přístup potomkemPotomek skonÄil (SIGCHLD)Kruhová závislost „%s ↠%s zahozena.Uklízí se doÄasný dávkový soubor %s Úklid doÄasného dávkového souboru %s selhal (%d) DoÄasný dávkový soubor %s se uklízí Kolizí = %lu/%lu = %.0f %%Zvažuje se cílový soubor „%s“. Je pokraÄováno (SIGCONT)Chybový výstup nelze obnovit Standardní vstup nelze obnovit Standardní výstup nelze obnovit Nebylo možné se vrátit do původního adresáře.CreatePipe() selhalo (chyba=%ld) Vytváří se doÄasný dávkový soubor %s Aktuální ÄasCustoms nebude exportovat: %s DCL: %s NebezpeÄí nedostatku pamÄ›ti (SIGDANGER)EMT past (SIGEMT)Prázdný název funkcePokus zavést prázdný název symbolu: %sMísto toho se spustí %s Symbol %s z %s se nepodaÅ™ilo zavést: %sNepodaÅ™ilo se otevřít tabulku globálních symbolů: %sVýroba nového makefilu „%s“ selhala.Cílový soubor „%s“ nebylo možné znovu vyrobit. Soubor „%s“ neexistuje. Soubor „%s“ již byl uvážen. PÅ™ekroÄen limit délky souboru (SIGXFS2)Prerekvizity cílového souboru „%s“ dokonÄeny. Aktualizace soubor „%s“ dokonÄena. Koprocesor pro práci s pohyblivou řádkou není dostupný (SIGNOFP)Výjimka práce s pohyblivou řádovou Äárkou (SIGFPE)Nalezeno implicitní pravidlo pro „%s“. Nalezena prerekvizita „%s“ jako VPATH „%s“ Název funkce je příliÅ¡ dlouhý: %sVýroba cílového souboru „%s“ vzdána. Odpojen terminál (SIGHUP)Vstup/Výstup možný (SIGIO)IOT past (SIGIOT)Nedovolená instrukce (SIGILL)Vložený makefile „%s“ nebyl nalezen.Žádost o informaci (SIGINFO)Přístup zahájenPÅ™eruÅ¡ení (SIGINT)Neplatný název funkce: %sNeplatný maximální poÄet argumentů (%u) funkce %sNeplatný minimální poÄet argumentů (%u) funkce %sKlient správce úloh (deskriptory %d,%d) Klient správce úloh (semafor %s) Místa ve správci úloh jsou omezena na %d Zabit (SIGKILL)Živý potomek %p (%s) PID %s %s Zátěž = %lu/%lu = %.0f %%, Zavedený objekt %s není veden jako sluÄitelný s GPLZavádí se symbol %s z %s Hledá se pravidlo s mezilehlým souborem „%s“. Hledá se implicitní pravidlo pro „%s“. Hledá se implicitní pravidlo prvku archivu pro „%s“. Přístup makemMakefile „%s“ může cyklit, nebude znovu vyroben. Makefile „%s“ nebyl nalezenMakefile na standardním vstupu uveden dvakrát.Vyrábí se „%s“ kvůli pÅ™epínaÄi --always-make. ChybÄ› utvoÅ™ená definice promÄ›nné specifické pro cílPrvek „%s“%s: %'ld bajtů at %ld (%ld). Cíl „%s“ je tÅ™eba znovu vyrobit. ŽádnýPro „%s“ nenalezeno žádné implicitní pravidlo. Cíl „%s“ není tÅ™eba znovu vyrábÄ›tPro „%s“ neexistuje návod a žádná prerekvizita se vskutku nezmÄ›nila. Žádné cíleNezadány žádné cíle a žádné makefily nenalezenyPro „%s“ nebude nic udÄ›láno.Získán token pro potomka %p (%s). PÅ™epínaÄe: Na této platformÄ› nejsou paralelní úlohy (-j) podporovány.Výpadek napájení (SIGPWR)Prerekvizita „%s“ je novÄ›jší než cíl „%s“. Prerekvizita „%s“ je starší než cíl „%s“. Prerekvizita „%s“ pro cíl „%s“ je jen o poÅ™adí. Prerekvizita „%s“ cíle „%s“ neexistuje. Profilovací ÄasovaÄ vyprÅ¡el (SIGPROF)Uklízí se soubor „%s“. Do Å™etÄ›zce se pÅ™idává potomek %p (%s) PID %s%s. Konec (SIGQUIT)Znovu se spouÅ¡tí [%u]:ÄŒte se makefile „%s“Čtou se makefily… Uklízí se prohrávající potomek %p PID %s %s Uklízí se vyhrávající potomek %p PID %s %s Nedávná aktualizace souboru „%s“ selhala. Návod pro „%s“ bude ignorován ve prospÄ›ch návodu pro „%s“.Návod pro soubor „%s“ byl nalezen hledáním implicitních pravidel,Návod má příliÅ¡ mnoho řádků (%ud)PrávÄ› se vykonává návod pro „%s“. Návod byl urÄen pro soubor „%s“ v %s:%lu,Rekurzivní promÄ›nná „%s“ odkazuje na sebe (nakonec)PÅ™ehaÅ¡ováno = %u, Zamítá se nemožná implicitní prerekvizita „%s“. Zamítá se nemožná prerekvizita pravidla „%s“. UvolnÄ›n token pro potomka %p (%s). Z řetÄ›zce se odstraňuje potomek %p PID %s%s. Odstraňují se mezilehlé soubory… Chyby v programu hlaste anglicky na . Nedostatky v pÅ™ekladu hlaste Äesky na . Návrat k jednoúlohovému režimu (-j1).ProstÅ™edek byl ztracen (SIGLOST)ZmÄ›na stavu linky (SIGPHONE)Okno se zmÄ›nilo (SIGWIND)NeoprávnÄ›ný přístup do pamÄ›ti (SIGSEGV)PÅ™eskakuje se UTF-8 BOM v makefilu „%s“ PÅ™eskakuje se UTF-8 BOM v pamÄ›ti makefilu KoÅ™en je příliÅ¡ dlouhý: „%s%.*s“. Stále se aktualizuje soubor „%s“. Pozastaven (SIGTSTP)Pozastaven (SIGSTOP)Pozastaven (vstup TTY) (SIGTTIN)Pozastaven (výstup TTY) (SIGTTOU)Cílový soubor „%s“ byl úspěšnÄ› znovu vyroben. Symbolické odkazy nejsou podporovány: vypíná se -L.Cíl „%s“ je dvojdvouteÄkový a nemá žádnou prerekvizitu. Cíl „%s“ nebyl kvůli chybám znovu vyroben.Cílový soubor „%s“ je tÅ™eba znovu vyrobit za použití -q. UkonÄen (SIGTERM)Na této platformÄ› není operace zavedení (load) podporována.Prerekvizity „%s“ se vyrábÄ›jí. Trasovací/ladící past (SIGTRAP)Zkouší se implicitní prerekvizita „%s“. Zkouší se pravidlo vzoru s koÅ™enem „%.*s“. Zkouší se prerekvizita pravidla „%s“. Aktualizují se cíle… Soubory makefile se aktualizují… Naléhavá I/O situace (SIGURG)Použití: %s [PŘEPÃNAÄŒE] [CÃLE]… Přístup uživatelemUživatelem definovaný signál 1 (SIGUSR1)Uživatelem definovaný signál 2 (SIGUSR2)Pro „%s„ se použijí se výchozí příkazy. Pro „%s“ se použije výchozí návod. Virtuální ÄasovaÄ vyprÅ¡el (SIGVTALRM)Pozor: Soubor „%s“ má Äas zmÄ›ny obsahu %s s smÄ›rem do budoucnostiOkno se zmÄ›nilo (SIGWINCH)pokus použít nepodporovanou vlastnost: „%s“automatickáale „%s“ se nyní považuje za soubor totožný s „%s“.nelze alokovat %lu bajtů na haÅ¡ovací tabulku: paměť vyÄerpána„%s“ s dvojitou dvojteÄkou nelze pÅ™ejmenovat na „%s“ s jednoduchou dvojteÄkou„%s“ s jednoduchou dvojteÄkou nelze pÅ™ejmenovat na „%s“ s dvojitou dvojteÄkouomezení zátěže nelze vynutit: na tomto operaÄním systému nelze vynutit omezení zátěžezavÅ™ení: %s: %spříkazový řádekvytváření roury úlohvytváření semaforu správce úloh: (Chyba %ld: %s)výchozíduplikace roury úlohprázdný Å™etÄ›zec není platný název souboruprázdný název promÄ›nnéprostÅ™edíprostÅ™edí z pÅ™epínaÄe -enadbyteÄný „%s“nadbyteÄný text po klíÄovém slovu „%s“nadbyteÄný text po klíÄovém slovu „define“nadbyteÄný text po klíÄovém slovu „endef“soubor: neplatná operace na souboru: %ssoubor: chybí název souborusoubor: příliÅ¡ mnoho argumentůfind_and_set_shell() pÅ™i prohledávání cesty nastavila default_shell = %s find_and_set_shell() nastavuje default_shell = %s první argument funkce „word“ musí být vetší než 0fopen (doÄasný soubor)fwrite (doÄasný soubor)seskupené cíle musí poskytovat návodguile: Vyhodnocuje se „%s“ guile: Expanduje se „%s“ inicializace roury správce úlohnedostateÄný poÄet argumentů (%d) funkce „%s“vnitÅ™ní chyba: neplatný Å™etÄ›zec --jobserver-auth „%s“vnitÅ™ní chyba: nelze otevřít semafor správce úloh „%s“: (Chyba %ld: %s)neplatná syntaxe podmínkysprávce úloh vypnutkolona správce úlohfunkce lbr$ini_control() selhala se stavem = %dfunkce lbr$set_module() nedokázala vytáhnout údaje o modulu, status = %dmake uklidil potomka s PID %s, stále se Äeká na PID %s makefilechybí „endef“, neukonÄený „define“chybí „endif“pÅ™ed návodem chybí pravidlochybí oddÄ›lovaÄchybí oddÄ›lovaÄ (mysleli jste tabulátor místo 8 mezer?)chybí vzor cílesmíšené implicitní a normální pravidlasmíšené implicitní a statická pravidla vzorůvíce vzorů cíležádný nedostatek deskriptorů souboru: chybový výstup nelze zduplikovat nedostatek deskriptorů souboru: standardní vstup nelze zduplikovat nedostatek deskriptorů souboru: standardní výstup nelze zduplikovat neÄíselný první argument funkce „word“neÄíselný první argument funkce „wordlist“neÄíselný druhý argument funkce „wordlist“pouze jeden „else“ na podmínkuotevÅ™ení: %s: %sprerekvizitu nelze definovat v návoduprocess_easy() nedokázala spustit proces (chyba=%ld) volání pselect nad rourou úlohÄtení z roury úlohÄtení: %s: %snávod zahájen pÅ™ed prvním cílemuvolnÄ›ní semaforu správce úloh: (Chyba %ld: %s)Äekání na semafor nebo potomka: (Chyba %ld: %s)spawnvpe: možná byl vyÄerpán prostor pro prostÅ™edívolání sys$search() selhalo s %d cíl „%s“ neodpovídá vzoru cílecíl „%s“ zadán více než jednou ve stejném pravidlecílový soubor „%s“ obsahuje jak :, tak i ::vzor cíle neobsahuje „%%“pÅ™epínaÄe „%s%s“ vyžaduje neprázdný Å™etÄ›zcový argumentpÅ™epínaÄ â€ž-%c“ vyžaduje kladný celoÄíselný argumentnastavení Äasu zmÄ›ny prvku archivu není na VMS dostupnétouch: „%s“ není platným archivemtouch: Archiv „%s“ neexistujetouch: Chybný návratový kód z funkce ar_member_touch volané nad „%s“touch: Prvek „%s“ v „%s“ neexistujenení možné otevřít knihovnu „%s“ potÅ™ebnou k najití stav prvku %dna této platformÄ› neimplementováno: funkce „%s“zadána neznámá úroveň ladÄ›ní „%s“neznámý druh synchronizace výstupu „%s“neznámý signálunlink (doÄasný soubor): neukonÄené volání funkce „%s“: chybí „%c“neukonÄený odkaz na promÄ›nnoupozor: ZjiÅ¡tÄ›n posun hodin. VaÅ¡e sestavení možná nebude úplné.pozor: -j%d vnuceno v souboru makefile: režim správce úloh se resetuje.pozor: -j%d vnuceno podřízenému programu make: režim správce úloh se restuje.pozor: zaznamenán znak NUL, zbytek řádku bude ignorovánpozor: starý návod pro cíl „%s“ bude ignorovánpozor: správce úloh není dostupný: použije se -j1. Do nadřízeného pravidla maku pÅ™idejte „+“.pozor: Älenství ve skupinÄ› pro cíl „%s“ bude pÅ™ebitopozor: návod pro cíl „%s“ bude pÅ™ebitpozor: nedefinovaná promÄ›nná „%.*s“windows32_openpipe(): process_init_fd() selhalo windows32_openpipe: DuplicateHandle(chybový výstup) selhalo (chyba=%ld) windows32_openpipe: DuplicateHandle(vstup) selhalo (chyba=%ld) chyba zápisu: standardní výstupzápis správce úlohzápis: %s: %smake-4.3/po/Makevars0000644000175000017500000000726013611136510011332 00000000000000# Makefile variables for PO directory in any package using GNU gettext. # Usually the message domain is the same as the package name. DOMAIN = $(PACKAGE) # These two variables depend on the location of this directory. subdir = po top_builddir = .. # These options get passed to xgettext. XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ \ \ --from-code=UTF-8\ --flag=_:1:pass-c-format\ --flag=N_:1:pass-c-format\ --flag=DB:2:c-format --flag=DBF:2:c-format --flag=DBS:2:c-format\ --flag=O:3:c-format --flag=OSN:3:c-format --flag=ONS:3:c-format\ --flag=OS:3:c-format --flag=OSS:3:c-format --flag=OSSS:3:c-format\ --flag=ON:3:c-format --flag=ONN:3:c-format\ $${end_of_xgettext_options+} # This is the copyright holder that gets inserted into the header of the # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding # package. (Note that the msgstr strings, extracted from the package's # sources, belong to the copyright holder of the package.) Translators are # expected to transfer the copyright for their translations to this person # or entity, or to disclaim their copyright. The empty string stands for # the public domain; in this case the translators are expected to disclaim # their copyright. COPYRIGHT_HOLDER = Free Software Foundation, Inc. # This tells whether or not to prepend "GNU " prefix to the package # name that gets inserted into the header of the $(DOMAIN).pot file. # Possible values are "yes", "no", or empty. If it is empty, try to # detect it automatically by scanning the files in $(top_srcdir) for # "GNU packagename" string. PACKAGE_GNU = # This is the email address or URL to which the translators shall report # bugs in the untranslated strings: # - Strings which are not entire sentences, see the maintainer guidelines # in the GNU gettext documentation, section 'Preparing Strings'. # - Strings which use unclear terms or require additional context to be # understood. # - Strings which make invalid assumptions about notation of date, time or # money. # - Pluralisation problems. # - Incorrect English spelling. # - Incorrect formatting. # It can be your email address, or a mailing list address where translators # can write to without being subscribed, or the URL of a web page through # which the translators can contact you. MSGID_BUGS_ADDRESS = bug-make@gnu.org # This is the list of locale categories, beyond LC_MESSAGES, for which the # message catalogs shall be used. It is usually empty. EXTRA_LOCALE_CATEGORIES = # This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt' # context. Possible values are "yes" and "no". Set this to yes if the # package uses functions taking also a message context, like pgettext(), or # if in $(XGETTEXT_OPTIONS) you define keywords with a context argument. USE_MSGCTXT = no # These options get passed to msgmerge. # Useful options are in particular: # --previous to keep previous msgids of translated messages, # --quiet to reduce the verbosity. MSGMERGE_OPTIONS = # These options get passed to msginit. # If you want to disable line wrapping when writing PO files, add # --no-wrap to MSGMERGE_OPTIONS, XGETTEXT_OPTIONS, and # MSGINIT_OPTIONS. MSGINIT_OPTIONS = # This tells whether or not to regenerate a PO file when $(DOMAIN).pot # has changed. Possible values are "yes" and "no". Set this to no if # the POT file is checked in the repository and the version control # program ignores timestamps. PO_DEPENDS_ON_POT = yes # This tells whether or not to forcibly update $(DOMAIN).pot and # regenerate PO files on "make dist". Possible values are "yes" and # "no". Set this to no if the POT file and PO files are maintained # externally. DIST_DEPENDS_ON_UPDATE_PO = yes make-4.3/po/tr.po0000644000175000017500000017133413611136531010632 00000000000000# Turkish translations for GNU Make messages. # Copyright (C) 2006 Free Software Foundation, Inc. # Nilgün Belma Bugüner , 2001, ..., 2006. # msgid "" msgstr "" "Project-Id-Version: make 3.81\n" "Report-Msgid-Bugs-To: bug-make@gnu.org\n" "POT-Creation-Date: 2020-01-19 15:34-0500\n" "PO-Revision-Date: 2006-04-23 08:45+0300\n" "Last-Translator: Nilgün Belma Bugüner \n" "Language-Team: Turkish \n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "X-Generator: KBabel 1.9.1\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/ar.c:46 #, fuzzy, c-format msgid "attempt to use unsupported feature: '%s'" msgstr "desteklenmeyen özelliÄŸi kullanmaya çalışıyor: `%s'" #: src/ar.c:123 #, c-format msgid "touch archive member is not available on VMS" msgstr "VMS'de iÅŸe yaramayan arÅŸiv üyesine dokunup geçiyor" #: src/ar.c:147 #, fuzzy, c-format msgid "touch: Archive '%s' does not exist" msgstr "Dokunulup geçildi: ArÅŸiv `%s' yok" #: src/ar.c:150 #, fuzzy, c-format msgid "touch: '%s' is not a valid archive" msgstr "Dokunulup geçildi: `%s' geçerli bir arÅŸiv deÄŸil" #: src/ar.c:157 #, fuzzy, c-format msgid "touch: Member '%s' does not exist in '%s'" msgstr "Dokunulup geçildi: Üye `%s', `%s' içinde yok" #: src/ar.c:164 #, fuzzy, c-format 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ı" #: src/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" #: src/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" #: src/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ı" #: src/arscan.c:944 #, fuzzy, c-format msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n" msgstr "Üye `%s'%s: %ld bayt %ld 'de (%ld).\n" #: src/arscan.c:945 msgid " (name might be truncated)" msgstr "(isim kırpılmış olmalı)" #: src/arscan.c:947 #, c-format msgid " Date %s" msgstr " Tarih %s" #: src/arscan.c:948 #, c-format msgid " uid = %d, gid = %d, mode = 0%o.\n" msgstr " Kull-kim = %d, Grup-kim = %d, kip = 0%o.\n" #: src/commands.c:403 #, c-format msgid "Recipe has too many lines (%ud)" msgstr "" #: src/commands.c:504 msgid "*** Break.\n" msgstr "*** Bırakıldı.\n" #: src/commands.c:628 #, fuzzy, c-format msgid "*** [%s] Archive member '%s' may be bogus; not deleted" msgstr "*** [%s] ArÅŸiv üyesi `%s' sahte olabilir; silinmedi" #: src/commands.c:632 #, fuzzy, c-format msgid "*** Archive member '%s' may be bogus; not deleted" msgstr "*** ArÅŸiv üyesi `%s' sahte olabilir; silinmedi" #: src/commands.c:646 #, fuzzy, c-format msgid "*** [%s] Deleting file '%s'" msgstr "*** [%s] `%s' dosyası siliniyor" #: src/commands.c:648 #, fuzzy, c-format msgid "*** Deleting file '%s'" msgstr "*** `%s' dosyası siliniyor" #: src/commands.c:684 #, fuzzy msgid "# recipe to execute" msgstr "# çalıştırma komutları" #: src/commands.c:687 msgid " (built-in):" msgstr " (paket içinde):" #: src/commands.c:689 #, fuzzy, c-format msgid " (from '%s', line %lu):\n" msgstr " (`%s'den, satır %lu):\n" #: src/dir.c:1073 msgid "" "\n" "# Directories\n" msgstr "" "\n" "# Dizin\n" #: src/dir.c:1085 #, c-format msgid "# %s: could not be stat'd.\n" msgstr "# %s: durumlanamadı.\n" #: src/dir.c:1089 #, fuzzy msgid "# %s (key %s, mtime %I64u): could not be opened.\n" msgstr "# %s (anahtar (key) %s, deÄŸiÅŸiklik tarihi (mtime) %d): açılamadı.\n" #: src/dir.c:1094 #, 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" #: src/dir.c:1099 #, 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" #: src/dir.c:1126 #, fuzzy msgid "# %s (key %s, mtime %I64u): " msgstr "# %s (anahtar (key) %s, deÄŸiÅŸiklik tarihi (mtime) %d):" #: src/dir.c:1131 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): " msgstr "# %s (aygıt %d, i-düğüm [%d,%d,%d]):" #: src/dir.c:1136 #, c-format msgid "# %s (device %ld, inode %ld): " msgstr "# %s (aygıt %ld, i-düğüm %ld):" #: src/dir.c:1142 src/dir.c:1163 msgid "No" msgstr "Hayır" #: src/dir.c:1145 src/dir.c:1166 msgid " files, " msgstr " dosyaları," #: src/dir.c:1147 src/dir.c:1168 msgid "no" msgstr "hayır" #: src/dir.c:1150 msgid " impossibilities" msgstr "olanaksızlıklar" #: src/dir.c:1154 msgid " so far." msgstr " çok uzak." #: src/dir.c:1171 #, c-format msgid " impossibilities in %lu directories.\n" msgstr " %lu dizinde olanaksızlıklar.\n" #: src/expand.c:125 #, fuzzy, c-format msgid "Recursive variable '%s' references itself (eventually)" msgstr "Çevrimsel deÄŸiÅŸken `%s' tekrar kendine bağıntılı (sonuçta)" #: src/expand.c:271 #, c-format msgid "unterminated variable reference" msgstr "sonlandırılmamış deÄŸiÅŸken bağıntısı" #: src/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," #: src/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," #: src/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." #: src/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." #: src/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" #: src/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" #: src/file.c:408 #, fuzzy, c-format msgid "*** Deleting intermediate file '%s'" msgstr "*** Aracı dosya `%s' siliniyor" #: src/file.c:412 #, c-format msgid "Removing intermediate files...\n" msgstr "Aracı dosyalar siliniyor...\n" #: src/file.c:872 msgid "Current time" msgstr "Åžu an" #: src/file.c:876 #, c-format msgid "%s: Timestamp out of range; substituting %s" msgstr "%s: Tarih damgası kapsamdışı; yerine %s kullanılıyor" #: src/file.c:1016 msgid "# Not a target:" msgstr "# Bir hedef deÄŸil:" #: src/file.c:1021 msgid "# Precious file (prerequisite of .PRECIOUS)." msgstr "# Kıymetli dosya (.PRECIOUS önceden gerekliliÄŸi)." #: src/file.c:1023 msgid "# Phony target (prerequisite of .PHONY)." msgstr "# Sahte hedef (.PHONY önceden gerekliliÄŸi)." #: src/file.c:1025 #, fuzzy msgid "# Command line target." msgstr "# Komut-satırı hedefi." #: src/file.c:1027 msgid "# A default, MAKEFILES, or -include/sinclude makefile." msgstr "# Bir öntanımlı,MAKEFILES veya -include/sinclude makefile." #: src/file.c:1029 #, fuzzy msgid "# Builtin rule" msgstr "" "\n" "# Örtük kural yok." #: src/file.c:1031 msgid "# Implicit rule search has been done." msgstr "# Örtük kural araÅŸtırması yapılmıştı." #: src/file.c:1032 msgid "# Implicit rule search has not been done." msgstr "# Örtük kural araÅŸtırması yapılmamıştı." #: src/file.c:1034 #, fuzzy, c-format msgid "# Implicit/static pattern stem: '%s'\n" msgstr "# Örtük/deÄŸiÅŸmeyen kalıp kökü: `%s'\n" #: src/file.c:1036 msgid "# File is an intermediate prerequisite." msgstr "" "# Orta seviyede önceden gerekli bir dosya (öncelikle gerekli dosyalara " "aracılık eden dosya)" #: src/file.c:1040 msgid "# Also makes:" msgstr "# OluÅŸtursa da:" #: src/file.c:1046 msgid "# Modification time never checked." msgstr "# DeÄŸiÅŸiklik zamanı hiç kontrol edilmedi." #: src/file.c:1048 msgid "# File does not exist." msgstr "# Dosya yok." #: src/file.c:1050 msgid "# File is very old." msgstr "# Dosya çok eski." #: src/file.c:1055 #, c-format msgid "# Last modified %s\n" msgstr "# Son deÄŸiÅŸiklik tarihi %s\n" #: src/file.c:1058 msgid "# File has been updated." msgstr "# Dosya güncelleÅŸtirilmiÅŸti." #: src/file.c:1058 msgid "# File has not been updated." msgstr "# Dosya güncelleÅŸtirilmemiÅŸti." #: src/file.c:1062 #, fuzzy msgid "# Recipe currently running (THIS IS A BUG)." msgstr "# Komutlar ÅŸu an iÅŸlemlerini sürdürüyor (BU BİR YAZILIM HATASI)." #: src/file.c:1065 #, 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)." #: src/file.c:1074 msgid "# Successfully updated." msgstr "# Tamamen güncellendi." #: src/file.c:1078 msgid "# Needs to be updated (-q is set)." msgstr "# GüncellenmiÅŸ olması gerekir (-q verildi)." #: src/file.c:1081 msgid "# Failed to be updated." msgstr "# GüncellenmiÅŸ olamadı." #: src/file.c:1086 #, fuzzy msgid "# Invalid value in 'command_state' member!" msgstr "# `command_state' üyesinde geçersiz deÄŸer!" #: src/file.c:1105 msgid "" "\n" "# Files" msgstr "" "\n" "# Dosyalar" #: src/file.c:1109 msgid "" "\n" "# files hash-table stats:\n" "# " msgstr "" "\n" "# dosyaların hash tablosu durumları:\n" "# " #: src/file.c:1119 #, c-format msgid "%s: Field '%s' not cached: %s" msgstr "" #: src/function.c:794 #, fuzzy msgid "non-numeric first argument to 'word' function" msgstr "`word' iÅŸlevinde sayısal olmayan ilk argüman" #: src/function.c:799 #, fuzzy, c-format 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ı" #: src/function.c:819 #, fuzzy msgid "non-numeric first argument to 'wordlist' function" msgstr "`wordlist' iÅŸlevinde sayısal olmayan ilk argüman" #: src/function.c:821 #, fuzzy msgid "non-numeric second argument to 'wordlist' function" msgstr "`wordlist' iÅŸlevinde sayısal olmayan ikinci argüman" #: src/function.c:1533 #, 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" #: src/function.c:1557 #, 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" #: src/function.c:1564 #, c-format msgid "CreatePipe() failed (e=%ld)\n" msgstr "CreatePipe() baÅŸarısız (e=%ld)\n" #: src/function.c:1572 #, fuzzy, c-format msgid "windows32_openpipe(): process_init_fd() failed\n" msgstr "windows32_openpipe (): process_init_fd() baÅŸarısız\n" #: src/function.c:1857 #, c-format msgid "Cleaning up temporary batch file %s\n" msgstr "Geçici komut-listesi (batch) dosyası %s temizleniyor\n" #: src/function.c:2230 src/function.c:2255 #, c-format msgid "file: missing filename" msgstr "" #: src/function.c:2234 src/function.c:2265 #, fuzzy, c-format msgid "open: %s: %s" msgstr "%s: %s" #: src/function.c:2242 #, fuzzy, c-format msgid "write: %s: %s" msgstr "yazma hatası: %s" #: src/function.c:2245 src/function.c:2282 #, fuzzy, c-format msgid "close: %s: %s" msgstr "%s%s: %s" #: src/function.c:2258 #, c-format msgid "file: too many arguments" msgstr "" #: src/function.c:2277 #, fuzzy, c-format msgid "read: %s: %s" msgstr "%s: %s" #: src/function.c:2290 #, fuzzy, c-format msgid "file: invalid file operation: %s" msgstr "%s: geçersiz seçenek -- %c\n" #: src/function.c:2405 #, fuzzy, c-format msgid "insufficient number of arguments (%d) to function '%s'" msgstr "argüman sayısı (%d) `%s' iÅŸlevinde yetersiz" #: src/function.c:2417 #, fuzzy, c-format msgid "unimplemented on this platform: function '%s'" msgstr "bu platformda gerçekleÅŸtirilmemiÅŸ: iÅŸlev `%s'" #: src/function.c:2483 #, fuzzy, c-format msgid "unterminated call to function '%s': missing '%c'" msgstr "`%s' iÅŸlemine çaÄŸrı sonlandırılmamış: `%c' kayıp" #: src/function.c:2667 #, c-format msgid "Empty function name" msgstr "" #: src/function.c:2669 #, c-format msgid "Invalid function name: %s" msgstr "" #: src/function.c:2671 #, c-format msgid "Function name too long: %s" msgstr "" #: src/function.c:2674 #, fuzzy, c-format msgid "Invalid minimum argument count (%u) for function %s" msgstr "argüman sayısı (%d) `%s' iÅŸlevinde yetersiz" #: src/function.c:2677 #, fuzzy, c-format msgid "Invalid maximum argument count (%u) for function %s" msgstr "argüman sayısı (%d) `%s' iÅŸlevinde yetersiz" #: src/getopt.c:659 #, fuzzy, c-format msgid "%s: option '%s' is ambiguous\n" msgstr "%s: `%s' seçeneÄŸi belirsiz\n" #: src/getopt.c:683 #, fuzzy, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s: `--%s' seçeneÄŸi argümansız kullanılır\n" #: src/getopt.c:688 #, fuzzy, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s: seçenek `%c%s' argümansız kullanılır\n" #: src/getopt.c:705 src/getopt.c:878 #, fuzzy, c-format msgid "%s: option '%s' requires an argument\n" msgstr "%s: `%s' seçeneÄŸi bir argümanla kullanılır\n" #: src/getopt.c:734 #, fuzzy, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s: `--%s' seçeneÄŸi bilinmiyor\n" #: src/getopt.c:738 #, fuzzy, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s: `%c%s' seçeneÄŸi bilinmiyor\n" #: src/getopt.c:764 #, c-format msgid "%s: illegal option -- %c\n" msgstr "%s: kuraldışı seçenek -- %c\n" #: src/getopt.c:767 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s: geçersiz seçenek -- %c\n" #: src/getopt.c:797 src/getopt.c:927 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: seçenek bir argümanla kullanılır -- %c\n" #: src/getopt.c:844 #, fuzzy, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s: `-W %s' seçeneÄŸi belirsiz\n" #: src/getopt.c:862 #, fuzzy, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s: `-W %s' seçeneÄŸi argümansız kullanılır\n" #: src/guile.c:58 #, c-format msgid "guile: Expanding '%s'\n" msgstr "" #: src/guile.c:74 #, c-format msgid "guile: Evaluating '%s'\n" msgstr "" #: src/hash.c:50 #, fuzzy, c-format msgid "can't allocate %lu bytes for hash table: memory exhausted" msgstr "hash tablosu için %ld bayt ayrılamıyor: bellek tükendi" #: src/hash.c:280 #, fuzzy, c-format msgid "Load=%lu/%lu=%.0f%%, " msgstr "Yük=%ld/%ld=%.0f%%, " #: src/hash.c:282 #, fuzzy, c-format msgid "Rehash=%u, " msgstr "Rehash=%d, " #: src/hash.c:283 #, fuzzy, c-format msgid "Collisions=%lu/%lu=%.0f%%" msgstr "Çakışmalar=%ld/%ld=%.0f%%" #: src/implicit.c:38 #, fuzzy, c-format msgid "Looking for an implicit rule for '%s'.\n" msgstr "`%s' için bir örtük kural arıyor.\n" #: src/implicit.c:54 #, fuzzy, c-format msgid "Looking for archive-member implicit rule for '%s'.\n" msgstr "`%s' için arÅŸiv-üyesi örtük kural arıyor.\n" #: src/implicit.c:311 #, c-format msgid "Avoiding implicit rule recursion.\n" msgstr "Örtük kural çevrimi görmezden geliniyor.\n" #: src/implicit.c:484 #, c-format msgid "Stem too long: '%s%.*s'.\n" msgstr "" #: src/implicit.c:490 #, fuzzy, c-format msgid "Trying pattern rule with stem '%.*s'.\n" msgstr "`%.*s' köküyle kalıp kuralı deneniyor.\n" #: src/implicit.c:717 #, fuzzy, c-format msgid "Rejecting impossible rule prerequisite '%s'.\n" msgstr "Kural önceden gerekliliÄŸi `%s' olanaksız olduÄŸundan reddediliyor.\n" #: src/implicit.c:718 #, fuzzy, c-format msgid "Rejecting impossible implicit prerequisite '%s'.\n" msgstr "Örtük önceden gereklilik `%s' olanaksız olduÄŸundan reddediliyor.\n" #: src/implicit.c:732 #, fuzzy, c-format msgid "Trying rule prerequisite '%s'.\n" msgstr "Kural önceden gerekliliÄŸi `%s' deneniyor.\n" #: src/implicit.c:733 #, fuzzy, c-format msgid "Trying implicit prerequisite '%s'.\n" msgstr "Örtük önceden gereklilik `%s' deneniyor.\n" #: src/implicit.c:772 #, fuzzy, c-format msgid "Found prerequisite '%s' as VPATH '%s'\n" msgstr "Önceden gereklilik `%s' VPATH `%s' olarak bulundu.\n" #: src/implicit.c:786 #, fuzzy, c-format msgid "Looking for a rule with intermediate file '%s'.\n" msgstr "Aracı dosya `%s' ile bir kural arıyor.\n" #: src/job.c:370 msgid "Cannot create a temporary file\n" msgstr "Bir geçici dosya oluÅŸturulamıyor\n" #: src/job.c:548 msgid " (core dumped)" msgstr " (bellek kopyası - core dosyası - diske yazıldı)" #: src/job.c:553 #, fuzzy msgid " (ignored)" msgstr "[%s] Hata %d (yoksayıldı)" #: src/job.c:557 src/job.c:1892 #, fuzzy msgid "" msgstr " (paket içinde):" #: src/job.c:573 #, fuzzy, c-format msgid "%s[%s: %s] Error %d%s" msgstr "*** [%s] Hata %d" #: src/job.c:662 #, c-format msgid "*** Waiting for unfinished jobs...." msgstr "*** BitmemiÅŸ iÅŸler için bekliyor...." #: src/job.c:704 #, 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" #: src/job.c:706 src/job.c:900 src/job.c:1072 src/job.c:1644 #, c-format msgid " (remote)" msgstr " (karşıdan)" #: src/job.c:898 #, 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" #: src/job.c:899 #, 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" #: src/job.c:950 #, c-format msgid "Cleaning up temp batch file %s\n" msgstr "Geçici komut-listesi dosyası %s temizleniyor\n" #: src/job.c:956 #, fuzzy, c-format msgid "Cleaning up temp batch file %s failed (%d)\n" msgstr "Geçici komut-listesi dosyası %s temizleniyor\n" #: src/job.c:1071 #, 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" #: src/job.c:1120 #, fuzzy, c-format msgid "Released token for child %p (%s).\n" msgstr "Ast 0x%08lx (%s) için simge (token) kullanıma sunuldu.\n" #: src/job.c:1575 src/job.c:2487 #, 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" #: src/job.c:1579 src/job.c:2491 #, c-format msgid "" "\n" "Counted %d args in failed launch\n" msgstr "" "\n" "Sayılan %d argüman ile baÅŸarısız oldu\n" #: src/job.c:1642 #, 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" #: src/job.c:1875 #, fuzzy, c-format msgid "Obtained token for child %p (%s).\n" msgstr "Ast 0x%08lx (%s) için simge (token) saÄŸlandı.\n" #: src/job.c:1902 #, fuzzy, c-format msgid "%s: target '%s' does not exist" msgstr "Dokunulup geçildi: ArÅŸiv `%s' yok" #: src/job.c:1905 #, 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" #: src/job.c:2108 #, c-format msgid "cannot enforce load limits on this operating system" msgstr "iÅŸletim sisteminde yük sınırlarına ulaşılamadı " #: src/job.c:2110 msgid "cannot enforce load limit: " msgstr "ulaşılamayan yük sınırı: " #: src/job.c:2200 #, c-format msgid "no more file handles: could not duplicate stdin\n" msgstr "baÅŸka dosya tutucu yok: standart girdi kopyalanamadı\n" #: src/job.c:2212 #, c-format msgid "no more file handles: could not duplicate stdout\n" msgstr "baÅŸka dosya tutucu yok: standart çıktı kopyalanamadı\n" #: src/job.c:2226 #, fuzzy, c-format msgid "no more file handles: could not duplicate stderr\n" msgstr "baÅŸka dosya tutucu yok: standart girdi kopyalanamadı\n" #: src/job.c:2241 #, c-format msgid "Could not restore stdin\n" msgstr "Standart girdi eski haline getirilemedi\n" #: src/job.c:2249 #, c-format msgid "Could not restore stdout\n" msgstr "Standart çıktı eski haline getirilemedi\n" #: src/job.c:2257 #, fuzzy, c-format msgid "Could not restore stderr\n" msgstr "Standart girdi eski haline getirilemedi\n" #: src/job.c:2520 #, 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" #: src/job.c:2623 #, c-format msgid "spawnvpe: environment space might be exhausted" msgstr "spawnvpe: ortam alanı tükenmiÅŸ olabilir" #: src/job.c:2862 #, fuzzy, c-format msgid "$SHELL changed (was '%s', now '%s')\n" msgstr "$SHELL deÄŸiÅŸti (`%s' idi, ÅŸimdi `%s')\n" #: src/job.c:3300 src/job.c:3485 #, c-format msgid "Creating temporary batch file %s\n" msgstr "%s geçici komut-liste dosyasını oluÅŸturuyor\n" #: src/job.c:3308 #, c-format msgid "" "Batch file contents:\n" "\t@echo off\n" msgstr "" #: src/job.c:3497 #, c-format msgid "" "Batch file contents:%s\n" "\t%s\n" msgstr "" #: src/job.c:3605 #, 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" #: src/load.c:60 #, c-format msgid "Failed to open global symbol table: %s" msgstr "" #: src/load.c:97 #, c-format msgid "Loaded object %s is not declared to be GPL compatible" msgstr "" #: src/load.c:104 #, c-format msgid "Failed to load symbol %s from %s: %s" msgstr "" #: src/load.c:149 #, c-format msgid "Empty symbol name for load: %s" msgstr "" #: src/load.c:204 #, c-format msgid "Loading symbol %s from %s\n" msgstr "" #: src/load.c:256 #, fuzzy, c-format msgid "The 'load' operation is not supported on this platform." msgstr "Bu platformda paralel iÅŸler (-j) desteklenmiyor." #: src/main.c:335 msgid "Options:\n" msgstr "Seçenekler:\n" #: src/main.c:336 msgid " -b, -m Ignored for compatibility.\n" msgstr " -b, -m Uyumluluk için yoksayıldı.\n" #: src/main.c:338 msgid " -B, --always-make Unconditionally make all targets.\n" msgstr "" " -B, --always-make Tüm hedefler koÅŸulsuz olarak oluÅŸturulur.\n" #: src/main.c:340 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" #: src/main.c:343 msgid " -d Print lots of debugging information.\n" msgstr " -b, -m Bir sürü hata ayıklama bilgisi basar.\n" #: src/main.c:345 msgid "" " --debug[=FLAGS] Print various types of debugging information.\n" msgstr "" " --debug[=SEÇENEKLER] ÇeÅŸitli türde hata ayıklama bilgileri basar.\n" #: src/main.c:347 msgid "" " -e, --environment-overrides\n" " Environment variables override makefiles.\n" msgstr "" " -e, --environment-overrides Ortam deÄŸiÅŸkenleri makefile'ları deÄŸiÅŸtirir.\n" #: src/main.c:350 msgid "" " -E STRING, --eval=STRING Evaluate STRING as a makefile statement.\n" msgstr "" #: src/main.c:352 msgid "" " -f FILE, --file=FILE, --makefile=FILE\n" " Read FILE as a makefile.\n" msgstr "" " -f DOSYA, --file=DOSYA, --makefile=DOSYA\n" " DOSYAyı bir makefile olarak okur.\n" #: src/main.c:355 msgid " -h, --help Print this message and exit.\n" msgstr " -h, --help Bu iletiyi basar ve çıkar.\n" #: src/main.c:357 #, fuzzy msgid " -i, --ignore-errors Ignore errors from recipes.\n" msgstr " -i, --ignore-errors Komutların ürettiÄŸi hataları yoksayar.\n" #: src/main.c:359 msgid "" " -I DIRECTORY, --include-dir=DIRECTORY\n" " Search DIRECTORY for included makefiles.\n" msgstr "" " -I DİZİN, --include-dir=DİZİN\n" " Eklenecek makefile'ları DİZİNde arar.\n" #: src/main.c:362 msgid "" " -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no " "arg.\n" msgstr "" " -j [N], --jobs[=N] Bir defada N iÅŸe izin verir; argumansız iÅŸ\n" " sayısı sınırsızdır.\n" #: src/main.c:364 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" #: src/main.c:366 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" " Yük N'den az olmadıkça çoklu iÅŸler " "baÅŸlatılmaz.\n" #: src/main.c:369 msgid "" " -L, --check-symlink-times Use the latest mtime between symlinks and " "target.\n" msgstr "" " -L, --check-symlink-times sembolik baÄŸlarla hedef arasında en son mtime\n" " kullanılır\n" #: src/main.c:371 #, fuzzy 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" " Gerçekte komutlar çalıştırılmaz, gösterilir.\n" #: src/main.c:374 msgid "" " -o FILE, --old-file=FILE, --assume-old=FILE\n" " Consider FILE to be very old and don't remake " "it.\n" msgstr "" " -o DOSYA, --old-file=DOSYA, --assume-old=DOSYA\n" " DOSYAnın çok eski olduÄŸu varsayılır ve\n" " yeniden iÅŸlem yapılmaz.\n" #: src/main.c:377 msgid "" " -O[TYPE], --output-sync[=TYPE]\n" " Synchronize output of parallel jobs by TYPE.\n" msgstr "" #: src/main.c:380 msgid " -p, --print-data-base Print make's internal database.\n" msgstr " -p, --print-data-base make'in içsel veritabanını basar.\n" #: src/main.c:382 #, fuzzy msgid "" " -q, --question Run no recipe; exit status says if up to " "date.\n" msgstr "" " -q, --question Komut çalıştırmaz; güncelse çıkışta belirtir\n" #: src/main.c:384 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" #: src/main.c:386 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" #: src/main.c:388 #, fuzzy msgid " -s, --silent, --quiet Don't echo recipes.\n" msgstr " -s, --silent, --quiet Komutlar iÅŸlenirken gösterilmez.\n" #: src/main.c:390 msgid " --no-silent Echo recipes (disable --silent mode).\n" msgstr "" #: src/main.c:392 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" #: src/main.c:395 msgid " -t, --touch Touch targets instead of remaking them.\n" msgstr "" " -t, --touch Yeniden derlemek yerine hedeflere bakıp " "geçer.\n" #: src/main.c:397 #, fuzzy msgid " --trace Print tracing information.\n" msgstr " -b, -m Bir sürü hata ayıklama bilgisi basar.\n" #: src/main.c:399 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" #: src/main.c:401 msgid " -w, --print-directory Print the current directory.\n" msgstr " -w, --print-directory Kullanılan dizini basar.\n" #: src/main.c:403 msgid "" " --no-print-directory Turn off -w, even if it was turned on " "implicitly.\n" msgstr "" " --no-print-directory Dolaylı olarak açılmış olsa bile -w 'yi " "kapatır\n" #: src/main.c:405 msgid "" " -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n" " Consider FILE to be infinitely new.\n" msgstr "" " -W DOSYA, --what-if=DOSYA, --new-file=DOSYA, --assume-new=DOSYA\n" " DOSYA sonsuz yeni varsayılır.\n" #: src/main.c:408 msgid "" " --warn-undefined-variables Warn when an undefined variable is " "referenced.\n" msgstr "" " --warn-undefined-variables Atanmamış bir deÄŸiÅŸkene bağıntı yapıldığında\n" " uyarır.\n" #: src/main.c:671 #, c-format msgid "empty string invalid as file name" msgstr "dosyaismi olarak boÅŸ dizge geçersiz" #: src/main.c:754 #, fuzzy, c-format msgid "unknown debug level specification '%s'" msgstr "Hata ayıklama düzeyi özelliÄŸi `%s' bilinmiyor" #: src/main.c:794 #, c-format msgid "unknown output-sync type '%s'" msgstr "" #: src/main.c:849 #, 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" #: src/main.c:856 #, fuzzy, c-format msgid "" "\n" "Unhandled exception filter called from program %s\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" msgstr "" "\n" "program %s tarafından elde edilmemiÅŸ olaÄŸandışı-durum süzgeci çaÄŸrıldı\n" "OlaÄŸandışılıkKodu = %lx\n" "OlaÄŸandışılıkBayrakları = %lx\n" "OlaÄŸandışılıkAdresi = %lx\n" #: src/main.c:864 #, fuzzy, c-format msgid "Access violation: write operation at address 0x%p\n" msgstr "EriÅŸim uyumsuzluÄŸu: %lx adresinde yazma iÅŸlemi\n" #: src/main.c:865 #, fuzzy, c-format msgid "Access violation: read operation at address 0x%p\n" msgstr "EriÅŸim uyumsuzluÄŸu: %lx adresinde okuma iÅŸlemi\n" #: src/main.c:941 src/main.c:956 #, fuzzy, c-format msgid "find_and_set_shell() setting default_shell = %s\n" msgstr "find_and_set_shell default_shell = %s olarak belirliyor\n" #: src/main.c:1009 #, 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" #: src/main.c:1609 #, fuzzy, c-format msgid "" "warning: jobserver unavailable: using -j1. Add '+' to parent make rule." msgstr "" "uyarı: iÅŸ sunucusu kullanımdışı: -j1 kullanılıyor. Üst make kuralına `+' " "ekle." #: src/main.c:1617 #, fuzzy, c-format msgid "warning: -j%d forced in submake: resetting jobserver mode." msgstr "uyarı: alt derlemede -jN zorlandı: iÅŸ sunucusu kipi kapatılıyor." #: src/main.c:1781 #, c-format msgid "Makefile from standard input specified twice." msgstr "Makefile standart girdiden iki kez belirtildi." #: src/main.c:1819 src/vmsjobs.c:1248 msgid "fopen (temporary file)" msgstr "fopen (geçici dosya)" #: src/main.c:1825 msgid "fwrite (temporary file)" msgstr "fwrite (geçici dosya)" #: src/main.c:2004 #, fuzzy, c-format msgid "warning: -j%d forced in makefile: resetting jobserver mode." msgstr "uyarı: alt derlemede -jN zorlandı: iÅŸ sunucusu kipi kapatılıyor." #: src/main.c:2068 #, c-format msgid "Parallel jobs (-j) are not supported on this platform." msgstr "Bu platformda paralel iÅŸler (-j) desteklenmiyor." #: src/main.c:2069 #, c-format msgid "Resetting to single job (-j1) mode." msgstr "Tek iÅŸ kipi (-j1) için make'i baÅŸlatma konumuna alıyor" #: src/main.c:2109 #, c-format msgid "Symbolic links not supported: disabling -L." msgstr "Sembolik baÄŸlar desteklenmiyor: -L iptal ediliyor" #: src/main.c:2190 #, c-format msgid "Updating makefiles....\n" msgstr "makefile'ları güncelliyor...\n" #: src/main.c:2226 #, fuzzy, c-format msgid "Makefile '%s' might loop; not remaking it.\n" msgstr "`%s' make dosyası çevrime girdi; yeniden derlenemez.\n" #: src/main.c:2303 #, fuzzy, c-format msgid "Failed to remake makefile '%s'." msgstr "`%s' make dosyası yeniden derlenemiyor." #: src/main.c:2323 #, fuzzy, c-format msgid "Included makefile '%s' was not found." msgstr "İçerilen make dosyası `%s' bulunamadı." #: src/main.c:2328 #, fuzzy, c-format msgid "Makefile '%s' was not found" msgstr "`%s' make dosyası bulunamadı" #: src/main.c:2394 #, c-format msgid "Couldn't change back to original directory." msgstr "Geriye, özgün dizine geçilemiyor." #: src/main.c:2402 #, c-format msgid "Re-executing[%u]:" msgstr "Yeniden çalıştırılıyor[%u]:" #: src/main.c:2522 msgid "unlink (temporary file): " msgstr "unlink (geçici dosya): " #: src/main.c:2555 #, c-format msgid ".DEFAULT_GOAL contains more than one target" msgstr ".DEFAULT_GOAL bir hedeften fazlasını içeriyor" #: src/main.c:2579 #, c-format msgid "No targets" msgstr "Hedef yok" #: src/main.c:2581 #, c-format msgid "No targets specified and no makefile found" msgstr "Hedefler belirtilmediÄŸinden make dosyası yok" #: src/main.c:2586 #, c-format msgid "Updating goal targets....\n" msgstr "Amaçlanan hedefler güncelleniyor...\n" #: src/main.c:2610 #, c-format msgid "warning: Clock skew detected. Your build may be incomplete." msgstr "uyarı: Clock skew saptandı. Derleme tamamlanamayabilir." #: src/main.c:2804 #, c-format msgid "Usage: %s [options] [target] ...\n" msgstr "Kullanım: %s [seçenekler] [hedef] ...\n" #: src/main.c:2810 #, c-format msgid "" "\n" "This program built for %s\n" msgstr "" "\n" "Bu program %s için kurgulanmış\n" #: src/main.c:2812 #, c-format msgid "" "\n" "This program built for %s (%s)\n" msgstr "" "\n" "Bu program %s için kurgulanmış (%s)\n" #: src/main.c:2815 #, c-format msgid "Report bugs to \n" msgstr "" "Yazılım hatalarını adresine,\n" "çeviri hatalarını adresine bildiriniz.\n" #: src/main.c:2901 #, 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" #: src/main.c:2965 #, 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" #: src/main.c:3363 #, fuzzy, c-format msgid "%sBuilt for %s\n" msgstr "" "\n" "%sBu program %s için derlenmiÅŸ\n" #: src/main.c:3365 #, fuzzy, c-format msgid "%sBuilt for %s (%s)\n" msgstr "" "\n" "%sBu program %s için derlenmiÅŸ (%s)\n" #: src/main.c:3376 #, c-format msgid "" "%sLicense GPLv3+: GNU GPL version 3 or later \n" "%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 "" #: src/main.c:3397 #, c-format msgid "" "\n" "# Make data base, printed on %s" msgstr "" "\n" "# Make veri tabanı, %s üzerine basıldı" #: src/main.c:3407 #, c-format msgid "" "\n" "# Finished Make data base on %s\n" msgstr "" "\n" "# %s üzerindeki Make veri tabanı tamamlandı\n" #: src/misc.c:643 #, 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" #: src/misc.c:664 msgid "Initialized access" msgstr "İlklendirilmiÅŸ eriÅŸim" #: src/misc.c:743 msgid "User access" msgstr "Kullanıcı eriÅŸimi" #: src/misc.c:791 msgid "Make access" msgstr "Make eriÅŸimi" #: src/misc.c:825 msgid "Child access" msgstr "Asta eriÅŸim" #: src/output.c:97 #, c-format msgid "%s: Entering an unknown directory\n" msgstr "%s: bilinmeyen bir dizine giriliyor\n" #: src/output.c:99 #, c-format msgid "%s: Leaving an unknown directory\n" msgstr "%s: bilinmeyen dizinden çıkılıyor\n" #: src/output.c:102 #, fuzzy, c-format msgid "%s: Entering directory '%s'\n" msgstr "%s: `%s' dizine giriliyor\n" #: src/output.c:104 #, fuzzy, c-format msgid "%s: Leaving directory '%s'\n" msgstr "%s: `%s' dizininden çıkılıyor\n" #: src/output.c:108 #, c-format msgid "%s[%u]: Entering an unknown directory\n" msgstr "%s[%u]: Bilinmeyen bir dizine giriliyor\n" #: src/output.c:110 #, c-format msgid "%s[%u]: Leaving an unknown directory\n" msgstr "%s[%u]: Bilinmeyen dizinden çıkılıyor\n" #: src/output.c:113 #, fuzzy, c-format msgid "%s[%u]: Entering directory '%s'\n" msgstr "%s[%u]:`%s' dizinine giriliyor\n" #: src/output.c:115 #, fuzzy, c-format msgid "%s[%u]: Leaving directory '%s'\n" msgstr "%s[%u]: `%s' dizininden çıkılıyor\n" #: src/output.c:442 src/output.c:444 #, fuzzy, c-format msgid "write error: stdout" msgstr "yazma hatası: %s" #: src/output.c:624 msgid ". Stop.\n" msgstr ". Durdu.\n" #: src/output.c:658 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" #: src/output.c:667 #, c-format msgid "%s: %s" msgstr "%s: %s" #: src/output.h:62 #, c-format msgid "-O[TYPE] (--output-sync[=TYPE]) is not configured for this build." msgstr "" #: src/posixos.c:90 msgid "creating jobs pipe" msgstr "iÅŸleri yaratıyor" #: src/posixos.c:98 src/posixos.c:251 #, fuzzy msgid "duping jobs pipe" msgstr "iÅŸleri yaratıyor" #: src/posixos.c:104 msgid "init jobserver pipe" msgstr "iÅŸleri hazırlıyor" #: src/posixos.c:119 #, fuzzy, c-format msgid "internal error: invalid --jobserver-auth string '%s'" msgstr "içsel hata: --jobserver-fds dizgesi `%s' geçersiz" #: src/posixos.c:122 #, c-format msgid "Jobserver client (fds %d,%d)\n" msgstr "" #: src/posixos.c:138 #, fuzzy msgid "jobserver pipeline" msgstr "iÅŸleri hazırlıyor" #: src/posixos.c:186 msgid "write jobserver" msgstr "iÅŸ-sunucusu yazıyor" #: src/posixos.c:300 #, c-format msgid "job server shut down" msgstr "" #: src/posixos.c:303 #, fuzzy msgid "pselect jobs pipe" msgstr "görev listesi okunuyor" #: src/posixos.c:319 src/posixos.c:433 msgid "read jobs pipe" msgstr "görev listesi okunuyor" #: src/read.c:181 #, c-format msgid "Reading makefiles...\n" msgstr "Makefile'lar okunuyor...\n" #: src/read.c:336 #, fuzzy, c-format msgid "Reading makefile '%s'" msgstr "`%s' make dosyası okunuyor" #: src/read.c:338 #, c-format msgid " (no default goal)" msgstr " (öntanımlı amaç yok)" #: src/read.c:340 #, c-format msgid " (search path)" msgstr " (arama yolu)" #: src/read.c:342 #, c-format msgid " (don't care)" msgstr " (umurunda deÄŸil)" #: src/read.c:344 #, c-format msgid " (no ~ expansion)" msgstr "( ~ uzantısı yok)" #: src/read.c:655 #, c-format msgid "Skipping UTF-8 BOM in makefile '%s'\n" msgstr "" #: src/read.c:658 #, c-format msgid "Skipping UTF-8 BOM in makefile buffer\n" msgstr "" #: src/read.c:787 #, c-format msgid "invalid syntax in conditional" msgstr "ÅŸartlı ifade de yazılış hatası" #: src/read.c:960 #, c-format msgid "%s: failed to load" msgstr "" #: src/read.c:986 #, fuzzy, c-format msgid "recipe commences before first target" msgstr "komutlar ilk hedeften önce baÅŸlıyor" #: src/read.c:1035 #, fuzzy, c-format msgid "missing rule before recipe" msgstr "komutlardan önceki kural kayıp" #: src/read.c:1136 #, fuzzy, c-format msgid "missing separator (did you mean TAB instead of 8 spaces?)" msgstr "(8 boÅŸluÄŸu TAB'mı zannettiniz?)" #: src/read.c:1138 #, fuzzy, c-format msgid "missing separator" msgstr "kayıp ayraç%s" #: src/read.c:1283 #, c-format msgid "missing target pattern" msgstr "hedef kalıp kayıp" #: src/read.c:1285 #, c-format msgid "multiple target patterns" msgstr "çok sayıda hedef kalıp" #: src/read.c:1289 #, fuzzy, c-format msgid "target pattern contains no '%%'" msgstr "hedef kalıp `%%' içermiyor" #: src/read.c:1404 #, fuzzy, c-format msgid "missing 'endif'" msgstr "`endif' kayıp" #: src/read.c:1443 src/read.c:1488 src/variable.c:1600 #, c-format msgid "empty variable name" msgstr "boÅŸ deÄŸiÅŸken ismi" #: src/read.c:1478 #, fuzzy, c-format msgid "extraneous text after 'define' directive" msgstr "`endef' yönergesinden sonraki metin yersiz" #: src/read.c:1503 #, fuzzy, c-format msgid "missing 'endef', unterminated 'define'" msgstr "`endef' kayıp, `define' sonlandırılmamış" #: src/read.c:1531 #, fuzzy, c-format msgid "extraneous text after 'endef' directive" msgstr "`endef' yönergesinden sonraki metin yersiz" #: src/read.c:1603 #, fuzzy, c-format msgid "extraneous text after '%s' directive" msgstr "`%s' yönergesinden sonraki metin yersiz" #: src/read.c:1604 #, fuzzy, c-format msgid "extraneous '%s'" msgstr "`%s' yersiz" #: src/read.c:1632 #, fuzzy, c-format msgid "only one 'else' per conditional" msgstr "her ÅŸartlı ifade de sadece bir `else'" #: src/read.c:1908 #, c-format msgid "Malformed target-specific variable definition" msgstr "Hedefe özgü deÄŸiÅŸken tanımı bozuk" #: src/read.c:1968 #, fuzzy, c-format msgid "prerequisites cannot be defined in recipes" msgstr "öngereksinimler komut betiklerinde tanımlanamaz" #: src/read.c:1986 #, c-format msgid "grouped targets must provide a recipe" msgstr "" #: src/read.c:2029 #, c-format msgid "mixed implicit and static pattern rules" msgstr "örtük ve duraÄŸan kalıp kuralları karışmış" #: src/read.c:2052 #, c-format msgid "mixed implicit and normal rules" msgstr "örtük ve normal kurallar karışmış" #: src/read.c:2107 #, fuzzy, c-format msgid "target '%s' doesn't match the target pattern" msgstr "hedef `%s' hedef kalıpla eÅŸleÅŸmiyor" #: src/read.c:2122 src/read.c:2168 #, fuzzy, c-format msgid "target file '%s' has both : and :: entries" msgstr "hedef dosya `%s'hem : hem de :: girdilerine sahip" #: src/read.c:2128 #, fuzzy, c-format msgid "target '%s' given more than once in the same rule" msgstr "hedef `%s' aynı kuralda birden fazla belirtilmiÅŸ." #: src/read.c:2138 #, fuzzy, c-format msgid "warning: overriding recipe for target '%s'" msgstr "uyarı: hedef `%s' için komutlar geçersiz kılınıyor" #: src/read.c:2141 #, fuzzy, c-format msgid "warning: ignoring old recipe for target '%s'" msgstr "uyarı: hedef `%s' için eski komutlar yoksayılıyor" #: src/read.c:2254 #, fuzzy, c-format msgid "*** mixed implicit and normal rules: deprecated syntax" msgstr "örtük ve normal kurallar karışmış" #: src/read.c:2271 #, fuzzy, c-format msgid "warning: overriding group membership for target '%s'" msgstr "uyarı: hedef `%s' için komutlar geçersiz kılınıyor" #: src/read.c:2636 #, c-format msgid "warning: NUL character seen; rest of line ignored" msgstr "uyarı: NUL karakteri görüldü; satırın geri kalanı yoksayılıyor" #: src/remake.c:226 #, fuzzy, c-format msgid "Nothing to be done for '%s'." msgstr "`%s' için hiçbir ÅŸey yapılmadı." #: src/remake.c:227 #, fuzzy, c-format msgid "'%s' is up to date." msgstr "`%s' güncel" #: src/remake.c:323 #, fuzzy, c-format msgid "Pruning file '%s'.\n" msgstr "Budanmış dosya `%s'.\n" #: src/remake.c:389 #, 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" #: src/remake.c:399 #, fuzzy, c-format msgid "%sNo rule to make target '%s'%s" msgstr "%sHedef `%s' i derlemek için hiçbir kural yok%s" #: src/remake.c:425 #, fuzzy, c-format msgid "Considering target file '%s'.\n" msgstr "hedef dosya `%s' hesaba katılıyor.\n" #: src/remake.c:432 #, 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" #: src/remake.c:444 #, fuzzy, c-format msgid "File '%s' was considered already.\n" msgstr "`%s' dosyası zaten hesaba katıldı.\n" #: src/remake.c:454 #, fuzzy, c-format msgid "Still updating file '%s'.\n" msgstr "`%s' dosyası hala güncelleniyor.\n" #: src/remake.c:457 #, fuzzy, c-format msgid "Finished updating file '%s'.\n" msgstr "`%s' dosyasının güncellenmesi tamamlandı.\n" #: src/remake.c:486 #, fuzzy, c-format msgid "File '%s' does not exist.\n" msgstr "`%s' dosyası yok.\n" #: src/remake.c:494 #, fuzzy, c-format msgid "" "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp" msgstr "" "*** Uyarı: .LOW_RESOLUTION_TIME dosyası `%s' yüksek çözünürlüklü bir zaman " "damgası içeriyor" #: src/remake.c:507 src/remake.c:1039 #, fuzzy, c-format msgid "Found an implicit rule for '%s'.\n" msgstr "`%s' için bir örtük kural bulundu.\n" #: src/remake.c:509 src/remake.c:1041 #, fuzzy, c-format msgid "No implicit rule found for '%s'.\n" msgstr "`%s' için bir örtük kural yok.\n" #: src/remake.c:515 #, fuzzy, c-format msgid "Using default recipe for '%s'.\n" msgstr "`%s' için öntanımlı komutlar kullanılıyor.\n" #: src/remake.c:549 src/remake.c:1088 #, c-format msgid "Circular %s <- %s dependency dropped." msgstr "Çevrimsel %s <- %s bağımlılığı iptal edildi." #: src/remake.c:674 #, fuzzy, c-format msgid "Finished prerequisites of target file '%s'.\n" msgstr "`%s' hedef dosyasının önceden gereklilikleri tamamlandı.\n" #: src/remake.c:680 #, fuzzy, c-format msgid "The prerequisites of '%s' are being made.\n" msgstr "`%s' için önceden gereklilikler derlenmeye devam ediyor.\n" #: src/remake.c:694 #, fuzzy, c-format msgid "Giving up on target file '%s'.\n" msgstr "`%s' hedef dosyasında umut kesiliyor.\n" #: src/remake.c:699 #, fuzzy, c-format msgid "Target '%s' not remade because of errors." msgstr "Hedef `%s' hatalardan dolayı yeniden derlenemez." #: src/remake.c:751 #, fuzzy, c-format msgid "Prerequisite '%s' is order-only for target '%s'.\n" msgstr "Önceden gerekli `%s' hedef `%s' için ÅŸart.\n" #: src/remake.c:756 #, fuzzy, c-format msgid "Prerequisite '%s' of target '%s' does not exist.\n" msgstr "Hedef `%s' in önceden gereklisi `%s' mevcut deÄŸil.\n" #: src/remake.c:761 #, fuzzy, c-format msgid "Prerequisite '%s' is newer than target '%s'.\n" msgstr "Önceden gerekli `%s' hedef `%s' den daha yeni.\n" #: src/remake.c:764 #, fuzzy, c-format msgid "Prerequisite '%s' is older than target '%s'.\n" msgstr "Önceden gerekli `%s' hedef `%s' den daha eski.\n" #: src/remake.c:782 #, 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" #: src/remake.c:789 #, 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" #: src/remake.c:794 #, fuzzy, c-format msgid "Making '%s' due to always-make flag.\n" msgstr "Daima derle seçeneÄŸinden dolayı `%s' derleniyor.\n" #: src/remake.c:802 #, fuzzy, c-format msgid "No need to remake target '%s'" msgstr "Hedef `%s' nin yeniden derlenmesine gerek yok" #: src/remake.c:804 #, fuzzy, c-format msgid "; using VPATH name '%s'" msgstr "; VPATH ismi `%s' kullanılıyor" #: src/remake.c:824 #, fuzzy, c-format msgid "Must remake target '%s'.\n" msgstr "Hedef `%s' yeniden derlenmeli.\n" #: src/remake.c:830 #, fuzzy, c-format msgid " Ignoring VPATH name '%s'.\n" msgstr " VPATH ismi `%s' yoksayılıyor.\n" #: src/remake.c:839 #, fuzzy, c-format msgid "Recipe of '%s' is being run.\n" msgstr "`%s' nin komutları çalışmaya devam ediyor.\n" #: src/remake.c:846 #, fuzzy, c-format msgid "Failed to remake target file '%s'.\n" msgstr "Hedef dosya `%s' yeniden derlenirken hata oluÅŸtu.\n" #: src/remake.c:849 #, fuzzy, c-format msgid "Successfully remade target file '%s'.\n" msgstr "Hedef dosya `%s' yeniden derlenmesi baÅŸarıyla tamamlandı.\n" #: src/remake.c:852 #, 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" #: src/remake.c:1047 #, fuzzy, c-format msgid "Using default commands for '%s'.\n" msgstr "`%s' için öntanımlı komutlar kullanılıyor.\n" #: src/remake.c:1422 #, 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" #: src/remake.c:1662 #, fuzzy, c-format msgid ".LIBPATTERNS element '%s' is not a pattern" msgstr ".LIBPATTERNS elemanı `%s' bir kalıp deÄŸil" #: src/remote-cstms.c:122 #, c-format msgid "Customs won't export: %s\n" msgstr "ÖzelleÅŸtirilmiÅŸ olanlar dışarı aktarılmayacak: %s\n" #: src/rule.c:289 #, c-format msgid "warning: ignoring prerequisites on suffix rule definition" msgstr "" #: src/rule.c:530 msgid "" "\n" "# Implicit Rules" msgstr "" "\n" "# Örtük Kurallar" #: src/rule.c:545 msgid "" "\n" "# No implicit rules." msgstr "" "\n" "# Örtük kural yok." #: src/rule.c:548 #, fuzzy, c-format msgid "" "\n" "# %u implicit rules, %u (%.1f%%) terminal." msgstr "" "\n" "# %u örtük kural, %u" #: src/rule.c:557 #, fuzzy, c-format msgid "BUG: num_pattern_rules is wrong! %u != %u" msgstr "YAZILIM HATASI: num_pattern_rules yanlış! %u != %u" #: src/signame.c:84 msgid "unknown signal" msgstr "bilinmeyen sinyal" #: src/signame.c:92 msgid "Hangup" msgstr "Tıkanma" #: src/signame.c:95 msgid "Interrupt" msgstr "Kesme" #: src/signame.c:98 msgid "Quit" msgstr "Çık" #: src/signame.c:101 msgid "Illegal Instruction" msgstr "Yönergeler uygun deÄŸil" #: src/signame.c:104 msgid "Trace/breakpoint trap" msgstr "İzleme/kesmenoktası yakalayıcı" #: src/signame.c:109 msgid "Aborted" msgstr "İptal edildi" #: src/signame.c:112 msgid "IOT trap" msgstr "IOT tuzağı" #: src/signame.c:115 msgid "EMT trap" msgstr "EMT tuzağı" #: src/signame.c:118 msgid "Floating point exception" msgstr "Gerçek sayı olaÄŸandışı durumu" #: src/signame.c:121 msgid "Killed" msgstr "Süreç durduruldu" #: src/signame.c:124 msgid "Bus error" msgstr "Veri yolu hatası" #: src/signame.c:127 msgid "Segmentation fault" msgstr "Parçalama arızası" #: src/signame.c:130 msgid "Bad system call" msgstr "Sistem çaÄŸrısı hatalı" #: src/signame.c:133 msgid "Broken pipe" msgstr "Veri alınamıyor" #: src/signame.c:136 msgid "Alarm clock" msgstr "Alarm saati" #: src/signame.c:139 msgid "Terminated" msgstr "Sonlandırıldı" #: src/signame.c:142 msgid "User defined signal 1" msgstr "Kullanıcı tanımlı sinyal 1" #: src/signame.c:145 msgid "User defined signal 2" msgstr "Kullanıcı tanımlı sinyal 2" #: src/signame.c:150 src/signame.c:153 msgid "Child exited" msgstr "Ast bıraktı" #: src/signame.c:156 msgid "Power failure" msgstr "Güç kesilmesi" #: src/signame.c:159 msgid "Stopped" msgstr "Durduruldu" #: src/signame.c:162 msgid "Stopped (tty input)" msgstr "Durduruldu (konsol girdisi)" #: src/signame.c:165 msgid "Stopped (tty output)" msgstr "Durduruldu (konsol çıktısı)" #: src/signame.c:168 msgid "Stopped (signal)" msgstr "Durduruldu (sinyal)" #: src/signame.c:171 msgid "CPU time limit exceeded" msgstr "CPU zaman sınırı aşıldı" #: src/signame.c:174 msgid "File size limit exceeded" msgstr "Dosya uzunluÄŸu sınırı aşıldı" #: src/signame.c:177 msgid "Virtual timer expired" msgstr "Sanal süreölçer kullanım süresi doldu" #: src/signame.c:180 msgid "Profiling timer expired" msgstr "Tanıtım süreölçer kullanım süresi doldu" #: src/signame.c:186 msgid "Window changed" msgstr "Pencere boyutları deÄŸiÅŸtirildi" #: src/signame.c:189 msgid "Continued" msgstr "Devam ediliyor" #: src/signame.c:192 msgid "Urgent I/O condition" msgstr "Acil G/Ç koÅŸulu" #: src/signame.c:199 src/signame.c:208 msgid "I/O possible" msgstr "G/Ç mümkün" #: src/signame.c:202 msgid "SIGWIND" msgstr "SIGWIND" #: src/signame.c:205 msgid "SIGPHONE" msgstr "SIGPHONE" #: src/signame.c:211 msgid "Resource lost" msgstr "Kaynak kaybı" #: src/signame.c:214 msgid "Danger signal" msgstr "Tehlike sinyali" #: src/signame.c:217 msgid "Information request" msgstr "Bilgi isteÄŸi" #: src/signame.c:220 msgid "Floating point co-processor not available" msgstr "Aritmetik iÅŸlemci kullanılabilir deÄŸil" #: src/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" #: src/strcache.c:304 #, fuzzy, c-format msgid "" "\n" "%s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu " "B\n" msgstr "%s dizge belleÄŸi boÅŸ: toplam = %d / max = %d / min = %d / ort = %d\n" #: src/strcache.c:308 #, fuzzy, c-format msgid "" "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B\n" msgstr "%s dizge belleÄŸi boyu: toplam = %d / max = %d / min = %d / ort = %d\n" #: src/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" #: src/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" #: src/strcache.c:326 #, c-format msgid "" "\n" "%s strcache performance: lookups = %lu / hit rate = %lu%%\n" msgstr "" #: src/strcache.c:328 #, fuzzy msgid "" "# hash-table stats:\n" "# " msgstr "" "\n" "# dosyaların hash tablosu durumları:\n" "# " #: src/variable.c:1653 msgid "automatic" msgstr "otomatik" #: src/variable.c:1656 msgid "default" msgstr "öntanımlı" #: src/variable.c:1659 msgid "environment" msgstr "çevre" #: src/variable.c:1662 msgid "makefile" msgstr "derleme dosyası" #: src/variable.c:1665 msgid "environment under -e" msgstr "çevre -e altında" #: src/variable.c:1668 msgid "command line" msgstr "komut satırı" #: src/variable.c:1671 #, fuzzy msgid "'override' directive" msgstr "`override' yönergesi" #: src/variable.c:1682 #, fuzzy, c-format msgid " (from '%s', line %lu)" msgstr " (`%s'den, satır %lu)" #: src/variable.c:1745 msgid "# variable set hash-table stats:\n" msgstr "# deÄŸiÅŸken kümesi hash tablosunun durumu:\n" #: src/variable.c:1756 msgid "" "\n" "# Variables\n" msgstr "" "\n" "# DeÄŸiÅŸkenler\n" #: src/variable.c:1760 msgid "" "\n" "# Pattern-specific Variable Values" msgstr "" "\n" "# Kalıba özgü DeÄŸiÅŸken DeÄŸerleri" #: src/variable.c:1774 msgid "" "\n" "# No pattern-specific variable values." msgstr "" "\n" "# ÖrneÄŸe duyarlı deÄŸiÅŸken deÄŸeri yok." #: src/variable.c:1776 #, c-format msgid "" "\n" "# %u pattern-specific variable values" msgstr "" "\n" "# %u örneÄŸe duyarlı deÄŸiÅŸken deÄŸeri" #: src/variable.h:229 #, fuzzy, c-format msgid "warning: undefined variable '%.*s'" msgstr "uyarı: `%.*s' deÄŸiÅŸkeni atanmamış" #: src/vmsfunctions.c:91 #, fuzzy, c-format msgid "sys$search() failed with %d\n" msgstr "sys$search %d ile baÅŸarısız\n" #: src/vmsjobs.c:244 #, 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" #: src/vmsjobs.c:681 #, c-format msgid "BUILTIN CD %s\n" msgstr "OLUÅžUMİÇİ CD %s\n" #: src/vmsjobs.c:1224 #, c-format msgid "DCL: %s\n" msgstr "" #: src/vmsjobs.c:1284 #, fuzzy, c-format msgid "Append output to %s\n" msgstr "%s e yönlendirilmiÅŸ çıktı\n" #: src/vmsjobs.c:1309 #, c-format msgid "Append %.*s and cleanup\n" msgstr "" #: src/vmsjobs.c:1322 #, c-format msgid "Executing %s instead\n" msgstr "%s yerine çalıştırılıyor\n" #: src/vpath.c:603 msgid "" "\n" "# VPATH Search Paths\n" msgstr "" "\n" "# VPATH Arama yolu\n" #: src/vpath.c:620 #, fuzzy msgid "# No 'vpath' search paths." msgstr "# `vpath' arama yolları yok" #: src/vpath.c:622 #, fuzzy, c-format msgid "" "\n" "# %u 'vpath' search paths.\n" msgstr "" "\n" "# %u `vpath' arama yolu.\n" #: src/vpath.c:625 #, fuzzy msgid "" "\n" "# No general ('VPATH' variable) search path." msgstr "" "\n" "# Genel arama yolu (`VPATH' çevre deÄŸiÅŸkeni) yok." #: src/vpath.c:631 #, fuzzy msgid "" "\n" "# General ('VPATH' variable) search path:\n" "# " msgstr "" "\n" "# Genel (`VPATH' çevre deÄŸiÅŸkeni) arama yolu:\n" "# " #: src/w32/w32os.c:44 #, c-format msgid "Jobserver slots limited to %d\n" msgstr "" #: src/w32/w32os.c:60 #, c-format msgid "creating jobserver semaphore: (Error %ld: %s)" msgstr "" #: src/w32/w32os.c:79 #, c-format msgid "" "internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)" msgstr "" #: src/w32/w32os.c:82 #, c-format msgid "Jobserver client (semaphore %s)\n" msgstr "" #: src/w32/w32os.c:123 #, c-format msgid "release jobserver semaphore: (Error %ld: %s)" msgstr "" #: src/w32/w32os.c:194 #, 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 "%s: Command not found" #~ msgstr "%s: Komut bulunamadı" #~ msgid "%s: Shell program not found" #~ msgstr "%s: Kabuk uygulaması bulunamadı" #~ msgid "%s is suspending for 30 seconds..." #~ msgstr "%s 30 saniyeliÄŸine askıya alınıyor..." #~ msgid "done sleep(30). Continuing.\n" #~ msgstr "sleep(30) bitti. Devam ediliyor.\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" #~ "%sPARTICULAR PURPOSE.\n" #~ msgstr "" #~ "%sBu bir serbest yazılımdır; kopyalama koÅŸulları için kaynak koduna " #~ "bakınız.\n" #~ "%sHiçbir garantisi yoktur; hatta SATILABİLİRLİĞİ veya ÅžAHSİ " #~ "KULLANIMINIZA\n" #~ "%sUYGUNLUÄžU için bile garanti verilmez.\n" #~ msgid "Unknown error %d" #~ msgstr "Bilinmeyen hata %d" #~ msgid "virtual memory exhausted" #~ msgstr "sanal bellek tükendi" #~ msgid "write error" #~ msgstr "yazma hatası" #~ msgid "extraneous `endef'" #~ msgstr "yersiz `endef'" #~ msgid "empty `override' directive" #~ msgstr "boÅŸ `override' yönergesi" #~ msgid "invalid `override' directive" #~ msgstr "`override' yönergesi geçersiz" #~ msgid "Warning: File `%s' has modification time in the future" #~ msgstr "Uyarı: `%s' dosyası gelecekteki bir deÄŸiÅŸiklik tarihini içeriyor" #~ msgid " terminal." #~ msgstr " terminal." #~ msgid "" #~ "\n" #~ "%s # of strings in strcache: %d\n" #~ 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" #~ msgid "Got a SIGCHLD; %u unreaped children.\n" #~ msgstr "SIGCHLD sinyali alındı; %u saÄŸlanmamış ast dosya.\n" #~ msgid "Do not specify -j or --jobs if sh.exe is not available." #~ msgstr "sh.exe yoksa -j veya --jobs belirtilemez." #~ msgid "Resetting make for single job mode." #~ msgstr "Tek iÅŸ kipi için make'i baÅŸlatma konumuna alıyor" #~ msgid "no file name for `%sinclude'" #~ msgstr "`%sinclude' için dosyaismi yok" #~ msgid "target `%s' leaves prerequisite pattern empty" #~ msgstr "hedef `%s' önceden gereklilik kalıbını boÅŸ bırakıyor" #~ msgid "" #~ "\n" #~ "# No files." #~ msgstr "" #~ "\n" #~ "# Dosyalar yok." #~ msgid "" #~ "\n" #~ "# %u files in %u hash buckets.\n" #~ msgstr "" #~ "\n" #~ "# %u dosya %u hash kümesinde.\n" #~ msgid "# average %.3f files per bucket, max %u files in one bucket.\n" #~ msgstr "# her tabloda ortalama %.3f dosya, bir tabloda en çok %u dosya.\n" #~ msgid "DIRECTORY" #~ msgstr "DİZİN" #~ msgid "Change to DIRECTORY before doing anything" #~ msgstr "Hiç bir ÅŸey yapmadan DİZİNe geçer" #~ msgid "FLAGS" #~ msgstr "BAYRAKLAR" #~ msgid "Suspend process to allow a debugger to attach" #~ msgstr "Bir hata ayıklayıcı eklemeye izin vermek için süreci askıya alır" #~ msgid "Environment variables override makefiles" #~ msgstr "Çevre deÄŸiÅŸkenleri makefile'ları geçersiz kılıyor" #~ msgid "FILE" #~ msgstr "DOSYA" #~ msgid "Read FILE as a makefile" #~ msgstr "DOSYAyı bir makefile olarak okur" #~ msgid "Search DIRECTORY for included makefiles" #~ msgstr "İçerilmiÅŸ makefile'lar için DİZİNi araÅŸtırır" #~ msgid "Don't start multiple jobs unless load is below N" #~ msgstr "Yük N'in altında olmadıkça iÅŸler baÅŸlatılmaz" #~ msgid "Don't actually run any commands; just print them" #~ msgstr "Genellikle hiçbir komut çalıştırılmaz; onları basar" #~ msgid "Consider FILE to be very old and don't remake it" #~ msgstr "DOSYAnın çok eski olduÄŸunu hesaba katarak yeniden derlemez." #~ msgid "Don't echo commands" #~ msgstr "Komutları ekolamaz" #~ msgid "Turns off -k" #~ msgstr "-k 'yı kapatır" #~ msgid "Consider FILE to be infinitely new" #~ msgstr "DOSYAnın ne kadar yeni olduÄŸundaki belirsizliÄŸi hesaba katar." #~ msgid "Entering" #~ msgstr " Dizine girdi:" #~ msgid "Leaving" #~ msgstr "Dizini bıraktı:" #~ msgid "# No variables." #~ msgstr "# DeÄŸiÅŸkenker yok" #~ msgid "# average of %.1f variables per bucket, max %u in one bucket.\n" #~ msgstr "# her tabloda %.1f deÄŸiÅŸken ortalaması, bir tabloda en çok %u\n" #~ msgid "# average of %d.%d variables per bucket, max %u in one bucket.\n" #~ msgstr "# her tabloda %d.%d deÄŸiÅŸken ortalaması, bir tabloda en çok %u\n" make-4.3/po/pt.gmo0000644000175000017500000012501213611136532010765 00000000000000Þ•®Œ Aü$$+$&J$q$$!Š$-¬$Ú$ ì$- %;%'Q%#y%% ´%Â%à%Pù%;J&"†&©& Å&tæ&L['P¨'Dù'9>(Mx(@Æ(o)Gw)o¿)P/*l€*Fí*J4+€+9,C:,f~,_å,;E-:-O¼-J .}W.uÕ.~K/>Ê/M 0CW02›0FÎ0I1;_1 ›1¥1"Â1 å1ò1 22&2 ?2J2e2x2 Š2”2£2¬2%½2ã27ì2$333C3/[3‹3¤3¼3Ö3(ô34&24*Y4&„4+«4×4#ì4#5)45-^5,Œ5¹5Ò5$ç59 6F63e6™61¶6è677/7!F7$h7=7GË7G89[8•8ž8"¥8È8å8;9!?9a9+}9©9¼9Ö9,ð9:%;:,a:-Ž: ¼:&Ý:;#;C;!c;.…;´;Ä;ÍÙ;§</Ç<÷<& = 4=%U={=›=¯=1Ä= ö=>#>#=>La>6®>å>6?A8?>z? ¹?+Ã?*ï?@ 2@<@1D@2v@ ©@µ@Î@"ã@*A1A@A PAqA A ™A£A»A ÛA èA%õAB+;B$gBŒB¦B ÅBÏBéBC+CHC!eC ‡C”C®C ·CÅCÎCâCD$D&_0X_‰_=©_;ç_:#`1^`,`H½`4a*;a"fa/‰a8¹a7òa*b>b Nbä\b#Ad/ed3•d Éd Ôd&ád0e9e%Oe4ueªe4Åe0úe+fIf0Xf‰fV£fBúf/=g#mg(‘gzºgT5hUŠhIàh@*iUkiEÁikjHsji¼jW&kp~kPïkH@l’‰l;mIXmr¢mnn:„n9¿naùnR[o”®o}CpˆÁpGJq]’qHðq;9rDurDºr6ÿr 6s@s"^s ss¢s²sÈs àsìst%t 8tBt Xtet!wt ™t>¦tåtõtu<$uauyu”u#³u,×uv.#v3Rv/†v-¶väv*w1,w)^w3ˆw7¼wôwx)&x<Px#x6±xèx1y'9y"ay„y!—y6¹y*ðyBzP^zU¯z?{E{N{#U{y{+•{JÁ{# |0|0J|{|‘|«|/È|ø|'}/@}.p}"Ÿ}(Â}ë}$~$*~&O~4v~«~Â~ÌÞ~$«8Ð €'€F€'f€Ž€¬€Ä€=Ù€ #(@0iRšBí!0‚=R‚I‚CÚ‚ ƒ%)ƒ-Oƒ}ƒ –ƒ ƒ>©ƒ>èƒ'„.„D„,X„/…„µ„Ä„(Û„#…(… 8…D…'d… Œ… ™…*¤…'Ï…3÷…'+†S†"m† †›†¹†Ö†%ô†‡&7‡ ^‡!j‡Œ‡•‡ ¥‡³‡%ʇð‡'ˆ/-ˆ]ˆ%}ˆ£ˆÁˆ&áˆ5‰,>‰5k‰ ¡‰+‰/î‰ Š"?ŠbŠ kŠ yЇŠ(šŠÊÚŠ îŠúŠ?‹?Y‹™‹!¸‹"Ú‹ý‹Œ!Œ>7ŒvŒ0”Œ'ÅŒ<íŒ *86o4,Â8ï'(Ž!PŽrŽ wŽ&˜ŽA¿Ž & 2$J o<z·2È3û4/.d“³)Ëõú ‘!‘'5‘']‘9…‘?¿‘Kÿ‘#K’o’2’DÂ’ “7“5K“&“'¨“$Г%õ“$”@”P”Y”a”$x”&”Ä”$┕••2•(F•<o•=¬•&ê•0– B–7L–.„–%³–)Ù–)—'-— U—v—’—©—È— Ý— þ—(˜&H˜o˜A˜Ϙ5ߘ ™8!™EZ™B ™Bã™%&š<Lš‰š˜šªš+Äš ðšüš,›E›]›f› v›#„›'¨›&Л"÷›œ2œBRœ2•œ>Èœ$,Bo†ž<¼4ùH.ž wž˜ž²ž(ÞGìž<4ŸqŸ)zŸ¤ŸµŸÕŸ:èŸ# 2< 5o ¥ Á @Æ ?¡@G¡4ˆ¡8½¡7ö¡.¢ L¢7Z¢2’¢Å¢ߢ õ¢(£,*£5W£3£Á£*Ý£-¤/6¤#f¤9Ф4Ĥ,ù¤&&¥M¥8m¥&¦¥EÍ¥1¦:E¦%€¦¦¦!¹¦6Û¦&§C9§9}§8·§3ð§0$¨NU¨:¤¨*ߨ" ©/-©8]©7–©Ωæ©ù©’’ž­u› ÙfŠœ´hcÓ='6݉#‰€“þEAf—)«$­¡É ~‘à k©µŒ9|jè2e-S„&vs•Ü`N¡H !š¨' ¦1uD§ô{}&.Y« Ïÿê?V¶50 mO¾v…JõK‡سöºxWQ ]tr–9 {C4ƒB±ÂMT†,\Z0š˰q:¨ó œU71ÌrHÛl™<:øò¿3B¢|/æjcP¸¯g5²Š—ç(+Áb-[+@†}~ŽzÊ™bFYä>n›"*]€,˜íÑlðQ =£‹Ldaã`8Ð÷åZÍ”#©@%ÎgnMÃsª_ÕD\S®ùTR„^7‚Ò ‹ _kEKž¬Vh6$¤/dwŸŸXúƒN4R¢^xtëLª®Ö»‘q*Åâ>W[ì§¹‡Ô·˜ÇF;!3PJe•y‚ÆoG¥ ;¥¼£I”ŽpˆéĈ"ß×GÚŒ“zÀo)ÞmUXa8¤Aý¬ip2(ïO–IiȦ…y½.ñîü%áCûw<? # %u 'vpath' search paths. # %u implicit rules, %u (%.1f%%) terminal. # %u pattern-specific variable values # Directories # Files # Finished Make data base on %s # General ('VPATH' variable) search path: # # Implicit Rules # Make data base, printed on %s # No general ('VPATH' variable) search path. # No implicit rules. # No pattern-specific variable values. # Pattern-specific Variable Values # VPATH Search Paths # Variables # files hash-table stats: # %s No strcache buffers %s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu B %s strcache performance: lookups = %lu / hit rate = %lu%% Counted %d args in failed launch This program built for %s This program built for %s (%s) Unhandled exception filter called from program %s ExceptionCode = %lx ExceptionFlags = %lx ExceptionAddress = 0x%p --debug[=FLAGS] Print various types of debugging information. --no-print-directory Turn off -w, even if it was turned on implicitly. --no-silent Echo recipes (disable --silent mode). --trace Print tracing information. --warn-undefined-variables Warn when an undefined variable is referenced. -B, --always-make Unconditionally make all targets. -C DIRECTORY, --directory=DIRECTORY Change to DIRECTORY before doing anything. -E STRING, --eval=STRING Evaluate STRING as a makefile statement. -I DIRECTORY, --include-dir=DIRECTORY Search DIRECTORY for included makefiles. -L, --check-symlink-times Use the latest mtime between symlinks and target. -O[TYPE], --output-sync[=TYPE] Synchronize output of parallel jobs by TYPE. -R, --no-builtin-variables Disable the built-in variable settings. -S, --no-keep-going, --stop Turns off -k. -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE Consider FILE to be infinitely new. -b, -m Ignored for compatibility. -d Print lots of debugging information. -e, --environment-overrides Environment variables override makefiles. -f FILE, --file=FILE, --makefile=FILE Read FILE as a makefile. -h, --help Print this message and exit. -i, --ignore-errors Ignore errors from recipes. -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no arg. -k, --keep-going Keep going when some targets can't be made. -l [N], --load-average[=N], --max-load[=N] Don't start multiple jobs unless load is below N. -n, --just-print, --dry-run, --recon Don't actually run any recipe; just print them. -o FILE, --old-file=FILE, --assume-old=FILE Consider FILE to be very old and don't remake it. -p, --print-data-base Print make's internal database. -q, --question Run no recipe; exit status says if up to date. -r, --no-builtin-rules Disable the built-in implicit rules. -s, --silent, --quiet Don't echo recipes. -t, --touch Touch targets instead of remaking them. -v, --version Print the version number of make and exit. -w, --print-directory Print the current directory. Date %s Ignoring VPATH name '%s'. uid = %d, gid = %d, mode = 0%o. (built-in): (core dumped) (don't care) (from '%s', line %lu) (from '%s', line %lu): (ignored) (name might be truncated) (no default goal) (no ~ expansion) (remote) (search path) files, impossibilities impossibilities in %lu directories. so far.# A default, MAKEFILES, or -include/sinclude makefile.# Also makes:# Builtin rule# Command line target.# Dependencies recipe running (THIS IS A BUG).# Failed to be updated.# File does not exist.# File has been updated.# File has not been updated.# File is an intermediate prerequisite.# File is very old.# Implicit rule search has been done.# Implicit rule search has not been done.# Implicit/static pattern stem: '%s' # Invalid value in 'command_state' member!# Last modified %s # Modification time never checked.# Needs to be updated (-q is set).# Phony target (prerequisite of .PHONY).# Precious file (prerequisite of .PRECIOUS).# Recipe currently running (THIS IS A BUG).# Successfully updated.# recipe to execute# %s (device %d, inode [%d,%d,%d]): # %s (device %d, inode [%d,%d,%d]): could not be opened. # %s (device %ld, inode %ld): # %s (device %ld, inode %ld): could not be opened. # %s (key %s, mtime %I64u): # %s (key %s, mtime %I64u): could not be opened. # %s: could not be stat'd. # No 'vpath' search paths.# Not a target:# hash-table stats: # # variable set hash-table stats: $SHELL changed (was '%s', now '%s') %s (line %d) Bad shell context (!unixy && !batch_mode_shell) %s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B %s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B %s other used: total = %lu B / count = %lu / avg = %lu B %s%s: %s%s: %s%s: Entering an unknown directory %s: Entering directory '%s' %s: Field '%s' not cached: %s%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p) %s: Leaving an unknown directory %s: Leaving directory '%s' %s: Timestamp out of range; substituting %s%s: failed to load%s: illegal option -- %c %s: invalid option -- %c %s: option '%c%s' doesn't allow an argument %s: option '%s' is ambiguous %s: option '%s' requires an argument %s: option '--%s' doesn't allow an argument %s: option '-W %s' doesn't allow an argument %s: option '-W %s' is ambiguous %s: option requires an argument -- %c %s: target '%s' does not exist%s: unrecognized option '%c%s' %s: unrecognized option '--%s' %s: update target '%s' due to: %s%s: user %lu (real %lu), group %lu (real %lu) %sBuilt for %s %sBuilt for %s (%s) %sLicense GPLv3+: GNU GPL version 3 or later %sThis is free software: you are free to change and redistribute it. %sThere is NO WARRANTY, to the extent permitted by law. %sNo rule to make target '%s'%s%sNo rule to make target '%s', needed by '%s'%s%s[%s: %s] Error %d%s%s[%u]: Entering an unknown directory %s[%u]: Entering directory '%s' %s[%u]: Leaving an unknown directory %s[%u]: Leaving directory '%s' '%s' is up to date.'override' directive*** Archive member '%s' may be bogus; not deleted*** Break. *** Deleting file '%s'*** Deleting intermediate file '%s'*** Waiting for unfinished jobs....*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp*** [%s] Archive member '%s' may be bogus; not deleted*** [%s] Deleting file '%s'*** mixed implicit and normal rules: deprecated syntax-O[TYPE] (--output-sync[=TYPE]) is not configured for this build.-warning, you may have to re-enable CTRL-Y handling from DCL. . Stop. .DEFAULT_GOAL contains more than one target.LIBPATTERNS element '%s' is not a pattern; using VPATH name '%s'AbortedAccess violation: read operation at address 0x%p Access violation: write operation at address 0x%p Alarm clockAppend %.*s and cleanup Append output to %s Avoiding implicit rule recursion. BUG: num_pattern_rules is wrong! %u != %uBUILTIN CD %s Bad system callBatch file contents: @echo off Batch file contents:%s %s Broken pipeBus errorCPU time limit exceededCannot create a temporary file Child accessChild exitedCircular %s <- %s dependency dropped.Cleaning up temp batch file %s Cleaning up temp batch file %s failed (%d) Cleaning up temporary batch file %s Collisions=%lu/%lu=%.0f%%Considering target file '%s'. ContinuedCould not restore stderr Could not restore stdin Could not restore stdout Couldn't change back to original directory.CreatePipe() failed (e=%ld) Creating temporary batch file %s Current timeCustoms won't export: %s DCL: %s Danger signalEMT trapEmpty function nameEmpty symbol name for load: %sExecuting %s instead Failed to load symbol %s from %s: %sFailed to open global symbol table: %sFailed to remake makefile '%s'.Failed to remake target file '%s'. File '%s' does not exist. File '%s' was considered already. File size limit exceededFinished prerequisites of target file '%s'. Finished updating file '%s'. Floating point co-processor not availableFloating point exceptionFound an implicit rule for '%s'. Found prerequisite '%s' as VPATH '%s' Function name too long: %sGiving up on target file '%s'. HangupI/O possibleIOT trapIllegal InstructionIncluded makefile '%s' was not found.Information requestInitialized accessInterruptInvalid function name: %sInvalid maximum argument count (%u) for function %sInvalid minimum argument count (%u) for function %sJobserver client (fds %d,%d) Jobserver client (semaphore %s) Jobserver slots limited to %d KilledLive child %p (%s) PID %s %s Load=%lu/%lu=%.0f%%, Loaded object %s is not declared to be GPL compatibleLoading symbol %s from %s Looking for a rule with intermediate file '%s'. Looking for an implicit rule for '%s'. Looking for archive-member implicit rule for '%s'. Make accessMakefile '%s' might loop; not remaking it. Makefile '%s' was not foundMakefile from standard input specified twice.Making '%s' due to always-make flag. Malformed target-specific variable definitionMember '%s'%s: %ld bytes at %ld (%ld). Must remake target '%s'. NoNo implicit rule found for '%s'. No need to remake target '%s'No recipe for '%s' and no prerequisites actually changed. No targetsNo targets specified and no makefile foundNothing to be done for '%s'.Obtained token for child %p (%s). Options: Parallel jobs (-j) are not supported on this platform.Power failurePrerequisite '%s' is newer than target '%s'. Prerequisite '%s' is older than target '%s'. Prerequisite '%s' is order-only for target '%s'. Prerequisite '%s' of target '%s' does not exist. Profiling timer expiredPruning file '%s'. Putting child %p (%s) PID %s%s on the chain. QuitRe-executing[%u]:Reading makefile '%s'Reading makefiles... Reaping losing child %p PID %s %s Reaping winning child %p PID %s %s Recently tried and failed to update file '%s'. Recipe for '%s' will be ignored in favor of the one for '%s'.Recipe for file '%s' was found by implicit rule search,Recipe has too many lines (%ud)Recipe of '%s' is being run. Recipe was specified for file '%s' at %s:%lu,Recursive variable '%s' references itself (eventually)Rehash=%u, Rejecting impossible implicit prerequisite '%s'. Rejecting impossible rule prerequisite '%s'. Released token for child %p (%s). Removing child %p PID %s%s from chain. Removing intermediate files... Report bugs to Resetting to single job (-j1) mode.Resource lostSIGPHONESIGWINDSegmentation faultSkipping UTF-8 BOM in makefile '%s' Skipping UTF-8 BOM in makefile buffer Stem too long: '%s%.*s'. Still updating file '%s'. StoppedStopped (signal)Stopped (tty input)Stopped (tty output)Successfully remade target file '%s'. Symbolic links not supported: disabling -L.Target '%s' is double-colon and has no prerequisites. Target '%s' not remade because of errors.Target file '%s' needs to be remade under -q. TerminatedThe 'load' operation is not supported on this platform.The prerequisites of '%s' are being made. Trace/breakpoint trapTrying implicit prerequisite '%s'. Trying pattern rule with stem '%.*s'. Trying rule prerequisite '%s'. Updating goal targets.... Updating makefiles.... Urgent I/O conditionUsage: %s [options] [target] ... User accessUser defined signal 1User defined signal 2Using default commands for '%s'. Using default recipe for '%s'. Virtual timer expiredWarning: File '%s' has modification time %s s in the futureWindow changedattempt to use unsupported feature: '%s'automaticbut '%s' is now considered the same file as '%s'.can't allocate %lu bytes for hash table: memory exhaustedcan't rename double-colon '%s' to single-colon '%s'can't rename single-colon '%s' to double-colon '%s'cannot enforce load limit: cannot enforce load limits on this operating systemclose: %s: %scommand linecreating jobs pipecreating jobserver semaphore: (Error %ld: %s)defaultduping jobs pipeempty string invalid as file nameempty variable nameenvironmentenvironment under -eextraneous '%s'extraneous text after '%s' directiveextraneous text after 'define' directiveextraneous text after 'endef' directivefile: invalid file operation: %sfile: missing filenamefile: too many argumentsfind_and_set_shell() path search set default_shell = %s find_and_set_shell() setting default_shell = %s first argument to 'word' function must be greater than 0fopen (temporary file)fwrite (temporary file)grouped targets must provide a recipeguile: Evaluating '%s' guile: Expanding '%s' init jobserver pipeinsufficient number of arguments (%d) to function '%s'internal error: invalid --jobserver-auth string '%s'internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)invalid syntax in conditionaljob server shut downjobserver pipelinelbr$ini_control() failed with status = %dlbr$set_module() failed to extract module info, status = %dmake reaped child pid %s, still waiting for pid %s makefilemissing 'endef', unterminated 'define'missing 'endif'missing rule before recipemissing separatormissing separator (did you mean TAB instead of 8 spaces?)missing target patternmixed implicit and normal rulesmixed implicit and static pattern rulesmultiple target patternsnono more file handles: could not duplicate stderr no more file handles: could not duplicate stdin no more file handles: could not duplicate stdout non-numeric first argument to 'word' functionnon-numeric first argument to 'wordlist' functionnon-numeric second argument to 'wordlist' functiononly one 'else' per conditionalopen: %s: %sprerequisites cannot be defined in recipesprocess_easy() failed to launch process (e=%ld) pselect jobs piperead jobs piperead: %s: %srecipe commences before first targetrelease jobserver semaphore: (Error %ld: %s)semaphore or child process wait: (Error %ld: %s)spawnvpe: environment space might be exhaustedsys$search() failed with %d target '%s' doesn't match the target patterntarget '%s' given more than once in the same ruletarget file '%s' has both : and :: entriestarget pattern contains no '%%'the '%s%s' option requires a non-empty string argumentthe '-%c' option requires a positive integer argumenttouch archive member is not available on VMStouch: '%s' is not a valid archivetouch: Archive '%s' does not existtouch: Bad return code from ar_member_touch on '%s'touch: Member '%s' does not exist in '%s'unable to open library '%s' to lookup member status %dunimplemented on this platform: function '%s'unknown debug level specification '%s'unknown output-sync type '%s'unknown signalunlink (temporary file): unterminated call to function '%s': missing '%c'unterminated variable referencewarning: Clock skew detected. Your build may be incomplete.warning: -j%d forced in makefile: resetting jobserver mode.warning: -j%d forced in submake: resetting jobserver mode.warning: NUL character seen; rest of line ignoredwarning: ignoring old recipe for target '%s'warning: jobserver unavailable: using -j1. Add '+' to parent make rule.warning: overriding group membership for target '%s'warning: overriding recipe for target '%s'warning: undefined variable '%.*s'windows32_openpipe(): process_init_fd() failed windows32_openpipe: DuplicateHandle(Err) failed (e=%ld) windows32_openpipe: DuplicateHandle(In) failed (e=%ld) write error: stdoutwrite jobserverwrite: %s: %sProject-Id-Version: GNU make 4.2.93 Report-Msgid-Bugs-To: bug-make@gnu.org PO-Revision-Date: 2020-01-04 07:21+0000 Last-Translator: Pedro Albuquerque Language-Team: Portuguese Language: pt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. Plural-Forms: nplurals=2; plural=(n != 1); X-Generator: Gtranslator 2.91.7 # Caminhos de procura %u "vpath". # %u regras implícitas, %u (%.1f%%) terminal. # %u valores de variáveis específicas de padrão # Pastas # Ficheiros # Base de dados make terminada em %s # Caminho de procura geral (variável "VPATH"). # Regras implícitas # Base de dados make, impressa em %s # Sem caminho de procura geral (variável "VPATH"). # Sem regras implícitas. # Sem valores de variáveis específicas de padrão # Valores de variáveis específicas de padrão # Caminhos de procura VPATH # Variáveis # estatísticas da hash-table dos ficheiros: # %s Sem buffers strcache %s buffers strcache: %lu (%lu) / cadeias = %lu / capacidade = %lu B / média = %lu B %s desempenho strcache: procuras = %lu / taxa de sucesso = %lu%% Contados %d argumentos no lançamento falhado Este programa construído para %s Este programa construído para %s (%s) Filtro de excepção não gerido chamado do programa %s ExceptionCode = %lx ExceptionFlags = %lx ExceptionAddress = 0x%p --debug[=BANDEIRAS] imprime vários tipos de informação de depuração. --no-print-directory desliga -w, mesmo que estivesse implicitamente ligado. --no-silent Ecoa receitas (desactiva o modo --silent). --trace imprime informação de rastreio. --warn-undefined-variables avisa quando uma variável indefinida é referenciada. -B, --always-make faz todos os alvos incondicionalmente. -C PASTA, --directory=PASTA muda para PASTA antes de qualquer outra coisa. -E CADEIA, --eval=CADEIA Avalia CADEIA como declaração makefile. -I PASTA, --include-dir=PASTA procura em PASTA por makefiles incluídos. -L, --check-symlink-times usa a última mtime entre ligações simbólicas e alvo. -O[TIPO], --output-sync[=TIPO] sincroniza saída de tarefas paralelas por TIPO. -R, --no-builtin-variables desactiva as definições de variáveis internas. -S, --no-keep-going, --stop desliga -k. -W FICHEIRO, --what-if=FICHEIRO, --new-file=FICHEIRO, --assume-new=FICHEIRO considea FICHEIRO infinitamente novo. -b, -m ignora para compatibilidade. -d imprime muita informação de depuração. -e, --environment-overrides substitui as variáveis de ambiente com os makefiles. -f FICHEIRO, --file=FICHEIRO, --makefile=FICHEIRO lê FICHEIRO como makefile. -h, --help mostra esta mensagem e sai. -i, --ignore-errors ignora erros das receitas. -j [N], --jobs[=N] permite N tarefas de uma só vez; tarefas infinitas sem argumento. -k, --keep-going continua quando alguns alvos não podem ser feitos. -l [N], --load-average[=N], --max-load[=N] não começa múltiplas tarefas a não ser que a carga seja menor que N. -n, --just-print, --dry-run, --recon não executa realmente nenhuma receita; só as imprime. -o FICHEIRO, --old-file=FICHEIRO, --assume-old=FICHEIRO Considera FICHEIRO muito antigo e não o refaz. -p, --print-data-base imprime a base de dados interna do make. -q, --question não executa receitas; estado de saída mostra actualização. -r, --no-builtin-rules desactiva as regras implícitas internas. -s, --silent, --quiet não fazer eco das receitas. -t, --touch tocar nos alvos em vez de os refazer. -v, --version mostra informação da versão e sai. -w, --print-directory imprime a pasta actual. Data %s A ignorar nome VPATH "%s". uid = %d, gid = %d, modo = 0%o. (interno): (núcleo despejado) (não importa) (de "%s", linha %lu) (de "%s", linha %lu): (ignorado) (nome pode estar truncado) (sem objectivo predefinido) (sem expansão ~) (remoto) (caminho de procura) ficheiros, impossibilidades impossibilidades em %lu pastas. até agora.# A predefinição, MAKEFILES, ou -include/sinclude makefile.# Também faz:# Regra interna# Alvo da linha de comandos.# Receita de dependências em execução (ISTO É UM ERRO).# Falha ao actualizar.# O ficheiro não existe.# O ficheiro foi actualizado.# O ficheiro não foi actualizado.# O ficheiro é um pré-requisito imediato.# O ficheiro é muito antigo.# Foi feita uma procura com regra implícita.# Não foi feita uma procura com regra implícita.# Haste de padrão implícito/estático: "%s" # Valor inválido no membro "command_state"!# Última modificação %s # Hora de modificação nunca verificada.# Precisa de actualização (-q está definido).# Alvo falso (pré-requisito de .PHONY).# Ficheiro precioso (pré-requisito de .PRECIOUS).# Receita actualmente em execução (ISTO É UM ERRO).# Actualizado com sucesso.# receita a executar# %s (dispositivo %d, inode [%d,%d,%d]): # %s (dispositivo %d, inode [%d,%d,%d]): impossível abrir. # %s (dispositivo %ld, inode %ld): # %s (dispositivo %ld, inode %ld): impossível abrir. # %s (chave %s, mtime %I64u): # %s (chave %s, mtime %I64u): impossível abrir. # %s: impossível obter estatísticas. # Sem caminhos de procura "vpath".# Não é um alvo:# estatísticas da hash-table: # # conjunto de variáveis de estatísticas hash-table: $SHELL alterada (era "%s", é agora "%s") %s (linha %d) Mau contexto de shell (!unixy && !batch_mode_shell) %s buffer actual: tamanho = %hu B / usado = %hu B / total = %hu / média = %u B %s outro livre: tamanho = %lu B / máximo = %lu B / mínimo = %lu B / média = %hu B %s outro usado: tamanho = %lu B / total = %lu / média = %lu B %s%s: %s%s: %s%s: a entrar em pasta desconhecida %s: a entrar na pasta "%s" %s: campo "%s" não armazenado em cache: %s%s: apanhado Interrupção/Excepção (código = 0x%lx, endereço = 0x%p) %s: a sair duma pasta desconhecida %s: a sair da pasta "%s" %s: datação fora do intervalo; a substituir %s%s: falha ao carregar%s: opção ilegal -- %c %s: opção inválida -- %c %s: a opção "%c%s" não permite um argumento %s: a opção "%s" é ambígua %s: a opção "%s" requer um argumento %s: a opção "--%s" não permite um argumento %s: a opção "-W %s" não permite argumentos %s: a opção "-W %s" é ambígua %s: a opção requer um argumento -- %c %s: alvo "%s" não existe%s: opção não reconhecida "%c%s" %s: opção não reconhecida "--%s" %s: alvo actualizado "%s" devido a: %s%s: utilizador %lu (real %lu), grupo %lu (real %lu) %sConstruído para %s %sConstruído para %s (%s) %sLicença GPLv3+: GNU GPL versão 3 ou posterior %sIsto é um programa grátis: pode alterá-lo e redistribuí-lo. %sNÃO Hà QUALQUER GARANTIA, até ao limite da Lei. %sSem regra para fazer o alvo "%s"%s%sSem regra para fazer o alvo "%s", necessária a "%s"%s%s[%s: %s] Erro %d%s%s[%u]: a entrar em pasta desconhecida %s[%u]: a entrar na pasta "%s" %s[%u]: a sair duma pasta desconhecida %s[%u]: a sair da pasta "%s" "%s" está actualizado.directiva "override"*** membro do arquivo "%s" pode ser fictício; não eliminado*** Break. *** a eliminar ficheiro "%s"*** A eliminar ficheiro intermédio "%s"*** A aguardar por trabalhos não terminados....*** Aviso: o ficheiro "%s" .LOW_RESOLUTION_TIME tem um carimbo de alta resolução*** [%s] membro do arquivo "%s" pode ser fictício; não eliminado*** [%s] a eliminar ficheiro "%s"*** regras implícitas e normais misturadas: sintaxe obsoleta-O[TIPO] (--output-sync[=TIPO]) não está configurado para esta versão.-aviso, poderá ter de reactivar a gestão CTRL-Y a partir de DCL. . Parar. .DEFAULT_GOAL contém mais de um alvoelemento .LIBPATTERNS "%s" não é um padrão; a usar nome VPATH "%s"AbortadoViolação de acesso: operação de leitura no endereço 0x%p Violação de acesso: operação de escrita no endereço 0x%p AlarmeAnexar %.*s e limpar Anexar saída a %s A evitar recursividade de regra implícita. ERRO: num_pattern_rules está errado! %u != %uCD INTERNO %s Má chamada de sistemaConteúdo do ficheiro batch: @echo off Conteúdo do ficheiro batch:%s %s Túnel quebradoErro de busExcedido limite de tempo da CPUImpossível criar ficheiro temporário Acesso filhoFilho saiuDependência %s <- %s circular abandonada.A limpar ficheiro batch temporário %s A limpar ficheiro batch temporário %s falhou (%d) A limpar ficheiro batch temporário %s Collisions=%lu/%lu=%.0f%%A considerar o ficheiro alvo "%s" Continuadoimpossível restaurar stderr impossível restaurar stdin impossível restaurar stdout Impossível voltar à pasta original.CreatePipe() falhou (e=%ld) A criar ficheiro batch temporaÅ•io %s Hora actualA alfândega não exportará: %s DCL: %s Sinal de perigoArmadilha EMTNome de função vazioNome de símbolo vazio para carga: %sA executar antes %s Falha ao carregar símbolo %s de %s: %sFalha ao abrir a tabela global de símbolos: %sFalha ao refazer makefile "%s".Falha ao refazer ficheiro alvo "%s". O ficheiro "%s" não existe. Ficheiro "%s" já considerado. Excedido limite de tamanho do ficheiroTerminados os pré-requisitos do ficheiro alvo "%s", Terminou a actualização do ficheiro "%s". Co-processador de vírgula flutuante não disponívelExcepção de vírgula flutuanteEncontrada uma regra implícita para "%s". Encontrado pré-requisito "%s" como VPATH "%s" Nome de função muito longo: %sA desistir do ficheiro alvo "%s". DesligarPossível I/OArmadilha IOTInstrução ilegalmakefile "%s" incluído não encontrado.Pedido de informaçãoAcesso inicializadoInterromperNome de função inválido: %sNúmero máximo de argumentos (%u) inválido para a função %sNúmero mínimo de argumentos (%u) inválido para a função %sCliente jobserver (fds %d,%d) Cliente jobserver (semáforo %s) Ranhuras jobserver limitadas a %d MortoFilho vivo %p (%s) PID %s %s Load=%lu/%lu=%.0f%%, Objecto carregado %s não está declarado como compatível GPLA carregar símbolo %s de %s A procurar regra com ficheiro intermédio "%s". A procurar regra implícita para "%s". A procurar regra implícita de membro de arquivo para "%s". Acesso makeMakefile "%s" pode entrar em ciclo; não será refeito. Makefile "%s" não encontradoMakefile da entrada padrão especificado duas vezes.A fazer "%s" devido a bandeira always-make. Definição de variável específica do alvo mal formadaMembro "%s"%s: %ld bytes em %ld (%ld). Necessário refazer o alvo "%s". NãoSem regra implícita para "%s". Sem necessidade de refazer o alvo "%s"Sem receita para "%s" e sem pré-requisitos realmente alterados. Sem alvosSem alvos especificados e sem makefileNada a fazer para "%s".Obtido símbolo para filho %p (%s). Opções: Não são suportadas tarefas paralelas (-j) nesta platforma.Falha de energiaPré-requisito "%s" é mais novo que o alvo "%s". Pré-requisito "%s" é mais velho que o alvo "%s". Pré-requisito "%s" é order-only para o alvo "%s". Pré-requisito "%s" do alvo "%s" não existe. Temporizador de perfil expiradoA podar ficheiro "%s". A pôr filho %p (%s) PID %s%s na cadeia. SairA re-executar[%u]:A ler makefile "%s"A ler makefiles... A recolher filho perdedor %p PID %s %s A recolher filho ganhador %p PID %s %s Tentativa recente falhada de actualizar o ficheiro "%s". Receita para "%s" será ignorada em favor da receita para "%s".Receita para ficheiro "%s" foi encontrada por procura com regra implícita,Receita com demasiadas linhas (%ud)Receita de "%s" em execução. Receita especificada para ficheiro "%s" em %s:%lu,Variável recursiva "%s" referencia-se a si própria (eventualmente)Rehash=%u, A rejeitar pré-requisito implícito "%s" impossível. A rejeitar pré-requisito de regra "%s" impossível. Símbolo lançado para filho %p (%s). A remover filho %p PID %s%s da cadeia. A remover ficheiros intermédios... Reportar erros em A repor modo de tarefa única (-j1).Recurso perdidoSIGPHONESIGWINDFalta de segmentaçãoA slatar UTF-8 BOM em makefile "%s" A saltar UTF-8 BOM no buffer makefile Haste muito longa: "%s%.*s". Ainda a actualizar o ficheiro "%s". ParadoParado (sinal)Parado (entrada tty)Parado (saída tty)Ficheiro alvo "%s" refeito com sucesso. Não são suportadas ligações simbólicas: a desactivar -LO alvo "%s" é dois-pontos duplo e não tem pré-requisitos. Alvo "%s" não refeito devido a erros.O ficheiro alvo "%s" tem de ser refeito sob -q. TerminadoA operação "load" não é suportada nesta plataforma.Estão-se a fazer os pré-requisitos de "%s". Armadilha de rastreio/ponto de quebraA tentar pré-requisito implícito "%s". A tentar regra padrão com haste "%.*s". A tentar pré-requisito de regra "%s". A actualizar alvos objectivo... A actualizar makefiles.... Condição I/O urgenteUso: %s [OPÇÕES] [ALVO] ... Acesso de utilizadorSinal 1 definido pelo utilizadorSinal 2 definido pelo utilizadorA usar comandos predefinidos para "%s". A usar receita predefinida para "%s". Temporizador virtual expiradoAviso: o ficheiro "%s" tem a hora de modificação %s s no futuroJanela alteradatentativa de usar funcionalidade não suportada: "%s"automáticomas "%s" é agora considerado o mesmo ficheiro que "%s".impossível alocar %lu bytes para a tabela de hash: memória esgotadaimpossível renomear dois-pontos duplos "%s" para dois-pontos "%s"impossível renomear dois-pontos "%s" para dois-pontos duplos "%s"Impossível forçar limite de carga: Impossível forçar limites de carga neste sistema operativofechar: %s: %slinha de comandosa criar túnel de tarefasa criar semáforo jobserver: (erro %ld: %s)predefinidoa enganar túnel de tarefascadeia vazia inválida como nome de ficheironome de variável vazioambienteambiente sob -e"%s" estranhotexto estranho após directiva "%s"texto estranho após directiva "define"texto estranho após directiva "endef"ficheiro: operação inválida: %sficheiro: nome em faltaficheiro: demasiados argumentoscaminho de procura find_and_set_shell() define default_shell = %s find_and_set_shell() a definir default_shell = %s o primeiro argumento de função "word" tem de ser maior que 0fopen (ficheiro temporário)fwrite (ficheiro temporário)alvos agrupados têm de fornecer uma receitaguile: a avaliar "%s" guile: a expandir "%s" a iniciar túnel de jobservernúmero insuficiente de argumentos (%d) para a função "%s"erro interno: cadeia --jobserver-auth "%s" inválidaerro interno: impossível abrir semáforo jobserver '%s': (erro %ld: %s)sintaxe inválida em condicionalencerramento de jobserverTúnel jobserverlbr$ini_control() falhou com estado = %dlbr$set_module() falhou ao extrair informação do módulo, estado = %dfazer pid %s de filho recolhido, ainda à espera por pid %s makefile"endef" em falta, "define" não terminado"endif" em faltaregra em falta antes da receitaseparador em faltaseparador em falta (queria usar TAB em vez de 8 espaços?)padrão de alvo em faltaregras de padrão implícitas e normais misturadasregras de padrão implícitas e estáticas misturadasmúltiplos padrões de alvonãonão há mais gestão de ficheiros: impossível duplicar stderr não há mais gestão de ficheiros: impossível duplicar stdin não há mais gestão de ficheiros: impossível duplicar stdout primeiro argumento de função "word" não-numéricoprimeiro argumento de função "wordlist" não-numéricosegundo argumento de função "wordlist" não-numéricosó um "else" por condicionalabrir: %s: %sos pré-requisitos não podem ser definidos em receitasprocess_easy() falhou ao lançar processo (e=%ld) pselect túnel de tarefasler túnel de tarefasler: %s: %sa receita começa antes do primeiro alvolibertar semáforo jobserver: (erro %ld: %s)espera de semáforo ou processo filho: (erro %ld: %s)spawnvpe: o espaço de ambiente pode estar esgotadosys$search() falhou com %d alvo "%s" não corresponde ao alvo padrãoalvo "%s" dado mais de uma vez na mesma regraficheiro alvo "%s" tem ambas as entradas : e ::o padrão de alvo não contém "%%"a opção "%s%s" requer um argumento de cadeia não-vaziaa opção "-%c" requer um argumento inteiro positivomembro de touch arquivo indisponível em VMStouch: "%s" não é um arquivo válidotouch: arquivo "%s" não existetouch: mau código de retorno de ar_member_touch em "%s"touch: membro "%s" não existe em "%s"impossível abrir biblioteca "%s" para procurar estado do membro "%d"não implementada nesta plataforma: função "%s"especificação de nível de depuração "%s" desconhecidatipo de output-sync "%s" desconhecidosinal desconhecidodesligar (ficheiro temporário): chamada não terminada à função "%s": "%c" em faltareferencia de variável não terminadaaviso: detectado desvio do relógio. A build pode estar incompleta.aviso: -j%d forçado em makefile: a repor modo jobserver.aviso: -j%d forçado em submake: a repor modo jobserver.aviso: visto carácter NUL; resto da linha ignoradoaviso: a ignorar receita antiga para o alvo "%s"aviso: jobserver indisponível: a usar -j1. Adicionar "+" à regra-mãe make.aviso: a sobrepor participação no grupo para o alvo "%s"aviso: a sobrepor receita para o alvo "%s"aviso: variável "%.*s" indefinidawindows32_openpipe(): process_init_fd() falhou windows32_openpipe: DuplicateHandle(Err) falhou (e=%ld) windows32_openpipe: DuplicateHandle(In) falhou (e=%ld) erro de escrita: stdoutescrever jobserverescrever: %s: %smake-4.3/po/zh_CN.po0000644000175000017500000016647313611136531011216 00000000000000# 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 , 2002. # LI Daobing , 2008, 2013. # Mingye Wang , 2015, 2016. # Boyuan Yang <073plan@gmail.com>, 2018, 2019. # msgid "" msgstr "" "Project-Id-Version: make 4.2.93\n" "Report-Msgid-Bugs-To: bug-make@gnu.org\n" "POT-Creation-Date: 2020-01-19 15:34-0500\n" "PO-Revision-Date: 2020-01-05 15:27-0500\n" "Last-Translator: Boyuan Yang <073plan@gmail.com>\n" "Language-Team: Chinese (simplified) \n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "X-Generator: Poedit 2.2.4\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/ar.c:46 #, c-format msgid "attempt to use unsupported feature: '%s'" msgstr "è¯•å›¾ä½¿ç”¨ä¸æ”¯æŒçš„功能:“%sâ€" #: src/ar.c:123 #, c-format msgid "touch archive member is not available on VMS" msgstr "VMS ç³»ç»Ÿä¸Šä¸æ”¯æŒ touch å½’æ¡£æˆå‘˜" #: src/ar.c:147 #, c-format msgid "touch: Archive '%s' does not exist" msgstr "touch:归档文件“%sâ€ä¸å­˜åœ¨" #: src/ar.c:150 #, c-format msgid "touch: '%s' is not a valid archive" msgstr "touch:“%sâ€ä¸æ˜¯åˆæ³•的归档文件" #: src/ar.c:157 #, c-format msgid "touch: Member '%s' does not exist in '%s'" msgstr "touch:在“%2$sâ€ä¸­ä¸å­˜åœ¨æˆå‘˜â€œ%1$sâ€" #: src/ar.c:164 #, c-format msgid "touch: Bad return code from ar_member_touch on '%s'" msgstr "touch:“%sâ€ä¸Šçš„ ar_member_touch 的返回ç ä¸å½“" #: src/arscan.c:130 #, c-format msgid "lbr$set_module() failed to extract module info, status = %d" msgstr "lbr$set_modules() èŽ·å–æ¨¡å—ä¿¡æ¯å¤±è´¥ï¼Œè¿”å›žçŠ¶æ€ = %d" #: src/arscan.c:236 #, c-format msgid "lbr$ini_control() failed with status = %d" msgstr "lbr$ini_control() å¤±è´¥ï¼Œè¿”å›žçŠ¶æ€ = %d" #: src/arscan.c:261 #, c-format msgid "unable to open library '%s' to lookup member status %d" msgstr "无法打开库“%sâ€ä»¥å¯»æ‰¾æˆå‘˜ï¼ŒçŠ¶æ€ %d" #: src/arscan.c:944 #, c-format msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n" msgstr "æˆå‘˜â€œ%sâ€%s: %ld 字节于 %ld (%ld)。\n" #: src/arscan.c:945 msgid " (name might be truncated)" msgstr " (åç§°å¯èƒ½è¢«æˆªæ–­)" #: src/arscan.c:947 #, c-format msgid " Date %s" msgstr " 日期 %s" #: src/arscan.c:948 #, c-format msgid " uid = %d, gid = %d, mode = 0%o.\n" msgstr " uid = %d,gid = %d,mode = 0%o。\n" #: src/commands.c:403 #, c-format msgid "Recipe has too many lines (%ud)" msgstr "命令酿–¹è¡Œæ•°å¤ªå¤š (%ud)" #: src/commands.c:504 msgid "*** Break.\n" msgstr "*** 中断。\n" #: src/commands.c:628 #, c-format msgid "*** [%s] Archive member '%s' may be bogus; not deleted" msgstr "*** [%s] å½’æ¡£æˆå‘˜â€œ%sâ€å¯èƒ½æ˜¯å‡çš„;未删除" # 是化学的æˆåˆ†ï¼Œæ˜¯ç‰¹æŠ€ï¼ #: src/commands.c:632 #, c-format msgid "*** Archive member '%s' may be bogus; not deleted" msgstr "*** å½’æ¡£æˆå‘˜â€œ%sâ€å¯èƒ½æ˜¯å‡çš„;未删除" #: src/commands.c:646 #, c-format msgid "*** [%s] Deleting file '%s'" msgstr "*** [%s] 正在删除文件“%sâ€" #: src/commands.c:648 #, c-format msgid "*** Deleting file '%s'" msgstr "*** 正在删除文件“%sâ€" #: src/commands.c:684 msgid "# recipe to execute" msgstr "# è¦æ‰§è¡Œçš„é…æ–¹" #: src/commands.c:687 msgid " (built-in):" msgstr " (内置):" #: src/commands.c:689 #, c-format msgid " (from '%s', line %lu):\n" msgstr " (从“%sâ€ï¼Œè¡Œ %lu):\n" #: src/dir.c:1073 msgid "" "\n" "# Directories\n" msgstr "" "\n" "# 目录\n" #: src/dir.c:1085 #, c-format msgid "# %s: could not be stat'd.\n" msgstr "# %s:无法对其进行 stat æ“作。\n" #: src/dir.c:1089 msgid "# %s (key %s, mtime %I64u): could not be opened.\n" msgstr "# %s (关键字 %s,修改时间 %I64u):无法打开。\n" #: src/dir.c:1094 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n" msgstr "# %s (设备 %d,i-节点 [%d,%d,%d]):无法打开。\n" #: src/dir.c:1099 #, c-format msgid "# %s (device %ld, inode %ld): could not be opened.\n" msgstr "# %s (设备 %ld,i-节点 %ld):无法打开。\n" #: src/dir.c:1126 msgid "# %s (key %s, mtime %I64u): " msgstr "# %s (关键字 %s,修改时间 %I64u):" #: src/dir.c:1131 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): " msgstr "# %s (设备 %d,i-节点 [%d,%d,%d]):" #: src/dir.c:1136 #, c-format msgid "# %s (device %ld, inode %ld): " msgstr "# %s (设备 %ld,i-节点 %ld):" #: src/dir.c:1142 src/dir.c:1163 msgid "No" msgstr "æ— " #: src/dir.c:1145 src/dir.c:1166 msgid " files, " msgstr " 文件, " #: src/dir.c:1147 src/dir.c:1168 msgid "no" msgstr "æ— " #: src/dir.c:1150 msgid " impossibilities" msgstr " ä¸å¯èƒ½" #: src/dir.c:1154 msgid " so far." msgstr " 迄今为止。" #: src/dir.c:1171 #, c-format msgid " impossibilities in %lu directories.\n" msgstr " ä¸å¯èƒ½åœ¨ %lu 目录中。\n" #: src/expand.c:125 #, c-format msgid "Recursive variable '%s' references itself (eventually)" msgstr "递归å˜é‡â€œ%sâ€ï¼ˆæœ€ç»ˆå°†ä¼šï¼‰å¼•用自身" #: src/expand.c:271 #, c-format msgid "unterminated variable reference" msgstr "未终止的å˜é‡å¼•用" #: src/file.c:278 #, c-format msgid "Recipe was specified for file '%s' at %s:%lu," msgstr "关于文件“%sâ€çš„命令酿–¹åœ¨ %s:%lu 处指定," #: src/file.c:283 #, c-format msgid "Recipe for file '%s' was found by implicit rule search," msgstr "关于文件“%sâ€çš„命令酿–¹é€šè¿‡éšå«è§„则æœç´¢è€Œæ‰¾åˆ°ï¼Œ" #: src/file.c:287 #, c-format msgid "but '%s' is now considered the same file as '%s'." msgstr "但“%sâ€çŽ°åœ¨è¢«çœ‹åšâ€œ%sâ€çš„åŒä¸€ä¸ªæ–‡ä»¶ã€‚" #: src/file.c:290 #, c-format msgid "Recipe for '%s' will be ignored in favor of the one for '%s'." msgstr "“%sâ€çš„命令酿–¹è¢«å¿½ç•¥ï¼Œè½¬è€Œä½¿ç”¨â€œ%sâ€çš„。" #: src/file.c:310 #, c-format msgid "can't rename single-colon '%s' to double-colon '%s'" msgstr "无法将å•冒å·â€œ%sâ€é‡å‘½å为åŒå†’å·â€œ%sâ€" #: src/file.c:316 #, c-format msgid "can't rename double-colon '%s' to single-colon '%s'" msgstr "无法将åŒå†’å·â€œ%sâ€é‡å‘½å为å•冒å·â€œ%sâ€" #: src/file.c:408 #, c-format msgid "*** Deleting intermediate file '%s'" msgstr "*** 正在删除中间文件“%sâ€" #: src/file.c:412 #, c-format msgid "Removing intermediate files...\n" msgstr "正在删除中间文件...\n" #: src/file.c:872 msgid "Current time" msgstr "当剿—¶é—´" #: src/file.c:876 #, c-format msgid "%s: Timestamp out of range; substituting %s" msgstr "%sï¼šæ—¶é—´æ ‡è®°è¶…å‡ºèŒƒå›´ï¼›æ­£åœ¨æ›¿æ¢ %s" #: src/file.c:1016 msgid "# Not a target:" msgstr "# 䏿˜¯ä¸€ä¸ªç›®æ ‡ï¼š" #: src/file.c:1021 msgid "# Precious file (prerequisite of .PRECIOUS)." msgstr "# é‡è¦æ–‡ä»¶ (.PRECIOUSçš„å‰æ)。" #: src/file.c:1023 msgid "# Phony target (prerequisite of .PHONY)." msgstr "# å‡ç›®æ ‡ (.PHONYçš„å‰æ)。" #: src/file.c:1025 msgid "# Command line target." msgstr "# 命令行目标。" #: src/file.c:1027 msgid "# A default, MAKEFILES, or -include/sinclude makefile." msgstr "# 缺çœçš„ã€MAKEFILES 指定的ã€-include/sinclude 包å«çš„ makefile。" #: src/file.c:1029 msgid "# Builtin rule" msgstr "# 内建规则" #: src/file.c:1031 msgid "# Implicit rule search has been done." msgstr "# 对éšå«è§„则的æœç´¢å·²å®Œæˆã€‚" #: src/file.c:1032 msgid "# Implicit rule search has not been done." msgstr "# 对éšå«è§„则的æœç´¢å°šæœªå®Œæˆã€‚" #: src/file.c:1034 #, c-format msgid "# Implicit/static pattern stem: '%s'\n" msgstr "# éšå«/陿€æ¨¡å¼ä¸»å¹²ï¼šâ€œ%sâ€\n" #: src/file.c:1036 msgid "# File is an intermediate prerequisite." msgstr "# æ–‡ä»¶æ˜¯ä¸€ä¸ªä¸­é—´å‰æã€‚" #: src/file.c:1040 msgid "# Also makes:" msgstr "# 还è¦åˆ¶ä½œï¼š" #: src/file.c:1046 msgid "# Modification time never checked." msgstr "# ä»Žä¸æ£€æŸ¥ä¿®æ”¹æ—¶é—´ã€‚" #: src/file.c:1048 msgid "# File does not exist." msgstr "# 文件ä¸å­˜åœ¨ã€‚" #: src/file.c:1050 msgid "# File is very old." msgstr "# 文件éžå¸¸é™ˆæ—§ã€‚" #: src/file.c:1055 #, c-format msgid "# Last modified %s\n" msgstr "# 最近更新 %s\n" #: src/file.c:1058 msgid "# File has been updated." msgstr "# 文件已ç»è¢«æ›´æ–°ã€‚" #: src/file.c:1058 msgid "# File has not been updated." msgstr "# 文件尚未被更新。" #: src/file.c:1062 msgid "# Recipe currently running (THIS IS A BUG)." msgstr "# 正在è¿è¡Œçš„é…æ–¹ (这是 BUG)。" #: src/file.c:1065 msgid "# Dependencies recipe running (THIS IS A BUG)." msgstr "# 正在è¿è¡Œçš„ä¾èµ–æ€§é…æ–¹ (这是 BUG)。" #: src/file.c:1074 msgid "# Successfully updated." msgstr "# æ›´æ–°æˆåŠŸã€‚" #: src/file.c:1078 msgid "# Needs to be updated (-q is set)." msgstr "# éœ€è¦æ›´æ–° (用 -q 设定)。" #: src/file.c:1081 msgid "# Failed to be updated." msgstr "# 更新失败。" #: src/file.c:1086 msgid "# Invalid value in 'command_state' member!" msgstr "# “command_stateâ€æˆå‘˜ä¸­å­˜åœ¨æ— æ•ˆçš„值ï¼" #: src/file.c:1105 msgid "" "\n" "# Files" msgstr "" "\n" "# 文件" #: src/file.c:1109 msgid "" "\n" "# files hash-table stats:\n" "# " msgstr "" "\n" "# 文件æ‚凑表状æ€:\n" "# " #: src/file.c:1119 #, c-format msgid "%s: Field '%s' not cached: %s" msgstr "%s:字段“%sâ€æœªè¢«ç¼“存:%s" #: src/function.c:794 msgid "non-numeric first argument to 'word' function" msgstr "“wordâ€å‡½æ•°çš„ç¬¬ä¸€ä¸ªå‚æ•°ä¸æ˜¯æ•°å­—" #: src/function.c:799 #, c-format msgid "first argument to 'word' function must be greater than 0" msgstr "“wordâ€å‡½æ•°çš„ç¬¬ä¸€ä¸ªå‚æ•°å¿…须大于 0" #: src/function.c:819 msgid "non-numeric first argument to 'wordlist' function" msgstr "“wordlistâ€å‡½æ•°çš„ç¬¬ä¸€ä¸ªå‚æ•°ä¸æ˜¯æ•°å­—" #: src/function.c:821 msgid "non-numeric second argument to 'wordlist' function" msgstr "“wordlistâ€å‡½æ•°çš„ç¬¬äºŒä¸ªå‚æ•°ä¸æ˜¯æ•°å­—" # 程åºå‘˜çš„函数åæç¤ºï¼Œè¿˜æ˜¯ä¸è¦åЍå§ã€‚ #: src/function.c:1533 #, c-format msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n" msgstr "windows32_openpipe: DuplicateHandle(In) 失败 (e=%ld)\n" #: src/function.c:1557 #, c-format msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n" msgstr "windows32_openpipe: DuplicateHandle(Err) 失败 (e=%ld)\n" #: src/function.c:1564 #, c-format msgid "CreatePipe() failed (e=%ld)\n" msgstr "CreatePipe() 失败 (e=%ld)\n" #: src/function.c:1572 #, c-format msgid "windows32_openpipe(): process_init_fd() failed\n" msgstr "windows32_openpipe(): process_init_fd() 失败\n" #: src/function.c:1857 #, c-format msgid "Cleaning up temporary batch file %s\n" msgstr "æ­£åœ¨æ¸…é™¤ä¸´æ—¶æ‰¹å¤„ç†æ–‡ä»¶ %s\n" #: src/function.c:2230 src/function.c:2255 #, c-format msgid "file: missing filename" msgstr "file:缺少文件å" #: src/function.c:2234 src/function.c:2265 #, c-format msgid "open: %s: %s" msgstr "open: %s: %s" #: src/function.c:2242 #, c-format msgid "write: %s: %s" msgstr "write: %s: %s" #: src/function.c:2245 src/function.c:2282 #, c-format msgid "close: %s: %s" msgstr "close:%s:%s" #: src/function.c:2258 #, c-format msgid "file: too many arguments" msgstr "fileï¼šå¤ªå¤šå‚æ•°" #: src/function.c:2277 #, c-format msgid "read: %s: %s" msgstr "read:%s:%s" #: src/function.c:2290 #, c-format msgid "file: invalid file operation: %s" msgstr "file:无效文件(file)æ“作:%s" #: src/function.c:2405 #, c-format msgid "insufficient number of arguments (%d) to function '%s'" msgstr "函数“%2$sâ€çš„傿•°æ•°é‡ (%1$d) ä¸å¤Ÿ" #: src/function.c:2417 #, c-format msgid "unimplemented on this platform: function '%s'" msgstr "在本平å°ä¸Šæœªå®žçŽ°ï¼šå‡½æ•°â€œ%sâ€" #: src/function.c:2483 #, c-format msgid "unterminated call to function '%s': missing '%c'" msgstr "对函数“%sâ€çš„æœªç»ˆæ­¢çš„è°ƒç”¨ï¼šé—æ¼â€œ%câ€" #: src/function.c:2667 #, c-format msgid "Empty function name" msgstr "空函数å" #: src/function.c:2669 #, c-format msgid "Invalid function name: %s" msgstr "无效的函数å称:%s" #: src/function.c:2671 #, c-format msgid "Function name too long: %s" msgstr "函数å称太长:%s" #: src/function.c:2674 #, c-format msgid "Invalid minimum argument count (%u) for function %s" msgstr "函数“%2$sâ€çš„æœ€å°‘傿•°æ•°é‡ (%1$u) 无效" #: src/function.c:2677 #, c-format msgid "Invalid maximum argument count (%u) for function %s" msgstr "函数“%2$sâ€çš„æœ€å¤šå‚æ•°æ•°é‡ (%1$u) 无效" #: src/getopt.c:659 #, c-format msgid "%s: option '%s' is ambiguous\n" msgstr "%s:选项“%sâ€å«ä¹‰ä¸æ¸…\n" #: src/getopt.c:683 #, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s:选项“--%sâ€ä¸å…è®¸å‚æ•°\n" #: src/getopt.c:688 #, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s:选项“%c%sâ€ä¸å…è®¸å‚æ•°\n" #: src/getopt.c:705 src/getopt.c:878 #, c-format msgid "%s: option '%s' requires an argument\n" msgstr "%s:选项“%sâ€éœ€è¦ä¸€ä¸ªå‚æ•°\n" #: src/getopt.c:734 #, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s:无法识别的选项“--%sâ€\n" #: src/getopt.c:738 #, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s:无法识别的选项“%c%sâ€\n" #: src/getopt.c:764 #, c-format msgid "%s: illegal option -- %c\n" msgstr "%sï¼šéžæ³•选项 -- %c\n" #: src/getopt.c:767 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%sï¼šéžæ³•选项 -- %c\n" #: src/getopt.c:797 src/getopt.c:927 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s:选项需è¦ä¸€ä¸ªå‚æ•° -- %c\n" #: src/getopt.c:844 #, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s:选项“-W %sâ€å«ä¹‰ä¸æ¸…\n" #: src/getopt.c:862 #, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s:选项“-W %sâ€ä¸å…è®¸ç»™å‡ºå‚æ•°\n" #: src/guile.c:58 #, c-format msgid "guile: Expanding '%s'\n" msgstr "guile: 正拓展 '%s'\n" #: src/guile.c:74 #, c-format msgid "guile: Evaluating '%s'\n" msgstr "guile: 正求值 '%s'\n" #: src/hash.c:50 #, c-format msgid "can't allocate %lu bytes for hash table: memory exhausted" msgstr "无法为æ‚å‡‘è¡¨åˆ†é… %lu 字节: 内存耗尽" #: src/hash.c:280 #, c-format msgid "Load=%lu/%lu=%.0f%%, " msgstr "è´Ÿè½½=%lu/%lu=%.0f%%, " #: src/hash.c:282 #, c-format msgid "Rehash=%u, " msgstr "釿–°æ‚凑=%u, " #: src/hash.c:283 #, c-format msgid "Collisions=%lu/%lu=%.0f%%" msgstr "碰撞=%lu/%lu=%.0f%%" #: src/implicit.c:38 #, c-format msgid "Looking for an implicit rule for '%s'.\n" msgstr "正在为“%sâ€å¯»æ‰¾éšå«è§„则。\n" #: src/implicit.c:54 #, c-format msgid "Looking for archive-member implicit rule for '%s'.\n" msgstr "正在为“%sâ€å¯»æ‰¾å½’æ¡£æˆå‘˜éšå«è§„则。\n" #: src/implicit.c:311 #, c-format msgid "Avoiding implicit rule recursion.\n" msgstr "é¿å…éšå«è§„则递归。\n" #: src/implicit.c:484 #, c-format msgid "Stem too long: '%s%.*s'.\n" msgstr "主干太长:'%s%.*s'.\n" #: src/implicit.c:490 #, c-format msgid "Trying pattern rule with stem '%.*s'.\n" msgstr "用主干“%.*sâ€å°è¯•åŒ¹é…æ¨¡å¼è§„则。\n" #: src/implicit.c:717 #, c-format msgid "Rejecting impossible rule prerequisite '%s'.\n" msgstr "æ‹’ç»ä¸å¯èƒ½çš„è§„åˆ™å‰æâ€œ%sâ€ã€‚\n" #: src/implicit.c:718 #, c-format msgid "Rejecting impossible implicit prerequisite '%s'.\n" msgstr "æ‹’ç»ä¸å¯èƒ½çš„éšå«å‰æâ€œ%sâ€ã€‚\n" #: src/implicit.c:732 #, c-format msgid "Trying rule prerequisite '%s'.\n" msgstr "å°è¯•è§„åˆ™å‰æâ€œ%sâ€ã€‚\n" #: src/implicit.c:733 #, c-format msgid "Trying implicit prerequisite '%s'.\n" msgstr "å°è¯•éšå«å‰æâ€œ%sâ€ã€‚\n" #: src/implicit.c:772 #, c-format msgid "Found prerequisite '%s' as VPATH '%s'\n" msgstr "å‰æâ€œ%sâ€åœ¨ VPATH“%sâ€ä¸­å‘现\n" #: src/implicit.c:786 #, c-format msgid "Looking for a rule with intermediate file '%s'.\n" msgstr "正在寻找包å«ä¸­é—´æ–‡ä»¶â€œ%sâ€çš„规则。\n" #: src/job.c:370 msgid "Cannot create a temporary file\n" msgstr "无法创建临时文件\n" #: src/job.c:548 msgid " (core dumped)" msgstr " (核心已转储)" #: src/job.c:553 msgid " (ignored)" msgstr " (已忽略)" #: src/job.c:557 src/job.c:1892 msgid "" msgstr "<内置>" #: src/job.c:573 #, c-format msgid "%s[%s: %s] Error %d%s" msgstr "%s[%s:%s] 错误 %d%s" #: src/job.c:662 #, c-format msgid "*** Waiting for unfinished jobs...." msgstr "*** 正在等待未完æˆçš„任务...." #: src/job.c:704 #, c-format msgid "Live child %p (%s) PID %s %s\n" msgstr "活跃å­è¿›ç¨‹ %p (%s) PID %s %s\n" #: src/job.c:706 src/job.c:900 src/job.c:1072 src/job.c:1644 #, c-format msgid " (remote)" msgstr " (远程)" #: src/job.c:898 #, c-format msgid "Reaping winning child %p PID %s %s\n" msgstr "正在中止获胜的å­è¿›ç¨‹ %p PID %s %s\n" #: src/job.c:899 #, c-format msgid "Reaping losing child %p PID %s %s\n" msgstr "正在中止失败的å­è¿›ç¨‹ %p PID %s %s\n" #: src/job.c:950 #, c-format msgid "Cleaning up temp batch file %s\n" msgstr "正在清除临时批文件 %s\n" #: src/job.c:956 #, c-format msgid "Cleaning up temp batch file %s failed (%d)\n" msgstr "清ç†ä¸´æ—¶æ‰¹å¤„ç†æ–‡ä»¶ %s 失败 (%d)\n" #: src/job.c:1071 #, c-format msgid "Removing child %p PID %s%s from chain.\n" msgstr "从链中删除å­è¿›ç¨‹ %p PID %s%s。\n" #: src/job.c:1120 #, c-format msgid "Released token for child %p (%s).\n" msgstr "为å­è¿›ç¨‹ %p (%s) 释放令牌 (token)。\n" #: src/job.c:1575 src/job.c:2487 #, c-format msgid "process_easy() failed to launch process (e=%ld)\n" msgstr "process_easy() å¯åŠ¨è¿›ç¨‹å¤±è´¥ (e=%ld)\n" #: src/job.c:1579 src/job.c:2491 #, c-format msgid "" "\n" "Counted %d args in failed launch\n" msgstr "" "\n" "失败执行中共有 %d ä¸ªå‚æ•°ã€‚\n" #: src/job.c:1642 #, c-format msgid "Putting child %p (%s) PID %s%s on the chain.\n" msgstr "å°†å­è¿›ç¨‹ %p (%s) PID %s%s 放入链。\n" #: src/job.c:1875 #, c-format msgid "Obtained token for child %p (%s).\n" msgstr "获得至进程 %p (%s) 的标记。\n" #: src/job.c:1902 #, c-format msgid "%s: target '%s' does not exist" msgstr "%s: 目标文件“%sâ€ä¸å­˜åœ¨" #: src/job.c:1905 #, c-format msgid "%s: update target '%s' due to: %s" msgstr "%s:更新“%sâ€ï¼Œå› ä¸ºï¼š%s" #: src/job.c:2108 #, c-format msgid "cannot enforce load limits on this operating system" msgstr "无法在本æ“作系统中实施负载é™åˆ¶" #: src/job.c:2110 msgid "cannot enforce load limit: " msgstr "无法实施负载é™åˆ¶ï¼š" #: src/job.c:2200 #, c-format msgid "no more file handles: could not duplicate stdin\n" msgstr "æ²¡æœ‰å‰©ä½™çš„æ–‡ä»¶å¥æŸ„: 无法å¤åˆ¶æ ‡å‡†è¾“å…¥\n" #: src/job.c:2212 #, c-format msgid "no more file handles: could not duplicate stdout\n" msgstr "æ²¡æœ‰å‰©ä½™çš„æ–‡ä»¶å¥æŸ„: 无法å¤åˆ¶æ ‡å‡†è¾“出\n" #: src/job.c:2226 #, c-format msgid "no more file handles: could not duplicate stderr\n" msgstr "æ²¡æœ‰å‰©ä½™çš„æ–‡ä»¶å¥æŸ„: 无法å¤åˆ¶æ ‡å‡†é”™è¯¯\n" #: src/job.c:2241 #, c-format msgid "Could not restore stdin\n" msgstr "无法还原标准输入\n" #: src/job.c:2249 #, c-format msgid "Could not restore stdout\n" msgstr "无法还原标准输出\n" #: src/job.c:2257 #, c-format msgid "Could not restore stderr\n" msgstr "无法还原标准错误\n" #: src/job.c:2520 #, c-format msgid "make reaped child pid %s, still waiting for pid %s\n" msgstr "make 已中止的å­è¿›ç¨‹ pid %s,ä»åœ¨ç­‰å¾… pid %s\n" #: src/job.c:2623 #, c-format msgid "spawnvpe: environment space might be exhausted" msgstr "spawnvpe: 环境å˜é‡ç©ºé—´å¯èƒ½ä¼šè€—å°½" #: src/job.c:2862 #, c-format msgid "$SHELL changed (was '%s', now '%s')\n" msgstr "$SHELL å·²æ”¹å˜ (原为“%sâ€ï¼ŒçŽ°ä¸ºâ€œ%sâ€)\n" #: src/job.c:3300 src/job.c:3485 #, c-format msgid "Creating temporary batch file %s\n" msgstr "正在创建临时批文件 %s\n" #: src/job.c:3308 #, c-format msgid "" "Batch file contents:\n" "\t@echo off\n" msgstr "" "æ‰¹å¤„ç†æ–‡ä»¶å†…容:\n" "\t@echo off\n" #: src/job.c:3497 #, c-format msgid "" "Batch file contents:%s\n" "\t%s\n" msgstr "" "æ‰¹å¤„ç†æ–‡ä»¶å†…容:%s\n" "\t%s\n" #: src/job.c:3605 #, c-format msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n" msgstr "%s (行 %d) 错误的 shell 上下文 (!unixy && !batch_mode_shell)\n" #: src/load.c:60 #, c-format msgid "Failed to open global symbol table: %s" msgstr "打开全局符å·è¡¨å¤±è´¥ï¼š%s" #: src/load.c:97 #, c-format msgid "Loaded object %s is not declared to be GPL compatible" msgstr "已加载的对象 %s 未声明为 GPL 兼容" #: src/load.c:104 #, c-format msgid "Failed to load symbol %s from %s: %s" msgstr "从 %2$s åŠ è½½ç¬¦å· %1$s 失败:%3$s" #: src/load.c:149 #, c-format msgid "Empty symbol name for load: %s" msgstr "è¦åŠ è½½çš„ç¬¦å·å为空:%s" #: src/load.c:204 #, c-format msgid "Loading symbol %s from %s\n" msgstr "正从 %2$s åŠ è½½ç¬¦å· %1$s\n" #: src/load.c:256 #, c-format msgid "The 'load' operation is not supported on this platform." msgstr "本平å°ä¸æ”¯æŒâ€œloadâ€æ“作。" #: src/main.c:335 msgid "Options:\n" msgstr "选项:\n" #: src/main.c:336 msgid " -b, -m Ignored for compatibility.\n" msgstr " -b, -m 为兼容性而忽略。\n" #: src/main.c:338 msgid " -B, --always-make Unconditionally make all targets.\n" msgstr " -B, --always-make æ— æ¡ä»¶åˆ¶ä½œ (make) 所有目标。\n" #: src/main.c:340 msgid "" " -C DIRECTORY, --directory=DIRECTORY\n" " Change to DIRECTORY before doing anything.\n" msgstr " -C 目录, --directory=目录 在执行å‰å…ˆåˆ‡æ¢åˆ° <目录>。\n" #: src/main.c:343 msgid " -d Print lots of debugging information.\n" msgstr " -d 打å°å¤§é‡è°ƒè¯•ä¿¡æ¯ã€‚\n" #: src/main.c:345 msgid "" " --debug[=FLAGS] Print various types of debugging information.\n" msgstr " --debug[=æ——æ ‡] 打å°å„ç§è°ƒè¯•ä¿¡æ¯ã€‚\n" #: src/main.c:347 msgid "" " -e, --environment-overrides\n" " Environment variables override makefiles.\n" msgstr "" " -e, --environment-overrides\n" " 环境å˜é‡è¦†ç›– makefile 中的å˜é‡ã€‚\n" #: src/main.c:350 msgid "" " -E STRING, --eval=STRING Evaluate STRING as a makefile statement.\n" msgstr " -E 字串, --eval=字串 å°† <字串> 作为 makefile 语å¥ä¼°å€¼ã€‚\n" #: src/main.c:352 msgid "" " -f FILE, --file=FILE, --makefile=FILE\n" " Read FILE as a makefile.\n" msgstr "" " -f 文件, --file=文件, --makefile=文件\n" " 从 <文件> 中读入 makefile。\n" #: src/main.c:355 msgid " -h, --help Print this message and exit.\n" msgstr " -h, --help 打å°è¯¥æ¶ˆæ¯å¹¶é€€å‡ºã€‚\n" #: src/main.c:357 msgid " -i, --ignore-errors Ignore errors from recipes.\n" msgstr " -i, --ignore-errors 忽略æ¥è‡ªå‘½ä»¤é…方的错误。\n" #: src/main.c:359 msgid "" " -I DIRECTORY, --include-dir=DIRECTORY\n" " Search DIRECTORY for included makefiles.\n" msgstr " -I 目录, --include-dir=目录 在 <目录> 中æœç´¢è¢«åŒ…å«çš„ makefile。\n" #: src/main.c:362 msgid "" " -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no " "arg.\n" msgstr "" " -j [N], --jobs[=N] åŒæ—¶å…许 N ä¸ªä»»åŠ¡ï¼›æ— å‚æ•°è¡¨æ˜Žå…许无é™ä¸ªä»»åŠ¡ã€‚\n" #: src/main.c:364 msgid "" " -k, --keep-going Keep going when some targets can't be made.\n" msgstr " -k, --keep-going 当æŸäº›ç›®æ ‡æ— æ³•制作时ä»ç„¶ç»§ç»­ã€‚\n" #: src/main.c:366 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" " 在系统负载高于 N æ—¶ä¸å¯åŠ¨å¤šä»»åŠ¡ã€‚\n" #: src/main.c:369 msgid "" " -L, --check-symlink-times Use the latest mtime between symlinks and " "target.\n" msgstr "" " -L, --check-symlink-times 使用软链接åŠè½¯é“¾æŽ¥ç›®æ ‡ä¸­ä¿®æ”¹æ—¶é—´è¾ƒæ™šçš„一个。\n" #: src/main.c:371 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" #: src/main.c:374 msgid "" " -o FILE, --old-file=FILE, --assume-old=FILE\n" " Consider FILE to be very old and don't remake " "it.\n" msgstr "" " -o 文件, --old-file=文件, --assume-old=文件\n" " å°† <文件> 当åšå¾ˆæ—§ï¼Œä¸å¿…釿–°åˆ¶ä½œã€‚\n" #: src/main.c:377 msgid "" " -O[TYPE], --output-sync[=TYPE]\n" " Synchronize output of parallel jobs by TYPE.\n" msgstr "" " -O[类型], --output-sync[=类型]\n" " 使用 <类型> æ–¹å¼åŒæ­¥å¹¶è¡Œä»»åŠ¡è¾“å‡ºã€‚\n" #: src/main.c:380 msgid " -p, --print-data-base Print make's internal database.\n" msgstr " -p, --print-data-base æ‰“å° make 的内部数æ®åº“。\n" #: src/main.c:382 msgid "" " -q, --question Run no recipe; exit status says if up to " "date.\n" msgstr "" " -q, --question ä¸è¿è¡Œä»»ä½•é…æ–¹ï¼›é€€å‡ºçжæ€è¯´æ˜Žæ˜¯å¦å·²å…¨éƒ¨æ›´æ–°ã€‚\n" #: src/main.c:384 msgid " -r, --no-builtin-rules Disable the built-in implicit rules.\n" msgstr " -r, --no-builtin-rules ç¦ç”¨å†…ç½®éšå«è§„则。\n" #: src/main.c:386 msgid " -R, --no-builtin-variables Disable the built-in variable settings.\n" msgstr " -R, --no-builtin-variables ç¦ç”¨å†…ç½®å˜é‡è®¾ç½®ã€‚\n" #: src/main.c:388 msgid " -s, --silent, --quiet Don't echo recipes.\n" msgstr " -s, --silent, --quiet ä¸è¾“å‡ºé…æ–¹å‘½ä»¤ã€‚\n" #: src/main.c:390 msgid " --no-silent Echo recipes (disable --silent mode).\n" msgstr " --no-silent 坹酿–¹è¿›è¡Œå›žæ˜¾ï¼ˆç¦ç”¨ --silent 模å¼ï¼‰ã€‚\n" #: src/main.c:392 msgid "" " -S, --no-keep-going, --stop\n" " Turns off -k.\n" msgstr "" " -S, --no-keep-going, --stop\n" " 关闭 -k。\n" #: src/main.c:395 msgid " -t, --touch Touch targets instead of remaking them.\n" msgstr "" " -t, --touch touch ç›®æ ‡ï¼ˆæ›´æ–°ä¿®æ”¹æ—¶é—´ï¼‰è€Œä¸æ˜¯é‡æ–°åˆ¶ä½œå®ƒ" "们。\n" #: src/main.c:397 msgid " --trace Print tracing information.\n" msgstr " --trace 打å°è·Ÿè¸ªä¿¡æ¯ã€‚\n" #: src/main.c:399 msgid "" " -v, --version Print the version number of make and exit.\n" msgstr " -v, --version æ‰“å° make 的版本å·å¹¶é€€å‡ºã€‚\n" #: src/main.c:401 msgid " -w, --print-directory Print the current directory.\n" msgstr " -w, --print-directory 打å°å½“å‰ç›®å½•。\n" #: src/main.c:403 msgid "" " --no-print-directory Turn off -w, even if it was turned on " "implicitly.\n" msgstr " --no-print-directory 关闭 -w,å³ä½¿ -w 默认开å¯ã€‚\n" #: src/main.c:405 msgid "" " -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n" " Consider FILE to be infinitely new.\n" msgstr "" " -W 文件, --what-if=文件, --new-file=文件, --assume-new=文件\n" " å°† <文件> å½“åšæœ€æ–°ã€‚\n" #: src/main.c:408 msgid "" " --warn-undefined-variables Warn when an undefined variable is " "referenced.\n" msgstr " --warn-undefined-variables 当引用未定义å˜é‡çš„æ—¶å€™å‘出警告。\n" #: src/main.c:671 #, c-format msgid "empty string invalid as file name" msgstr "空字符串是无效的文件å" #: src/main.c:754 #, c-format msgid "unknown debug level specification '%s'" msgstr "未知的调试级别定义“%sâ€" #: src/main.c:794 #, c-format msgid "unknown output-sync type '%s'" msgstr "䏿˜Žè¾“å‡ºåŒæ­¥ç±»åž‹â€œ%sâ€" #: src/main.c:849 #, c-format msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n" msgstr "%s:æ•获中断/异常 (ä»£ç  = 0x%lx, åœ°å€ = 0x%p)\n" #: src/main.c:856 #, c-format msgid "" "\n" "Unhandled exception filter called from program %s\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" msgstr "" "\n" "ä»Žç¨‹åº %s 产生的未处ç†çš„异常过滤器\n" "å¼‚å¸¸ç  = %lx\n" "异常标志 = %lx\n" "å¼‚å¸¸åœ°å€ = 0x%p\n" #: src/main.c:864 #, c-format msgid "Access violation: write operation at address 0x%p\n" msgstr "访问冲çªï¼šåœ°å€ 0x%p 处的写æ“作\n" #: src/main.c:865 #, c-format msgid "Access violation: read operation at address 0x%p\n" msgstr "访问冲çªï¼šåœ°å€ 0x%p 处的读æ“作\n" #: src/main.c:941 src/main.c:956 #, c-format msgid "find_and_set_shell() setting default_shell = %s\n" msgstr "find_and_set_shell() 设置 default_shell = %s\n" #: src/main.c:1009 #, c-format msgid "find_and_set_shell() path search set default_shell = %s\n" msgstr "find_and_set_shell() 路径æœç´¢ç»“果设置 default_shell = %s\n" #: src/main.c:1609 #, c-format msgid "" "warning: jobserver unavailable: using -j1. Add '+' to parent make rule." msgstr "警告: jobserver ä¸å¯ç”¨: 正使用 -j1。添加 “+†到父 make 的规则。" #: src/main.c:1617 #, c-format msgid "warning: -j%d forced in submake: resetting jobserver mode." msgstr "警告: å­ make 中强制 -j%d: é‡ç½® jobserver 模å¼ã€‚" #: src/main.c:1781 #, c-format msgid "Makefile from standard input specified twice." msgstr "两次指明æ¥è‡ªæ ‡å‡†è¾“入的 makefile。" #: src/main.c:1819 src/vmsjobs.c:1248 msgid "fopen (temporary file)" msgstr "fopen (临时文件)" #: src/main.c:1825 msgid "fwrite (temporary file)" msgstr "fwrite (临时文件)" #: src/main.c:2004 #, c-format msgid "warning: -j%d forced in makefile: resetting jobserver mode." msgstr "警告: å­ make 中强制 -j%d: é‡ç½® jobserver 模å¼ã€‚" #: src/main.c:2068 #, c-format msgid "Parallel jobs (-j) are not supported on this platform." msgstr "本平å°ä¸æ”¯æŒå¹¶è¡Œä»»åŠ¡ (-j)。" #: src/main.c:2069 #, c-format msgid "Resetting to single job (-j1) mode." msgstr "é‡ç½®ä¸ºå•ä»»åŠ¡æ¨¡å¼ (-j1)。" #: src/main.c:2109 #, c-format msgid "Symbolic links not supported: disabling -L." msgstr "䏿”¯æŒè½¯é“¾æŽ¥ï¼šç¦ç”¨ -L。" #: src/main.c:2190 #, c-format msgid "Updating makefiles....\n" msgstr "正在更新 makefile....\n" #: src/main.c:2226 #, c-format msgid "Makefile '%s' might loop; not remaking it.\n" msgstr "Makefile “%sâ€å¯èƒ½å¾ªçŽ¯ï¼›ä¸ä¼šé‡æ–°æ‰§è¡Œå®ƒã€‚\n" #: src/main.c:2303 #, c-format msgid "Failed to remake makefile '%s'." msgstr "釿–°æ‰§è¡Œ makefile“%sâ€å¤±è´¥ã€‚" #: src/main.c:2323 #, c-format msgid "Included makefile '%s' was not found." msgstr "找ä¸åˆ°è¢«å¼•入的 makefile“%sâ€ã€‚" #: src/main.c:2328 #, c-format msgid "Makefile '%s' was not found" msgstr "找ä¸åˆ° makefile “%sâ€" #: src/main.c:2394 #, c-format msgid "Couldn't change back to original directory." msgstr "无法回到原始目录。" #: src/main.c:2402 #, c-format msgid "Re-executing[%u]:" msgstr "釿–°æ‰§è¡Œ[%u]:" #: src/main.c:2522 msgid "unlink (temporary file): " msgstr "删除 (临时文件):" #: src/main.c:2555 #, c-format msgid ".DEFAULT_GOAL contains more than one target" msgstr ".DEFAULT_GOAL 包å«å¤šä½™ä¸€ä¸ªç›®æ ‡" #: src/main.c:2579 #, c-format msgid "No targets" msgstr "无目标" #: src/main.c:2581 #, c-format msgid "No targets specified and no makefile found" msgstr "没有指明目标并且找ä¸åˆ° makefile" #: src/main.c:2586 #, c-format msgid "Updating goal targets....\n" msgstr "更新目标....\n" #: src/main.c:2610 #, c-format msgid "warning: Clock skew detected. Your build may be incomplete." msgstr "警告:检测到时钟错误。您的构建版本å¯èƒ½æ˜¯ä¸å®Œæ•´çš„。" #: src/main.c:2804 #, c-format msgid "Usage: %s [options] [target] ...\n" msgstr "用法:%s [选项] [目标] ...\n" #: src/main.c:2810 #, c-format msgid "" "\n" "This program built for %s\n" msgstr "" "\n" "该程åºä¸º %s 编译\n" #: src/main.c:2812 #, c-format msgid "" "\n" "This program built for %s (%s)\n" msgstr "" "\n" "该程åºä¸º %s (%s) 编译\n" #: src/main.c:2815 #, c-format msgid "Report bugs to \n" msgstr "报告错误到 \n" #: src/main.c:2901 #, c-format msgid "the '%s%s' option requires a non-empty string argument" msgstr "“%s%sâ€é€‰é¡¹éœ€è¦éžç©ºå­—ç¬¦ä¸²å‚æ•°" #: src/main.c:2965 #, c-format msgid "the '-%c' option requires a positive integer argument" msgstr "“-%câ€é€‰é¡¹éœ€è¦æ­£æ•´æ•°å‚æ•°" #: src/main.c:3363 #, c-format msgid "%sBuilt for %s\n" msgstr "%s为 %s 编译\n" #: src/main.c:3365 #, c-format msgid "%sBuilt for %s (%s)\n" msgstr "%s为 %s (%s) 编译\n" #: src/main.c:3376 #, c-format msgid "" "%sLicense GPLv3+: GNU GPL version 3 or later \n" "%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 版或更新版本。\n" "%s本软件是自由软件:您å¯ä»¥è‡ªç”±ä¿®æ”¹å’Œé‡æ–°å‘布它。\n" "%s在法律å…许的范围内没有其他ä¿è¯ã€‚\n" #: src/main.c:3397 #, c-format msgid "" "\n" "# Make data base, printed on %s" msgstr "" "\n" "# make æ•°æ®åŸºç¡€ï¼Œæ‰“å°åœ¨ %s" #: src/main.c:3407 #, c-format msgid "" "\n" "# Finished Make data base on %s\n" msgstr "" "\n" "# 在 %s ä¸Šå®Œæˆ make æ•°æ®åŸºç¡€\n" #: src/misc.c:643 #, c-format msgid "%s: user %lu (real %lu), group %lu (real %lu)\n" msgstr "%s: 用户 %lu (真实用户 %lu), 组 %lu (真实组 %lu)\n" #: src/misc.c:664 msgid "Initialized access" msgstr "åˆå§‹åŒ–æˆåŠŸ" #: src/misc.c:743 msgid "User access" msgstr "用户æƒé™" #: src/misc.c:791 msgid "Make access" msgstr "Make æƒé™" #: src/misc.c:825 msgid "Child access" msgstr "å­è¿›ç¨‹ æƒé™" #: src/output.c:97 #, c-format msgid "%s: Entering an unknown directory\n" msgstr "%s: 进入一个未知的目录\n" #: src/output.c:99 #, c-format msgid "%s: Leaving an unknown directory\n" msgstr "%s: 离开一个未知的目录\n" #: src/output.c:102 #, c-format msgid "%s: Entering directory '%s'\n" msgstr "%s: 进入目录“%sâ€\n" #: src/output.c:104 #, c-format msgid "%s: Leaving directory '%s'\n" msgstr "%s: 离开目录“%sâ€\n" #: src/output.c:108 #, c-format msgid "%s[%u]: Entering an unknown directory\n" msgstr "%s[%u]: 进入一个未知的目录\n" #: src/output.c:110 #, c-format msgid "%s[%u]: Leaving an unknown directory\n" msgstr "%s[%u]: 离开一个未知的目录\n" #: src/output.c:113 #, c-format msgid "%s[%u]: Entering directory '%s'\n" msgstr "%s[%u]: 进入目录“%sâ€\n" #: src/output.c:115 #, c-format msgid "%s[%u]: Leaving directory '%s'\n" msgstr "%s[%u]: 离开目录“%sâ€\n" #: src/output.c:442 src/output.c:444 #, c-format msgid "write error: stdout" msgstr "写错误: 标准输出" #: src/output.c:624 msgid ". Stop.\n" msgstr "。 åœæ­¢ã€‚\n" #: src/output.c:658 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" #: src/output.c:667 #, c-format msgid "%s: %s" msgstr "%s: %s" #: src/output.h:62 #, c-format msgid "-O[TYPE] (--output-sync[=TYPE]) is not configured for this build." msgstr "-O[类型] (--output-sync[=类型]) 并未é…置入此 make 构建。" #: src/posixos.c:90 msgid "creating jobs pipe" msgstr "正在创建任务管é“" #: src/posixos.c:98 src/posixos.c:251 msgid "duping jobs pipe" msgstr "正在å¤åˆ¶ä»»åŠ¡ç®¡é“" #: src/posixos.c:104 msgid "init jobserver pipe" msgstr "åˆå§‹åŒ–任务æœåŠ¡å™¨ç®¡é“" #: src/posixos.c:119 #, c-format msgid "internal error: invalid --jobserver-auth string '%s'" msgstr "å†…éƒ¨é”™è¯¯ï¼šéžæ³• --jobserver-auth 验è¯å­—符串“%sâ€" #: src/posixos.c:122 #, c-format msgid "Jobserver client (fds %d,%d)\n" msgstr "Jobserver 客户端(文件æè¿°ç¬¦ %d,%d)\n" #: src/posixos.c:138 msgid "jobserver pipeline" msgstr "任务æœåŠ¡å™¨ç®¡é“" #: src/posixos.c:186 msgid "write jobserver" msgstr "写入任务æœåС噍" #: src/posixos.c:300 #, c-format msgid "job server shut down" msgstr "任务æœåС噍关闭" # , fuzzy #: src/posixos.c:303 msgid "pselect jobs pipe" msgstr "pselect 任务管é“" #: src/posixos.c:319 src/posixos.c:433 msgid "read jobs pipe" msgstr "读å–任务管é“" #: src/read.c:181 #, c-format msgid "Reading makefiles...\n" msgstr "正在读入 makefiles...\n" #: src/read.c:336 #, c-format msgid "Reading makefile '%s'" msgstr "正在读入 makefile “%sâ€" #: src/read.c:338 #, c-format msgid " (no default goal)" msgstr " (没有缺çœç›®æ ‡)" #: src/read.c:340 #, c-format msgid " (search path)" msgstr " (æœç´¢è·¯å¾„)" #: src/read.c:342 #, c-format msgid " (don't care)" msgstr " (ä¸ç”¨ç†)" #: src/read.c:344 #, c-format msgid " (no ~ expansion)" msgstr " (没有 ~ 扩展)" #: src/read.c:655 #, c-format msgid "Skipping UTF-8 BOM in makefile '%s'\n" msgstr "跳过 Makefile“%sâ€ä¸­çš„ UTF-8 BOM\n" #: src/read.c:658 #, c-format msgid "Skipping UTF-8 BOM in makefile buffer\n" msgstr "跳过 Makefile 缓冲区中的 UTF-8 BOM\n" #: src/read.c:787 #, c-format msgid "invalid syntax in conditional" msgstr "æ¡ä»¶ä¸­å«æœ‰æ— æ•ˆè¯­æ³•" #: src/read.c:960 #, c-format msgid "%s: failed to load" msgstr "%s: 加载失败" #: src/read.c:986 #, c-format msgid "recipe commences before first target" msgstr "é…æ–¹åœ¨ç¬¬ä¸€ä¸ªç›®æ ‡å‰å¼€å§‹" #: src/read.c:1035 #, c-format msgid "missing rule before recipe" msgstr "é…æ–¹ä¹‹å‰é—æ¼äº†è§„则" #: src/read.c:1136 #, c-format msgid "missing separator (did you mean TAB instead of 8 spaces?)" msgstr "分隔符缺失 (你大概想用 TABï¼Œè€Œä¸æ˜¯å…«ä¸ªç©ºæ ¼)" #: src/read.c:1138 #, c-format msgid "missing separator" msgstr "缺失分隔符" #: src/read.c:1283 #, c-format msgid "missing target pattern" msgstr "无目标匹é…" #: src/read.c:1285 #, c-format msgid "multiple target patterns" msgstr "多个目标匹é…" #: src/read.c:1289 #, c-format msgid "target pattern contains no '%%'" msgstr "目标模å¼ä¸å«æœ‰â€œ%%â€" #: src/read.c:1404 #, c-format msgid "missing 'endif'" msgstr "é—æ¼â€œendifâ€" #: src/read.c:1443 src/read.c:1488 src/variable.c:1600 #, c-format msgid "empty variable name" msgstr "空å˜é‡å" #: src/read.c:1478 #, c-format msgid "extraneous text after 'define' directive" msgstr "“endefâ€æŒ‡ä»¤åŽå«æœ‰ä¸è¯¥å‡ºçŽ°çš„æ–‡å­—" #: src/read.c:1503 #, c-format msgid "missing 'endef', unterminated 'define'" msgstr "é—æ¼â€œendefâ€ï¼Œæœªç»ˆæ­¢çš„“defineâ€" #: src/read.c:1531 #, c-format msgid "extraneous text after 'endef' directive" msgstr "“endefâ€æŒ‡ä»¤åŽå«æœ‰ä¸è¯¥å‡ºçŽ°çš„æ–‡å­—" #: src/read.c:1603 #, c-format msgid "extraneous text after '%s' directive" msgstr "在“%sâ€æŒ‡ä»¤ä¹‹åŽå«æœ‰ä¸è¯¥å‡ºçŽ°çš„æ–‡å­—" #: src/read.c:1604 #, c-format msgid "extraneous '%s'" msgstr "ä¸è¯¥å‡ºçŽ°çš„â€œ%sâ€" #: src/read.c:1632 #, c-format msgid "only one 'else' per conditional" msgstr "æ¯ä¸ªæ¡ä»¶åªèƒ½æœ‰ä¸€ä¸ªâ€œelseâ€" #: src/read.c:1908 #, c-format msgid "Malformed target-specific variable definition" msgstr "畸形的针对目标的标é‡å®šä¹‰" #: src/read.c:1968 #, c-format msgid "prerequisites cannot be defined in recipes" msgstr "ä¾èµ–æ— æ³•åœ¨é…æ–¹è„šæœ¬ä¸­å®šä¹‰" #: src/read.c:1986 #, c-format msgid "grouped targets must provide a recipe" msgstr "æˆç»„的目标必须æä¾›ä¸€ä¸ªé…æ–¹" #: src/read.c:2029 #, c-format msgid "mixed implicit and static pattern rules" msgstr "混和的éšå«å’Œé™æ€æ¨¡å¼è§„则" #: src/read.c:2052 #, c-format msgid "mixed implicit and normal rules" msgstr "混和的éšå«å’Œæ™®é€šè§„则" #: src/read.c:2107 #, c-format msgid "target '%s' doesn't match the target pattern" msgstr "目标“%sâ€ä¸åŒ¹é…目标模å¼" #: src/read.c:2122 src/read.c:2168 #, c-format msgid "target file '%s' has both : and :: entries" msgstr "目标文件“%sâ€å«æœ‰ : å’Œ :: ä¸¤ç§æ¡ç›®" #: src/read.c:2128 #, c-format msgid "target '%s' given more than once in the same rule" msgstr "目标“%sâ€åœ¨åŒä¸€ä¸ªè§„则中给出了多次" #: src/read.c:2138 #, c-format msgid "warning: overriding recipe for target '%s'" msgstr "警告:覆盖关于目标“%sâ€çš„é…æ–¹" #: src/read.c:2141 #, c-format msgid "warning: ignoring old recipe for target '%s'" msgstr "警告:忽略关于目标“%sâ€çš„æ—§é…æ–¹" #: src/read.c:2254 #, c-format msgid "*** mixed implicit and normal rules: deprecated syntax" msgstr "*** éšå«å’Œæ™®é€šè§„则混åˆï¼šå·²å¼ƒç”¨çš„语法" #: src/read.c:2271 #, c-format msgid "warning: overriding group membership for target '%s'" msgstr "警告:覆盖关于目标“%sâ€çš„组æˆå‘˜" #: src/read.c:2636 #, c-format msgid "warning: NUL character seen; rest of line ignored" msgstr "警告:é‡åˆ°äº† NUL 字符;忽略行的剩余部分" #: src/remake.c:226 #, c-format msgid "Nothing to be done for '%s'." msgstr "对“%sâ€æ— éœ€åšä»»ä½•事。" #: src/remake.c:227 #, c-format msgid "'%s' is up to date." msgstr "“%sâ€å·²æ˜¯æœ€æ–°ã€‚" #: src/remake.c:323 #, c-format msgid "Pruning file '%s'.\n" msgstr "正删除文件“%sâ€ã€‚\n" #: src/remake.c:389 #, c-format msgid "%sNo rule to make target '%s', needed by '%s'%s" msgstr "%s没有规则å¯åˆ¶ä½œç›®æ ‡â€œ%sâ€ï¼Œç”±â€œ%sâ€%s 需求" #: src/remake.c:399 #, c-format msgid "%sNo rule to make target '%s'%s" msgstr "%s没有规则å¯åˆ¶ä½œç›®æ ‡â€œ%sâ€%s" #: src/remake.c:425 #, c-format msgid "Considering target file '%s'.\n" msgstr "正在考虑目标文件“%sâ€ã€‚\n" #: src/remake.c:432 #, c-format msgid "Recently tried and failed to update file '%s'.\n" msgstr "最近已å°è¯•过更新文件“%sâ€å¹¶å¤±è´¥ã€‚\n" #: src/remake.c:444 #, c-format msgid "File '%s' was considered already.\n" msgstr "已考虑过文件“%sâ€ã€‚\n" #: src/remake.c:454 #, c-format msgid "Still updating file '%s'.\n" msgstr "ä»ç„¶åœ¨æ›´æ–°æ–‡ä»¶â€œ%sâ€ã€‚\n" #: src/remake.c:457 #, c-format msgid "Finished updating file '%s'.\n" msgstr "更新文件“%sâ€å®Œæˆã€‚\n" #: src/remake.c:486 #, c-format msgid "File '%s' does not exist.\n" msgstr "文件“%sâ€ä¸å­˜åœ¨ã€‚\n" #: src/remake.c:494 #, c-format msgid "" "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp" msgstr "*** 警告: .LOW_RESOLUTION_TIME 文件 `%s' 有一个高精度的的时间标志" #: src/remake.c:507 src/remake.c:1039 #, c-format msgid "Found an implicit rule for '%s'.\n" msgstr "找到一æ¡å…³äºŽâ€œ%sâ€çš„éšå«è§„则。\n" #: src/remake.c:509 src/remake.c:1041 #, c-format msgid "No implicit rule found for '%s'.\n" msgstr "找ä¸åˆ°å…³äºŽâ€œ%sâ€çš„éšå«è§„则。\n" #: src/remake.c:515 #, c-format msgid "Using default recipe for '%s'.\n" msgstr "使用“%sâ€çš„é»˜è®¤é…æ–¹ã€‚\n" #: src/remake.c:549 src/remake.c:1088 #, c-format msgid "Circular %s <- %s dependency dropped." msgstr "放弃循环ä¾èµ– %s <- %s 。" #: src/remake.c:674 #, c-format msgid "Finished prerequisites of target file '%s'.\n" msgstr "目标文件“%sâ€çš„å‰æå·²å®Œæˆã€‚\n" #: src/remake.c:680 #, c-format msgid "The prerequisites of '%s' are being made.\n" msgstr "正在制作“%sâ€çš„å‰æã€‚\n" #: src/remake.c:694 #, c-format msgid "Giving up on target file '%s'.\n" msgstr "放弃目标文件“%sâ€ã€‚\n" #: src/remake.c:699 #, c-format msgid "Target '%s' not remade because of errors." msgstr "由于错误目标“%sâ€å¹¶æœªé‡æ–°åˆ¶ä½œã€‚" #: src/remake.c:751 #, c-format msgid "Prerequisite '%s' is order-only for target '%s'.\n" msgstr "å‰æâ€œ%sâ€å¯¹ç›®æ ‡â€œ%sâ€æ¥è¯´ä»…ç”¨äºŽæŒ‡å®šæ‰§è¡Œé¡ºåº (order-only) 。\n" #: src/remake.c:756 #, c-format msgid "Prerequisite '%s' of target '%s' does not exist.\n" msgstr "目标“%2$sâ€çš„å‰æâ€œ%1$sâ€ä¸å­˜åœ¨ã€‚\n" #: src/remake.c:761 #, c-format msgid "Prerequisite '%s' is newer than target '%s'.\n" msgstr "å‰æâ€œ%sâ€æ¯”目标“%sâ€æ–°ã€‚\n" #: src/remake.c:764 #, c-format msgid "Prerequisite '%s' is older than target '%s'.\n" msgstr "å‰æâ€œ%sâ€æ¯”目标“%sâ€æ—§ã€‚\n" #: src/remake.c:782 #, c-format msgid "Target '%s' is double-colon and has no prerequisites.\n" msgstr "目标“%sâ€æ˜¯åŒå†’å·ç›®æ ‡å¹¶ä¸”æ²¡æœ‰å‰æã€‚\n" #: src/remake.c:789 #, c-format msgid "No recipe for '%s' and no prerequisites actually changed.\n" msgstr "没有关于“%sâ€çš„é…æ–¹ï¼Œå¹¶ä¸”没有实际改å˜çš„å‰æã€‚\n" #: src/remake.c:794 #, c-format msgid "Making '%s' due to always-make flag.\n" msgstr "由于 always-make 标志所以制作“%sâ€ã€‚\n" #: src/remake.c:802 #, c-format msgid "No need to remake target '%s'" msgstr "ä¸éœ€è¦é‡æ–°åˆ¶ä½œç›®æ ‡â€œ%sâ€" #: src/remake.c:804 #, c-format msgid "; using VPATH name '%s'" msgstr ";使用 VPATH å称“%sâ€" #: src/remake.c:824 #, c-format msgid "Must remake target '%s'.\n" msgstr "å¿…é¡»é‡æ–°åˆ¶ä½œç›®æ ‡â€œ%sâ€ã€‚\n" #: src/remake.c:830 #, c-format msgid " Ignoring VPATH name '%s'.\n" msgstr " 忽略 VPATH å称“%sâ€ã€‚\n" #: src/remake.c:839 #, c-format msgid "Recipe of '%s' is being run.\n" msgstr "“%sâ€çš„命令酿–¹æ­£åœ¨è¢«æ‰§è¡Œã€‚\n" #: src/remake.c:846 #, c-format msgid "Failed to remake target file '%s'.\n" msgstr "釿–°åˆ¶ä½œç›®æ ‡æ–‡ä»¶â€œ%sâ€å¤±è´¥ã€‚\n" #: src/remake.c:849 #, c-format msgid "Successfully remade target file '%s'.\n" msgstr "釿–°åˆ¶ä½œç›®æ ‡æ–‡ä»¶â€œ%sâ€æˆåŠŸã€‚\n" #: src/remake.c:852 #, c-format msgid "Target file '%s' needs to be remade under -q.\n" msgstr "目标文件“%sâ€éœ€è¦ä»¥ -q 选项釿–°åˆ¶ä½œã€‚\n" #: src/remake.c:1047 #, c-format msgid "Using default commands for '%s'.\n" msgstr "使用关于“%sâ€çš„默认命令。\n" #: src/remake.c:1422 #, c-format msgid "Warning: File '%s' has modification time %s s in the future" msgstr "警告:文件“%sâ€çš„ä¿®æ”¹æ—¶é—´åœ¨æœªæ¥ %s ç§’åŽ" #: src/remake.c:1662 #, c-format msgid ".LIBPATTERNS element '%s' is not a pattern" msgstr ".LIBPATTERNS 的元素“%sâ€ä¸æ˜¯ä¸€ä¸ªæ¨¡å¼" #: src/remote-cstms.c:122 #, c-format msgid "Customs won't export: %s\n" msgstr "用户ä¸å¸Œæœ›å¯¼å‡ºï¼š%s\n" #: src/rule.c:289 #, c-format msgid "warning: ignoring prerequisites on suffix rule definition" msgstr "" #: src/rule.c:530 msgid "" "\n" "# Implicit Rules" msgstr "" "\n" "# éšå«è§„则" #: src/rule.c:545 msgid "" "\n" "# No implicit rules." msgstr "" "\n" "# 没有éšå«è§„则。" #: src/rule.c:548 #, c-format msgid "" "\n" "# %u implicit rules, %u (%.1f%%) terminal." msgstr "" "\n" "# %u æ¡éšå«è§„则,%u (%.1f%%) 为末端。" #: src/rule.c:557 #, c-format msgid "BUG: num_pattern_rules is wrong! %u != %u" msgstr "BUG:num_pattern_rules 出错ï¼%u != %u" #: src/signame.c:84 msgid "unknown signal" msgstr "未知的信å·" #: src/signame.c:92 msgid "Hangup" msgstr "挂起" #: src/signame.c:95 msgid "Interrupt" msgstr "中断" #: src/signame.c:98 msgid "Quit" msgstr "退出" #: src/signame.c:101 msgid "Illegal Instruction" msgstr "éžæ³•指令" #: src/signame.c:104 msgid "Trace/breakpoint trap" msgstr "跟踪/断点陷阱" #: src/signame.c:109 msgid "Aborted" msgstr "已中止" #: src/signame.c:112 msgid "IOT trap" msgstr "IOT 陷阱" #: src/signame.c:115 msgid "EMT trap" msgstr "EMT 陷阱" #: src/signame.c:118 msgid "Floating point exception" msgstr "浮点数异常" #: src/signame.c:121 msgid "Killed" msgstr "å·²æ€æ­»" #: src/signame.c:124 msgid "Bus error" msgstr "总线错误" #: src/signame.c:127 msgid "Segmentation fault" msgstr "段错误" #: src/signame.c:130 msgid "Bad system call" msgstr "错误的系统调用" #: src/signame.c:133 msgid "Broken pipe" msgstr "断开的管é“" #: src/signame.c:136 msgid "Alarm clock" msgstr "闹钟" #: src/signame.c:139 msgid "Terminated" msgstr "已终止" #: src/signame.c:142 msgid "User defined signal 1" msgstr "ç”¨æˆ·å®šä¹‰ä¿¡å· 1" #: src/signame.c:145 msgid "User defined signal 2" msgstr "ç”¨æˆ·å®šä¹‰ä¿¡å· 2" #: src/signame.c:150 src/signame.c:153 msgid "Child exited" msgstr "å­è¿›ç¨‹å·²é€€å‡º" #: src/signame.c:156 msgid "Power failure" msgstr "电æºå¤±æ•ˆ" #: src/signame.c:159 msgid "Stopped" msgstr "å·²åœæ­¢" #: src/signame.c:162 msgid "Stopped (tty input)" msgstr "å·²åœæ­¢ (tty 输入)" #: src/signame.c:165 msgid "Stopped (tty output)" msgstr "å·²åœæ­¢ (tty 输出)" #: src/signame.c:168 msgid "Stopped (signal)" msgstr "å·²åœæ­¢ (ä¿¡å·)" #: src/signame.c:171 msgid "CPU time limit exceeded" msgstr "CPU 时间超出é™åˆ¶" #: src/signame.c:174 msgid "File size limit exceeded" msgstr "文件大å°è¶…出é™åˆ¶" #: src/signame.c:177 msgid "Virtual timer expired" msgstr "虚拟时钟超时" #: src/signame.c:180 msgid "Profiling timer expired" msgstr "测试时钟超市" #: src/signame.c:186 msgid "Window changed" msgstr "窗å£å·²æ”¹å˜" #: src/signame.c:189 msgid "Continued" msgstr "ç»§ç»­" #: src/signame.c:192 msgid "Urgent I/O condition" msgstr "紧急 I/O æ¡ä»¶" #: src/signame.c:199 src/signame.c:208 msgid "I/O possible" msgstr "I/O å¯è¡Œ" #: src/signame.c:202 msgid "SIGWIND" msgstr "SIGWIND" #: src/signame.c:205 msgid "SIGPHONE" msgstr "SIGPHONE" #: src/signame.c:211 msgid "Resource lost" msgstr "资æºä¸¢å¤±" #: src/signame.c:214 msgid "Danger signal" msgstr "å±é™©ä¿¡å·" #: src/signame.c:217 msgid "Information request" msgstr "ä¿¡æ¯è¯·æ±‚" #: src/signame.c:220 msgid "Floating point co-processor not available" msgstr "浮点数å处ç†å™¨ä¸å¯ç”¨" #: src/strcache.c:274 #, c-format msgid "" "\n" "%s No strcache buffers\n" msgstr "" "\n" "%s 没有 strcache 缓冲区\n" #: src/strcache.c:304 #, c-format msgid "" "\n" "%s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu " "B\n" msgstr "" "\n" "%s strcache 缓冲: %lu (%lu) / 字串 = %lu / 空间 = %lu B / å¹³å‡ = %lu B\n" #: src/strcache.c:308 #, c-format msgid "" "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B\n" msgstr "%s ç›®å‰ç¼“冲: 尺寸 = %hu B / 已用 = %hu B / æ•°é‡ = %hu / å¹³å‡ = %u B\n" #: src/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" #: src/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" #: src/strcache.c:326 #, c-format msgid "" "\n" "%s strcache performance: lookups = %lu / hit rate = %lu%%\n" msgstr "" "\n" "%s strcache 性能:查找 = %lu / 命中率 = %lu%%\n" #: src/strcache.c:328 msgid "" "# hash-table stats:\n" "# " msgstr "" "# æ‚凑表统计数æ®:\n" "# " #: src/variable.c:1653 msgid "automatic" msgstr "自动" #: src/variable.c:1656 msgid "default" msgstr "默认" #: src/variable.c:1659 msgid "environment" msgstr "环境" #: src/variable.c:1662 msgid "makefile" msgstr "makefile" #: src/variable.c:1665 msgid "environment under -e" msgstr "-e 指定的环境å˜é‡" #: src/variable.c:1668 msgid "command line" msgstr "命令行" #: src/variable.c:1671 msgid "'override' directive" msgstr "“overrideâ€æŒ‡ä»¤" #: src/variable.c:1682 #, c-format msgid " (from '%s', line %lu)" msgstr " (从“%sâ€ï¼Œè¡Œ %lu)" #: src/variable.c:1745 msgid "# variable set hash-table stats:\n" msgstr "# å˜é‡çš„æ‚å‡‘è¡¨çŠ¶æ€:\n" #: src/variable.c:1756 msgid "" "\n" "# Variables\n" msgstr "" "\n" "# å˜é‡\n" #: src/variable.c:1760 msgid "" "\n" "# Pattern-specific Variable Values" msgstr "" "\n" "# Pattern-specific å˜é‡å€¼" #: src/variable.c:1774 msgid "" "\n" "# No pattern-specific variable values." msgstr "" "\n" "# 没有 pattern-specific å˜é‡çš„值。" #: src/variable.c:1776 #, c-format msgid "" "\n" "# %u pattern-specific variable values" msgstr "" "\n" "# %u 个 pattern-specific å˜é‡çš„值" #: src/variable.h:229 #, c-format msgid "warning: undefined variable '%.*s'" msgstr "警告:未定义的å˜é‡â€œ%.*sâ€" #: src/vmsfunctions.c:91 #, c-format msgid "sys$search() failed with %d\n" msgstr "sys$search() 失败并返回 %d\n" #: src/vmsjobs.c:244 #, c-format msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n" msgstr "-警告, ä½ å¯èƒ½å¿…须从 DCL 釿–°å¯ç”¨ CTRL-Y 处ç†ã€‚\n" #: src/vmsjobs.c:681 #, c-format msgid "BUILTIN CD %s\n" msgstr "BUILTIN CD %s\n" #: src/vmsjobs.c:1224 #, c-format msgid "DCL: %s\n" msgstr "DCL:%s\n" #: src/vmsjobs.c:1284 #, c-format msgid "Append output to %s\n" msgstr "将输出追加到 %s\n" #: src/vmsjobs.c:1309 #, c-format msgid "Append %.*s and cleanup\n" msgstr "追加 %.*s 并清ç†\n" #: src/vmsjobs.c:1322 #, c-format msgid "Executing %s instead\n" msgstr "执行 %s 作为替代\n" #: src/vpath.c:603 msgid "" "\n" "# VPATH Search Paths\n" msgstr "" "\n" "# VPATH æœç´¢è·¯å¾„\n" #: src/vpath.c:620 msgid "# No 'vpath' search paths." msgstr "# 没有“vpathâ€æœç´¢è·¯å¾„。" #: src/vpath.c:622 #, c-format msgid "" "\n" "# %u 'vpath' search paths.\n" msgstr "" "\n" "# %u “vpathâ€æœç´¢è·¯å¾„。\n" #: src/vpath.c:625 msgid "" "\n" "# No general ('VPATH' variable) search path." msgstr "" "\n" "# 没有通用æœç´¢è·¯å¾„(“VPATHâ€å˜é‡)。" #: src/vpath.c:631 msgid "" "\n" "# General ('VPATH' variable) search path:\n" "# " msgstr "" "\n" "# 通用æœç´¢è·¯å¾„(“VPATHâ€å˜é‡):\n" "# " #: src/w32/w32os.c:44 #, c-format msgid "Jobserver slots limited to %d\n" msgstr "Jobserver æ§½ä½æ•°é™åˆ¶ä¸º %d\n" #: src/w32/w32os.c:60 #, c-format msgid "creating jobserver semaphore: (Error %ld: %s)" msgstr "正创建 jobserver ä¿¡å·é‡ï¼šï¼ˆé”™è¯¯ %ld:%s)" #: src/w32/w32os.c:79 #, c-format msgid "" "internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)" msgstr "内部错误:无法打开 jobserver ä¿¡å·é‡â€œ%sâ€ï¼šï¼ˆé”™è¯¯ %ld:%s)" #: src/w32/w32os.c:82 #, c-format msgid "Jobserver client (semaphore %s)\n" msgstr "Jobserver 客户端(信å·é‡ %s)\n" #: src/w32/w32os.c:123 #, c-format msgid "release jobserver semaphore: (Error %ld: %s)" msgstr "释放 jobserver ä¿¡å·é‡ï¼šï¼ˆé”™è¯¯ %ld:%s)" #: src/w32/w32os.c:194 #, c-format msgid "semaphore or child process wait: (Error %ld: %s)" msgstr "ä¿¡å·é‡æˆ–å­è¿›ç¨‹ç­‰å¾…:(错误 %ld:%s)" #~ msgid "%s: %s: Command not found\n" #~ msgstr "%s:%s:命令未找到\n" #~ msgid "%s[%u]: %s: Command not found\n" #~ msgstr "%s[%u]:%s:命令未找到\n" #~ msgid "%s: Shell program not found" #~ msgstr "%s:未找到 shell 程åº" #~ msgid "%s is suspending for 30 seconds..." #~ msgstr "%s 正在挂起 30 ç§’..." #~ msgid "done sleep(30). Continuing.\n" #~ msgstr "ç¡çœ å®Œæˆ(30)。继续。\n" #~ msgid "Unknown error %d" #~ msgstr "未知错误 %d" #~ msgid "Warning: File '%s' has modification time in the future" #~ msgstr "警告:文件“%sâ€çš„修改时间在未æ¥" #~ msgid " terminal." #~ msgstr " 终端。" #~ 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â€æˆå‘˜ä¸­æ— æ•ˆçš„值ï¼" #, fuzzy #~ msgid "unknown trace mode '%s'" #~ msgstr "未知的内置命令“%sâ€\n" #, fuzzy #~ msgid "internal error: multiple --sync-mutex options" #~ msgstr "内部错误:多个 --jobserver-fds 选项" #~ msgid "internal error: multiple --jobserver-fds options" #~ msgstr "内部错误:多个 --jobserver-fds 选项" #~ msgid "virtual memory exhausted" #~ msgstr "虚拟内存耗尽" #~ msgid "write error" #~ msgstr "写错误" #~ msgid "BUILTIN RM %s\n" #~ msgstr "BUILTIN RM %s\n" #~ msgid "*** [%s] Error 0x%x (ignored)" #~ msgstr "*** [%s] 错误 0x%x (忽略)" #~ msgid "process_easy() failed failed to launch process (e=%ld)\n" #~ msgstr "process_easy() å¯åŠ¨è¿›ç¨‹å¤±è´¥ (e=%ld)\n" #~ 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" #~ "%sPARTICULAR PURPOSE.\n" #~ msgstr "" #~ "%s该程åºä¸ºè‡ªç”±è½¯ä»¶ï¼Œè¯¦æƒ…å¯å‚é˜…ç‰ˆæƒæ¡æ¬¾ã€‚在法律å…许的范围内\n" #~ "%s我们ä¸ä½œä»»ä½•æ‹…ä¿ï¼Œè¿™åŒ…å«ä½†ä¸é™äºŽä»»ä½•商业适售性以åŠé’ˆå¯¹ç‰¹\n" #~ "%s定目的的适用性的担ä¿ã€‚\n" #~ msgid "extraneous `endef'" #~ msgstr "多于的“endefâ€" #~ msgid "empty `override' directive" #~ msgstr "空“overrideâ€æŒ‡ä»¤" #~ msgid "invalid `override' directive" #~ msgstr "无效的“overrideâ€æŒ‡ä»¤" #~ msgid "" #~ "\n" #~ "%s # of strings in strcache: %d\n" #~ msgstr "" #~ "\n" #~ "%s strcache 中的字符串数é‡: %d\n" #~ msgid "-warning, CTRL-Y will leave sub-process(es) around.\n" #~ msgstr "-警告, CTRL-Y 将利刀å­è¿›ç¨‹çŽ¯å¢ƒã€‚\n" #~ msgid "" #~ "\n" #~ "# No files." #~ msgstr "" #~ "\n" #~ "# 无文件。" #~ msgid "" #~ "\n" #~ "# %u files in %u hash buckets.\n" #~ msgstr "" #~ "\n" #~ "# 有 %u 个文件存储在 %u 个æ‚凑å•元中。\n" #~ msgid "# average %.3f files per bucket, max %u files in one bucket.\n" #~ msgstr "# æ¯ä¸ªå•元平å‡å«æœ‰ %.3f 个文件,一个å•å…ƒæœ€å¤šå«æœ‰ %u 个文件。\n" #~ msgid "Syntax error, still inside '\"'\n" #~ msgstr "语法错误,ä»ç„¶åœ¨â€œ\"â€ä¹‹ä¸­\n" #~ msgid "Got a SIGCHLD; %u unreaped children.\n" #~ msgstr "收到 SIGCHLD ä¿¡å·ï¼›å°šæœ‰ %u 个å­è¿›ç¨‹å­˜åœ¨ã€‚\n" #~ msgid "DIRECTORY" #~ msgstr "DIRECTORY" #~ msgid "Change to DIRECTORY before doing anything" #~ msgstr "在åšä»»ä½•事之å‰è½¬ç§»åˆ° DIRECTORY 中" #~ msgid "FLAGS" #~ msgstr "标志" #~ msgid "Suspend process to allow a debugger to attach" #~ msgstr "挂起进程以便调试器进行连接" #~ msgid "Environment variables override makefiles" #~ msgstr "环境å˜é‡è¦†ç›– makefile" #~ msgid "FILE" #~ msgstr "FILE" #~ msgid "Read FILE as a makefile" #~ msgstr "å°† FILE 作为 makefile 读入" #~ msgid "Search DIRECTORY for included makefiles" #~ msgstr "在 DIRECTORY 中æœç´¢å¼•入的 makefile" #~ msgid "Don't start multiple jobs unless load is below N" #~ msgstr "除éžè´Ÿè½½ä½ŽäºŽ N å¦åˆ™å°±ä¸å¯åŠ¨å¤šä¸ªä»»åŠ¡" #~ msgid "Don't actually run any commands; just print them" #~ msgstr "ä¸ä¼šå®žé™…è¿è¡Œä»»ä½•å‘½ä»¤ï¼›åªæ˜¯æ‰“å°å®ƒä»¬" #~ msgid "Consider FILE to be very old and don't remake it" #~ msgstr "å°† FILE 认定为过于陈旧而ä¸é‡çŽ°åˆ›å»ºå®ƒ" #~ msgid "Don't echo commands" #~ msgstr "ä¸è¦å›žæ˜¾å‘½ä»¤" #~ msgid "Turns off -k" #~ msgstr "关闭 -k" #~ msgid "Consider FILE to be infinitely new" #~ msgstr "å°† FILE çœ‹åšæ— é™æ–°" #~ msgid "Do not specify -j or --jobs if sh.exe is not available." #~ msgstr "如果 sh.exe ä¸å¯ç”¨ï¼Œå°±ä¸è¦ç»™å‡º -j 或 --jobs。" #~ msgid "Resetting make for single job mode." #~ msgstr "å°† make é‡ç½®ä¸ºå•任务模å¼ã€‚" #~ msgid "Entering" #~ msgstr "正在进入" #~ msgid "Leaving" #~ msgstr "正在离开" #~ msgid "no file name for `%sinclude'" #~ msgstr "“%sinclude†没有文件å" #~ msgid "# No variables." #~ msgstr "# 没有å˜é‡ã€‚" #~ msgid "# average of %.1f variables per bucket, max %u in one bucket.\n" #~ msgstr "# æ¯ä¸ªæ‚凑å•元平å‡å­˜å‚¨ %.1f 个å˜é‡ï¼Œä¸€ä¸ªå•元最多存储 %u 个。\n" #~ msgid "# average of %d.%d variables per bucket, max %u in one bucket.\n" #~ msgstr "# æ¯ä¸ªæ‚凑å•元平å‡å­˜å‚¨ %d.%d 个å˜é‡ï¼Œä¸€ä¸ªå•元最多存储 %u 个。\n" make-4.3/po/es.gmo0000644000175000017500000013163413611136532010760 00000000000000Þ•®Œ Aü$$+$&J$q$$!Š$-¬$Ú$ ì$- %;%'Q%#y%% ´%Â%à%Pù%;J&"†&©& Å&tæ&L['P¨'Dù'9>(Mx(@Æ(o)Gw)o¿)P/*l€*Fí*J4+€+9,C:,f~,_å,;E-:-O¼-J .}W.uÕ.~K/>Ê/M 0CW02›0FÎ0I1;_1 ›1¥1"Â1 å1ò1 22&2 ?2J2e2x2 Š2”2£2¬2%½2ã27ì2$333C3/[3‹3¤3¼3Ö3(ô34&24*Y4&„4+«4×4#ì4#5)45-^5,Œ5¹5Ò5$ç59 6F63e6™61¶6è677/7!F7$h7=7GË7G89[8•8ž8"¥8È8å8;9!?9a9+}9©9¼9Ö9,ð9:%;:,a:-Ž: ¼:&Ý:;#;C;!c;.…;´;Ä;ÍÙ;§</Ç<÷<& = 4=%U={=›=¯=1Ä= ö=>#>#=>La>6®>å>6?A8?>z? ¹?+Ã?*ï?@ 2@<@1D@2v@ ©@µ@Î@"ã@*A1A@A PAqA A ™A£A»A ÛA èA%õAB+;B$gBŒB¦B ÅBÏBéBC+CHC!eC ‡C”C®C ·CÅCÎCâCD$D&_0X_‰_=©_;ç_:#`1^`,`H½`4a*;a"fa/‰a8¹a7òa*b>b Nby\b"Öc/ùc2)d\d ld-xd3¦dÚd)ñd7eSe7qe/©eÙe öe9f >f`_fFÀf5g&=g'dgªŒgQ7h\‰hVæh.=ialiKÎisjVŽjvåjf\krÃkd6lU›l—ñlJ‰mMÔmk"nuŽn?ocDok¨o`pupy÷p‡qqMùqšGr_âr<BsOsGÏs<t Tt&_t"†t ©t-·t åtót u#u!6uXuwu ’uœu ±u½u%Îu ôu9v}+E}#q}+•}QÁ}'~ ;~0\~~¡~¾~2Û~*.2Y3Œ"À+ã€!.€!P€.r€1¡€'Ó€,û€ü(8%‚M^‚¬‚/‚'ò‚+ƒ$FƒkƒƒƒN˜ƒçƒùƒ'„->„al„R΄!!…MC…I‘…DÛ… †)*†.T†!ƒ† ¥†±†Bº†Dý†B‡S‡o‡/‡‡,·‡ä‡õ‡+ˆ&=ˆ dˆrˆ$‚ˆ&§ˆΈÞˆ,õˆ!"‰7D‰!|‰ž‰'¸‰ à‰ë‰ Š&Š+DŠpŠŠ °Š;¼ŠøŠ‹‹‹)6‹`‹(|‹,¥‹&Ò‹/ù‹)Œ+EŒ3qŒ:¥Œ+àŒ, 9-U5ƒ&¹&àŽ ŽŽ$Ž+<ŽhŽ‚Ž –Ž!¢ŽGÄŽ; +H.t-£ÑäId3ƒ)·@á"‘K2‘ ~‘NŸ‘/î‘K’(j’&“’º’8½’-ö’B$“g“Ex“¾“2Ù“ ”I”!a”;ƒ”2¿”<ò”1/•@a•¢•7¼• ô•þ•–'–1=–1o–?¡–[á–Z=—1˜—0Ê—>û—-:˜ h˜5t˜3ª˜1Þ˜5™*F™/q™$¡™Æ™Ö™ß™ç™'þ™1&š Xš+yš¥š!®š*К)ûš5%›H[›O¤›:ô›D/œ tœ>œ1¾œðœ)40)e'$·Ü-ö$ž 7ž Xž5yž6¯ž)æžLŸ]Ÿ>tŸ ³Ÿ<ÁŸGþŸ>F =… %àCé -¡<¡T¡9s¡ ­¡!¹¡?Û¡¢5¢ =¢K¢Ak¢L­¢Kú¢-F£$t£™£Y¸£F¤>Y¤˜¤±¤7ˤ¥¥/3¥>c¥5¢¥YØ¥"2¦U¦q¦*¦O»¦; §G§,P§}§*ާ¹§<̧ ¨6'¨B^¨ ¡¨¨AŨ@©AH©9Š©=Ä©>ª)Aª kªJyª7Ī üª« :«6G«9~«3¸«4ì«!¬8?¬Bx¬5»¬'ñ¬@­8Z­<“­$Э õ­=®(T®G}®1Å®7÷®2/¯b¯u¯6¯.Ưbõ¯XX°W±°@ ±DJ±n±8þ±<7²1t²1¦²;ز:³O³!i³‹³’’ž­u› ÙfŠœ´hcÓ='6݉#‰€“þEAf—)«$­¡É ~‘à k©µŒ9|jè2e-S„&vs•Ü`N¡H !š¨' ¦1uD§ô{}&.Y« Ïÿê?V¶50 mO¾v…JõK‡سöºxWQ ]tr–9 {C4ƒB±ÂMT†,\Z0š˰q:¨ó œU71ÌrHÛl™<:øò¿3B¢|/æjcP¸¯g5²Š—ç(+Áb-[+@†}~ŽzÊ™bFYä>n›"*]€,˜íÑlðQ =£‹Ldaã`8Ð÷åZÍ”#©@%ÎgnMÃsª_ÕD\S®ùTR„^7‚Ò ‹ _kEKž¬Vh6$¤/dwŸŸXúƒN4R¢^xtëLª®Ö»‘q*Åâ>W[ì§¹‡Ô·˜ÇF;!3PJe•y‚ÆoG¥ ;¥¼£I”ŽpˆéĈ"ß×GÚŒ“zÀo)ÞmUXa8¤Aý¬ip2(ïO–IiȦ…y½.ñîü%áCûw<? # %u 'vpath' search paths. # %u implicit rules, %u (%.1f%%) terminal. # %u pattern-specific variable values # Directories # Files # Finished Make data base on %s # General ('VPATH' variable) search path: # # Implicit Rules # Make data base, printed on %s # No general ('VPATH' variable) search path. # No implicit rules. # No pattern-specific variable values. # Pattern-specific Variable Values # VPATH Search Paths # Variables # files hash-table stats: # %s No strcache buffers %s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu B %s strcache performance: lookups = %lu / hit rate = %lu%% Counted %d args in failed launch This program built for %s This program built for %s (%s) Unhandled exception filter called from program %s ExceptionCode = %lx ExceptionFlags = %lx ExceptionAddress = 0x%p --debug[=FLAGS] Print various types of debugging information. --no-print-directory Turn off -w, even if it was turned on implicitly. --no-silent Echo recipes (disable --silent mode). --trace Print tracing information. --warn-undefined-variables Warn when an undefined variable is referenced. -B, --always-make Unconditionally make all targets. -C DIRECTORY, --directory=DIRECTORY Change to DIRECTORY before doing anything. -E STRING, --eval=STRING Evaluate STRING as a makefile statement. -I DIRECTORY, --include-dir=DIRECTORY Search DIRECTORY for included makefiles. -L, --check-symlink-times Use the latest mtime between symlinks and target. -O[TYPE], --output-sync[=TYPE] Synchronize output of parallel jobs by TYPE. -R, --no-builtin-variables Disable the built-in variable settings. -S, --no-keep-going, --stop Turns off -k. -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE Consider FILE to be infinitely new. -b, -m Ignored for compatibility. -d Print lots of debugging information. -e, --environment-overrides Environment variables override makefiles. -f FILE, --file=FILE, --makefile=FILE Read FILE as a makefile. -h, --help Print this message and exit. -i, --ignore-errors Ignore errors from recipes. -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no arg. -k, --keep-going Keep going when some targets can't be made. -l [N], --load-average[=N], --max-load[=N] Don't start multiple jobs unless load is below N. -n, --just-print, --dry-run, --recon Don't actually run any recipe; just print them. -o FILE, --old-file=FILE, --assume-old=FILE Consider FILE to be very old and don't remake it. -p, --print-data-base Print make's internal database. -q, --question Run no recipe; exit status says if up to date. -r, --no-builtin-rules Disable the built-in implicit rules. -s, --silent, --quiet Don't echo recipes. -t, --touch Touch targets instead of remaking them. -v, --version Print the version number of make and exit. -w, --print-directory Print the current directory. Date %s Ignoring VPATH name '%s'. uid = %d, gid = %d, mode = 0%o. (built-in): (core dumped) (don't care) (from '%s', line %lu) (from '%s', line %lu): (ignored) (name might be truncated) (no default goal) (no ~ expansion) (remote) (search path) files, impossibilities impossibilities in %lu directories. so far.# A default, MAKEFILES, or -include/sinclude makefile.# Also makes:# Builtin rule# Command line target.# Dependencies recipe running (THIS IS A BUG).# Failed to be updated.# File does not exist.# File has been updated.# File has not been updated.# File is an intermediate prerequisite.# File is very old.# Implicit rule search has been done.# Implicit rule search has not been done.# Implicit/static pattern stem: '%s' # Invalid value in 'command_state' member!# Last modified %s # Modification time never checked.# Needs to be updated (-q is set).# Phony target (prerequisite of .PHONY).# Precious file (prerequisite of .PRECIOUS).# Recipe currently running (THIS IS A BUG).# Successfully updated.# recipe to execute# %s (device %d, inode [%d,%d,%d]): # %s (device %d, inode [%d,%d,%d]): could not be opened. # %s (device %ld, inode %ld): # %s (device %ld, inode %ld): could not be opened. # %s (key %s, mtime %I64u): # %s (key %s, mtime %I64u): could not be opened. # %s: could not be stat'd. # No 'vpath' search paths.# Not a target:# hash-table stats: # # variable set hash-table stats: $SHELL changed (was '%s', now '%s') %s (line %d) Bad shell context (!unixy && !batch_mode_shell) %s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B %s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B %s other used: total = %lu B / count = %lu / avg = %lu B %s%s: %s%s: %s%s: Entering an unknown directory %s: Entering directory '%s' %s: Field '%s' not cached: %s%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p) %s: Leaving an unknown directory %s: Leaving directory '%s' %s: Timestamp out of range; substituting %s%s: failed to load%s: illegal option -- %c %s: invalid option -- %c %s: option '%c%s' doesn't allow an argument %s: option '%s' is ambiguous %s: option '%s' requires an argument %s: option '--%s' doesn't allow an argument %s: option '-W %s' doesn't allow an argument %s: option '-W %s' is ambiguous %s: option requires an argument -- %c %s: target '%s' does not exist%s: unrecognized option '%c%s' %s: unrecognized option '--%s' %s: update target '%s' due to: %s%s: user %lu (real %lu), group %lu (real %lu) %sBuilt for %s %sBuilt for %s (%s) %sLicense GPLv3+: GNU GPL version 3 or later %sThis is free software: you are free to change and redistribute it. %sThere is NO WARRANTY, to the extent permitted by law. %sNo rule to make target '%s'%s%sNo rule to make target '%s', needed by '%s'%s%s[%s: %s] Error %d%s%s[%u]: Entering an unknown directory %s[%u]: Entering directory '%s' %s[%u]: Leaving an unknown directory %s[%u]: Leaving directory '%s' '%s' is up to date.'override' directive*** Archive member '%s' may be bogus; not deleted*** Break. *** Deleting file '%s'*** Deleting intermediate file '%s'*** Waiting for unfinished jobs....*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp*** [%s] Archive member '%s' may be bogus; not deleted*** [%s] Deleting file '%s'*** mixed implicit and normal rules: deprecated syntax-O[TYPE] (--output-sync[=TYPE]) is not configured for this build.-warning, you may have to re-enable CTRL-Y handling from DCL. . Stop. .DEFAULT_GOAL contains more than one target.LIBPATTERNS element '%s' is not a pattern; using VPATH name '%s'AbortedAccess violation: read operation at address 0x%p Access violation: write operation at address 0x%p Alarm clockAppend %.*s and cleanup Append output to %s Avoiding implicit rule recursion. BUG: num_pattern_rules is wrong! %u != %uBUILTIN CD %s Bad system callBatch file contents: @echo off Batch file contents:%s %s Broken pipeBus errorCPU time limit exceededCannot create a temporary file Child accessChild exitedCircular %s <- %s dependency dropped.Cleaning up temp batch file %s Cleaning up temp batch file %s failed (%d) Cleaning up temporary batch file %s Collisions=%lu/%lu=%.0f%%Considering target file '%s'. ContinuedCould not restore stderr Could not restore stdin Could not restore stdout Couldn't change back to original directory.CreatePipe() failed (e=%ld) Creating temporary batch file %s Current timeCustoms won't export: %s DCL: %s Danger signalEMT trapEmpty function nameEmpty symbol name for load: %sExecuting %s instead Failed to load symbol %s from %s: %sFailed to open global symbol table: %sFailed to remake makefile '%s'.Failed to remake target file '%s'. File '%s' does not exist. File '%s' was considered already. File size limit exceededFinished prerequisites of target file '%s'. Finished updating file '%s'. Floating point co-processor not availableFloating point exceptionFound an implicit rule for '%s'. Found prerequisite '%s' as VPATH '%s' Function name too long: %sGiving up on target file '%s'. HangupI/O possibleIOT trapIllegal InstructionIncluded makefile '%s' was not found.Information requestInitialized accessInterruptInvalid function name: %sInvalid maximum argument count (%u) for function %sInvalid minimum argument count (%u) for function %sJobserver client (fds %d,%d) Jobserver client (semaphore %s) Jobserver slots limited to %d KilledLive child %p (%s) PID %s %s Load=%lu/%lu=%.0f%%, Loaded object %s is not declared to be GPL compatibleLoading symbol %s from %s Looking for a rule with intermediate file '%s'. Looking for an implicit rule for '%s'. Looking for archive-member implicit rule for '%s'. Make accessMakefile '%s' might loop; not remaking it. Makefile '%s' was not foundMakefile from standard input specified twice.Making '%s' due to always-make flag. Malformed target-specific variable definitionMember '%s'%s: %ld bytes at %ld (%ld). Must remake target '%s'. NoNo implicit rule found for '%s'. No need to remake target '%s'No recipe for '%s' and no prerequisites actually changed. No targetsNo targets specified and no makefile foundNothing to be done for '%s'.Obtained token for child %p (%s). Options: Parallel jobs (-j) are not supported on this platform.Power failurePrerequisite '%s' is newer than target '%s'. Prerequisite '%s' is older than target '%s'. Prerequisite '%s' is order-only for target '%s'. Prerequisite '%s' of target '%s' does not exist. Profiling timer expiredPruning file '%s'. Putting child %p (%s) PID %s%s on the chain. QuitRe-executing[%u]:Reading makefile '%s'Reading makefiles... Reaping losing child %p PID %s %s Reaping winning child %p PID %s %s Recently tried and failed to update file '%s'. Recipe for '%s' will be ignored in favor of the one for '%s'.Recipe for file '%s' was found by implicit rule search,Recipe has too many lines (%ud)Recipe of '%s' is being run. Recipe was specified for file '%s' at %s:%lu,Recursive variable '%s' references itself (eventually)Rehash=%u, Rejecting impossible implicit prerequisite '%s'. Rejecting impossible rule prerequisite '%s'. Released token for child %p (%s). Removing child %p PID %s%s from chain. Removing intermediate files... Report bugs to Resetting to single job (-j1) mode.Resource lostSIGPHONESIGWINDSegmentation faultSkipping UTF-8 BOM in makefile '%s' Skipping UTF-8 BOM in makefile buffer Stem too long: '%s%.*s'. Still updating file '%s'. StoppedStopped (signal)Stopped (tty input)Stopped (tty output)Successfully remade target file '%s'. Symbolic links not supported: disabling -L.Target '%s' is double-colon and has no prerequisites. Target '%s' not remade because of errors.Target file '%s' needs to be remade under -q. TerminatedThe 'load' operation is not supported on this platform.The prerequisites of '%s' are being made. Trace/breakpoint trapTrying implicit prerequisite '%s'. Trying pattern rule with stem '%.*s'. Trying rule prerequisite '%s'. Updating goal targets.... Updating makefiles.... Urgent I/O conditionUsage: %s [options] [target] ... User accessUser defined signal 1User defined signal 2Using default commands for '%s'. Using default recipe for '%s'. Virtual timer expiredWarning: File '%s' has modification time %s s in the futureWindow changedattempt to use unsupported feature: '%s'automaticbut '%s' is now considered the same file as '%s'.can't allocate %lu bytes for hash table: memory exhaustedcan't rename double-colon '%s' to single-colon '%s'can't rename single-colon '%s' to double-colon '%s'cannot enforce load limit: cannot enforce load limits on this operating systemclose: %s: %scommand linecreating jobs pipecreating jobserver semaphore: (Error %ld: %s)defaultduping jobs pipeempty string invalid as file nameempty variable nameenvironmentenvironment under -eextraneous '%s'extraneous text after '%s' directiveextraneous text after 'define' directiveextraneous text after 'endef' directivefile: invalid file operation: %sfile: missing filenamefile: too many argumentsfind_and_set_shell() path search set default_shell = %s find_and_set_shell() setting default_shell = %s first argument to 'word' function must be greater than 0fopen (temporary file)fwrite (temporary file)grouped targets must provide a recipeguile: Evaluating '%s' guile: Expanding '%s' init jobserver pipeinsufficient number of arguments (%d) to function '%s'internal error: invalid --jobserver-auth string '%s'internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)invalid syntax in conditionaljob server shut downjobserver pipelinelbr$ini_control() failed with status = %dlbr$set_module() failed to extract module info, status = %dmake reaped child pid %s, still waiting for pid %s makefilemissing 'endef', unterminated 'define'missing 'endif'missing rule before recipemissing separatormissing separator (did you mean TAB instead of 8 spaces?)missing target patternmixed implicit and normal rulesmixed implicit and static pattern rulesmultiple target patternsnono more file handles: could not duplicate stderr no more file handles: could not duplicate stdin no more file handles: could not duplicate stdout non-numeric first argument to 'word' functionnon-numeric first argument to 'wordlist' functionnon-numeric second argument to 'wordlist' functiononly one 'else' per conditionalopen: %s: %sprerequisites cannot be defined in recipesprocess_easy() failed to launch process (e=%ld) pselect jobs piperead jobs piperead: %s: %srecipe commences before first targetrelease jobserver semaphore: (Error %ld: %s)semaphore or child process wait: (Error %ld: %s)spawnvpe: environment space might be exhaustedsys$search() failed with %d target '%s' doesn't match the target patterntarget '%s' given more than once in the same ruletarget file '%s' has both : and :: entriestarget pattern contains no '%%'the '%s%s' option requires a non-empty string argumentthe '-%c' option requires a positive integer argumenttouch archive member is not available on VMStouch: '%s' is not a valid archivetouch: Archive '%s' does not existtouch: Bad return code from ar_member_touch on '%s'touch: Member '%s' does not exist in '%s'unable to open library '%s' to lookup member status %dunimplemented on this platform: function '%s'unknown debug level specification '%s'unknown output-sync type '%s'unknown signalunlink (temporary file): unterminated call to function '%s': missing '%c'unterminated variable referencewarning: Clock skew detected. Your build may be incomplete.warning: -j%d forced in makefile: resetting jobserver mode.warning: -j%d forced in submake: resetting jobserver mode.warning: NUL character seen; rest of line ignoredwarning: ignoring old recipe for target '%s'warning: jobserver unavailable: using -j1. Add '+' to parent make rule.warning: overriding group membership for target '%s'warning: overriding recipe for target '%s'warning: undefined variable '%.*s'windows32_openpipe(): process_init_fd() failed windows32_openpipe: DuplicateHandle(Err) failed (e=%ld) windows32_openpipe: DuplicateHandle(In) failed (e=%ld) write error: stdoutwrite jobserverwrite: %s: %sProject-Id-Version: GNU make 4.2.93 Report-Msgid-Bugs-To: bug-make@gnu.org PO-Revision-Date: 2020-01-03 15:38+0100 Last-Translator: Antonio Ceballos Language-Team: Spanish Language: es MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8-bit X-Bugs: Report translation errors to the Language-Team address. # %u rutas de búsqueda 'vpath'. # %u reglas implícitas, %u (%.1f%%) terminal. # %u valores de variables específicas al patrón # Directorios # Archivos # Se termina la base de datos de Make en %s # Ruta de búsqueda general (variable 'VPATH'): # # Reglas implícitas. # Base de datos del Make, mostrada en %s # No hay ruta de búsqueda general (variable 'VPATH'). # No hay reglas implícitas. # No hay valores de variables específicas al patrón. # Valores de variables específicas al patrón # Rutas de búsqueda VPATH # Variables # estadísticas de la tabla «hash» de los archivos: # %s No hay «buffers» strcache %s «buffers» strcache: %lu (%lu) / cadenas = %lu / almacenamiento = %lu B / promedio = %lu B %s rendimiento de strcache: búsquedas = %lu / coincidencias = %lu%% Se contaron %d argumentos en el lanzamiento fallido Este programa fue construido para %s Este programa construido para %s (%s) Se ha llamado un filtro de excepción no manejado desde el programa %s Código de la excepción = %lx Banderas de la excepción = %lx Dirección de la excepción = 0x%p --debug[=BANDERAS] Se imprimirán varios tipos de información de depurado. --no-print-directory Desactiva -w, aún cuando haya sido activado implícitamente. --no-silent Muestra las instrucciones (desactiva el modo --silent). --trace Muestra trazas. --warn-undefined-variables Advierte cuando se hace una referencia a una variable no definida. -B, --always-make Hace incondicionalmente todos los objetivos. -C DIRECTORIO, --directory=DIRECTORIO Se cambia al DIRECTORIO antes de hacer nada. -E CADENA, --eval=CADENA Evalúa la CADENA como una instrucción de un makefile. -I DIRECTORIO, --include-dir=DIRECTORIO Busca dentro del DIRECTORIO los makefiles incluidos. -L, --check-symlink-times Utiliza el último mtime entre los enlaces simbólicos y los objetivos. -O[TIPO], --output-sync[=TIPO] Sincroniza la salida de tareas paralelas por tipo. -R, --no-builtin-variables Se deshabilitan los ajustes a las variables almacenadas internamente. -S, --no-keep-going, --stop Desactiva la opción -k. -W ARCHIVO, --what-if=ARCHIVO, --new-file=ARCHIVO, --assume-new=ARCHIVO Supone que ARCHIVO es infinitamente reciente. -b, -m No se tendrá en cuenta por compatibilidad. -d Se imprimirán grandes cantidades de información de depurado. -e, --environment-overrides Las variables ambientales se imponen a las de los makefiles. -f ARCHIVO, --file=ARCHIVO, --makefile=ARCHIVO Lee al ARCHIVO como un makefile. -h, --help Muestra este mensaje y finaliza. -i, --ignore-errors No se toman en cuenta los errores provenientes de las instrucciones. -j [N], --jobs[=N] Se permiten N trabajos a la vez; si no se especifica un argumento son infinitos. -k, --keep-going Sigue avanzando aún cuando no se puedan crear algunos objetivos. -l [N], --load-average[=N], --max-load[=N] No inicia con trabajos múltiples a menos que la carga esté por debajo de N. -n, --just-print, --dry-run, --recon No ejecuta ninguna instrucción; sólo las muestra. -o ARCHIVO, --old-file=ARCHIVO, --assume-old=ARCHIVO Supone que ARCHIVO es muy viejo y no lo reconstruye. -p, --print-data-base Se imprime la base de datos interna de 'make'. -q, --question No se ejecutan las instrucciones; el estado de salida indicará si están actualizados. -r, --no-builtin-rules Se deshabilitan las reglas implícitas almacenadas internamente. -s, --silent, --quiet No muestra las instrucciones. -t, --touch Se tocan los objetivos en vez de reconstruirlos. -v, --version Muestra la versión del make y finaliza. -w, --print-directory Muestra el directorio actual. Fecha %s Se ignora el nombre del VPATH '%s'. uid = %d, gid = %d, modo = 0%o. (integrado): (core dumped) [Núcleo vaciado a un archivo] (no importa) (de '%s', línea %lu): (de '%s', linea %lu): (no tiene efecto) (el nombre puede estar truncado) (no hay objetivo por defecto) (no hay expansión del ~) (remoto) (ruta de búsqueda) archivos, imposibilidades imposibilidades en %lu directorios. hasta ahora.# Por omisión, MAKEFILES, o -include/sinclude makefile.# También hace:# Regla incorporada# Objetivo en línea de instrucciones.# Las instrucciones de las dependencias continúan en ejecución (ESTO ES UN BUG).# Fallo al ser actualizado.# El archivo no existe.# El archivo ha sido actualizado.# El archivo ha sido actualizado.# El archivo es una dependencia intermedia.# El archivo es muy viejo.# La búsqueda de reglas implícitas ha sido efectuada.# La búsqueda de reglas implícitas ha sido efectuada.# Tema del patrón implícita/estática: '%s' # ¡Valor inválido en el miembro 'command_state'!# Última modificación %s # La fecha de modificación no se comprobó.# Necesita ser actualizado (la opción -q está activa).# objetivo falso (dependencia de .PHONY).# Archivo valioso (es una dependencia de .PRECIOUS).# Las instrucciones continúan en ejecución (ESTO ES UN BUG).# Actualizado con éxito.# las instrucciones para ejecutar# %s (dispositivo %d, nodo-i [%d,%d,%d]): # %s (dispositivo %d, nodo-i [%d,%d,%d]): posiblemente no se pueda abrir. # %s (dispositivo %ld, nodo-i %ld): # %s (dispositivo %ld, nodo-i %ld): no se pudo abrir. # %s (llave %s, mtime %I64u): # %s (llave %s, mtime %I64u): no se pudo abrir. # %s: podría no estar establecido. # No hay rutas de búsqueda 'vpath'.# No es un objetivo:# estadísticas de la tabla «hash»: # # estadísticas del conjunto de variables de la tabla «hash»: $SHELL ha cambiado (era '%s' y ahora es '%s') %s (linea %d) Contexto de shell erróneo (!unixy && !batch_mode_shell) %s «buffer» actual: tamaño = %hu B / utilizado = %hu B / número = %hu / promedio = %u B %s otros libre: total = %lu B / máx = %lu B / mín = %lu B / promedio = %hu B %s otros utilizado: total = %lu B / / número = %lu / promedio = %lu B %s%s: %s%s: %s%s: se ingresa a un directorio desconocido %s: se entra en el directorio '%s' %s: El campo '%s' no está en «cache»: %s%s: Se atrapó una interrupción/excepción (código = 0x%lx, dirección = 0x%p) %s: se sale del directorio desconocido %s: se sale del directorio '%s' %s: Fecha fuera de intervalo; sustituyéndola %s%s: fallo al cargar%s: opción inválida -- %c %s: opción inválida -- %c %s: la opción '%c%s' no admite ningún argumento %s: la opción '%s' es ambigua %s: la opción '%s' requiere un argumento %s: la opción '--%s' no admite ningún argumento %s: la opción '-W %s' no admite ningún argumento %s: la opción '-W %s' es ambigua %s: la opción requiere un argumento -- %c %s: el objetivo '%s' no existe%s: opción no reconocida '%c%s' %s: opción no reconocida '--%s' %s: actualizar el objetivo '%s' a causa de: %s%s: usuario %lu (real %lu), grupo %lu (real %lu) %sEste programa fue construido para %s %sEste programa fue construido para %s (%s) %sLicencia GPLv3+: GNU GPL versión 3 o posterior %sEste es software libre: cualquiera es libre para redistribuirlo y modificarlo. %sNo existe GARANTÃA ALGUNA, hasta los límites permitidos por las leyes aplicables. %sNo hay ninguna regla para construir el objetivo '%s'%s%sNo hay ninguna regla para construir el objetivo '%s', necesario para '%s'%s%s[%s: %s] Error %d%s%s[%u]: se ingresa a un directorio desconocido %s[%u]: se entra en el directorio '%s' %s[%u]: se sale del directorio desconocido %s[%u]: se sale del directorio '%s' '%s' está actualizado.directiva 'override'*** El miembro del archivo '%s' podría estar incorrecto; aunque no se elimina*** Interrumpir. *** Se borra el archivo '%s'*** Se borra el archivo intermedio '%s'*** Se espera a que terminen otras tareas....*** Atención: el archivo .LOW_RESOLUTION_TIME '%s' tiene una marca de tiempo de alta resolución*** [%s] El miembro de archivo '%s' podría estar incorrecto; aunque no se elimina*** [%s] Se borra el archivo '%s'*** las reglas implícitas y las normales están mezcladas: sintaxis obsoleta-O[TIPO] (--output-sync[=TIPO]) no está configurado para este «build».-atención, deberás rehabilitar el manejo del CTRL-Y desde el DCL. . Alto. .DEFAULT_GOAL contien más de un objetivoEl elemento .LIBPATTERNS '%s' no es un patrón; se usa el nombre del VPATH '%s'AbortadoViolación de acceso: operación de lectura en la dirección 0x%p Violación de acceso: operación de escritura en la dirección 0x%p Alarma del relojAgregada a %.*s y limpieza Salida redirigida a %s Evitando la recursión en la regla implícita. BUG: ¡num_pattern_rules erróneo! %u != %uCD INTEGRADO %s Llamada al sistema erróneaContenido del archivo de lotes: @echo off Contenido del archivo de lotes:%s %s Tubería rotaError en el busSe agotó el tiempo de CPU permitidoNo se puede crear un archivo temporal Acceso del hijoProceso hijo terminadoSe elimina la dependencia circular %s <- %s.Se limpia el archivo temporal %s Fallo al limpiar el archivo temporal por lotes %s (%d) Limpiando el archivo temporal %s Colisiones=%lu/%lu=%.0f%%Se considera el archivo objetivo '%s'. ContinuadoNo se puede restaurar stderr No se puede restaurar stdin No se puede restaurar stdout No se pudo regresar al directorio original.Fallo en CreatePipe(), (e=%ld) Se crea el archivo temporal %s Hora actualLos valores definidos por el usuario no se exportarán: %s DCL: %s Señal de peligroEMT trapNombre de función vacíoNombre de símbolo vacío en la carga: %sEn su lugar, se ejecuta %s Fallo al cargar símbolo %s desde %s: %sFallo al abrir tabla global de símbolos: %sFallo al reconstruir el makefile '%s'.Fallo al reconstruir el archivo objetivo '%s'. El archivo '%s' no existe. Ya se ha tenido en cuenta el archivo '%s'. Se excedió el tamaño máximo de archivo permitidoSe terminaron las dependencias del archivo objetivo '%s'. Se terminó de actualizar el archivo '%s'. Coprocesador de punto flotante no disponibleExcepción de coma flotanteSe encontró una regla implícita para '%s'. Se encontró la dependencia '%s' como la VPATH '%s'. Nombre de función demasiado largo: %sSe abandona el archivo objetivo '%s'. ColgadoPosible I/OIOT trapInstrucción no válidaNo se encontró el makefile incluído '%s'.Petición de informaciónAcceso inicializadoInterrumpirNombre de función no válido: %sEl número máximo de argumentos (%u) no es válido para la función %sNúmero insuficiente de argumentos (%u) para la función %sCliente del servidor de tareas (fds %d,%d) Cliente del servidor de tareas (semáforo %s) Ranuras del servidor de tareas limitads a %d Terminado (killed)Hijo activo %p (%s) PID %s %s Carga=%lu/%lu=%.0f%%, El objeto %s que se ha cargado no está declarado como compatible con GPLCargando símbolo %s desde %s Se busca una regla con el archivo intermedio '%s'. Buscando una regla implícita para '%s'. Buscando una regla implícita para el miembro del archivo '%s'. Acceso del MakeEl makefile '%s' podría entrar en bucle; por lo tanto, no se reconstruye. No se encontró el makefile '%s'El archivo Makefile ha sido especificado dos veces desde la entrada estándardHaciendo '%s' debido a la bandera always-make. La definición de las variables específicas al blanco está mal construidaMiembro '%s'%s: %ld bytes en %ld (%ld). Se debe reconstruir el objetivo '%s'. NoNo se ha encontrado ninguna regla implícita para '%s'. No es necesario reconstruir el objetivo '%s'.No hay instrucciones para '%s' y ninguna dependencia ha cambiado. No hay objetivosNo se especificó ningún objetivo y no se encontró ningún makefileNo se hace nada para '%s'.Se obtiene el token para el proceso hijo %p (%s). Opciones: Los trabajos en paralelo (-j) no están implementados en esta plataforma.Falla de alimentación eléctricaLa dependencia '%s' es más reciente que el objetivo '%s'. La dependencia '%s' es anterior al objetivo '%s'. La dependencia '%s' es solo de orden para el objetivo '%s'. La dependencia '%s' del objetivo '%s' no existe. El contador de tiempo para la generación del perfil ha expiradoSe poda el archivo '%s'. Se pone al proceso hijo %p (%s) PID %s%s en la cadena. FinalizarRe-ejecutando[%u]:Leyendo makefile '%s'Leyendo makefiles... Se recupera al proceso hijo perdido %p PID %s %s Se recupera al proceso hijo ganador %p PID %s %s Se intentó hace poco, sin éxito, actualizar el archivo '%s'. Las instrucciones para '%s' no serán tenidas en cuenta en favor de las que están en '%s'.Las instrucciones para el archivo '%s' se encontraron por búsqueda en reglas implícitas,Las instrucciones tienen demasiadas líneas (%ud)Las instrucciones de '%s' se están ejecutando. Se especificaron instrucciones para el archivo '%s' en %s:%lu,La variable recursiva '%s' se auto-referenciaRehash=%u, Se rechaza la dependencia implícita imposible '%s'. Se rechaza la regla de dependencia imposible '%s'. Se libera el token para el proceso hijo %p (%s). Se elimina al proceso hijo %p PID %s%s de la cadena. *** Se borran los archivos intermedios... Informe sobre los errores a Reajustando al modo monotarea (-j1).Recurso perdidoSIGPHONESIGWINDFallo de segmentaciónse salta BOM UTF-8 en el makefile '%s' se salta BOM UTF-8 en el «buffer» del makefile Tema demasiado largo: '%s%.*s'. Se continúa actualizando el archivo '%s'. DetenidoDetenido (se requiere una señal)Detenido (se requiere entrada de terminal)Detenido (se requiere salida de terminal)Se reconstruyó con éxito el archivo objetivo '%s'. Los enlaces simbólicos no están implementados: se deshabilitan con -L.El objetivo '%s' es de tipo dos puntos dos veces (::) y no tiene dependencias. Debido a los errores, el objetivo '%s' no se reconstruyó.Se necesita reconstruir el archivo objetivo '%s' con la opción -q. FinalizadoLa operación 'load' no está implementada en esta plataforma.Se están construyendo las dependencias de '%s'. Trace/breakpoint trapProbando la dependencia implícita '%s'. Intentando una regla de patrón con el tema '%.*s'. Intentando la regla de dependencia '%s'. Actualizando los objetivos finales.... Actualizando archivos makefiles.... Condición urgente de I/OModo de empleo: %s [opciones] [objetivo] ... Acceso del usuarioSeñal 1 definida por el usuarioSeñal 2 definida por el usuarioSe utilizan las instrucciones por defecto para '%s'. Se utilizan las instrucciones por omisión para '%s'. El contador de tiempo virtual ha expiradoAtención: El archivo '%s' tiene una hora de modificación %s s en el futuroLa ventana ha cambiadoSe intentó utilizar una característica no implementada: '%s'automática/opero '%s' se considera ahora como el mismo archivo que `%s'.no se pueden reservar %lu bytes para la tabla «hash»: memoria agotadano se pueden cambiar dos puntos (:) '%s' por un punto (.) '%s'no se puede cambiar un punto (.) '%s' por dos puntos (:) '%s'no se puede forzar la carga límite: no se pueden forzar los límites de carga en este sistema operativocerrar: %s: %slínea de instruccionescreando una tubería de tareascreando semáforo del servidor de tareas: (Error %ld: %s)por defectoduplicando una tubería de tareasno se permite que una cadena vacía sea el nombre de un archivonombre de variable vacíoentornocon -e activoirrelevante o mal colocado '%s'Texto irrelevante o mal colocado después de la instrucción '%s'Hay un texto irrelevante o mal colocado después de la instrucción 'define'Hay un texto irrelevante o mal colocado después de la instrucción 'endef'archivo: operación de archivo no válida: %sarchivo: falta el nombre del archivoarchivo: demasiados argumentosla función find_and_set_shell() pone el valor de la ruta de búsceda default_shell = %s la función find_and_set_shell() pone el valor del default_shell = %s el primer argumento de la función 'word' debe ser mayor que 0fopen (archivo temporal)fwrite (archivo temporal)los objetivos agrupados deben proporcionar instrucciónguile: Evaluando '%s' guile: Expandiendo '%s' se inicializa la tubería al servidor de tareasNúmero de argumentos (%d) insuficientes para la función '%s'error interno: cadena --jobserver-auth inválida '%s'error interno: no se pudo abrir el semáforo del servidor de tareas '%s': (Error %ld: %s)sintaxis no válida en condicionalservidor de tareas detenidotubería al servidor de tareasfallo en lbr$ini_control() con estado = %dfallo en lbr$set_module() para extraer la información del módulo, estado = %dhacer un hijo descarriado %s, aún se espera por el pid %s makefilefalta un 'endef', no se terminó un 'define'falta un 'endif'falta una regla antes de las instruccionesfalta un separadorfalta un separador (¿quiso decir TAB en vez de 8 espacios?)falta un patrón de objetivoslas reglas implícitas y las normales están mezcladaslas reglas implícitas y las de patrón estático están mezcladashay varios patrones de objetivosnono hay más manejadores de archivos: no se puede duplicar stderr no hay más manejadores de archivos: no se puede duplicar stdin no hay más manejadores de archivos: no se puede duplicar stdout el primer argumento de la función 'word' no es numéricoel primer argumento de la función 'wordlist' no es numéricoel segundo argumento de la función 'wordlist' no es numéricosólo se admite un 'else' por condicionalabrir: %s: %slos prerequisitos no pueden ser definidos por los guiones de instruccionesfallo en process_easy() para lanzar al proceso (e=%ld) tubería de trabajos «pselect»tubería de trabajos leídosleer: %s: %slas instrucciones comenzaron antes del primer objetivoliberar semáforo del servidor de tareas: (Error %ld: %s)semáforo o proceso hijo en espera: (Error %ld: %s)spawnvpe: el espacio ambiental podría estar agotadofallo en sys$search() con %d el objetivo '%s' no coincide con el patrón de objetivosel objetivo '%s' se proporcionó más de una vez en la misma reglael archivo de objetivos '%s' tiene líneas con : y ::el patrón de objetivo no contiene '%%'la opción '%s%s' requiere un argumento no-vacío de tipo cadenala opción '-%c' requiere un argumento positivo y enteroEl programa para hacer un 'touch' no está disponible en VMStouch: '%s' no es un archivo válidotouch: El archivo '%s' no existetouch: Código de retorno erróneo de ar_member_touch en '%s'touch: El miembro '%s' no existe en '%s'error al abrir la biblioteca '%s' para buscar el estado %d del elementoNo implementado en esta plataforma: función '%s'se especificó un nivel de depuración desconocido '%s'tipo de sincronización de salida desconocido '%s'señal desconocidaunlink (archivo temporal)la llamada a la función '%s' no concluyó: falta '%c'la referencia a la variable está sin terminaratención: Se ha detectado una desviación en el reloj. La construcción podría estar incompleta.atención: se fuerza a -j%d en el makefile: se restablece el modo de servidor de tareas.atención: se fuerza a -j%d en el submake: se restablece el modo de servidor de tareas.atención: hay un carácter NUL; se ignora el resto de la líneaatención: se ignoran las instrucciones viejas para el objetivo '%s'atención: el servidor de tareas no está disponible: se utilizará -j1. Añada '+' a la regla padre del make.atención: se anula pertenencia a grupo al objetivo '%s'atención: se anulan las instrucciones para el objetivo '%s'atención: la variable '%.*s' no ha sido definidawindows32_openpipe(): fallo en process_init_fd() windows32_openpipe: fallo en DuplicateHandle(Err), (e=%ld) windows32_openpipe: fallo en DuplicateHandle(In), (e=%ld) error al escribir: stdoutescribir en el servidor de tareasescribir: %s: %smake-4.3/po/ga.po0000644000175000017500000016604213611136530010573 00000000000000# Irish translations for make. # Copyright (C) 2005 Free Software Foundation, Inc. # This file is distributed under the same license as the make package. # Kevin Patrick Scannell , 2005, 2017. # msgid "" msgstr "" "Project-Id-Version: make 4.2.1\n" "Report-Msgid-Bugs-To: bug-make@gnu.org\n" "POT-Creation-Date: 2020-01-19 15:34-0500\n" "PO-Revision-Date: 2017-01-09 16:02-0500\n" "Last-Translator: Kevin Patrick Scannell \n" "Language-Team: Irish \n" "Language: ga\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" #: src/ar.c:46 #, c-format msgid "attempt to use unsupported feature: '%s'" msgstr "rinneadh iarracht ar ghné gan tacaíocht a úsáid: '%s'" #: src/ar.c:123 #, c-format msgid "touch archive member is not available on VMS" msgstr "ní féidir 'touch' a dhéanamh ar bhall de chartlann ar VMS" #: src/ar.c:147 #, c-format msgid "touch: Archive '%s' does not exist" msgstr "touch: Níl an chartlann '%s' ann" #: src/ar.c:150 #, c-format msgid "touch: '%s' is not a valid archive" msgstr "touch: Níl '%s' ina cartlann bhailí" #: src/ar.c:157 #, c-format msgid "touch: Member '%s' does not exist in '%s'" msgstr "touch: Níl a leithéid de bhall '%s' i '%s'" #: src/ar.c:164 #, c-format msgid "touch: Bad return code from ar_member_touch on '%s'" msgstr "touch: Tháinig droch-chód ar ais ó ar_member_touch ar '%s'" #: src/arscan.c:130 #, c-format msgid "lbr$set_module() failed to extract module info, status = %d" msgstr "" "níorbh fhéidir le lbr$set_module eolas faoin mhodúl a fháil, stádas = %d" #: src/arscan.c:236 #, c-format msgid "lbr$ini_control() failed with status = %d" msgstr "theip ar lbr$ini_control le stádas = %d" #: src/arscan.c:261 #, 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 stádas " "baill %d" #: src/arscan.c:944 #, c-format msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n" msgstr "Ball '%s'%s: %ld beart ag %ld (%ld).\n" #: src/arscan.c:945 msgid " (name might be truncated)" msgstr " (seans go dteascfar an t-ainm)" #: src/arscan.c:947 #, c-format msgid " Date %s" msgstr " Dáta %s" #: src/arscan.c:948 #, c-format msgid " uid = %d, gid = %d, mode = 0%o.\n" msgstr " uid = %d, gid = %d, mód = 0%o.\n" #: src/commands.c:403 #, c-format msgid "Recipe has too many lines (%ud)" msgstr "An iomarca línte san oideas (%ud)" #: src/commands.c:504 msgid "*** Break.\n" msgstr "*** Briseadh.\n" #: src/commands.c:628 #, c-format msgid "*** [%s] Archive member '%s' may be bogus; not deleted" msgstr "*** [%s] Seans gur ball bréige é '%s'; níor scriosadh é" #: src/commands.c:632 #, c-format msgid "*** Archive member '%s' may be bogus; not deleted" msgstr "*** Seans gur ball bréige é '%s'; níor scriosadh é" #: src/commands.c:646 #, c-format msgid "*** [%s] Deleting file '%s'" msgstr "*** [%s] Comhad '%s' á scriosadh" #: src/commands.c:648 #, c-format msgid "*** Deleting file '%s'" msgstr "*** Comhad '%s' á scriosadh" #: src/commands.c:684 msgid "# recipe to execute" msgstr "# oideas le rith" #: src/commands.c:687 msgid " (built-in):" msgstr " (insuite):" #: src/commands.c:689 #, c-format msgid " (from '%s', line %lu):\n" msgstr " (ó '%s', líne %lu):\n" #: src/dir.c:1073 msgid "" "\n" "# Directories\n" msgstr "" "\n" "# Comhadlanna\n" #: src/dir.c:1085 #, c-format msgid "# %s: could not be stat'd.\n" msgstr "# %s: níorbh fhéidir é a stat.\n" #: src/dir.c:1089 msgid "# %s (key %s, mtime %I64u): could not be opened.\n" msgstr "# %s (eochair %s, mtime %I64u): níorbh fhéidir é a oscailt.\n" #: src/dir.c:1094 #, 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íorbh fhéidir é a oscailt.\n" #: src/dir.c:1099 #, 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" #: src/dir.c:1126 msgid "# %s (key %s, mtime %I64u): " msgstr "# %s (eochair %s, mtime %I64u): " #: src/dir.c:1131 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): " msgstr "# %s (gléas %d, i-nód [%d,%d,%d]): " #: src/dir.c:1136 #, c-format msgid "# %s (device %ld, inode %ld): " msgstr "# %s (gléas %ld, i-nód %ld): " #: src/dir.c:1142 src/dir.c:1163 msgid "No" msgstr "Níl" #: src/dir.c:1145 src/dir.c:1166 msgid " files, " msgstr " comhad, " #: src/dir.c:1147 src/dir.c:1168 msgid "no" msgstr "níl" #: src/dir.c:1150 msgid " impossibilities" msgstr " rudaí neamhfhéideartha" #: src/dir.c:1154 msgid " so far." msgstr " go dtí seo." #: src/dir.c:1171 #, c-format msgid " impossibilities in %lu directories.\n" msgstr " rudaí neamhfhéideartha i %lu comhadlann.\n" #: src/expand.c:125 #, c-format msgid "Recursive variable '%s' references itself (eventually)" msgstr "Déanann an athróg athchúrsach '%s' tagairt di féin (ar deireadh)" #: src/expand.c:271 #, c-format msgid "unterminated variable reference" msgstr "tagairt d'athróg gan chríochnú" #: src/file.c:278 #, c-format msgid "Recipe was specified for file '%s' at %s:%lu," msgstr "Sonraíodh oideas le haghaidh comhaid '%s' ag %s:%lu," #: src/file.c:283 #, c-format msgid "Recipe for file '%s' was found by implicit rule search," msgstr "Aimsíodh oideas le haghaidh '%s' trí chuardach ar rialacha intuigthe," #: src/file.c:287 #, c-format msgid "but '%s' is now considered the same file as '%s'." msgstr "ach anois is ionann iad na comhaid '%s' agus '%s'." #: src/file.c:290 #, c-format msgid "Recipe for '%s' will be ignored in favor of the one for '%s'." msgstr "" "Déanfar neamhshuim ar an oideas le haghaidh '%s'; úsáidfear an ceann le " "haghaidh '%s' ina ionad." #: src/file.c:310 #, 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'" #: src/file.c:316 #, 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'" #: src/file.c:408 #, c-format msgid "*** Deleting intermediate file '%s'" msgstr "*** Comhad idirmheánach '%s' á scriosadh" #: src/file.c:412 #, c-format msgid "Removing intermediate files...\n" msgstr "Comhaid idirmheánacha á mbaint...\n" #: src/file.c:872 msgid "Current time" msgstr "An t-am anois" #: src/file.c:876 #, c-format msgid "%s: Timestamp out of range; substituting %s" msgstr "%s: Stampa ama as raon; %s á úsáid ina ionad" #: src/file.c:1016 msgid "# Not a target:" msgstr "# Ní sprioc é:" #: src/file.c:1021 msgid "# Precious file (prerequisite of .PRECIOUS)." msgstr "# Comhad luachmhar (réamhriachtanas de .PRECIOUS)." #: src/file.c:1023 msgid "# Phony target (prerequisite of .PHONY)." msgstr "# Sprioc bhréige (réamhriachtanas de .PHONY)." #: src/file.c:1025 msgid "# Command line target." msgstr "# Sprioc líne na n-orduithe." #: src/file.c:1027 msgid "# A default, MAKEFILES, or -include/sinclude makefile." msgstr "# Makefile réamhshocraithe, nó ó MAKEFILES, nó -include/sinclude." #: src/file.c:1029 msgid "# Builtin rule" msgstr "# Riail insuite" #: src/file.c:1031 msgid "# Implicit rule search has been done." msgstr "# Rinneadh cuardach ar rialacha intuigthe." #: src/file.c:1032 msgid "# Implicit rule search has not been done." msgstr "# Ní dhearnadh cuardach ar rialacha intuigthe." #: src/file.c:1034 #, c-format msgid "# Implicit/static pattern stem: '%s'\n" msgstr "# Stoc patrúin intuigthe/statach: '%s'\n" #: src/file.c:1036 msgid "# File is an intermediate prerequisite." msgstr "# Tá an comhad ina réamhriachtanas idirmheánach." #: src/file.c:1040 msgid "# Also makes:" msgstr "# Déanann sé freisin:" #: src/file.c:1046 msgid "# Modification time never checked." msgstr "# Níor seiceáladh an t-am mionathraithe riamh." #: src/file.c:1048 msgid "# File does not exist." msgstr "# Níl a leithéid de chomhad ann." #: src/file.c:1050 msgid "# File is very old." msgstr "# Tá an comhad an-aosta." #: src/file.c:1055 #, c-format msgid "# Last modified %s\n" msgstr "# Athraithe %s\n" #: src/file.c:1058 msgid "# File has been updated." msgstr "# Nuashonraíodh an comhad." #: src/file.c:1058 msgid "# File has not been updated." msgstr "# Níor nuashonraíodh an comhad." #: src/file.c:1062 msgid "# Recipe currently running (THIS IS A BUG)." msgstr "# Oideas á rith faoi láthair (IS FABHT É SEO)." #: src/file.c:1065 msgid "# Dependencies recipe running (THIS IS A BUG)." msgstr "# Oideas spleáchais á rith (IS FABHT É SEO)." #: src/file.c:1074 msgid "# Successfully updated." msgstr "# D'éirigh leis an nuashonrú." #: src/file.c:1078 msgid "# Needs to be updated (-q is set)." msgstr "# Tá gá le nuashonrú (-q sainithe)." #: src/file.c:1081 msgid "# Failed to be updated." msgstr "# Theip ar an nuashonrú." #: src/file.c:1086 msgid "# Invalid value in 'command_state' member!" msgstr "# Luach neamhbhailí sa bhall 'command_state'!" #: src/file.c:1105 msgid "" "\n" "# Files" msgstr "" "\n" "# Comhaid" #: src/file.c:1109 msgid "" "\n" "# files hash-table stats:\n" "# " msgstr "" "\n" "# comhaid hais-tábla stait:\n" "# " #: src/file.c:1119 #, c-format msgid "%s: Field '%s' not cached: %s" msgstr "%s: Níl réimse '%s' i dtaisce: %s" #: src/function.c:794 msgid "non-numeric first argument to 'word' function" msgstr "neamhuimhriúil an chéad argóint le feidhm 'word'" #: src/function.c:799 #, c-format msgid "first argument to 'word' function must be greater than 0" msgstr "caithfidh an chéad argóint le feidhm 'word' a bheith deimhneach" #: src/function.c:819 msgid "non-numeric first argument to 'wordlist' function" msgstr "neamhuimhriúil an chéad argóint le feidhm 'wordlist'" #: src/function.c:821 msgid "non-numeric second argument to 'wordlist' function" msgstr "neamhuimhriúil an dara hargóint le feidhm 'wordlist'" #: src/function.c:1533 #, c-format msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n" msgstr "windows32_openpipe: theip ar DuplicateHandle(In) (e=%ld)\n" #: src/function.c:1557 #, c-format msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n" msgstr "windows32_openpipe: theip ar DuplicateHandle(Earr) (e=%ld)\n" #: src/function.c:1564 #, c-format msgid "CreatePipe() failed (e=%ld)\n" msgstr "Theip ar CreatePipe() (e=%ld)\n" #: src/function.c:1572 #, c-format msgid "windows32_openpipe(): process_init_fd() failed\n" msgstr "windows32_openpipe(): theip ar process_init_fd()\n" #: src/function.c:1857 #, c-format msgid "Cleaning up temporary batch file %s\n" msgstr "Baisc-chomhad sealadach %s á ghlanadh\n" #: src/function.c:2230 src/function.c:2255 #, c-format msgid "file: missing filename" msgstr "comhad: ainm comhaid ar iarraidh" #: src/function.c:2234 src/function.c:2265 #, c-format msgid "open: %s: %s" msgstr "oscailt: %s: %s" #: src/function.c:2242 #, c-format msgid "write: %s: %s" msgstr "scríobh: %s: %s" #: src/function.c:2245 src/function.c:2282 #, c-format msgid "close: %s: %s" msgstr "dúnadh: %s: %s" #: src/function.c:2258 #, c-format msgid "file: too many arguments" msgstr "comhad: an iomarca argóintí" #: src/function.c:2277 #, c-format msgid "read: %s: %s" msgstr "léamh: %s: %s" #: src/function.c:2290 #, c-format msgid "file: invalid file operation: %s" msgstr "comhad: oibríocht neamhbhailí ar chomhad: %s" #: src/function.c:2405 #, c-format msgid "insufficient number of arguments (%d) to function '%s'" msgstr "easpa argóintí (%d) ar fheidhm '%s'" #: src/function.c:2417 #, c-format msgid "unimplemented on this platform: function '%s'" msgstr "níl feidhm '%s' ar fáil ar an chóras seo" #: src/function.c:2483 #, c-format msgid "unterminated call to function '%s': missing '%c'" msgstr "glao ar fheidhm '%s' gan chríochnú: '%c' ar iarraidh" #: src/function.c:2667 #, c-format msgid "Empty function name" msgstr "Tá ainm na feidhme folamh" #: src/function.c:2669 #, c-format msgid "Invalid function name: %s" msgstr "Tá ainm na feidhme neamhbhailí: %s" #: src/function.c:2671 #, c-format msgid "Function name too long: %s" msgstr "Tá ainm na feidhme rófhada: %s" #: src/function.c:2674 #, c-format msgid "Invalid minimum argument count (%u) for function %s" msgstr "Ãosmhéid argóintí neamhbhailí (%u) d'fheidhm %s" #: src/function.c:2677 #, c-format msgid "Invalid maximum argument count (%u) for function %s" msgstr "Uasmhéid argóintí neamhbhailí (%u) d'fheidhm %s" #: src/getopt.c:659 #, c-format msgid "%s: option '%s' is ambiguous\n" msgstr "%s: Tá an rogha '%s' débhríoch\n" #: src/getopt.c:683 #, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s: ní cheadaítear argóint i ndiaidh na rogha '--%s'\n" #: src/getopt.c:688 #, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s: ní cheadaítear argóint i ndiaidh na rogha '%c%s'\n" #: src/getopt.c:705 src/getopt.c:878 #, c-format msgid "%s: option '%s' requires an argument\n" msgstr "%s: tá argóint de dhíth i ndiaidh na rogha '%s'\n" #: src/getopt.c:734 #, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s: rogha anaithnid '--%s'\n" #: src/getopt.c:738 #, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s: rogha anaithnid '%c%s'\n" #: src/getopt.c:764 #, c-format msgid "%s: illegal option -- %c\n" msgstr "%s: rogha neamhcheadaithe -- %c\n" #: src/getopt.c:767 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s: rogha neamhbhailí -- %c\n" #: src/getopt.c:797 src/getopt.c:927 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: tá argóint de dhíth i ndiaidh na rogha -- %c\n" #: src/getopt.c:844 #, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s: Tá an rogha '-W %s' débhríoch\n" #: src/getopt.c:862 #, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s: ní cheadaítear argóint i ndiaidh na rogha '-W %s'\n" #: src/guile.c:58 #, c-format msgid "guile: Expanding '%s'\n" msgstr "guile: '%s' á leathnú\n" #: src/guile.c:74 #, c-format msgid "guile: Evaluating '%s'\n" msgstr "guile: '%s' á luacháil\n" #: src/hash.c:50 #, c-format msgid "can't allocate %lu bytes for hash table: memory exhausted" msgstr "ní féidir %lu beart a dháileadh le haghaidh hais-tábla: cuimhne ídithe" #: src/hash.c:280 #, fuzzy, c-format msgid "Load=%lu/%lu=%.0f%%, " msgstr "Lód=%ld/%ld=%.0f%%, " #: src/hash.c:282 #, fuzzy, c-format msgid "Rehash=%u, " msgstr "Ath-haiseáil=%d, " #: src/hash.c:283 #, fuzzy, c-format msgid "Collisions=%lu/%lu=%.0f%%" msgstr "Tuairteanna haiseála=%ld/%ld=%.0f%%" #: src/implicit.c:38 #, c-format msgid "Looking for an implicit rule for '%s'.\n" msgstr "Ag lorg riail intuigthe le haghaidh '%s'.\n" #: src/implicit.c:54 #, c-format msgid "Looking for archive-member implicit rule for '%s'.\n" msgstr "Ag lorg riail intuigthe le haghaidh bhall cartlainne '%s'.\n" #: src/implicit.c:311 #, c-format msgid "Avoiding implicit rule recursion.\n" msgstr "Athchúrsáil de bharr rialacha intuigthe á seachaint.\n" #: src/implicit.c:484 #, fuzzy, c-format msgid "Stem too long: '%s%.*s'.\n" msgstr "Stoc rófhada: '%.*s'.\n" #: src/implicit.c:490 #, c-format msgid "Trying pattern rule with stem '%.*s'.\n" msgstr "Ag baint triail as riail phatrúin le stoc '%.*s'.\n" #: src/implicit.c:717 #, c-format msgid "Rejecting impossible rule prerequisite '%s'.\n" msgstr "Réamhriachtanas neamhfhéideartha rialach '%s' á dhiúltú.\n" #: src/implicit.c:718 #, c-format msgid "Rejecting impossible implicit prerequisite '%s'.\n" msgstr "Réamhriachtanas intuigthe neamhfhéideartha '%s' á dhiúltú.\n" #: src/implicit.c:732 #, c-format msgid "Trying rule prerequisite '%s'.\n" msgstr "Ag baint triail as réamhriachtanas rialach '%s'.\n" #: src/implicit.c:733 #, c-format msgid "Trying implicit prerequisite '%s'.\n" msgstr "Ag baint triail as réamhriachtanas intuigthe '%s'.\n" #: src/implicit.c:772 #, c-format msgid "Found prerequisite '%s' as VPATH '%s'\n" msgstr "Aimsíodh réamhriachtanas '%s' mar VPATH '%s'\n" #: src/implicit.c:786 #, c-format msgid "Looking for a rule with intermediate file '%s'.\n" msgstr "Ag lorg riail le comhad idirmheánach '%s'.\n" #: src/job.c:370 msgid "Cannot create a temporary file\n" msgstr "Ní féidir comhad sealadach a chruthú\n" #: src/job.c:548 msgid " (core dumped)" msgstr " (córdhumpa)" #: src/job.c:553 msgid " (ignored)" msgstr " (rinneadh neamhshuim air)" #: src/job.c:557 src/job.c:1892 msgid "" msgstr "" #: src/job.c:573 #, c-format msgid "%s[%s: %s] Error %d%s" msgstr "%s[%s: %s] Earráid %d%s" #: src/job.c:662 #, c-format msgid "*** Waiting for unfinished jobs...." msgstr "*** Ag fanacht le jabanna neamhchríochnaithe..." #: src/job.c:704 #, c-format msgid "Live child %p (%s) PID %s %s\n" msgstr "Mac beo %p (%s) PID %s %s\n" #: src/job.c:706 src/job.c:900 src/job.c:1072 src/job.c:1644 #, c-format msgid " (remote)" msgstr " (i gcéin)" #: src/job.c:898 #, c-format msgid "Reaping winning child %p PID %s %s\n" msgstr "Mac a bhuaigh á bhaint: %p PID %s %s\n" #: src/job.c:899 #, c-format msgid "Reaping losing child %p PID %s %s\n" msgstr "Mac a chaill á bhaint: %p PID %s %s\n" #: src/job.c:950 #, c-format msgid "Cleaning up temp batch file %s\n" msgstr "Baisc-chomhad sealadach %s á ghlanadh\n" #: src/job.c:956 #, c-format msgid "Cleaning up temp batch file %s failed (%d)\n" msgstr "Níorbh fhéidir baisc-chomhad sealadach %s a ghlanadh (%d)\n" #: src/job.c:1071 #, c-format msgid "Removing child %p PID %s%s from chain.\n" msgstr "Mac %p PID %s%s á bhaint ón slabhra.\n" #: src/job.c:1120 #, c-format msgid "Released token for child %p (%s).\n" msgstr "Saoradh ceadchomhartha le haghaidh mac %p (%s).\n" #: src/job.c:1575 src/job.c:2487 #, 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" #: src/job.c:1579 src/job.c:2491 #, c-format msgid "" "\n" "Counted %d args in failed launch\n" msgstr "" "\n" "%d argóint sa tosú teipthe\n" #: src/job.c:1642 #, c-format msgid "Putting child %p (%s) PID %s%s on the chain.\n" msgstr "Mac %p (%s) PID %s%s á chur ar an slabhra.\n" #: src/job.c:1875 #, c-format msgid "Obtained token for child %p (%s).\n" msgstr "Fuarthas ceadchomhartha le haghaidh mac %p (%s).\n" #: src/job.c:1902 #, c-format msgid "%s: target '%s' does not exist" msgstr "%s: níl sprioc '%s' ann" #: src/job.c:1905 #, c-format msgid "%s: update target '%s' due to: %s" msgstr "%s: nuashonrú sprioc '%s' mar gheall ar: %s" #: src/job.c:2108 #, c-format 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" #: src/job.c:2110 msgid "cannot enforce load limit: " msgstr "ní féidir srian lóid a chur i bhfeidhm: " #: src/job.c:2200 #, c-format 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" #: src/job.c:2212 #, c-format 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" #: src/job.c:2226 #, c-format msgid "no more file handles: could not duplicate stderr\n" msgstr "níl aon hanla comhaid le fáil: níorbh fhéidir stderr a chóipeáil\n" #: src/job.c:2241 #, c-format msgid "Could not restore stdin\n" msgstr "Níorbh fhéidir stdin a athchóiriú\n" #: src/job.c:2249 #, c-format msgid "Could not restore stdout\n" msgstr "Níorbh fhéidir stdout a athchóiriú\n" #: src/job.c:2257 #, c-format msgid "Could not restore stderr\n" msgstr "Níorbh fhéidir stderr a athchóiriú\n" #: src/job.c:2520 #, c-format msgid "make reaped child pid %s, still waiting for pid %s\n" msgstr "bhain make mac le PID %s, ag feitheamh le PID %s fós\n" #: src/job.c:2623 #, c-format msgid "spawnvpe: environment space might be exhausted" msgstr "spawnvpe: seans nach bhfuil aon spás fágtha sa timpeallacht" #: src/job.c:2862 #, c-format msgid "$SHELL changed (was '%s', now '%s')\n" msgstr "Athraíodh $SHELL (ba '%s' é, ach is '%s' é anois)\n" #: src/job.c:3300 src/job.c:3485 #, c-format msgid "Creating temporary batch file %s\n" msgstr "Baisc-chomhad sealadach %s á chruthú\n" #: src/job.c:3308 #, c-format msgid "" "Batch file contents:\n" "\t@echo off\n" msgstr "" "Inneachar an bhaisc-chomhaid:\n" "\t@echo off\n" #: src/job.c:3497 #, c-format msgid "" "Batch file contents:%s\n" "\t%s\n" msgstr "" "Inneachar an bhaisc-chomhaid:%s\n" "\t%s\n" #: src/job.c:3605 #, c-format msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n" msgstr "" "%s (líne %d) Droch-chomhthéacs blaoisce (!unixy && !batch_mode_shell)\n" #: src/load.c:60 #, c-format msgid "Failed to open global symbol table: %s" msgstr "Níorbh fhéidir an tábla siombailí comhchoiteann a oscailt: %s" #: src/load.c:97 #, c-format msgid "Loaded object %s is not declared to be GPL compatible" msgstr "Níl an réad lódáilte %s comhoiriúnach leis an GPL" #: src/load.c:104 #, c-format msgid "Failed to load symbol %s from %s: %s" msgstr "Níorbh fhéidir siombail %s a lódáil ó %s: %s" #: src/load.c:149 #, c-format msgid "Empty symbol name for load: %s" msgstr "Tá ainm na siombaile le lódáil folamh: %s" #: src/load.c:204 #, c-format msgid "Loading symbol %s from %s\n" msgstr "Siombail %s á lódáil ó %s\n" #: src/load.c:256 #, c-format msgid "The 'load' operation is not supported on this platform." msgstr "Níl an oibríocht 'load' ar fáil ar an gcóras seo." #: src/main.c:335 msgid "Options:\n" msgstr "Roghanna:\n" #: src/main.c:336 msgid " -b, -m Ignored for compatibility.\n" msgstr " -b, -m Déan neamhshuim (comhoiriúnacht)\n" #: src/main.c:338 msgid " -B, --always-make Unconditionally make all targets.\n" msgstr " -B, --always-make Déan gach sprioc, gan choinníollacha.\n" #: src/main.c:340 msgid "" " -C DIRECTORY, --directory=DIRECTORY\n" " Change to DIRECTORY before doing anything.\n" msgstr "" " -C COMHADLANN, --directory=COMHADLANN\n" " Téigh go COMHADLANN roimh dhéanamh aon rud.\n" #: src/main.c:343 msgid " -d Print lots of debugging information.\n" msgstr " -d Taispeáin go leor eolas dífhabhtaithe.\n" #: src/main.c:345 msgid "" " --debug[=FLAGS] Print various types of debugging information.\n" msgstr "" " --debug[=BRATACHA] Taispeáin eolas fabhtaithe de chineálacha " "éagsúla.\n" #: src/main.c:347 msgid "" " -e, --environment-overrides\n" " Environment variables override makefiles.\n" msgstr "" " -e, --environment-overrides\n" " Sáraíonn athróga timpeallachta makefileanna.\n" #: src/main.c:350 #, fuzzy msgid "" " -E STRING, --eval=STRING Evaluate STRING as a makefile statement.\n" msgstr "" " --eval=TEAGHRÃN Luacháil TEAGHRÃN mar ráiteas makefile.\n" #: src/main.c:352 msgid "" " -f FILE, --file=FILE, --makefile=FILE\n" " Read FILE as a makefile.\n" msgstr "" " -f COMHAD, --file=COMHAD, --makefile=COMHAD\n" " Léigh COMHAD mar makefile.\n" #: src/main.c:355 msgid " -h, --help Print this message and exit.\n" msgstr " -h, --help Taispeáin an chabhair seo agus scoir.\n" #: src/main.c:357 msgid " -i, --ignore-errors Ignore errors from recipes.\n" msgstr " -i, --ignore-errors Déan neamhshuim ar earráidí ó oidis.\n" #: src/main.c:359 msgid "" " -I DIRECTORY, --include-dir=DIRECTORY\n" " Search DIRECTORY for included makefiles.\n" msgstr "" " -I COMHADLANN, --include-dir=COMHADLANN\n" " Cuardaigh i gCOMHADLANN ar makefileanna " "breise.\n" #: src/main.c:362 msgid "" " -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no " "arg.\n" msgstr "" " -j [N], --jobs[=N] Ceadaigh N jab le chéile; éigríoch mura " "gceaptar arg.\n" #: src/main.c:364 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" #: src/main.c:366 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" " Ná tosaigh jabanna iomadúla mura bhfuil an lód " "níos lú ná N.\n" #: src/main.c:369 msgid "" " -L, --check-symlink-times Use the latest mtime between symlinks and " "target.\n" msgstr "" " -L, --check-symlink-times Úsáid an t-am modhnaithe is déanaí, ar an " "nasc\n" " siombalach nó ar an sprioc.\n" #: src/main.c:371 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á rith aon oideas; taispeáin na orduithe " "amháin.\n" #: src/main.c:374 msgid "" " -o FILE, --old-file=FILE, --assume-old=FILE\n" " Consider FILE to be very old and don't remake " "it.\n" msgstr "" " -o COMHAD, --old-file=COMHAD, --assume-old=COMHAD\n" " Caith le COMHAD mar cheann cianaosta; ná " "hathdhéan é.\n" #: src/main.c:377 msgid "" " -O[TYPE], --output-sync[=TYPE]\n" " Synchronize output of parallel jobs by TYPE.\n" msgstr "" " -O[CINEÃL], --output-sync[=CINEÃL]\n" " Sioncronaigh aschur ó jabanna comhthreomhara " "de réir CINEÃL.\n" #: src/main.c:380 msgid " -p, --print-data-base Print make's internal database.\n" msgstr "" " -p, --print-data-base Taispeáin an bunachar sonraí inmheánach.\n" #: src/main.c:382 msgid "" " -q, --question Run no recipe; exit status says if up to " "date.\n" msgstr "" " -q, --question Ná rith aon oideas; stádas scortha = 0 má tá " "sé cothrom le dáta.\n" #: src/main.c:384 msgid " -r, --no-builtin-rules Disable the built-in implicit rules.\n" msgstr "" " -r, --no-builtin-rules Díchumasaigh na rialacha intuigthe insuite.\n" #: src/main.c:386 msgid " -R, --no-builtin-variables Disable the built-in variable settings.\n" msgstr " -R, --no-builtin-variables Díchumasaigh na hathróga insuite.\n" #: src/main.c:388 msgid " -s, --silent, --quiet Don't echo recipes.\n" msgstr " -s, --silent, --quiet Ná déan macalla ar orduithe.\n" #: src/main.c:390 #, fuzzy msgid " --no-silent Echo recipes (disable --silent mode).\n" msgstr "" " -q, --question Ná rith aon oideas; stádas scortha = 0 má tá " "sé cothrom le dáta.\n" #: src/main.c:392 msgid "" " -S, --no-keep-going, --stop\n" " Turns off -k.\n" msgstr "" " -S, --no-keep-going, --stop\n" " Múch -k.\n" #: src/main.c:395 msgid " -t, --touch Touch targets instead of remaking them.\n" msgstr "" " -t, --touch Teagmhaigh spriocanna in ionad iad a " "athdhéanamh.\n" #: src/main.c:397 msgid " --trace Print tracing information.\n" msgstr " --trace Taispeáin faisnéis dífhabhtaithe.\n" #: src/main.c:399 msgid "" " -v, --version Print the version number of make and exit.\n" msgstr "" " -v, --version Taispeáin eolas faoin leagan agus scoir.\n" #: src/main.c:401 msgid " -w, --print-directory Print the current directory.\n" msgstr " -w, --print-directory Taispeáin an chomhadlann reatha.\n" #: src/main.c:403 msgid "" " --no-print-directory Turn off -w, even if it was turned on " "implicitly.\n" msgstr "" " --no-print-directory Múch -w, fiú má tá sé i bhfeidhm go " "hintuigthe.\n" #: src/main.c:405 msgid "" " -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n" " Consider FILE to be infinitely new.\n" msgstr "" " -W COMHAD, --what-if=COMHAD, --new-file=COMHAD, --assume-new=COMHAD\n" " Caith le COMHAD mar cheann úrnua (go " "héigríoch).\n" #: src/main.c:408 msgid "" " --warn-undefined-variables Warn when an undefined variable is " "referenced.\n" msgstr "" " --warn-undefined-variables Tabhair rabhadh má dhéantar tagairt d'athróg " "gan sainmhíniú.\n" #: src/main.c:671 #, c-format msgid "empty string invalid as file name" msgstr "ní féidir teaghrán folamh a úsáid mar ainm comhaid" #: src/main.c:754 #, c-format msgid "unknown debug level specification '%s'" msgstr "leibhéal dífhabhtaithe anaithnid '%s'" #: src/main.c:794 #, c-format msgid "unknown output-sync type '%s'" msgstr "cineál anaithnid '%s' le haghaidh output-sync" #: src/main.c:849 #, 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%p)\n" #: src/main.c:856 #, c-format msgid "" "\n" "Unhandled exception filter called from program %s\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" msgstr "" "\n" "Cuireadh glaoch ar scagaire eisceachta gan láimhseáil ón chlár %s\n" "CódEisceachta = %lx\n" "BratachaEisceachta = %lx\n" "SeoladhEisceachta = 0x%p\n" #: src/main.c:864 #, c-format msgid "Access violation: write operation at address 0x%p\n" msgstr "Sárú cearta rochtana: oibríocht scríofa ag seoladh 0x%p\n" #: src/main.c:865 #, c-format msgid "Access violation: read operation at address 0x%p\n" msgstr "Sárú cearta rochtana: oibríocht léimh ag seoladh 0x%p\n" #: src/main.c:941 src/main.c:956 #, c-format msgid "find_and_set_shell() setting default_shell = %s\n" msgstr "tá find_and_set_shell() ag socrú default_shell = %s\n" #: src/main.c:1009 #, 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" #: src/main.c:1609 #, c-format msgid "" "warning: jobserver unavailable: using -j1. Add '+' to parent make rule." msgstr "" "rabhadh: níl an jabfhreastalaí ar fáil: ag úsáid -j1. Cuir '+' leis an " "máthair-riail." #: src/main.c:1617 #, fuzzy, c-format msgid "warning: -j%d forced in submake: resetting jobserver mode." msgstr "rabhadh: -jN fórsáilte i bhfo-make: mód jabfhreastalaí á dhíchumasú." #: src/main.c:1781 #, c-format msgid "Makefile from standard input specified twice." msgstr "Sonraíodh Makefile ón ionchur caighdeánach faoi dhó." #: src/main.c:1819 src/vmsjobs.c:1248 msgid "fopen (temporary file)" msgstr "fopen (comhad sealadach)" #: src/main.c:1825 msgid "fwrite (temporary file)" msgstr "fwrite (comhad sealadach)" #: src/main.c:2004 #, fuzzy, c-format msgid "warning: -j%d forced in makefile: resetting jobserver mode." msgstr "rabhadh: -jN fórsáilte i bhfo-make: mód jabfhreastalaí á dhíchumasú." #: src/main.c:2068 #, c-format 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." #: src/main.c:2069 #, c-format msgid "Resetting to single job (-j1) mode." msgstr "à athshocrú le haghaidh jabanna aonair (-j1)." #: src/main.c:2109 #, c-format msgid "Symbolic links not supported: disabling -L." msgstr "ní thacaítear le naisc shiombalacha: -L á dhíchumasú." #: src/main.c:2190 #, c-format msgid "Updating makefiles....\n" msgstr "Makefileanna á nuashonrú....\n" #: src/main.c:2226 #, c-format msgid "Makefile '%s' might loop; not remaking it.\n" msgstr "Seans go lúbfar an Makefile '%s'; ní athdhéanfar é.\n" #: src/main.c:2303 #, c-format msgid "Failed to remake makefile '%s'." msgstr "Níorbh fhéidir makefile '%s' a athdhéanamh." #: src/main.c:2323 #, c-format msgid "Included makefile '%s' was not found." msgstr "Níor aimsíodh makefile '%s' atá san áireamh." #: src/main.c:2328 #, c-format msgid "Makefile '%s' was not found" msgstr "Níor aimsíodh makefile '%s'" #: src/main.c:2394 #, c-format msgid "Couldn't change back to original directory." msgstr "Níorbh fhéidir filleadh ar an gcomhadlann roimhe seo." #: src/main.c:2402 #, c-format msgid "Re-executing[%u]:" msgstr "à rith arís[%u]:" #: src/main.c:2522 msgid "unlink (temporary file): " msgstr "unlink (comhad sealadach): " #: src/main.c:2555 #, c-format msgid ".DEFAULT_GOAL contains more than one target" msgstr "tá níos mó ná aon sprioc amháin i .DEFAULT_GOAL" #: src/main.c:2579 #, c-format msgid "No targets" msgstr "Níl aon sprioc ann" #: src/main.c:2581 #, c-format msgid "No targets specified and no makefile found" msgstr "Níor sonraíodh aon sprioc agus níor aimsíodh aon makefile" #: src/main.c:2586 #, c-format msgid "Updating goal targets....\n" msgstr "Cinn sprice á nuashonrú....\n" #: src/main.c:2610 #, c-format msgid "warning: Clock skew detected. Your build may be incomplete." msgstr "rabhadh: Clog ar sceabha. Seans nár chríochnaigh an tógáil." #: src/main.c:2804 #, c-format msgid "Usage: %s [options] [target] ...\n" msgstr "Úsáid: %s [roghanna] [sprioc] ...\n" #: src/main.c:2810 #, c-format msgid "" "\n" "This program built for %s\n" msgstr "" "\n" "Tógadh an clár seo le haghaidh %s\n" #: src/main.c:2812 #, c-format msgid "" "\n" "This program built for %s (%s)\n" msgstr "" "\n" "Tógadh an clár seo le haghaidh %s (%s)\n" #: src/main.c:2815 #, c-format msgid "Report bugs to \n" msgstr "Seol tuairiscí fabhtanna chuig \n" #: src/main.c:2901 #, c-format msgid "the '%s%s' option requires a non-empty string argument" msgstr "caithfidh tú teaghrán neamhfholamh a thabhairt mar argóint le '%s%s'" #: src/main.c:2965 #, c-format msgid "the '-%c' option requires a positive integer argument" msgstr "caithfidh tú slánuimhir dheimhneach a thabhairt mar argóint le '-%c'" #: src/main.c:3363 #, c-format msgid "%sBuilt for %s\n" msgstr "%sTógadh an clár seo le haghaidh %s\n" #: src/main.c:3365 #, c-format msgid "%sBuilt for %s (%s)\n" msgstr "%sTógadh an clár seo le haghaidh %s (%s)\n" #: src/main.c:3376 #, c-format msgid "" "%sLicense GPLv3+: GNU GPL version 3 or later \n" "%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 "" "%sCeadúnas GPLv3+: GNU GPL leagan 3 nó níos déanaí \n" "%sIs saorbhogearra é seo: ceadaítear duit é a athrú agus a athdháileadh.\n" "%sNíl baránta AR BITH ann, an oiread atá ceadaithe de réir dlí.\n" #: src/main.c:3397 #, c-format msgid "" "\n" "# Make data base, printed on %s" msgstr "" "\n" "# Bunachar sonraí Make, priontáilte ar %s" #: src/main.c:3407 #, c-format msgid "" "\n" "# Finished Make data base on %s\n" msgstr "" "\n" "# Críochnaíodh an bunachar sonraí Make seo ar %s\n" #: src/misc.c:643 #, 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" #: src/misc.c:664 msgid "Initialized access" msgstr "Rochtain túsaithe" #: src/misc.c:743 msgid "User access" msgstr "Rochtain úsáideora" #: src/misc.c:791 msgid "Make access" msgstr "Rochtain make" #: src/misc.c:825 msgid "Child access" msgstr "Rochtain mic" #: src/output.c:97 #, c-format msgid "%s: Entering an unknown directory\n" msgstr "%s: Ag dul isteach i gcomhadlann anaithnid\n" #: src/output.c:99 #, c-format msgid "%s: Leaving an unknown directory\n" msgstr "%s: Ag dul amach as comhadlann anaithnid\n" #: src/output.c:102 #, c-format msgid "%s: Entering directory '%s'\n" msgstr "%s: Ag dul isteach i gcomhadlann '%s'\n" #: src/output.c:104 #, c-format msgid "%s: Leaving directory '%s'\n" msgstr "%s: Ag dul amach as comhadlann '%s'\n" #: src/output.c:108 #, c-format msgid "%s[%u]: Entering an unknown directory\n" msgstr "%s[%u]: Ag dul isteach i gcomhadlann anaithnid\n" #: src/output.c:110 #, c-format msgid "%s[%u]: Leaving an unknown directory\n" msgstr "%s[%u]: Ag dul amach as comhadlann anaithnid\n" #: src/output.c:113 #, c-format msgid "%s[%u]: Entering directory '%s'\n" msgstr "%s[%u]: Ag dul isteach i gcomhadlann '%s'\n" #: src/output.c:115 #, c-format msgid "%s[%u]: Leaving directory '%s'\n" msgstr "%s[%u]: Ag dul amach as comhadlann '%s'\n" #: src/output.c:442 src/output.c:444 #, c-format msgid "write error: stdout" msgstr "earráid scríofa: stdout" #: src/output.c:624 msgid ". Stop.\n" msgstr ". Stop.\n" #: src/output.c:658 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" #: src/output.c:667 #, c-format msgid "%s: %s" msgstr "%s: %s" #: src/output.h:62 #, c-format msgid "-O[TYPE] (--output-sync[=TYPE]) is not configured for this build." msgstr "níl -O[CINEÃL] (--output-sync[=CINEÃL]) ar fáil sa leagan seo." #: src/posixos.c:90 msgid "creating jobs pipe" msgstr "píopa na jabanna á chruthú" #: src/posixos.c:98 src/posixos.c:251 msgid "duping jobs pipe" msgstr "píopa na jabanna á chóipeáil" #: src/posixos.c:104 msgid "init jobserver pipe" msgstr "píopa an jabfhreastalaí á thúsú" #: src/posixos.c:119 #, c-format msgid "internal error: invalid --jobserver-auth string '%s'" msgstr "earráid inmheánach: teaghrán neamhbhailí --jobserver-auth '%s'" #: src/posixos.c:122 #, c-format msgid "Jobserver client (fds %d,%d)\n" msgstr "Cliant jabfhreastalaí (fds %d,%d)\n" #: src/posixos.c:138 msgid "jobserver pipeline" msgstr "píblíne an jabfhreastalaí" #: src/posixos.c:186 msgid "write jobserver" msgstr "scríobh jabfhreastalaí" #: src/posixos.c:300 #, c-format msgid "job server shut down" msgstr "" #: src/posixos.c:303 msgid "pselect jobs pipe" msgstr "pselect píopa na jabanna" #: src/posixos.c:319 src/posixos.c:433 msgid "read jobs pipe" msgstr "léadh píopa na jabanna" #: src/read.c:181 #, c-format msgid "Reading makefiles...\n" msgstr "Makefile-anna á léamh...\n" #: src/read.c:336 #, c-format msgid "Reading makefile '%s'" msgstr "Makefile '%s' á léamh" #: src/read.c:338 #, c-format msgid " (no default goal)" msgstr " (gan ceann sprice réamhshocraithe)" #: src/read.c:340 #, c-format msgid " (search path)" msgstr " (conair chuardaigh)" #: src/read.c:342 #, c-format msgid " (don't care)" msgstr " (is cuma)" #: src/read.c:344 #, c-format msgid " (no ~ expansion)" msgstr " (ná leathnaigh ~)" #: src/read.c:655 #, c-format msgid "Skipping UTF-8 BOM in makefile '%s'\n" msgstr "Ag dul thar BOM UTF-8 i Makefile '%s'\n" #: src/read.c:658 #, c-format msgid "Skipping UTF-8 BOM in makefile buffer\n" msgstr "Ag dul thar BOM UTF-8 i maolán Makefile\n" #: src/read.c:787 #, c-format msgid "invalid syntax in conditional" msgstr "comhréir neamhbhailí i gcoinníollach" #: src/read.c:960 #, c-format msgid "%s: failed to load" msgstr "%s: theip ar lódáil" #: src/read.c:986 #, c-format msgid "recipe commences before first target" msgstr "tosaíonn an t-oideas roimh an chéad sprioc" #: src/read.c:1035 #, c-format msgid "missing rule before recipe" msgstr "riail ar iarraidh roimh an oideas" #: src/read.c:1136 #, c-format msgid "missing separator (did you mean TAB instead of 8 spaces?)" msgstr "deighilteoir ar iarraidh (ar mhian leat TÃB in ionad ocht spás?)" #: src/read.c:1138 #, c-format msgid "missing separator" msgstr "deighilteoir ar iarraidh" #: src/read.c:1283 #, c-format msgid "missing target pattern" msgstr "patrún sprice ar iarraidh" #: src/read.c:1285 #, c-format msgid "multiple target patterns" msgstr "ilphatrúin sprice" #: src/read.c:1289 #, c-format msgid "target pattern contains no '%%'" msgstr "níl aon '%%' sa phatrún sprice" #: src/read.c:1404 #, c-format msgid "missing 'endif'" msgstr "'endif' ar iarraidh" #: src/read.c:1443 src/read.c:1488 src/variable.c:1600 #, c-format msgid "empty variable name" msgstr "ainm folamh athróige" #: src/read.c:1478 #, c-format msgid "extraneous text after 'define' directive" msgstr "téacs breise i ndiaidh treorach 'define'" #: src/read.c:1503 #, c-format msgid "missing 'endef', unterminated 'define'" msgstr "'endef' ar iarraidh, 'define' gan chríochnú" #: src/read.c:1531 #, c-format msgid "extraneous text after 'endef' directive" msgstr "téacs breise i ndiaidh treorach 'endef'" #: src/read.c:1603 #, c-format msgid "extraneous text after '%s' directive" msgstr "téacs breise i ndiaidh treorach '%s'" #: src/read.c:1604 #, c-format msgid "extraneous '%s'" msgstr "'%s' breise" #: src/read.c:1632 #, c-format msgid "only one 'else' per conditional" msgstr "ní cheadaítear ach aon 'else' amháin le gach ráiteas coinníollach" #: src/read.c:1908 #, c-format msgid "Malformed target-specific variable definition" msgstr "Is míchumtha é an sainmhíniú athróige (le haghaidh aon sprioc amháin)" #: src/read.c:1968 #, c-format msgid "prerequisites cannot be defined in recipes" msgstr "ní féidir réamhriachtanais a shonrú in oidis" #: src/read.c:1986 #, c-format msgid "grouped targets must provide a recipe" msgstr "" #: src/read.c:2029 #, c-format msgid "mixed implicit and static pattern rules" msgstr "rialacha intuigthe agus rialacha statacha measctha le chéile" #: src/read.c:2052 #, c-format msgid "mixed implicit and normal rules" msgstr "rialacha intuigthe agus gnáthrialacha measctha le chéile" #: src/read.c:2107 #, c-format msgid "target '%s' doesn't match the target pattern" msgstr "níl sprioc '%s' comhoiriúnach leis an bpatrún sprice" #: src/read.c:2122 src/read.c:2168 #, c-format msgid "target file '%s' has both : and :: entries" msgstr "tá iontrálacha : agus :: sa chomhad sprice '%s'" #: src/read.c:2128 #, c-format msgid "target '%s' given more than once in the same rule" msgstr "tá an sprioc '%s' ann níos mó ná uair amháin sa riail chéanna" #: src/read.c:2138 #, c-format msgid "warning: overriding recipe for target '%s'" msgstr "rabhadh: oideas le haghaidh sprioc '%s' á shárú" #: src/read.c:2141 #, c-format msgid "warning: ignoring old recipe for target '%s'" msgstr "rabhadh: ag déanamh neamhshuim ar sheanoideas le haghaidh sprioc '%s'" #: src/read.c:2254 #, c-format msgid "*** mixed implicit and normal rules: deprecated syntax" msgstr "" "*** rialacha intuigthe agus gnáthrialacha measctha le chéile: comhréir dulta " "i léig" #: src/read.c:2271 #, fuzzy, c-format msgid "warning: overriding group membership for target '%s'" msgstr "rabhadh: oideas le haghaidh sprioc '%s' á shárú" #: src/read.c:2636 #, c-format 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" #: src/remake.c:226 #, c-format msgid "Nothing to be done for '%s'." msgstr "Níl faic le déanamh i gcomhair '%s'." #: src/remake.c:227 #, c-format msgid "'%s' is up to date." msgstr "Tá '%s' cothrom le dáta." #: src/remake.c:323 #, c-format msgid "Pruning file '%s'.\n" msgstr "Comhad '%s' á bhearradh.\n" #: src/remake.c:389 #, c-format msgid "%sNo rule to make target '%s', needed by '%s'%s" msgstr "%sNíl aon riail chun sprioc '%s' a dhéanamh, rud a theastaíonn '%s'%s" #: src/remake.c:399 #, c-format msgid "%sNo rule to make target '%s'%s" msgstr "%sNíl aon riail chun sprioc '%s' a dhéanamh%s" #: src/remake.c:425 #, c-format msgid "Considering target file '%s'.\n" msgstr "Comhad sprice '%s' á scrúdú.\n" #: src/remake.c:432 #, c-format msgid "Recently tried and failed to update file '%s'.\n" msgstr "" "Rinneadh iarracht comhad '%s' a nuashonrú le déanaí, ach theip ar an " "iarracht.\n" #: src/remake.c:444 #, c-format msgid "File '%s' was considered already.\n" msgstr "Rinneadh scrúdú ar chomhad '%s' cheana.\n" #: src/remake.c:454 #, c-format msgid "Still updating file '%s'.\n" msgstr "Comhad '%s' á nuashonrú fós.\n" #: src/remake.c:457 #, c-format msgid "Finished updating file '%s'.\n" msgstr "Nuashonraíodh comhad '%s'.\n" #: src/remake.c:486 #, c-format msgid "File '%s' does not exist.\n" msgstr "Níl comhad '%s' ann.\n" #: src/remake.c:494 #, c-format msgid "" "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp" msgstr "*** Rabhadh: Stampa ama ardtaifidh ar comhad .LOW_RESOLUTION_TIME `%s'" #: src/remake.c:507 src/remake.c:1039 #, c-format msgid "Found an implicit rule for '%s'.\n" msgstr "Aimsíodh riail intuigthe le haghaidh '%s'.\n" #: src/remake.c:509 src/remake.c:1041 #, c-format msgid "No implicit rule found for '%s'.\n" msgstr "Níor aimsíodh aon riail intuigthe le haghaidh '%s'.\n" #: src/remake.c:515 #, c-format msgid "Using default recipe for '%s'.\n" msgstr "Ag baint úsáid as oideas réamhshocraithe le haghaidh '%s'.\n" #: src/remake.c:549 src/remake.c:1088 #, c-format msgid "Circular %s <- %s dependency dropped." msgstr "Tréigeadh an spleáchas ciorclach %s <- %s." #: src/remake.c:674 #, c-format msgid "Finished prerequisites of target file '%s'.\n" msgstr "Críochnaíodh na réamhriachtanais den chomhad sprice `%s'.\n" #: src/remake.c:680 #, c-format msgid "The prerequisites of '%s' are being made.\n" msgstr "Réamhriachtanais '%s' á ndéanamh anois.\n" #: src/remake.c:694 #, c-format msgid "Giving up on target file '%s'.\n" msgstr "Comhad sprice '%s' á thréigean.\n" #: src/remake.c:699 #, c-format msgid "Target '%s' not remade because of errors." msgstr "Ní dhearna an sprioc '%s' arís mar gheall ar earráidí." #: src/remake.c:751 #, c-format msgid "Prerequisite '%s' is order-only for target '%s'.\n" msgstr "Is réamhriachtanas ord-amháin é '%s' le haghaidh sprice '%s'.\n" #: src/remake.c:756 #, c-format msgid "Prerequisite '%s' of target '%s' does not exist.\n" msgstr "Níl réamhriachtanas '%s' den sprioc '%s' ann.\n" #: src/remake.c:761 #, c-format msgid "Prerequisite '%s' is newer than target '%s'.\n" msgstr "Tá réamhriachtanas '%s' níos nuaí ná sprioc '%s'.\n" #: src/remake.c:764 #, c-format msgid "Prerequisite '%s' is older than target '%s'.\n" msgstr "Tá réamhriachtanas '%s' níos sine ná sprioc '%s'.\n" #: src/remake.c:782 #, c-format msgid "Target '%s' is double-colon and has no prerequisites.\n" msgstr "Is sprioc le dhá idirstad é '%s' agus níl aon réamhriachtanas aice.\n" #: src/remake.c:789 #, c-format msgid "No recipe for '%s' and no prerequisites actually changed.\n" msgstr "" "Níl aon oideas ann le haghaidh '%s' agus níor athraigh aon réamhriachtanas.\n" #: src/remake.c:794 #, c-format msgid "Making '%s' due to always-make flag.\n" msgstr "'%s' á dhéanamh mar gheall ar bhratach --always-make.\n" #: src/remake.c:802 #, c-format msgid "No need to remake target '%s'" msgstr "Ní gá an sprioc '%s' a athdhéanamh" #: src/remake.c:804 #, c-format msgid "; using VPATH name '%s'" msgstr "; ag baint úsáid as ainm VPATH '%s'" #: src/remake.c:824 #, c-format msgid "Must remake target '%s'.\n" msgstr "Caithfidh an sprioc '%s' a athdhéanamh.\n" #: src/remake.c:830 #, c-format msgid " Ignoring VPATH name '%s'.\n" msgstr " Ag déanamh neamhshuim ar ainm VPATH '%s'.\n" #: src/remake.c:839 #, c-format msgid "Recipe of '%s' is being run.\n" msgstr "Oideas le haghaidh '%s' á rith.\n" #: src/remake.c:846 #, c-format msgid "Failed to remake target file '%s'.\n" msgstr "Níorbh fhéidir an comhad sprice '%s' a athdhéanamh.\n" #: src/remake.c:849 #, c-format msgid "Successfully remade target file '%s'.\n" msgstr "D'éirigh linn an comhad sprice '%s' a athdhéanamh.\n" #: src/remake.c:852 #, c-format msgid "Target file '%s' needs to be remade under -q.\n" msgstr "Ní mór comhad sprice '%s' a athdhéanamh le rogha -q.\n" #: src/remake.c:1047 #, c-format msgid "Using default commands for '%s'.\n" msgstr "Ag baint úsáid as orduithe réamhshocraithe le haghaidh '%s'.\n" #: src/remake.c:1422 #, c-format msgid "Warning: File '%s' has modification time %s s in the future" msgstr "Rabhadh: Tá am athraithe an chomhaid '%s' %s soicind sa todhchaí" #: src/remake.c:1662 #, c-format msgid ".LIBPATTERNS element '%s' is not a pattern" msgstr "Ní patrún é eilimint .LIBPATTERNS '%s'" #: src/remote-cstms.c:122 #, c-format msgid "Customs won't export: %s\n" msgstr "Ní easpórtálfar Customs: %s\n" #: src/rule.c:289 #, c-format msgid "warning: ignoring prerequisites on suffix rule definition" msgstr "" #: src/rule.c:530 msgid "" "\n" "# Implicit Rules" msgstr "" "\n" "# Rialacha Intuigthe" #: src/rule.c:545 msgid "" "\n" "# No implicit rules." msgstr "" "\n" "# Níl aon riail intuigthe." #: src/rule.c:548 #, fuzzy, c-format msgid "" "\n" "# %u implicit rules, %u (%.1f%%) terminal." msgstr "" "\n" "# %u riail intuigthe, %u" #: src/rule.c:557 #, c-format msgid "BUG: num_pattern_rules is wrong! %u != %u" msgstr "FABHT: num_pattern_rules mícheart! %u != %u" #: src/signame.c:84 msgid "unknown signal" msgstr "comhartha anaithnid" #: src/signame.c:92 msgid "Hangup" msgstr "Croch suas" #: src/signame.c:95 msgid "Interrupt" msgstr "Idirbhriseadh" #: src/signame.c:98 msgid "Quit" msgstr "Scoir" #: src/signame.c:101 msgid "Illegal Instruction" msgstr "Treoir Neamhcheadaithe" #: src/signame.c:104 msgid "Trace/breakpoint trap" msgstr "Rianaigh/brisphointe" #: src/signame.c:109 msgid "Aborted" msgstr "Tobscortha" #: src/signame.c:112 msgid "IOT trap" msgstr "Gaiste IOT" #: src/signame.c:115 msgid "EMT trap" msgstr "Gaiste EMT" #: src/signame.c:118 msgid "Floating point exception" msgstr "Eisceacht snámhphointe" #: src/signame.c:121 msgid "Killed" msgstr "Maraithe" #: src/signame.c:124 msgid "Bus error" msgstr "Busearráid" #: src/signame.c:127 msgid "Segmentation fault" msgstr "Fabht deighilte" #: src/signame.c:130 msgid "Bad system call" msgstr "Drochghlao ar an gcóras" #: src/signame.c:133 msgid "Broken pipe" msgstr "Píopa briste" #: src/signame.c:136 msgid "Alarm clock" msgstr "Clog aláraim" #: src/signame.c:139 msgid "Terminated" msgstr "Scortha" #: src/signame.c:142 msgid "User defined signal 1" msgstr "Comhartha saincheaptha 1" #: src/signame.c:145 msgid "User defined signal 2" msgstr "Comhartha saincheaptha 2" #: src/signame.c:150 src/signame.c:153 msgid "Child exited" msgstr "Scoir an mhacphróiseas" #: src/signame.c:156 msgid "Power failure" msgstr "Cliseadh cumhachta" #: src/signame.c:159 msgid "Stopped" msgstr "Stoptha" #: src/signame.c:162 msgid "Stopped (tty input)" msgstr "Stoptha (ionchur tty)" #: src/signame.c:165 msgid "Stopped (tty output)" msgstr "Stoptha (aschur tty)" #: src/signame.c:168 msgid "Stopped (signal)" msgstr "Stoptha (comhartha)" #: src/signame.c:171 msgid "CPU time limit exceeded" msgstr "Teorainn ama LAP sáraithe" #: src/signame.c:174 msgid "File size limit exceeded" msgstr "Uasmhéid na gcomhad sáraithe" #: src/signame.c:177 msgid "Virtual timer expired" msgstr "Am fíorúil caite" #: src/signame.c:180 msgid "Profiling timer expired" msgstr "Am próifíle caite" #: src/signame.c:186 msgid "Window changed" msgstr "Athraíodh an fhuinneog" #: src/signame.c:189 msgid "Continued" msgstr "Leanta" #: src/signame.c:192 msgid "Urgent I/O condition" msgstr "Staid phráinneach A/I" #: src/signame.c:199 src/signame.c:208 msgid "I/O possible" msgstr "A/I indéanta" #: src/signame.c:202 msgid "SIGWIND" msgstr "SIGWIND" #: src/signame.c:205 msgid "SIGPHONE" msgstr "SIGPHONE" #: src/signame.c:211 msgid "Resource lost" msgstr "Acmhainn caillte" #: src/signame.c:214 msgid "Danger signal" msgstr "Comhartha guaise" #: src/signame.c:217 msgid "Information request" msgstr "Iarratas ar eolas" #: src/signame.c:220 msgid "Floating point co-processor not available" msgstr "Níl comhphróiseálaí snámhphointe ar fáil" #: src/strcache.c:274 #, c-format msgid "" "\n" "%s No strcache buffers\n" msgstr "" "\n" "%s Gan maoláin strcache\n" #: src/strcache.c:304 #, c-format msgid "" "\n" "%s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu " "B\n" msgstr "" "\n" "%s maolán strcache: %lu (%lu) / teaghráin = %lu / stóras = %lu B / meán = " "%lu B\n" #: src/strcache.c:308 #, fuzzy, c-format msgid "" "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B\n" msgstr "" "%s maolán reatha: méid = %hu B / úsáidte = %hu B / líon = %hu / meán = %hu " "B\n" #: src/strcache.c:319 #, c-format msgid "%s other used: total = %lu B / count = %lu / avg = %lu B\n" msgstr "%s eile úsáidte: iomlán = %lu B / líon = %lu / meán = %lu B\n" #: src/strcache.c:322 #, c-format msgid "" "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n" msgstr "" "%s eile saor: iomlán = %lu B / uas = %lu B / íos = %lu B / meán = %hu B\n" #: src/strcache.c:326 #, c-format msgid "" "\n" "%s strcache performance: lookups = %lu / hit rate = %lu%%\n" msgstr "" "\n" "%s feidhmíocht strcache: cuardaigh = %lu / ráta aimsithe = %lu%%\n" #: src/strcache.c:328 msgid "" "# hash-table stats:\n" "# " msgstr "" "# staitisticí an hais-tábla:\n" "# " #: src/variable.c:1653 msgid "automatic" msgstr "uathoibríoch" #: src/variable.c:1656 msgid "default" msgstr "réamhshocraithe" #: src/variable.c:1659 msgid "environment" msgstr "timpeallacht" #: src/variable.c:1662 msgid "makefile" msgstr "makefile" #: src/variable.c:1665 msgid "environment under -e" msgstr "timpeallacht le -e" #: src/variable.c:1668 msgid "command line" msgstr "líne na n-orduithe" #: src/variable.c:1671 msgid "'override' directive" msgstr "treoir 'override'" #: src/variable.c:1682 #, c-format msgid " (from '%s', line %lu)" msgstr " (ó '%s', líne %lu)" #: src/variable.c:1745 msgid "# variable set hash-table stats:\n" msgstr "# athróg tacar hais-tábla stait:\n" #: src/variable.c:1756 msgid "" "\n" "# Variables\n" msgstr "" "\n" "# Athróga\n" #: src/variable.c:1760 msgid "" "\n" "# Pattern-specific Variable Values" msgstr "" "\n" "# Luachanna Athróige sainiúil don phatrún" #: src/variable.c:1774 msgid "" "\n" "# No pattern-specific variable values." msgstr "" "\n" "# Níl aon luach athróige atá sainiúil don phatrún." #: src/variable.c:1776 #, c-format msgid "" "\n" "# %u pattern-specific variable values" msgstr "" "\n" "# %u luach athróige atá sainiúil don phatrún" #: src/variable.h:229 #, c-format msgid "warning: undefined variable '%.*s'" msgstr "rabhadh: athróg gan sainmhíniú '%.*s'" #: src/vmsfunctions.c:91 #, c-format msgid "sys$search() failed with %d\n" msgstr "Theip ar sys$search() le stádas %d\n" #: src/vmsjobs.c:244 #, 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" #: src/vmsjobs.c:681 #, c-format msgid "BUILTIN CD %s\n" msgstr "CD INSUITE %s\n" #: src/vmsjobs.c:1224 #, c-format msgid "DCL: %s\n" msgstr "DCL: %s\n" #: src/vmsjobs.c:1284 #, c-format msgid "Append output to %s\n" msgstr "Iarcheangail aschur le %s\n" #: src/vmsjobs.c:1309 #, c-format msgid "Append %.*s and cleanup\n" msgstr "Iarcheangal %.*s agus glanadh\n" #: src/vmsjobs.c:1322 #, c-format msgid "Executing %s instead\n" msgstr "%s á rith ina áit\n" #: src/vpath.c:603 msgid "" "\n" "# VPATH Search Paths\n" msgstr "" "\n" "# VPATH Conairí Cuardaigh\n" #: src/vpath.c:620 msgid "# No 'vpath' search paths." msgstr "# Níl aon chonair chuardaigh 'vpath' ann." #: src/vpath.c:622 #, c-format msgid "" "\n" "# %u 'vpath' search paths.\n" msgstr "" "\n" "# %u conair chuardaigh 'vpath'.\n" #: src/vpath.c:625 msgid "" "\n" "# No general ('VPATH' variable) search path." msgstr "" "\n" "# Níl aon chonair ghinearálta chuardaigh (athróg 'VPATH') ann." #: src/vpath.c:631 msgid "" "\n" "# General ('VPATH' variable) search path:\n" "# " msgstr "" "\n" "# Conair ghinearálta chuardaigh (athróg 'VPATH'):\n" "# " #: src/w32/w32os.c:44 #, c-format msgid "Jobserver slots limited to %d\n" msgstr "Sliotáin an jabfhreastalaí teoranta do %d\n" #: src/w32/w32os.c:60 #, c-format msgid "creating jobserver semaphore: (Error %ld: %s)" msgstr "séamafór an jabfhreastalaí á chruthú: (Earráid %ld: %s)" #: src/w32/w32os.c:79 #, c-format msgid "" "internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)" msgstr "" "earráid inmheánach: níorbh fhéidir séamafór an jabfhreastalaí '%s' a " "oscailt: (Earráid %ld: %s)" #: src/w32/w32os.c:82 #, c-format msgid "Jobserver client (semaphore %s)\n" msgstr "Cliant an jabfhreastalaí (séamafór %s)\n" #: src/w32/w32os.c:123 #, c-format msgid "release jobserver semaphore: (Error %ld: %s)" msgstr "séamafór an jabfhreastalaí a fhuascailt: (Earráid %ld: %s)" #: src/w32/w32os.c:194 #, c-format msgid "semaphore or child process wait: (Error %ld: %s)" msgstr "séamafóir nó feitheamh le macphróiseas: (Earráid %ld: %s)" #~ msgid "%s: %s: Command not found\n" #~ msgstr "%s: %s: Ordú gan aimsiú\n" #~ msgid "%s[%u]: %s: Command not found\n" #~ msgstr "%s[%u]: %s: Ordú gan aimsiú\n" #~ msgid "%s: Shell program not found" #~ msgstr "%s: Clár blaoisce gan aimsiú" #~ msgid "%s is suspending for 30 seconds..." #~ msgstr "cuirfear %s ar fionraí ar feadh tréimhse 30 soicind..." #~ msgid "done sleep(30). Continuing.\n" #~ msgstr "sleep(30) críochnaithe. Ag leanúint ar aghaidh.\n" #~ msgid "Unknown error %d" #~ msgstr "Earráid anaithnid %d" #~ msgid "Warning: File '%s' has modification time in the future" #~ msgstr "Rabhadh: Sa todhchaí am athraithe an chomhaid '%s'" #~ msgid " terminal." #~ msgstr " teirminéal." #~ 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" #~ "%sPARTICULAR PURPOSE.\n" #~ msgstr "" #~ "%sIs saorbhogearra an ríomhchlár seo; féach ar an bhunchód le haghaidh\n" #~ "%scoinníollacha cóipeála. Níl baránta ar bith ann; go fiú níl baránta " #~ "ann\n" #~ "%sd'INDÃOLTACHT nó FEILIÚNACHT D'FHEIDHM AR LEITH.\n" #~ msgid "virtual memory exhausted" #~ msgstr "cuimhne fhíorúil ídithe" #~ msgid "write error" #~ msgstr "earráid sa scríobh" #~ msgid "extraneous `endef'" #~ msgstr "`endef' breise" #~ msgid "empty `override' directive" #~ msgstr "treoir `override' folamh" #~ msgid "invalid `override' directive" #~ msgstr "treoir neamhbhailí `override'" #~ msgid "" #~ "\n" #~ "%s # of strings in strcache: %d\n" #~ 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" make-4.3/po/pt_BR.po0000644000175000017500000016754513611136531011224 00000000000000# Mensagem do GNU make em Português (Brasil) # Copyright (C) 2000 Free Software Foundation, Inc. # # This file is distributed under the same license as the make package. # Fábio Henrique F. Silva , 2000. # Fábio Henrique F. Silva , 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 # Fábio Henrique F. Silva , 2017, 2018, 2019 # msgid "" msgstr "" "Project-Id-Version: GNU make 4.2.91\n" "Report-Msgid-Bugs-To: bug-make@gnu.org\n" "POT-Creation-Date: 2020-01-19 15:34-0500\n" "PO-Revision-Date: 2019-10-04 22:31-0300\n" "Last-Translator: Fábio Henrique F. Silva \n" "Language-Team: Brazilian Portuguese \n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: Poedit 2.0.6\n" # Caso você encontre alguma mensagem que não está bem traduzida, por # favor me informe dando sua sugestão. #: src/ar.c:46 #, c-format msgid "attempt to use unsupported feature: '%s'" msgstr "característica não suportada: '%s' " #: src/ar.c:123 #, c-format msgid "touch archive member is not available on VMS" msgstr "o touch não está disponível no VMS" #: src/ar.c:147 #, c-format msgid "touch: Archive '%s' does not exist" msgstr "touch: Arquivo '%s' não existe" #: src/ar.c:150 #, c-format msgid "touch: '%s' is not a valid archive" msgstr "touch: '%s' não é um arquivo válido" #: src/ar.c:157 #, c-format msgid "touch: Member '%s' does not exist in '%s'" msgstr "touch: O membro '%s' não existe em '%s'" #: src/ar.c:164 #, c-format 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'" #: src/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" #: src/arscan.c:236 #, c-format msgid "lbr$ini_control() failed with status = %d" msgstr "lbr$ini_control() falhou com estado = %d" #: src/arscan.c:261 #, c-format msgid "unable to open library '%s' to lookup member status %d" msgstr "" "erro na abertura da biblioteca '%s' para localizar o status do membro %d" #: src/arscan.c:944 #, c-format msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n" msgstr "Membro '%s'%s: %ld bytes de %ld (%ld).\n" #: src/arscan.c:945 msgid " (name might be truncated)" msgstr " (o nome pode estar truncado)" #: src/arscan.c:947 #, c-format msgid " Date %s" msgstr " Data %s" #: src/arscan.c:948 #, c-format msgid " uid = %d, gid = %d, mode = 0%o.\n" msgstr " uid = %d, gid = %d, modo = 0%o.\n" #: src/commands.c:403 #, c-format msgid "Recipe has too many lines (%ud)" msgstr "O comando tem muitas linhas (%ud)" #: src/commands.c:504 msgid "*** Break.\n" msgstr "*** Quebra.\n" #: src/commands.c:628 #, 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." #: src/commands.c:632 #, c-format msgid "*** Archive member '%s' may be bogus; not deleted" msgstr "** O arquivo membro '%s' pode ser falso. Não foi apagado." #: src/commands.c:646 #, c-format msgid "*** [%s] Deleting file '%s'" msgstr "** [%s] Apagando arquivo '%s'" #: src/commands.c:648 #, c-format msgid "*** Deleting file '%s'" msgstr "** Apagando arquivo '%s'" #: src/commands.c:684 msgid "# recipe to execute" msgstr "# comandos a executar" #: src/commands.c:687 msgid " (built-in):" msgstr " (embutido):" #: src/commands.c:689 #, c-format msgid " (from '%s', line %lu):\n" msgstr " (de '%s', linha %lu):\n" #: src/dir.c:1073 msgid "" "\n" "# Directories\n" msgstr "" "\n" "# Diretórios\n" #: src/dir.c:1085 #, c-format msgid "# %s: could not be stat'd.\n" msgstr "# %s: não pôde ser estabelecido.\n" #: src/dir.c:1089 msgid "# %s (key %s, mtime %I64u): could not be opened.\n" msgstr "# %s (chave %s, mtime %d): não pôde ser aberto.\n" #: src/dir.c:1094 #, 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" #: src/dir.c:1099 #, 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" #: src/dir.c:1126 msgid "# %s (key %s, mtime %I64u): " msgstr "# %s (chave %s, mtime %ull): " #: src/dir.c:1131 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): " msgstr "# %s (dispositivo %d, inode [%d,%d,%d]): " #: src/dir.c:1136 #, c-format msgid "# %s (device %ld, inode %ld): " msgstr "# %s (dispositivo %ld, inode %ld): " #: src/dir.c:1142 src/dir.c:1163 msgid "No" msgstr "Não" #: src/dir.c:1145 src/dir.c:1166 msgid " files, " msgstr " arquivos, " #: src/dir.c:1147 src/dir.c:1168 msgid "no" msgstr "não" #: src/dir.c:1150 msgid " impossibilities" msgstr " impossibilidades" #: src/dir.c:1154 msgid " so far." msgstr " até agora." #: src/dir.c:1171 #, c-format msgid " impossibilities in %lu directories.\n" msgstr " impossibilidades em %lu diretórios.\n" #: src/expand.c:125 #, c-format msgid "Recursive variable '%s' references itself (eventually)" msgstr "Variável recursiva '%s' faz referência a ela mesma (eventualmente)" #: src/expand.c:271 #, c-format msgid "unterminated variable reference" msgstr "referência a variável não finalizada" #: src/file.c:278 #, c-format msgid "Recipe was specified for file '%s' at %s:%lu," msgstr "Os comandos especificados para o arquivo '%s' em %s:%lu," #: src/file.c:283 #, 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," #: src/file.c:287 #, c-format msgid "but '%s' is now considered the same file as '%s'." msgstr "mas '%s' é considerado o mesmo arquivo que '%s'." #: src/file.c:290 #, 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'." #: src/file.c:310 #, 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'" #: src/file.c:316 #, 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'" #: src/file.c:408 #, c-format msgid "*** Deleting intermediate file '%s'" msgstr "** Apagando arquivo intermediário '%s'" #: src/file.c:412 #, c-format msgid "Removing intermediate files...\n" msgstr "Apagando arquivo intermediário...\n" #: src/file.c:872 msgid "Current time" msgstr "Hora atual" #: src/file.c:876 #, c-format msgid "%s: Timestamp out of range; substituting %s" msgstr "%s: Data/Hora fora de faixa; substituindo %s" #: src/file.c:1016 msgid "# Not a target:" msgstr "# Não é um alvo:" #: src/file.c:1021 msgid "# Precious file (prerequisite of .PRECIOUS)." msgstr "# Arquivo importante (prerequisito de .PRECIOUS)." #: src/file.c:1023 msgid "# Phony target (prerequisite of .PHONY)." msgstr "# Alvo Falso (prerequisito de .PHONY)." #: src/file.c:1025 msgid "# Command line target." msgstr "# Linha de Comando do Alvo." #: src/file.c:1027 msgid "# A default, MAKEFILES, or -include/sinclude makefile." msgstr "# Um Padrão, arquivo MAKEFILES ou -include/sinclude makefile." #: src/file.c:1029 msgid "# Builtin rule" msgstr "# Regra implícita" #: src/file.c:1031 msgid "# Implicit rule search has been done." msgstr "# Pesquisa por regra implícita concluida." #: src/file.c:1032 msgid "# Implicit rule search has not been done." msgstr "# Pesquisa por regra implícita não concluida." #: src/file.c:1034 #, c-format msgid "# Implicit/static pattern stem: '%s'\n" msgstr "# Derivação padrão implícita/estática: '%s'\n" #: src/file.c:1036 msgid "# File is an intermediate prerequisite." msgstr "# O arquivo é um pré-requisito intermediário." #: src/file.c:1040 msgid "# Also makes:" msgstr "# Também faz:" #: src/file.c:1046 msgid "# Modification time never checked." msgstr "# O Período da modificação nunca foi verificado." #: src/file.c:1048 msgid "# File does not exist." msgstr "# O Arquivo não existe." #: src/file.c:1050 msgid "# File is very old." msgstr "# O Arquivo está desatualizado." #: src/file.c:1055 #, c-format msgid "# Last modified %s\n" msgstr "# Última modificação %s\n" #: src/file.c:1058 msgid "# File has been updated." msgstr "# O Arquivo foi atualizado." #: src/file.c:1058 msgid "# File has not been updated." msgstr "# O Arquivo não foi atualizado." #: src/file.c:1062 msgid "# Recipe currently running (THIS IS A BUG)." msgstr "# Comandos em execução (ISTO É UMA FALHA)." #: src/file.c:1065 msgid "# Dependencies recipe running (THIS IS A BUG)." msgstr "# Comandos de dependências em execução (ISTO É UMA FALHA)." #: src/file.c:1074 msgid "# Successfully updated." msgstr "# Atualizado com sucesso." #: src/file.c:1078 msgid "# Needs to be updated (-q is set)." msgstr "# Precisa ser atualizado (-q está definido)." #: src/file.c:1081 msgid "# Failed to be updated." msgstr "# Problemas com a atualização." #: src/file.c:1086 msgid "# Invalid value in 'command_state' member!" msgstr "# Valor inválido no membro 'command_state' !" #: src/file.c:1105 msgid "" "\n" "# Files" msgstr "" "\n" "# Arquivos" #: src/file.c:1109 msgid "" "\n" "# files hash-table stats:\n" "# " msgstr "" "\n" "# tabela hash de arquivos:\n" "# " #: src/file.c:1119 #, c-format msgid "%s: Field '%s' not cached: %s" msgstr "%s: Campo '%s' não memorizado: %s" #: src/function.c:794 msgid "non-numeric first argument to 'word' function" msgstr "primeiro argumento não numérico para a função 'word'" #: src/function.c:799 #, c-format 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" #: src/function.c:819 msgid "non-numeric first argument to 'wordlist' function" msgstr "primeiro argumento não numérico para a função 'wordlist' " #: src/function.c:821 msgid "non-numeric second argument to 'wordlist' function" msgstr "segundo argumento não numérico para a função 'wordlist' " #: src/function.c:1533 #, c-format msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n" msgstr "" "windows32_openpipe(): DuplicateHandle(In) falhou (e=%ld)\n" " \n" #: src/function.c:1557 #, c-format msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n" msgstr "" "windows32_openpipe(): DuplicateHandle(Err) falhou (e=%ld)\n" "\n" #: src/function.c:1564 #, c-format msgid "CreatePipe() failed (e=%ld)\n" msgstr "CreatePipe() falhou (e=%ld)\n" #: src/function.c:1572 #, c-format msgid "windows32_openpipe(): process_init_fd() failed\n" msgstr "windows32_openpipe(): process_init_fd() falhou\n" #: src/function.c:1857 #, c-format msgid "Cleaning up temporary batch file %s\n" msgstr "Apagando o arquivo de lote temporário %s\n" #: src/function.c:2230 src/function.c:2255 #, c-format msgid "file: missing filename" msgstr "arquivo: faltando o nome do arquivo" #: src/function.c:2234 src/function.c:2265 #, c-format msgid "open: %s: %s" msgstr "aberto: %s: %s" #: src/function.c:2242 #, c-format msgid "write: %s: %s" msgstr "gravação: %s: %s" #: src/function.c:2245 src/function.c:2282 #, c-format msgid "close: %s: %s" msgstr "fechado: %s: %s" #: src/function.c:2258 #, c-format msgid "file: too many arguments" msgstr "arquivo: muitos argumentos" #: src/function.c:2277 #, c-format msgid "read: %s: %s" msgstr "lido: %s: %s" #: src/function.c:2290 #, c-format msgid "file: invalid file operation: %s" msgstr "arquivo: operação de arquivo inválida: %s" #: src/function.c:2405 #, c-format msgid "insufficient number of arguments (%d) to function '%s'" msgstr "O número de argumentos é insuficiente (%d) para a função '%s' " #: src/function.c:2417 #, c-format msgid "unimplemented on this platform: function '%s'" msgstr "A função '%s' não foi implementada nesta plataforma " #: src/function.c:2483 #, c-format msgid "unterminated call to function '%s': missing '%c'" msgstr "Chamada não terminada para a função '%s': faltando '%c' " #: src/function.c:2667 #, c-format msgid "Empty function name" msgstr "Nome da função vazio" #: src/function.c:2669 #, c-format msgid "Invalid function name: %s" msgstr "Nome da função inválido: %s" #: src/function.c:2671 #, c-format msgid "Function name too long: %s" msgstr "Nome da função muito longo: %s" #: src/function.c:2674 #, c-format msgid "Invalid minimum argument count (%u) for function %s" msgstr "O número mínimo de argumentos é inválido (%u) para a função %s" #: src/function.c:2677 #, c-format msgid "Invalid maximum argument count (%u) for function %s" msgstr "O número máximo de argumentos é inválido (%u) para a função %s" #: src/getopt.c:659 #, c-format msgid "%s: option '%s' is ambiguous\n" msgstr "" "%s: a opção '%s' é ambigua\n" "\n" #: src/getopt.c:683 #, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "" "%s: a opção '--%s' não permite um argumento\n" "\n" #: src/getopt.c:688 #, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s: a opção '%c%s' não permite um argumento\n" #: src/getopt.c:705 src/getopt.c:878 #, c-format msgid "%s: option '%s' requires an argument\n" msgstr "" "%s: a opção '%s' requer um argumento\n" "\n" #: src/getopt.c:734 #, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "" "%s: a opção é desconhecida '--%s'\n" "\n" #: src/getopt.c:738 #, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "" "%s: a opção é desconhecida '%c%s'\n" "\n" #: src/getopt.c:764 #, c-format msgid "%s: illegal option -- %c\n" msgstr "%s: a opção é ilegal -- %c\n" #: src/getopt.c:767 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s: a opção é inválida -- %c\n" #: src/getopt.c:797 src/getopt.c:927 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: a opção requer um argumento -- %c\n" #: src/getopt.c:844 #, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "" "%s: a opção '-W %s' é ambigua\n" "\n" #: src/getopt.c:862 #, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "" "%s: a opção '-W %s' não permite um argumento\n" "\n" #: src/guile.c:58 #, c-format msgid "guile: Expanding '%s'\n" msgstr "guile: Expandindo '%s'\n" #: src/guile.c:74 #, c-format msgid "guile: Evaluating '%s'\n" msgstr "guile: Avaliando '%s'\n" #: src/hash.c:50 #, c-format msgid "can't allocate %lu bytes for hash table: memory exhausted" msgstr "não foi possível alocar %lu bytes para a tabela hash: memória cheia" #: src/hash.c:280 #, c-format msgid "Load=%lu/%lu=%.0f%%, " msgstr "Carga=%lu/%lu=%.0f%%," #: src/hash.c:282 #, c-format msgid "Rehash=%u, " msgstr "Rehash=%u," #: src/hash.c:283 #, c-format msgid "Collisions=%lu/%lu=%.0f%%" msgstr "Colisões=%lu/%lu=%.0f%%" #: src/implicit.c:38 #, c-format msgid "Looking for an implicit rule for '%s'.\n" msgstr "" "Procurando por uma regra implícita para '%s'.\n" " \n" #: src/implicit.c:54 #, c-format msgid "Looking for archive-member implicit rule for '%s'.\n" msgstr "" "Procurando por uma regra implícita de arquivo-membro para '%s'.\n" " \n" #: src/implicit.c:311 #, c-format msgid "Avoiding implicit rule recursion.\n" msgstr "Evitando recursão em regra implícita.\n" #: src/implicit.c:484 #, fuzzy, c-format msgid "Stem too long: '%s%.*s'.\n" msgstr "Desvio muito longo: '%.*s'.\n" #: src/implicit.c:490 #, c-format msgid "Trying pattern rule with stem '%.*s'.\n" msgstr "" "Tentando padrão para regra com '%.*s'.\n" "\n" #: src/implicit.c:717 #, c-format msgid "Rejecting impossible rule prerequisite '%s'.\n" msgstr "" "Rejeitando pré-requisito para regra '%s'.\n" "\n" #: src/implicit.c:718 #, c-format msgid "Rejecting impossible implicit prerequisite '%s'.\n" msgstr "" "Rejeitando pré-requisitos implícitos '%s'.\n" "\n" #: src/implicit.c:732 #, c-format msgid "Trying rule prerequisite '%s'.\n" msgstr "" "Tentanto pré-requisito para a regra '%s'.\n" "\n" #: src/implicit.c:733 #, c-format msgid "Trying implicit prerequisite '%s'.\n" msgstr "" "Tentando pré-requisito implícito '%s'.\n" "\n" #: src/implicit.c:772 #, c-format msgid "Found prerequisite '%s' as VPATH '%s'\n" msgstr "" "Pré-requisito '%s' encontrado como VPATH '%s'\n" "\n" #: src/implicit.c:786 #, c-format msgid "Looking for a rule with intermediate file '%s'.\n" msgstr "" "Procurando uma regra com o arquivo intermediário '%s'.\n" "\n" #: src/job.c:370 msgid "Cannot create a temporary file\n" msgstr "Não foi possível criar um arquivos temporário\n" #: src/job.c:548 msgid " (core dumped)" msgstr " (arquivo core criado)" #: src/job.c:553 msgid " (ignored)" msgstr "(ignorado)" #: src/job.c:557 src/job.c:1892 msgid "" msgstr "" #: src/job.c:573 #, c-format msgid "%s[%s: %s] Error %d%s" msgstr "%s[%s: %s] Erro %d%s" #: src/job.c:662 #, c-format msgid "*** Waiting for unfinished jobs...." msgstr "** Esperando que outros processos terminem." #: src/job.c:704 #, c-format msgid "Live child %p (%s) PID %s %s\n" msgstr "Filho ativo %p (%s) PID %s %s\n" #: src/job.c:706 src/job.c:900 src/job.c:1072 src/job.c:1644 #, c-format msgid " (remote)" msgstr " (remoto)" #: src/job.c:898 #, c-format msgid "Reaping winning child %p PID %s %s\n" msgstr "Descarregando processo filho %p PID %s %s\n" #: src/job.c:899 #, c-format msgid "Reaping losing child %p PID %s %s\n" msgstr "Descarregando processo filho %p PID %s %s\n" #: src/job.c:950 #, c-format msgid "Cleaning up temp batch file %s\n" msgstr "Apagando o arquivo de lote temporário: %s\n" #: src/job.c:956 #, c-format msgid "Cleaning up temp batch file %s failed (%d)\n" msgstr "Ao apagar o arquivo de lote temporário %s houve uma falha (%d)\n" #: src/job.c:1071 #, c-format msgid "Removing child %p PID %s%s from chain.\n" msgstr "Removendo o processo filho %p PID %s%s da cadeia.\n" #: src/job.c:1120 #, c-format msgid "Released token for child %p (%s).\n" msgstr "Liberado sinalizador para o processo filho %p (%s).\n" #: src/job.c:1575 src/job.c:2487 #, c-format msgid "process_easy() failed to launch process (e=%ld)\n" msgstr "process_easy() falhou ao executar o processo (e=%ld)\n" #: src/job.c:1579 src/job.c:2491 #, c-format msgid "" "\n" "Counted %d args in failed launch\n" msgstr "" "\n" "Contados %d args na falha de execução\n" #: src/job.c:1642 #, 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" #: src/job.c:1875 #, c-format msgid "Obtained token for child %p (%s).\n" msgstr "Obtido o sinalizador para o processo filho %p (%s).\n" #: src/job.c:1902 #, c-format msgid "%s: target '%s' does not exist" msgstr "%s Alvo '%s' não existe" #: src/job.c:1905 #, c-format msgid "%s: update target '%s' due to: %s" msgstr "%s: alvo atualizado '%s'devido a: %s" #: src/job.c:2108 #, c-format msgid "cannot enforce load limits on this operating system" msgstr "não pôde forçar os limites de carga neste sistema operacional" #: src/job.c:2110 msgid "cannot enforce load limit: " msgstr "não pôde forçar a carga limite:" #: src/job.c:2200 #, c-format msgid "no more file handles: could not duplicate stdin\n" msgstr "sem manipuladores de arquivos: não é possível duplicar stdin\n" #: src/job.c:2212 #, c-format msgid "no more file handles: could not duplicate stdout\n" msgstr "sem manipuladores de arquivos: não é possível duplicar stdout\n" #: src/job.c:2226 #, c-format msgid "no more file handles: could not duplicate stderr\n" msgstr "sem manipuladores de arquivos: não é possível duplicar stderr\n" #: src/job.c:2241 #, c-format msgid "Could not restore stdin\n" msgstr "Não é possível restaurar stdin\n" #: src/job.c:2249 #, c-format msgid "Could not restore stdout\n" msgstr "Não é possível restaurar stdout\n" #: src/job.c:2257 #, c-format msgid "Could not restore stderr\n" msgstr "Não é possível restaurar stderr\n" #: src/job.c:2520 #, 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" #: src/job.c:2623 #, c-format msgid "spawnvpe: environment space might be exhausted" msgstr "spawnvpe: o espaço de ambiente pode estar cheio" #: src/job.c:2862 #, c-format msgid "$SHELL changed (was '%s', now '%s')\n" msgstr "" "$SHELL alterado (era '%s' e agora é '%s')\n" "\n" #: src/job.c:3300 src/job.c:3485 #, c-format msgid "Creating temporary batch file %s\n" msgstr "Criando arquivo de lote temporário %s\n" #: src/job.c:3308 #, c-format msgid "" "Batch file contents:\n" "\t@echo off\n" msgstr "" "Conteúdo do arquivo de lote:\n" "\t@echo off\n" #: src/job.c:3497 #, c-format msgid "" "Batch file contents:%s\n" "\t%s\n" msgstr "" "Conteúdo do arquivo de lote:%s\n" "\t%s\n" #: src/job.c:3605 #, 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" #: src/load.c:60 #, c-format msgid "Failed to open global symbol table: %s" msgstr "Falha ao abrir a tabela de símbolos globais: %s" #: src/load.c:97 #, c-format msgid "Loaded object %s is not declared to be GPL compatible" msgstr "O objeto carregado %s não foi declarado compatível com a GPL" #: src/load.c:104 #, c-format msgid "Failed to load symbol %s from %s: %s" msgstr "Falhou ao carragar o símbolo %s de %s: %s" #: src/load.c:149 #, c-format msgid "Empty symbol name for load: %s" msgstr "Nome do símbolo vazio: %s" #: src/load.c:204 #, c-format msgid "Loading symbol %s from %s\n" msgstr "Carregando símbolo %s de %s\n" #: src/load.c:256 #, c-format msgid "The 'load' operation is not supported on this platform." msgstr "A operação 'load' não é suportada nesta plataforma." #: src/main.c:335 msgid "Options:\n" msgstr "Opções:\n" #: src/main.c:336 msgid " -b, -m Ignored for compatibility.\n" msgstr " -b, -m Ignorado para compatibilidade.\n" #: src/main.c:338 msgid " -B, --always-make Unconditionally make all targets.\n" msgstr "" " -B, --always-make Processa todos os alvos incondicionalmente.\n" #: src/main.c:340 msgid "" " -C DIRECTORY, --directory=DIRECTORY\n" " Change to DIRECTORY before doing anything.\n" msgstr "" " -C DIRETÓRIO, --directory=DIRETÓRIO\n" " Muda para o DIRETÓRIO antes de fazer algo.\n" #: src/main.c:343 msgid " -d Print lots of debugging information.\n" msgstr " -d Imprime muita informação de depuração.\n" #: src/main.c:345 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" #: src/main.c:347 msgid "" " -e, --environment-overrides\n" " Environment variables override makefiles.\n" msgstr "" " -e, --environment-overrides\n" " Assume os valores das variáveis de ambiente.\n" #: src/main.c:350 msgid "" " -E STRING, --eval=STRING Evaluate STRING as a makefile statement.\n" msgstr "" "-E STRING, --eval=STRING Avalia a STRING como uma declaração para um " "makefile.\n" #: src/main.c:352 msgid "" " -f FILE, --file=FILE, --makefile=FILE\n" " Read FILE as a makefile.\n" msgstr "" " -f ARQUIVO, --file=ARQUIVO, --makefile=ARQUIVO\n" " Lê o ARQUIVO como se fosse um arquivo make.\n" #: src/main.c:355 msgid " -h, --help Print this message and exit.\n" msgstr " -h, --help Imprime esta mensagem e sai.\n" #: src/main.c:357 msgid " -i, --ignore-errors Ignore errors from recipes.\n" msgstr " -i, --ignore-errors Ignora os erros dos comandos.\n" #: src/main.c:359 msgid "" " -I DIRECTORY, --include-dir=DIRECTORY\n" " Search DIRECTORY for included makefiles.\n" msgstr "" " -I DIRETÓRIO, --include-dir=DIRETÓRIO\n" " Pesquisa o DIRETÃ’RIO por arquivos make a " "incluir.\n" #: src/main.c:362 msgid "" " -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no " "arg.\n" msgstr "" " -j [N], --jobs[=N] Permite N tarefas de uma vez; tarefas infinitas " "sem argumentos.\n" #: src/main.c:364 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" #: src/main.c:366 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" " Não inicia múltiplas tarefas a menos que a " "carga seja menor que N.\n" #: src/main.c:369 msgid "" " -L, --check-symlink-times Use the latest mtime between symlinks and " "target.\n" msgstr "" "-L, --check-symlink-times Usa o tempo mais antigo entre o vínculo simbólico " "e o alvo.\n" #: src/main.c:371 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ão executa quaisquer comandos; apenas imprime-" "os.\n" #: src/main.c:374 msgid "" " -o FILE, --old-file=FILE, --assume-old=FILE\n" " Consider FILE to be very old and don't remake " "it.\n" msgstr "" " -o ARQUIVO, --old-file=ARQUIVO, --assume-old=ARQUIVO\n" " Considera o ARQUIVO como muito antigo e não " "reprocessá-o.\n" #: src/main.c:377 msgid "" " -O[TYPE], --output-sync[=TYPE]\n" " Synchronize output of parallel jobs by TYPE.\n" msgstr "" " -O[TYPE], --output-sync[=TYPE]\n" " Sincroniza a saída de tarefas paralelas pelo " "TIPO.\n" #: src/main.c:380 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" #: src/main.c:382 msgid "" " -q, --question Run no recipe; exit status says if up to " "date.\n" msgstr "" " -q, --question Não executa os comandos; O código de saida " "indica se está atualizado.\n" #: src/main.c:384 msgid " -r, --no-builtin-rules Disable the built-in implicit rules.\n" msgstr " -r, --no-builtin-rules Desabilita as regras implícitas.\n" #: src/main.c:386 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" #: src/main.c:388 msgid " -s, --silent, --quiet Don't echo recipes.\n" msgstr " -s, --silent, --quiet Não ecoa os comandos.\n" #: src/main.c:390 msgid " --no-silent Echo recipes (disable --silent mode).\n" msgstr "" " --no-silent Ecoa as instruções (desabilita o modo --" "silent).\n" #: src/main.c:392 msgid "" " -S, --no-keep-going, --stop\n" " Turns off -k.\n" msgstr "" " -S, --no-keep-going, --stop\n" " Desativa a opção -k.\n" #: src/main.c:395 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" #: src/main.c:397 msgid " --trace Print tracing information.\n" msgstr " -trace Imprime informação de depuração.\n" #: src/main.c:399 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" #: src/main.c:401 msgid " -w, --print-directory Print the current directory.\n" msgstr " -w, --print-directory Imprime o diretório atual.\n" #: src/main.c:403 msgid "" " --no-print-directory Turn off -w, even if it was turned on " "implicitly.\n" msgstr "" " --no-print-directory Desativa a opção -w, mesmo que ela esteja " "implicitamente ativada.\n" #: src/main.c:405 msgid "" " -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n" " Consider FILE to be infinitely new.\n" msgstr "" " -W ARQUIVO, --what-if=ARQUIVO, --new-file=ARQUIVO, --assume-new=ARQUIVO\n" " Considera o ARQUIVO infinitamente novo.\n" #: src/main.c:408 msgid "" " --warn-undefined-variables Warn when an undefined variable is " "referenced.\n" msgstr "" " --warn-undefined-variables Avisa quando um variável não definida for " "referenciada.\n" #: src/main.c:671 #, c-format msgid "empty string invalid as file name" msgstr "Cadeia de caracteres vazia não é válida como nome de arquivo" #: src/main.c:754 #, c-format msgid "unknown debug level specification '%s'" msgstr "nível de depuração desconhecido: '%s' " #: src/main.c:794 #, c-format msgid "unknown output-sync type '%s'" msgstr "tipo output-sync desconhecido '%s'" #: src/main.c:849 #, 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" #: src/main.c:856 #, c-format msgid "" "\n" "Unhandled exception filter called from program %s\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" msgstr "" "\n" "Não pôde tratar o filtro de exceção chamado por %s\n" "CódigoExceção = %lx\n" "SinalExceção = %lx\n" "EndereçoExceção = 0x%p\n" #: src/main.c:864 #, 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" #: src/main.c:865 #, 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" #: src/main.c:941 src/main.c:956 #, c-format msgid "find_and_set_shell() setting default_shell = %s\n" msgstr "find_and_set_shell() definiu o default_shell = %s\n" #: src/main.c:1009 #, 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" #: src/main.c:1609 #, c-format msgid "" "warning: jobserver unavailable: using -j1. Add '+' to parent make rule." msgstr "aviso: jobserver indisponível: usando -j1. Inclua '+' na regra pai. " #: src/main.c:1617 #, c-format msgid "warning: -j%d forced in submake: resetting jobserver mode." msgstr "aviso: -j%d forçado no submake: reiniciando o modo jobserver." #: src/main.c:1781 #, c-format msgid "Makefile from standard input specified twice." msgstr "Makefile na entrada padrão especificado duas vezes." #: src/main.c:1819 src/vmsjobs.c:1248 msgid "fopen (temporary file)" msgstr "fopen (arquivo temporário)" #: src/main.c:1825 msgid "fwrite (temporary file)" msgstr "fwrite (arquivo temporário)" #: src/main.c:2004 #, c-format msgid "warning: -j%d forced in makefile: resetting jobserver mode." msgstr "aviso: -j%d forçado no submake: reiniciando o modo jobserver." #: src/main.c:2068 #, c-format msgid "Parallel jobs (-j) are not supported on this platform." msgstr "Tarefas paralelas (-j) não são suportadas nesta plataforma." #: src/main.c:2069 #, c-format msgid "Resetting to single job (-j1) mode." msgstr "Reiniciando no modo de tarefa única (-j1)." #: src/main.c:2109 #, c-format msgid "Symbolic links not supported: disabling -L." msgstr "Vínculos simbólicos não são suportados: desabilite -L." #: src/main.c:2190 #, c-format msgid "Updating makefiles....\n" msgstr "Atualizando os arquivos makefiles ...\n" #: src/main.c:2226 #, c-format msgid "Makefile '%s' might loop; not remaking it.\n" msgstr "" "O arquivo '%s' pode estar em loop; não reprocessá-lo.\n" "\n" #: src/main.c:2303 #, c-format msgid "Failed to remake makefile '%s'." msgstr "Problemas ao reprocessar o arquivo '%s'. " #: src/main.c:2323 #, c-format msgid "Included makefile '%s' was not found." msgstr "Arquivo '%s' incluido não foi encontrado. " #: src/main.c:2328 #, c-format msgid "Makefile '%s' was not found" msgstr "O arquivo '%s' não foi encontrado. " #: src/main.c:2394 #, c-format msgid "Couldn't change back to original directory." msgstr "Não foi possível voltar ao diretório original." #: src/main.c:2402 #, c-format msgid "Re-executing[%u]:" msgstr "Re-executando[%u]:" #: src/main.c:2522 msgid "unlink (temporary file): " msgstr "desvinculado (arquivos temporário): " #: src/main.c:2555 #, c-format msgid ".DEFAULT_GOAL contains more than one target" msgstr ". DEFAULT_GOAL contém mais do que um alvo" #: src/main.c:2579 #, c-format msgid "No targets" msgstr "Sem alvo" #: src/main.c:2581 #, c-format msgid "No targets specified and no makefile found" msgstr "Nenhum alvo indicado e nenhum arquivo make encontrado" #: src/main.c:2586 #, c-format msgid "Updating goal targets....\n" msgstr "Atualizando os objetivos finais...\n" #: src/main.c:2610 #, c-format msgid "warning: Clock skew detected. Your build may be incomplete." msgstr "aviso: O relógio está errado. Sua compilação pode ficar incompleta." #: src/main.c:2804 #, c-format msgid "Usage: %s [options] [target] ...\n" msgstr "Uso: %s [opções] [alvo] ...\n" #: src/main.c:2810 #, c-format msgid "" "\n" "This program built for %s\n" msgstr "" "\n" "Este programa foi compilado para %s\n" #: src/main.c:2812 #, c-format msgid "" "\n" "This program built for %s (%s)\n" msgstr "" "\n" "Este programa foi compilado para %s (%s)\n" #: src/main.c:2815 #, c-format msgid "Report bugs to \n" msgstr "Informe os problemas para .\n" #: src/main.c:2901 #, 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 " #: src/main.c:2965 #, c-format msgid "the '-%c' option requires a positive integer argument" msgstr "a opção '-%c' requer um argumento inteiro positivo " #: src/main.c:3363 #, c-format msgid "%sBuilt for %s\n" msgstr "%sCompilado para %s\n" #: src/main.c:3365 #, c-format msgid "%sBuilt for %s (%s)\n" msgstr "%sCompilado para %s (%s)\n" #: src/main.c:3376 #, c-format msgid "" "%sLicense GPLv3+: GNU GPL version 3 or later \n" "%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 "" "%sLicença GPLv3+: GNU GPL versão 3 ou posterior \n" "%sIsto é um aplicativo livre: você pode alterá-lo e redistribui-lo " "livremente.\n" "%sNÃO Hà GARANTIAS, exceto o que for permitido por lei.\n" #: src/main.c:3397 #, c-format msgid "" "\n" "# Make data base, printed on %s" msgstr "" "\n" "# Banco de dados do Make, impresso em %s" #: src/main.c:3407 #, c-format msgid "" "\n" "# Finished Make data base on %s\n" msgstr "" "\n" "# Banco de dados do Make finalizado em %s\n" #: src/misc.c:643 #, 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" #: src/misc.c:664 msgid "Initialized access" msgstr "Acesso inicializado" #: src/misc.c:743 msgid "User access" msgstr "Acesso do usuário" #: src/misc.c:791 msgid "Make access" msgstr "Acesso do make" #: src/misc.c:825 msgid "Child access" msgstr "Acesso filho" #: src/output.c:97 #, c-format msgid "%s: Entering an unknown directory\n" msgstr "%s: Entrando em um diretório desconhecido\n" #: src/output.c:99 #, c-format msgid "%s: Leaving an unknown directory\n" msgstr "%s: Saindo de um diretório desconhecido\n" #: src/output.c:102 #, c-format msgid "%s: Entering directory '%s'\n" msgstr "" "%s: Entrando no diretório '%s'\n" "\n" #: src/output.c:104 #, c-format msgid "%s: Leaving directory '%s'\n" msgstr "" "%s: Saindo do diretório '%s'\n" "\n" #: src/output.c:108 #, c-format msgid "%s[%u]: Entering an unknown directory\n" msgstr "%s[%u]: Entrando em um diretório desconhecido\n" #: src/output.c:110 #, c-format msgid "%s[%u]: Leaving an unknown directory\n" msgstr "%s[%u]: Saindo de um diretório desconhecido\n" #: src/output.c:113 #, c-format msgid "%s[%u]: Entering directory '%s'\n" msgstr "" "%s[%u]: Entrando no diretório '%s'\n" "\n" #: src/output.c:115 #, c-format msgid "%s[%u]: Leaving directory '%s'\n" msgstr "" "%s[%u]: Saindo do diretório '%s'\n" "\n" #: src/output.c:442 src/output.c:444 #, c-format msgid "write error: stdout" msgstr "Erro de gravação: stdout" #: src/output.c:624 msgid ". Stop.\n" msgstr ". Pare.\n" #: src/output.c:658 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" #: src/output.c:667 #, c-format msgid "%s: %s" msgstr "%s: %s" #: src/output.h:62 #, c-format msgid "-O[TYPE] (--output-sync[=TYPE]) is not configured for this build." msgstr "" "-O[TYPE] (--output-sync[=TYPE]) não está configurado para esta compilação." #: src/posixos.c:90 msgid "creating jobs pipe" msgstr "criando canalização de tarefas" #: src/posixos.c:98 src/posixos.c:251 msgid "duping jobs pipe" msgstr "duplicando canalização de tarefas" #: src/posixos.c:104 msgid "init jobserver pipe" msgstr "inicializando a canalização do jobserver" #: src/posixos.c:119 #, c-format msgid "internal error: invalid --jobserver-auth string '%s'" msgstr "erro interno: valor '%s' inválido para --jobserver-auth" #: src/posixos.c:122 #, c-format msgid "Jobserver client (fds %d,%d)\n" msgstr "Cliente Jobserver (fds %d,%d)\n" #: src/posixos.c:138 msgid "jobserver pipeline" msgstr "canalização do jobserver" #: src/posixos.c:186 msgid "write jobserver" msgstr "gravar jobserver" #: src/posixos.c:300 #, c-format msgid "job server shut down" msgstr "servidor de job desligado" #: src/posixos.c:303 msgid "pselect jobs pipe" msgstr "tarefas canalizadas pselect" #: src/posixos.c:319 src/posixos.c:433 msgid "read jobs pipe" msgstr "tarefas canalizadas lidas" #: src/read.c:181 #, c-format msgid "Reading makefiles...\n" msgstr "Lendo arquivos makefile ...\n" #: src/read.c:336 #, c-format msgid "Reading makefile '%s'" msgstr "Lendo arquivos makefile '%s' " #: src/read.c:338 #, c-format msgid " (no default goal)" msgstr " (não há objetivo padrão)" #: src/read.c:340 #, c-format msgid " (search path)" msgstr " (caminho de pesquisa)" #: src/read.c:342 #, c-format msgid " (don't care)" msgstr " (sem importância)" #: src/read.c:344 #, c-format msgid " (no ~ expansion)" msgstr " (sem expansão ~)" #: src/read.c:655 #, c-format msgid "Skipping UTF-8 BOM in makefile '%s'\n" msgstr "Ignorando UTF-8 BOM no makefile '%s'\n" #: src/read.c:658 #, c-format msgid "Skipping UTF-8 BOM in makefile buffer\n" msgstr "Ignorando UTF-8 BOM no makefile buffer\n" #: src/read.c:787 #, c-format msgid "invalid syntax in conditional" msgstr "síntaxe inválida na condicional" #: src/read.c:960 #, c-format msgid "%s: failed to load" msgstr "%s: falhou ao carregar" #: src/read.c:986 #, c-format msgid "recipe commences before first target" msgstr "comandos começam antes do primeiro alvo" #: src/read.c:1035 #, c-format msgid "missing rule before recipe" msgstr "falta uma regra antes dos comandos" #: src/read.c:1136 #, c-format msgid "missing separator (did you mean TAB instead of 8 spaces?)" msgstr "faltando separador (você pensou em TAB ao invés de 8 espaços?)" #: src/read.c:1138 #, c-format msgid "missing separator" msgstr "faltando o separador" #: src/read.c:1283 #, c-format msgid "missing target pattern" msgstr "faltando o padrão dos alvos" #: src/read.c:1285 #, c-format msgid "multiple target patterns" msgstr "múltiplos padrões para o alvo" #: src/read.c:1289 #, c-format msgid "target pattern contains no '%%'" msgstr "padrão para o alvo não contém '%%' " #: src/read.c:1404 #, c-format msgid "missing 'endif'" msgstr "faltando 'endif' " #: src/read.c:1443 src/read.c:1488 src/variable.c:1600 #, c-format msgid "empty variable name" msgstr "nome de variável vazio" #: src/read.c:1478 #, c-format msgid "extraneous text after 'define' directive" msgstr "Texto estranho depois da diretiva 'define' " #: src/read.c:1503 #, c-format msgid "missing 'endef', unterminated 'define'" msgstr "faltando 'endef', 'define' não terminado " #: src/read.c:1531 #, c-format msgid "extraneous text after 'endef' directive" msgstr "Texto estranho depois da diretiva 'endef'" #: src/read.c:1603 #, c-format msgid "extraneous text after '%s' directive" msgstr "Texto estranho depois da diretiva '%s' " #: src/read.c:1604 #, c-format msgid "extraneous '%s'" msgstr "'%s' estranho " #: src/read.c:1632 #, c-format msgid "only one 'else' per conditional" msgstr "use apenas um 'else' por condicional " #: src/read.c:1908 #, c-format msgid "Malformed target-specific variable definition" msgstr "Definição de variável para o alvo mau formada" #: src/read.c:1968 #, c-format msgid "prerequisites cannot be defined in recipes" msgstr "os pré-requisitos não podem ser definidos no comando" #: src/read.c:1986 #, c-format msgid "grouped targets must provide a recipe" msgstr "alvos agrupados devem fornecer uma instrução" #: src/read.c:2029 #, c-format msgid "mixed implicit and static pattern rules" msgstr "As regras implícitas e de padrão estático misturadas" #: src/read.c:2052 #, c-format msgid "mixed implicit and normal rules" msgstr "As regras implícitas e normais misturadas" #: src/read.c:2107 #, c-format msgid "target '%s' doesn't match the target pattern" msgstr "O alvo '%s' não coincide com o padrão " #: src/read.c:2122 src/read.c:2168 #, c-format msgid "target file '%s' has both : and :: entries" msgstr "O arquivo alvo '%s' tem entradas : e :: " #: src/read.c:2128 #, 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. " #: src/read.c:2138 #, c-format msgid "warning: overriding recipe for target '%s'" msgstr "aviso: sobrescrevendo os comandos para o alvo '%s'" #: src/read.c:2141 #, c-format msgid "warning: ignoring old recipe for target '%s'" msgstr "aviso: ignorando comandos antigos para o alvo '%s' " #: src/read.c:2254 #, c-format msgid "*** mixed implicit and normal rules: deprecated syntax" msgstr "As regras implícitas e normais misturadas: síntaxe obsoleta" #: src/read.c:2271 #, c-format msgid "warning: overriding group membership for target '%s'" msgstr "aviso: sobrescrevendo o grupo para o alvo '%s'" #: src/read.c:2636 #, c-format msgid "warning: NUL character seen; rest of line ignored" msgstr "aviso: caracter NUL detetado; o resto da linha foi ignorado" #: src/remake.c:226 #, c-format msgid "Nothing to be done for '%s'." msgstr "Nada a ser feito para '%s'. " #: src/remake.c:227 #, c-format msgid "'%s' is up to date." msgstr "'%s' está atualizado. " #: src/remake.c:323 #, c-format msgid "Pruning file '%s'.\n" msgstr "" "Atualizando o arquivo '%s'.\n" "\n" #: src/remake.c:389 #, 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 " #: src/remake.c:399 #, c-format msgid "%sNo rule to make target '%s'%s" msgstr "%sSem regra para processar o alvo '%s'%s " #: src/remake.c:425 #, c-format msgid "Considering target file '%s'.\n" msgstr "" "Considerando o arquivo alvo '%s'.\n" "\n" #: src/remake.c:432 #, c-format msgid "Recently tried and failed to update file '%s'.\n" msgstr "" "Tentativa de atualizar o arquivo '%s' falhou.\n" "\n" #: src/remake.c:444 #, c-format msgid "File '%s' was considered already.\n" msgstr "" "O arquivo '%s' já foi considerado.\n" "\n" #: src/remake.c:454 #, c-format msgid "Still updating file '%s'.\n" msgstr "" "Ainda está atualizando o arquivo '%s'.\n" "\n" #: src/remake.c:457 #, c-format msgid "Finished updating file '%s'.\n" msgstr "" "Atualização do arquivo '%s' concluida.\n" "\n" #: src/remake.c:486 #, c-format msgid "File '%s' does not exist.\n" msgstr "" "O arquivo '%s' não existe.\n" "\n" #: src/remake.c:494 #, c-format msgid "" "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp" msgstr "" "*** Aviso: arquivo .LOW_RESOLUTION_TIME '%s' tem uma etiqueta de tempo de " "alta resolução " #: src/remake.c:507 src/remake.c:1039 #, c-format msgid "Found an implicit rule for '%s'.\n" msgstr "" "Regra implícita encontrada para '%s'.\n" "\n" #: src/remake.c:509 src/remake.c:1041 #, c-format msgid "No implicit rule found for '%s'.\n" msgstr "" "Nenhuma regra implícita encontrada para '%s'.\n" "\n" #: src/remake.c:515 #, c-format msgid "Using default recipe for '%s'.\n" msgstr "" "Usando os comandos padrões para '%s'.\n" "\n" #: src/remake.c:549 src/remake.c:1088 #, c-format msgid "Circular %s <- %s dependency dropped." msgstr "Dependência circular %s <- %s abandonada." #: src/remake.c:674 #, c-format msgid "Finished prerequisites of target file '%s'.\n" msgstr "" "Pré-requisitos do alvo '%s' concluido.\n" "\n" #: src/remake.c:680 #, c-format msgid "The prerequisites of '%s' are being made.\n" msgstr "" "Pré-requisitos do '%s' estão sendo criados.\n" "\n" #: src/remake.c:694 #, c-format msgid "Giving up on target file '%s'.\n" msgstr "" "Desistindo do arquivo '%s'.\n" "\n" #: src/remake.c:699 #, c-format msgid "Target '%s' not remade because of errors." msgstr "O alvo '%s' não foi reprocessado por causa de erros. " #: src/remake.c:751 #, c-format msgid "Prerequisite '%s' is order-only for target '%s'.\n" msgstr "" "Pré-requisito '%s' está ordenado para o alvo '%s'.\n" "\n" #: src/remake.c:756 #, c-format msgid "Prerequisite '%s' of target '%s' does not exist.\n" msgstr "" "Pré-requisitos '%s' do alvo '%s' não existem.\n" "\n" #: src/remake.c:761 #, c-format msgid "Prerequisite '%s' is newer than target '%s'.\n" msgstr "" "Pré-requisito '%s' é mais novo do que o alvo '%s'.\n" "\n" #: src/remake.c:764 #, c-format msgid "Prerequisite '%s' is older than target '%s'.\n" msgstr "" "Pré-requisito '%s' é mais antigo do que o alvo '%s'.\n" "\n" #: src/remake.c:782 #, c-format msgid "Target '%s' is double-colon and has no prerequisites.\n" msgstr "O alvo '%s' são dois-pontos duplos e não tem pré-requisitos.\n" #: src/remake.c:789 #, 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" "\n" #: src/remake.c:794 #, c-format msgid "Making '%s' due to always-make flag.\n" msgstr "" "Processando '%s' devido a opção always-make.\n" "\n" #: src/remake.c:802 #, c-format msgid "No need to remake target '%s'" msgstr "Não é necessário reprocessar o alvo '%s' " #: src/remake.c:804 #, c-format msgid "; using VPATH name '%s'" msgstr "; usando o nome VPATH '%s' " #: src/remake.c:824 #, c-format msgid "Must remake target '%s'.\n" msgstr "" "O alvo '%s' deve ser reprocessado.\n" "\n" #: src/remake.c:830 #, c-format msgid " Ignoring VPATH name '%s'.\n" msgstr "" " Ignorando o nome VPATH '%s'.\n" "\n" #: src/remake.c:839 #, c-format msgid "Recipe of '%s' is being run.\n" msgstr "" "Os comandos de '%s' estão rodando.\n" "\n" #: src/remake.c:846 #, c-format msgid "Failed to remake target file '%s'.\n" msgstr "" "Falha ao reprocessar o alvo '%s'.\n" "\n" #: src/remake.c:849 #, c-format msgid "Successfully remade target file '%s'.\n" msgstr "" "Alvo '%s' reprocessado com sucesso.\n" "\n" #: src/remake.c:852 #, c-format msgid "Target file '%s' needs to be remade under -q.\n" msgstr "" "O alvo '%s' precisa ser reprocessado sob -q.\n" "\n" #: src/remake.c:1047 #, c-format msgid "Using default commands for '%s'.\n" msgstr "" "Usando os comandos padrões para '%s'.\n" "\n" #: src/remake.c:1422 #, 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 " #: src/remake.c:1662 #, c-format msgid ".LIBPATTERNS element '%s' is not a pattern" msgstr "O elemento .LIBPATTERNS '%s' não é um padrão " #: src/remote-cstms.c:122 #, c-format msgid "Customs won't export: %s\n" msgstr "Customizações não exportadas: %s\n" #: src/rule.c:289 #, c-format msgid "warning: ignoring prerequisites on suffix rule definition" msgstr "" #: src/rule.c:530 msgid "" "\n" "# Implicit Rules" msgstr "" "\n" "# Regras implícitas." #: src/rule.c:545 msgid "" "\n" "# No implicit rules." msgstr "" "\n" "# Faltam as regras implícitas." #: src/rule.c:548 #, c-format msgid "" "\n" "# %u implicit rules, %u (%.1f%%) terminal." msgstr "" "\n" "# %u regras implícitas, %u (%.1f%%) terminal." #: src/rule.c:557 #, c-format msgid "BUG: num_pattern_rules is wrong! %u != %u" msgstr "ERRO: num_pattern_rules errada! %u != %u" #: src/signame.c:84 msgid "unknown signal" msgstr "sinal desconhecido" #: src/signame.c:92 msgid "Hangup" msgstr "Desconectar" #: src/signame.c:95 msgid "Interrupt" msgstr "Interrupção" #: src/signame.c:98 msgid "Quit" msgstr "Sair" #: src/signame.c:101 msgid "Illegal Instruction" msgstr "Instrução ilegal" #: src/signame.c:104 msgid "Trace/breakpoint trap" msgstr "Aviso Trace/breakpoint" #: src/signame.c:109 msgid "Aborted" msgstr "Abortado" #: src/signame.c:112 msgid "IOT trap" msgstr "Aviso IOT" #: src/signame.c:115 msgid "EMT trap" msgstr "Aviso EMT" #: src/signame.c:118 msgid "Floating point exception" msgstr "Exceção de ponto flutuante" #: src/signame.c:121 msgid "Killed" msgstr "Finalizado" #: src/signame.c:124 msgid "Bus error" msgstr "Erro de barramento" #: src/signame.c:127 msgid "Segmentation fault" msgstr "Falha de segmentação" #: src/signame.c:130 msgid "Bad system call" msgstr "Chamada de sistema inválida" #: src/signame.c:133 msgid "Broken pipe" msgstr "Canalização interrompida" #: src/signame.c:136 msgid "Alarm clock" msgstr "Despertador" #: src/signame.c:139 msgid "Terminated" msgstr "Terminado" #: src/signame.c:142 msgid "User defined signal 1" msgstr "Sinal 1 definido pelo usuário" #: src/signame.c:145 msgid "User defined signal 2" msgstr "Sinal 2 definido pelo usuário" #: src/signame.c:150 src/signame.c:153 msgid "Child exited" msgstr "O Filho saiu" #: src/signame.c:156 msgid "Power failure" msgstr "Falha na Energia Elétrica" #: src/signame.c:159 msgid "Stopped" msgstr "Parado" #: src/signame.c:162 msgid "Stopped (tty input)" msgstr "Parado (entrada tty)" #: src/signame.c:165 msgid "Stopped (tty output)" msgstr "Parado (saida tty)" #: src/signame.c:168 msgid "Stopped (signal)" msgstr "Parado (sinal)" #: src/signame.c:171 msgid "CPU time limit exceeded" msgstr "Tempo de CPU excedido" #: src/signame.c:174 msgid "File size limit exceeded" msgstr "Tamanho do arquivo excedido" #: src/signame.c:177 msgid "Virtual timer expired" msgstr "Temporizador virtual expirou" #: src/signame.c:180 msgid "Profiling timer expired" msgstr "Temporizador de perfil expirou" #: src/signame.c:186 msgid "Window changed" msgstr "Janela alterada" #: src/signame.c:189 msgid "Continued" msgstr "Continuação" #: src/signame.c:192 msgid "Urgent I/O condition" msgstr "Condição de E/S urgente" #: src/signame.c:199 src/signame.c:208 msgid "I/O possible" msgstr "Possível E/S" #: src/signame.c:202 msgid "SIGWIND" msgstr "SIGWIND" #: src/signame.c:205 msgid "SIGPHONE" msgstr "SIGPHONE" #: src/signame.c:211 msgid "Resource lost" msgstr "Recurso perdido" #: src/signame.c:214 msgid "Danger signal" msgstr "Sinal perigoso" #: src/signame.c:217 msgid "Information request" msgstr "Solicitação de informação" #: src/signame.c:220 msgid "Floating point co-processor not available" msgstr "Co-processador aritmético indisponível" #: src/strcache.c:274 #, c-format msgid "" "\n" "%s No strcache buffers\n" msgstr "" "\n" "%s Não há strcache buffers\n" #: src/strcache.c:304 #, c-format msgid "" "\n" "%s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu " "B\n" msgstr "" "\n" "%s strcache buffers: %lu (%lu) / strings = %lu / armazenamento = %lu / med = " "%lu B\n" #: src/strcache.c:308 #, c-format msgid "" "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B\n" msgstr "" "%s buf atual: tamanho = %hu B / usado = %hu B / contado = %hu / med = %u B\n" #: src/strcache.c:319 #, c-format msgid "%s other used: total = %lu B / count = %lu / avg = %lu B\n" msgstr "%s outro usado: total = %lu B / contado = %lu / med = %lu B\n" #: src/strcache.c:322 #, c-format msgid "" "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n" msgstr "" "%s outro livre: total = %lu B / max = %lu B / min = %lu B / med = %hu B\n" #: src/strcache.c:326 #, c-format msgid "" "\n" "%s strcache performance: lookups = %lu / hit rate = %lu%%\n" msgstr "" "\n" "%s desempenho strcache: pesquisados = %lu / encontrados = %lu%%\n" #: src/strcache.c:328 msgid "" "# hash-table stats:\n" "# " msgstr "" "# tabela hash de arquivos:\n" "#" #: src/variable.c:1653 msgid "automatic" msgstr "automático" #: src/variable.c:1656 msgid "default" msgstr "padrão" #: src/variable.c:1659 msgid "environment" msgstr "ambiente" #: src/variable.c:1662 msgid "makefile" msgstr "makefile" #: src/variable.c:1665 msgid "environment under -e" msgstr "ambiente sob -e" #: src/variable.c:1668 msgid "command line" msgstr "linha de comando" #: src/variable.c:1671 msgid "'override' directive" msgstr "diretiva 'override' " #: src/variable.c:1682 #, c-format msgid " (from '%s', line %lu)" msgstr " (de '%s', linha %lu) " #: src/variable.c:1745 msgid "# variable set hash-table stats:\n" msgstr "# tabela hash do conjunto de variávies:\n" #: src/variable.c:1756 msgid "" "\n" "# Variables\n" msgstr "" "\n" "# Variáveis\n" #: src/variable.c:1760 msgid "" "\n" "# Pattern-specific Variable Values" msgstr "" "\n" "# Valores da variável de padrões específicos" #: src/variable.c:1774 msgid "" "\n" "# No pattern-specific variable values." msgstr "" "\n" "# Faltam valores para variável de padrões específicos" #: src/variable.c:1776 #, c-format msgid "" "\n" "# %u pattern-specific variable values" msgstr "" "\n" "# %u valores para variável de padrões específicos" #: src/variable.h:229 #, c-format msgid "warning: undefined variable '%.*s'" msgstr "aviso: variável indefinida '%.*s' " #: src/vmsfunctions.c:91 #, c-format msgid "sys$search() failed with %d\n" msgstr "sys$search() falhou com %d\n" #: src/vmsjobs.c:244 #, 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" #: src/vmsjobs.c:681 #, c-format msgid "BUILTIN CD %s\n" msgstr "CD EMBUTIDO %s\n" #: src/vmsjobs.c:1224 #, c-format msgid "DCL: %s\n" msgstr "DCL: %s\n" #: src/vmsjobs.c:1284 #, c-format msgid "Append output to %s\n" msgstr "Saida redirecionada para %s\n" #: src/vmsjobs.c:1309 #, c-format msgid "Append %.*s and cleanup\n" msgstr "Acrescentado %.*s e limpo\n" #: src/vmsjobs.c:1322 #, c-format msgid "Executing %s instead\n" msgstr "Executando %s ao invés de\n" #: src/vpath.c:603 msgid "" "\n" "# VPATH Search Paths\n" msgstr "" "\n" "# Caminho VPATH\n" #: src/vpath.c:620 msgid "# No 'vpath' search paths." msgstr "# Sem caminho 'vpath'. " #: src/vpath.c:622 #, c-format msgid "" "\n" "# %u 'vpath' search paths.\n" msgstr "" "\n" "# %u caminhos 'vpath'.\n" "\n" #: src/vpath.c:625 msgid "" "\n" "# No general ('VPATH' variable) search path." msgstr "" "\n" "# Sem caminho genérico (variável 'VPATH')." #: src/vpath.c:631 msgid "" "\n" "# General ('VPATH' variable) search path:\n" "# " msgstr "" "\n" "# Caminho genérico (variável 'VPATH'):\n" "# " #: src/w32/w32os.c:44 #, c-format msgid "Jobserver slots limited to %d\n" msgstr "Slots Jobserver limitados a %d)\n" #: src/w32/w32os.c:60 #, c-format msgid "creating jobserver semaphore: (Error %ld: %s)" msgstr "criando semáforos jobserver: (Erro %ld: %s)" #: src/w32/w32os.c:79 #, c-format msgid "" "internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)" msgstr "erro interno: falha ao abrir o semáforo jobserver '%s': (Erro %ld: %s)" #: src/w32/w32os.c:82 #, c-format msgid "Jobserver client (semaphore %s)\n" msgstr "Cliente Jobserver (semáforo %s)\n" #: src/w32/w32os.c:123 #, c-format msgid "release jobserver semaphore: (Error %ld: %s)" msgstr "liberar semáforos do jobserver: (Erro %ld: %s)" #: src/w32/w32os.c:194 #, c-format msgid "semaphore or child process wait: (Error %ld: %s)" msgstr "semáforo ou processo filho espera: (Erro %ld: %s)" #~ msgid "%s: %s: Command not found\n" #~ msgstr "%s %s: Comando não encontrado\n" #~ msgid "%s[%u]: %s: Command not found\n" #~ msgstr "%s[%u]: %s: Comando não encontrado\n" #~ msgid "%s: Shell program not found" #~ msgstr "%s: Interpretador de comandos não encontrado" #~ msgid "%s is suspending for 30 seconds..." #~ msgstr "%s está suspenso por 30 segundos..." #~ msgid "done sleep(30). Continuing.\n" #~ msgstr "sleep(30) concluido. Continuando.\n" #~ msgid "Unknown error %d" #~ msgstr "Erro desconhecido %d" #~ msgid "Warning: File '%s' has modification time in the future" #~ msgstr "** Aviso: O arquivo '%s' está com a hora adiantada " #~ msgid " terminal." #~ msgstr " terminal." #~ 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" #~ msgid "Invoking builtin recipe to update target `%s'.\n" #~ msgstr "Chamando comandos internos para atualizar o alvo `%s'.\n" #~ 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" #~ msgid "write error" #~ msgstr "erro de gravação" #~ msgid "%s # of strcache buffers: %d (* %d B/buffer = %d B)\n" #~ msgstr "%s # de buffers strcache: %d (* %d B/buffer = %d B)\n" #~ msgid "" #~ "\n" #~ "# strcache hash-table stats:\n" #~ "# " #~ msgstr "" #~ "\n" #~ "# 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" #~ 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" #~ "%sPARTICULAR PURPOSE.\n" #~ msgstr "" #~ "%sEste é um programa livre; veja o fonte para as condições de cópia.\n" #~ "%sNão há garantias; nem mesmo de COMERCIALIZAÇÃO OU ATENDIMENTO A UMA\n" #~ "%sFUNÇÃO EM PARTICULAR.\n" #~ msgid "extraneous `endef'" #~ msgstr "`endef' extranho" #~ msgid "empty `override' directive" #~ msgstr "diretiva `override' vazia" #~ msgid "invalid `override' directive" #~ msgstr "diretiva `override' inválida" #~ msgid "-warning, CTRL-Y will leave sub-process(es) around.\n" #~ msgstr "-warning, CTRL-Y sairá do(s) subprocesso(s).\n" #~ msgid "Syntax error, still inside '\"'\n" #~ msgstr "Erro de sintaxe dentro de '\"'\n" #~ msgid "Got a SIGCHLD; %u unreaped children.\n" #~ msgstr "Recebido um SIGSHLD; %u processos filhos descarregados.\n" #~ msgid "Do not specify -j or --jobs if sh.exe is not available." #~ msgstr "Não especifique -j ou --jobs se o sh.exe não estiver disponível." #~ msgid "Resetting make for single job mode." #~ msgstr "Reiniciando o make para o modo de trabalho único." #~ msgid "no file name for `%sinclude'" #~ msgstr "sem nome de arquivo para `%sinclude'" #~ msgid "target `%s' leaves prerequisite pattern empty" #~ msgstr "O alvo `%s' deixou pre-requisito padrão vazio" #~ msgid "" #~ "\n" #~ "# No files." #~ msgstr "" #~ "\n" #~ "# Nenhum arquivo." make-4.3/po/lt.gmo0000644000175000017500000001557513611136532010775 00000000000000Þ•\üÜØÙéò8 T u" ¢ ¯½Øëý  %& L 7U  œ µ Í ç  & *A l # #¥ É â þ   " !A +c  © &à .ê & %@ f p | Œ – ® +¸ ä ñ ÿ  )! K d q … ™ £ ª ­ *¸ ã ñ ö  ", O]fn‰š®ÃÞ!ö!'I]{’«®½Ý ã ðú&*A(l-• Ã"Íð ÿ& 2Md x ‚ ¯L¹3Kb€1—3É!ý,(Lu" ²ÀÉ$Ð$õ.!I$k&.·(æ( 8 EQm '§Ïá ó,!Ng„› ² ¿É Ì/Ú (0O3n¢·ÀÈ Ýèþ5"M*p›%¬Ò ò,BE#Y<CYJP= 6(-[>@S, L2)&HIU*3G79QD 4!;O' +A/E$1 Z50":?F#K8.BWX RM\VNT% # Directories # Files # Implicit Rules # No implicit rules. # files hash-table stats: # This program built for %s This program built for %s (%s) Date %s uid = %d, gid = %d, mode = 0%o. (built-in): (don't care) (name might be truncated) (no default goal) (no ~ expansion) (search path) files, impossibilities impossibilities in %lu directories. so far.# A default, MAKEFILES, or -include/sinclude makefile.# Also makes:# Failed to be updated.# File does not exist.# File has been updated.# File has not been updated.# File is very old.# Implicit rule search has been done.# Implicit rule search has not been done.# Last modified %s # Modification time never checked.# Needs to be updated (-q is set).# Successfully updated.# %s: could not be stat'd. # Not a target:%s%s: %s%s: %s%s: Entering an unknown directory %s: Leaving an unknown directory %s: Timestamp out of range; substituting %s%s: illegal option -- %c %s: invalid option -- %c %s: option requires an argument -- %c %s: user %lu (real %lu), group %lu (real %lu) %s[%u]: Entering an unknown directory %s[%u]: Leaving an unknown directory . Stop. Alarm clockBad system callBus errorCPU time limit exceededContinuedCouldn't change back to original directory.Current timeDanger signalEMT trapFile size limit exceededFloating point co-processor not availableFloating point exceptionI/O possibleIllegal InstructionInformation requestInterruptKilledNoNo targetsNo targets specified and no makefile foundPower failureQuitReading makefiles... Removing intermediate files... Report bugs to Resource lostSIGPHONESIGWINDSegmentation faultStoppedStopped (signal)Stopped (tty input)Stopped (tty output)Updating goal targets.... Updating makefiles.... Usage: %s [options] [target] ... Window changedempty string invalid as file nameempty variable nameinvalid syntax in conditionalmissing target patternmultiple target patternsnounknown signalunterminated variable referenceProject-Id-Version: make-3.81 Report-Msgid-Bugs-To: bug-make@gnu.org PO-Revision-Date: 2008-05-17 21:42+0300 Last-Translator: Gintautas Miliauskas Language-Team: Lithuanian Language: lt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. X-Generator: KBabel 1.11.4 Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2); # Aplankai # Failai # NeiÅ¡reikÅ¡tinÄ—s taisyklÄ—s # NÄ—ra neiÅ¡reikÅ¡tinių taisyklių. # failų maiÅ¡os lentelÄ—s statistika: # Å i programa sukompiliuota %s sistemai Å i programa sukompiliuota %s (%s) sistemai Data %s uid = %d, gid = %d, mode = 0%o. (integruota) (nesvarbu) (pavadinimas gali bÅ«ti sutrumpintas) (nÄ—ra numatytojo tikslo) (nÄ—ra ~ iÅ¡plÄ—timo) (paieÅ¡kos kelias) failai, negalimybÄ—s negalimybÄ—s %lu aplankuose. kol kas.# Numatytoji reikÅ¡mÄ—, MAKEFILES, arba -include/sinclude „make“ failas# Taip pat sukuria:# Nepavyko atnaujinti.# Failas neegzistuoja.# Failas atnaujintas.# Failas nebuvo atnaujintas.# Failas labai senas.# NeiÅ¡reikÅ¡tinių taisyklių paieÅ¡ka atlikta.# NeiÅ¡reikÅ¡tinių taisyklių paieÅ¡ka neatlikta.# Paskutinį kartÄ… pakeista %s # Modifikacijos laikas niekada netikrintas.# Turi bÅ«ti atnaujinta (-q nustatyta).# SÄ—kmingai atnaujinta.# %s: negalÄ—jo bÅ«ti stat'intas. # Ne tikslas:%s%s: %s%s: %s%s: Ä®einama į nežinomÄ… aplankÄ… %s: IÅ¡einama iÅ¡ nežinomo aplanko %s: Laiko žymÄ— už rėžių; keiÄiama į %s%s: neleistinas parametras -- %c %s: netaisyklingas argumentas -- %c %s: parametrui reikia argumento -- %c %s: user %lu (real %lu), group %lu (real %lu) %s[%u]: Ä®einama į nežinomÄ… aplankÄ… %s[%u]: IÅ¡einama iÅ¡ nežinomo aplanko . Pabaiga. ŽadintuvasBlogas sisteminis kvietimasMagistralÄ—s klaidaVirÅ¡ytas CPU laiko limitasPratÄ™staNepavyko grįžti į pirminį aplankÄ….Dabartinis laikasPavojaus signalasEMT gaudyklÄ—VirÅ¡ytas failo dydžio limitasSlankaus kablelio koprocesorius neprieinamasSlankaus kablelio klaidaGalimas įvedimas/iÅ¡vedimasNeleistina instrukcijaInformacijos užklausaPertraukimasNutrauktaNeNÄ—ra tikslųNenurodyta tikslų ir nerasta „make“ failųElektros maitinimo sutrikimasIÅ¡eitaSkaitomi „make“ failai... Å alinami tarpiniai failai... PraneÅ¡kite apie klaidas adresu IÅ¡teklius prarastasSIGPHONESIGWINDSegmentacijos klaidaSustabdytaSustabdyta (signalas)Sustabdyta (tty įvedimas)Sustabdyta (tty iÅ¡vedimas)Atnaujinami tikslai... Atnaujinami „make“ failai.... Naudojimas: %s [argumentai] [tikslas] ... Langas pakeistasnegalimas tuÅ¡Äias failo pavadinimastuÅ¡Äias kintamojo pavadinimasnetaisyklinga sÄ…lygos sintaksÄ—trÅ«ksta tikslo Å¡ablonokeli tikslo Å¡ablonainenežinomas signalasneterminuota nuoroda į kintamÄ…jįmake-4.3/po/LINGUAS0000644000175000017500000000014013611151230010645 00000000000000be bg cs da de es fi fr ga gl he hr id it ja ko lt nl pl pt pt_BR ru sr sv tr uk vi zh_CN zh_TW make-4.3/po/sr.po0000644000175000017500000020525213611136531010626 00000000000000# Serbian translation for make. # Copyright (C) 2016 Free Software Foundation, Inc. # This file is distributed under the same license as the make package. # МироÑлав Ðиколић , 2016. msgid "" msgstr "" "Project-Id-Version: make-4.2.1\n" "Report-Msgid-Bugs-To: bug-make@gnu.org\n" "POT-Creation-Date: 2020-01-19 15:34-0500\n" "PO-Revision-Date: 2016-12-17 12:09+0200\n" "Last-Translator: МироÑлав Ðиколић \n" "Language-Team: Serbian <(nothing)>\n" "Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\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" #: src/ar.c:46 #, c-format msgid "attempt to use unsupported feature: '%s'" msgstr "покушавам да кориÑтим неподржану функцију: „%s“" #: src/ar.c:123 #, c-format msgid "touch archive member is not available on VMS" msgstr "члан архиве додирника није доÑтупан на ВМС-у" #: src/ar.c:147 #, c-format msgid "touch: Archive '%s' does not exist" msgstr "touch: Ðрхива „%s“ не поÑтоји" #: src/ar.c:150 #, c-format msgid "touch: '%s' is not a valid archive" msgstr "touch: „%s“ није иÑправна архива" #: src/ar.c:157 #, c-format msgid "touch: Member '%s' does not exist in '%s'" msgstr "touch: Члан „%s“ не поÑтоји у „%s“" #: src/ar.c:164 #, c-format msgid "touch: Bad return code from ar_member_touch on '%s'" msgstr "touch: Лош повратни код из „ar_member_touch“ на „%s“" #: src/arscan.c:130 #, c-format msgid "lbr$set_module() failed to extract module info, status = %d" msgstr "" "Функција „lbr$set_module()“ није уÑпела да извуче податке модула, Ñтање = %d" #: src/arscan.c:236 #, c-format msgid "lbr$ini_control() failed with status = %d" msgstr "Функција „lbr$ini_control()“ није уÑпела Ñа Ñтањем = %d" #: src/arscan.c:261 #, c-format msgid "unable to open library '%s' to lookup member status %d" msgstr "не могу да отворим библиотеку „%s“ да потражим Ñтање члана %d" #: src/arscan.c:944 #, c-format msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n" msgstr "Члан „%s“%s: %ld бајта при %ld (%ld).\n" #: src/arscan.c:945 msgid " (name might be truncated)" msgstr " (назив је можда Ñкраћен)" #: src/arscan.c:947 #, c-format msgid " Date %s" msgstr " Датум %s" #: src/arscan.c:948 #, c-format msgid " uid = %d, gid = %d, mode = 0%o.\n" msgstr " уид = %d, гид = %d, режим = 0%o.\n" #: src/commands.c:403 #, c-format msgid "Recipe has too many lines (%ud)" msgstr "Рецепт има превише редова (%ud)" #: src/commands.c:504 msgid "*** Break.\n" msgstr "*** Прекид.\n" #: src/commands.c:628 #, c-format msgid "*** [%s] Archive member '%s' may be bogus; not deleted" msgstr "*** [%s] Члан архиве „%s“ је можда лажан; није обриÑан" #: src/commands.c:632 #, c-format msgid "*** Archive member '%s' may be bogus; not deleted" msgstr "*** Члан архиве „%s“ је можда лажан; није обриÑан" #: src/commands.c:646 #, c-format msgid "*** [%s] Deleting file '%s'" msgstr "*** [%s] Бришем датотеку „%s“" #: src/commands.c:648 #, c-format msgid "*** Deleting file '%s'" msgstr "*** Бришем датотеку „%s“" #: src/commands.c:684 msgid "# recipe to execute" msgstr "# рецепт за извршавање" #: src/commands.c:687 msgid " (built-in):" msgstr " (уграђено):" #: src/commands.c:689 #, c-format msgid " (from '%s', line %lu):\n" msgstr " (од „%s“, %lu. ред):\n" #: src/dir.c:1073 msgid "" "\n" "# Directories\n" msgstr "" "\n" "# Директоријуми\n" #: src/dir.c:1085 #, c-format msgid "# %s: could not be stat'd.\n" msgstr "# %s: не могу да добавим податке.\n" #: src/dir.c:1089 msgid "# %s (key %s, mtime %I64u): could not be opened.\n" msgstr "# %s (кључ „%s“, м-време %I64u): не могу да отворим.\n" #: src/dir.c:1094 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n" msgstr "# %s (уређај %d, и-чвор [%d,%d,%d]): не могу да отворим.\n" #: src/dir.c:1099 #, c-format msgid "# %s (device %ld, inode %ld): could not be opened.\n" msgstr "# %s (уређај %ld, и-чвор %ld): не могу да отворим.\n" #: src/dir.c:1126 msgid "# %s (key %s, mtime %I64u): " msgstr "# %s (кључ „%s“, м-време %I64u): " #: src/dir.c:1131 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): " msgstr "# %s (уређај %d, и-чвор [%d,%d,%d]): " #: src/dir.c:1136 #, c-format msgid "# %s (device %ld, inode %ld): " msgstr "# %s (уређај %ld, и-чвор %ld): " #: src/dir.c:1142 src/dir.c:1163 msgid "No" msgstr "Ðе" #: src/dir.c:1145 src/dir.c:1166 msgid " files, " msgstr " датотеке, " #: src/dir.c:1147 src/dir.c:1168 msgid "no" msgstr "не" #: src/dir.c:1150 msgid " impossibilities" msgstr " немогућноÑти" #: src/dir.c:1154 msgid " so far." msgstr " за Ñада." #: src/dir.c:1171 #, c-format msgid " impossibilities in %lu directories.\n" msgstr " немогућноÑти у %lu директоријума.\n" #: src/expand.c:125 #, c-format msgid "Recursive variable '%s' references itself (eventually)" msgstr "ДубинÑка променљива „%s“ упућује на Ñебе (евентуално)" #: src/expand.c:271 #, c-format msgid "unterminated variable reference" msgstr "недовршена упута променљиве" #: src/file.c:278 #, c-format msgid "Recipe was specified for file '%s' at %s:%lu," msgstr "Рецепт је наведен за датотеку „%s“ у %s:%lu," #: src/file.c:283 #, c-format msgid "Recipe for file '%s' was found by implicit rule search," msgstr "Ðашао Ñам рецепт за датотеку „%s“ изричитом претрагом правила," #: src/file.c:287 #, c-format msgid "but '%s' is now considered the same file as '%s'." msgstr "али Ñе „%s“ Ñада Ñматра иÑтом датотеком као „%s“." #: src/file.c:290 #, c-format msgid "Recipe for '%s' will be ignored in favor of the one for '%s'." msgstr "Рецепат за „%s“ биће замењен у кориÑÑ‚ једног за „%s“." #: src/file.c:310 #, c-format msgid "can't rename single-colon '%s' to double-colon '%s'" msgstr "не могу да преименујем једну двотачку „%s“ у две двотачке „%s“" #: src/file.c:316 #, c-format msgid "can't rename double-colon '%s' to single-colon '%s'" msgstr "не могу да преименујем две двотачке „%s“ у једну двотачку „%s“" #: src/file.c:408 #, c-format msgid "*** Deleting intermediate file '%s'" msgstr "*** Бришем поÑредничку датотеку „%s“" #: src/file.c:412 #, c-format msgid "Removing intermediate files...\n" msgstr "Уклањам поÑредничке датотеке...\n" #: src/file.c:872 msgid "Current time" msgstr "Тренутно време" #: src/file.c:876 #, c-format msgid "%s: Timestamp out of range; substituting %s" msgstr "%s: ВременÑка ознака је ван опÑега; замењујем „%s“" #: src/file.c:1016 msgid "# Not a target:" msgstr "# Ðије мета:" #: src/file.c:1021 msgid "# Precious file (prerequisite of .PRECIOUS)." msgstr "# Драгоцена датотека (предуÑлов од „.PRECIOUS“)." #: src/file.c:1023 msgid "# Phony target (prerequisite of .PHONY)." msgstr "# Лажна мета (предуÑлов од „.PHONY“)." #: src/file.c:1025 msgid "# Command line target." msgstr "# Мета линије наредби." #: src/file.c:1027 msgid "# A default, MAKEFILES, or -include/sinclude makefile." msgstr "# ОÑновно, „MAKEFILES“, или „-include/sinclude makefile“." #: src/file.c:1029 msgid "# Builtin rule" msgstr "# Правило изградње" #: src/file.c:1031 msgid "# Implicit rule search has been done." msgstr "# Претрага по изричитом правилу је обављена." #: src/file.c:1032 msgid "# Implicit rule search has not been done." msgstr "# Претрага по изричитом правилу није обављена." #: src/file.c:1034 #, c-format msgid "# Implicit/static pattern stem: '%s'\n" msgstr "# Изричити/Ñтатички корен шаблона: '%s'\n" #: src/file.c:1036 msgid "# File is an intermediate prerequisite." msgstr "# Датотека је прелазни предуÑлов." #: src/file.c:1040 msgid "# Also makes:" msgstr "# Такође твори:" #: src/file.c:1046 msgid "# Modification time never checked." msgstr "# Време измене није никада проверено." #: src/file.c:1048 msgid "# File does not exist." msgstr "# Датотека не поÑтоји." #: src/file.c:1050 msgid "# File is very old." msgstr "# Датотека је превише Ñтара." #: src/file.c:1055 #, c-format msgid "# Last modified %s\n" msgstr "# ПоÑледња измена „%s“\n" #: src/file.c:1058 msgid "# File has been updated." msgstr "# Датотека је оÑвежена." #: src/file.c:1058 msgid "# File has not been updated." msgstr "# Датотека није оÑвежена." #: src/file.c:1062 msgid "# Recipe currently running (THIS IS A BUG)." msgstr "# Рецепт тренутно ради (ОВО ЈЕ ГРЕШКÐ)." #: src/file.c:1065 msgid "# Dependencies recipe running (THIS IS A BUG)." msgstr "# Рецепт завиÑноÑти ради (ОВО ЈЕ ГРЕШКÐ)." #: src/file.c:1074 msgid "# Successfully updated." msgstr "# УÑпешно је оÑвежена." #: src/file.c:1078 msgid "# Needs to be updated (-q is set)." msgstr "# Треба да Ñе оÑвежи („-q“ је подешено)." #: src/file.c:1081 msgid "# Failed to be updated." msgstr "# Ðије уÑпела да Ñе оÑвежи." #: src/file.c:1086 msgid "# Invalid value in 'command_state' member!" msgstr "# ÐеиÑправна вередноÑÑ‚ у члану „command_state“!" #: src/file.c:1105 msgid "" "\n" "# Files" msgstr "" "\n" "# Датотеке" #: src/file.c:1109 msgid "" "\n" "# files hash-table stats:\n" "# " msgstr "" "\n" "# ÑтатиÑтика хеш-табеле датотека:\n" "# " #: src/file.c:1119 #, c-format msgid "%s: Field '%s' not cached: %s" msgstr "%s: Поље „%s“ није у оÑтави: %s" #: src/function.c:794 msgid "non-numeric first argument to 'word' function" msgstr "не-бројевни први аргумент за функцију „word“" #: src/function.c:799 #, c-format msgid "first argument to 'word' function must be greater than 0" msgstr "први аргумент за функцију „word“ мора бити број већи од 0" #: src/function.c:819 msgid "non-numeric first argument to 'wordlist' function" msgstr "не-бројевни први аргумент за функцију „wordlist“" #: src/function.c:821 msgid "non-numeric second argument to 'wordlist' function" msgstr "не-бројевни други аргумент за функцију „wordlist“" #: src/function.c:1533 #, c-format msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n" msgstr "windows32_openpipe: „DuplicateHandle(In)“ није уÑпело (e=%ld)\n" #: src/function.c:1557 #, c-format msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n" msgstr "windows32_openpipe: „DuplicateHandle(Err)“ није уÑпело (e=%ld)\n" #: src/function.c:1564 #, c-format msgid "CreatePipe() failed (e=%ld)\n" msgstr "„CreatePipe()“ није уÑпело (e=%ld)\n" #: src/function.c:1572 #, c-format msgid "windows32_openpipe(): process_init_fd() failed\n" msgstr "windows32_openpipe(): „process_init_fd()“ није уÑпело\n" #: src/function.c:1857 #, c-format msgid "Cleaning up temporary batch file %s\n" msgstr "Бришем привремену датотеку групе „%s“\n" #: src/function.c:2230 src/function.c:2255 #, c-format msgid "file: missing filename" msgstr "file: недоÑтаје назив датотеке" #: src/function.c:2234 src/function.c:2265 #, c-format msgid "open: %s: %s" msgstr "open: %s: %s" #: src/function.c:2242 #, c-format msgid "write: %s: %s" msgstr "write: %s: %s" #: src/function.c:2245 src/function.c:2282 #, c-format msgid "close: %s: %s" msgstr "close: %s: %s" #: src/function.c:2258 #, c-format msgid "file: too many arguments" msgstr "file: превише аргумената" # #: src/function.c:2277 #, c-format msgid "read: %s: %s" msgstr "read: %s: %s" #: src/function.c:2290 #, c-format msgid "file: invalid file operation: %s" msgstr "file: неиÑправна радња датотеке: %s" #: src/function.c:2405 #, c-format msgid "insufficient number of arguments (%d) to function '%s'" msgstr "недовољан број аргумената (%d) за функцију „%s“" #: src/function.c:2417 #, c-format msgid "unimplemented on this platform: function '%s'" msgstr "није примењено на овој платформи: функција „%s“" #: src/function.c:2483 #, c-format msgid "unterminated call to function '%s': missing '%c'" msgstr "недовршен позив за функцију „%s“: недоÑтаје „%c“" #: src/function.c:2667 #, c-format msgid "Empty function name" msgstr "Празан назив функције" #: src/function.c:2669 #, c-format msgid "Invalid function name: %s" msgstr "ÐеиÑправан назив функције: %s" #: src/function.c:2671 #, c-format msgid "Function name too long: %s" msgstr "Ðазив функције је предуг: %s" #: src/function.c:2674 #, c-format msgid "Invalid minimum argument count (%u) for function %s" msgstr "ÐеиÑправан најмањи број аргумената (%u) за функцију „%s“" #: src/function.c:2677 #, c-format msgid "Invalid maximum argument count (%u) for function %s" msgstr "ÐеиÑправан највећи број аргумената (%u) за функцију „%s“" #: src/getopt.c:659 #, c-format msgid "%s: option '%s' is ambiguous\n" msgstr "%s: опција „%s“ је нејаÑна\n" #: src/getopt.c:683 #, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s: опција „--%s“ не дозвољава аргумент\n" #: src/getopt.c:688 #, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s: опција „%c%s“ не дозвољава аргумент\n" #: src/getopt.c:705 src/getopt.c:878 #, c-format msgid "%s: option '%s' requires an argument\n" msgstr "%s: опција „%s“ захтева аргумент\n" #: src/getopt.c:734 #, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s: непозната опција „--%s“\n" #: src/getopt.c:738 #, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s: непозната опција „%c%s“\n" #: src/getopt.c:764 #, c-format msgid "%s: illegal option -- %c\n" msgstr "%s: неиÑправна опција -- %c\n" #: src/getopt.c:767 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s: неиÑправна опција -- %c\n" #: src/getopt.c:797 src/getopt.c:927 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: опција захтева аргумент -- %c\n" #: src/getopt.c:844 #, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s: опција „-W %s“ је нејаÑна\n" #: src/getopt.c:862 #, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s: опција „-W %s“ не дозвољава аргумент\n" #: src/guile.c:58 #, c-format msgid "guile: Expanding '%s'\n" msgstr "guile: Проширујем „%s“\n" #: src/guile.c:74 #, c-format msgid "guile: Evaluating '%s'\n" msgstr "guile: Процењујем „%s“\n" #: src/hash.c:50 #, c-format msgid "can't allocate %lu bytes for hash table: memory exhausted" msgstr "не могу да доделим %lu бајта за хеш табелу: меморија је потрошена" #: src/hash.c:280 #, fuzzy, c-format msgid "Load=%lu/%lu=%.0f%%, " msgstr "Учитавам=%ld/%ld=%.0f%%, " #: src/hash.c:282 #, fuzzy, c-format msgid "Rehash=%u, " msgstr "Поново хеширам=%d, " #: src/hash.c:283 #, fuzzy, c-format msgid "Collisions=%lu/%lu=%.0f%%" msgstr "Сукоби=%ld/%ld=%.0f%%" #: src/implicit.c:38 #, c-format msgid "Looking for an implicit rule for '%s'.\n" msgstr "Тражим изричито правило за „%s“.\n" #: src/implicit.c:54 #, c-format msgid "Looking for archive-member implicit rule for '%s'.\n" msgstr "Тражим изричито правило члана архиве за „%s“.\n" #: src/implicit.c:311 #, c-format msgid "Avoiding implicit rule recursion.\n" msgstr "Избегавам дубачење изричитог правила.\n" #: src/implicit.c:484 #, fuzzy, c-format msgid "Stem too long: '%s%.*s'.\n" msgstr "Корен је предуг: „%.*s“.\n" #: src/implicit.c:490 #, c-format msgid "Trying pattern rule with stem '%.*s'.\n" msgstr "Пробам правило шаблона Ñа кореном „%.*s“.\n" #: src/implicit.c:717 #, c-format msgid "Rejecting impossible rule prerequisite '%s'.\n" msgstr "Одбацујем немогућ предуÑлов правила „%s“.\n" #: src/implicit.c:718 #, c-format msgid "Rejecting impossible implicit prerequisite '%s'.\n" msgstr "Одбацујем немогућ изричити предуÑлов „%s“.\n" #: src/implicit.c:732 #, c-format msgid "Trying rule prerequisite '%s'.\n" msgstr "Покушавам Ñа предуÑловом правила „%s“.\n" #: src/implicit.c:733 #, c-format msgid "Trying implicit prerequisite '%s'.\n" msgstr "Покушавам изричити предуÑлов „%s“.\n" #: src/implicit.c:772 #, c-format msgid "Found prerequisite '%s' as VPATH '%s'\n" msgstr "Ðађох предуÑлов „%s“ као „VPATH“ „%s“\n" #: src/implicit.c:786 #, c-format msgid "Looking for a rule with intermediate file '%s'.\n" msgstr "Тражим правило Ñа Ñредњом датотеком „%s“.\n" #: src/job.c:370 msgid "Cannot create a temporary file\n" msgstr "Ðе могу да направим привремену датотеку\n" #: src/job.c:548 msgid " (core dumped)" msgstr " (језгрени избачај)" #: src/job.c:553 msgid " (ignored)" msgstr " (занемарено)" #: src/job.c:557 src/job.c:1892 msgid "" msgstr "<уграђено>" #: src/job.c:573 #, c-format msgid "%s[%s: %s] Error %d%s" msgstr "%s[%s: %s] грешка %d%s" #: src/job.c:662 #, c-format msgid "*** Waiting for unfinished jobs...." msgstr "*** Чекам на недовршене поÑлове...." #: src/job.c:704 #, c-format msgid "Live child %p (%s) PID %s %s\n" msgstr "Ðктиван Ð¿Ð¾Ð´Ð¿Ñ€Ð¾Ñ†ÐµÑ â€ž%p“ (%s) ПИД %s %s\n" #: src/job.c:706 src/job.c:900 src/job.c:1072 src/job.c:1644 #, c-format msgid " (remote)" msgstr " (удаљено)" #: src/job.c:898 #, c-format msgid "Reaping winning child %p PID %s %s\n" msgstr "ПочиÑтио Ñам уÑпели Ð¿Ð¾Ð´Ð¿Ñ€Ð¾Ñ†ÐµÑ â€ž%p“ ПИД %s %s\n" #: src/job.c:899 #, c-format msgid "Reaping losing child %p PID %s %s\n" msgstr "ПочиÑтио Ñам неуÑпели Ð¿Ð¾Ð´Ð¿Ñ€Ð¾Ñ†ÐµÑ â€ž%p“ ПИД %s %s\n" #: src/job.c:950 #, c-format msgid "Cleaning up temp batch file %s\n" msgstr "Бришем привремену датотеку групе „%s“\n" #: src/job.c:956 #, c-format msgid "Cleaning up temp batch file %s failed (%d)\n" msgstr "ÐиÑам уÑпео да обришем привремену датотеку групе „%s“ (%d)\n" #: src/job.c:1071 #, c-format msgid "Removing child %p PID %s%s from chain.\n" msgstr "Уклањам Ð¿Ð¾Ð´Ð¿Ñ€Ð¾Ñ†ÐµÑ â€ž%p“ ПИД %s%s из ланца.\n" #: src/job.c:1120 #, c-format msgid "Released token for child %p (%s).\n" msgstr "Отпуштен прÑтен за Ð¿Ð¾Ð´Ð¿Ñ€Ð¾Ñ†ÐµÑ â€ž%p“ (%s).\n" #: src/job.c:1575 src/job.c:2487 #, c-format msgid "process_easy() failed to launch process (e=%ld)\n" msgstr "Функција „process_easy()“ није уÑпела да покрене Ð¿Ñ€Ð¾Ñ†ÐµÑ (e=%ld)\n" #: src/job.c:1579 src/job.c:2491 #, c-format msgid "" "\n" "Counted %d args in failed launch\n" msgstr "" "\n" "Избројах %d аргумента у неуÑпелом покретању\n" #: src/job.c:1642 #, c-format msgid "Putting child %p (%s) PID %s%s on the chain.\n" msgstr "Стављам Ð¿Ð¾Ð´Ð¿Ñ€Ð¾Ñ†ÐµÑ â€ž%p“ (%s) ПИД %s%s у ланац.\n" #: src/job.c:1875 #, c-format msgid "Obtained token for child %p (%s).\n" msgstr "Добијен прÑтен за Ð¿Ð¾Ð´Ð¿Ñ€Ð¾Ñ†ÐµÑ â€ž%p“ (%s).\n" #: src/job.c:1902 #, c-format msgid "%s: target '%s' does not exist" msgstr "%s: мета „%s“ не поÑтоји" #: src/job.c:1905 #, c-format msgid "%s: update target '%s' due to: %s" msgstr "%s: оÑвежавам мету „%s“ уÑлед: %s" #: src/job.c:2108 #, c-format msgid "cannot enforce load limits on this operating system" msgstr "не могу да Ñпроведем ограничења оптерећења на овом оперативном ÑиÑтему" #: src/job.c:2110 msgid "cannot enforce load limit: " msgstr "не могу да Ñпроведем ограничење оптерећења: " #: src/job.c:2200 #, c-format msgid "no more file handles: could not duplicate stdin\n" msgstr "нема више ручки датотеке: не могу да удвоÑтручим Ñтандардни улаз\n" #: src/job.c:2212 #, c-format msgid "no more file handles: could not duplicate stdout\n" msgstr "нема више ручки датотеке: не могу да удвоÑтручим Ñтандардни излаз\n" #: src/job.c:2226 #, c-format msgid "no more file handles: could not duplicate stderr\n" msgstr "нема више ручки датотеке: не могу да удвоÑтручим Ñтандардну грешку\n" #: src/job.c:2241 #, c-format msgid "Could not restore stdin\n" msgstr "Ðе могу да повратим Ñтандардни улаз\n" #: src/job.c:2249 #, c-format msgid "Could not restore stdout\n" msgstr "Ðе могу да повратим Ñтандардни излаз\n" #: src/job.c:2257 #, c-format msgid "Could not restore stderr\n" msgstr "Ðе могу да повратим Ñтандардну грешку\n" #: src/job.c:2520 #, c-format msgid "make reaped child pid %s, still waiting for pid %s\n" msgstr "мејк је почиÑтио Ð¿Ð¾Ð´Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñа пид-ом %s, још увек чекам на пид %s\n" #: src/job.c:2623 #, c-format msgid "spawnvpe: environment space might be exhausted" msgstr "spawnvpe: можда је потрошен проÑтор окружења" #: src/job.c:2862 #, c-format msgid "$SHELL changed (was '%s', now '%s')\n" msgstr "„$SHELL“ је промењена (беше „%s“, Ñада је „%s“)\n" #: src/job.c:3300 src/job.c:3485 #, c-format msgid "Creating temporary batch file %s\n" msgstr "Правим привремену датотеку групе „%s“\n" #: src/job.c:3308 #, c-format msgid "" "Batch file contents:\n" "\t@echo off\n" msgstr "" "Садржај датотеке групе:\n" "\t@echo off\n" #: src/job.c:3497 #, c-format msgid "" "Batch file contents:%s\n" "\t%s\n" msgstr "" "Садржај датотеке групе:%s\n" "\t%s\n" #: src/job.c:3605 #, c-format msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n" msgstr "%s (%d. ред) Лош контекÑÑ‚ шкољке (!unixy && !batch_mode_shell)\n" #: src/load.c:60 #, c-format msgid "Failed to open global symbol table: %s" msgstr "ÐиÑам уÑпео да отворим општу табелу Ñимбола: %s" #: src/load.c:97 #, c-format msgid "Loaded object %s is not declared to be GPL compatible" msgstr "Учитани објекат „%s“ није проглашен да је ÑаглаÑан Ñа ОЈЛ-ом" #: src/load.c:104 #, c-format msgid "Failed to load symbol %s from %s: %s" msgstr "ÐиÑам уÑпео да учитам Ñимбол „%s“ из „%s“: %s" #: src/load.c:149 #, c-format msgid "Empty symbol name for load: %s" msgstr "Празан назив Ñимбола за учитано: „%s“" #: src/load.c:204 #, c-format msgid "Loading symbol %s from %s\n" msgstr "Учитавам Ñимбол „%s“ из „%s“\n" #: src/load.c:256 #, c-format msgid "The 'load' operation is not supported on this platform." msgstr "Радња „load“ није подржана на овој платформи." #: src/main.c:335 msgid "Options:\n" msgstr "Опције:\n" #: src/main.c:336 msgid " -b, -m Ignored for compatibility.\n" msgstr " -b, -m Занемарено зарад ÑаглаÑноÑти.\n" #: src/main.c:338 msgid " -B, --always-make Unconditionally make all targets.\n" msgstr " -B, --always-make БезуÑловно одрађује Ñве мете.\n" #: src/main.c:340 msgid "" " -C DIRECTORY, --directory=DIRECTORY\n" " Change to DIRECTORY before doing anything.\n" msgstr "" " -C ДИР, --directory=ДИР\n" " Прелази у ДИРЕКТОРИЈУМ пре него што било шта " "уради.\n" #: src/main.c:343 msgid " -d Print lots of debugging information.\n" msgstr "" " -d ИÑпиÑује доÑта података за уклањање грешака.\n" #: src/main.c:345 msgid "" " --debug[=FLAGS] Print various types of debugging information.\n" msgstr "" " --debug[=ЗÐСТÐВИЦЕ] ИÑпиÑује разне врÑте података за уклањање " "грешака.\n" #: src/main.c:347 msgid "" " -e, --environment-overrides\n" " Environment variables override makefiles.\n" msgstr "" " -e, --environment-overrides\n" " Променљиве окружења превазилазе " "мејк_датотеке.\n" #: src/main.c:350 #, fuzzy msgid "" " -E STRING, --eval=STRING Evaluate STRING as a makefile statement.\n" msgstr "" " --eval=ÐИСКРПроцењује ÐИСКУ као изјаву мејк_датотеке.\n" #: src/main.c:352 msgid "" " -f FILE, --file=FILE, --makefile=FILE\n" " Read FILE as a makefile.\n" msgstr "" " -f ДТТКÐ, --file=ДТТКÐ, --makefile=ДТТКÐ\n" " Чита ДÐТОТЕКУ као мејк_датотеку.\n" #: src/main.c:355 msgid " -h, --help Print this message and exit.\n" msgstr " -h, --help Приказује ову помоћ и излази.\n" #: src/main.c:357 msgid " -i, --ignore-errors Ignore errors from recipes.\n" msgstr " -i, --ignore-errors Занемарује грешке из рецепата.\n" #: src/main.c:359 msgid "" " -I DIRECTORY, --include-dir=DIRECTORY\n" " Search DIRECTORY for included makefiles.\n" msgstr "" " -I ДИР, --include-dir=ДИР\n" " Тражи у ДИРЕКТОРИЈУМУ укључене мејк_датотеке.\n" #: src/main.c:362 msgid "" " -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no " "arg.\n" msgstr "" " -j [Бр.], --jobs[=Бр.] Допушта БРОЈ поÑла одједном; беÑконачан број " "поÑлова без аргумената.\n" #: src/main.c:364 msgid "" " -k, --keep-going Keep going when some targets can't be made.\n" msgstr "" " -k, --keep-going ÐаÑтавља и даље када неке мете не могу бити " "одрађене.\n" #: src/main.c:366 msgid "" " -l [N], --load-average[=N], --max-load[=N]\n" " Don't start multiple jobs unless load is below " "N.\n" msgstr "" " -l [Бр.], --load-average[=Бр.], --max-load[=Бр.]\n" " Ðе започиње више поÑлова оÑим ако оптерећење " "није иÑпод БРОЈÐ.\n" #: src/main.c:369 msgid "" " -L, --check-symlink-times Use the latest mtime between symlinks and " "target.\n" msgstr "" " -L, --check-symlink-times КориÑти поÑледње м-време између Ñимболичких " "веза и мете.\n" #: src/main.c:371 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" #: src/main.c:374 msgid "" " -o FILE, --old-file=FILE, --assume-old=FILE\n" " Consider FILE to be very old and don't remake " "it.\n" msgstr "" " -o ДТТКÐ, --old-file=ДТТКÐ, --assume-old=ДТТКÐ\n" " Сматра да је ДÐТОТЕКРврло Ñтара и не одрађује " "је.\n" #: src/main.c:377 msgid "" " -O[TYPE], --output-sync[=TYPE]\n" " Synchronize output of parallel jobs by TYPE.\n" msgstr "" " -O[ВРСТÐ], --output-sync[=ВРСТÐ]\n" " УÑаглашава излаз паралелних поÑлова ВРСТОМ.\n" #: src/main.c:380 msgid " -p, --print-data-base Print make's internal database.\n" msgstr "" " -p, --print-data-base ИÑпиÑује унутрашњу базу података мејка.\n" #: src/main.c:382 msgid "" " -q, --question Run no recipe; exit status says if up to " "date.\n" msgstr "" " -q, --question Ðе покреће ниједан рецепт; излазно Ñтање " "говори да ли је оÑвежен.\n" #: src/main.c:384 msgid " -r, --no-builtin-rules Disable the built-in implicit rules.\n" msgstr " -r, --no-builtin-rules ИÑкључује уграђена изричита правила.\n" #: src/main.c:386 msgid " -R, --no-builtin-variables Disable the built-in variable settings.\n" msgstr "" " -R, --no-builtin-variables ИÑкључује уграђена подешавања променљиве.\n" #: src/main.c:388 msgid " -s, --silent, --quiet Don't echo recipes.\n" msgstr " -s, --silent, --quiet Ðе приказује рецепте.\n" #: src/main.c:390 #, fuzzy msgid " --no-silent Echo recipes (disable --silent mode).\n" msgstr "" " -q, --question Ðе покреће ниједан рецепт; излазно Ñтање " "говори да ли је оÑвежен.\n" #: src/main.c:392 msgid "" " -S, --no-keep-going, --stop\n" " Turns off -k.\n" msgstr "" " -S, --no-keep-going, --stop\n" " ИÑкључује „-k“.\n" #: src/main.c:395 msgid " -t, --touch Touch targets instead of remaking them.\n" msgstr "" " -t, --touch Додирује мете умеÑто да их поново одрађује.\n" #: src/main.c:397 msgid " --trace Print tracing information.\n" msgstr " --trace ИÑпиÑује податке о праћењу.\n" #: src/main.c:399 msgid "" " -v, --version Print the version number of make and exit.\n" msgstr " -v, --version ИÑпиÑује издање програма и излази.\n" #: src/main.c:401 msgid " -w, --print-directory Print the current directory.\n" msgstr " -w, --print-directory ИÑпиÑује тренутни директоријум.\n" #: src/main.c:403 msgid "" " --no-print-directory Turn off -w, even if it was turned on " "implicitly.\n" msgstr "" " --no-print-directory ИÑкључује „-w“, чак и ако је изричито " "укључена.\n" #: src/main.c:405 msgid "" " -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n" " Consider FILE to be infinitely new.\n" msgstr "" " -W ДТТКÐ, --what-if=ДТТКÐ, --new-file=ДТТКÐ, --assume-new=ДТТКÐ\n" " Сматра да је ДÐТОТЕКРбеÑконачно нова.\n" #: src/main.c:408 msgid "" " --warn-undefined-variables Warn when an undefined variable is " "referenced.\n" msgstr "" " --warn-undefined-variables Упозорава када Ñе упућује на неодређену " "променљиву.\n" #: src/main.c:671 #, c-format msgid "empty string invalid as file name" msgstr "празна ниÑка је неиÑправна као назив датотеке" #: src/main.c:754 #, c-format msgid "unknown debug level specification '%s'" msgstr "непозната одредба нивоа прочишћавања „%s“" #: src/main.c:794 #, c-format msgid "unknown output-sync type '%s'" msgstr "непозната врÑта уÑклађивања излаза „%s“" #: src/main.c:849 #, c-format msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n" msgstr "%s: Добих прекид/изузетак (код = 0x%lx, адреÑа = 0x%p)\n" #: src/main.c:856 #, c-format msgid "" "\n" "Unhandled exception filter called from program %s\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" msgstr "" "\n" "Ðеобрадив филтер изузеткаје позван из програма „%s“\n" "Код изузетка = %lx\n" "ЗаÑтавице изузетка = %lx\n" "ÐдреÑа изузетка = 0x%p\n" #: src/main.c:864 #, c-format msgid "Access violation: write operation at address 0x%p\n" msgstr "Повреда приÑтупа: радња пиÑања на адреÑи 0x%p\n" #: src/main.c:865 #, c-format msgid "Access violation: read operation at address 0x%p\n" msgstr "Повреда приÑтупа: радња читања на адреÑи 0x%p\n" #: src/main.c:941 src/main.c:956 #, c-format msgid "find_and_set_shell() setting default_shell = %s\n" msgstr "Функција „нађи_и_подеÑи_шкољку()“ подешава „оÑновну_шкољку“ = %s\n" #: src/main.c:1009 #, c-format msgid "find_and_set_shell() path search set default_shell = %s\n" msgstr "" "Претрага путање „нађи_и_подеÑи_шкољку()“ подешава „оÑновну_шкољку“ = %s\n" #: src/main.c:1609 #, c-format msgid "" "warning: jobserver unavailable: using -j1. Add '+' to parent make rule." msgstr "" "упозорење: поÑлужитељ поÑла није доÑтупан: кориÑтим „-j1“. Додајте + да " "родитељ одреди правило." #: src/main.c:1617 #, fuzzy, c-format msgid "warning: -j%d forced in submake: resetting jobserver mode." msgstr "" "упозорење: „-jN“ је приÑиљено у Ñубмејку: иÑкључујем режим поÑлужитеља поÑла." #: src/main.c:1781 #, c-format msgid "Makefile from standard input specified twice." msgstr "Мејк_датотека Ñа Ñтандардног улаза је наведена два пута." #: src/main.c:1819 src/vmsjobs.c:1248 msgid "fopen (temporary file)" msgstr "отвори датотеку (привремена датотека)" #: src/main.c:1825 msgid "fwrite (temporary file)" msgstr "запиши датотеку (привремена датотека)" #: src/main.c:2004 #, fuzzy, c-format msgid "warning: -j%d forced in makefile: resetting jobserver mode." msgstr "" "упозорење: „-jN“ је приÑиљено у Ñубмејку: иÑкључујем режим поÑлужитеља поÑла." #: src/main.c:2068 #, c-format msgid "Parallel jobs (-j) are not supported on this platform." msgstr "Паралелни поÑлови (-j) ниÑу подржани на овој платформи." #: src/main.c:2069 #, c-format msgid "Resetting to single job (-j1) mode." msgstr "Враћам на режим једног поÑла (-j1) mode." #: src/main.c:2109 #, c-format msgid "Symbolic links not supported: disabling -L." msgstr "Симболичке везе ниÑу подржане: иÑкључујем „-L“." #: src/main.c:2190 #, c-format msgid "Updating makefiles....\n" msgstr "ОÑвежавам мејк_датотеке...\n" #: src/main.c:2226 #, c-format msgid "Makefile '%s' might loop; not remaking it.\n" msgstr "Мејк_датотека „%s“ Ñе можда понавља; неђу је поново одрадити.\n" #: src/main.c:2303 #, c-format msgid "Failed to remake makefile '%s'." msgstr "ÐиÑам уÑпео поново да одрадим мејк_датотеку „%s“." #: src/main.c:2323 #, c-format msgid "Included makefile '%s' was not found." msgstr "ÐиÑам нашао укључену мејк_датотеку „%s“." #: src/main.c:2328 #, c-format msgid "Makefile '%s' was not found" msgstr "ÐиÑам нашао мејк_датотеку „%s“" #: src/main.c:2394 #, c-format msgid "Couldn't change back to original directory." msgstr "Ðе могу да Ñе вратим у изворни директоријум." #: src/main.c:2402 #, c-format msgid "Re-executing[%u]:" msgstr "Поново-извршавам[%u]:" #: src/main.c:2522 msgid "unlink (temporary file): " msgstr "поништавам везу (привремена датотека): " #: src/main.c:2555 #, c-format msgid ".DEFAULT_GOAL contains more than one target" msgstr "„.DEFAULT_GOAL“ Ñадржи више од једне мете" #: src/main.c:2579 #, c-format msgid "No targets" msgstr "Ðема мета" #: src/main.c:2581 #, c-format msgid "No targets specified and no makefile found" msgstr "ÐиÑу наведене мете и ниÑам нашао мејк_датотеку" #: src/main.c:2586 #, c-format msgid "Updating goal targets....\n" msgstr "ОÑвежавам циљне мете...\n" #: src/main.c:2610 #, c-format msgid "warning: Clock skew detected. Your build may be incomplete." msgstr "" "упозорење: Откривен је проблем Ñа чаÑовником. Ваша изградња може бити " "недовршена." #: src/main.c:2804 #, c-format msgid "Usage: %s [options] [target] ...\n" msgstr "Употреба: %s [опције] [мета] ...\n" #: src/main.c:2810 #, c-format msgid "" "\n" "This program built for %s\n" msgstr "" "\n" "Овај програм је изграђен за „%s“\n" #: src/main.c:2812 #, c-format msgid "" "\n" "This program built for %s (%s)\n" msgstr "" "\n" "Овај програм је изграђен за „%s“ (%s)\n" #: src/main.c:2815 #, c-format msgid "Report bugs to \n" msgstr "Грешке пријавите на \n" #: src/main.c:2901 #, c-format msgid "the '%s%s' option requires a non-empty string argument" msgstr "Опција „%s%s“ захтева аргумент не-празне ниÑке" #: src/main.c:2965 #, c-format msgid "the '-%c' option requires a positive integer argument" msgstr "Опција „-%c“ захтева аргумент позитивног целог броја" #: src/main.c:3363 #, c-format msgid "%sBuilt for %s\n" msgstr "%sИзградња за „%s“\n" #: src/main.c:3365 #, c-format msgid "%sBuilt for %s (%s)\n" msgstr "%sИзградња за „%s“(%s)\n" #: src/main.c:3376 #, c-format msgid "" "%sLicense GPLv3+: GNU GPL version 3 or later \n" "%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Дозвола ОЈЛи3+: Гнуова ОЈЛ 3. издање или новије \n" "%sОво је Ñлободан Ñофтвер: можете Ñлободно да га мењате и раÑподељујете.\n" "%sÐема ÐИКÐКВЕ ГÐРÐÐЦИЈЕ, у Ñкалду Ñа законом.\n" #: src/main.c:3397 #, c-format msgid "" "\n" "# Make data base, printed on %s" msgstr "" "\n" "# База података мејка, штампана %s" #: src/main.c:3407 #, c-format msgid "" "\n" "# Finished Make data base on %s\n" msgstr "" "\n" "# База података мејка је завршена %s\n" #: src/misc.c:643 #, c-format msgid "%s: user %lu (real %lu), group %lu (real %lu)\n" msgstr "%s: кориÑник „%lu“ (Ñтварни „%lu“), група „%lu“ (Ñтварна „%lu“)\n" #: src/misc.c:664 msgid "Initialized access" msgstr "Покренут приÑтуп" #: src/misc.c:743 msgid "User access" msgstr "ПриÑтуп кориÑника" #: src/misc.c:791 msgid "Make access" msgstr "ПриÑтуп мејка" #: src/misc.c:825 msgid "Child access" msgstr "ПриÑтуп подпроцеÑа" #: src/output.c:97 #, c-format msgid "%s: Entering an unknown directory\n" msgstr "%s: Улазим у непознат директоријум\n" #: src/output.c:99 #, c-format msgid "%s: Leaving an unknown directory\n" msgstr "%s: Ðапуштам непознат директоријум\n" #: src/output.c:102 #, c-format msgid "%s: Entering directory '%s'\n" msgstr "%s: Улазим у директоријум „%s“\n" #: src/output.c:104 #, c-format msgid "%s: Leaving directory '%s'\n" msgstr "%s: Ðапуштам директоријум „%s“\n" #: src/output.c:108 #, c-format msgid "%s[%u]: Entering an unknown directory\n" msgstr "%s[%u]: Улазим у непознат директоријум\n" #: src/output.c:110 #, c-format msgid "%s[%u]: Leaving an unknown directory\n" msgstr "%s[%u]: Ðапуштам непознат директоријум\n" #: src/output.c:113 #, c-format msgid "%s[%u]: Entering directory '%s'\n" msgstr "%s[%u]: Улазим у директоријум „%s“\n" #: src/output.c:115 #, c-format msgid "%s[%u]: Leaving directory '%s'\n" msgstr "%s[%u]: Ðапуштам директоријум „%s“\n" #: src/output.c:442 src/output.c:444 #, c-format msgid "write error: stdout" msgstr "грешка пиÑања: Ñтандардни излаз" #: src/output.c:624 msgid ". Stop.\n" msgstr ". Стајем.\n" #: src/output.c:658 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" #: src/output.c:667 #, c-format msgid "%s: %s" msgstr "%s: %s" #: src/output.h:62 #, c-format msgid "-O[TYPE] (--output-sync[=TYPE]) is not configured for this build." msgstr "„-O[ВРСТÐ]“ (--output-sync[=ВРСТÐ]) није подешено за ову изградњу." #: src/posixos.c:90 msgid "creating jobs pipe" msgstr "Ñтварам Ñпојку поÑла" #: src/posixos.c:98 src/posixos.c:251 msgid "duping jobs pipe" msgstr "удвоÑтручавам Ñпојку поÑлова" #: src/posixos.c:104 msgid "init jobserver pipe" msgstr "почетна Ñпојка поÑлужитеља поÑла" #: src/posixos.c:119 #, c-format msgid "internal error: invalid --jobserver-auth string '%s'" msgstr "унутрашња грешка: неиÑправна „--jobserver-auth“ ниÑка „%s“" #: src/posixos.c:122 #, c-format msgid "Jobserver client (fds %d,%d)\n" msgstr "Клијент поÑлужитеља поÑла (опиÑници датотека %d,%d)\n" #: src/posixos.c:138 msgid "jobserver pipeline" msgstr "Ñпојни ред поÑлужитеља поÑла" #: src/posixos.c:186 msgid "write jobserver" msgstr "пишем поÑлужитеља поÑла" #: src/posixos.c:300 #, c-format msgid "job server shut down" msgstr "" #: src/posixos.c:303 msgid "pselect jobs pipe" msgstr "п-бира Ñпојку поÑлова" #: src/posixos.c:319 src/posixos.c:433 msgid "read jobs pipe" msgstr "читам Ñпојку поÑла" #: src/read.c:181 #, c-format msgid "Reading makefiles...\n" msgstr "Читам мејк_датотеке...\n" #: src/read.c:336 #, c-format msgid "Reading makefile '%s'" msgstr "Читам мејк_датотеку „%s“" #: src/read.c:338 #, c-format msgid " (no default goal)" msgstr " (нема оÑновног циља)" #: src/read.c:340 #, c-format msgid " (search path)" msgstr " (претражујем путању)" #: src/read.c:342 #, c-format msgid " (don't care)" msgstr " (не марим)" #: src/read.c:344 #, c-format msgid " (no ~ expansion)" msgstr " (нема ~ проширења)" #: src/read.c:655 #, c-format msgid "Skipping UTF-8 BOM in makefile '%s'\n" msgstr "ПреÑкачем УТФ-8 БОМ у мејк_датотеци „%s“\n" #: src/read.c:658 #, c-format msgid "Skipping UTF-8 BOM in makefile buffer\n" msgstr "ПреÑкачем УТФ-8 БОМ у међумеморији мејк_датотеке\n" #: src/read.c:787 #, c-format msgid "invalid syntax in conditional" msgstr "неиÑправна ÑинтакÑа у уÑлову" #: src/read.c:960 #, c-format msgid "%s: failed to load" msgstr "%s: ниÑам уÑпео да учитам" #: src/read.c:986 #, c-format msgid "recipe commences before first target" msgstr "рецепт долази пре прве мете" #: src/read.c:1035 #, c-format msgid "missing rule before recipe" msgstr "недоÑтаје правило пре рецепта" #: src/read.c:1136 #, c-format msgid "missing separator (did you mean TAB instead of 8 spaces?)" msgstr "недоÑтаје раздвајач (да ли Ñте миÑлили ТÐБУЛÐТОР умеÑто 8 размака?)" #: src/read.c:1138 #, c-format msgid "missing separator" msgstr "недоÑтаје раздвојник" #: src/read.c:1283 #, c-format msgid "missing target pattern" msgstr "недоÑтаје шаблон мете" #: src/read.c:1285 #, c-format msgid "multiple target patterns" msgstr "више шаблона мете" #: src/read.c:1289 #, c-format msgid "target pattern contains no '%%'" msgstr "шаблон мете не Ñадржи „%%“" #: src/read.c:1404 #, c-format msgid "missing 'endif'" msgstr "недоÑтаје „endif“" #: src/read.c:1443 src/read.c:1488 src/variable.c:1600 #, c-format msgid "empty variable name" msgstr "празан назив променљиве" #: src/read.c:1478 #, c-format msgid "extraneous text after 'define' directive" msgstr "Ñувишан текÑÑ‚ након директиве „define“" #: src/read.c:1503 #, c-format msgid "missing 'endef', unterminated 'define'" msgstr "недоÑтаје „endef“, неокончано „define“" #: src/read.c:1531 #, c-format msgid "extraneous text after 'endef' directive" msgstr "Ñувишан текÑÑ‚ након директиве „endef“" #: src/read.c:1603 #, c-format msgid "extraneous text after '%s' directive" msgstr "Ñувишан текÑÑ‚ након директиве „%s“" #: src/read.c:1604 #, c-format msgid "extraneous '%s'" msgstr "Ñувишно „%s“" #: src/read.c:1632 #, c-format msgid "only one 'else' per conditional" msgstr "Ñамо једно „else“ по уÑлову" #: src/read.c:1908 #, c-format msgid "Malformed target-specific variable definition" msgstr "Лоша одредница променљиве Ñпецифичне мети" #: src/read.c:1968 #, c-format msgid "prerequisites cannot be defined in recipes" msgstr "предуÑлови Ñе не могу одредити у рецептима" #: src/read.c:1986 #, c-format msgid "grouped targets must provide a recipe" msgstr "" #: src/read.c:2029 #, c-format msgid "mixed implicit and static pattern rules" msgstr "помешана правила изричитог и Ñтатичког шаблона" #: src/read.c:2052 #, c-format msgid "mixed implicit and normal rules" msgstr "помешана изричита и обична правила" #: src/read.c:2107 #, c-format msgid "target '%s' doesn't match the target pattern" msgstr "мета „%s“ не одговара шаблону мете" #: src/read.c:2122 src/read.c:2168 #, c-format msgid "target file '%s' has both : and :: entries" msgstr "датотека мете „%s“ има и : и :: уноÑе" #: src/read.c:2128 #, c-format msgid "target '%s' given more than once in the same rule" msgstr "мета „%s“ је дата више од једном у иÑтом правилу" #: src/read.c:2138 #, c-format msgid "warning: overriding recipe for target '%s'" msgstr "упозорење: препиÑујем рецепт за мету „%s“" #: src/read.c:2141 #, c-format msgid "warning: ignoring old recipe for target '%s'" msgstr "упозорење: занемарујем Ñтари рецепт за мету „%s“" #: src/read.c:2254 #, c-format msgid "*** mixed implicit and normal rules: deprecated syntax" msgstr "*** помешана изричита и обична правила: заÑтарела ÑинтакÑа" #: src/read.c:2271 #, fuzzy, c-format msgid "warning: overriding group membership for target '%s'" msgstr "упозорење: препиÑујем рецепт за мету „%s“" #: src/read.c:2636 #, c-format msgid "warning: NUL character seen; rest of line ignored" msgstr "упозорење: видех ÐИШТÐÐ’ÐРзнак; оÑтатак реда је занемарен" #: src/remake.c:226 #, c-format msgid "Nothing to be done for '%s'." msgstr "Ðишта неће бити урађено за „%s“." #: src/remake.c:227 #, c-format msgid "'%s' is up to date." msgstr "„%s“ је оÑвежено." #: src/remake.c:323 #, c-format msgid "Pruning file '%s'.\n" msgstr "ЧиÑтим датотеку „%s“.\n" #: src/remake.c:389 #, c-format msgid "%sNo rule to make target '%s', needed by '%s'%s" msgstr "%sÐема правила за одрађивање мете „%s“, треба га „%s“%s" #: src/remake.c:399 #, c-format msgid "%sNo rule to make target '%s'%s" msgstr "%sÐема правила за одрађивање мете „%s“%s" #: src/remake.c:425 #, c-format msgid "Considering target file '%s'.\n" msgstr "Разматрам датотеку мете „%s“.\n" #: src/remake.c:432 #, c-format msgid "Recently tried and failed to update file '%s'.\n" msgstr "Ðедавно Ñам покушао и ниÑам уÑпео да оÑвежим датотеку „%s“.\n" #: src/remake.c:444 #, c-format msgid "File '%s' was considered already.\n" msgstr "Датотека „%s“ је већ разматрана.\n" #: src/remake.c:454 #, c-format msgid "Still updating file '%s'.\n" msgstr "Још увек оÑвежавам датотеку „%s“.\n" #: src/remake.c:457 #, c-format msgid "Finished updating file '%s'.\n" msgstr "Завршио Ñам оÑвежавање датотеке „%s“.\n" #: src/remake.c:486 #, c-format msgid "File '%s' does not exist.\n" msgstr "Датотека „%s“ не поÑтоји.\n" #: src/remake.c:494 #, c-format msgid "" "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp" msgstr "" "*** Упозорење: „.LOW_RESOLUTION_TIME“ датотека „%s“ има виÑоку резолуцију " "временÑке ознаке" #: src/remake.c:507 src/remake.c:1039 #, c-format msgid "Found an implicit rule for '%s'.\n" msgstr "Ðађох изричито правило за „%s“.\n" #: src/remake.c:509 src/remake.c:1041 #, c-format msgid "No implicit rule found for '%s'.\n" msgstr "ÐиÑам нашао изричито правило за „%s“.\n" #: src/remake.c:515 #, c-format msgid "Using default recipe for '%s'.\n" msgstr "КориÑтим оÑновни рецепт за „%s“.\n" #: src/remake.c:549 src/remake.c:1088 #, c-format msgid "Circular %s <- %s dependency dropped." msgstr "Кружна „%s <— %s“ завиÑноÑÑ‚ је одбачена." #: src/remake.c:674 #, c-format msgid "Finished prerequisites of target file '%s'.\n" msgstr "Завршио Ñам предуÑлове датотеке мете „%s“.\n" #: src/remake.c:680 #, c-format msgid "The prerequisites of '%s' are being made.\n" msgstr "ПреудÑлови од „%s“ Ñу одрађени.\n" #: src/remake.c:694 #, c-format msgid "Giving up on target file '%s'.\n" msgstr "ОдуÑтајем над датотеком мете „%s“.\n" #: src/remake.c:699 #, c-format msgid "Target '%s' not remade because of errors." msgstr "Мета „%s“ није поново одрађена због грешака." #: src/remake.c:751 #, c-format msgid "Prerequisite '%s' is order-only for target '%s'.\n" msgstr "ПредуÑлов „%s“ је Ñамо по поретку за мету „%s“.\n" #: src/remake.c:756 #, c-format msgid "Prerequisite '%s' of target '%s' does not exist.\n" msgstr "ПреудÑлов „%s“ мете „%s“ не поÑтоји.\n" #: src/remake.c:761 #, c-format msgid "Prerequisite '%s' is newer than target '%s'.\n" msgstr "ПредуÑлов „%s“ је новији од мете „%s“.\n" #: src/remake.c:764 #, c-format msgid "Prerequisite '%s' is older than target '%s'.\n" msgstr "ПредуÑлов „%s“ је Ñтарији од мете „%s“.\n" #: src/remake.c:782 #, c-format msgid "Target '%s' is double-colon and has no prerequisites.\n" msgstr "Мета „%s“ је двоÑтрука двотачка и нема предуÑлове.\n" #: src/remake.c:789 #, c-format msgid "No recipe for '%s' and no prerequisites actually changed.\n" msgstr "Ðема рецепта за „%s“ и никакви предуÑлови заправо ниÑу мењани.\n" #: src/remake.c:794 #, c-format msgid "Making '%s' due to always-make flag.\n" msgstr "Одрађујем „%s“ због заÑтавице увек-одради.\n" #: src/remake.c:802 #, c-format msgid "No need to remake target '%s'" msgstr "Ðема потребе за поновнм одрађивањем мете „%s“" #: src/remake.c:804 #, c-format msgid "; using VPATH name '%s'" msgstr "; кориÑтим „VPATH“ назив „%s“" #: src/remake.c:824 #, c-format msgid "Must remake target '%s'.\n" msgstr "Морам поново да одрадим мету „%s“.\n" #: src/remake.c:830 #, c-format msgid " Ignoring VPATH name '%s'.\n" msgstr " Занемарујем „VPATH“ назив „%s“.\n" #: src/remake.c:839 #, c-format msgid "Recipe of '%s' is being run.\n" msgstr "Рецепт од „%s“ је покренут.\n" #: src/remake.c:846 #, c-format msgid "Failed to remake target file '%s'.\n" msgstr "ÐиÑам уÑпео поново да одрадим датотеку мете „%s“.\n" #: src/remake.c:849 #, c-format msgid "Successfully remade target file '%s'.\n" msgstr "УÑпешно Ñам одрадио датотеку мете „%s“.\n" #: src/remake.c:852 #, c-format msgid "Target file '%s' needs to be remade under -q.\n" msgstr "Датотека мете „%s“ треба поново да Ñе одради под „-q“.\n" #: src/remake.c:1047 #, c-format msgid "Using default commands for '%s'.\n" msgstr "КориÑтим оÑновне наредбе за „%s“.\n" #: src/remake.c:1422 #, c-format msgid "Warning: File '%s' has modification time %s s in the future" msgstr "Упозорење: Датотека „%s“ има време измене %s Ñек. у будућноÑти" #: src/remake.c:1662 #, c-format msgid ".LIBPATTERNS element '%s' is not a pattern" msgstr "„.LIBPATTERNS“ елемент „%s“ није шаблон" #: src/remote-cstms.c:122 #, c-format msgid "Customs won't export: %s\n" msgstr "Прилагођени неће извеÑти: %s\n" #: src/rule.c:289 #, c-format msgid "warning: ignoring prerequisites on suffix rule definition" msgstr "" #: src/rule.c:530 msgid "" "\n" "# Implicit Rules" msgstr "" "\n" "# Изричита правила" #: src/rule.c:545 msgid "" "\n" "# No implicit rules." msgstr "" "\n" "# Ðема изричитих правила." #: src/rule.c:548 #, fuzzy, c-format msgid "" "\n" "# %u implicit rules, %u (%.1f%%) terminal." msgstr "" "\n" "# %u изричита правила, %u" #: src/rule.c:557 #, c-format msgid "BUG: num_pattern_rules is wrong! %u != %u" msgstr "ГРЕШКÐ: број_правила_шаблона је погрешан! %u != %u" #: src/signame.c:84 msgid "unknown signal" msgstr "непознати Ñигнал" #: src/signame.c:92 msgid "Hangup" msgstr "ОбуÑтави" #: src/signame.c:95 msgid "Interrupt" msgstr "Прекини" #: src/signame.c:98 msgid "Quit" msgstr "Изађи" #: src/signame.c:101 msgid "Illegal Instruction" msgstr "ÐеиÑправна инÑтрукција" #: src/signame.c:104 msgid "Trace/breakpoint trap" msgstr "Замка праћења/тачке прекида" #: src/signame.c:109 msgid "Aborted" msgstr "Прекинуто" #: src/signame.c:112 msgid "IOT trap" msgstr "ИОТ замка" #: src/signame.c:115 msgid "EMT trap" msgstr "ЕМТ замка" #: src/signame.c:118 msgid "Floating point exception" msgstr "Изузетак покретног зареза" #: src/signame.c:121 msgid "Killed" msgstr "Убијен" #: src/signame.c:124 msgid "Bus error" msgstr "Грешка Ñабирнице" #: src/signame.c:127 msgid "Segmentation fault" msgstr "Грешка Ñегментације" #: src/signame.c:130 msgid "Bad system call" msgstr "Лош ÑиÑтемÑки позив" #: src/signame.c:133 msgid "Broken pipe" msgstr "Оштећена Ñпојка" #: src/signame.c:136 msgid "Alarm clock" msgstr "Будилник" #: src/signame.c:139 msgid "Terminated" msgstr "Окончан" #: src/signame.c:142 msgid "User defined signal 1" msgstr "КориÑнички одређени Ñигнал 1" #: src/signame.c:145 msgid "User defined signal 2" msgstr "КориÑнички одређени Ñигнал 2" #: src/signame.c:150 src/signame.c:153 msgid "Child exited" msgstr "ÐŸÐ¾Ñ‚Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñ˜Ðµ напуштен" #: src/signame.c:156 msgid "Power failure" msgstr "ÐеуÑпех напајања" #: src/signame.c:159 msgid "Stopped" msgstr "ЗауÑтављен" #: src/signame.c:162 msgid "Stopped (tty input)" msgstr "ЗауÑтављен (улаз конзоле)" #: src/signame.c:165 msgid "Stopped (tty output)" msgstr "ЗауÑтављен (излаз конзоле)" #: src/signame.c:168 msgid "Stopped (signal)" msgstr "ЗауÑтављен (Ñигнал)" #: src/signame.c:171 msgid "CPU time limit exceeded" msgstr "Прекорачено је временÑко ограничење процеÑора" #: src/signame.c:174 msgid "File size limit exceeded" msgstr "Прекорачено је ограничење величине датотеке" #: src/signame.c:177 msgid "Virtual timer expired" msgstr "Виртуелни одбројавач је иÑтекао" #: src/signame.c:180 msgid "Profiling timer expired" msgstr "Одбројавач профилиÑања је иÑтекао" #: src/signame.c:186 msgid "Window changed" msgstr "Прозор је измењен" #: src/signame.c:189 msgid "Continued" msgstr "ÐаÑтављен" #: src/signame.c:192 msgid "Urgent I/O condition" msgstr "Хитни У/И уÑлов" #: src/signame.c:199 src/signame.c:208 msgid "I/O possible" msgstr "I/O је могућ" #: src/signame.c:202 msgid "SIGWIND" msgstr "СИГВИÐД" #: src/signame.c:205 msgid "SIGPHONE" msgstr "СИГФОÐ" #: src/signame.c:211 msgid "Resource lost" msgstr "Губитак изворишта" #: src/signame.c:214 msgid "Danger signal" msgstr "ОпаÑан Ñигнал" #: src/signame.c:217 msgid "Information request" msgstr "Захтев за информацијама" #: src/signame.c:220 msgid "Floating point co-processor not available" msgstr "Ко-процеÑор покретног зареза није доÑтупан" #: src/strcache.c:274 #, c-format msgid "" "\n" "%s No strcache buffers\n" msgstr "" "\n" "%s Ðема међумеморија причуваних ниÑки\n" #: src/strcache.c:304 #, c-format msgid "" "\n" "%s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu " "B\n" msgstr "" "\n" "%s међумеморије причуваних ниÑки: %lu (%lu) / ниÑке = %lu / Ñмештај = %lu " "B / проÑек = %lu B\n" #: src/strcache.c:308 #, fuzzy, c-format msgid "" "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B\n" msgstr "" "%s текућа међумеморија: величина = %hu B / коришћено = %hu B / број = %hu / " "проÑек = %hu B\n" #: src/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" #: src/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" #: src/strcache.c:326 #, c-format msgid "" "\n" "%s strcache performance: lookups = %lu / hit rate = %lu%%\n" msgstr "" "\n" "%s учинковитоÑÑ‚ причуваних ниÑки: тражења = %lu / проÑек погодака = %lu%%\n" #: src/strcache.c:328 msgid "" "# hash-table stats:\n" "# " msgstr "" "# ÑтатиÑтика хеш-табеле:\n" "# " #: src/variable.c:1653 msgid "automatic" msgstr "аутоматÑки" #: src/variable.c:1656 msgid "default" msgstr "оÑновно" #: src/variable.c:1659 msgid "environment" msgstr "окружење" #: src/variable.c:1662 msgid "makefile" msgstr "мејк_датотека" #: src/variable.c:1665 msgid "environment under -e" msgstr "окружење под „-e“" #: src/variable.c:1668 msgid "command line" msgstr "линија наредби" #: src/variable.c:1671 msgid "'override' directive" msgstr "директива „override“" #: src/variable.c:1682 #, c-format msgid " (from '%s', line %lu)" msgstr " (од „%s“, %lu. ред)" #: src/variable.c:1745 msgid "# variable set hash-table stats:\n" msgstr "# променљива подешава ÑтатиÑтику хеш табеле:\n" #: src/variable.c:1756 msgid "" "\n" "# Variables\n" msgstr "" "\n" "# Променљиве\n" #: src/variable.c:1760 msgid "" "\n" "# Pattern-specific Variable Values" msgstr "" "\n" "# ВредноÑти променљиве према шаблону" #: src/variable.c:1774 msgid "" "\n" "# No pattern-specific variable values." msgstr "" "\n" "# Ðема вредноÑти променљиве према шаблону." #: src/variable.c:1776 #, c-format msgid "" "\n" "# %u pattern-specific variable values" msgstr "" "\n" "# %u вредноÑти променљиве према шаблону" #: src/variable.h:229 #, c-format msgid "warning: undefined variable '%.*s'" msgstr "упозорење: неодређена променљива „%.*s“" #: src/vmsfunctions.c:91 #, c-format msgid "sys$search() failed with %d\n" msgstr "Функција „sys$search()“ није уÑпела Ñа %d\n" #: src/vmsjobs.c:244 #, c-format msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n" msgstr "-упозорење, мораћете поново да укључите „КТРЛ-Y“ руковање из ДЦЛ-а.\n" #: src/vmsjobs.c:681 #, c-format msgid "BUILTIN CD %s\n" msgstr "ЦД ИЗГРÐДЊЕ „%s“\n" #: src/vmsjobs.c:1224 #, c-format msgid "DCL: %s\n" msgstr "ДЦЛ: %s\n" #: src/vmsjobs.c:1284 #, c-format msgid "Append output to %s\n" msgstr "Придодајем излаз на „%s“\n" #: src/vmsjobs.c:1309 #, c-format msgid "Append %.*s and cleanup\n" msgstr "Придодајем „%.*s“ и чиÑтим\n" #: src/vmsjobs.c:1322 #, c-format msgid "Executing %s instead\n" msgstr "УмеÑто тога извршавам „%s“\n" #: src/vpath.c:603 msgid "" "\n" "# VPATH Search Paths\n" msgstr "" "\n" "# „VPATH“ путање претраге\n" #: src/vpath.c:620 msgid "# No 'vpath' search paths." msgstr "# Ðема „vpath“ путања претраге." #: src/vpath.c:622 #, c-format msgid "" "\n" "# %u 'vpath' search paths.\n" msgstr "" "\n" "# %u „vpath“ путање претраге.\n" #: src/vpath.c:625 msgid "" "\n" "# No general ('VPATH' variable) search path." msgstr "" "\n" "# Ðема опште (променљиве „VPATH“) путање претраге." #: src/vpath.c:631 msgid "" "\n" "# General ('VPATH' variable) search path:\n" "# " msgstr "" "\n" "# Општа (променљиве „VPATH“) путања претраге:\n" "# " #: src/w32/w32os.c:44 #, c-format msgid "Jobserver slots limited to %d\n" msgstr "Подножја поÑлужитеља поÑла Ñу ограничена на %d\n" #: src/w32/w32os.c:60 #, c-format msgid "creating jobserver semaphore: (Error %ld: %s)" msgstr "правим Ñемафор поÑлужитеља поÑла: (грешка %ld: %s)" #: src/w32/w32os.c:79 #, c-format msgid "" "internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)" msgstr "" "унутрашња грешка: не могу да отворим Ñемафор поÑлужитеља поÑла „%s“: (грешка " "%ld: %s)" #: src/w32/w32os.c:82 #, c-format msgid "Jobserver client (semaphore %s)\n" msgstr "Клијент поÑлужитеља поÑла (Ñемафор „%s“)\n" #: src/w32/w32os.c:123 #, c-format msgid "release jobserver semaphore: (Error %ld: %s)" msgstr "отпуштам Ñемафор поÑлужитеља поÑла: (грешка %ld: %s)" #: src/w32/w32os.c:194 #, c-format msgid "semaphore or child process wait: (Error %ld: %s)" msgstr "Ñемафор или Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð¿Ð¾Ð´Ð¿Ñ€Ð¾Ñ†ÐµÑа чека: (грешка %ld: %s)" #~ msgid "%s: %s: Command not found\n" #~ msgstr "%s: %s: Ðема такве наредбе\n" #~ msgid "%s[%u]: %s: Command not found\n" #~ msgstr "%s[%u]: %s: Ðема такве наредбе\n" #~ msgid "%s: Shell program not found" #~ msgstr "%s: ÐиÑам нашао програм шкољке" #~ msgid "%s is suspending for 30 seconds..." #~ msgstr "„%s“ је обуÑтављен за 30 Ñекунде..." #~ msgid "done sleep(30). Continuing.\n" #~ msgstr "обављено је „Ñпавај(30)“. ÐаÑтављам.\n" #~ msgid "Unknown error %d" #~ msgstr "Ðепозната грешка %d" #~ msgid "Warning: File '%s' has modification time in the future" #~ msgstr "Упозорење: Датотека „%s“ има време измене у будућноÑти" #~ msgid " terminal." #~ msgstr " терминал." make-4.3/po/en@boldquot.header0000644000175000017500000000247113611136462013271 00000000000000# All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # # This catalog furthermore displays the text between the quotation marks in # bold face, assuming the VT100/XTerm escape sequences. # make-4.3/po/ja.gmo0000644000175000017500000013754413611136532010751 00000000000000Þ•®Œ Aü$$+$&J$q$$!Š$-¬$Ú$ ì$- %;%'Q%#y%% ´%Â%à%Pù%;J&"†&©& Å&tæ&L['P¨'Dù'9>(Mx(@Æ(o)Gw)o¿)P/*l€*Fí*J4+€+9,C:,f~,_å,;E-:-O¼-J .}W.uÕ.~K/>Ê/M 0CW02›0FÎ0I1;_1 ›1¥1"Â1 å1ò1 22&2 ?2J2e2x2 Š2”2£2¬2%½2ã27ì2$333C3/[3‹3¤3¼3Ö3(ô34&24*Y4&„4+«4×4#ì4#5)45-^5,Œ5¹5Ò5$ç59 6F63e6™61¶6è677/7!F7$h7=7GË7G89[8•8ž8"¥8È8å8;9!?9a9+}9©9¼9Ö9,ð9:%;:,a:-Ž: ¼:&Ý:;#;C;!c;.…;´;Ä;ÍÙ;§</Ç<÷<& = 4=%U={=›=¯=1Ä= ö=>#>#=>La>6®>å>6?A8?>z? ¹?+Ã?*ï?@ 2@<@1D@2v@ ©@µ@Î@"ã@*A1A@A PAqA A ™A£A»A ÛA èA%õAB+;B$gBŒB¦B ÅBÏBéBC+CHC!eC ‡C”C®C ·CÅCÎCâCD$D&_0X_‰_=©_;ç_:#`1^`,`H½`4a*;a"fa/‰a8¹a7òa*b>b Nbµ\b#d26d*id”d«d$»d.àde#"e1Fexe(’e »eÜe óe4þe,3fY`f<ºfB÷f<:gAwg¦¹gV`hd·h_iA|i_¾iMjƒljOðjÊ@ku lnlPðlbAmФmO/nJnqÊnn•{Ô{8ó{,|6I|/€|)°|'Ú|'}7*};b}Rž}_ñ}ZQ~G¬~ô~ý~C.HDwI¼C€,J€Hw€%À€$æ€$ F0Gw9¿FùG@‚Jˆ‚6Ó‚. ƒ49ƒ4nƒ;£ƒ>߃=„B\„韄C‰…\Í…*†GD†0Œ†G½†0‡6‡R‡Qj‡ ¼‡*ɇ0ô‡2%ˆlXˆVň/‰TL‰U¡‰b÷‰ ZŠDfŠ=«Š%銋!‹E4‹Ez‹À‹Ù‹ö‹,Œ:;ŒvŒŒ+¬Œ'ØŒ-.%>+d¬5Â8øH1Ž8z޳Ž,ÉŽöŽ7 .D.s4¢×8÷ 07=u~‘¢=²#ðG‘L\‘.©‘CØ‘)’)F’-p’Gž’4æ’0“L“7b“@š“Û“2û“.”A”Q”!b”L„” єޔ ý” •>!•>`•)Ÿ•/É•-ù•'–(<–e–V}–6Ô–5 —1A—@s—´—GÆ—/˜>>˜G}˜3Ř.ù˜=(™f™4h™>™`Ü™!=šM_š3­š2áš›U&› |›>‰›;È›TœEYœ!Ÿœ=ÁœJÿœJQ i"Š<­<êD'ž^lž[Ëž*'Ÿ%RŸNxŸJÇŸ >' Af 5¨ BÞ .!¡1P¡8‚¡!»¡Ý¡æ¡î¡;þ¡B:¢$}¢1¢¢ Ô¢á¢ý¢£D1£Tv£RË£L¤_k¤ ˤMؤ(&¥1O¥,¥:®¥/é¥&¦@¦[¦6m¦¤¦º¦ئ@ö¦77§o§E…§˧Hê§ 3¨I@¨sЍZþ¨ZY©D´©`ù© Zªhª„ªL ªíªýª9«S« c«-p«ž«A°«Eò«D8¬%}¬3£¬׬Qö¬?H­Mˆ­Ö­ñ­T ®b®y®®:°®:ë®\&¯!ƒ¯9¥¯߯4ü¯T1°M†°Ô°@ä°"%±3H±!|±]ž±0ü±6-²Bd²*§²Ò²cÔ²Z8³Z“³?î³C.´Cr´A¶´ ø´3µQ9µ ‹µ¬µ ʵ<×µH¶P]¶Q®¶*·H+·Kt·RÀ·<¸FP¸<—¸DÔ¸,¹%F¹Gl¹7´¹cì¹LPº)ºǺåºûº?»Y»]u»cÓ»f7¼Dž¼Mã¼u1½V§½Gþ½!F¾3h¾;œ¾:ؾ#¿7¿ V¿’’ž­u› ÙfŠœ´hcÓ='6݉#‰€“þEAf—)«$­¡É ~‘à k©µŒ9|jè2e-S„&vs•Ü`N¡H !š¨' ¦1uD§ô{}&.Y« Ïÿê?V¶50 mO¾v…JõK‡سöºxWQ ]tr–9 {C4ƒB±ÂMT†,\Z0š˰q:¨ó œU71ÌrHÛl™<:øò¿3B¢|/æjcP¸¯g5²Š—ç(+Áb-[+@†}~ŽzÊ™bFYä>n›"*]€,˜íÑlðQ =£‹Ldaã`8Ð÷åZÍ”#©@%ÎgnMÃsª_ÕD\S®ùTR„^7‚Ò ‹ _kEKž¬Vh6$¤/dwŸŸXúƒN4R¢^xtëLª®Ö»‘q*Åâ>W[ì§¹‡Ô·˜ÇF;!3PJe•y‚ÆoG¥ ;¥¼£I”ŽpˆéĈ"ß×GÚŒ“zÀo)ÞmUXa8¤Aý¬ip2(ïO–IiȦ…y½.ñîü%áCûw<? # %u 'vpath' search paths. # %u implicit rules, %u (%.1f%%) terminal. # %u pattern-specific variable values # Directories # Files # Finished Make data base on %s # General ('VPATH' variable) search path: # # Implicit Rules # Make data base, printed on %s # No general ('VPATH' variable) search path. # No implicit rules. # No pattern-specific variable values. # Pattern-specific Variable Values # VPATH Search Paths # Variables # files hash-table stats: # %s No strcache buffers %s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu B %s strcache performance: lookups = %lu / hit rate = %lu%% Counted %d args in failed launch This program built for %s This program built for %s (%s) Unhandled exception filter called from program %s ExceptionCode = %lx ExceptionFlags = %lx ExceptionAddress = 0x%p --debug[=FLAGS] Print various types of debugging information. --no-print-directory Turn off -w, even if it was turned on implicitly. --no-silent Echo recipes (disable --silent mode). --trace Print tracing information. --warn-undefined-variables Warn when an undefined variable is referenced. -B, --always-make Unconditionally make all targets. -C DIRECTORY, --directory=DIRECTORY Change to DIRECTORY before doing anything. -E STRING, --eval=STRING Evaluate STRING as a makefile statement. -I DIRECTORY, --include-dir=DIRECTORY Search DIRECTORY for included makefiles. -L, --check-symlink-times Use the latest mtime between symlinks and target. -O[TYPE], --output-sync[=TYPE] Synchronize output of parallel jobs by TYPE. -R, --no-builtin-variables Disable the built-in variable settings. -S, --no-keep-going, --stop Turns off -k. -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE Consider FILE to be infinitely new. -b, -m Ignored for compatibility. -d Print lots of debugging information. -e, --environment-overrides Environment variables override makefiles. -f FILE, --file=FILE, --makefile=FILE Read FILE as a makefile. -h, --help Print this message and exit. -i, --ignore-errors Ignore errors from recipes. -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no arg. -k, --keep-going Keep going when some targets can't be made. -l [N], --load-average[=N], --max-load[=N] Don't start multiple jobs unless load is below N. -n, --just-print, --dry-run, --recon Don't actually run any recipe; just print them. -o FILE, --old-file=FILE, --assume-old=FILE Consider FILE to be very old and don't remake it. -p, --print-data-base Print make's internal database. -q, --question Run no recipe; exit status says if up to date. -r, --no-builtin-rules Disable the built-in implicit rules. -s, --silent, --quiet Don't echo recipes. -t, --touch Touch targets instead of remaking them. -v, --version Print the version number of make and exit. -w, --print-directory Print the current directory. Date %s Ignoring VPATH name '%s'. uid = %d, gid = %d, mode = 0%o. (built-in): (core dumped) (don't care) (from '%s', line %lu) (from '%s', line %lu): (ignored) (name might be truncated) (no default goal) (no ~ expansion) (remote) (search path) files, impossibilities impossibilities in %lu directories. so far.# A default, MAKEFILES, or -include/sinclude makefile.# Also makes:# Builtin rule# Command line target.# Dependencies recipe running (THIS IS A BUG).# Failed to be updated.# File does not exist.# File has been updated.# File has not been updated.# File is an intermediate prerequisite.# File is very old.# Implicit rule search has been done.# Implicit rule search has not been done.# Implicit/static pattern stem: '%s' # Invalid value in 'command_state' member!# Last modified %s # Modification time never checked.# Needs to be updated (-q is set).# Phony target (prerequisite of .PHONY).# Precious file (prerequisite of .PRECIOUS).# Recipe currently running (THIS IS A BUG).# Successfully updated.# recipe to execute# %s (device %d, inode [%d,%d,%d]): # %s (device %d, inode [%d,%d,%d]): could not be opened. # %s (device %ld, inode %ld): # %s (device %ld, inode %ld): could not be opened. # %s (key %s, mtime %I64u): # %s (key %s, mtime %I64u): could not be opened. # %s: could not be stat'd. # No 'vpath' search paths.# Not a target:# hash-table stats: # # variable set hash-table stats: $SHELL changed (was '%s', now '%s') %s (line %d) Bad shell context (!unixy && !batch_mode_shell) %s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B %s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B %s other used: total = %lu B / count = %lu / avg = %lu B %s%s: %s%s: %s%s: Entering an unknown directory %s: Entering directory '%s' %s: Field '%s' not cached: %s%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p) %s: Leaving an unknown directory %s: Leaving directory '%s' %s: Timestamp out of range; substituting %s%s: failed to load%s: illegal option -- %c %s: invalid option -- %c %s: option '%c%s' doesn't allow an argument %s: option '%s' is ambiguous %s: option '%s' requires an argument %s: option '--%s' doesn't allow an argument %s: option '-W %s' doesn't allow an argument %s: option '-W %s' is ambiguous %s: option requires an argument -- %c %s: target '%s' does not exist%s: unrecognized option '%c%s' %s: unrecognized option '--%s' %s: update target '%s' due to: %s%s: user %lu (real %lu), group %lu (real %lu) %sBuilt for %s %sBuilt for %s (%s) %sLicense GPLv3+: GNU GPL version 3 or later %sThis is free software: you are free to change and redistribute it. %sThere is NO WARRANTY, to the extent permitted by law. %sNo rule to make target '%s'%s%sNo rule to make target '%s', needed by '%s'%s%s[%s: %s] Error %d%s%s[%u]: Entering an unknown directory %s[%u]: Entering directory '%s' %s[%u]: Leaving an unknown directory %s[%u]: Leaving directory '%s' '%s' is up to date.'override' directive*** Archive member '%s' may be bogus; not deleted*** Break. *** Deleting file '%s'*** Deleting intermediate file '%s'*** Waiting for unfinished jobs....*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp*** [%s] Archive member '%s' may be bogus; not deleted*** [%s] Deleting file '%s'*** mixed implicit and normal rules: deprecated syntax-O[TYPE] (--output-sync[=TYPE]) is not configured for this build.-warning, you may have to re-enable CTRL-Y handling from DCL. . Stop. .DEFAULT_GOAL contains more than one target.LIBPATTERNS element '%s' is not a pattern; using VPATH name '%s'AbortedAccess violation: read operation at address 0x%p Access violation: write operation at address 0x%p Alarm clockAppend %.*s and cleanup Append output to %s Avoiding implicit rule recursion. BUG: num_pattern_rules is wrong! %u != %uBUILTIN CD %s Bad system callBatch file contents: @echo off Batch file contents:%s %s Broken pipeBus errorCPU time limit exceededCannot create a temporary file Child accessChild exitedCircular %s <- %s dependency dropped.Cleaning up temp batch file %s Cleaning up temp batch file %s failed (%d) Cleaning up temporary batch file %s Collisions=%lu/%lu=%.0f%%Considering target file '%s'. ContinuedCould not restore stderr Could not restore stdin Could not restore stdout Couldn't change back to original directory.CreatePipe() failed (e=%ld) Creating temporary batch file %s Current timeCustoms won't export: %s DCL: %s Danger signalEMT trapEmpty function nameEmpty symbol name for load: %sExecuting %s instead Failed to load symbol %s from %s: %sFailed to open global symbol table: %sFailed to remake makefile '%s'.Failed to remake target file '%s'. File '%s' does not exist. File '%s' was considered already. File size limit exceededFinished prerequisites of target file '%s'. Finished updating file '%s'. Floating point co-processor not availableFloating point exceptionFound an implicit rule for '%s'. Found prerequisite '%s' as VPATH '%s' Function name too long: %sGiving up on target file '%s'. HangupI/O possibleIOT trapIllegal InstructionIncluded makefile '%s' was not found.Information requestInitialized accessInterruptInvalid function name: %sInvalid maximum argument count (%u) for function %sInvalid minimum argument count (%u) for function %sJobserver client (fds %d,%d) Jobserver client (semaphore %s) Jobserver slots limited to %d KilledLive child %p (%s) PID %s %s Load=%lu/%lu=%.0f%%, Loaded object %s is not declared to be GPL compatibleLoading symbol %s from %s Looking for a rule with intermediate file '%s'. Looking for an implicit rule for '%s'. Looking for archive-member implicit rule for '%s'. Make accessMakefile '%s' might loop; not remaking it. Makefile '%s' was not foundMakefile from standard input specified twice.Making '%s' due to always-make flag. Malformed target-specific variable definitionMember '%s'%s: %ld bytes at %ld (%ld). Must remake target '%s'. NoNo implicit rule found for '%s'. No need to remake target '%s'No recipe for '%s' and no prerequisites actually changed. No targetsNo targets specified and no makefile foundNothing to be done for '%s'.Obtained token for child %p (%s). Options: Parallel jobs (-j) are not supported on this platform.Power failurePrerequisite '%s' is newer than target '%s'. Prerequisite '%s' is older than target '%s'. Prerequisite '%s' is order-only for target '%s'. Prerequisite '%s' of target '%s' does not exist. Profiling timer expiredPruning file '%s'. Putting child %p (%s) PID %s%s on the chain. QuitRe-executing[%u]:Reading makefile '%s'Reading makefiles... Reaping losing child %p PID %s %s Reaping winning child %p PID %s %s Recently tried and failed to update file '%s'. Recipe for '%s' will be ignored in favor of the one for '%s'.Recipe for file '%s' was found by implicit rule search,Recipe has too many lines (%ud)Recipe of '%s' is being run. Recipe was specified for file '%s' at %s:%lu,Recursive variable '%s' references itself (eventually)Rehash=%u, Rejecting impossible implicit prerequisite '%s'. Rejecting impossible rule prerequisite '%s'. Released token for child %p (%s). Removing child %p PID %s%s from chain. Removing intermediate files... Report bugs to Resetting to single job (-j1) mode.Resource lostSIGPHONESIGWINDSegmentation faultSkipping UTF-8 BOM in makefile '%s' Skipping UTF-8 BOM in makefile buffer Stem too long: '%s%.*s'. Still updating file '%s'. StoppedStopped (signal)Stopped (tty input)Stopped (tty output)Successfully remade target file '%s'. Symbolic links not supported: disabling -L.Target '%s' is double-colon and has no prerequisites. Target '%s' not remade because of errors.Target file '%s' needs to be remade under -q. TerminatedThe 'load' operation is not supported on this platform.The prerequisites of '%s' are being made. Trace/breakpoint trapTrying implicit prerequisite '%s'. Trying pattern rule with stem '%.*s'. Trying rule prerequisite '%s'. Updating goal targets.... Updating makefiles.... Urgent I/O conditionUsage: %s [options] [target] ... User accessUser defined signal 1User defined signal 2Using default commands for '%s'. Using default recipe for '%s'. Virtual timer expiredWarning: File '%s' has modification time %s s in the futureWindow changedattempt to use unsupported feature: '%s'automaticbut '%s' is now considered the same file as '%s'.can't allocate %lu bytes for hash table: memory exhaustedcan't rename double-colon '%s' to single-colon '%s'can't rename single-colon '%s' to double-colon '%s'cannot enforce load limit: cannot enforce load limits on this operating systemclose: %s: %scommand linecreating jobs pipecreating jobserver semaphore: (Error %ld: %s)defaultduping jobs pipeempty string invalid as file nameempty variable nameenvironmentenvironment under -eextraneous '%s'extraneous text after '%s' directiveextraneous text after 'define' directiveextraneous text after 'endef' directivefile: invalid file operation: %sfile: missing filenamefile: too many argumentsfind_and_set_shell() path search set default_shell = %s find_and_set_shell() setting default_shell = %s first argument to 'word' function must be greater than 0fopen (temporary file)fwrite (temporary file)grouped targets must provide a recipeguile: Evaluating '%s' guile: Expanding '%s' init jobserver pipeinsufficient number of arguments (%d) to function '%s'internal error: invalid --jobserver-auth string '%s'internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)invalid syntax in conditionaljob server shut downjobserver pipelinelbr$ini_control() failed with status = %dlbr$set_module() failed to extract module info, status = %dmake reaped child pid %s, still waiting for pid %s makefilemissing 'endef', unterminated 'define'missing 'endif'missing rule before recipemissing separatormissing separator (did you mean TAB instead of 8 spaces?)missing target patternmixed implicit and normal rulesmixed implicit and static pattern rulesmultiple target patternsnono more file handles: could not duplicate stderr no more file handles: could not duplicate stdin no more file handles: could not duplicate stdout non-numeric first argument to 'word' functionnon-numeric first argument to 'wordlist' functionnon-numeric second argument to 'wordlist' functiononly one 'else' per conditionalopen: %s: %sprerequisites cannot be defined in recipesprocess_easy() failed to launch process (e=%ld) pselect jobs piperead jobs piperead: %s: %srecipe commences before first targetrelease jobserver semaphore: (Error %ld: %s)semaphore or child process wait: (Error %ld: %s)spawnvpe: environment space might be exhaustedsys$search() failed with %d target '%s' doesn't match the target patterntarget '%s' given more than once in the same ruletarget file '%s' has both : and :: entriestarget pattern contains no '%%'the '%s%s' option requires a non-empty string argumentthe '-%c' option requires a positive integer argumenttouch archive member is not available on VMStouch: '%s' is not a valid archivetouch: Archive '%s' does not existtouch: Bad return code from ar_member_touch on '%s'touch: Member '%s' does not exist in '%s'unable to open library '%s' to lookup member status %dunimplemented on this platform: function '%s'unknown debug level specification '%s'unknown output-sync type '%s'unknown signalunlink (temporary file): unterminated call to function '%s': missing '%c'unterminated variable referencewarning: Clock skew detected. Your build may be incomplete.warning: -j%d forced in makefile: resetting jobserver mode.warning: -j%d forced in submake: resetting jobserver mode.warning: NUL character seen; rest of line ignoredwarning: ignoring old recipe for target '%s'warning: jobserver unavailable: using -j1. Add '+' to parent make rule.warning: overriding group membership for target '%s'warning: overriding recipe for target '%s'warning: undefined variable '%.*s'windows32_openpipe(): process_init_fd() failed windows32_openpipe: DuplicateHandle(Err) failed (e=%ld) windows32_openpipe: DuplicateHandle(In) failed (e=%ld) write error: stdoutwrite jobserverwrite: %s: %sProject-Id-Version: make 4.2.93 Report-Msgid-Bugs-To: bug-make@gnu.org PO-Revision-Date: 2020-01-03 21:11+0900 Last-Translator: Takeshi Hamasaki Language-Team: Japanese Language: ja MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. X-Generator: Poedit 2.2.1 # %u ã¤ã® 'vpath' 探索パス. # %u å€‹ã®æš—黙ルール, %u (%.1f%%) 端末。 # %u 個ã®ãƒ‘ターン指定変数ã®å€¤ # ディレクトリ # ファイル # Make データベース終了 %s # 一般㮠('VPATH' 変数) 探索パス: # # 暗黙ルール # Make データベース出力 %s # 一般㮠('VPATH' 変数) 探索パスãªã—. # 暗黙ルールãªã—. # パターン指定変数ã®å€¤ãªã—. # パターン指定 変数 値 # VPATH 探索パス # 変数 # ファイルãƒãƒƒã‚·ãƒ¥ãƒ†ãƒ¼ãƒ–ルã®çŠ¶æ…‹: # %s strcache ãƒãƒƒãƒ•ã‚¡ã¯ã‚りã¾ã›ã‚“ %s strcache ãƒãƒƒãƒ•ã‚¡: %lu (%lu) / 文字列 = %lu / æ ¼ç´ = %lu B / å¹³å‡ = %lu B %s strcache ã®ç¨¼åƒ: 探索 = %lu / ヒット率 = %lu%% èµ·å‹•ã®å¤±æ•—ã§ %d 個ã®å¼•æ•°ãŒã‚«ã‚¦ãƒ³ãƒˆã•れã¾ã—㟠ã“ã®ãƒ—ログラム㯠%s 用ã«ãƒ“ルドã•れã¾ã—㟠ã“ã®ãƒ—ログラム㯠%s (%s) 用ã«ãƒ“ルドã•れã¾ã—㟠処ç†ã•れãªã„例外ã®ãŸã‚ã®ãƒ•ィルタãŒãƒ—ログラム %s ã‹ã‚‰å‘¼ã°ã‚Œã¾ã—㟠例外コード = %lx 例外フラグ = %lx 例外アドレス = 0x%p --debug[=FLAGS] 様々ãªã‚¿ã‚¤ãƒ—ã®ãƒ‡ãƒãƒƒã‚°æƒ…報を表示ã™ã‚‹. --no-print-directory -w をオフã«ã™ã‚‹. æš—é»™ã«æœ‰åйãªå ´åˆã§ã‚‚オフã«ã™ã‚‹. --no-silent レシピをエコーã™ã‚‹ ( --silent mode ã¯ç„¡åйã«ãªã‚‹). --trace トレース情報を表示ã™ã‚‹. --warn-undefined-variables 未定義ã®å¤‰æ•°ãŒå‚ç…§ã•れãŸã¨ãã«è­¦å‘Šã‚’発ã™ã‚‹. -B, --always-make ç„¡æ¡ä»¶ã«å…¨ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚’ make ã™ã‚‹. -C DIRECTORY, --directory=DIRECTORY make é–‹å§‹å‰ã«ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒª DIRECTORY ã¸ç§»å‹•ã™ã‚‹. -E STRING, --eval=STRING STRING ã‚’ makefile ã®æ–‡ã¨ã—ã¦è©•価ã™ã‚‹. -I DIRECTORY, --include-dir=DIRECTORY Search DIRECTORY for included makefiles. インクルードã™ã‚‹ makefile を探索ã™ã‚‹ DIRECTORY. -L, --check-symlink-times シンボリックリンクã¨ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã®ä¸­ã§ä¸€ç•ªæ–°ã—ã„ mtime を使ã†. -O[TYPE], --output-sync[=TYPE] 並列ジョブã®å‡ºåŠ›ã‚’ TYPE ã§æƒãˆã‚‹. -R, --no-builtin-variables ビルトインã®å¤‰æ•°è¨­å®šã‚’無効ã«ã™ã‚‹. -S, --no-keep-going, --stop -k オプションをオフã«ã™ã‚‹. -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE FILE ã‚’ã„ã¤ã§ã‚‚最新ã¨ã—ã¦è¦‹ãªã™. -b, -m äº’æ›æ€§ã®ãŸã‚ã®ã‚‚ã®ã§, 無視ã•れる. -d デãƒãƒƒã‚°æƒ…報を大é‡ã«è¡¨ç¤ºã™ã‚‹. -e, --environment-overrides 環境変数㌠makefile 中ã®è¨˜è¿°ã«å„ªå…ˆã™ã‚‹ -f FILE, --file=FILE, --makefile=FILE FILE ã‚’ makefile ã¨ã—ã¦èª­ã¿è¾¼ã‚€ -h, --help ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã—ã¦çµ‚了ã™ã‚‹. -i, --ignore-errors レシピã‹ã‚‰è¿”ã£ãŸã‚¨ãƒ©ãƒ¼ã‚’無視ã™ã‚‹. -j [N], --jobs[=N] 一度㫠N 個ã¾ã§ã®ã‚¸ãƒ§ãƒ–を許å¯; 無引数ã ã¨ã‚¸ãƒ§ãƒ–数制é™ãªã—. -k, --keep-going ã‚るターゲット㌠make ã§ããªãã¦ã‚‚実行を続ã‘ã‚‹. -l [N], --load-average[=N], --max-load[=N] è² è· ãŒ N 未満ã§ãªã„é™ã‚Šè¤‡æ•°ã®ã‚¸ãƒ§ãƒ–ã‚’é–‹å§‹ã—ãªã„. -n, --just-print, --dry-run, --recon レシピを実際ã«å®Ÿè¡Œã—ãªã„; 表示ã™ã‚‹ã®ã¿. -o FILE, --old-file=FILE, --assume-old=FILE FILE ã‚’ã¨ã¦ã‚‚å¤ã„ã‚‚ã®ã¨è¦‹ãªã—ã¦, å† make ã—ãªã„. -p, --print-data-base make ã®å†…部データベースを表示ã™ã‚‹. -q, --question レシピを実行ã—ãªã„; 更新済ã§ã‚ã‚‹ã‹ã©ã†ã‹ã‚’終了ステータスã§é€šçŸ¥. -r, --no-builtin-rules ãƒ“ãƒ«ãƒˆã‚¤ãƒ³ã®æš—黙ルールを無効ã«ã™ã‚‹. -s, --silent, --quiet レシピを表示ã—ãªã„. -t, --touch ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚’å† make ã™ã‚‹ä»£ã‚りã«ã‚¿ãƒƒãƒã™ã‚‹. -v, --version make ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ã‚’表示ã—ã¦çµ‚了ã™ã‚‹. -w, --print-directory カレントディレクトリを表示ã™ã‚‹. 日付 %s VPATH å '%s' を無視ã—ã¾ã™. uid = %d, gid = %d, mode = 0%o. (ビルトイン): (コアダンプã—ã¾ã—ãŸ) (æ°—ã«ã—ãªãã¦ã‚ˆã„) (ファイル '%s', %lu 行目) (ファイル '%s', %lu 行目): (無視ã•れã¾ã—ãŸ) (åå‰ãŒåˆ‡ã‚Šè©°ã‚られãŸã‹ã‚‚) (ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®æœ€çµ‚ターゲットãŒã‚りã¾ã›ã‚“) (~ ã®å±•é–‹ãªã—) (リモート) (探索パス) 個ã®ãƒ•ァイル, 個ã®é©ç”¨ä¸èƒ½ãƒ•ァイルå 個ã®é©ç”¨ä¸èƒ½ãƒ•ァイルå (%lu 個ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªå†…). (ã“ã“ã¾ã§ã«).# デフォルトã¾ãŸã¯ MAKEFILES, -include/sinclude Makefile.# ã•ら㫠make:# ビルトインルール# コマンドラインターゲット.# ä¾å­˜é–¢ä¿‚レシピを実行中ã§ã™ (*ã“れã¯ãƒã‚°ã§ã™*).# æ›´æ–°ã«å¤±æ•—ã—ã¾ã—ãŸ.# ファイルãŒå­˜åœ¨ã—ã¾ã›ã‚“.# ãƒ•ã‚¡ã‚¤ãƒ«ã¯æ›´æ–°ã•れã¦ã„ã¾ã™.# ãƒ•ã‚¡ã‚¤ãƒ«ã¯æ›´æ–°ã•れã¦ã„ã¾ã›ã‚“.# ファイルã¯ä¸­é–“å¿…è¦æ¡ä»¶ã§ã™.# ファイルãŒéžå¸¸ã«å¤ã„ã§ã™.# æš—é»™ãƒ«ãƒ¼ãƒ«ã®æŽ¢ç´¢ãŒè¡Œã‚れã¾ã—ãŸ.# æš—é»™ãƒ«ãƒ¼ãƒ«ã®æŽ¢ç´¢ã¯è¡Œã‚れã¾ã›ã‚“ã§ã—ãŸ.# æš—é»™/é™çš„パターン語幹: '%s' # 'command_state' メンãƒã«ç„¡åйãªå€¤ã§ã™!# 最終修正 %s # 修正時刻ãŒãƒã‚§ãƒƒã‚¯ã•れるã“ã¨ã¯ã‚りã¾ã›ã‚“.# æ›´æ–°ãŒå¿…è¦ã§ã™ (-q ãŒã‚»ãƒƒãƒˆã•れã¦ã„ã¾ã™).# 疑似ターゲット (.PHONY ã®å¿…è¦æ¡ä»¶)# 特別扱ã„ã®ãƒ•ァイル (.PRECIOUS ã®å¿…è¦æ¡ä»¶)# レシピをç¾åœ¨å®Ÿè¡Œä¸­ã§ã™ (*ã“れã¯ãƒã‚°ã§ã™*).# æ›´æ–°ã«æˆåŠŸã—ã¾ã—ãŸ.# 実行ã™ã‚‹ãƒ¬ã‚·ãƒ”# %s (device %d, inode [%d,%d,%d]): # %s (device %d, inode [%d,%d,%d]): é–‹ã‘ã¾ã›ã‚“ã§ã—ãŸ. # %s (device %ld, inode %ld): # %s (device %ld, inode %ld): é–‹ã‘ã¾ã›ã‚“ã§ã—ãŸ. # %s (key %s, mtime %I64u): # %s (key %s, mtime %I64u): é–‹ã‘ã¾ã›ã‚“ã§ã—ãŸ. # %s: 状態を調ã¹ã‚‰ã‚Œã¾ã›ã‚“ã§ã—ãŸ. # 'vpath' 探索パスã¯ã‚りã¾ã›ã‚“.# ターゲットã§ã¯ã‚りã¾ã›ã‚“:# ãƒãƒƒã‚·ãƒ¥ãƒ†ãƒ¼ãƒ–ルã®çŠ¶æ…‹: # # 変数セットã®ãƒãƒƒã‚·ãƒ¥ãƒ†ãƒ¼ãƒ–ルã®çŠ¶æ…‹: $SHELL ãŒå¤‰æ›´ã•れã¾ã—㟠(å‰ã¯ '%s', 今㯠'%s') %s (%d 行目) 䏿­£ãªã‚·ã‚§ãƒ«ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆ (!unixy && !batch_mode_shell) %s ç¾åœ¨ã®ãƒãƒƒãƒ•ã‚¡: サイズ = %hu B / 使用中 = %hu B / 個数 = %hu / å¹³å‡ = %u B %s ãã®ä»– 未使用: åˆè¨ˆ = %lu B / 最大 = %lu B / æœ€å° = %lu B / å¹³å‡ = %hu B %s ãã®ä»– 使用中: åˆè¨ˆ = %lu B / 個数 = %lu / å¹³å‡ = %lu B %s%s: %s%s: %s%s: ディレクトリ(ディレクトリå䏿˜Ž)ã«å…¥ã‚Šã¾ã™ %s: ディレクトリ '%s' ã«å…¥ã‚Šã¾ã™ %s: フィールド '%s' ã¯ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã•れã¦ã„ã¾ã›ã‚“: %s%s: 割り込ã¿/ä¾‹å¤–ã‚’æ•æ‰ã—ã¾ã—㟠(code = 0x%lx, addr = 0x%p) %s: ディレクトリ(ディレクトリå䏿˜Ž)ã‹ã‚‰å‡ºã¾ã™ %s: ディレクトリ '%s' ã‹ã‚‰å‡ºã¾ã™ %s: タイムスタンプãŒç¯„囲外ã§ã™ -- 代り㫠%s ã¨ã—ã¾ã™%s: 読ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ%s: 䏿­£ãªã‚ªãƒ—ション ― %c %s: 無効ãªã‚ªãƒ—ション ― %c %s: オプション '%c%s' ã¯å¼•æ•°ã‚’å–ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ %s: オプション '%s' ã¯çŸ­ã™ãŽã¦æ­£ã—ã判別ã§ãã¾ã›ã‚“ %s: オプション '%s' ã«ã¯å¼•æ•°ãŒ1ã¤å¿…è¦ã§ã™ %s: オプション '--%s' ã¯å¼•æ•°ã‚’å–ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ %s: オプション '-W %s' ã¯å¼•æ•°ã‚’å–ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ %s: オプション '-W %s' ã¯çŸ­ã™ãŽã¦æ­£ã—ã判別ã§ãã¾ã›ã‚“ %s: オプションã«ã¯å¼•æ•°ãŒå¿…è¦ã§ã™ ― %c %s: ターゲット '%s' ãŒå­˜åœ¨ã—ã¾ã›ã‚“%s: オプション '%c%s' ã‚’èªè­˜ã§ãã¾ã›ã‚“ %s: オプション '--%s' ã‚’èªè­˜ã§ãã¾ã›ã‚“ %s: ターゲット '%s' ã‚’ %s ã®ãŸã‚ã«æ›´æ–°ã—ã¾ã™%s: ユーザ %lu (実効 %lu), グループ %lu (実効 %lu) %sã“ã®ãƒ—ログラム㯠%s 用ã«ãƒ“ルドã•れã¾ã—㟠%sã“ã®ãƒ—ログラム㯠%s (%s) 用ã«ãƒ“ルドã•れã¾ã—㟠%sライセンス GPLv3+: GNU GPL ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 3 ä»¥é™ %sã“れã¯ãƒ•リーソフトウェアã§ã™: 自由ã«å¤‰æ›´ãŠã‚ˆã³é…布ã§ãã¾ã™. %s法律ã®è¨±ã™é™ã‚Šã€ã€€ç„¡ä¿è¨¼ã€€ã§ã™. %sターゲット '%s' ã‚’ make ã™ã‚‹ãƒ«ãƒ¼ãƒ«ãŒã‚りã¾ã›ã‚“%s%1$s'%3$s' ã«å¿…è¦ãªã‚¿ãƒ¼ã‚²ãƒƒãƒˆ '%2$s' ã‚’ make ã™ã‚‹ãƒ«ãƒ¼ãƒ«ãŒã‚りã¾ã›ã‚“%4$s%s[%s: %s] エラー %d%s%s[%u]: ディレクトリ(ディレクトリå䏿˜Ž)ã«å…¥ã‚Šã¾ã™ %s[%u]: ディレクトリ '%s' ã«å…¥ã‚Šã¾ã™ %s[%u]: ディレクトリ(ディレクトリå䏿˜Ž)ã‹ã‚‰å‡ºã¾ã™ %s[%u]: ディレクトリ '%s' ã‹ã‚‰å‡ºã¾ã™ '%s' ã¯æ›´æ–°æ¸ˆã¿ã§ã™.'override' 疑似命令*** 書庫ã®ãƒ¡ãƒ³ãƒ '%s' ã¯å¤šåˆ†å½ç‰©ã§ã™ ― 削除ã—ã¾ã›ã‚“ã§ã—ãŸ*** 中断. *** ファイル '%s' を削除ã—ã¾ã™*** 中間ファイル '%s' を削除ã—ã¾ã™*** 未完了ã®ã‚¸ãƒ§ãƒ–ã‚’å¾…ã£ã¦ã„ã¾ã™....*** 警告: .LOW_RESOLUTION_TIME ファイル '%s' ãŒé«˜è§£åƒåº¦ã‚¿ã‚¤ãƒ ã‚¹ã‚¿ãƒ³ãƒ—ã‚’æŒã£ã¦ã„ã¾ã™*** [%s] 書庫ã®ãƒ¡ãƒ³ãƒ '%s' ã¯å¤šåˆ†å½ç‰©ã§ã™ ― 削除ã—ã¾ã›ã‚“ã§ã—ãŸ*** [%s] ファイル '%s' を削除ã—ã¾ã™*** 暗黙ルールã¨é€šå¸¸ãƒ«ãƒ¼ãƒ«ãŒæ··ã–りã¾ã—ãŸ: 推奨ã•れãªã„文法ã“ã®ãƒ“ルドã§ã¯ -O[TYPE] (--output-sync[=TYPE]) ãŒè¨­å®šã•れã¦ã„ã¾ã›ã‚“.-警告, DCL ã‹ã‚‰ã® CTRL-Y æ“作をå†ã³æœ‰åйã«ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã‹ã‚‚知れã¾ã›ã‚“. . 中止. .DEFAULT_GOAL ãŒäºŒã¤ä»¥ä¸Šã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚’å«ã‚“ã§ã„ã¾ã™.LIBPATTERNS è¦ç´  '%s' ãŒãƒ‘ターンã§ã¯ã‚りã¾ã›ã‚“; VPATH å '%s' を使用ã—ã¾ã™<ビルトイン>Abort ã—ã¾ã—ãŸã‚¢ã‚¯ã‚»ã‚¹ä¿è­·é•å: アドレス 0x%p ã§ã®èª­ã¿è¾¼ã¿æ“作 アクセスä¿è­·é•å: アドレス 0x%p ã§ã®æ›¸ãè¾¼ã¿æ“作 アラームクロック追加 %.*s ã¨å¾Œç‰‡ä»˜ã‘ 出力を %s ã¸è¿½åŠ  暗黙ルールã®å†å¸°ã‚’回é¿ã—ã¾ã™. ãƒã‚°: num_pattern_rules ãŒé–“é•ã£ã¦ã„ã‚‹! %u != %uビルトイン CD %s 䏿­£ãªã‚·ã‚¹ãƒ†ãƒ ã‚³ãƒ¼ãƒ«ãƒãƒƒãƒãƒ•ァイルã®å†…容: @echo off ãƒãƒƒãƒãƒ•ァイルã®å†…容 :%s %s èª­ã¿æ‰‹ã®ãªã„パイプã¸ã®æ›¸ãè¾¼ã¿ãƒã‚¹ã‚¨ãƒ©ãƒ¼CPU 時間ãŒåˆ¶é™ã‚’è¶Šãˆã¾ã—ãŸä¸€æ™‚ファイルを作æˆã§ãã¾ã›ã‚“ å­ãƒ—ロセスアクセスå­ãƒ—ロセス終了循環 %s <- %s ä¾å­˜é–¢ä¿‚ãŒç ´æ£„ã•れã¾ã—ãŸ.一時的ãªãƒãƒƒãƒãƒ•ァイル %s を消去ã—ã¾ã™ 一時的ãªãƒãƒƒãƒãƒ•ァイル %s ã®æ¶ˆåŽ»ã«å¤±æ•—ã—ã¾ã—ãŸ(%d) 一時的ãªãƒãƒƒãƒãƒ•ァイル %s を消去ã—ã¾ã™ è¡çª=%lu/%lu=%.0f%%ファイル '%s' を検討ã—ã¦ã„ã¾ã™. å†é–‹ã•れã¾ã—ãŸæ¨™æº–エラー出力を復元ã§ãã¾ã›ã‚“ã§ã—㟠標準入力を復元ã§ãã¾ã›ã‚“ã§ã—㟠標準出力を復元ã§ãã¾ã›ã‚“ã§ã—㟠元ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«æˆ»ã‚Œã¾ã›ã‚“ã§ã—ãŸ.CreatePipe() ãŒå¤±æ•— (e=%ld) 一時的ãªãƒãƒƒãƒãƒ•ァイル %s を作æˆã—ã¾ã™ ç¾åœ¨æ™‚刻Customs ãŒã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã—ã¦ãれã¾ã›ã‚“: %s DCL: %s å±é™ºã‚·ã‚°ãƒŠãƒ«EMT トラップ空ã®é–¢æ•°å空ã®ã‚·ãƒ³ãƒœãƒ«åを読ã¿è¾¼ã‚‚ã†ã¨ã—ã¦ã„ã¾ã™: %s代ã‚り㫠%s を実行ã—ã¾ã™ シンボル %s ã‚’ %s ã‹ã‚‰èª­ã¿è¾¼ã‚€ã®ã«å¤±æ•—ã—ã¾ã—ãŸ: %sグローãƒãƒ«ã‚·ãƒ³ãƒœãƒ«ãƒ†ãƒ¼ãƒ–ルを開ãã“ã¨ãŒã§ãã¾ã›ã‚“: %smakefile '%s' ã®å†makeã«å¤±æ•—ã—ã¾ã—ãŸ.ターゲットファイル '%s' ã®å†make ã«å¤±æ•—ã—ã¾ã—ãŸ. ファイル '%s' ãŒå­˜åœ¨ã—ã¾ã›ã‚“. ファイル '%s' ã¯æ¤œè¨Žæ¸ˆã¿ã§ã™. ファイルサイズ制é™ã‚’è¶Šãˆã¾ã—ãŸã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒ•ァイル '%s' ã®å¿…è¦æ¡ä»¶ã‚’満ãŸã—ã¾ã—ãŸ. ファイル '%s'ã€€ã®æ›´æ–°ãŒçµ‚了ã—ã¾ã—ãŸ. æµ®å‹•å°æ•°ç‚¹ã‚³ãƒ—ロセッサãŒåˆ©ç”¨ä¸èƒ½æµ®å‹•å°æ•°ç‚¹ä¾‹å¤–'%s' ã®ãŸã‚ã®æš—黙ルールを見ã¤ã‘ã¾ã—ãŸ. VPATH '%2$s' ã¨ã—ã¦å¿…è¦æ¡ä»¶ '%1$s' を見ã¤ã‘ã¾ã—㟠関数åãŒé•·ã™ãŽã¾ã™: %sターゲットファイル '%s' を諦ã‚ã¾ã™. ãƒãƒ³ã‚°ã‚¢ãƒƒãƒ—入出力å¯èƒ½IOT ãƒˆãƒ©ãƒƒãƒ—ä¸æ­£ãªãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢å‘½ä»¤ã‚¤ãƒ³ã‚¯ãƒ«ãƒ¼ãƒ‰ã•れる makefile '%s' ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ.æƒ…å ±è¦æ±‚アクセス権é™ã‚’åˆæœŸåŒ–割り込ã¿ç„¡åйãªé–¢æ•°å: %s引数個数指定(最大値;%u)ãŒç„¡åйã§ã™: 関数 %s引数個数指定(最å°å€¤;%u)ãŒç„¡åйã§ã™: 関数 %sjobserver クライアント (fds %d,%d) jobserver クライアント (セマフォ %s) jobserver ã®ã‚¹ãƒ­ãƒƒãƒˆã¯ %d ã¾ã§ã§ã™ Kill ã•れã¾ã—ãŸç”Ÿå­˜å­ãƒ—ロセス %p (%s) PID %s %s è² è·=%lu/%lu=%.0f%%, 読ã¿è¾¼ã‚“ã ã‚ªãƒ–ジェクト %s 㯠GPL互æ›ã®å®£è¨€ãŒãªã•れã¦ã„ã¾ã›ã‚“シンボル %s ã‚’ %s ã‹ã‚‰èª­ã¿è¾¼ã‚“ã§ã„ã¾ã™ 中間ファイル '%s' ã®ãƒ«ãƒ¼ãƒ«ã‚’探ã—ã¾ã™. '%s' ã®ãŸã‚ã®æš—黙ルールを探ã—ã¾ã™. '%s' ã®ãŸã‚ã®æ›¸åº«ãƒ¡ãƒ³ãƒæš—黙ルールを探ã—ã¾ã™. make アクセスmakefile '%s' 自己å†å¸°ã®ãŠãれã‚り ― å†make ã—ã¾ã›ã‚“. makefile '%s' ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸæ¨™æº–入力ã‹ã‚‰ã® makefile ãŒäºŒå›žæŒ‡å®šã•れã¾ã—ãŸ.always-make フラグãŒç«‹ã£ã¦ã„ã‚‹ã®ã§ '%s' ã‚’ make ã—ã¾ã™. ターゲット特有ã®å¤‰æ•°å®šç¾©ãŒç•°å¸¸ã§ã™ãƒ¡ãƒ³ãƒ '%s'%s: %ld ãƒã‚¤ãƒˆ at %ld (%ld). ターゲット '%s' ã‚’å†make ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™. 0'%s' ã®ãŸã‚ã®æš—黙ルールãŒã‚りã¾ã›ã‚“. ターゲット '%s' ã‚’å†make ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“'%s' ã®ãŸã‚ã®ãƒ¬ã‚·ãƒ”ãŒç„¡ã, å¿…è¦æ¡ä»¶ã¯å®Ÿéš›ã«ã¯å¤‰æ›´ã•れã¾ã›ã‚“ã§ã—ãŸ. ターゲットãŒã‚りã¾ã›ã‚“ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãŒæŒ‡å®šã•れã¦ãŠã‚‰ãš, makefile も見ã¤ã‹ã‚Šã¾ã›ã‚“'%s' ã«å¯¾ã—ã¦è¡Œã†ã¹ã事ã¯ã‚りã¾ã›ã‚“.å­ãƒ—ロセス %p (%s) ã«å°ã‚’ã¤ã‘ã¾ã—ãŸ. オプション: 並列ジョブ (-j) ã¯ã“ã®ãƒ—ラットフォームã§ã‚µãƒãƒ¼ãƒˆã•れã¾ã›ã‚“.é›»æºéšœå®³å¿…è¦æ¡ä»¶ '%s' ã¯ã‚¿ãƒ¼ã‚²ãƒƒãƒˆ '%s' よりも新ã—ã„. å¿…è¦æ¡ä»¶ '%s' ã¯ã‚¿ãƒ¼ã‚²ãƒƒãƒˆ '%s' よりもå¤ã„. å¿…è¦æ¡ä»¶ '%s' ã¯ã‚¿ãƒ¼ã‚²ãƒƒãƒˆ '%s' ã® order-only(é †åºæ±ºå®šæ¡ä»¶)ã§ã™. ターゲット '%2$s' ã®å¿…è¦æ¡ä»¶ '%1$s' ãŒå­˜åœ¨ã—ã¾ã›ã‚“. プロファイルタイマ満了ファイル '%s' ã®ä¾å­˜é–¢ä¿‚ã‚’æ•´ç†ã—ã¦ã„ã¾ã™. ãƒã‚§ã‚¤ãƒ³ã«å­ãƒ—ロセス %p (%s) PID %s%s ã‚’å–り込ã¿ã¾ã—ãŸ. 終了å†å®Ÿè¡Œã—ã¾ã™[%u]:makefile '%s' ã®èª­ã¿è¾¼ã¿ä¸­makefile を読ã¿è¾¼ã¿ã¾ã™... 失敗ã—ãŸå­ãƒ—ロセス %p PID %s %s を回åŽã—ã¾ã™ æˆåŠŸã—ãŸå­ãƒ—ロセス %p PID %s %s を回åŽã—ã¾ã™ 最近ファイル '%s' ã®æ›´æ–°ã‚’試ã—ã¦å¤±æ•—ã—ã¦ã„ã¾ã™. '%s' ã®ãŸã‚ã®ãƒ¬ã‚·ãƒ”ã¯, '%s' ã®ãŸã‚ã®ã‚‚ã®ã‚’優先ã™ã‚‹ãŸã‚無視ã•れã¾ã™.ファイル '%s' ã®ãŸã‚ã®ãƒ¬ã‚·ãƒ”ãŒæš—é»™ãƒ«ãƒ¼ãƒ«ã®æŽ¢ç´¢ã§è¦‹ã¤ã‹ã‚Šã¾ã—ãŸ,レシピã®è¡Œæ•°ãŒå¤šã™ãŽã¾ã™ (%ud)'%s' ã®ãƒ¬ã‚·ãƒ”を実行中ã§ã™. ファイル '%s' ã®ãŸã‚ã®ã®ãƒ¬ã‚·ãƒ”㌠%s:%lu ã§æŒ‡å®šã•れã¾ã—ãŸ,å†å¸°çš„変数 '%s' ãŒ(最終的ã«)ãれ自身をå‚ç…§ã—ã¦ã„ã¾ã™å†ãƒãƒƒã‚·ãƒ¥=%u, é©ç”¨ä¸èƒ½ãªæš—é»™ã®å¿…è¦æ¡ä»¶ '%s' ã‚’å´ä¸‹ã—ã¾ã™. é©ç”¨ä¸èƒ½ãªãƒ«ãƒ¼ãƒ«ã®å¿…è¦æ¡ä»¶ '%s' ã‚’å´ä¸‹ã—ã¾ã™. å­ãƒ—ロセス %p (%s) ã®å°ã‚’解放ã—ã¾ã—ãŸ. ãƒã‚§ã‚¤ãƒ³ã‹ã‚‰å­ãƒ—ロセス %p PID %s%s を削除ã—ã¾ã™. 中間ファイルを削除ã—ã¦ã„ã¾ã™... ãƒã‚°ãƒ¬ãƒãƒ¼ãƒˆã¯ ã¾ã§. å˜ä¸€ã‚¸ãƒ§ãƒ– (-j1) モードã«ãƒªã‚»ãƒƒãƒˆã—ã¾ã™.リソースãŒå¤±ã‚れã¾ã—ãŸSIGPHONESIGWINDメモリé•åmakefile '%s' ã®ä¸­ã® UTF-8 BOM をスキップã—ã¾ã™ makefile ãƒãƒƒãƒ•ã‚¡ã®ä¸­ã® UTF-8 BOM をスキップã—ã¾ã™ 語幹ãŒé•·ã™ãŽã¾ã™: '%s%.*s'. ファイル '%s'ã€€ã®æ›´æ–°ã‚’ã—ã¦ã„ã¾ã™. ä¸€æ™‚åœæ­¢ä¸€æ™‚åœæ­¢ (シグナル)ä¸€æ™‚åœæ­¢ (tty 入力)ä¸€æ™‚åœæ­¢ (tty 出力)ターゲットファイル '%s' ã®å† make ã«æˆåŠŸã—ã¾ã—ãŸ. シンボリックリンクã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“: -L ã¯ç„¡åйã§ã™.ターゲット '%s' ã¯ãƒ€ãƒ–ルコロンã§, ã‹ã¤å¿…è¦æ¡ä»¶ã‚’æŒãŸãªã„. ターゲット '%s' ã¯ã‚¨ãƒ©ãƒ¼ã«ã‚ˆã‚Š å†make ã§ãã¾ã›ã‚“ã§ã—ãŸ.ターゲットファイル '%s' 㯠-q オプションを付ã‘ã¦ã®å†make ãŒå¿…è¦ã§ã™. 強制終了'load' 命令ã¯ã“ã®ãƒ—ラットフォームã§ã‚µãƒãƒ¼ãƒˆã•れã¾ã›ã‚“.'%s' ã®å¿…è¦æ¡ä»¶ã‚’ make ã—ã¾ã™. トレース/ブレイクãƒã‚¤ãƒ³ãƒˆãƒˆãƒ©ãƒƒãƒ—æš—é»™ã®å¿…è¦æ¡ä»¶ '%s' を試ã—ã¾ã™. 語幹 '%.*s' ã¨ã®ãƒ‘ターンルールを試ã—ã¾ã™. ルールã®å¿…è¦æ¡ä»¶ '%s' を試ã—ã¾ã™. 最終ターゲットを更新中.... makefile ã®æ›´æ–°ä¸­.... 緊急 I/O æ¡ä»¶ä½¿ã„æ–¹: %s [オプション] [ターゲット] ... ユーザアクセスユーザ定義シグナル 1ユーザ定義シグナル 2'%s' ã®ãŸã‚ã®ãƒ‡ãƒ•ォルトã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使ã„ã¾ã™. '%s' 用ã®ãƒ‡ãƒ•ォルトレシピを使用ã—ã¾ã™. 仮想タイマ満了警告: ファイル '%s' ã®ä¿®æ­£æ™‚刻 %s ã¯æœªæ¥ã®æ™‚刻ã§ã™ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚µã‚¤ã‚ºå¤‰æ›´ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ãªã„機能を使ãŠã†ã¨ã—ã¦ã„ã¾ã™: '%s'自動変数ã—ã‹ã—今㯠'%s' 㨠'%s' ã¯åŒã˜ãƒ•ァイルã¨è¦‹ãªã•れã¾ã™.ãƒãƒƒã‚·ãƒ¥ãƒ†ãƒ¼ãƒ–ル用 %lu ãƒã‚¤ãƒˆã®å‰²ã‚Šå½“ã¦ã«å¤±æ•—ã—ã¾ã—ãŸ: ãƒ¡ãƒ¢ãƒªã‚’ä½¿ã„æžœãŸã—ã¾ã—ãŸãƒ€ãƒ–ルコロン '%s' ã‹ã‚‰ã‚·ãƒ³ã‚°ãƒ«ã‚³ãƒ­ãƒ³ '%s' ã«åå‰ã‚’変ãˆã‚‰ã‚Œã¾ã›ã‚“シングルコロン '%s' ã‹ã‚‰ãƒ€ãƒ–ルコロン '%s' ã«åå‰ã‚’変ãˆã‚‰ã‚Œã¾ã›ã‚“システム負è·åˆ¶é™ã‚’課ã™ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ: ã“ã®ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã§ã¯ã‚·ã‚¹ãƒ†ãƒ è² è·åˆ¶é™ã‚’加ãˆã‚‰ã‚Œã¾ã›ã‚“close: %s: %sコマンドライン変数ジョブパイプ作æˆä¸­ã‚¸ãƒ§ãƒ–サームセマフォを作æˆã—ã¦ã„ã¾ã™: (エラー %ld: %s)ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã‚¸ãƒ§ãƒ–ãƒ‘ã‚¤ãƒ—è¤‡è£½ä¸­ç©ºã®æ–‡å­—列ã¯ãƒ•ァイルåã¨ã—ã¦ã¯ç„¡åйã§ã™ç©ºã®å¤‰æ•°å環境変数-e ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã§æŒ‡å®šã—ãŸç’°å¢ƒå¤‰æ•°ç„¡é–¢ä¿‚㪠'%s''%s' 疑似命令ã®å¾Œã‚ã«ç„¡é–¢ä¿‚ãªæ–‡å­—列ãŒã‚りã¾ã™'define' 疑似命令ã®å¾Œã‚ã«ç„¡é–¢ä¿‚ãªæ–‡å­—列ãŒã‚りã¾ã™'endef' 疑似命令ã®å¾Œã‚ã«ç„¡é–¢ä¿‚ãªæ–‡å­—列ãŒã‚りã¾ã™file: 無効ãªãƒ•ァイルæ“作: %sfile: ファイルåãŒæŒ‡å®šã•れã¦ã„ã¾ã›ã‚“file: 引数ãŒå¤šã™ãŽã¾ã™find_and_set_shell() パス探索㧠default_shell = %s ã«ã‚»ãƒƒãƒˆã—ã¾ã—㟠find_and_set_shell() 㯠default_shell = %s ã«è¨­å®šã—ã¾ã™ 'word' 関数ã¸ã®ç¬¬1引数㯠0 より大ãããªã‘れã°ãªã‚Šã¾ã›ã‚“fopen (一時ファイル)fwrite (一時ファイル)グループ化ã—ãŸã‚¿ãƒ¼ã‚²ãƒƒãƒˆã¯ãƒ¬ã‚·ãƒ”を供給ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™guile: 評価中 '%s' guile: 展開中 '%s' jobserver パイプã®åˆæœŸåŒ–å¼•æ•°ã®æ•°(%d)ãŒé–¢æ•° '%s' ã«ã¨ã£ã¦ä¸å分ã§ã™å†…部エラー: 無効㪠--jobserver-auth 文字列 '%s'内部エラー: ジョブサームセマフォを開ã‘ã¾ã›ã‚“ '%s': (エラー %ld: %s)æ¡ä»¶éƒ¨ã®æ–‡æ³•ãŒç„¡åйã§ã™ã‚¸ãƒ§ãƒ–サーãƒãƒ¼ãŒã‚·ãƒ£ãƒƒãƒˆãƒ€ã‚¦ãƒ³ã—ã¾ã—ãŸjobserver パイプラインlbr$ini_control() ãŒå¤±æ•—ã—ã¾ã—ãŸ. 状態 = %dlbr$set_module() ãŒãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«æƒ…å ±ã®æŠ½å‡ºã«å¤±æ•—ã—ã¾ã—ãŸ. 状態 = %dmake 㯠pid %s ã®å­ãƒ—ロセスを回åŽã—, pid %s ã‚’å¾…ã¡ç¶šã‘ã¾ã™ makefile 変数'endef' を欠ã„ã¦ãŠã‚Š, 'define' ãŒçµ‚了ã—ã¦ã„ã¾ã›ã‚“'endif'ã€€ãŒæ¬ è½ã—ã¦ã„ã¾ã™ãƒ¬ã‚·ãƒ”ã®å‰ã®ãƒ«ãƒ¼ãƒ«ãŒä¸è¶³ã—ã¦ã„ã¾ã™åˆ†é›¢è¨˜å·ã‚’欠ã„ã¦ã„ã¾ã™åˆ†é›¢è¨˜å·ã‚’欠ã„ã¦ã„ã¾ã™ (8 個ã®ç©ºç™½ã§ã—ãŸãŒ, TAB ã®ã¤ã‚‚りã§ã—ãŸã‹?)ターゲットパターンを欠ã„ã¦ã„ã¾ã™æš—黙ルールã¨é€šå¸¸ãƒ«ãƒ¼ãƒ«ãŒæ··ã–りã¾ã—ãŸæš—黙ルールã¨é™çš„ãƒ‘ã‚¿ãƒ¼ãƒ³ãƒ«ãƒ¼ãƒ«ãŒæ··ã–りã¾ã—ãŸè¤‡æ•°ã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒ‘ターンã§ã™0ファイルãƒãƒ³ãƒ‰ãƒ«ã‚’使ã„å°½ãã—ã¾ã—ãŸ: 標準エラー出力を複製ã§ãã¾ã›ã‚“ ファイルãƒãƒ³ãƒ‰ãƒ«ã‚’使ã„å°½ãã—ã¾ã—ãŸ: 標準入力を複製ã§ãã¾ã›ã‚“ ファイルãƒãƒ³ãƒ‰ãƒ«ã‚’使ã„å°½ãã—ã¾ã—ãŸ: 標準出力を複製ã§ãã¾ã›ã‚“ éžæ•°å€¤ã®ç¬¬1引数㌠'word' 関数ã«ä¸Žãˆã‚‰ã‚Œã¾ã—ãŸéžæ•°å€¤ã®ç¬¬1引数㌠'wordlist' 関数ã«ä¸Žãˆã‚‰ã‚Œã¾ã—ãŸéžæ•°å€¤ã®ç¬¬2引数㌠'wordlist' 関数ã«ä¸Žãˆã‚‰ã‚Œã¾ã—ãŸä¸€ã¤ã®æ¡ä»¶éƒ¨ã«ã¤ã一ã¤ã—ã‹ 'else' を使ãˆã¾ã›ã‚“open: %s: %så¿…è¦æ¡ä»¶ã‚’レシピ内ã§å®šç¾©ã§ãã¾ã›ã‚“process_easy() ãŒå¤±æ•—ã—プロセスãŒèµ·å‹•ã§ãã¾ã›ã‚“ã§ã—㟠(e=%ld) ジョブã®ãƒ‘イプ㮠pselectジョブã®ãƒ‘イプ㮠readread: %s: %s最åˆã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚ˆã‚Šå‰ã«ãƒ¬ã‚·ãƒ”ãŒã‚りã¾ã™ã‚¸ãƒ§ãƒ–サーãƒã®ã‚»ãƒžãƒ•ォを解放ã—ã¾ã™: (エラー %ld: %s)セマフォ ã¾ãŸã¯ å­ãƒ—ロセスを待ã£ã¦ã„ã¾ã™: (エラー %ld: %s)spawnvpe:環境設定ã®ãŸã‚ã®ãƒ¡ãƒ¢ãƒªã‚’使ã„å°½ãã™ã‹ã‚‚ã—れã¾ã›ã‚“sys$search() ㌠%d ã§å¤±æ•—ã—ã¾ã—㟠ターゲット '%s' ã¯ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒ‘ターンã¨ä¸€è‡´ã—ã¾ã›ã‚“ターゲット '%s' ãŒåŒä¸€ãƒ«ãƒ¼ãƒ«å†…ã§è¤‡æ•°å›žä¸Žãˆã‚‰ã‚Œã¾ã—ãŸã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒ•ァイル '%s' ㌠: 㨠:: é …ç›®ã®ä¸¡æ–¹ã‚’æŒã£ã¦ã„ã¾ã™ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒ‘ターン㌠'%%' ã‚’å«ã‚“ã§ã„ã¾ã›ã‚“'%s%s' オプションã¯ç©ºã§ãªã„æ–‡å­—åˆ—å¼•æ•°ã‚’è¦æ±‚ã—ã¾ã™'-%c' ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã¯æ­£ã®æ•´æ•°å¼•æ•°ã‚’è¦æ±‚ã—ã¾ã™VMS ã§ã¯æ›¸åº«ã®ãƒ¡ãƒ³ãƒã‚’ touch ã™ã‚‹æ©Ÿèƒ½ãŒã‚りã¾ã›ã‚“'%s' ã¯æœ‰åŠ¹ãªæ›¸åº«ã§ã¯ã‚りã¾ã›ã‚“touch: 書庫 '%s' ãŒã‚りã¾ã›ã‚“touch: '%s' ã¸ã® ar_member_touch ã‹ã‚‰ç•°å¸¸ãªå€¤ãŒè¿”りã¾ã—ãŸtouch: メンム'%s' 㯠'%s' 内ã«å­˜åœ¨ã—ã¾ã›ã‚“ライブラリ '%s' ã‚’é–‹ã‘ãªã„ãŸã‚, メンãƒã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ %d ãŒæ¤œç´¢ã§ãã¾ã›ã‚“ã“ã®ãƒ—ラットフォームã§ã¯å®Ÿè£…ã•れã¦ã„ã¾ã›ã‚“: 関数 '%s'䏿˜Žãªãƒ‡ãƒãƒƒã‚°ãƒ¬ãƒ™ãƒ«æŒ‡å®š '%s'未知ã®å‡ºåŠ›åŒæœŸåž‹ '%s'未知ã®ã‚·ã‚°ãƒŠãƒ«unlink (一時ファイル): 終端ãŒãªã„関数呼ã³å‡ºã— '%s': '%c' ãŒã‚りã¾ã›ã‚“終端ã®ãªã„変数å‚照警告: 時刻ã®ãšã‚Œã‚’検出. ä¸å®Œå…¨ãªãƒ“ãƒ«ãƒ‰çµæžœã«ãªã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“.警告: makefile ã§ -j%d を強制指定ã—ã¾ã—ãŸ: jobserver モードをリセットã—ã¾ã™.警告: 副次 make ã§ -j%d を強制指定ã—ã¾ã—ãŸ: jobserver モードをリセットã—ã¾ã™.警告: NUL 文字ãŒã‚りã¾ã™; è¡Œã®æ®‹ã‚Šã¯ç„¡è¦–ã•れã¾ã™è­¦å‘Š: ターゲット '%s' ã®ãŸã‚ã®å¤ã„レシピã¯ç„¡è¦–ã•れã¾ã™è­¦å‘Š: jobserver ãŒåˆ©ç”¨ä¸å¯: 今回㯠-j1 を使ã„ã¾ã™. 親 make ルール㫠`+' を追加ã—ã¾ã—ょã†.警告: ターゲット '%s' ã®ã‚°ãƒ«ãƒ¼ãƒ—メンãƒãƒ¼ã‚·ãƒƒãƒ—を上書ãã—ã¾ã™è­¦å‘Š: ターゲット '%s' ã®ãŸã‚ã®ãƒ¬ã‚·ãƒ”ã‚’ç½®ãæ›ãˆã¾ã™è­¦å‘Š: 未定義ã®å¤‰æ•° '%.*s'windows32_openpipe (): process_init_fd() ãŒå¤±æ•— windows32_openpipe: DuplicateHandle(Err) ãŒå¤±æ•— (e=%ld) windows32_openpipe: DuplicateHandle(In) ãŒå¤±æ•— (e=%ld) 書ãè¾¼ã¿ã‚¨ãƒ©ãƒ¼: 標準出力ジョブサーãƒã¸ã® writewrite: %s: %smake-4.3/po/bg.gmo0000644000175000017500000016370213611136532010742 00000000000000Þ•®Œ Aü$$+$&J$q$$!Š$-¬$Ú$ ì$- %;%'Q%#y%% ´%Â%à%Pù%;J&"†&©& Å&tæ&L['P¨'Dù'9>(Mx(@Æ(o)Gw)o¿)P/*l€*Fí*J4+€+9,C:,f~,_å,;E-:-O¼-J .}W.uÕ.~K/>Ê/M 0CW02›0FÎ0I1;_1 ›1¥1"Â1 å1ò1 22&2 ?2J2e2x2 Š2”2£2¬2%½2ã27ì2$333C3/[3‹3¤3¼3Ö3(ô34&24*Y4&„4+«4×4#ì4#5)45-^5,Œ5¹5Ò5$ç59 6F63e6™61¶6è677/7!F7$h7=7GË7G89[8•8ž8"¥8È8å8;9!?9a9+}9©9¼9Ö9,ð9:%;:,a:-Ž: ¼:&Ý:;#;C;!c;.…;´;Ä;ÍÙ;§</Ç<÷<& = 4=%U={=›=¯=1Ä= ö=>#>#=>La>6®>å>6?A8?>z? ¹?+Ã?*ï?@ 2@<@1D@2v@ ©@µ@Î@"ã@*A1A@A PAqA A ™A£A»A ÛA èA%õAB+;B$gBŒB¦B ÅBÏBéBC+CHC!eC ‡C”C®C ·CÅCÎCâCD$D&_0X_‰_=©_;ç_:#`1^`,`H½`4a*;a"fa/‰a8¹a7òa*b>b Nbx\b:Õc@dXQdªdÃdXÕd<.e"keEŽeBÔe,f^DfU£f0ùf*gCCg.‡g‡¶gz>h\¹h9i>PiüimŒj¹újt´kw)lª¡lcLmï°mРn°qoÌ"p ïpxq_ rªirSs_hs.ÈsÔ÷tXÌua%vÖ‡v©^wÕx†ÞxâeytHzÀ½z\~{PÛ{¯,|UÜ|\2} }B}2à}~+(~T~o~Œ~ª~/Â~'ò~+F^z Œ+šÆEÕ€"9€)\€z†€+*-"X'{7£'ÛW‚\[‚N¸‚Nƒ1VƒAˆƒNʃ@„AZ„[œ„#ø„+…9H…_‚…3â…Y†:p†`«†[ ‡>h‡§‡.¹‡dè‡dMˆk²ˆq‰n‰]ÿ‰]ŠfŠ>mŠ4¬Š6áŠg‹B€‹8Ëgü‹(dŒ-Œ1»ŒAíŒ9/<iA¦Bè<+Ž:hŽ1£Ž-ÕŽ-B1Ht½"Û\þN[’€ª’+“BH“8‹“FÄ“< ”8H”!”u£” •4:•Fo•H¶•ÿ•z—8’—zË—xF˜–¿˜ V™dd™HÉ™8šKš^š`}š^Þš =›3J›3~›U²›tœ,}œ0ªœVÛœS20†·?ÔAžVž4ržV§ždþž{cŸdߟ#D =h ¦ S¹ O ¡Q]¡\¯¡M ¢tZ¢Ï¢3碣"*£'M£'u£G£.å£T¤fi¤tФTE¥1š¥6Ì¥8¦X<¦K•¦Rá¦74§Al§W®§G¨LN¨*›¨ƨ$å¨) ©a4©&–©'½©å©1ú©k,ªi˜ª=«E@«S†«Ú«Iã«'-¬iU¬>¿¬Jþ¬CI­a­"ï­‘®R¤®…÷®r}¯cð¯6T°A‹°ͰFÖ°L±nj±Ù±jë±4V²G‹² Ó²Yà²*:³Ke³M±³lÿ³Tl´0Á´*ò´`µ~µ&µW´µ\ ¶^i¶`ȶ`)·dŠ·ï·Fo¸L¶¸J¹jN¹1¹¹]ë¹LIºW–º[îº?J»¤Š»F/¼v¼>’¼)Ѽ&û¼~"½±¡½4S¾7ˆ¾ À¾˾"å¾&¿P/¿[€¿EÜ¿O"À`rÀÓÀuæÀ@\Á,ÁHÊÁJÂ7^Â*–ÂkÁÂ--Ã3[Ã'Ã)·Ã)áÃK ÄQWÄ.©ÄwØÄ)PÅSzÅÎÅRåÅr8Æ‹«Æ‹7ÇIÃÇ“ ȡȼÈIÔÈbÉÉI–ÉWàÉ-8Ê fÊEqÊ·Ê>ÏÊBËAQËG“Ë+ÛË:ÌtBÌQ·Ì{ Í=…Í8ÃÍRüÍ,OÎ*|ÎN§Î\öÎbS϶ÏFTÐ4›ÐAÐÐHÑj[Ñ~ÆÑ6EÒb|ÒßÒ9úÒ!4Ó€VÓ&×ÓMþÓeLÔ.²ÔáÔ›êÔ—†Õ™ÖQ¸ÖS ×S^×o²×"Ø[;ØN—Ø?æØB&ÙiÙ:~Ùn¹Ùa(Ú^ŠÚBéÚI,Û]vÛ\ÔÛ:1ÜQlÜd¾Ü#Ý;³Ý>ïÝf.Þ7•Þ{ÍÞUIßRŸßeòßXàBvàa¹àAá•]á¦óᦚâxAã_ºãÏä_êäcJåV®å_æheægÎæA6ç.xç§ç’’ž­u› ÙfŠœ´hcÓ='6݉#‰€“þEAf—)«$­¡É ~‘à k©µŒ9|jè2e-S„&vs•Ü`N¡H !š¨' ¦1uD§ô{}&.Y« Ïÿê?V¶50 mO¾v…JõK‡سöºxWQ ]tr–9 {C4ƒB±ÂMT†,\Z0š˰q:¨ó œU71ÌrHÛl™<:øò¿3B¢|/æjcP¸¯g5²Š—ç(+Áb-[+@†}~ŽzÊ™bFYä>n›"*]€,˜íÑlðQ =£‹Ldaã`8Ð÷åZÍ”#©@%ÎgnMÃsª_ÕD\S®ùTR„^7‚Ò ‹ _kEKž¬Vh6$¤/dwŸŸXúƒN4R¢^xtëLª®Ö»‘q*Åâ>W[ì§¹‡Ô·˜ÇF;!3PJe•y‚ÆoG¥ ;¥¼£I”ŽpˆéĈ"ß×GÚŒ“zÀo)ÞmUXa8¤Aý¬ip2(ïO–IiȦ…y½.ñîü%áCûw<? # %u 'vpath' search paths. # %u implicit rules, %u (%.1f%%) terminal. # %u pattern-specific variable values # Directories # Files # Finished Make data base on %s # General ('VPATH' variable) search path: # # Implicit Rules # Make data base, printed on %s # No general ('VPATH' variable) search path. # No implicit rules. # No pattern-specific variable values. # Pattern-specific Variable Values # VPATH Search Paths # Variables # files hash-table stats: # %s No strcache buffers %s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu B %s strcache performance: lookups = %lu / hit rate = %lu%% Counted %d args in failed launch This program built for %s This program built for %s (%s) Unhandled exception filter called from program %s ExceptionCode = %lx ExceptionFlags = %lx ExceptionAddress = 0x%p --debug[=FLAGS] Print various types of debugging information. --no-print-directory Turn off -w, even if it was turned on implicitly. --no-silent Echo recipes (disable --silent mode). --trace Print tracing information. --warn-undefined-variables Warn when an undefined variable is referenced. -B, --always-make Unconditionally make all targets. -C DIRECTORY, --directory=DIRECTORY Change to DIRECTORY before doing anything. -E STRING, --eval=STRING Evaluate STRING as a makefile statement. -I DIRECTORY, --include-dir=DIRECTORY Search DIRECTORY for included makefiles. -L, --check-symlink-times Use the latest mtime between symlinks and target. -O[TYPE], --output-sync[=TYPE] Synchronize output of parallel jobs by TYPE. -R, --no-builtin-variables Disable the built-in variable settings. -S, --no-keep-going, --stop Turns off -k. -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE Consider FILE to be infinitely new. -b, -m Ignored for compatibility. -d Print lots of debugging information. -e, --environment-overrides Environment variables override makefiles. -f FILE, --file=FILE, --makefile=FILE Read FILE as a makefile. -h, --help Print this message and exit. -i, --ignore-errors Ignore errors from recipes. -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no arg. -k, --keep-going Keep going when some targets can't be made. -l [N], --load-average[=N], --max-load[=N] Don't start multiple jobs unless load is below N. -n, --just-print, --dry-run, --recon Don't actually run any recipe; just print them. -o FILE, --old-file=FILE, --assume-old=FILE Consider FILE to be very old and don't remake it. -p, --print-data-base Print make's internal database. -q, --question Run no recipe; exit status says if up to date. -r, --no-builtin-rules Disable the built-in implicit rules. -s, --silent, --quiet Don't echo recipes. -t, --touch Touch targets instead of remaking them. -v, --version Print the version number of make and exit. -w, --print-directory Print the current directory. Date %s Ignoring VPATH name '%s'. uid = %d, gid = %d, mode = 0%o. (built-in): (core dumped) (don't care) (from '%s', line %lu) (from '%s', line %lu): (ignored) (name might be truncated) (no default goal) (no ~ expansion) (remote) (search path) files, impossibilities impossibilities in %lu directories. so far.# A default, MAKEFILES, or -include/sinclude makefile.# Also makes:# Builtin rule# Command line target.# Dependencies recipe running (THIS IS A BUG).# Failed to be updated.# File does not exist.# File has been updated.# File has not been updated.# File is an intermediate prerequisite.# File is very old.# Implicit rule search has been done.# Implicit rule search has not been done.# Implicit/static pattern stem: '%s' # Invalid value in 'command_state' member!# Last modified %s # Modification time never checked.# Needs to be updated (-q is set).# Phony target (prerequisite of .PHONY).# Precious file (prerequisite of .PRECIOUS).# Recipe currently running (THIS IS A BUG).# Successfully updated.# recipe to execute# %s (device %d, inode [%d,%d,%d]): # %s (device %d, inode [%d,%d,%d]): could not be opened. # %s (device %ld, inode %ld): # %s (device %ld, inode %ld): could not be opened. # %s (key %s, mtime %I64u): # %s (key %s, mtime %I64u): could not be opened. # %s: could not be stat'd. # No 'vpath' search paths.# Not a target:# hash-table stats: # # variable set hash-table stats: $SHELL changed (was '%s', now '%s') %s (line %d) Bad shell context (!unixy && !batch_mode_shell) %s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B %s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B %s other used: total = %lu B / count = %lu / avg = %lu B %s%s: %s%s: %s%s: Entering an unknown directory %s: Entering directory '%s' %s: Field '%s' not cached: %s%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p) %s: Leaving an unknown directory %s: Leaving directory '%s' %s: Timestamp out of range; substituting %s%s: failed to load%s: illegal option -- %c %s: invalid option -- %c %s: option '%c%s' doesn't allow an argument %s: option '%s' is ambiguous %s: option '%s' requires an argument %s: option '--%s' doesn't allow an argument %s: option '-W %s' doesn't allow an argument %s: option '-W %s' is ambiguous %s: option requires an argument -- %c %s: target '%s' does not exist%s: unrecognized option '%c%s' %s: unrecognized option '--%s' %s: update target '%s' due to: %s%s: user %lu (real %lu), group %lu (real %lu) %sBuilt for %s %sBuilt for %s (%s) %sLicense GPLv3+: GNU GPL version 3 or later %sThis is free software: you are free to change and redistribute it. %sThere is NO WARRANTY, to the extent permitted by law. %sNo rule to make target '%s'%s%sNo rule to make target '%s', needed by '%s'%s%s[%s: %s] Error %d%s%s[%u]: Entering an unknown directory %s[%u]: Entering directory '%s' %s[%u]: Leaving an unknown directory %s[%u]: Leaving directory '%s' '%s' is up to date.'override' directive*** Archive member '%s' may be bogus; not deleted*** Break. *** Deleting file '%s'*** Deleting intermediate file '%s'*** Waiting for unfinished jobs....*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp*** [%s] Archive member '%s' may be bogus; not deleted*** [%s] Deleting file '%s'*** mixed implicit and normal rules: deprecated syntax-O[TYPE] (--output-sync[=TYPE]) is not configured for this build.-warning, you may have to re-enable CTRL-Y handling from DCL. . Stop. .DEFAULT_GOAL contains more than one target.LIBPATTERNS element '%s' is not a pattern; using VPATH name '%s'AbortedAccess violation: read operation at address 0x%p Access violation: write operation at address 0x%p Alarm clockAppend %.*s and cleanup Append output to %s Avoiding implicit rule recursion. BUG: num_pattern_rules is wrong! %u != %uBUILTIN CD %s Bad system callBatch file contents: @echo off Batch file contents:%s %s Broken pipeBus errorCPU time limit exceededCannot create a temporary file Child accessChild exitedCircular %s <- %s dependency dropped.Cleaning up temp batch file %s Cleaning up temp batch file %s failed (%d) Cleaning up temporary batch file %s Collisions=%lu/%lu=%.0f%%Considering target file '%s'. ContinuedCould not restore stderr Could not restore stdin Could not restore stdout Couldn't change back to original directory.CreatePipe() failed (e=%ld) Creating temporary batch file %s Current timeCustoms won't export: %s DCL: %s Danger signalEMT trapEmpty function nameEmpty symbol name for load: %sExecuting %s instead Failed to load symbol %s from %s: %sFailed to open global symbol table: %sFailed to remake makefile '%s'.Failed to remake target file '%s'. File '%s' does not exist. File '%s' was considered already. File size limit exceededFinished prerequisites of target file '%s'. Finished updating file '%s'. Floating point co-processor not availableFloating point exceptionFound an implicit rule for '%s'. Found prerequisite '%s' as VPATH '%s' Function name too long: %sGiving up on target file '%s'. HangupI/O possibleIOT trapIllegal InstructionIncluded makefile '%s' was not found.Information requestInitialized accessInterruptInvalid function name: %sInvalid maximum argument count (%u) for function %sInvalid minimum argument count (%u) for function %sJobserver client (fds %d,%d) Jobserver client (semaphore %s) Jobserver slots limited to %d KilledLive child %p (%s) PID %s %s Load=%lu/%lu=%.0f%%, Loaded object %s is not declared to be GPL compatibleLoading symbol %s from %s Looking for a rule with intermediate file '%s'. Looking for an implicit rule for '%s'. Looking for archive-member implicit rule for '%s'. Make accessMakefile '%s' might loop; not remaking it. Makefile '%s' was not foundMakefile from standard input specified twice.Making '%s' due to always-make flag. Malformed target-specific variable definitionMember '%s'%s: %ld bytes at %ld (%ld). Must remake target '%s'. NoNo implicit rule found for '%s'. No need to remake target '%s'No recipe for '%s' and no prerequisites actually changed. No targetsNo targets specified and no makefile foundNothing to be done for '%s'.Obtained token for child %p (%s). Options: Parallel jobs (-j) are not supported on this platform.Power failurePrerequisite '%s' is newer than target '%s'. Prerequisite '%s' is older than target '%s'. Prerequisite '%s' is order-only for target '%s'. Prerequisite '%s' of target '%s' does not exist. Profiling timer expiredPruning file '%s'. Putting child %p (%s) PID %s%s on the chain. QuitRe-executing[%u]:Reading makefile '%s'Reading makefiles... Reaping losing child %p PID %s %s Reaping winning child %p PID %s %s Recently tried and failed to update file '%s'. Recipe for '%s' will be ignored in favor of the one for '%s'.Recipe for file '%s' was found by implicit rule search,Recipe has too many lines (%ud)Recipe of '%s' is being run. Recipe was specified for file '%s' at %s:%lu,Recursive variable '%s' references itself (eventually)Rehash=%u, Rejecting impossible implicit prerequisite '%s'. Rejecting impossible rule prerequisite '%s'. Released token for child %p (%s). Removing child %p PID %s%s from chain. Removing intermediate files... Report bugs to Resetting to single job (-j1) mode.Resource lostSIGPHONESIGWINDSegmentation faultSkipping UTF-8 BOM in makefile '%s' Skipping UTF-8 BOM in makefile buffer Stem too long: '%s%.*s'. Still updating file '%s'. StoppedStopped (signal)Stopped (tty input)Stopped (tty output)Successfully remade target file '%s'. Symbolic links not supported: disabling -L.Target '%s' is double-colon and has no prerequisites. Target '%s' not remade because of errors.Target file '%s' needs to be remade under -q. TerminatedThe 'load' operation is not supported on this platform.The prerequisites of '%s' are being made. Trace/breakpoint trapTrying implicit prerequisite '%s'. Trying pattern rule with stem '%.*s'. Trying rule prerequisite '%s'. Updating goal targets.... Updating makefiles.... Urgent I/O conditionUsage: %s [options] [target] ... User accessUser defined signal 1User defined signal 2Using default commands for '%s'. Using default recipe for '%s'. Virtual timer expiredWarning: File '%s' has modification time %s s in the futureWindow changedattempt to use unsupported feature: '%s'automaticbut '%s' is now considered the same file as '%s'.can't allocate %lu bytes for hash table: memory exhaustedcan't rename double-colon '%s' to single-colon '%s'can't rename single-colon '%s' to double-colon '%s'cannot enforce load limit: cannot enforce load limits on this operating systemclose: %s: %scommand linecreating jobs pipecreating jobserver semaphore: (Error %ld: %s)defaultduping jobs pipeempty string invalid as file nameempty variable nameenvironmentenvironment under -eextraneous '%s'extraneous text after '%s' directiveextraneous text after 'define' directiveextraneous text after 'endef' directivefile: invalid file operation: %sfile: missing filenamefile: too many argumentsfind_and_set_shell() path search set default_shell = %s find_and_set_shell() setting default_shell = %s first argument to 'word' function must be greater than 0fopen (temporary file)fwrite (temporary file)grouped targets must provide a recipeguile: Evaluating '%s' guile: Expanding '%s' init jobserver pipeinsufficient number of arguments (%d) to function '%s'internal error: invalid --jobserver-auth string '%s'internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)invalid syntax in conditionaljob server shut downjobserver pipelinelbr$ini_control() failed with status = %dlbr$set_module() failed to extract module info, status = %dmake reaped child pid %s, still waiting for pid %s makefilemissing 'endef', unterminated 'define'missing 'endif'missing rule before recipemissing separatormissing separator (did you mean TAB instead of 8 spaces?)missing target patternmixed implicit and normal rulesmixed implicit and static pattern rulesmultiple target patternsnono more file handles: could not duplicate stderr no more file handles: could not duplicate stdin no more file handles: could not duplicate stdout non-numeric first argument to 'word' functionnon-numeric first argument to 'wordlist' functionnon-numeric second argument to 'wordlist' functiononly one 'else' per conditionalopen: %s: %sprerequisites cannot be defined in recipesprocess_easy() failed to launch process (e=%ld) pselect jobs piperead jobs piperead: %s: %srecipe commences before first targetrelease jobserver semaphore: (Error %ld: %s)semaphore or child process wait: (Error %ld: %s)spawnvpe: environment space might be exhaustedsys$search() failed with %d target '%s' doesn't match the target patterntarget '%s' given more than once in the same ruletarget file '%s' has both : and :: entriestarget pattern contains no '%%'the '%s%s' option requires a non-empty string argumentthe '-%c' option requires a positive integer argumenttouch archive member is not available on VMStouch: '%s' is not a valid archivetouch: Archive '%s' does not existtouch: Bad return code from ar_member_touch on '%s'touch: Member '%s' does not exist in '%s'unable to open library '%s' to lookup member status %dunimplemented on this platform: function '%s'unknown debug level specification '%s'unknown output-sync type '%s'unknown signalunlink (temporary file): unterminated call to function '%s': missing '%c'unterminated variable referencewarning: Clock skew detected. Your build may be incomplete.warning: -j%d forced in makefile: resetting jobserver mode.warning: -j%d forced in submake: resetting jobserver mode.warning: NUL character seen; rest of line ignoredwarning: ignoring old recipe for target '%s'warning: jobserver unavailable: using -j1. Add '+' to parent make rule.warning: overriding group membership for target '%s'warning: overriding recipe for target '%s'warning: undefined variable '%.*s'windows32_openpipe(): process_init_fd() failed windows32_openpipe: DuplicateHandle(Err) failed (e=%ld) windows32_openpipe: DuplicateHandle(In) failed (e=%ld) write error: stdoutwrite jobserverwrite: %s: %sProject-Id-Version: make 4.2.93 Report-Msgid-Bugs-To: bug-make@gnu.org PO-Revision-Date: 2020-01-04 12:41+0100 Last-Translator: Alexander Shopov Language-Team: Bulgarian Language: bg MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. # %u пътища за търÑене във „VPATH“ # %u вградени правила, %u (%.1f%%) крайни. # %u ÑтойноÑти на променливи, завиÑещи от шаблона # Директории # Файлове # Край на информациÑта за „make“, отпечатана на %s # Общ път за търÑене (във „VPATH“) # # Вградени правила # Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° „make“, отпечатана на %s # ÐÑма общ път (във „VPATH“) за търÑене # ÐÑма вградени правила. # ÐÑма ÑтойноÑти на променливи, завиÑещи от шаблона # СтойноÑти на променливи, завиÑещи от шаблона # Пътища за търÑене „VPATH“ # Променливи # ÑтатиÑтика за речника за файлове: # %s ÐÑма буфери за „strcache“ %s буфери за кеша за низове: %lu (%lu) / низове = %lu / Ñъхранение = %lu B / Ñредно = %lu B %s производителноÑÑ‚ на кеша за низове: търÑÐµÐ½Ð¸Ñ = %lu / Ð½Ð°Ð¼Ð¸Ñ€Ð°Ð½Ð¸Ñ = %lu%% При неуÑпешно Ñтартиране Ñа изброени %d аргумента Тази програма е изградена за %s Тази програма е изградена за %s (%s) Филтърът за необработени Ð¸Ð·ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðµ извикан от програмата „%s“ Код на изключение = %lx Флагове на изключение = %lx ÐÐ´Ñ€ÐµÑ Ð½Ð° изключение = 0x%p --debug[=ФЛÐГОВЕ] вид Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° изчиÑтване на грешки --no-print-directory изключване на „-w“, дори ако вградената функционалноÑÑ‚ Ñ Ðµ включила --no-silent извеждане на рецептите (изключване на „--silent“) --trace извеждане на Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° изчиÑтване на грешки --warn-undefined-variables предупреждаване при използването на незададена променлива -B, --always-make безуÑловно изграждане на вÑички цели -C ДИРЕКТОРИЯ, --directory=ДИРЕКТОРИЯ преминаване към тази ДИРЕКТОРИЯ, преди да Ñе прави каквото и да е --eval=ÐИЗ, --eval=ÐИЗ изчиÑлÑване на ÐИЗа като израз във файловете управлÑващи изграждането (makefile) -I ДИРЕКТОРИЯ, --include-dir=ДИРЕКТОРИЯ търÑене на вмъкнатите файлове в ДИРЕКТОРИЯта -L, --check-symlink-times използване на минималното време на промÑна измежду Ñимволна връзка и целта ѝ -O[ВИД], --output-sync[=ВИД] ВИД ÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½Ð° изхода от паралелните задачи -R, --no-builtin-variables изключване на вграденото задаване на променливи -S, --no-keep-going, --stop Изключване на „-k“ -W ФÐЙЛ, --what-if=ФÐЙЛ, --new-file=ФÐЙЛ, --assume-new=ФÐЙЛ Ñчитане на ФÐЙЛа за абÑолютно нов -b, -m преÑкача Ñе, за ÑъвмеÑтимоÑÑ‚ -d Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° изчиÑтване на грешки -e, --environment-overrides променливите от Ñредата да Ñа Ñ Ð¿Ñ€ÐµÐ²ÐµÑ Ð½Ð°Ð´ указаното във файловете управлÑващи изграждането (makefile) -f ФÐЙЛ, --file=ФÐЙЛ, --makefile=ФÐЙЛ ползване на този ФÐЙЛ да управлÑва изграждането (makefile) -h, --help извеждане на тази помощ и изход -i, --ignore-errors незачитане на грешките от рецептите -j [БРОЙ], --jobs[=БРОЙ] ограничаване на задачите до макÑимум този БРОЙ, без аргумент — без Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ -k, --keep-going продължаване дори и нÑкои от целите не могат да Ñе изградÑÑ‚ -l [N], --load-average[=N], --max-load[=N] множеÑтво задачи Ñе Ñтартират, Ñамо ако натоварването е ≤N -n, --just-print, --dry-run, --recon извеждане на целите без изпълнение -o ФÐЙЛ, --old-file=ФÐЙЛ, --assume-old=ФÐЙЛ без преизграждане на ФÐЙЛа, който да Ñе Ñчита за много Ñтар -p, --print-data-base извеждане на вътрешната база от данни на „make“ -q, --question без изпълнение на цели, Ñамо изходниÑÑ‚ код да указва дали те Ñа актуални -r, --no-builtin-rules изключване на вградените правила -s, --silent, --quiet без извеждане на рецептите -t, --touch обновÑване на информациÑта чрез „touch“ вмеÑто ново изграждане -v, --version извеждане на верÑиÑта и изход -w, --print-directory извеждане на текущата Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð”Ð°Ñ‚Ð° %s ПреÑкачане на името от „VPATH“ „%s“. ИД_П = %d, ИД_ГР = %d, режим = 0%o. (вградено): (паметта е разтоварена) (без значение) (от „%s“, ред %lu) (от „%s“, ред %lu) (преÑкачане) (името може да е отÑечено) (нÑма Ñтандартна цел) (без замеÑтване на „~“) (отдалечено) (търÑене в път) файлове, пречки пречки в %lu директории. заÑега.# Стандартен, MAKEFILES или -include/sinclude makefile.# Също изгражда:# Вградено правило# Цел на ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¸Ñ Ñ€ÐµÐ´.# Рецептата за завиÑимоÑтите в момента Ñе изпълнÑва (това е ГРЕШКÐ)# ÐеуÑпешно обновÑване.# Файлът не ÑъщеÑтвува.# Файлът е обновен.# Файлът не е обновен.# Файлът е междинно изиÑкване.# Файлът е много Ñтар.# ТърÑенето във вградените правила е извършено.# ТърÑенето във вградените правила не е извършено.# Вградена/Ñтатична оÑнова на шаблон: „%s“ # Ðеправилна ÑтойноÑÑ‚ в член на „command_state“!# ПоÑледна промÑна на „%s“ # Времето на промÑна не е проверено.# ТрÑбва да бъде обновено („-q“ е зададена).# Фалшива цел (изиÑкване на „.PHONY“).# Ценен файл (изиÑкване на „.PRECIOUS“).# Рецептата в момента Ñе изпълнÑва (това е ГРЕШКÐ).# УÑпешно обновено.# рецепта за изпълнение# %s (уÑтройÑтво %d, i-възел [%d,%d,%d]): # %s (уÑтройÑтво %d, i-възел [%d,%d,%d]): не може да Ñе отвори. # %s (уÑтройÑтво %ld, i-възел %ld): # %s (уÑтройÑтво %ld, i-възел %ld): не може да Ñе отвори. # %s (ключ %s, време на промÑна %I64u): # %s (ключ %s, време на промÑна %I64u): не може да Ñе отвори. # „%s“: не може да Ñе получи Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ñ‡Ñ€ÐµÐ· „stat“. # ÐÑма пътища за търÑене във „VPATH“# Ðе е цел:# ÑтатиÑтика на речника: # # ÑтатиÑтика за множеÑтвото на променливите в речника: Променливата „SHELL“ е променена (бе „%s“, а Ñега е „%s“) %s (ред %d) неправилен контекÑÑ‚ на обвивката (!unixy && !batch_mode_shell) %s текущ буфер: размер = %hu B / ползвано = %hu B / брой = %hu / Ñредно = %u B %s други Ñвободни: общо = %lu B / макÑ. = %lu B / мин. = %lu B / Ñредно = %hu B %s други използвани: общо = %lu B / брой = %lu / Ñредно = %lu B %s%s: %s%s: %s%s: влизане в непозната Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ %s: влизане в Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ â€ž%s“ %s: полето „%s“ не е кеширано: %s%s: прихванато прекъÑване/изключение (код = 0x%lx, Ð°Ð´Ñ€ÐµÑ = 0x%p) %s: излизане от непозната Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ %s: излизане от Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ â€ž%s“ %s: времевото клеймо е извън диапазона, замеÑтва Ñе Ñ â€ž%s“%s: не може да Ñе зареди%s: непозволена Ð¾Ð¿Ñ†Ð¸Ñ â€” %c %s: неправилна Ð¾Ð¿Ñ†Ð¸Ñ â€” „%c“ %s: опциÑта „%c%s“ не приема аргумент %s: опциÑта „%s“ не е еднозначна %s: опциÑта „%s“ изиÑква аргумент %s: опциÑта „--%s“ не приема аргумент %s: опциÑта „-W %s“ не приема аргумент %s: опциÑта „-W %s“ не е еднозначна %s: опциÑта изиÑква аргумент — %c %s: целта „%s“ не ÑъщеÑтвува%s: непозната Ð¾Ð¿Ñ†Ð¸Ñ â€ž%c%s“ %s: непозната Ð¾Ð¿Ñ†Ð¸Ñ â€ž--%s“ %s: обновÑване на целта „%s“ заради: %s%s: потр. %lu (реално %lu), група %lu (реално %lu) %sИзградена за %s %sИзградена за %s (%s) %sЛиценз — Общ публичен лиценз на GNU (GNU GPL), както е публикуван от ФондациÑта за Ñвободен Ñофтуер — верÑÐ¸Ñ 3 на лиценза или (по ваше решение) по-къÑна верÑиÑ. %sТази програма е Ñвободен Ñофтуер. Можете да Ñ Ñ€Ð°Ð·Ð¿Ñ€Ð¾ÑтранÑвате и/или променÑте. %sÐ¢Ñ Ñе разпроÑтранÑва БЕЗ ÐИКÐКВИ ГÐРÐÐЦИИ доколкото е позволено от закона. %sÐÑма правило за изграждане на целта „%s“%s%sÐÑма правило за изграждане на целта „%s“, коÑто е необходима на „%s“%s%s[%s: %s] Грешка %d%s%s[%u]: влизане в непозната Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ %s[%u]: влизане в Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ â€ž%s“ %s[%u]: излизане от непозната Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ %s[%u]: излизане от Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ â€ž%s“ „%s“ нÑма нужда да Ñе обновÑва.директива „override“••• „%s“ може да е фалшива чаÑÑ‚ от архив — нÑма да бъде изтрита••• ПрекъÑване. ••• Изтриване на файл „%s“••• Изтриване на Ð¼ÐµÐ¶Ð´Ð¸Ð½Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð» „%s“••• Изчакване на незавършени задачи… ••• ПРЕДУПРЕЖДЕÐИЕ: файлът „.LOW_RESOLUTION_TIME“, указващ ниÑка разделителна ÑпоÑобноÑÑ‚ на времето „%s“, е Ñ Ð²Ñ€ÐµÐ¼ÐµÐ²Ð¾ клеймо Ñ Ð²Ð¸Ñока разделителна ÑпоÑобноÑт••• [%s] „%s“ може да е фалшива чаÑÑ‚ от архив — нÑма да бъде изтрита••• [%s] Изтриване на файл „%s“••• ÑмеÑване на вградени и обикновени правила: оÑтарÑл ÑинтакÑиÑопциÑта „-O[ВИД]“/„--output-sync[=ВИД]“ не е зададена за това изграждане- ПРЕДУПРЕЖДЕÐИЕ, вероÑтно трÑбва отново да включите управлението на CTRL-Y от „DCL“. . Край. Стандартната цел „.DEFAULT_GOAL“ Ñъдържа повече от една целЕлементът „%s“ за „.LIBPATTERNS“ не е шаблон; използва Ñе име от „VPATH“ „%s“<вградено>ПреуÑтановÑванеÐарушение на доÑтъпа: Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð·Ð° четене на Ð°Ð´Ñ€ÐµÑ 0x%p Ðарушение на доÑтъпа: Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð·Ð° Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° Ð°Ð´Ñ€ÐµÑ 0x%p ÐлармаДобавÑне на %.*s и изчиÑтване ДобавÑне на изхода към „%s“ ИзбÑгване на рекурÑÐ¸Ñ Ð²ÑŠÐ² вградените правила. ПРОГРÐМÐРГРЕШКÐ: „num_pattern_rules“ върна неправилен резултат! %u != %uВГРÐДЕÐРКОМÐÐДР„CD“ %s Грешно ÑиÑтемно извикванеСъдържание на файл за пакетна обработка: @echo off Съдържание на файла за пакетна обработка:%s %s ПрекъÑнат програмен каналГрешка в шинатаÐадвишаване на процеÑорното времеÐе може да Ñе Ñъздаде временен файл Дъщерен процеÑПреуÑтановен дъщерен процеÑЦикличната завиÑимоÑÑ‚ „%s“ ↠„%s“ Ñе преÑкача.ИзчиÑтване на временен файл за пакетна обработка „%s“ ÐеуÑпешно изчиÑтване на временен файл за пакетна обработка „%s“: %d ИзчиÑтване на временен файл за пакетна обработка „%s“ СъвпадениÑ=%lu/%lu=%.0f%%Разглеждане на Ñ†ÐµÐ»ÐµÐ²Ð¸Ñ Ñ„Ð°Ð¹Ð» „%s“ ПродълженСтандартната грешка не може да Ñе възÑтанови СтандартниÑÑ‚ вход не може да Ñе възÑтанови СтандартниÑÑ‚ изход не може да Ñе възÑтанови Ðевъзможно връщане към първоначалната директориÑнеуÑпешно извикване на „CreatePipe()“ failed (e=%ld) Ðе може да Ñе Ñъздаде временен файл за пакетна обработка в „%s“ Текущо времеМодулът нÑма да Ñе изнеÑе: %s „DCL“: %s Сигнал за опаÑноÑтЕмулирана инÑтрукциÑПразно име на функциÑПразно име на Ñимвол за зареждане: „%s“„%s“ Ñе изпълнÑва вмеÑто ÐеуÑпешно зареждане на Ñимвола „%s“ от „%s“: %sÐеуÑпешно отварÑне на глобалната таблица ÑÑŠÑ Ñимволи: %sÐеуÑпешно преÑъздаване на управлÑÐ²Ð°Ñ‰Ð¸Ñ Ð¸Ð·Ð³Ñ€Ð°Ð¶Ð´Ð°Ð½ÐµÑ‚Ð¾ файл „%s“ÐеуÑпешно преизграждане на Ñ†ÐµÐ»ÐµÐ²Ð¸Ñ Ñ„Ð°Ð¹Ð» „%s“ Файлът „%s“ не ÑъщеÑтвува. Файлът „%s“ вече е разгледан. Ðадвишаване на размера на файлИзиÑкваниÑта за Ñ†ÐµÐ»ÐµÐ²Ð¸Ñ Ñ„Ð°Ð¹Ð» „%s“ Ñа завършени. Завършване на обновÑването на файл „%s“. ЛипÑва копроцеÑор за чиÑла Ñ Ð¿Ð»Ð°Ð²Ð°Ñ‰Ð° запетаÑИзключение от плаваща запетаÑОткрито е вградено правило за „%s“. ИзиÑканото „%s“ е открито чрез „VPATH“ като „%s“ Името на функциÑта е твърде дълго: „%s“Отказ за изграждане на Ñ†ÐµÐ»ÐµÐ²Ð¸Ñ Ñ„Ð°Ð¹Ð» „%s“. ПрекъÑване на връзкатаВъзможен вх./изх.ПреуÑтановÑване (IOT)Ðеправилна инÑтрукциÑВмъкнатиÑÑ‚ управлÑващ изграждането файл „%s“ липÑваЗаÑвка за информациÑИнициализиран доÑтъпПрекъÑванеГрешно име на функциÑ: „%s“Ðеправилен макÑимален брой аргументи (%u) за функциÑта „%s“Ðеправилен минимален брой аргументи (%u) за функциÑта „%s“Клиент за Ñървър за задачи (fds %d,%d) Клиент на Ñървър за задачи (Ñемафор %s) Сървърът за задачи приема макÑимум %d Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð£Ð±Ð¸Ñ‚Ðезавършил дъщерен Ð¿Ñ€Ð¾Ñ†ÐµÑ %p (%s) ИД_ПР %s %s Ðатоварване=%lu/%lu=%.0f%%, ЗаредениÑÑ‚ обект „%s“ не е обÑвен като ÑъвмеÑтим Ñ ÐžÐŸÐ› (GPL)Зареждане на Ñимвола „%s“ от „%s“ ТърÑене на правило Ñ Ð¼ÐµÐ¶Ð´Ð¸Ð½ÐµÐ½ файл „%s“. ТърÑене на вградено правило за „%s“. ТърÑене на вградено правило по член на архив за „%s“. Задаване на доÑтъпУправлÑващиÑÑ‚ изграждането файл „%s“ може да зацикли, затова не Ñе преÑъздава. УправлÑващиÑÑ‚ изграждането файл „%s“ липÑваФайлът управлÑващ изграждането е зададен двукратно на ÑÑ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð¸Ñ Ð²Ñ…Ð¾Ð´.„%s“ Ñе изгражда наново поради флаг за изрично преизграждане. Ðеправилна Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ Ð½Ð° променлива, завиÑеща от целтаЧлен „%s“%s: %ld байта при %ld (%ld). Целта „%s“ трÑбва да Ñе преизгради. ÐÑмаÐе е открито вградено правило за „%s“. ÐÑма нужда за преизграждане на целта „%s“ÐÑма рецепта за „%s“ и никое от изиÑкваниÑта не е променено. ÐÑма целиÐе е зададена цел, а и липÑва управлÑващ изграждането файлÐÑма нищо за правене за „%s“.Получен е жетон за дъщерен Ð¿Ñ€Ð¾Ñ†ÐµÑ %p (%s). Опции: Тази ÑиÑтема не поддържа паралелни задачи („-j“).Проблем в захранванетоИзиÑкването „%s“ е по-ново от целта „%s“. ИзиÑкването „%s“ е по-Ñтаро от целта „%s“. ИзиÑкването „%s“ е Ñамо за поÑледователноÑÑ‚ за целта „%s“. ИзиÑкването „%s“ на целта „%s“ не ÑъщеÑтвува. Изтекъл профилиращ таймерОкаÑтрÑне на файл „%s“ ПоÑтавÑне на Ð´ÑŠÑ‰ÐµÑ€Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑ %p (%s) PID %s%s във веригата. СпиранеИзпълнение наново[%u]:Изчитане на файла управлÑващ изграждането „%s“Изчитане на файловете управлÑващи изграждането… Приключване на Ð¸Ð·Ð³ÑƒÐ±Ð¸Ð»Ð¸Ñ Ð´ÑŠÑ‰ÐµÑ€ÐµÐ½ Ð¿Ñ€Ð¾Ñ†ÐµÑ %p ИД_ПР %s %s Приключване на ÑÐ¿ÐµÑ‡ÐµÐ»ÐµÐ»Ð¸Ñ Ð´ÑŠÑ‰ÐµÑ€ÐµÐ½ Ð¿Ñ€Ð¾Ñ†ÐµÑ %p ИД_ПР %s %s Скорошен неуÑпешен опит за обновÑване на файла „%s“ Рецептата за „%s“ Ñе преÑкача, а Ñе ползва тази за „%s“.Рецептата за файла „%s“ бе открита при търÑене на вградените правила.Прекалено много редове в рецептата (%ud)Рецептата за „%s“ в момента Ñе изпълнÑва. Рецептата е указана за файл „%s“ при %s:%lu,РекурÑивната променлива „%s“ Ñочи Ñебе Ñи (в нÑкой момент)Преизграждане на речник=%u, ОтхвърлÑне на невъзможно вградено изиÑкване „%s“. ОтхвърлÑне на невъзможно изиÑкване „%s“. ОÑвобождаване на жетона за дъщерен Ð¿Ñ€Ð¾Ñ†ÐµÑ %p (%s). ИзчиÑтване на Ð´ÑŠÑ‰ÐµÑ€Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑ %p PID %s%s от веригата. Изтриване на междинните файлове… Съобщавайте за програмни грешки на . За грешки в българÑÐºÐ¸Ñ Ð¿Ñ€ÐµÐ²Ð¾Ð´ на . Преминаване към еднозадачен режим (-j1).Загубен реÑурÑПромÑна на ÑÑŠÑтоÑнието на линиÑтаПреоразмерен прозорецГрешка в разделÑнетоПреÑкачанe на знака за подредба на байтовете за UTF-8 (BOM) във файла „%s“ ПреÑкачанe на знака за подредба на байтовете за UTF-8 (BOM) в буфера на файла управлÑващ изграждането Твърде дълга оÑнова: „%s%.*s“. Ð’Ñе още Ñе обновÑва файл „%s“. СпрÑнСпрÑн (Ñигнал)Спиране (вход от tty)Спиране (изход към tty)УÑпешно преизграждане на Ñ†ÐµÐ»ÐµÐ²Ð¸Ñ Ñ„Ð°Ð¹Ð» „%s“ Ðе Ñе поддържат Ñимволни връзки: „-L“ Ñе изключва.Целта е „%s“ е „::“ и нÑма изиÑкваниÑ. Целта „%s“ не е преизградена поради грешки.ЦелевиÑÑ‚ файл „%s“ трÑбва да Ñе преизгради при „-q“. ПрекратенОперациÑта за зареждане („load“) не Ñе поддържа на тази платформаИзиÑкваниÑта на „%s“ Ñе изграждат. ПрекъÑване за траÑиранеОпитване на вграденото изиÑкване „%s“. Опит за шаблонно правило Ñ Ð¾Ñнова „%.*s“. Опитване на изиÑкването „%s“. ОбновÑване на целите… ОбновÑване на управлÑващите изграждането файлове (makefile)… Спешно вх./изх. ÑÑŠÑтоÑниеУпотреба: %s [ОПЦИЯ]… [ФÐЙЛ]… ПотребителÑки доÑтъпПотребителÑки Ñигнал 1ПотребителÑки Ñигнал 2Използват Ñе Ñтандартни команди за „%s“. Използване на Ñтандартната рецепта за „%s“. Изтекъл виртуален таймерПРЕДУПРЕЖДЕÐИЕ: файлът „%s“ е Ñ Ð²Ñ€ÐµÐ¼Ðµ на промÑна %s Ñек. в бъдещетоПреоразмерен прозорецопит за ползване на „%s“, което не Ñе поддържаавтоматичноно Ñега „%s“ Ñе Ñчита за ÑÑŠÑ‰Ð¸Ñ Ñ„Ð°Ð¹Ð» като „%s“.не могат да Ñе заделÑÑ‚ %lu байта за речник — паметта е изчерпанадвойното двоеточие „%s“ не може да Ñе преименува на единично двоеточие „%s“единичното двоеточие „%s“ не може да Ñе преименува на двойно двоеточие „%s“ограничението не може да бъде наложено: на тази операционна ÑиÑтема не могат да Ñе налагат Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð·Ð° натоварванетозатварÑне: %s: %sкоманден редÑъздаване на програмен канал ÑÑŠÑ Ð·Ð°Ð´Ð°Ñ‡Ð¸Ñъздаване на Ñемафор за Ñървър за задачи: (грешка %ld: %s)Ñтандартнодублиране на програмен канал ÑÑŠÑ Ð·Ð°Ð´Ð°Ñ‡Ð¸Ð·Ð°Ð´Ð°Ð²Ð°Ð½ÐµÑ‚Ð¾ на празен низ за име на файл е грешкапразно име на променливаÑредаобкръжението е твърде голÑмо за „exec“излишен „%s“излишен текÑÑ‚ Ñлед директива „%s“излишен текÑÑ‚ Ñлед директива „define“излишен текÑÑ‚ Ñлед директива „endef“файл: неправилно дейÑтвие върху файл: %sфайл: липÑва име на файлфайл: прекалено много аргументи„find_and_set_shell()“ — търÑенето в Ð¿ÑŠÑ‚Ñ Ð·Ð°Ð´Ð°Ð²Ð° Ñтандартна обвивка = %s „find_and_set_shell()“ задава Ñтандартна обвивка = %s първиÑÑ‚ аргумент към функциÑта „word“ трÑбва да е положително чиÑлоотварÑне („fopen“ на временен файл)Ð·Ð°Ð¿Ð¸Ñ („fwrite“ на временен файл)целите в група трÑбва да предоÑтавÑÑ‚ рецептаguile: изчиÑлÑване на „%s“ guile: замеÑтване на „%s“ Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½Ð° канал за Ñървър за задачинедоÑтатъчен брой аргументи (%d) към функциÑта „%s“ВЪТРЕШÐРГРЕШКÐ: неправилен низ към „--jobserver-auth“: „%s“ВЪТРЕШÐРГРЕШКÐ: Ñемафорът на Ñървъра за задачи не може да Ñе отвори „%s“: (грешка %ld: %s)неправилен ÑинтакÑÐ¸Ñ Ð½Ð° уÑловен изразÑпиране на Ñървъра за задачипрограмен канал на Ñървър за задачи„lbr$ini_control()“ завърши неуÑпешно Ñ ÐºÐ¾Ð´ = %d„lbr$set_module()“ не може да получи Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° модула, код = %d„make“ приключи дъщерен Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€ %s, вÑе още Ñе чака за %s файл управлÑващ изграждането„endef“ липÑва — нÑÐºÐ¾Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð° „define“ не е завършеналипÑващ „endif“липÑващо правило преди рецепталипÑва разделителлипÑва разделител (дали не трÑбва да замените 8 интервала Ñ Ñ‚Ð°Ð±ÑƒÐ»Ð°Ñ‚Ð¾Ñ€?)липÑва целеви шаблонвградените и изричните правила Ñа ÑмеÑенивградените и правилата ÑÑŠÑ Ñтатични шаблони Ñа ÑмеÑенимножеÑтво целеви шаблонинÑманÑма реÑÑƒÑ€Ñ Ð·Ð° отварÑне на повече файлове: Ñтандартната грешка не може да Ñе дублира нÑма реÑÑƒÑ€Ñ Ð·Ð° отварÑне на повече файлове: ÑтандартниÑÑ‚ вход не може да Ñе дублира нÑма реÑÑƒÑ€Ñ Ð·Ð° отварÑне на повече файлове: ÑтандартниÑÑ‚ изход не може да Ñе дублира нечиÑлов първи аргумент към функциÑта „word“нечиÑлов първи аргумент за функциÑта „wordlist“нечиÑлов втори аргумент за функциÑта „wordlist“може да има макÑимално една директива „else“ за уÑловен изразотварÑне: %s: %sизиÑкваниÑта не могат да Ñе дефинират в рецептите„process_easy()“ не уÑÐ¿Ñ Ð´Ð° Ñтартира Ð¿Ñ€Ð¾Ñ†ÐµÑ (e=%ld) грешка в „pselect“ в канала за задачигрешка при четене в канала за задачичетене: %s: %sрецепта почва преди първата целоÑвобождаване на Ñемафора на Ñървъра за задачи: (грешка %ld: %s)изчакване на Ñемафор или дъщерен процеÑ: (Грешка %ld: %s)spawnvpe: проÑтранÑтвото на Ñредата може да е изчерпано„sys$search()“ завърши неуÑпешно Ñ ÐºÐ¾Ð´ %d целта „%s“ не Ñъвпада Ñ Ñ†ÐµÐ»Ñ‚Ð° на шаблонацелта „%s“ е дадена повече от веднъж в едно правилоцелевиÑÑ‚ файл „%s“ Ñъдържа запиÑи и Ñ â€ž:“, и Ñ â€ž::“целевиÑÑ‚ шаблон не Ñъдържа „%%“опциÑта „%s%s“ изиÑква непразен аргумент-низопциÑта „%c“ изиÑква положителен, целочиÑлен аргументобновÑването на информациÑта чрез „touch“ на член на архив не Ñе поддържа под VMS„touch“: „%s“ не е поддържан архив„touch“: архивът „%s“ не ÑъщеÑтвува„touch“: неправилен изходен код от „ar_member_touch“ върху „%s“„touch“: в „%2$s“ нÑма член „%1$s“библиотеката „%s“ не може да Ñе отвори за проверката на член, код = %dбез Ñ€ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½Ð° тази платформа: Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ â€ž%s“неправилно ниво за изчиÑтване на грешки „%s“непознат вид ÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ â€ž%s“ към опциÑта „--output-sync“непознат Ñигнализтриване („unlink“ на временен файл): незавършено извикване на функциÑта „%s“: липÑва „%c“незавършен указател към променливаПРЕДУПРЕЖДЕÐИЕ: проблем ÑÑŠÑ ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ Ñ‡Ð°Ñовник — изграждането може да е непълно.ПРЕДУПРЕЖДЕÐИЕ: в подизграждане е зададено „-j%d“. Режимът на Ñървър за задачи Ñе изключва.ПРЕДУПРЕЖДЕÐИЕ: в подизграждане е зададено „-j%d“. Режимът на Ñървър за задачи Ñе изключва.ПРЕДУПРЕЖДЕÐИЕ: нулев знак NUL, оÑтаналата чаÑÑ‚ на реда Ñе преÑкачаПРЕДУПРЕЖДЕÐИЕ: Ñтарата рецепта за „%s“ Ñе преÑкачаПРЕДУПРЕЖДЕÐИЕ: Ñървърът за задачи не е наличен, ползва Ñе „-j1“. Добавете „+“ към родителÑкото правило на „make“.ПРЕДУПРЕЖДЕÐИЕ: замеÑтване на групата на целта „%s“ПРЕДУПРЕЖДЕÐИЕ: замеÑтване на рецептата за целта „%s“ПРЕДУПРЕЖДЕÐИЕ: недефинирана променлива „%.*s“„windows32_openpipe()“: неуÑпешно извикване на „process_init_fd()“ „windows32_openpipe“: неуÑпешно извикване на „DuplicateHandle(Out)“ (e=%ld) „windows32_openpipe“: неуÑпешно извикване на „DuplicateHandle(In)“ (e=%ld) грешка при запиÑ: Ñтандартна Ð³Ñ€ÐµÑˆÐºÐ°Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° Ñървър за задачизапазване: %s: %smake-4.3/po/Makefile.in.in0000644000175000017500000004155313611136462012321 00000000000000# Makefile for PO directory in any package using GNU gettext. # Copyright (C) 1995-1997, 2000-2007, 2009-2010 by Ulrich Drepper # # This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU General Public # License but which still want to provide support for the GNU gettext # functionality. # 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.19 GETTEXT_MACRO_VERSION = 0.19 PACKAGE = @PACKAGE@ VERSION = @VERSION@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ SED = @SED@ SHELL = /bin/sh @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ datadir = @datadir@ localedir = @localedir@ gettextsrcdir = $(datadir)/gettext/po INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ # We use $(mkdir_p). # In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as # "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions, # @install_sh@ does not start with $(SHELL), so we add it. # In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined # either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake # versions, $(mkinstalldirs) and $(install_sh) are unused. mkinstalldirs = $(SHELL) @install_sh@ -d install_sh = $(SHELL) @install_sh@ MKDIR_P = @MKDIR_P@ mkdir_p = @mkdir_p@ GMSGFMT_ = @GMSGFMT@ GMSGFMT_no = @GMSGFMT@ GMSGFMT_yes = @GMSGFMT_015@ GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT)) MSGFMT_ = @MSGFMT@ MSGFMT_no = @MSGFMT@ MSGFMT_yes = @MSGFMT_015@ MSGFMT = $(MSGFMT_$(USE_MSGCTXT)) XGETTEXT_ = @XGETTEXT@ XGETTEXT_no = @XGETTEXT@ XGETTEXT_yes = @XGETTEXT_015@ XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT)) MSGMERGE = msgmerge MSGMERGE_UPDATE = @MSGMERGE@ --update MSGINIT = msginit MSGCONV = msgconv MSGFILTER = msgfilter POFILES = @POFILES@ GMOFILES = @GMOFILES@ UPDATEPOFILES = @UPDATEPOFILES@ DUMMYPOFILES = @DUMMYPOFILES@ DISTFILES.common = Makefile.in.in remove-potcdate.sin \ $(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3) DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \ $(POFILES) $(GMOFILES) \ $(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3) 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: .SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update .po.mo: @echo "$(MSGFMT) -c -o $@ $<"; \ $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@ .po.gmo: @lang=`echo $* | sed -e 's,.*/,,'`; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.po"; \ cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo .sin.sed: sed -e '/^#/d' $< > t-$@ mv t-$@ $@ 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@" \ || { 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; \ } # $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no # internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because # we don't want to bother translators with empty POT files). We assume that # LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty. # In this case, stamp-po is a nop (i.e. a phony target). # stamp-po is a timestamp denoting the last time at which the CATALOGS have # been loosely updated. Its purpose is that when a developer or translator # checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS, # "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent # invocations of "make" will do nothing. This timestamp would not be necessary # if updating the $(CATALOGS) would always touch them; however, the rule for # $(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 || { \ echo "touch stamp-po" && \ echo timestamp > stamp-poT && \ mv stamp-poT stamp-po; \ } # Note: Target 'all' must not depend on target '$(DOMAIN).pot-update', # otherwise packages like GCC can not be built if only parts of the source # have been downloaded. # 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 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_prefix=''; \ fi; \ if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \ msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \ else \ msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \ fi; \ case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ --files-from=$(srcdir)/POTFILES.in \ --copyright-holder='$(COPYRIGHT_HOLDER)' \ --msgid-bugs-address="$$msgid_bugs_address" \ ;; \ *) \ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ --files-from=$(srcdir)/POTFILES.in \ --copyright-holder='$(COPYRIGHT_HOLDER)' \ --package-name="$${package_prefix}@PACKAGE@" \ --package-version='@VERSION@' \ --msgid-bugs-address="$$msgid_bugs_address" \ ;; \ esac test ! -f $(DOMAIN).po || { \ if test -f $(srcdir)/$(DOMAIN).pot; then \ sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \ sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \ if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \ rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \ else \ rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ fi; \ else \ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ fi; \ } # This rule has no dependencies: we don't need to update $(DOMAIN).pot at # every "make" invocation, only create it when it is missing. # Only "make $(DOMAIN).pot-update" or "make dist" will force an update. $(srcdir)/$(DOMAIN).pot: $(MAKE) $(DOMAIN).pot-update # 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): $(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) \ && { case `$(MSGMERGE_UPDATE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \ *) \ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot;; \ esac; \ }; \ else \ $(MAKE) $${lang}.po-create; \ fi install: install-exec install-data install-exec: install-data: install-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ for file in $(DISTFILES.common) Makevars.template; do \ $(INSTALL_DATA) $(srcdir)/$$file \ $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ for file in Makevars; do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi install-data-no: all install-data-yes: all @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $(DESTDIR)$$dir; \ if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \ $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \ echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ if test -n "$$lc"; then \ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ for file in *; do \ if test -f $$file; then \ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ fi; \ done); \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ else \ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ :; \ else \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ fi; \ fi; \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \ fi; \ done; \ done install-strip: install installdirs: installdirs-exec installdirs-data installdirs-exec: installdirs-data: installdirs-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ else \ : ; \ fi installdirs-data-no: installdirs-data-yes: @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $(DESTDIR)$$dir; \ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ if test -n "$$lc"; then \ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ for file in *; do \ if test -f $$file; then \ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ fi; \ done); \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ else \ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ :; \ else \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ fi; \ fi; \ fi; \ done; \ done # Define this as empty until I found a useful application. installcheck: uninstall: uninstall-exec uninstall-data uninstall-exec: uninstall-data: uninstall-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ for file in $(DISTFILES.common) Makevars.template; do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi uninstall-data-no: uninstall-data-yes: catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ done; \ done check: all info dvi ps pdf html tags TAGS ctags CTAGS ID: mostlyclean: rm -f remove-potcdate.sed rm -f stamp-poT rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po rm -fr *.o clean: mostlyclean distclean: clean rm -f Makefile Makefile.in POTFILES *.mo maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." rm -f stamp-po $(GMOFILES) distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: test -z "$(DISTFILESDEPS)" || $(MAKE) $(DISTFILESDEPS) @$(MAKE) dist2 # This is a separate target because 'update-po' must be executed before. dist2: stamp-po $(DISTFILES) dists="$(DISTFILES)"; \ if test "$(PACKAGE)" = "gettext-tools"; then \ dists="$$dists Makevars.template"; \ fi; \ if test -f $(srcdir)/$(DOMAIN).pot; then \ dists="$$dists $(DOMAIN).pot stamp-po"; \ fi; \ if test -f $(srcdir)/ChangeLog; then \ dists="$$dists ChangeLog"; \ fi; \ for i in 0 1 2 3 4 5 6 7 8 9; do \ if test -f $(srcdir)/ChangeLog.$$i; then \ dists="$$dists ChangeLog.$$i"; \ fi; \ done; \ if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \ for file in $$dists; do \ if test -f $$file; then \ cp -p $$file $(distdir) || exit 1; \ else \ cp -p $(srcdir)/$$file $(distdir) || exit 1; \ fi; \ done update-po: Makefile $(MAKE) $(DOMAIN).pot-update test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES) $(MAKE) update-gmo # General rule for creating PO files. .nop.po-create: @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \ echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \ exit 1 # General rule for updating PO files. .nop.po-update: @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \ if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \ tmpdir=`pwd`; \ echo "$$lang:"; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ cd $(srcdir); \ if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \ $(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ *) \ $(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ esac; \ }; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ exit 1; \ fi; \ fi; \ else \ echo "msgmerge for $$lang.po failed!" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ fi $(DUMMYPOFILES): update-gmo: Makefile $(GMOFILES) @: # Recreate Makefile by invoking config.status. Explicitly invoke the shell, # because execution permission bits may not work on the current file system. # Use @SHELL@, which is the shell determined by autoconf for the use by its # scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient. Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@ cd $(top_builddir) \ && @SHELL@ ./config.status $(subdir)/$@.in po-directories force: # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: make-4.3/po/ko.gmo0000644000175000017500000013357513611136532010770 00000000000000Þ•®Œ Aü$$+$&J$q$$!Š$-¬$Ú$ ì$- %;%'Q%#y%% ´%Â%à%Pù%;J&"†&©& Å&tæ&L['P¨'Dù'9>(Mx(@Æ(o)Gw)o¿)P/*l€*Fí*J4+€+9,C:,f~,_å,;E-:-O¼-J .}W.uÕ.~K/>Ê/M 0CW02›0FÎ0I1;_1 ›1¥1"Â1 å1ò1 22&2 ?2J2e2x2 Š2”2£2¬2%½2ã27ì2$333C3/[3‹3¤3¼3Ö3(ô34&24*Y4&„4+«4×4#ì4#5)45-^5,Œ5¹5Ò5$ç59 6F63e6™61¶6è677/7!F7$h7=7GË7G89[8•8ž8"¥8È8å8;9!?9a9+}9©9¼9Ö9,ð9:%;:,a:-Ž: ¼:&Ý:;#;C;!c;.…;´;Ä;ÍÙ;§</Ç<÷<& = 4=%U={=›=¯=1Ä= ö=>#>#=>La>6®>å>6?A8?>z? ¹?+Ã?*ï?@ 2@<@1D@2v@ ©@µ@Î@"ã@*A1A@A PAqA A ™A£A»A ÛA èA%õAB+;B$gBŒB¦B ÅBÏBéBC+CHC!eC ‡C”C®C ·CÅCÎCâCD$D&_0X_‰_=©_;ç_:#`1^`,`H½`4a*;a"fa/‰a8¹a7òa*b>b Nb‰\b æc1d+9ded vd1€d2²dåd-ùd9'eae/}e­eÌe äe%ïefZ1f:Œf"ÇfDêfH/g…xg^þgS]hU±h@i_HiU¨i†þi€…jk‰—k!lQ¡lTól®HmH÷mQ@nw’n oJŠoSÕoe)p_pïpŒ}qÉ rTÔr™)sTÃsFtT_tR´tFu Nu-Zu$ˆu ­u¸uÏuàuýu v0)vZvuv ˆv’v £v ­v&¸vßv_îvNwiwzw<wÌwäw&ÿw0&x3Wx*‹x4¶x;ëx('y;PyŒy2¤y%×y*ýy6(z9_z ™zºz+ÑzAýz%?{;e{#¡{:Å{'|"(|K|_|)}|7§|Kß|Q+}X}}AÖ}~!~*(~ S~'t~Pœ~'í~L3€žº9Ù-€-A€9o€:©€0ä€2H'h'(¸8á ‚'‚Ö8‚5ƒMEƒ“ƒ.ªƒ$Ùƒ+þƒ!*„0L„}„T’„ ç„"ô„.…<F…eƒ…Yé…'C†Wk†YÆS‡ q‡=}‡:»‡+ö‡"ˆ +ˆ/5ˆ,eˆ’ˆ$£ˆȈ&æˆ4 ‰ B‰P‰!k‰‰ª‰ ¾‰̉)è‰ Š Š-;Š-iŠ<—Š-ÔŠ‹'‹ @‹,J‹,w‹,¤‹2Ñ‹Œ- Œ NŒ)\Œ†Œ Œ Œ¨Œ+ºŒæŒ3;43p>¤ã*Ž,Ž7KŽ0ƒŽ9´ŽîŽ4?;%{,¡ ÎØ éô> DR jwD“DØ<‘/Z‘0Š‘ »‘3Å‘ù‘P’#b’F†’8Í’K“R“Xc“3¼“[ð“:L”1‡”/¹”.锕1•3O•_ƒ• ã•@ñ•,2–<_–œ–C¥– é–I÷–FA—Nˆ—9×—*˜ <˜D]˜ ¢˜¬˜+»˜*ç˜F™FY™D ™Rå™N8š,‡š'´š9ÜšO›f›By›?¼›:ü›C7œ${œ8 œ.Ùœ ',A.n&7Ä üžž1žAGžF‰žIО:ŸEUŸ ›Ÿ?¥Ÿ6埠54 *j 2• %È 7î &¡$A¡f¡w¡‘¡(«¡%Ô¡!ú¡;¢X¢7l¢¤¢N«¢Tú¢WO£W§£-ÿ£F-¤ t¤ ‚¤Œ¤5¤¤ Ú¤ä¤7¥:¥L¥S¥d¥7w¥8¯¥:è¥+#¦#O¦#s¦=—¦/Õ¦=§C§X§4n§£§·§ ˧7ì§8$¨Y]¨*·¨ ⨩( ©HI©d’©÷©;ªCª!Xªzªf•ªüª.«>F«…«š«EŸ«Eå«E+¬;q¬?­¬?í¬@-­ n­:{­M¶­®® 5®CB®3†®@º®?û®9;¯8u¯E®¯Jô¯&?°If°<°°Aí°:/±(j±C“±.×±W²@^²:Ÿ²&Ú²³³J0³*{³f¦³n ´r|´Pï´>@µµ:ÿµ::¶)u¶/Ÿ¶7϶6·>·[· o·’’ž­u› ÙfŠœ´hcÓ='6݉#‰€“þEAf—)«$­¡É ~‘à k©µŒ9|jè2e-S„&vs•Ü`N¡H !š¨' ¦1uD§ô{}&.Y« Ïÿê?V¶50 mO¾v…JõK‡سöºxWQ ]tr–9 {C4ƒB±ÂMT†,\Z0š˰q:¨ó œU71ÌrHÛl™<:øò¿3B¢|/æjcP¸¯g5²Š—ç(+Áb-[+@†}~ŽzÊ™bFYä>n›"*]€,˜íÑlðQ =£‹Ldaã`8Ð÷åZÍ”#©@%ÎgnMÃsª_ÕD\S®ùTR„^7‚Ò ‹ _kEKž¬Vh6$¤/dwŸŸXúƒN4R¢^xtëLª®Ö»‘q*Åâ>W[ì§¹‡Ô·˜ÇF;!3PJe•y‚ÆoG¥ ;¥¼£I”ŽpˆéĈ"ß×GÚŒ“zÀo)ÞmUXa8¤Aý¬ip2(ïO–IiȦ…y½.ñîü%áCûw<? # %u 'vpath' search paths. # %u implicit rules, %u (%.1f%%) terminal. # %u pattern-specific variable values # Directories # Files # Finished Make data base on %s # General ('VPATH' variable) search path: # # Implicit Rules # Make data base, printed on %s # No general ('VPATH' variable) search path. # No implicit rules. # No pattern-specific variable values. # Pattern-specific Variable Values # VPATH Search Paths # Variables # files hash-table stats: # %s No strcache buffers %s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu B %s strcache performance: lookups = %lu / hit rate = %lu%% Counted %d args in failed launch This program built for %s This program built for %s (%s) Unhandled exception filter called from program %s ExceptionCode = %lx ExceptionFlags = %lx ExceptionAddress = 0x%p --debug[=FLAGS] Print various types of debugging information. --no-print-directory Turn off -w, even if it was turned on implicitly. --no-silent Echo recipes (disable --silent mode). --trace Print tracing information. --warn-undefined-variables Warn when an undefined variable is referenced. -B, --always-make Unconditionally make all targets. -C DIRECTORY, --directory=DIRECTORY Change to DIRECTORY before doing anything. -E STRING, --eval=STRING Evaluate STRING as a makefile statement. -I DIRECTORY, --include-dir=DIRECTORY Search DIRECTORY for included makefiles. -L, --check-symlink-times Use the latest mtime between symlinks and target. -O[TYPE], --output-sync[=TYPE] Synchronize output of parallel jobs by TYPE. -R, --no-builtin-variables Disable the built-in variable settings. -S, --no-keep-going, --stop Turns off -k. -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE Consider FILE to be infinitely new. -b, -m Ignored for compatibility. -d Print lots of debugging information. -e, --environment-overrides Environment variables override makefiles. -f FILE, --file=FILE, --makefile=FILE Read FILE as a makefile. -h, --help Print this message and exit. -i, --ignore-errors Ignore errors from recipes. -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no arg. -k, --keep-going Keep going when some targets can't be made. -l [N], --load-average[=N], --max-load[=N] Don't start multiple jobs unless load is below N. -n, --just-print, --dry-run, --recon Don't actually run any recipe; just print them. -o FILE, --old-file=FILE, --assume-old=FILE Consider FILE to be very old and don't remake it. -p, --print-data-base Print make's internal database. -q, --question Run no recipe; exit status says if up to date. -r, --no-builtin-rules Disable the built-in implicit rules. -s, --silent, --quiet Don't echo recipes. -t, --touch Touch targets instead of remaking them. -v, --version Print the version number of make and exit. -w, --print-directory Print the current directory. Date %s Ignoring VPATH name '%s'. uid = %d, gid = %d, mode = 0%o. (built-in): (core dumped) (don't care) (from '%s', line %lu) (from '%s', line %lu): (ignored) (name might be truncated) (no default goal) (no ~ expansion) (remote) (search path) files, impossibilities impossibilities in %lu directories. so far.# A default, MAKEFILES, or -include/sinclude makefile.# Also makes:# Builtin rule# Command line target.# Dependencies recipe running (THIS IS A BUG).# Failed to be updated.# File does not exist.# File has been updated.# File has not been updated.# File is an intermediate prerequisite.# File is very old.# Implicit rule search has been done.# Implicit rule search has not been done.# Implicit/static pattern stem: '%s' # Invalid value in 'command_state' member!# Last modified %s # Modification time never checked.# Needs to be updated (-q is set).# Phony target (prerequisite of .PHONY).# Precious file (prerequisite of .PRECIOUS).# Recipe currently running (THIS IS A BUG).# Successfully updated.# recipe to execute# %s (device %d, inode [%d,%d,%d]): # %s (device %d, inode [%d,%d,%d]): could not be opened. # %s (device %ld, inode %ld): # %s (device %ld, inode %ld): could not be opened. # %s (key %s, mtime %I64u): # %s (key %s, mtime %I64u): could not be opened. # %s: could not be stat'd. # No 'vpath' search paths.# Not a target:# hash-table stats: # # variable set hash-table stats: $SHELL changed (was '%s', now '%s') %s (line %d) Bad shell context (!unixy && !batch_mode_shell) %s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B %s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B %s other used: total = %lu B / count = %lu / avg = %lu B %s%s: %s%s: %s%s: Entering an unknown directory %s: Entering directory '%s' %s: Field '%s' not cached: %s%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p) %s: Leaving an unknown directory %s: Leaving directory '%s' %s: Timestamp out of range; substituting %s%s: failed to load%s: illegal option -- %c %s: invalid option -- %c %s: option '%c%s' doesn't allow an argument %s: option '%s' is ambiguous %s: option '%s' requires an argument %s: option '--%s' doesn't allow an argument %s: option '-W %s' doesn't allow an argument %s: option '-W %s' is ambiguous %s: option requires an argument -- %c %s: target '%s' does not exist%s: unrecognized option '%c%s' %s: unrecognized option '--%s' %s: update target '%s' due to: %s%s: user %lu (real %lu), group %lu (real %lu) %sBuilt for %s %sBuilt for %s (%s) %sLicense GPLv3+: GNU GPL version 3 or later %sThis is free software: you are free to change and redistribute it. %sThere is NO WARRANTY, to the extent permitted by law. %sNo rule to make target '%s'%s%sNo rule to make target '%s', needed by '%s'%s%s[%s: %s] Error %d%s%s[%u]: Entering an unknown directory %s[%u]: Entering directory '%s' %s[%u]: Leaving an unknown directory %s[%u]: Leaving directory '%s' '%s' is up to date.'override' directive*** Archive member '%s' may be bogus; not deleted*** Break. *** Deleting file '%s'*** Deleting intermediate file '%s'*** Waiting for unfinished jobs....*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp*** [%s] Archive member '%s' may be bogus; not deleted*** [%s] Deleting file '%s'*** mixed implicit and normal rules: deprecated syntax-O[TYPE] (--output-sync[=TYPE]) is not configured for this build.-warning, you may have to re-enable CTRL-Y handling from DCL. . Stop. .DEFAULT_GOAL contains more than one target.LIBPATTERNS element '%s' is not a pattern; using VPATH name '%s'AbortedAccess violation: read operation at address 0x%p Access violation: write operation at address 0x%p Alarm clockAppend %.*s and cleanup Append output to %s Avoiding implicit rule recursion. BUG: num_pattern_rules is wrong! %u != %uBUILTIN CD %s Bad system callBatch file contents: @echo off Batch file contents:%s %s Broken pipeBus errorCPU time limit exceededCannot create a temporary file Child accessChild exitedCircular %s <- %s dependency dropped.Cleaning up temp batch file %s Cleaning up temp batch file %s failed (%d) Cleaning up temporary batch file %s Collisions=%lu/%lu=%.0f%%Considering target file '%s'. ContinuedCould not restore stderr Could not restore stdin Could not restore stdout Couldn't change back to original directory.CreatePipe() failed (e=%ld) Creating temporary batch file %s Current timeCustoms won't export: %s DCL: %s Danger signalEMT trapEmpty function nameEmpty symbol name for load: %sExecuting %s instead Failed to load symbol %s from %s: %sFailed to open global symbol table: %sFailed to remake makefile '%s'.Failed to remake target file '%s'. File '%s' does not exist. File '%s' was considered already. File size limit exceededFinished prerequisites of target file '%s'. Finished updating file '%s'. Floating point co-processor not availableFloating point exceptionFound an implicit rule for '%s'. Found prerequisite '%s' as VPATH '%s' Function name too long: %sGiving up on target file '%s'. HangupI/O possibleIOT trapIllegal InstructionIncluded makefile '%s' was not found.Information requestInitialized accessInterruptInvalid function name: %sInvalid maximum argument count (%u) for function %sInvalid minimum argument count (%u) for function %sJobserver client (fds %d,%d) Jobserver client (semaphore %s) Jobserver slots limited to %d KilledLive child %p (%s) PID %s %s Load=%lu/%lu=%.0f%%, Loaded object %s is not declared to be GPL compatibleLoading symbol %s from %s Looking for a rule with intermediate file '%s'. Looking for an implicit rule for '%s'. Looking for archive-member implicit rule for '%s'. Make accessMakefile '%s' might loop; not remaking it. Makefile '%s' was not foundMakefile from standard input specified twice.Making '%s' due to always-make flag. Malformed target-specific variable definitionMember '%s'%s: %ld bytes at %ld (%ld). Must remake target '%s'. NoNo implicit rule found for '%s'. No need to remake target '%s'No recipe for '%s' and no prerequisites actually changed. No targetsNo targets specified and no makefile foundNothing to be done for '%s'.Obtained token for child %p (%s). Options: Parallel jobs (-j) are not supported on this platform.Power failurePrerequisite '%s' is newer than target '%s'. Prerequisite '%s' is older than target '%s'. Prerequisite '%s' is order-only for target '%s'. Prerequisite '%s' of target '%s' does not exist. Profiling timer expiredPruning file '%s'. Putting child %p (%s) PID %s%s on the chain. QuitRe-executing[%u]:Reading makefile '%s'Reading makefiles... Reaping losing child %p PID %s %s Reaping winning child %p PID %s %s Recently tried and failed to update file '%s'. Recipe for '%s' will be ignored in favor of the one for '%s'.Recipe for file '%s' was found by implicit rule search,Recipe has too many lines (%ud)Recipe of '%s' is being run. Recipe was specified for file '%s' at %s:%lu,Recursive variable '%s' references itself (eventually)Rehash=%u, Rejecting impossible implicit prerequisite '%s'. Rejecting impossible rule prerequisite '%s'. Released token for child %p (%s). Removing child %p PID %s%s from chain. Removing intermediate files... Report bugs to Resetting to single job (-j1) mode.Resource lostSIGPHONESIGWINDSegmentation faultSkipping UTF-8 BOM in makefile '%s' Skipping UTF-8 BOM in makefile buffer Stem too long: '%s%.*s'. Still updating file '%s'. StoppedStopped (signal)Stopped (tty input)Stopped (tty output)Successfully remade target file '%s'. Symbolic links not supported: disabling -L.Target '%s' is double-colon and has no prerequisites. Target '%s' not remade because of errors.Target file '%s' needs to be remade under -q. TerminatedThe 'load' operation is not supported on this platform.The prerequisites of '%s' are being made. Trace/breakpoint trapTrying implicit prerequisite '%s'. Trying pattern rule with stem '%.*s'. Trying rule prerequisite '%s'. Updating goal targets.... Updating makefiles.... Urgent I/O conditionUsage: %s [options] [target] ... User accessUser defined signal 1User defined signal 2Using default commands for '%s'. Using default recipe for '%s'. Virtual timer expiredWarning: File '%s' has modification time %s s in the futureWindow changedattempt to use unsupported feature: '%s'automaticbut '%s' is now considered the same file as '%s'.can't allocate %lu bytes for hash table: memory exhaustedcan't rename double-colon '%s' to single-colon '%s'can't rename single-colon '%s' to double-colon '%s'cannot enforce load limit: cannot enforce load limits on this operating systemclose: %s: %scommand linecreating jobs pipecreating jobserver semaphore: (Error %ld: %s)defaultduping jobs pipeempty string invalid as file nameempty variable nameenvironmentenvironment under -eextraneous '%s'extraneous text after '%s' directiveextraneous text after 'define' directiveextraneous text after 'endef' directivefile: invalid file operation: %sfile: missing filenamefile: too many argumentsfind_and_set_shell() path search set default_shell = %s find_and_set_shell() setting default_shell = %s first argument to 'word' function must be greater than 0fopen (temporary file)fwrite (temporary file)grouped targets must provide a recipeguile: Evaluating '%s' guile: Expanding '%s' init jobserver pipeinsufficient number of arguments (%d) to function '%s'internal error: invalid --jobserver-auth string '%s'internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)invalid syntax in conditionaljob server shut downjobserver pipelinelbr$ini_control() failed with status = %dlbr$set_module() failed to extract module info, status = %dmake reaped child pid %s, still waiting for pid %s makefilemissing 'endef', unterminated 'define'missing 'endif'missing rule before recipemissing separatormissing separator (did you mean TAB instead of 8 spaces?)missing target patternmixed implicit and normal rulesmixed implicit and static pattern rulesmultiple target patternsnono more file handles: could not duplicate stderr no more file handles: could not duplicate stdin no more file handles: could not duplicate stdout non-numeric first argument to 'word' functionnon-numeric first argument to 'wordlist' functionnon-numeric second argument to 'wordlist' functiononly one 'else' per conditionalopen: %s: %sprerequisites cannot be defined in recipesprocess_easy() failed to launch process (e=%ld) pselect jobs piperead jobs piperead: %s: %srecipe commences before first targetrelease jobserver semaphore: (Error %ld: %s)semaphore or child process wait: (Error %ld: %s)spawnvpe: environment space might be exhaustedsys$search() failed with %d target '%s' doesn't match the target patterntarget '%s' given more than once in the same ruletarget file '%s' has both : and :: entriestarget pattern contains no '%%'the '%s%s' option requires a non-empty string argumentthe '-%c' option requires a positive integer argumenttouch archive member is not available on VMStouch: '%s' is not a valid archivetouch: Archive '%s' does not existtouch: Bad return code from ar_member_touch on '%s'touch: Member '%s' does not exist in '%s'unable to open library '%s' to lookup member status %dunimplemented on this platform: function '%s'unknown debug level specification '%s'unknown output-sync type '%s'unknown signalunlink (temporary file): unterminated call to function '%s': missing '%c'unterminated variable referencewarning: Clock skew detected. Your build may be incomplete.warning: -j%d forced in makefile: resetting jobserver mode.warning: -j%d forced in submake: resetting jobserver mode.warning: NUL character seen; rest of line ignoredwarning: ignoring old recipe for target '%s'warning: jobserver unavailable: using -j1. Add '+' to parent make rule.warning: overriding group membership for target '%s'warning: overriding recipe for target '%s'warning: undefined variable '%.*s'windows32_openpipe(): process_init_fd() failed windows32_openpipe: DuplicateHandle(Err) failed (e=%ld) windows32_openpipe: DuplicateHandle(In) failed (e=%ld) write error: stdoutwrite jobserverwrite: %s: %sProject-Id-Version: GNU make 4.2.93 Report-Msgid-Bugs-To: bug-make@gnu.org PO-Revision-Date: 2020-01-03 23:07+0900 Last-Translator: Changwoo Ryu Language-Team: Korean Language: ko MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8-bit X-Bugs: Report translation errors to the Language-Team address. # 'vpath' íƒìƒ‰ 경로 %uê°œ. # ë¬µì‹œì  ê·œì¹™ %uê°œ, %u (%.1f%%) 터미ë„. # 특정 íŒ¨í„´ì„ ìœ„í•œ 변수 ê°’ %uê°œ # 디렉터리 # íŒŒì¼ # ë©”ì´í¬ ë°ì´í„°ë² ì´ìФ 마침, %sì—서 # ì¼ë°˜ì ì¸ ('VPATH' 변수) íƒìƒ‰ 경로: # # ë¬µì‹œì  ê·œì¹™ # ë©”ì´í¬ ë°ì´í„°ë² ì´ìФ, %sì— í‘œì‹œ # ì¼ë°˜ì ì¸ ('VPATH' 변수) íƒìƒ‰ 경로가 ì—†ìŒ. # ë¬µì‹œì  ê·œì¹™ ì—†ìŒ. # íŒ¨í„´ì„ ìœ„í•œ 변수 ê°’ì´ ì—†ìŠµë‹ˆë‹¤. # íŒ¨í„´ì„ ìœ„í•œ 변수 ê°’ # VPATH íƒìƒ‰ 경로 # 변수 # íŒŒì¼ í•´ì‹œ í…Œì´ë¸” 통계: # %s strcache ë²„í¼ ì—†ìŒ %s strcache 버í¼: %lu (%lu) / 문ìžì—´ = %lu / 저장 공간 = %lu B / í‰ê·  = %lu B %s strcache 효율: 검색 = %lu / 히트 비율 = %lu%% 실행 실패ì—서 ì¸ìˆ˜ %dê°œ ì´ í”„ë¡œê·¸ëž¨ì€ %sì—서 사용하ë„ë¡ ë¹Œë“œë˜ì—ˆìŠµë‹ˆë‹¤ ì´ í”„ë¡œê·¸ëž¨ì€ %s(%s)ì—서 사용하ë„ë¡ ë¹Œë“œë˜ì—ˆìŠµë‹ˆë‹¤ 프로그램 %sì—서 처리ë˜ì§€ ì•Šì€ ì˜ˆì™¸ê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤ 예외코드 = %lx 예외플래그 = %lx 예외주소 = 0x%p --debug[=플래그] 여러 가지 ì¢…ë¥˜ì˜ ë””ë²„ê¹… 정보를 출력합니다. --no-print-directory 묵시ì ìœ¼ë¡œ 켜져 있ë”ë¼ë„ -w를 ë•니다. --no-silent 명령어를 출력합니다. (--silent 모드 ë„기) --trace ì¶”ì  ì •ë³´ë¥¼ 표시합니다. --warn-undefined-variables ì •ì˜ë˜ì§€ ì•Šì€ ë³€ìˆ˜ë¥¼ 참조할 때 경고를 냅니다. -B, --always-make ì¡°ê±´ì— ê´€ê³„ ì—†ì´ ëª¨ë“  íƒ€ê²Ÿì„ ë§Œë“­ë‹ˆë‹¤. -C <디렉터리>, --directory=<디렉터리> 뭔가 하기 ì „ì— <디렉터리>로 ì´ë™í•©ë‹ˆë‹¤. -E <문ìžì—´>, --eval=<문ìžì—´> <문ìžì—´>ì„ ë©”ì´í¬íŒŒì¼ 내용으로 í•´ì„합니다. -I <디렉터리>, --include-dir=<디렉터리> í¬í•¨í•  ë©”ì´í¬íŒŒì¼ì„ <디렉터리>ì—서 찾습니다. -L, --check-symlink-times 심볼릭 ë§í¬ì™€ 실제 중 ë” ìµœê·¼ 수정 시ê°ì„ 사용합니다. -O[ë°©ì‹], --output-sync[=ë°©ì‹] 병렬 ìž‘ì—…ì˜ ì¶œë ¥ì„ <ë°©ì‹>ì— ë”°ë¼ ë§žì¶¥ë‹ˆë‹¤. -R, --no-builtin-variables 내장 변수를 지정하지 못하게 합니다. -S, --no-keep-going, --stop -k ì˜µì…˜ì„ ë•니다. -W <파ì¼>, --what-if=<파ì¼>, --new-file=<파ì¼>, --assume-new=<파ì¼> <파ì¼>ì„ ë¬´í•œížˆ ê³„ì† ìƒˆë¡œìš´ 것으로 취급합니다. -b, -m 무시ë©ë‹ˆë‹¤, í˜¸í™˜ì„ ìœ„í•´ 유지. -d 여러 가지 디버깅 정보를 출력합니다. -e, --environment-overrides 환경변수가 ë©”ì´í¬íŒŒì¼ ë‚´ìš©ì— ìš°ì„ í•©ë‹ˆë‹¤. -f <파ì¼>, --file=<파ì¼>, --makefile=<파ì¼> <파ì¼>ì„ ë©”ì´í¬íŒŒì¼ë¡œ ì½ìŠµë‹ˆë‹¤. -h, --help ì´ ë©”ì‹œì§€ë¥¼ 출력하고 ë냅니다. -i, --ignore-errors 명령ì—서 ë°œìƒí•˜ëŠ” 오류를 무시합니다. -j [N], --jobs[=N] ë™ì‹œì— Nê°œì˜ ìž‘ì—… 허용, ì¸ìž 없으면 무한대로 허용. -k, --keep-going ì¼ë¶€ íƒ€ê²Ÿì„ ë§Œë“¤ 수 ì—†ë”ë¼ë„ ê³„ì† ì§„í–‰í•©ë‹ˆë‹¤. -l [N], --load-average[=N], --max-load[=N] 로드가 N 아래로 내려가야 ë™ì‹œ 작업 시작합니다. -n, --just-print, --dry-run, --recon 실제로는 아무 ëª…ë ¹ë„ ì‹¤í–‰í•˜ì§€ 않고 표시만 합니다. -o <파ì¼>, --old-file=<파ì¼>, --assume-old=<파ì¼> <파ì¼>ì´ ì•„ì£¼ 오래 ë˜ì—ˆë‹¤ê³  ìƒê°í•˜ê³  다시 만들지 않습니다. -p, --print-data-base makeì˜ ë‚´ë¶€ ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 출력합니다. -q, --question ëª…ë ¹ì„ ì‹¤í–‰í•˜ì§€ 않ìŒ. 종료 ìƒíƒœë¡œ ì—…ë°ì´íЏ 여부를 알 수 있습니다. -r, --no-builtin-rules 내장 ë¬µì‹œì  ê·œì¹™ì„ ì‚¬ìš©í•˜ì§€ 않습니다. -s, --silent, --quiet 명령어를 출력하지 않습니다. -t, --touch íƒ€ê²Ÿì„ ë‹¤ì‹œ 만들지 않고 touchë§Œ 합니다. -v, --version makeì˜ ë²„ì „ 번호를 출력하고 ë냅니다. -w, --print-directory 현재 디렉터리를 출력합니다. ë‚ ì§œ %s VPATH ì´ë¦„ '%s'ì„(를) 무시합니다. uid = %d, gid = %d, 모드 = 0%o. (내장): (메모리 ë¤í”„ë¨) (ìƒê´€ 안함) ('%s'ì—서, %lu번째 줄) ('%s'ì—서, %lu번째 줄): (무시ë¨) (ì´ë¦„ì´ ìž˜ë ¤ë‚˜ê°”ì„ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤) (최종 íƒ€ê²Ÿì´ ì—†ìŒ) (~ 확장 ì—†ìŒ) (ì›ê²©) (íƒìƒ‰ 경로) 파ì¼, 불가능 디렉토리 %luê°œì—서 불가능. 지금까지.# 기본 ë©”ì´í¬íŒŒì¼, MAKEFILES ë©”ì´í¬íŒŒì¼, ë˜ëŠ” -include/sinclude ë©”ì´í¬íŒŒì¼.# 다ìŒë„ 만듭니다:# 내장 규칙# 명령행 타겟.# 현재 ì‹¤í–‰ì¤‘ì¸ ì˜ì¡´ì„±(ì´ê²ƒì€ 버그입니다).# ì—…ë°ì´íЏ 실패.# 파ì¼ì´ 없습니다.# 파ì¼ì„ ì—…ë°ì´íŠ¸í–ˆìŠµë‹ˆë‹¤.# 파ì¼ì„ ì—…ë°ì´íŠ¸í•˜ì§€ 않았습니다.# 파ì¼ì´ ì¤‘ê°„ë‹¨ê³„ì˜ ì„ í–‰ì¡°ê±´ìž…ë‹ˆë‹¤.# 파ì¼ì´ 매우 오래ë˜ì—ˆìŠµë‹ˆë‹¤.# ë¬µì‹œì  ê·œì¹™ íƒìƒ‰ì´ 완료ë˜ì—ˆìŠµë‹ˆë‹¤.# ë¬µì‹œì  ê·œì¹™ íƒìƒ‰ì´ 완료ë˜ì§€ 않았습니다.# 묵시ì /ê³ ì • 패턴 스템: '%s' # 'command_status' ë©¤ë²„ì— ê°’ì´ ìž˜ëª»ë˜ì—ˆìŠµë‹ˆë‹¤!# 마지막 변경 %s # 변경 시ê°ì´ ê²°ì½” 검사ë˜ì§€ 않았ìŒ.# ì—…ë°ì´íЏ í•„ìš”(-q 설정ë¨).# í¬ë‹ˆ 타겟 (.PHONYì˜ ì„ í–‰ì¡°ê±´).# 프레시어스 íŒŒì¼ (.PRECIOUSì˜ ì„ í–‰ì¡°ê±´).# 현재 ì‹¤í–‰ì¤‘ì¸ ëª…ë ¹(ì´ê²ƒì€ 버그입니다).# 성공ì ìœ¼ë¡œ ì—…ë°ì´íЏ.# 실행할 명령어# %s (장치 %d, ì•„ì´ë…¸ë“œ [%d,%d,%d]): # %s (장치 %d, ì•„ì´ë…¸ë“œ [%d,%d,%d]): ì—´ 수 없습니다. # %s (장치 %ld, ì•„ì´ë…¸ë“œ %ld): # %s (장치 %ld, ì•„ì´ë…¸ë“œ %ld): ì—´ 수 없습니다. # %s (키 %s, ë³€ê²½ì‹œê° %I64u): # %s (키 %s, ë³€ê²½ì‹œê° %I64u): ì—´ 수 없습니다. # %s: statì„ í•  수 없었습니다. # 'vpath' íƒìƒ‰ 경로가 ì—†ìŒ.# íƒ€ê²Ÿì´ ì•„ë‹˜:# 해시 í…Œì´ë¸” 통계: # # 변수 ëª¨ìŒ í•´ì‹œ í…Œì´ë¸” 통계: $SHELLì´ ë°”ë€Œì—ˆìŠµë‹ˆë‹¤(과거 '%s', 현재 '%s') %s (%d번째 줄) ìž˜ëª»ëœ ì‰˜ 컨í…스트 (!unixy && !batch_mode_shell) %s 현재 버í¼: í¬ê¸° = %hu B / 사용 = %hu B / 개수 = %hu / í‰ê·  = %u B %s 기타 빈 공간: ì „ì²´ = %lu B / 최대 = %lu B / 최소 = %lu B / í‰ê·  = %hu B %s 기타 사용: ì „ì²´ = %lu B / 개수 = %lu / í‰ê·  = %lu B %s%s: %s%s: %s%s: 알 수 없는 디렉터리 ë“¤ì–´ê° %s: 디렉터리 '%s' ë“¤ì–´ê° %s: '%s' 필드가 ìºì‹œì— ì—†ìŒ: %s%s: ì¸í„°ëŸ½íЏ/예외가 발견ë˜ì—ˆìŠµë‹ˆë‹¤(코드 = 0x%lx, 주소 = 0x%p) %s: 알 수 없는 디렉터리 ë‚˜ê° %s: 디렉터리 '%s' ë‚˜ê° %s: 타임스탬프가 범위를 벗어나므로, %sì„(를) 대체합니다%s: ì½ì–´ë“¤ì´ëŠ”ë° ì‹¤íŒ¨%s: ìž˜ëª»ëœ ì˜µì…˜ -- %c %s: ë¶€ì ì ˆí•œ 옵션 -- %c %s: '%c%s' ì˜µì…˜ì€ ì¸ìˆ˜ë¥¼ 허용하지 않습니다 %s: '%s' ì˜µì…˜ì€ ì• ë§¤í•œ 옵션입니다 %s: '%s' ì˜µì…˜ì€ ì¸ìˆ˜ê°€ 필요합니다 %s: '--%s' ì˜µì…˜ì€ ì¸ìˆ˜ë¥¼ 허용하지 않습니다 %s: '-W %s' ì˜µì…˜ì€ ì¸ìˆ˜ë¥¼ 허용하지 않습니다 %s: '-W %s' ì˜µì…˜ì€ ì• ë§¤í•œ 옵션입니다 %s: ì´ ì˜µì…˜ì€ ì¸ìˆ˜ê°€ 필요합니다 -- %c %s: '%s' íƒ€ê²Ÿì´ ì—†ìŠµë‹ˆë‹¤%s: ì¸ì‹í•  수 없는 옵션 '%c%s' %s: ì¸ì‹í•  수 없는 옵션 '--%s' %s: '%s' 타겟 ì—…ë°ì´íЏ, ì´ìœ : %s%s: ì‚¬ìš©ìž %lu (실제 %lu), 그룹 %lu (실제 %lu) %s%s 빌드 %s%s(%s) 빌드 %së¼ì´ì„ ìФ GPLv3+: GNU GPL 버전 3 ë˜ëŠ” ì´í›„ %sThis is free software: you are free to change and redistribute it. %sThere is NO WARRANTY, to the extent permitted by law. %s타겟 '%s'ì„(를) 만들 ê·œì¹™ì´ ì—†ìŠµë‹ˆë‹¤%s%1$s'%3$s'ì—서 필요한 '%2$s' íƒ€ê²Ÿì„ ë§Œë“¤ ê·œì¹™ì´ ì—†ìŠµë‹ˆë‹¤%4$s%s[%s: %s] 오류 %d%s%s[%u]: 알 수 없는 디렉터리 ë“¤ì–´ê° %s[%u]: 디렉터리 '%s' ë“¤ì–´ê° %s[%u]: 알 수 없는 디렉터리 ë‚˜ê° %s[%u]: 디렉터리 '%s' ë‚˜ê° '%s'ì€(는) ì´ë¯¸ ì—…ë°ì´íЏë˜ì—ˆìŠµë‹ˆë‹¤.'override' 지시ìž*** ì•„ì¹´ì´ë¸Œ '%s' 멤버는 ê°€ì§œì¼ ìˆ˜ 있으므로 삭제하지 않습니다*** 중지. *** '%s' 파ì¼ì„ 삭제합니다*** 중간 íŒŒì¼ '%s'ì„(를) 삭제합니다*** ë나지 ì•Šì€ ìž‘ì—…ì„ ê¸°ë‹¤ë¦¬ê³  있습니다....*** Warning: .LOW_RESOLUTION_TIME íŒŒì¼ '%s'ì— ê³ í•´ìƒë„ 타임 스탬프가 들어 있습니다*** [%s] ì•„ì¹´ì´ë¸Œ '%s' 멤버는 ê°€ì§œì¼ ìˆ˜ 있으므로 삭제하지 않습니다*** [%s] '%s' 파ì¼ì„ 삭제합니다*** í˜¼í•©ëœ ë¬µì‹œì  ê·œì¹™ê³¼ ì¼ë°˜ì  규칙: 추천하지 않는 문법입니다-O[ë°©ì‹] (--output-sync[=ë°©ì‹]) ì˜µì…˜ì€ ì´ ë¹Œë“œì—서 사용하지 않습니다.-경고, DCLì—서 CTRL-Y를 다시 사용가능하ë„ë¡ í•´ì•¼ í•  것입니다. . 멈춤. .DEFAULT_GOAL ì•ˆì— íƒ€ê²Ÿì´ ì—¬ëŸ¬ ê°œ 들어 있습니다.LIBPATTERNSì˜ ì›ì†Œ '%s'ì´(ê°€) íŒ¨í„´ì´ ì•„ë‹™ë‹ˆë‹¤; VPATH ì´ë¦„ '%s'ì„(를) 사용합니다<내장>중단ë¨ì ‘ê·¼ 권한 위반: 주소 0x%pì—서 ì½ê¸° ì ‘ê·¼ 권한 위반: 주소 0x%pì— ì“°ê¸° ìžëª…종 시계%.*sì„(를) ë¶™ì´ê³  ì§€ì›ë‹ˆë‹¤ ì¶œë ¥ì„ %sì— ë¶™ìž…ë‹ˆë‹¤ ë¬µì‹œì  ê·œì¹™ì˜ ìž¬ê·€ë¥¼ 피함. 버그: num_pattern_rules 틀렸습니다! %u != %u내장 CD %s ìž˜ëª»ëœ ì‹œìŠ¤í…œ 호출배치 íŒŒì¼ ë‚´ìš©: @echo off 배치 íŒŒì¼ ë‚´ìš©:%s %s 깨어진 파ì´í”„버스 오류CPU 시간 제한 초과ë¨ìž„시 파ì¼ì„ 만들 수 없습니다 하위 접근하위 프로세스 ë남%s <- %s ìƒí˜¸ ì˜ì¡´ì„±ì€ 무시ë©ë‹ˆë‹¤.임시 배치 íŒŒì¼ %sì„(를) ì§€ì›ë‹ˆë‹¤ 임시 배치 íŒŒì¼ %s 지우기가 실패했습니다(%d) 임시 배치 íŒŒì¼ %sì„(를) ì§€ì›ë‹ˆë‹¤ ì¶©ëŒ=%lu/%lu=%.0f%%'%s' 타겟 파ì¼ì„ 고려합니다. 계ì†ë¨í‘œì¤€ 오류를 복구할 수 없습니다 표준 ìž…ë ¥ì„ ë³µêµ¬í•  수 없습니다 표준 ì¶œë ¥ì„ ë³µêµ¬í•  수 없습니다 ì›ëž˜ 디렉터리로 ëŒì•„ê°ˆ 수 없습니다.CreatePipe() 실패(e=%ld) 임시 배치 íŒŒì¼ %sì„(를) 만듭니다 현재 시ê°Customsì€ exportë˜ì§€ 않습니다: %s DCL: %s 위험 신호EMT 트랩빈 함수 ì´ë¦„ì½ì–´ë“¤ì¼ 심볼 ì´ë¦„ì´ ë¹„ì—ˆìŒ: %s대신 %sì„(를) 실행 %s ì‹¬ë³¼ì„ %sì—서 ì½ì–´ë“¤ì´ëŠ”ë° ì‹¤íŒ¨: %sì „ì—­ 심볼 í…Œì´ë¸”ì„ ì—¬ëŠ”ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤: %s'%s' ë©”ì´í¬íŒŒì¼ì„ 다시 ë§Œë“œëŠ”ë° ì‹¤íŒ¨.'%s' 타겟 파ì¼ì„ 다시 ë§Œë“œëŠ”ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤. '%s' 파ì¼ì´ 없습니다. '%s' 파ì¼ì€ ì´ë¯¸ 검토했습니다. íŒŒì¼ í¬ê¸° 제한 초과ë¨íƒ€ê²Ÿ íŒŒì¼ '%s'ì˜ ì„ í–‰ì¡°ê±´ì„ ë§ˆì³¤ìŠµë‹ˆë‹¤. '%s' 파ì¼ì˜ ì—…ë°ì´íŠ¸ë¥¼ 마쳤습니다. ë¶€ë™ì†Œìˆ˜ì  ì—°ì‚° 보조프로세서가 ì—†ìŠµë‹ˆë‹¤ë¶€ë™ ì†Œìˆ˜ì  ì˜ˆì™¸'%s'ì— ëŒ€í•œ ë¬µì‹œì  ê·œì¹™ì„ ì°¾ì•˜ìŠµë‹ˆë‹¤. VPATH '%2$s'ì—서 선행조건 '%1$s'ì„(를) 찾았습니다 함수 ì´ë¦„ì´ ë„ˆë¬´ ê¹ë‹ˆë‹¤: %s타겟 íŒŒì¼ '%s'ì„(를) í¬ê¸°í•©ë‹ˆë‹¤. ëŠì–´ì§ìž…출력 가능IOT íŠ¸ëž©ìž˜ëª»ëœ ëª…ë ¹í¬í•¨ëœ ë©”ì´í¬íŒŒì¼ '%s'ì„(를) 찾지 못했습니다.ì •ë³´ 요청접근 권한 초기화ì¸í„°ëŸ½íŠ¸ìž˜ëª»ëœ í•¨ìˆ˜ ì´ë¦„: %s함수 `%2$s'ì— ìµœëŒ€ ì¸ìž 갯수(%1$u)ê°€ 잘못ë˜ì—ˆìŠµë‹ˆë‹¤í•¨ìˆ˜ `%2$s'ì— ìµœì†Œ ì¸ìž 갯수(%1$u)ê°€ 잘못ë˜ì—ˆìŠµë‹ˆë‹¤ìž‘ì—… 서버 í´ë¼ì´ì–¸íЏ(íŒŒì¼ ë””ìŠ¤í¬ë¦½í„° %d,%d) 작업 서버 í´ë¼ì´ì–¸íЏ(세마í¬ì–´ %s) 작업서버 ìŠ¬ë¡¯ì€ %d개로 제한ë©ë‹ˆë‹¤ 죽었ìŒì‚´ì•„있는 하위 프로세스 %p (%s) PID %s %s 로드=%lu/%lu=%.0f%%, ì½ì–´ë“¤ì¸ %s 오브ì íŠ¸ëŠ” GPL 호환ì´ë¼ê³  선언하지 않았습니다%s ì‹¬ë³¼ì„ %sì—서 ì½ì–´ë“¤ìž„ 중간 íŒŒì¼ '%s'ì— ëŒ€í•œ ë¬µì‹œì  ê·œì¹™ì„ ì°¾ê³  있습니다. '%s'ì— ëŒ€í•œ ë¬µì‹œì  ê·œì¹™ì„ ì°¾ê³  있습니다. '%s'ì— ëŒ€í•œ ì•„ì¹´ì´ë¸Œë©¤ë²„ ë¬µì‹œì  ê·œì¹™ì„ ì°¾ê³  있습니다. ë©”ì´í¬ 접근메ì´í¬íŒŒì¼ '%s'ì€(는) 반복할 수 있으므로, 다시 만들지 않습니다. ë©”ì´í¬íŒŒì¼ '%s'ì„(를) 찾지 못했습니다표준입력ì—서 받아들ì´ëŠ” ë©”ì´í¬íŒŒì¼ì´ ë‘ ë²ˆ ì´ìƒ 지정ë˜ì—ˆìŠµë‹ˆë‹¤.always-make 옵션 ë•Œë¬¸ì— '%s' íƒ€ê²Ÿì„ ë§Œë“­ë‹ˆë‹¤. 타겟별 변수 ì •ì˜ í˜•ì‹ì´ 틀렸습니다멤버 '%s'%s: %ldë°”ì´íЏ, 위치 %ld (%ld). '%s' íƒ€ê²Ÿì„ ë‹¤ì‹œ 만들어야 합니다. 0ê°œ'%s'ì— ëŒ€í•œ ë¬µì‹œì  ê·œì¹™ì´ ì—†ìŠµë‹ˆë‹¤. '%s' íƒ€ê²Ÿì„ ë‹¤ì‹œ 만들 필요가 없습니다'%s'ì— ëŒ€í•œ 명령어가 없고 ì–´ë–¤ ì„ í–‰ì¡°ê±´ë„ ì‹¤ì œë¡œ 바뀌지 않았습니다. 타겟 ì—†ìŒíƒ€ê²Ÿì´ 지정ë˜ì§€ 않았고 ë©”ì´í¬íŒŒì¼ì´ 없습니다'%s'ì„(를) 위해 í•  ì¼ì´ 없습니다.하위 프로세스 %p(%s)ì—서 토í°ì„ 받았습니다. 옵션: 병렬 작업(-j)ì€ ì´ í”Œëž«í¼ì—서 ì§€ì›í•˜ì§€ 않습니다.ì „ë ¥ 중단'%s' ì„ í–‰ ì¡°ê±´ì´ '%s' 타겟보다 ë‚˜ì¤‘ì— ë§Œë“¤ì–´ì¡ŒìŠµë‹ˆë‹¤. '%s' ì„ í–‰ ì¡°ê±´ì´ '%s' 타겟보다 먼저 만들어졌습니다. '%s' ì„ í–‰ ì¡°ê±´ì€ '%s' íƒ€ê²Ÿì— ëŒ€í•´ 순서만 ì„ í–‰ 조건입니다. 타겟 '%2$s'ì˜ ì„ í–‰ì¡°ê±´ %1$sì´(ê°€) 없습니다. 프로파ì¼ë§ 타ì´ë¨¸ 시간 초과ë¨'%s' 파ì¼ì„ 잘ë¼ëƒ…니다. 하위 프로세스 %p(%s) PID %s%sì„(를) ì²´ì¸ì— 넣습니다. ë내기재실행[%u]:'%s' ë©”ì´í¬íŒŒì¼ì„ ì½ê³  있습니다메ì´í¬íŒŒì¼ì„ ì½ê³  있습니다... 실패한 하위 프로세스 %p PID %s %sì„(를) 거둬들입니다 성공한 하위 프로세스 %p PID %s %sì„(를) 거둬들입니다 ìµœê·¼ì— '%s' íŒŒì¼ ì—…ë°ì´íŠ¸ë¥¼ 시ë„í•´ 실패했습니다. '%s'ì— ëŒ€í•œ ëª…ë ¹ì€ '%s'ì— ëŒ€í•œ ëª…ë ¹ì´ ìš°ì„ í•˜ë¯€ë¡œ 무시합니다.íŒŒì¼ '%s'ì— ëŒ€í•œ ëª…ë ¹ì„ ë¬µì‹œì  ê·œì¹™ íƒìƒ‰ìœ¼ë¡œ 찾았습니다.ëª…ë ¹ì–´ì— ì¤„ì´ ë„ˆë¬´ 많습니다(%ud)'%s'ì˜ ëª…ë ¹ì´ ì‹¤í–‰ 중입니다. íŒŒì¼ '%s'ì˜ %s:%luì—서 ëª…ë ¹ì„ ì§€ì •í–ˆìŠµë‹ˆë‹¤.재귀하는 '%s' 변수는 (ê²°êµ­) ìžê¸° ìžì‹ ì„ 참조하고 있습니다다시 해시=%u, 불가능한 ë¬µì‹œì  ì„ í–‰ì¡°ê±´ '%s'ì€(는) ê±°ë¶€ë©ë‹ˆë‹¤. 불가능한 규칙 선행조건 '%s'ì€(는) ê±°ë¶€ë©ë‹ˆë‹¤. 하위 프로세스 %p(%s)ì— í† í°ì„ ë‚´ì–´ ì¤ë‹ˆë‹¤. 하위 프로세스 %p PID %s%sì„(를) ì²´ì¸ì—서 ì§€ì›ë‹ˆë‹¤. 중간 파ì¼ì„ 제거합니다... 문제ì ì„ 로 알려 주십시오. ë‹¨ì¼ ìž‘ì—… (-j1) 모드로 ëŒì•„갑니다.ìžì› ì†ì‹¤SIGPHONESIGWIND세그멘테ì´ì…˜ 오류메ì´í¬íŒŒì¼ '%s'ì—서 UTF-8 BOM 무시 ë©”ì´í¬íŒŒì¼ 버í¼ì—서 UTF-8 BOM 무시 ìŠ¤í…œì´ ë„ˆë¬´ ê¹ë‹ˆë‹¤: '%s%.*s'. ì•„ì§ '%s' 파ì¼ì„ ì—…ë°ì´íŠ¸í•˜ê³  있습니다. 중지ë¨ì¤‘ì§€ë¨(시그ë„)중지ë¨(tty ìž…ë ¥)중지ë¨(tty 출력)'%s' 타겟 파ì¼ì„ 성공ì ìœ¼ë¡œ 다시 만들었습니다. 심볼릭 ë§í¬ë¥¼ ì§€ì›í•˜ì§€ 않습니다: -L ì˜µì…˜ì„ ë•니다.'%s' íƒ€ê²Ÿì€ ì½œë¡  ë‘ ê°œê°€ 붙었고 ì„ í–‰ì¡°ê±´ì´ ì—†ìŠµë‹ˆë‹¤. 오류로 '%s' íƒ€ê²Ÿì„ ë‹¤ì‹œ 만들지 못했습니다.'%s' 타겟 파ì¼ì„ -q 옵션으로 다시 만들어야 합니다. 종료ë¨'load' ìž‘ì—…ì€ ì´ í”Œëž«í¼ì—서 ì§€ì›ë˜ì§€ 않습니다.'%s'ì˜ ì„ í–‰ì¡°ê±´ì´ ë§Œë“¤ì–´ì§€ê³  있습니다. ì¶”ì /ì¤‘ë‹¨ì  íŠ¸ëž©ë¬µì‹œì  ì„ í–‰ì¡°ê±´ '%s'ì„(를) 시ë„합니다. '%.*s' 스템ì—서 패턴 규칙 시ë„. 규칙 선행조건 '%s'ì„(를) 시ë„합니다. 최종 íƒ€ê²Ÿì„ ê°±ì‹ í•©ë‹ˆë‹¤.... ë©”ì´í¬íŒŒì¼ì„ ì—…ë°ì´íŠ¸í•˜ê³  있습니다.... 긴급한 입출력 ìƒí™©ì‚¬ìš©ë²•: %s [옵션] [타겟] ... ì‚¬ìš©ìž ì ‘ê·¼ì‚¬ìš©ìž ì •ì˜ ì‹ í˜¸ 1ì‚¬ìš©ìž ì •ì˜ ì‹ í˜¸ 2'%s'ì— ëŒ€í•´ 기본 ëª…ë ¹ì„ ì‚¬ìš©. '%s'ì— ëŒ€í•´ 기본 명령 사용. ê°€ìƒ íƒ€ì´ë¨¸ 시간 초과ë¨ê²½ê³ : '%s' 파ì¼ì˜ 변경 시ê°(%s)ì´ ë¯¸ëž˜ìž…ë‹ˆë‹¤ì°½ì´ ë°”ë€Œì—ˆìŒì§€ì›ë˜ì§€ 않는 ê¸°ëŠ¥ì„ ì‚¬ìš©í•˜ë ¤ê³  함: '%s'ìžë™í•˜ì§€ë§Œ '%s' 파ì¼ì€ ì´ì œ '%s'ê³¼(와) ê°™ì€ íŒŒì¼ë¡œ 간주합니다.해시 í…Œì´ë¸”ì— %lu ë°”ì´íŠ¸ë¥¼ 할당할 수 없습니다: 메모리 바닥남ì´ì¤‘ 콜론 '%s'ì„(를) ë‹¨ì¼ ì½œë¡  '%s'(으)로 ì´ë¦„ì„ ë°”ê¿€ 수 ì—†ìŠµë‹ˆë‹¤ë‹¨ì¼ ì½œë¡  '%s'ì„(를) ì´ì¤‘ 콜론 '%s'(으)로 ì´ë¦„ì„ ë°”ê¿€ 수 없습니다부하 ì œí•œì„ ê°•ì œí•  수 없습니다: ì´ ìš´ì˜ ì²´ì œì—서는 부하 ì œí•œì„ ê°•ì œí•  수 없습니다close: %s: %s명령행작업 파ì´í”„ ìƒì„±ìž‘업서버 세마í¬ì–´ 만들기: (오류 %ld: %s)기본값작업 파ì´í”„ dup() 수행빈 문ìžì—´ì€ íŒŒì¼ ì´ë¦„으로 ë¶€ì ì ˆí•©ë‹ˆë‹¤ë¹ˆ 변수 ì´ë¦„환경-e í•˜ì˜ í™˜ê²½í•„ìš” 없는 '%s''%s' ì§€ì‹œìž ë’¤ì— í•„ìš” 없는 í…스트가 있ìŒ'define' ì§€ì‹œìž ë’¤ì— í•„ìš” 없는 í…스트 있ìŒ'endef' ì§€ì‹œìž ë’¤ì— í•„ìš” 없는 í…스트가 있ìŒfile: 올바르지 ì•Šì€ íŒŒì¼ ë™ìž‘: %sfile: íŒŒì¼ ì´ë¦„ì´ ì—†ìŠµë‹ˆë‹¤file: ì¸ìžê°€ 너무 많습니다find_and_set_shell() 경로 íƒìƒ‰ 설정 default_shell = %s find_and_set_shell() 설정 default_shell = %s 'word' í•¨ìˆ˜ì˜ ì²«ë²ˆì§¸ ì¸ìžëŠ” 0보다 커야 합니다fopen(임시 파ì¼)fwrite(임시 파ì¼)그룹 íƒ€ê²Ÿì€ ëª…ë ¹ì–´ë¥¼ 제공해야 합니다guile: '%s' í•´ì„ guile: '%s' 확장 작업서버 파ì´í”„ 초기화함수 '%2$s'ì— ì¸ìž 갯수(%1$d)ê°€ 부족합니다내부 오류: ìž˜ëª»ëœ --jobserver-auth 문ìžì—´ '%s'ë‚´ë¶€ 오류: 작업 서버 세마í¬ì–´('%s')를 ì—´ 수 없습니다: (오류 %ld: %s)ì¡°ê±´ë¬¸ì— ë¶€ì ì ˆí•œ ë¬¸ë²•ì´ ì“°ìž„ìž‘ì—… 서버가 꺼졌습니다작업서버 파ì´í”„ë¼ì¸lbr$ini_control()ì´ ì‹¤íŒ¨, ìƒíƒœ = %dlbr$set_module()ì´ ëª¨ë“ˆì •ë³´ë¥¼ 추출하는 ë° ì‹¤íŒ¨, ìƒíƒœ = %d하위 프로세스 PID %sì„(를) 거둬들ì´ê³ , ì•„ì§ PID %sì„(를) 기다리고 있습니다 ë©”ì´í¬íŒŒì¼'endef'ê°€ 빠졌ìŒ. 'define'ì„ ë§ˆì¹˜ì§€ 않았습니다'endif'ê°€ 빠졌ìŒëª…ë ¹ ì•žì— ê·œì¹™ì´ ë¹ ì¡ŒìŒë¶„리 기호가 빠졌ìŒë¶„리 기호가 없습니다 (빈 칸 8개가 ì•„ë‹ˆë¼ íƒ­ì„ ì“°ë ¤ê³  한 것 아니었습니까?)타겟 íŒ¨í„´ì´ ë¹ ì¡ŒìŒí˜¼í•©ëœ ë¬µì‹œì  ê·œì¹™ê³¼ ì¼ë°˜ì  ê·œì¹™ë¬µì‹œì  íŒ¨í„´ 룰과 ê³ ì •ëœ íŒ¨í„´ë£°ì´ ì„žì˜€ìŠµë‹ˆë‹¤ë‹¤ì¤‘ 타겟 패턴0ê°œíŒŒì¼ í•¸ë“¤ì´ ì—†ìŒ: 표준 오류를 복사할 수 없습니다 íŒŒì¼ í•¸ë“¤ì´ ì—†ìŒ: 표준 ìž…ë ¥ì„ ë³µì‚¬í•  수 없습니다 íŒŒì¼ í•¸ë“¤ì´ ì—†ìŒ: 표준 ì¶œë ¥ì„ ë³µì‚¬í•  수 없습니다 'word' í•¨ìˆ˜ì˜ ì²«ë²ˆì§¸ ì¸ìžê°€ 숫ìžê°€ 아닙니다'wordlist' í•¨ìˆ˜ì˜ ì²«ë²ˆì§¸ ì¸ìžê°€ 숫ìžê°€ 아닙니다'wordlist' í•¨ìˆ˜ì˜ ë‘번째 ì¸ìžê°€ 숫ìžê°€ 아닙니다한 ê°œì˜ ì¡°ê±´ì—는 한 ê°œì˜ 'else'ë§Œ 있어야 합니다open: %s: %s명령어ì—서 ì„ í–‰ì¡°ê±´ì„ ì •ì˜í•  수 없습니다process_easy()ê°€ 프로세스를 시작하는 ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤(e=%ld) pselect 작업 파ì´í”„작업 파ì´í”„ ì½ê¸°read: %s: %s첫번째 타겟보다 앞ì—서 명령어가 시작ë˜ì—ˆìŠµë‹ˆë‹¤ìž‘ì—… 서버 세마í¬ì–´ í•´ì œ: (오류 %ld: %s)세마í¬ì–´ ë˜ëŠ” 하위 프로세스 대기: (오류 %ld: %s)spawnvpe: 환경 변수 ê³µê°„ì´ ë°”ë‹¥ë‚¬ì„ ìˆ˜ 있습니다sys$search()ê°€ %dë²ˆì„ ë¦¬í„´í•˜ë©° 실패했습니다 타겟 '%s'ì€(는) 타겟 íŒ¨í„´ì— ë§žì§€ 않습니다타겟 '%s'ì´(ê°€) ê°™ì€ ê·œì¹™ì—서 여러 번 주어졌습니다타겟 íŒŒì¼ '%s'ì€(는) :와 :: í•­ëª©ì„ ë™ì‹œì— ê°–ê³  있습니다타겟 íŒ¨í„´ì— '%%'ê°€ 없습니다.'%s%s' ì˜µì…˜ì€ ë¹„ì–´ 있지 ì•Šì€ ë¬¸ìžì—´ ì¸ìˆ˜ê°€ 필요합니다'-%c' ì˜µì…˜ì€ 0보다 í° ì •ìˆ˜ ì¸ìˆ˜ê°€ 필요합니다아카ì´ë¸Œ 멤버 touch는 VMSì—서 사용할 수 없습니다touch: '%s'ì€(는) 올바른 ì•„ì¹´ì´ë¸Œê°€ 아닙니다touch: '%s' ì•„ì¹´ì´ë¸Œê°€ 없습니다touch: '%s'ì— ëŒ€í•˜ì—¬ ar_member_touchì—서 실패 리턴 코드touch: '%s' 멤버가 '%s' ì•ˆì— ì—†ìŠµë‹ˆë‹¤ë©¤ë²„ ìƒíƒœ %2$dë²ˆì„ ì°¸ì¡°í•˜ë ¤ê³  '%1$s' ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ ì—´ 수 ì—†ìŠµë‹ˆë‹¤ì´ í”Œëž«í¼ì—서는 구현ë˜ì§€ 않았습니다: '%s' 함수디버깅 단계 지정 '%s'ì´(ê°€) 잘못ë˜ì—ˆìŠµë‹ˆë‹¤ì•Œ 수 없는 output-sync ë°©ì‹ '%s'알 수 없는 신호unlink (임시 파ì¼): 함수 '%s'ì— ëŒ€í•´ 종료ë˜ì§€ ì•Šì€ í˜¸ì¶œ: '%c' 문ìžê°€ 빠졌ìŒë³€ìˆ˜ ì°¸ì¡°ì— ëë§ˆì¹¨ì´ ì—†ìŠµë‹ˆë‹¤ê²½ê³ : 시계가 잘못ë˜ì—ˆìŒì´ 발견ë˜ì—ˆìŠµë‹ˆë‹¤. 빌드가 불완전할 수 있습니다.경고: ë©”ì´í¬íŒŒì¼ì—서 -j%d ì˜µì…˜ì´ ê°•ì œë˜ì—ˆìŠµë‹ˆë‹¤: 작업서버 모드를 초기화합니다.경고: 파ìƒëœ ë©”ì´í¬ì—서 -j%d ì˜µì…˜ì´ ê°•ì œë˜ì—ˆìŠµë‹ˆë‹¤: 작업서버 모드를 초기화합니다.경고: NUL 문ìžê°€ 발견ë˜ì—ˆìŠµë‹ˆë‹¤. ì¤„ì˜ ë‚˜ë¨¸ì§€ëŠ” 무시ë©ë‹ˆë‹¤ê²½ê³ : 타겟 '%s'ì— ëŒ€í•œ 과거 ëª…ë ¹ì„ ë¬´ì‹œí•©ë‹ˆë‹¤ê²½ê³ : 작업서버를 사용할 수 없습니다: -j1ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. ìƒìœ„ ë©”ì´í¬ ê·œì¹™ì— '+'를 추가합니다.경고: 타겟 '%s'ì˜ ê·¸ë£¹ 소ì†ë³´ë‹¤ 우선합니다경고: 타겟 '%s'ì— ëŒ€í•œ 명령보다 우선합니다경고: ì •ì˜ë˜ì§€ ì•Šì€ ë³€ìˆ˜ '%.*s'windows32_openpipe(): process_init_fd() 실패 windows32_openpipe: DuplicateHandle(Err) 실패(e=%ld) windows32_openpipe: DuplicateHandle(In) 실패(e=%ld) 쓰기 오류: 표준 출력작업서버 쓰기write: %s: %smake-4.3/po/fr.gmo0000644000175000017500000012755713611136532010771 00000000000000Þ•¡$ -,à"á"&þ"%#5#!>#-`#Ž#  #-Á#ï#'$#-$Q$ h$v$”$P­$;þ$":%]% y%tš%L&P\&9­&Mç&@5'ov'oæ'PV(l§(F)J[)€¦)9'*Ca*f¥*_ +;l+:¨+Oã+J3,}~,uü,~r->ñ-M0.C~.2Â.Fõ.IY= ˜=+¢=*Î=ù= >>1#>2U> ˆ>”>­>"Â>*å>?? /?P? l? x?‚?š? º? Ç?%Ô?ú?+@$F@k@ Š@”@®@Ç@+á@ A!*A LAYAsA |AŠA“A§AÆA$ÜA&B(B#HBlB"‡BªB,ÃBðB)C8C!QC&sCšCµCÕC ÜCéCòC%D,D@D SD]D3wD3«DßD ýDE=EDE5bE˜E0³E'äE3 F @F+LFxF-”F%ÂF-èF'G>GXG![G}G:›G ÖG*áG H")H LH6VH H-›H-ÉH1÷H1)I[IsI-‡IµIºIÌIâI"øI#J/?J=oJ7­JåJK-#K6QK1ˆK-ºK"èK' L3L"SL#vL šL¨L±L¹L$ÌL&ñLM3M;MLM`M&uM+œM6ÈM)ÿM.)N XN7cN*›NÆN#ÜN&O'OGObOzO!O ±O½OÓO!éO P+P;AP}P(ŒP µP1¿P9ñP3+Q3_Q“Q3¯Q ãQ ñQþQ-R?RGR!XRzR ŽRšR¯R$¿R(äR' S 5SVSmS8†S0¿S8ðS)T@TXTpT‡T6›T4ÒTHUPUnU)U;«U3çUV&$VKV[VvV9ˆVÂVÙV'ùV!W:W1=W0oW1 W-ÒW1X22XeX …X*’X0½XîXY Y$Y,AY0nY.ŸYÎY,ëY1Z*JZuZ6•Z5ÌZ,["/["R[3u[)©[6Ó[- \&8\_\}\Œ\0¦\×\=÷\15],g]H”]*Ý]"^/+^8[^7”^Ì^à^ ð^Ãþ^*Â`/í`a .a,:a?ga§a,½a@êa+b3Gb,{b¨b Çb1ÕbcS$c;xc2´c$çc) d‡6dQ¾dee<ve\³eJfz[fÖfqdgwÖgPNhLŸhžìh;‹iMÇi}jr“j>kGEkjkcøkœ\lzùl tmLnobnKÒn=o_\oQ¼o?p Np%Xp"~p¡p¸pÌpÛp ûp q(qFqdq €q‹q ¢q°q(Ãq ìqCøqŒvËv5ëv!w*Awlw#w<£w6àwFxJ^x@©x êxôx*üx.'y1VyIˆy&Òy*ùy1$zVzpzz4®z'ãz1 {4={5r{*¨{,Ó{&|''|'O|:w|:²|í|}ý}4~RO~¢~.º~2é~*.GvŽ[© €%€48€*m€d˜€_ý€*]CˆMÌV‚ q‚'|‚9¤‚'Þ‚ƒƒ>!ƒ?`ƒ ƒ§ƒ¿ƒ4Öƒ2 „>„V„-m„"›„ ¾„ ʄ؄+÷„#…3…,K…/x…C¨…0ì…$†B†J†j†‰†4©† Þ†1ÿ†1‡&@‡ g‡q‡ ‚‡Œ‡:£‡Þ‡6ü‡>3ˆ/rˆ5¢ˆ$؈/ýˆ&-‰2T‰.‡‰0¶‰ç‰+Š72ŠjŠ%ŠŠ °Š ºŠ ÇŠÑŠ.芋.‹ A‹L‹4k‹7 ‹Ø‹ ö‹+ŒCŒ'HŒEpŒ)¶ŒFàŒ2'FZ¡@°&ñ8ŽHQŽ;šŽ*ÖŽ)+21*dB Ò<ß-; iQuÇEÞF$‘?k‘?«‘ë‘ ’8*’c’j’’ž’0¸’0é’F“La“]®“( ”45”Jj”Gµ”9ý”97•0q•5¢•,Ø•.–$4–Y–j–s–{–.’–*Á–-ì–—#—5—L—4b—I——Gá—B)˜Kl˜¸˜OÁ˜=™O™.e™0”™.Å™&ô™š;š(Sš|šš¤š7¹š7ñš)›TB›—›Jª› õ›XœNZœX©œX.[IŠÔæ$ø=ž[ž&cž4Šž¿ž Ԟ➟-Ÿ1CŸ0uŸ ¦ŸÇŸߟM÷Ÿ1E Jw  Ý "ù !¡,>¡?k¡@«¡bì¡$O¢t¢.“¢C¢I£P£3Y££!¤£Æ£EÛ£!¤*9¤9d¤ž¤¸¤O¿¤M¥N]¥E¬¥Iò¥K<¦"ˆ¦«¦:¼¦6÷¦.§I§g§,x§<¥§Câ§<&¨ c¨7„¨C¼¨E©,F©Ds©8¸©@ñ©02ª*cªBŽª:Ѫ_ «<l«&©«&Ы÷«¬C%¬'i¬W‘¬Lé¬C6­uz­Eð­16®5h®>ž®=Ý®¯$8¯]¯†|–-Þa4Cåvi„Ù'`S’…J‚I±\ÍEXœonPÒ@TY')V 3®‹§…¬SÈ@“/ñƒ´lh Ték^t4 ×^0>†”ðG[ ÌO)êÎBc;ó[ :ˆ. þÏÜsŽŠD “fg8—º¿pr VŠ}9!îŸ;ˆšo›0M~¯¸ž‹‚Nh¾PLÛ’v /ƒöš=Ë­`ÓO‰Ÿœ–A¥ amçwj³ôÕ©•9»6ý{duEõz"« eÉIk1·s!$?+uä%"G÷¹‘.<&A_c$8â”CeÑWt{l,nZ˜¶ YúáŽ<Øè‰M &¨¦µ•žNòwJU2›Ä6ÂLæ¡~™,xßH¤½bqÊ¡Å#Á˜pÿd#Ö3ªQÐy°7üÇB¢UDÚ€ë1mi|?(øÆùÃݼí5ŒKjy_ûz}²2RRrfà£g:*ã+ÔZ‘‡>„(%XxÀ=q]7KQ]WŒ*€ bFF™ì\ï5‡—H- # %u 'vpath' search paths. # %u pattern-specific variable values # Directories # Files # Finished Make data base on %s # General ('VPATH' variable) search path: # # Implicit Rules # Make data base, printed on %s # No general ('VPATH' variable) search path. # No implicit rules. # No pattern-specific variable values. # Pattern-specific Variable Values # VPATH Search Paths # Variables # files hash-table stats: # %s No strcache buffers %s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu B %s strcache performance: lookups = %lu / hit rate = %lu%% Counted %d args in failed launch This program built for %s This program built for %s (%s) Unhandled exception filter called from program %s ExceptionCode = %lx ExceptionFlags = %lx ExceptionAddress = 0x%p --debug[=FLAGS] Print various types of debugging information. --no-print-directory Turn off -w, even if it was turned on implicitly. --trace Print tracing information. --warn-undefined-variables Warn when an undefined variable is referenced. -B, --always-make Unconditionally make all targets. -C DIRECTORY, --directory=DIRECTORY Change to DIRECTORY before doing anything. -I DIRECTORY, --include-dir=DIRECTORY Search DIRECTORY for included makefiles. -L, --check-symlink-times Use the latest mtime between symlinks and target. -O[TYPE], --output-sync[=TYPE] Synchronize output of parallel jobs by TYPE. -R, --no-builtin-variables Disable the built-in variable settings. -S, --no-keep-going, --stop Turns off -k. -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE Consider FILE to be infinitely new. -b, -m Ignored for compatibility. -d Print lots of debugging information. -e, --environment-overrides Environment variables override makefiles. -f FILE, --file=FILE, --makefile=FILE Read FILE as a makefile. -h, --help Print this message and exit. -i, --ignore-errors Ignore errors from recipes. -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no arg. -k, --keep-going Keep going when some targets can't be made. -l [N], --load-average[=N], --max-load[=N] Don't start multiple jobs unless load is below N. -n, --just-print, --dry-run, --recon Don't actually run any recipe; just print them. -o FILE, --old-file=FILE, --assume-old=FILE Consider FILE to be very old and don't remake it. -p, --print-data-base Print make's internal database. -q, --question Run no recipe; exit status says if up to date. -r, --no-builtin-rules Disable the built-in implicit rules. -s, --silent, --quiet Don't echo recipes. -t, --touch Touch targets instead of remaking them. -v, --version Print the version number of make and exit. -w, --print-directory Print the current directory. Date %s Ignoring VPATH name '%s'. uid = %d, gid = %d, mode = 0%o. (built-in): (core dumped) (don't care) (from '%s', line %lu) (from '%s', line %lu): (ignored) (name might be truncated) (no default goal) (no ~ expansion) (remote) (search path) files, impossibilities impossibilities in %lu directories. so far.# A default, MAKEFILES, or -include/sinclude makefile.# Also makes:# Builtin rule# Command line target.# Dependencies recipe running (THIS IS A BUG).# Failed to be updated.# File does not exist.# File has been updated.# File has not been updated.# File is an intermediate prerequisite.# File is very old.# Implicit rule search has been done.# Implicit rule search has not been done.# Implicit/static pattern stem: '%s' # Invalid value in 'command_state' member!# Last modified %s # Modification time never checked.# Needs to be updated (-q is set).# Phony target (prerequisite of .PHONY).# Precious file (prerequisite of .PRECIOUS).# Recipe currently running (THIS IS A BUG).# Successfully updated.# recipe to execute# %s (device %d, inode [%d,%d,%d]): # %s (device %d, inode [%d,%d,%d]): could not be opened. # %s (device %ld, inode %ld): # %s (device %ld, inode %ld): could not be opened. # %s (key %s, mtime %I64u): # %s (key %s, mtime %I64u): could not be opened. # %s: could not be stat'd. # No 'vpath' search paths.# Not a target:# hash-table stats: # # variable set hash-table stats: $SHELL changed (was '%s', now '%s') %s (line %d) Bad shell context (!unixy && !batch_mode_shell) %s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B %s other used: total = %lu B / count = %lu / avg = %lu B %s%s: %s%s: %s%s: Entering an unknown directory %s: Entering directory '%s' %s: Field '%s' not cached: %s%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p) %s: Leaving an unknown directory %s: Leaving directory '%s' %s: Timestamp out of range; substituting %s%s: failed to load%s: illegal option -- %c %s: invalid option -- %c %s: option '%c%s' doesn't allow an argument %s: option '%s' is ambiguous %s: option '%s' requires an argument %s: option '--%s' doesn't allow an argument %s: option '-W %s' doesn't allow an argument %s: option '-W %s' is ambiguous %s: option requires an argument -- %c %s: target '%s' does not exist%s: unrecognized option '%c%s' %s: unrecognized option '--%s' %s: update target '%s' due to: %s%s: user %lu (real %lu), group %lu (real %lu) %sBuilt for %s %sBuilt for %s (%s) %sLicense GPLv3+: GNU GPL version 3 or later %sThis is free software: you are free to change and redistribute it. %sThere is NO WARRANTY, to the extent permitted by law. %sNo rule to make target '%s'%s%sNo rule to make target '%s', needed by '%s'%s%s[%s: %s] Error %d%s%s[%u]: Entering an unknown directory %s[%u]: Entering directory '%s' %s[%u]: Leaving an unknown directory %s[%u]: Leaving directory '%s' '%s' is up to date.'override' directive*** Archive member '%s' may be bogus; not deleted*** Break. *** Deleting file '%s'*** Deleting intermediate file '%s'*** Waiting for unfinished jobs....*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp*** [%s] Archive member '%s' may be bogus; not deleted*** [%s] Deleting file '%s'*** mixed implicit and normal rules: deprecated syntax-O[TYPE] (--output-sync[=TYPE]) is not configured for this build.-warning, you may have to re-enable CTRL-Y handling from DCL. . Stop. .DEFAULT_GOAL contains more than one target.LIBPATTERNS element '%s' is not a pattern; using VPATH name '%s'AbortedAccess violation: read operation at address 0x%p Access violation: write operation at address 0x%p Alarm clockAppend %.*s and cleanup Append output to %s Avoiding implicit rule recursion. BUG: num_pattern_rules is wrong! %u != %uBUILTIN CD %s Bad system callBatch file contents: @echo off Batch file contents:%s %s Broken pipeBus errorCPU time limit exceededCannot create a temporary file Child accessChild exitedCircular %s <- %s dependency dropped.Cleaning up temp batch file %s Cleaning up temp batch file %s failed (%d) Cleaning up temporary batch file %s Considering target file '%s'. ContinuedCould not restore stderr Could not restore stdin Could not restore stdout Couldn't change back to original directory.CreatePipe() failed (e=%ld) Creating temporary batch file %s Current timeCustoms won't export: %s DCL: %s Danger signalEMT trapEmpty function nameEmpty symbol name for load: %sExecuting %s instead Failed to load symbol %s from %s: %sFailed to open global symbol table: %sFailed to remake makefile '%s'.Failed to remake target file '%s'. File '%s' does not exist. File '%s' was considered already. File size limit exceededFinished prerequisites of target file '%s'. Finished updating file '%s'. Floating point co-processor not availableFloating point exceptionFound an implicit rule for '%s'. Found prerequisite '%s' as VPATH '%s' Function name too long: %sGiving up on target file '%s'. HangupI/O possibleIOT trapIllegal InstructionIncluded makefile '%s' was not found.Information requestInitialized accessInterruptInvalid function name: %sInvalid maximum argument count (%u) for function %sInvalid minimum argument count (%u) for function %sJobserver client (fds %d,%d) Jobserver client (semaphore %s) Jobserver slots limited to %d KilledLive child %p (%s) PID %s %s Loaded object %s is not declared to be GPL compatibleLoading symbol %s from %s Looking for a rule with intermediate file '%s'. Looking for an implicit rule for '%s'. Looking for archive-member implicit rule for '%s'. Make accessMakefile '%s' might loop; not remaking it. Makefile '%s' was not foundMakefile from standard input specified twice.Making '%s' due to always-make flag. Malformed target-specific variable definitionMember '%s'%s: %ld bytes at %ld (%ld). Must remake target '%s'. NoNo implicit rule found for '%s'. No need to remake target '%s'No recipe for '%s' and no prerequisites actually changed. No targetsNo targets specified and no makefile foundNothing to be done for '%s'.Obtained token for child %p (%s). Options: Parallel jobs (-j) are not supported on this platform.Power failurePrerequisite '%s' is newer than target '%s'. Prerequisite '%s' is older than target '%s'. Prerequisite '%s' is order-only for target '%s'. Prerequisite '%s' of target '%s' does not exist. Profiling timer expiredPruning file '%s'. Putting child %p (%s) PID %s%s on the chain. QuitRe-executing[%u]:Reading makefile '%s'Reading makefiles... Reaping losing child %p PID %s %s Reaping winning child %p PID %s %s Recently tried and failed to update file '%s'. Recipe for '%s' will be ignored in favor of the one for '%s'.Recipe for file '%s' was found by implicit rule search,Recipe has too many lines (%ud)Recipe of '%s' is being run. Recipe was specified for file '%s' at %s:%lu,Recursive variable '%s' references itself (eventually)Rejecting impossible implicit prerequisite '%s'. Rejecting impossible rule prerequisite '%s'. Released token for child %p (%s). Removing child %p PID %s%s from chain. Removing intermediate files... Report bugs to Resetting to single job (-j1) mode.Resource lostSIGPHONESIGWINDSegmentation faultSkipping UTF-8 BOM in makefile '%s' Skipping UTF-8 BOM in makefile buffer Still updating file '%s'. StoppedStopped (signal)Stopped (tty input)Stopped (tty output)Successfully remade target file '%s'. Symbolic links not supported: disabling -L.Target '%s' is double-colon and has no prerequisites. Target '%s' not remade because of errors.Target file '%s' needs to be remade under -q. TerminatedThe 'load' operation is not supported on this platform.The prerequisites of '%s' are being made. Trace/breakpoint trapTrying implicit prerequisite '%s'. Trying pattern rule with stem '%.*s'. Trying rule prerequisite '%s'. Updating goal targets.... Updating makefiles.... Urgent I/O conditionUsage: %s [options] [target] ... User accessUser defined signal 1User defined signal 2Using default commands for '%s'. Using default recipe for '%s'. Virtual timer expiredWarning: File '%s' has modification time %s s in the futureWindow changedattempt to use unsupported feature: '%s'automaticbut '%s' is now considered the same file as '%s'.can't allocate %lu bytes for hash table: memory exhaustedcan't rename double-colon '%s' to single-colon '%s'can't rename single-colon '%s' to double-colon '%s'cannot enforce load limit: cannot enforce load limits on this operating systemclose: %s: %scommand linecreating jobs pipecreating jobserver semaphore: (Error %ld: %s)defaultduping jobs pipeempty string invalid as file nameempty variable nameenvironmentenvironment under -eextraneous '%s'extraneous text after '%s' directiveextraneous text after 'define' directiveextraneous text after 'endef' directivefile: invalid file operation: %sfile: missing filenamefile: too many argumentsfind_and_set_shell() path search set default_shell = %s find_and_set_shell() setting default_shell = %s first argument to 'word' function must be greater than 0fopen (temporary file)fwrite (temporary file)guile: Evaluating '%s' guile: Expanding '%s' init jobserver pipeinsufficient number of arguments (%d) to function '%s'internal error: invalid --jobserver-auth string '%s'internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)invalid syntax in conditionaljobserver pipelinelbr$ini_control() failed with status = %dlbr$set_module() failed to extract module info, status = %dmake reaped child pid %s, still waiting for pid %s makefilemissing 'endef', unterminated 'define'missing 'endif'missing rule before recipemissing separatormissing separator (did you mean TAB instead of 8 spaces?)missing target patternmixed implicit and normal rulesmixed implicit and static pattern rulesmultiple target patternsnono more file handles: could not duplicate stderr no more file handles: could not duplicate stdin no more file handles: could not duplicate stdout non-numeric first argument to 'word' functionnon-numeric first argument to 'wordlist' functionnon-numeric second argument to 'wordlist' functiononly one 'else' per conditionalopen: %s: %sprerequisites cannot be defined in recipesprocess_easy() failed to launch process (e=%ld) pselect jobs piperead jobs piperead: %s: %srecipe commences before first targetrelease jobserver semaphore: (Error %ld: %s)semaphore or child process wait: (Error %ld: %s)spawnvpe: environment space might be exhaustedsys$search() failed with %d target '%s' doesn't match the target patterntarget '%s' given more than once in the same ruletarget file '%s' has both : and :: entriestarget pattern contains no '%%'the '%s%s' option requires a non-empty string argumentthe '-%c' option requires a positive integer argumenttouch archive member is not available on VMStouch: '%s' is not a valid archivetouch: Archive '%s' does not existtouch: Bad return code from ar_member_touch on '%s'touch: Member '%s' does not exist in '%s'unable to open library '%s' to lookup member status %dunimplemented on this platform: function '%s'unknown debug level specification '%s'unknown output-sync type '%s'unknown signalunlink (temporary file): unterminated call to function '%s': missing '%c'unterminated variable referencewarning: Clock skew detected. Your build may be incomplete.warning: NUL character seen; rest of line ignoredwarning: ignoring old recipe for target '%s'warning: jobserver unavailable: using -j1. Add '+' to parent make rule.warning: overriding recipe for target '%s'warning: undefined variable '%.*s'windows32_openpipe(): process_init_fd() failed windows32_openpipe: DuplicateHandle(Err) failed (e=%ld) windows32_openpipe: DuplicateHandle(In) failed (e=%ld) write error: stdoutwrite jobserverwrite: %s: %sProject-Id-Version: GNU make 4.2.1 Report-Msgid-Bugs-To: bug-make@gnu.org PO-Revision-Date: 2018-08-28 17:59+0200 Last-Translator: Kévin Raymond Language-Team: French Language: fr MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. Plural-Forms: nplurals=2; plural=(n > 1); X-Generator: Poedit 2.1.1 # %u chemins de recherche « vpath ». # %u valeurs de variable spécifiques au motif # Répertoires # Fichiers # Base de données de Make terminée le %s # Chemin de recherche général (variable « VPATH ») : # # Règles implicites # Base de données de Make, imprimée le %s # Aucun chemin de recherche général (variable « VPATH »). # Pas de règle implicite. # pas de valeurs de variable spécifiques au motif # Valeurs de variable spécifiques au motif # Chemins de recherche VPATH # Variables # stats des tables de hachage des fichiers : # %s pas de tampons strcache %s strcache utilisé : %lu (%lu) / chaînes = %lu / espace = %lu o / moy = %lu o %s performance strcache : lookups = %lu / accès = %lu%% %d arguments comptés lors du lancement échoué Ce programme est construit pour %s Ce programme est construit pour %s (%s) Filtre d'exception non pris en charge appelé depuis le programme %s ExceptionCode = %lx ExceptionFlags = %lx ExceptionAddress = 0x%p --debug[=FLAGS] Afficher divers types d'informations de débogage. --no-print-directory Désactiver l'option -w, même si elle a été activée implicitement. --trace Afficher les traces mémoire. --warn-undefined-variables Prévenir lorsqu'une variable non définie est référencée. -B, --always-make Fabriquer toutes les cibles sans condition. -C RÉPERTOIRE, --directory=RÉPERTOIRE Se placer dans le RÉPERTOIRE avant toute action. -I RÉPERTOIRE, --include-dir=RÉPERTOIRE Chercher dans le RÉPERTOIRE les makefiles traités par inclusion. -L, --check-symlink-times Utiliser le « mtime » le plus récent entre les liens symboliques et la cible. -O[TYPE], --output-sync[=TYPE] Synchronise la sortie des tâches parallèles par TYPE. -R, --no-builtin-variables Désactiver les réglages des variables internes. -S, --no-keep-going, --stop Désactiver -k. -W FICHIER, --what-if=FICHIER, --new-file=FICHIER, --assume-new=FICHIER Considérer le FICHIER comme étant toujours nouveau. -b, -m Ignoré pour compatibilité. -d Afficher beaucoup d'informations de débogage. -e, --environment-overrides Les variables d'environment sont prioritaires sur les makefiles. -f FICHIER, --file=FICHIER, --makefile=FICHIER Lire le FICHIER comme un makefile. -h, --help Afficher ce message et quitter. -i, --ignore-errors Ignorer les erreurs venant des recettes. -j [N], --jobs[=N] Autoriser N tâches simultanées ; nombre infini si utilisé sans argument. -k, --keep-going Poursuivre même si certaines cibles n'ont pas pu être fabriquées. -l [N], --load-average[=N], --max-load[=N] Ne pas lancer de tâches multiples à moins que la charge soit inférieure à N. -n, --just-print, --dry-run, --recon N'exécuter aucune recette ; seulement les afficher. -o FICHIER, --old-file=FICHIER, --assume-old=FICHIER Considérer le FICHIER comme étant très ancien et ne pas le refabriquer. -p, --print-data-base Afficher la base de données interne de make. -q, --question Ne pas exécuter de recette ; le code de sortie indique si la cible est à jour. -r, --no-builtin-rules Désactiver les règles implicites internes. -s, --silent, --quiet Ne pas répéter les recettes. -t, --touch Assigner l'heure actuelle aux cibles au lieu de les refabriquer. -v, --version Afficher le numéro de version de make et quitter. -w, --print-directory Afficher le répertoire courant. Date %s On ignore le nom VPATH « %s ». uid = %d, gid = %d, mode = 0%o. (commande interne) : (core dump créé) (peu importe) (depuis « %s », ligne %lu) (de « %s », ligne %lu) : (ignorée) (le nom peut être tronqué) (pas d'objectif par défaut) (pas de remplacement du ~) (distant) (chemin de recherche) fichier(s), impossibilité(s) impossibilités dans %lu répertoires. jusqu'ici.# Une valeur par défaut, MAKEFILES ou -include/sinclude makefile.# Fabrique également :# Pas de règle interne# Cible de la ligne de commande.# Recette de dépendances en cours d'exécution (CECI EST UNE ANOMALIE).# N'a pas pu être mis à jour.# Le fichier n'existe pas.# Le fichier a été mis à jour.# Le fichier n'a pas été mis à jour.# Le fichier est une dépendance intermédiaire.# Le fichier est très ancien.# La recherche de règle implicite a été effectuée.# La recherche de règle implicite n'a pas été effectuée.# Préfixe de motif implicite ou statique : « %s » # Valeur non valable dans le membre « command_state » !# Dernière modification %s # Heure de modification jamais vérifiée.# À besoin d'être mis à jour (l'option -q est activée).# Cible factice (dépendance de .PHONY).# Fichier précieux (dépendance de .PRECIOUS).# Recette en cours d'exécution (CECI EST UNE ANOMALIE).# Mise à jour réussie.# recette à exécuter# %s (périphérique %d, inode [%d,%d,%d]) : # %s (périphérique %d, inode [%d,%d,%d]) : ouverture impossible. # %s (périphérique %ld, inode %ld) : # %s (périphérique %ld, inode %ld) : ouverture impossible. # %s (clé %s, mtime %I64u) : # %s (clé %s, mtime %I64u) : ouverture impossible. # %s: « stat » impossible. # Aucun chemin de recherche « vpath ».# Pas une cible :# stats des tables de hachage : # # stats des tables de hachage de la variable « set » : $SHELL a été modifié (de « %s » à « %s ») %s (ligne %d) Mauvais contexte du shell (!unixy && !batch_mode_shell) %s autre libre : total = %lu o / max = %lu o / min = %lu o / moy = %hu o %s autre utilisé : total = %lu o / nombre = %lu / moy = %lu o %s%s : %s%s : %s%s : on entre dans un répertoire inconnu %s : on entre dans le répertoire « %s » %s : le champ « %s » n'est pas en cache : %s%s: interception de l'interruption/exception (code = 0x%lx, addr = 0x%p) %s : on quitte un répertoire inconnu %s : on quitte le répertoire « %s » %s : horodatage hors limite ; remplacement par %s%s : echec du chargement%s : option non admise -- %c %s : option incorrecte -- %c %s : l'option « %c%s » ne prend pas d'argument %s : l'option « %s » est ambiguë %s : l'option « %s » nécessite un argument %s : l'option « --%s » ne prend pas d'argument %s : l'option « -W %s » ne prend pas d'argument %s : l'option « -W %s » est ambiguë %s : l'option nécessite un argument -- %c %s : la cible « %s » n'existe pas%s : option non reconnue « %c%s » %s : option non reconnue « --%s » %s : mise à jour de la cible « %s » causée par : %s%s : utilisateur %lu (reél %lu), groupe %lu (réel %lu) %sConstruit pour %s %sConstruit pour %s (%s) %sLicence GPLv3+ : GNU GPL version 3 ou ultérieure %sCeci est un logiciel libre : vous êtes autorisé à le modifier et à la redistribuer. %sIl ne comporte AUCUNE GARANTIE, dans la mesure de ce que permet la loi. %sAucune règle pour fabriquer la cible « %s »%s%s Aucune règle pour fabriquer la cible « %s », nécessaire pour « %s »%s%s[%s : %s] Erreur %d%s%s[%u] : on entre dans un répertoire inconnu %s[%u] : on entre dans le répertoire « %s » %s[%u] : on quitte un répertoire inconnu %s[%u] : on quitte le répertoire « %s » « %s » est à jour.directive « override »*** Le membre « %s » de l'archive peut avoir un problème ; il n'a pas été supprimé*** Arrêt. *** Suppression du fichier « %s »*** Suppression du fichier intermédiaire « %s »*** Attente des tâches non terminées....*** Avertissement : le fichier .LOW_RESOLUTION_TIME « %s » a un horodatage à haute résolution*** [%s] le membre « %s » de l'archive peut avoir un problème ; il n'a pas été supprimé*** [%s] Suppression du fichier « %s »*** mélange de règles implicites et normales : syntaxe obsolète-O[TYPE] (--output-sync[=TYPE]) n'est pas configuré pour cette construction.-attention, vous pourriez avoir besoin de réactiver le traitement de CTRL-Y par DCL. . Arrêt. .DEFAULT_GOAL contient plus d'une ciblel'élément « %s » de .LIBPATTERNS n'est pas un motif ; utilisation du nom VPATH « %s »AnnuléViolation d'accès : opération de lecture à l'adresse 0x%p Violation d'accès : opération d'écriture à l'adresse 0x%p AlarmeAjoute %.*s et nettoie Sortie ajoutée à %s Évitement de récursion dans une règle implicite. ANOMALIE : num_pattern_rules est faux ! %u != %uCOMMANDE CD INTERNE %s Mauvais appel systèmeContenu du fichier de commande : @echo off Contenu du fichier Batch :%s %s Tube casséErreur de busLimite du temps CPU dépasséeImpossible de créer un fichier temporaire Accès des filsProcessus fils terminéDépendance circulaire %s <- %s abandonnée.Nettoyage du fichier de commande temporaire %s Le nettoyage du fichier de commandes temporaire %s a échoué (%d) Nettoyage du fichier de commandes temporaire %s Étude du fichier cible « %s ». RepriseImpossible de restaurer stderr Impossible de restaurer stdin Impossible de restaurer stdout Impossible de revenir dans le répertoire d'origine.CreatePipe() a échoué (e=%ld) Création d'un fichier de commande temporaire %s Heure actuelle« customs » n'exportera pas : %s DCL : %s Signal de dangerAppel EMTNom de fonction absentNom du symbole absent pour l'opération « load » : %sExécution de %s à la place Echec du chargement du symbole %s à partir de %s : %sEchec de l'ouverture de la table des symboles générale : %sÉchec de refabrication du makefile « %s ».Échec de refabrication du fichier cible « %s ». Le fichier « %s » n'existe pas. Le fichier « %s » a déjà été étudié. Limite de taille de fichier dépasséeFin des dépendances du fichier cible « %s ». Fin de la mise à jour du fichier « %s ». Coprocesseur en virgule flottante non disponibleException en virgule flottanteRègle implicite trouvée pour « %s ». Dépendance trouvée « %s » comme VPATH « %s » Nom de fonction trop long : %sAbandon du fichier cible « %s ». RaccrocheE/S possibleAppel IOTInstruction non admiseLe makefile inclus « %s » est introuvable.Demande d'informationsAccès initialiséInterromptNom de fonction invalide : %sNombre d'arguments excessif (%u) pour la fonction %sNombre d'arguments insuffisant (%u) pour la fonction %sclient Jobserver (fds %d,%d) client jobserver (semaphore %s) Nombre de clients jobserver limités à %d TuéProcessus fils actif %p (%s) PID %s %s L'objet chargé « %s » n'est pas déclaré compatible avec la GPLChargement du symbole %s à partir de %s Recherche d'une règle contenant le fichier intermédaire « %s ». Recherche d'une règle implicite pour « %s ». Recherche d'une règle implicite de membre d'archive pour « %s ». Accès de MakeLe makefile « %s » pourrait boucler ; on ne recommence pas. Le makefile « %s » est introuvableMakefile depuis l'entrée standard spécifié deux fois.Fabrication de « %s » à cause de l'indicateur « always-make ». Définition malformée de variable spécifique à une cibleMembre `%s'%s : %ld octets à %ld (%ld). Il faut refabriquer la cible « %s ». AucunPas de règle implicite trouvée pour « %s ». Inutile de refabriquer la cible « %s »Pas de recette pour « %s » et aucune dépendance n'a changé. Pas de ciblePas de cible spécifiée et aucun makefile n'a été trouvérien à faire pour « %s ».Jeton obtenu pour le processus fils %p (%s). Options : Les tâches en parallèle (-j) ne sont pas prises en charge sur cette plateforme.Coupure d'alimentationLa dépendance « %s » est plus récente que la cible « %s ». uLa dépendance « %s » est plus ancienne que la cible « %s ». La dépendance « %s » ne commande que la cible « %s ». La dépendance « %s » de la cible « %s » n'existe pas. Compteur de profiling expiréÉlagage du fichier « %s ». Ajout du processus fils %p (%s) PID %s%s à la chaîne. QuitteRéexécution[%u] :Lecture du makefile « %s »Lecture des makefiles... Récolte du processus fils perdant %p PID %s %s Récolte du processus fils gagnant %p PID %s %s Tentative récente échouée de mettre à jour le fichier « %s ». La recette pour « %s » sera ignorée en faveur de celle pour « %s ».La recette pour le fichier « %s » a été trouvée par une recherche de règle implicite,La recette contient trop de lignes (%ud)La recette de « %s » est en cours d'exécution. Une recette a été spécifiée pour le fichier « %s » dans %s : %lu,La variable récursive « %s » se référence elle-même (à la fin)Rejet d'une dépendance implicite impossible « %s ». Rejet d'une dépendance de règle impossible « %s ». Jeton relâché pour le processus fils %p (%s). Retrait du processus fils %p PID %s%s de la chaîne. Suppression des fichiers intermédiaires... Signaler les anomalies à . On revient en mode monotâche (-j1).Ressource perdueSIGPHONESIGWINDErreur de segmentationOn saute les BOM UTF-8 du makefile « %s » On saute les BOM UTF-8 du tampon makefile Mise à jour du fichier « %s » en cours. ArrêtéArrêté (signal)Arrêté (entrée tty)Arrêté (sortie tty)Refabrication réussie du fichier cible « %s ». Les liens symboliques ne sont pas pris en charge : désactivation de -L.La cible « %s » a un deux-points double et n'a pas de dépendance. La cible « %s » n'a pas été refabriquée à cause d'erreurs.Le fichier cible « %s » a besoin d'être refabriqué avec l'option -q. TerminéLes opérations « load » ne sont pas prises en charge sur cette plateforme.Les dépendances de « %s » sont en cours de fabrication. Point de trace/arrêtEssai de la dépendance implicite « %s ». Essai du motif avec « %.*s » comme radical. Essai de la dépendance de règle « %s ». Mise à jour des objectifs cibles.... Mise à jour des makefiles.... Condition d'E/S urgenteUtilisation : %s [options] [cible] ... Accès utilisateurSignal utilisateur 1Signal utilisateur 2Utilisation des commandes par défaut pour « %s ». Utilisation de la recette par défaut pour « %s ». Compteur virtuel expiréAvertissement : le fichier « %s » a une date de modification %s s dans le futurFenêtre modifiéetentative d'utiliser une fonctionnalité non prise en charge : « %s »automatiquemais « %s » est maintenant considéré comme étant le même fichier que « %s ».impossible d'allouer %lu octets pour la table de hachage : mémoire épuiséeimpossible de renommer le deux-points double « %s » en deux-points simple « %s »impossible de renommer le deux-points simple « %s » en deux-points double « %s »impossible d'imposer des limites de charge : impossible d'imposer des limites de charge sur ce système d'exploitationclose : %s : %sligne de commandecréation d'un tube pour les tâchescréation de la sémaphore du jobserver : (erreur %ld : %s)défautduplication d'un tube pour les tâchesune chaîne vide n'est pas un nom de fichier valablenom de variable videenvironnementenvironnement avec l'option -e« %s » superflutexte superflu après la directive « %s »texte superflu après la directive « define »texte superflu après la directive « endef »file : opération invalide : %sfile : fichier manquantfile : trop d'argumentsLa recherche de chemin de find_and_set_shell() a définit default_shell = %s find_and_set_shell() définit default_shell = %s le premier argument de la fonction « word » doit être supérieur à 0fopen (fichier temporaire)fwrite (fichier temporaire)guile : évaluation de « %s » guile : expansion de « %s » initialisation du tube du serveur de tâchesnombre d'arguments insuffisant (%d) pour la fonction « %s »erreur interne : chaîne --jobserver-auth incorrecte « %s »erreur interne : impossible d'ouvrir la sémaphore « %s » du jobserver : (erreur %ld : %s) syntaxe incorrecte dans la conditionpipeline du serveur de tâcheslbr$ini_control() a échoué avec un code = %dlbr$set_module() n'a pas pu extraire les infos du module. Code = %dmake a récolté le processus fils pid %s, toujours en attente du pid %s makefile« endef » manquant, « define » non terminé« endif » manquantrègle manquante avant la recetteséparateur manquantséparateur manquant (vouliez-vous dire TAB au lieu des 8 espaces ?)motif de cible manquantmélange de règles implicites et normalesmélange de règles implicites et statiques pour le motifmotifs de cible multiplesaucuneplus d'identificateurs de fichier disponible : impossible de dupliquer stderr plus d'identificateur de fichier disponible : impossible de dupliquer stdin plus d'identificateur de fichier disponible : impossible de dupliquer stdout le premier argument de la fonction « word » doit être numériquele premier argument de la fonction « wordlist » doit être numériquele deuxième argument de la fonction « wordlist » doit être numériqueun seul « else » par conditionopen : %s : %sles prérequis ne peuvent être définis dans des recettesprocess_easy() n'a pas pu lancer de processus (e=%ld) pselect du tube de tâcheslecture du tube des processusread : %s : %sLa recette commence avant la première ciblelibération de la sémaphore jobserver : erreur (%ld : %s)attente de la sémaphore ou du processus fils : (erreur %ld : %s)spawnvpe : l'espace d'environnement est peut-être épuisésys$search() a échoué avec %d la cible « %s » ne correspond pas au motif de ciblela cible « %s » apparaît plus d'une fois dans la même règle.le fichier cible « %s » possède à la fois des entrées : et ::le motif de cible ne contient pas « %% »l'option « %s%s » a besoin d'une chaîne non vide comme argumentl'option « -%c » prend en argument un entier positifimpossible de modifier la date d'un membre d'une archive sur VMStouch : « %s » n'est pas une archive validetouch : l'archive « %s » n'existe pastouch : mauvais code de retour de ar_member_touch pour « %s »touch : le membre « %s » n'existe pas dans « %s »impossible d'ouvrir la bibliothèque « %s » pour récupérer le statut du membre « %d »non implémenté sur cette plateforme : fonction « %s »niveau de débogage inconnu « %s »type de output-sync « %s » inconnusignal inconnuunlink (fichier temporaire) :appel à la fonction « %s » non terminé : « %c » manquantréférence incomplète à une variableAVERTISSEMENT : décalage d'horloge détecté. La construction peut être incomplète.AVERTISSEMENT : caractère NUL détecté ; le reste de la ligne est ignoréavertissement : ancienne recette ignorée pour la cible « %s »avertissement : jobserver n'est pas disponible : utilisation de -j1. Ajouter « + » à la règle parent du make.avertissement : surchargement de la recette pour la cible « %s »avertissement : variable « %.*s » indéfiniewindows32_openpipe() : process_init_fd() a échoué windows32_openpipe : DuplicateHandle(Err) a échoué (e=%ld) windows32_openpipe : DuplicateHandle(In) a échoué (e=%ld) erreur d'écriture : stdoutécriture vers le serveur de tâcheswrite : %s : %smake-4.3/po/nl.gmo0000644000175000017500000012654713611136532010771 00000000000000Þ•®Œ Aü$$+$&J$q$$!Š$-¬$Ú$ ì$- %;%'Q%#y%% ´%Â%à%Pù%;J&"†&©& Å&tæ&L['P¨'Dù'9>(Mx(@Æ(o)Gw)o¿)P/*l€*Fí*J4+€+9,C:,f~,_å,;E-:-O¼-J .}W.uÕ.~K/>Ê/M 0CW02›0FÎ0I1;_1 ›1¥1"Â1 å1ò1 22&2 ?2J2e2x2 Š2”2£2¬2%½2ã27ì2$333C3/[3‹3¤3¼3Ö3(ô34&24*Y4&„4+«4×4#ì4#5)45-^5,Œ5¹5Ò5$ç59 6F63e6™61¶6è677/7!F7$h7=7GË7G89[8•8ž8"¥8È8å8;9!?9a9+}9©9¼9Ö9,ð9:%;:,a:-Ž: ¼:&Ý:;#;C;!c;.…;´;Ä;ÍÙ;§</Ç<÷<& = 4=%U={=›=¯=1Ä= ö=>#>#=>La>6®>å>6?A8?>z? ¹?+Ã?*ï?@ 2@<@1D@2v@ ©@µ@Î@"ã@*A1A@A PAqA A ™A£A»A ÛA èA%õAB+;B$gBŒB¦B ÅBÏBéBC+CHC!eC ‡C”C®C ·CÅCÎCâCD$D&_0X_‰_=©_;ç_:#`1^`,`H½`4a*;a"fa/‰a8¹a7òa*b>b Nb¬\b d0#d(Td }d ˆd$•d+ºdæd'ûd-#eQe*le%—e½eÑe+àe fW)fEf)Çf(ñf-g‹HgOÔgx$hPh<îh€+iB¬iHïiK8jM„jŽÒjtakQÖk4(l]lPílK>mHŠm|Óm?Pn?nŒÐnM]o­«opYp…ÊpIPq‰šqF$r7krK£r@ïr80s is#ts#˜s ¼sÊsâsôs t $t1tKtatxt t Œt™t ªt ËtJØt #u1u$EuAju¬uÅuÞuøu'v?v/Vv4†v*»v1ævw)0w.Zw!‰w.«w0Úw x%x&=x?dx ¤x9Åx)ÿxB)y#lyyªy*ºy8åy+zCJzWŽzOæzG6{~{‡{)Ž{ ¸{"Ù{Dü{%A|g|<„|Á|Ö|ñ|) }!6}$X})}}*§}$Ò}%÷}~8~T~'p~3˜~)Ì~.ö~Ö%*ü;'€c€-x€$¦€)Ë€ õ€*:>y Š,«#ØYü?V‚%–‚<¼‚Qù‚UKƒ ¡ƒ'®ƒ)Öƒ „ !„ -„78„:p„«„!²„ Ô„)õ„9…Y…k…%ƒ… ©… Ê…Ø…'à…$†-†B†1^†)†9º†)ô†‡"7‡ Z‡)e‡$‡%´‡-Ú‡ ˆ%)ˆ Oˆ \ˆ}ˆ †ˆ”ˆ£ˆ ´ˆ&Õˆ*üˆ/'‰+W‰/ƒ‰³‰ω)ï‰.Š(HŠ.qŠ Š%¿Š'åŠ ‹0(‹ Y‹d‹|‹‹‹* ‹Ë‹á‹ ú‹Œ6 Œ6WŒ-ŽŒ ¼Œ(ÝŒ '<9W‘4®(ã9 Ž FŽBSŽ–Ž0¶Ž+çŽ++?'k“*˜.ÃDò 7/C*s,žË>Ô ‘(!‘&J‘0q‘*¢‘#Í‘ñ‘9 ’ F’Q’h’€’6˜’3Ï’<“C@“<„“!Á“%ã“0 ”?:” z”6‡”0¾”.ï”:•*Y•r„•,÷•$–6–?–G–.W–0†–·–#Ó– ÷–——3—0P—J—8Ì—1˜97˜ q˜:|˜)·˜á˜'þ˜/&™!V™x™‘™­™ É™ê™ü™š/<š*lš—šN³š›6› N›<Z›N—›Cæ›C*œ$nœ=“œÑœ áœïœ0 7A,Z‡Ÿ¨ ºÅ âž%#žIžhžGž1Éž9ûž5ŸOŸ+jŸ–Ÿ±Ÿ ÍŸ4îŸA# He '® Ö ì 0ÿ M0¡I~¡È¡*Ñ¡ü¡¢0¢HK¢”¢%«¢.Ñ¢££S£No£O¾£0¤4?¤4t¤,©¤Ö¤5å¤/¥K¥c¥w¥†¥1¥¥4×¥8 ¦-E¦+s¦5Ÿ¦0Õ¦§>"§=a§>Ÿ§"Þ§ ¨,"¨*O¨Hz¨3è+÷¨)#©M©%^©5„©&º©Vá©K8ªQ„ªDÖª7«aS«Jµ«>¬.?¬3n¬>¢¬=ᬭ=­W­’’ž­u› ÙfŠœ´hcÓ='6݉#‰€“þEAf—)«$­¡É ~‘à k©µŒ9|jè2e-S„&vs•Ü`N¡H !š¨' ¦1uD§ô{}&.Y« Ïÿê?V¶50 mO¾v…JõK‡سöºxWQ ]tr–9 {C4ƒB±ÂMT†,\Z0š˰q:¨ó œU71ÌrHÛl™<:øò¿3B¢|/æjcP¸¯g5²Š—ç(+Áb-[+@†}~ŽzÊ™bFYä>n›"*]€,˜íÑlðQ =£‹Ldaã`8Ð÷åZÍ”#©@%ÎgnMÃsª_ÕD\S®ùTR„^7‚Ò ‹ _kEKž¬Vh6$¤/dwŸŸXúƒN4R¢^xtëLª®Ö»‘q*Åâ>W[ì§¹‡Ô·˜ÇF;!3PJe•y‚ÆoG¥ ;¥¼£I”ŽpˆéĈ"ß×GÚŒ“zÀo)ÞmUXa8¤Aý¬ip2(ïO–IiȦ…y½.ñîü%áCûw<? # %u 'vpath' search paths. # %u implicit rules, %u (%.1f%%) terminal. # %u pattern-specific variable values # Directories # Files # Finished Make data base on %s # General ('VPATH' variable) search path: # # Implicit Rules # Make data base, printed on %s # No general ('VPATH' variable) search path. # No implicit rules. # No pattern-specific variable values. # Pattern-specific Variable Values # VPATH Search Paths # Variables # files hash-table stats: # %s No strcache buffers %s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu B %s strcache performance: lookups = %lu / hit rate = %lu%% Counted %d args in failed launch This program built for %s This program built for %s (%s) Unhandled exception filter called from program %s ExceptionCode = %lx ExceptionFlags = %lx ExceptionAddress = 0x%p --debug[=FLAGS] Print various types of debugging information. --no-print-directory Turn off -w, even if it was turned on implicitly. --no-silent Echo recipes (disable --silent mode). --trace Print tracing information. --warn-undefined-variables Warn when an undefined variable is referenced. -B, --always-make Unconditionally make all targets. -C DIRECTORY, --directory=DIRECTORY Change to DIRECTORY before doing anything. -E STRING, --eval=STRING Evaluate STRING as a makefile statement. -I DIRECTORY, --include-dir=DIRECTORY Search DIRECTORY for included makefiles. -L, --check-symlink-times Use the latest mtime between symlinks and target. -O[TYPE], --output-sync[=TYPE] Synchronize output of parallel jobs by TYPE. -R, --no-builtin-variables Disable the built-in variable settings. -S, --no-keep-going, --stop Turns off -k. -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE Consider FILE to be infinitely new. -b, -m Ignored for compatibility. -d Print lots of debugging information. -e, --environment-overrides Environment variables override makefiles. -f FILE, --file=FILE, --makefile=FILE Read FILE as a makefile. -h, --help Print this message and exit. -i, --ignore-errors Ignore errors from recipes. -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no arg. -k, --keep-going Keep going when some targets can't be made. -l [N], --load-average[=N], --max-load[=N] Don't start multiple jobs unless load is below N. -n, --just-print, --dry-run, --recon Don't actually run any recipe; just print them. -o FILE, --old-file=FILE, --assume-old=FILE Consider FILE to be very old and don't remake it. -p, --print-data-base Print make's internal database. -q, --question Run no recipe; exit status says if up to date. -r, --no-builtin-rules Disable the built-in implicit rules. -s, --silent, --quiet Don't echo recipes. -t, --touch Touch targets instead of remaking them. -v, --version Print the version number of make and exit. -w, --print-directory Print the current directory. Date %s Ignoring VPATH name '%s'. uid = %d, gid = %d, mode = 0%o. (built-in): (core dumped) (don't care) (from '%s', line %lu) (from '%s', line %lu): (ignored) (name might be truncated) (no default goal) (no ~ expansion) (remote) (search path) files, impossibilities impossibilities in %lu directories. so far.# A default, MAKEFILES, or -include/sinclude makefile.# Also makes:# Builtin rule# Command line target.# Dependencies recipe running (THIS IS A BUG).# Failed to be updated.# File does not exist.# File has been updated.# File has not been updated.# File is an intermediate prerequisite.# File is very old.# Implicit rule search has been done.# Implicit rule search has not been done.# Implicit/static pattern stem: '%s' # Invalid value in 'command_state' member!# Last modified %s # Modification time never checked.# Needs to be updated (-q is set).# Phony target (prerequisite of .PHONY).# Precious file (prerequisite of .PRECIOUS).# Recipe currently running (THIS IS A BUG).# Successfully updated.# recipe to execute# %s (device %d, inode [%d,%d,%d]): # %s (device %d, inode [%d,%d,%d]): could not be opened. # %s (device %ld, inode %ld): # %s (device %ld, inode %ld): could not be opened. # %s (key %s, mtime %I64u): # %s (key %s, mtime %I64u): could not be opened. # %s: could not be stat'd. # No 'vpath' search paths.# Not a target:# hash-table stats: # # variable set hash-table stats: $SHELL changed (was '%s', now '%s') %s (line %d) Bad shell context (!unixy && !batch_mode_shell) %s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B %s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B %s other used: total = %lu B / count = %lu / avg = %lu B %s%s: %s%s: %s%s: Entering an unknown directory %s: Entering directory '%s' %s: Field '%s' not cached: %s%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p) %s: Leaving an unknown directory %s: Leaving directory '%s' %s: Timestamp out of range; substituting %s%s: failed to load%s: illegal option -- %c %s: invalid option -- %c %s: option '%c%s' doesn't allow an argument %s: option '%s' is ambiguous %s: option '%s' requires an argument %s: option '--%s' doesn't allow an argument %s: option '-W %s' doesn't allow an argument %s: option '-W %s' is ambiguous %s: option requires an argument -- %c %s: target '%s' does not exist%s: unrecognized option '%c%s' %s: unrecognized option '--%s' %s: update target '%s' due to: %s%s: user %lu (real %lu), group %lu (real %lu) %sBuilt for %s %sBuilt for %s (%s) %sLicense GPLv3+: GNU GPL version 3 or later %sThis is free software: you are free to change and redistribute it. %sThere is NO WARRANTY, to the extent permitted by law. %sNo rule to make target '%s'%s%sNo rule to make target '%s', needed by '%s'%s%s[%s: %s] Error %d%s%s[%u]: Entering an unknown directory %s[%u]: Entering directory '%s' %s[%u]: Leaving an unknown directory %s[%u]: Leaving directory '%s' '%s' is up to date.'override' directive*** Archive member '%s' may be bogus; not deleted*** Break. *** Deleting file '%s'*** Deleting intermediate file '%s'*** Waiting for unfinished jobs....*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp*** [%s] Archive member '%s' may be bogus; not deleted*** [%s] Deleting file '%s'*** mixed implicit and normal rules: deprecated syntax-O[TYPE] (--output-sync[=TYPE]) is not configured for this build.-warning, you may have to re-enable CTRL-Y handling from DCL. . Stop. .DEFAULT_GOAL contains more than one target.LIBPATTERNS element '%s' is not a pattern; using VPATH name '%s'AbortedAccess violation: read operation at address 0x%p Access violation: write operation at address 0x%p Alarm clockAppend %.*s and cleanup Append output to %s Avoiding implicit rule recursion. BUG: num_pattern_rules is wrong! %u != %uBUILTIN CD %s Bad system callBatch file contents: @echo off Batch file contents:%s %s Broken pipeBus errorCPU time limit exceededCannot create a temporary file Child accessChild exitedCircular %s <- %s dependency dropped.Cleaning up temp batch file %s Cleaning up temp batch file %s failed (%d) Cleaning up temporary batch file %s Collisions=%lu/%lu=%.0f%%Considering target file '%s'. ContinuedCould not restore stderr Could not restore stdin Could not restore stdout Couldn't change back to original directory.CreatePipe() failed (e=%ld) Creating temporary batch file %s Current timeCustoms won't export: %s DCL: %s Danger signalEMT trapEmpty function nameEmpty symbol name for load: %sExecuting %s instead Failed to load symbol %s from %s: %sFailed to open global symbol table: %sFailed to remake makefile '%s'.Failed to remake target file '%s'. File '%s' does not exist. File '%s' was considered already. File size limit exceededFinished prerequisites of target file '%s'. Finished updating file '%s'. Floating point co-processor not availableFloating point exceptionFound an implicit rule for '%s'. Found prerequisite '%s' as VPATH '%s' Function name too long: %sGiving up on target file '%s'. HangupI/O possibleIOT trapIllegal InstructionIncluded makefile '%s' was not found.Information requestInitialized accessInterruptInvalid function name: %sInvalid maximum argument count (%u) for function %sInvalid minimum argument count (%u) for function %sJobserver client (fds %d,%d) Jobserver client (semaphore %s) Jobserver slots limited to %d KilledLive child %p (%s) PID %s %s Load=%lu/%lu=%.0f%%, Loaded object %s is not declared to be GPL compatibleLoading symbol %s from %s Looking for a rule with intermediate file '%s'. Looking for an implicit rule for '%s'. Looking for archive-member implicit rule for '%s'. Make accessMakefile '%s' might loop; not remaking it. Makefile '%s' was not foundMakefile from standard input specified twice.Making '%s' due to always-make flag. Malformed target-specific variable definitionMember '%s'%s: %ld bytes at %ld (%ld). Must remake target '%s'. NoNo implicit rule found for '%s'. No need to remake target '%s'No recipe for '%s' and no prerequisites actually changed. No targetsNo targets specified and no makefile foundNothing to be done for '%s'.Obtained token for child %p (%s). Options: Parallel jobs (-j) are not supported on this platform.Power failurePrerequisite '%s' is newer than target '%s'. Prerequisite '%s' is older than target '%s'. Prerequisite '%s' is order-only for target '%s'. Prerequisite '%s' of target '%s' does not exist. Profiling timer expiredPruning file '%s'. Putting child %p (%s) PID %s%s on the chain. QuitRe-executing[%u]:Reading makefile '%s'Reading makefiles... Reaping losing child %p PID %s %s Reaping winning child %p PID %s %s Recently tried and failed to update file '%s'. Recipe for '%s' will be ignored in favor of the one for '%s'.Recipe for file '%s' was found by implicit rule search,Recipe has too many lines (%ud)Recipe of '%s' is being run. Recipe was specified for file '%s' at %s:%lu,Recursive variable '%s' references itself (eventually)Rehash=%u, Rejecting impossible implicit prerequisite '%s'. Rejecting impossible rule prerequisite '%s'. Released token for child %p (%s). Removing child %p PID %s%s from chain. Removing intermediate files... Report bugs to Resetting to single job (-j1) mode.Resource lostSIGPHONESIGWINDSegmentation faultSkipping UTF-8 BOM in makefile '%s' Skipping UTF-8 BOM in makefile buffer Stem too long: '%s%.*s'. Still updating file '%s'. StoppedStopped (signal)Stopped (tty input)Stopped (tty output)Successfully remade target file '%s'. Symbolic links not supported: disabling -L.Target '%s' is double-colon and has no prerequisites. Target '%s' not remade because of errors.Target file '%s' needs to be remade under -q. TerminatedThe 'load' operation is not supported on this platform.The prerequisites of '%s' are being made. Trace/breakpoint trapTrying implicit prerequisite '%s'. Trying pattern rule with stem '%.*s'. Trying rule prerequisite '%s'. Updating goal targets.... Updating makefiles.... Urgent I/O conditionUsage: %s [options] [target] ... User accessUser defined signal 1User defined signal 2Using default commands for '%s'. Using default recipe for '%s'. Virtual timer expiredWarning: File '%s' has modification time %s s in the futureWindow changedattempt to use unsupported feature: '%s'automaticbut '%s' is now considered the same file as '%s'.can't allocate %lu bytes for hash table: memory exhaustedcan't rename double-colon '%s' to single-colon '%s'can't rename single-colon '%s' to double-colon '%s'cannot enforce load limit: cannot enforce load limits on this operating systemclose: %s: %scommand linecreating jobs pipecreating jobserver semaphore: (Error %ld: %s)defaultduping jobs pipeempty string invalid as file nameempty variable nameenvironmentenvironment under -eextraneous '%s'extraneous text after '%s' directiveextraneous text after 'define' directiveextraneous text after 'endef' directivefile: invalid file operation: %sfile: missing filenamefile: too many argumentsfind_and_set_shell() path search set default_shell = %s find_and_set_shell() setting default_shell = %s first argument to 'word' function must be greater than 0fopen (temporary file)fwrite (temporary file)grouped targets must provide a recipeguile: Evaluating '%s' guile: Expanding '%s' init jobserver pipeinsufficient number of arguments (%d) to function '%s'internal error: invalid --jobserver-auth string '%s'internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)invalid syntax in conditionaljob server shut downjobserver pipelinelbr$ini_control() failed with status = %dlbr$set_module() failed to extract module info, status = %dmake reaped child pid %s, still waiting for pid %s makefilemissing 'endef', unterminated 'define'missing 'endif'missing rule before recipemissing separatormissing separator (did you mean TAB instead of 8 spaces?)missing target patternmixed implicit and normal rulesmixed implicit and static pattern rulesmultiple target patternsnono more file handles: could not duplicate stderr no more file handles: could not duplicate stdin no more file handles: could not duplicate stdout non-numeric first argument to 'word' functionnon-numeric first argument to 'wordlist' functionnon-numeric second argument to 'wordlist' functiononly one 'else' per conditionalopen: %s: %sprerequisites cannot be defined in recipesprocess_easy() failed to launch process (e=%ld) pselect jobs piperead jobs piperead: %s: %srecipe commences before first targetrelease jobserver semaphore: (Error %ld: %s)semaphore or child process wait: (Error %ld: %s)spawnvpe: environment space might be exhaustedsys$search() failed with %d target '%s' doesn't match the target patterntarget '%s' given more than once in the same ruletarget file '%s' has both : and :: entriestarget pattern contains no '%%'the '%s%s' option requires a non-empty string argumentthe '-%c' option requires a positive integer argumenttouch archive member is not available on VMStouch: '%s' is not a valid archivetouch: Archive '%s' does not existtouch: Bad return code from ar_member_touch on '%s'touch: Member '%s' does not exist in '%s'unable to open library '%s' to lookup member status %dunimplemented on this platform: function '%s'unknown debug level specification '%s'unknown output-sync type '%s'unknown signalunlink (temporary file): unterminated call to function '%s': missing '%c'unterminated variable referencewarning: Clock skew detected. Your build may be incomplete.warning: -j%d forced in makefile: resetting jobserver mode.warning: -j%d forced in submake: resetting jobserver mode.warning: NUL character seen; rest of line ignoredwarning: ignoring old recipe for target '%s'warning: jobserver unavailable: using -j1. Add '+' to parent make rule.warning: overriding group membership for target '%s'warning: overriding recipe for target '%s'warning: undefined variable '%.*s'windows32_openpipe(): process_init_fd() failed windows32_openpipe: DuplicateHandle(Err) failed (e=%ld) windows32_openpipe: DuplicateHandle(In) failed (e=%ld) write error: stdoutwrite jobserverwrite: %s: %sProject-Id-Version: make-4.2.93 Report-Msgid-Bugs-To: bug-make@gnu.org PO-Revision-Date: 2020-01-03 16:48+0100 Last-Translator: Benno Schulenberg Language-Team: Dutch Language: nl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. Plural-Forms: nplurals=2; plural=(n != 1); # %u 'vpath'-zoekpaden. # %u impliciete regels, %u (%.1f%%) eindpunten. # %u patroonspecifieke variabelewaarden # Mappen # Bestanden # Make-gegevensbank voltooid op %s # Algemeen zoekpad ('VPATH'-variabele): # # Impliciete regels # Make-gegevensbank, weergegeven op %s # Geen algemeen zoekpad ('VPATH'-variabele). # Geen impliciete regels. # Geen patroonspecifieke variabelewaarden # Patroonspecifieke variabelewaarden # VPATH-zoekpaden # Variabelen # hashtabel-statistieken van bestanden: # %s Geen 'strcache'-buffers %s 'strcache'-buffers: %lu (%lu) / strings = %lu / opslag = %lu B / gemiddeld = %lu B %s 'strcache'-prestatie: lookups = %lu / treffersverhouding = %lu%% %d argumenten geteld bij mislukte start Dit programma is gecompileerd voor %s. Dit programma is gecompileerd voor %s (%s). Filter voor onbehandelde uitzondering is aangeroepen vanuit programma %s ExceptionCode = %lx ExceptionFlags = %lx ExceptionAddress = 0x%p --debug[=VLAGGEN] verschillende soorten debuginformatie weergeven --no-print-directory optie '-w' uitzetten, ook als deze impliciet was aangezet --no-silent recepten weergeven (--silent-modus uitschakelen) --trace tracing-informatie weergeven --warn-undefined-variables waarschuwen als naar een ongedefinieerde variabele wordt verwezen -B, --always-make onvoorwaardelijk alle doelen maken -C MAP, --directory=MAP naar deze map gaan alvorens iets te doen -E TEKST, --eval=TEKST deze TEKST als Makefile-statement evalueren -I MAP, --include-dir=MAP deze map doorzoeken naar ingesloten Makefiles -L, --check-symlink-times van een symbolische koppeling en zijn doel de laatste wijzigingstijd gebruiken -O[TYPE], --output-sync[=TYPE] uitvoer van parallelle taken synchroniseren op TYPE -R, --no-builtin-variables ingebouwde instellingen van variabelen uitzetten -S, --no-keep-going, --stop optie '-k' uitzetten -W BESTAND, --what-if=BESTAND, --new-file=BESTAND, --assume-new=BESTAND BESTAND als oneindig nieuw beschouwen -b, -m (genegeerd, maar herkend wegens compatibiliteit) -d veel informatie weergeven voor het debuggen -e, --environment-overrides omgevingsvariabelen gaan boven Makefiles -f BESTAND, --file=BESTAND, --makefile=BESTAND het gegeven bestand als Makefile gebruiken -h, --help deze hulptekst tonen en stoppen -i, --ignore-errors alle fouten in recepten negeren -j [N], --jobs[=N] het uitvoeren van N taken tegelijk toestaan; zonder N is het aantal onbeperkt -k, --keep-going doorgaan als een doel niet gemaakt kan worden -l [N], --load-average[=N], --max-load[=N] alleen extra taken starten als de systeembelasting lager is dan N -n, --just-print, --dry-run, --recon recepten niet uitvoeren, alleen weergeven -o BESTAND, --old-file=BESTAND, --assume-old=BESTAND BESTAND als oud beschouwen, niet opnieuw maken -p, --print-data-base interne gegevensbank van 'make' weergeven -q, --question geen recepten uitvoeren; de afsluitwaarde geeft aan of alles bijgewerkt is -r, --no-builtin-rules ingebouwde impliciete regels uitzetten -s, --silent, --quiet recepten niet weergeven -t, --touch doelen aanraken in plaats van opnieuw maken -v, --version programmaversie tonen en stoppen -w, --print-directory de huidige map weergeven Datum %s VPATH-naam '%s' wordt genegeerd. uid = %d, gid = %d, modus = 0%o. (ingebouwd): (geheugendump gemaakt) (maakt niet uit) (uit '%s', regel %lu) (uit '%s', regel %lu): (genegeerd) (naam kan afgekapt zijn) (geen standaarddoel) (geen expansie van ~) (ginds) (zoekpad) bestanden, onmogelijkheden onmogelijkheden in %lu mappen. tot nu toe.# Een standaard Makefile, of eentje via MAKEFILES of '-include/sinclude'.# Maakt ook:# Ingebouwde regel# Doel afkomstig van opdrachtregel.# Nog lopende receptafhankelijkheden (DIT IS EEN PROGRAMMAFOUT).# Bijwerken is mislukt.# Bestand bestaat niet.# Bestand is bijgewerkt.# Bestand is niet bijgewerkt.# Bestand is een tussentijds vereiste.# Bestand is erg oud.# Impliciete regel-zoekopdracht is uitgevoerd.# Impliciete regel-zoekopdracht is niet uitgevoerd.# Impliciete/statische patroonstam: '%s' # Ongeldige waarde in 'command_state'-onderdeel!# Laatst gewijzigd %s # Wijzigingstijd is nooit gecontroleerd.# Moet worden bijgewerkt ('-q' is ingesteld).# Nepdoel (vereiste van .PHONY).# Waardevol bestand (vereiste van .PRECIOUS).# Nog lopend recept (DIT IS EEN PROGRAMMAFOUT).# Met succes bijgewerkt.# uit te voeren recept# %s (apparaat %d, inode [%d,%d,%d]): # %s (apparaat %d, inode [%d,%d,%d]): kan niet worden geopend. # %s (apparaat %ld, inode %ld): # %s (apparaat %ld, inode %ld): kan niet worden geopend. # %s (sleutel %s, wijzigingstijd %I64u): # %s (sleutel %s, wijzigingstijd %I64u): kan niet worden geopend. # kan status van %s niet opvragen. # Geen 'vpath'-zoekpaden.# Is geen doel:# hashtabel-statistieken van bestanden: # # Statistieken van hashtabel van variabelenverzameling: $SHELL is gewijzigd (was '%s', is nu '%s') %s (regel %d) Onjuiste shell-context (!unixy && !batch_mode_shell) %s huidig buffer: grootte = %hu B / gebruikt = %hu B / aantal = %hu / gemiddeld = %u B %s andere vrij: totaal = %lu B / max = %lu B / min = %lu B / gemiddeld = %hu B %s andere gebruikte: totaal = %lu B / aantal = %lu / gemiddeld = %lu B %s%s: %s%s: %s%s: Een onbekende map wordt binnengegaan %s: Map '%s' wordt binnengegaan %s: Veld '%s' is niet gecached: %s%s: Onderbreking/uitzondering gekregen (code = 0x%lx, adres = 0x%p) %s: Een onbekende map wordt verlaten %s: Map '%s' wordt verlaten %s: Tijdsstempel ligt buiten bereik; wordt vervangen door %s%s: laden is mislukt%s: ongeldige optie -- %c %s: ongeldige optie -- %c %s: optie '%c%s' staat geen argument toe %s: optie '%s' is niet eenduidig %s: optie '%s' vereist een argument %s: optie '--%s' staat geen argument toe %s: optie '-W %s' staat geen argument toe %s: optie '-W %s' is niet eenduidig %s: optie vereist een argument -- %c %s: doel '%s' bestaat niet%s: onbekende optie '%c%s' %s: onbekende optie '--%s' %s: bijwerken van doel '%s' vanwege: %s%s: gebruiker %lu (echt %lu), groep %lu (echt %lu) %sDit programma is gecompileerd voor %s. %sDit programma is gecompileerd voor %s (%s). %sLicentie GPLv3+: GNU GPL versie 3 of nieuwer %sDit is vrije software: u mag het vrijelijk wijzigen en verder verspreiden. %sEr is GEEN GARANTIE, voor zover de wet dit toestaat. %sEr is geen regel om doel '%s' te maken%s%sEr is geen regel om doel '%s' te maken, nodig voor '%s'%s%s[%s: %s] Fout %d%s%s[%u]: Een onbekende map wordt binnengegaan %s[%u]: Map '%s' wordt binnengegaan %s[%u]: Een onbekende map wordt verlaten %s[%u]: Map '%s' wordt verlaten '%s' is up-to-date.'override'-opdracht*** Archiefonderdeel '%s' kan onecht zijn; niet verwijderd*** Afgebroken. *** Verwijderen van bestand '%s'*** Verwijderen van tussentijds bestand '%s'*** Wachten op onvoltooide taken...*** Waarschuwing: .LOW_RESOLUTION_TIME-bestand '%s' heeft een hoge-resolutie tijdsstempel*** [%s] Archiefonderdeel '%s' kan onecht zijn; niet verwijderd*** [%s] Verwijderen van bestand '%s'*** gemengde impliciete en normale regels: verouderde syntaxOptie '-O[TYPE]' (--output-sync[=TYPE]) is niet meegecompileerd in dit programma.-waarschuwing: mogelijk dient u CTRL-Y-afhandeling opnieuw aan te zetten vanuit DCL. . Gestopt. .DEFAULT_GOAL bevat meer dan één doel.LIBPATTERNS-element '%s' is geen patroon; VPATH-naam '%s' wordt gebruiktAfgebrokenToegangsrechtenovertreding: leesopdracht op adres 0x%p Toegangsrechtenovertreding: schrijfopdracht op adres 0x%p WekkerToevoegen van %.*s en opschoning Uitvoer wordt toegevoegd aan %s Impliciete regelrecursie wordt ontweken. PROGRAMMAFOUT: num_pattern_rules() is verkeerd! %u != %uINGEBOUWDE CD %s Onjuiste systeemaanroepInhoud van batch-bestand: @echo off Inhoud van batch-bestand:%s %s Gebroken pijpBusfoutLimiet op processortijd is overschredenKan geen tijdelijk bestand aanmaken DochterprocestoegangDochterproces is afgeslotenCirculaire afhankelijkheid %s <- %s is verworpen.Opschonen van tijdelijk batch-bestand %s Opschonen van tijdelijk batch-bestand %s is mislukt (%d) Opschonen van tijdelijk batch-bestand %s Botsingen=%lu/%lu=%.0f%%Doelbestand '%s' wordt overwogen. DoorgegaanKan standaardfoutuitvoer niet herstellen Kan standaardinvoer niet herstellen Kan standaarduitvoer niet herstellen Kan niet terugkeren naar oorspronkelijke map.CreatePipe() is mislukt (e=%ld) Maken van tijdelijk batch-bestand %s Huidige tijdCustoms kan niet exporteren: %s DCL: %s GevaarsignaalEMT-instructieLege functienaamLege symboolnaam om te laden: %sIn plaats daarvan wordt %s uitgevoerd Laden van symbool %s uit %s is mislukt: %sOpenen van globale symbolentabel is mislukt: %sOpnieuw maken van Makefile '%s' is mislukt.Opnieuw maken van doelbestand '%s' is mislukt. Bestand '%s' bestaat niet. Bestand '%s' was al overwogen. Limiet op bestandsgrootte is overschredenVereisten van doelbestand '%s' zijn voltooid. Bijwerken van bestand '%s' is voltooid. Drijvendekomma-coprocessor is niet beschikbaarDrijvendekomma-berekeningsfoutImpliciete regel voor '%s' gevonden. Vereiste '%s' gevonden als VPATH '%s'. Functienaam is te lang: %sPogingen voor doelbestand '%s' worden gestaakt. OpgehangenIn-/uitvoer is mogelijkIOT-instructieOngeldige instructieIngesloten Makefile '%s' is niet gevonden.Verzoek om informatieToegang geïnitialiseerdOnderbrokenOngeldige functienaam: %sOngeldig maximumaantal argumenten (%u) voor functie %sOngeldig minimumaantal argumenten (%u) voor functie %sTaakservercliënt (bestandsdescriptor %d,%d) Taakservercliënt (semafoor %s) Taakserver-plaatsen zijn beperkt tot %d GeëlimineerdLevend dochterproces %p (%s) PID %s %s Belasting=%lu/%lu=%.0f%%, Geladen object %s is niet gedeclareerd als GPL-compatibelLaden van symbool %s uit %s Zoeken naar een regel met tussentijds bestand '%s'. Zoeken naar impliciete regel voor '%s'. Zoeken naar archiefonderdeel-impliciete regel voor '%s'. Make-toegangMakefile '%s' bevat mogelijk een lus; wordt niet opnieuw gemaakt. Makefile '%s' is niet gevonden.Makefile op standaardinvoer is dubbel opgegeven.Maken van '%s' vanwege 'always-make'-vlag. Onjuiste doelspecifieke variabele-definitieOnderdeel '%s'%s: %ld bytes bij %ld (%ld). Doel '%s' moet opnieuw gemaakt worden. GeenGeen impliciete regel voor '%s' gevonden. Doel '%s' hoeft niet opnieuw gemaakt te wordenEr is geen recept voor '%s', en geen van de vereisten is veranderd. Geen doelenGeen doelen opgegeven en geen Makefile gevondenEr hoeft niets gedaan te worden voor '%s'.Token verkregen voor dochterproces %p (%s). Opties: Parallelle taken (-j) worden op dit platform niet ondersteund.StroomstoringVereiste '%s' is nieuwer dan doel '%s'. Vereiste '%s' is ouder dan doel '%s'. Vereiste '%s' is alleen-ordenen voor doel '%s'. Vereiste '%s' van doel '%s' bestaat niet. Timer voor profilering is afgelopenSnoeien van bestand '%s'. Opname van dochterproces %p (%s) PID %s%s in de ketting. AfgeslotenOpnieuw uitvoeren[%u]:Lezen van Makefile '%s'Lezen van Makefiles... Beëindigen van verliezend dochterproces %p PID %s %s Beëindigen van winnend dochterproces %p PID %s %s Bijwerken van bestand '%s' is recent geprobeerd en mislukt. Recept voor '%s' zal worden genegeerd ten gunste van die voor '%s'.Recept voor bestand '%s' werd gevonden via impliciet zoeken,Recept bevat te veel regels (%ud)Recept van '%s' wordt nu uitgevoerd. Recept voor bestand '%s' is opgegeven in %s:%lu,Recursieve variabele '%s' verwijst naar zichzelf (uiteindelijk)Herhash=%u, Onmogelijke impliciete vereiste '%s' wordt verworpen. Onmogelijke regelvereiste '%s' wordt verworpen. Token vrijgegeven voor dochterproces %p (%s). Verwijderen van dochterproces %p PID %s%s uit de ketting. Verwijderen van tussentijdse bestanden... Rapporteer programmafouten aan ; meld gebreken in de vertaling aan . Opnieuw instellen op enkele-taakmodus (-j1).Hulpbron verlorenSIGPHONESIGWINDSegmentatiefoutUTF-8 BOM in Makefile '%s' wordt overgeslagen UTF-8 BOM in Makefile-buffer wordt overgeslagen Stam is te lang: '%s%.*s'. Bestand '%s' wordt nog bijgewerkt. GepauzeerdGepauzeerd (signaal)Gepauzeerd (terminalinvoer)Gepauzeerd (terminaluitvoer)Doelbestand '%s' is met succes opnieuw gemaakt. Symbolische koppelingen worden niet ondersteund: '-L' wordt uitgeschakeld.Doel '%s' is dubbeldubbelpunts en heeft geen vereisten. Doel '%s' is niet opnieuw gemaakt vanwege fouten.Doelbestand '%s' moet opnieuw worden gemaakt onder '-q'. BeëindigdDe 'load'-operatie wordt op dit platform niet ondersteund.De vereisten van '%s' worden nu gemaakt. Traceer/breekpunt-instructieProberen van impliciete vereiste '%s'. Patroonregel wordt geprobeerd met stam '%.*s'. Proberen van regelvereiste '%s'. Bijwerken van doelen... Bijwerken van Makefiles... Urgente in-/uitvoertoestandGebruik: %s [OPTIES] [DOEL]... GebruikerstoegangGebruikergedefinieerd signaal 1Gebruikergedefinieerd signaal 2Standaardopdrachten worden gebruikt voor '%s'. Standaardrecept wordt gebruikt voor '%s'. Virtuele timer is afgelopenWaarschuwing: bestand '%s' heeft een wijzigingstijd %s seconden in de toekomstVenster is veranderdpoging tot gebruik van niet-ondersteunde functie: '%s'automatischmaar '%s' wordt nu als hetzelfde bestand beschouwd als '%s'.kan %lu bytes voor hashtabel niet reserveren: onvoldoende geheugen beschikbaarkan dubbeldubbelpunts '%s' niet hernoemen tot enkeldubbelpunts '%s'kan enkeldubbelpunts '%s' niet hernoemen tot dubbeldubbelpunts '%s'kan belastingsgrens niet afdwingen: kan belastingsgrenzen niet afdwingen op dit besturingssysteemclose(): %s: %sopdrachtregelaanmaken van takenpijpaanmaken van taakserver-semafoor: (Fout %ld: %s)standaarddupliceren van takenpijplege tekenreeks is ongeldig als bestandsnaamlege naam van variabeleomgevingomgeving onder -eextra '%s'extra tekst na '%s'-opdrachtextra tekst na 'define'-opdrachtextra tekst na 'endef'-opdrachtfile: ongeldige bestandsbewerking: %sfile: ontbrekende bestandsnaamfile: te veel argumentenfind_and_set_shell() stelt na doorzoeken van pad default_shell = %s in find_and_set_shell() stelt default_shell = %s in eerste argument van 'word'-functie moet groter zijn dan 0fopen (tijdelijk bestand)fwrite (tijdelijk bestand)gegroepeerde doelen moeten een recept gevenguile: Evalueren van '%s' guile: Expanderen van '%s' initialiseren van taakserverpijponvoldoende aantal argumenten (%d) voor functie '%s'*interne fout*: ongeldige tekenreeks '%s' voor '--jobserver-auth'*interne fout*: kan taakserver-semafoor '%s' niet openen: (Fout %ld: %s)ongeldige syntax in voorwaardelijk deeltaakserver is gestopttaakserverpijplijnlbr$ini_control() is mislukt, afsluitwaarde = %duitpakken van module-info door lbr$set_module() is mislukt, afsluitwaarde= %d'make' heeft dochterproces met PID %s verwerkt, maar wacht nog op PID %s Makefileontbrekende 'endef', onafgemaakte 'define'ontbrekende 'endif'ontbrekende regel vóór receptontbrekend scheidingstekenontbrekend scheidingsteken (bedoelde u een TAB in plaats van 8 spaties?)ontbrekend doelpatroongemengde impliciete en normale regelsgemengde impliciete en statische patroonregelsmeerdere doelpatronengeengeen bestandshandvatten meer beschikbaar: kan standaardfoutuitvoer niet dupliceren geen bestandshandvatten meer beschikbaar: kan standaardinvoer niet dupliceren geen bestandshandvatten meer beschikbaar: kan standaarduitvoer niet dupliceren niet-numeriek eerste argument van 'word'-functieniet-numeriek eerste argument van 'wordlist'-functieniet-numeriek tweede argument van 'wordlist'-functieslechts één 'else' per voorwaardelijk deelopen(): %s: %svereisten kunnen niet in recepten gedefinieerd wordenprocess_easy() kan geen proces starten (e=%ld) pselect() van takenpijplezen van takenpijpread(): %s: %srecept begint voor eerste doelvrijgeven van taakserver-semafoor: (Fout %ld: %s)wachten op semafoor of dochterproces: (Fout %ld: %s)spawnvpe: mogelijk geen omgevingsruimte meer beschikbaarsys$search() is mislukt met afsluitwaarde %d doel '%s' komt niet overeen met doelpatroondoel '%s' is meerdere keren gegeven in dezelfde regeldoelbestand '%s' heeft zowel ':'- als '::'-itemsdoelpatroon bevat geen '%%'de optie '%s%sc' vereist een niet-lege tekenreeks als argumentde optie '-%c' vereist een positief geheel getal als argumenthet 'touchen' van een archiefonderdeel is niet mogelijk op VMStouch: '%s' is geen geldig archieftouch: archief '%s' bestaat niettouch: ar_member_touch() van '%s' is mislukttouch: onderdeel '%s' bestaat niet in '%s'kan bibliotheek '%s' niet openen om status van onderdeel %d op te zoekenniet-geïmplementeerd op dit platform: functie '%s'onbekende aanduiding '%s' voor debug-niveauonbekend uitvoersynchronisatie-type: '%s'onbekend signaalverwijderen (van tijdelijk bestand): onafgemaakte aanroep van functie '%s': '%c' ontbreektonafgemaakte verwijzing naar variabeleWaarschuwing: Klokafwijking geconstateerd. Het maken is mogelijk onvolledig gebeurd.Waarschuwing: '-j%d' is afgedwongen in makefile: taakserver-modus uitgezet.Waarschuwing: '-j%d' is afgedwongen in een deelproces: taakserver-modus uitgezet.Waarschuwing: NUL-teken gezien; de rest van de regel wordt genegeerdWaarschuwing: oud recept voor doel '%s' wordt genegeerdWaarschuwing: taakserver is onbeschikbaar: '-j1' wordt gebruikt. Voeg '+' toe aan de ouderregel.Waarschuwing: er wordt voorbijgegaan aan groepslidmaatschap voor doel '%s'Waarschuwing: er wordt voorbijgegaan aan recept voor doel '%s'Waarschuwing: ongedefinieerde variabele '%.*s'windows32_openpipe(): process_init_fd() is mislukt windows32_openpipe(): DuplicateHandle(Err) is mislukt (e=%ld) windows32_openpipe(): DuplicateHandle(In) is mislukt (e=%ld) schrijffout: standaarduitvoerschrijven naar taakserverwrite(): %s: %smake-4.3/po/zh_TW.po0000644000175000017500000015312113611136532011233 00000000000000# Chinese (traditional) translation for make. # Copyright (C) 2002 Free Software Foundation, Inc. # This file is distributed under the same license as the make package. # # Wang Li , 2002. # LI Daobing , 2008, 2013. # Mingye Wang , 2015, 2016. # Y.C Cheng , 2017. # Boyuan Yang <073plan@gmail.com>, 2018, 2019. # pan93412 , 2019, 2020. msgid "" msgstr "" "Project-Id-Version: make 4.2.93\n" "Report-Msgid-Bugs-To: bug-make@gnu.org\n" "POT-Creation-Date: 2020-01-19 15:34-0500\n" "PO-Revision-Date: 2020-01-03 20:13+0800\n" "Last-Translator: pan93412 \n" "Language-Team: Chinese (traditional) \n" "Language: zh_TW\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "X-Generator: Lokalize 19.12.0\n" "X-ZhConverter: ç¹åŒ–姬 dict-4ac8d2ed-r906 @ 2019/10/24 21:28:21 | https://" "zhconvert.org\n" "Plural-Forms: nplurals=1; plural=0;\n" #: src/ar.c:46 #, c-format msgid "attempt to use unsupported feature: '%s'" msgstr "è©¦åœ–ä½¿ç”¨ä¸æ”¯æ´çš„功能:「%sã€" #: src/ar.c:123 #, c-format msgid "touch archive member is not available on VMS" msgstr "VMS ç³»çµ±ä¸Šä¸æ”¯æ´ touch å°å­˜æˆå“¡" #: src/ar.c:147 #, c-format msgid "touch: Archive '%s' does not exist" msgstr "touch:å°å­˜æª”案「%sã€ä¸å­˜åœ¨" #: src/ar.c:150 #, c-format msgid "touch: '%s' is not a valid archive" msgstr "touch:「%sã€ä¸æ˜¯æœ‰æ•ˆçš„å°å­˜æª”案" #: src/ar.c:157 #, c-format msgid "touch: Member '%s' does not exist in '%s'" msgstr "touch:在「%2$sã€ä¸­ä¸å­˜åœ¨æˆå“¡ã€Œ%1$sã€" #: src/ar.c:164 #, c-format msgid "touch: Bad return code from ar_member_touch on '%s'" msgstr "touch:「%sã€ä¸Šçš„ ar_member_touch 的返回碼ä¸ç•¶" #: src/arscan.c:130 #, c-format msgid "lbr$set_module() failed to extract module info, status = %d" msgstr "lbr$set_modules() å–得模組訊æ¯å¤±æ•—,返回狀態 = %d" #: src/arscan.c:236 #, c-format msgid "lbr$ini_control() failed with status = %d" msgstr "lbr$ini_control() 失敗,返回狀態 = %d" #: src/arscan.c:261 #, c-format msgid "unable to open library '%s' to lookup member status %d" msgstr "無法打開函å¼åº«ã€Œ%sã€ä»¥å°‹æ‰¾æˆå“¡ï¼Œç‹€æ…‹ %d" #: src/arscan.c:944 #, c-format msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n" msgstr "æˆå“¡ã€Œ%sã€%s: %ld ä½å…ƒçµ„æ–¼ %ld (%ld)。\n" #: src/arscan.c:945 msgid " (name might be truncated)" msgstr " (å稱å¯èƒ½è¢«æˆªæ–·)" #: src/arscan.c:947 #, c-format msgid " Date %s" msgstr " 日期 %s" #: src/arscan.c:948 #, c-format msgid " uid = %d, gid = %d, mode = 0%o.\n" msgstr " uid = %d,gid = %d,mode = 0%o。\n" #: src/commands.c:403 #, c-format msgid "Recipe has too many lines (%ud)" msgstr "指令方案行數太多 (%ud)" #: src/commands.c:504 msgid "*** Break.\n" msgstr "*** 中斷。\n" #: src/commands.c:628 #, c-format msgid "*** [%s] Archive member '%s' may be bogus; not deleted" msgstr "*** [%s] å°å­˜æˆå“¡ã€Œ%sã€å¯èƒ½æ˜¯å‡çš„;未刪除" # 是化學的æˆåˆ†ï¼Œæ˜¯ç‰¹æŠ€ï¼ #: src/commands.c:632 #, c-format msgid "*** Archive member '%s' may be bogus; not deleted" msgstr "*** å°å­˜æˆå“¡ã€Œ%sã€å¯èƒ½æ˜¯å‡çš„;未刪除" #: src/commands.c:646 #, c-format msgid "*** [%s] Deleting file '%s'" msgstr "*** [%s] 正在刪除檔案「%sã€" #: src/commands.c:648 #, c-format msgid "*** Deleting file '%s'" msgstr "*** 正在刪除檔案「%sã€" #: src/commands.c:684 msgid "# recipe to execute" msgstr "# è¦åŸ·è¡Œçš„æ–¹æ¡ˆ" #: src/commands.c:687 msgid " (built-in):" msgstr " (內建):" #: src/commands.c:689 #, c-format msgid " (from '%s', line %lu):\n" msgstr " (從「%sã€ï¼Œè¡Œ %lu):\n" #: src/dir.c:1073 msgid "" "\n" "# Directories\n" msgstr "" "\n" "# 目錄\n" #: src/dir.c:1085 #, c-format msgid "# %s: could not be stat'd.\n" msgstr "# %s:無法å°å…¶é€²è¡Œ stat 動作。\n" #: src/dir.c:1089 msgid "# %s (key %s, mtime %I64u): could not be opened.\n" msgstr "# %s (é—œéµå­— %s,修改時間 %I64u):無法打開。\n" #: src/dir.c:1094 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n" msgstr "# %s (è£ç½® %d,i-節點 [%d,%d,%d]):無法打開。\n" #: src/dir.c:1099 #, c-format msgid "# %s (device %ld, inode %ld): could not be opened.\n" msgstr "# %s (è£ç½® %ld,i-節點 %ld):無法打開。\n" #: src/dir.c:1126 msgid "# %s (key %s, mtime %I64u): " msgstr "# %s (é—œéµå­— %s,修改時間 %I64u):" #: src/dir.c:1131 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): " msgstr "# %s (è£ç½® %d,i-節點 [%d,%d,%d]):" #: src/dir.c:1136 #, c-format msgid "# %s (device %ld, inode %ld): " msgstr "# %s (è£ç½® %ld,i-節點 %ld):" #: src/dir.c:1142 src/dir.c:1163 msgid "No" msgstr "ç„¡" #: src/dir.c:1145 src/dir.c:1166 msgid " files, " msgstr " 檔案, " #: src/dir.c:1147 src/dir.c:1168 msgid "no" msgstr "ç„¡" #: src/dir.c:1150 msgid " impossibilities" msgstr " ä¸å¯èƒ½" #: src/dir.c:1154 msgid " so far." msgstr " 迄今為止。" #: src/dir.c:1171 #, c-format msgid " impossibilities in %lu directories.\n" msgstr " ä¸å¯èƒ½åœ¨ %lu 目錄中。\n" #: src/expand.c:125 #, c-format msgid "Recursive variable '%s' references itself (eventually)" msgstr "éžè¿´è®Šæ•¸ã€Œ%sã€ï¼ˆæœ€çµ‚將會)引用自身" #: src/expand.c:271 #, c-format msgid "unterminated variable reference" msgstr "未終止的變數引用" #: src/file.c:278 #, c-format msgid "Recipe was specified for file '%s' at %s:%lu," msgstr "關於檔案「%sã€çš„æŒ‡ä»¤æ–¹æ¡ˆåœ¨ %s:%lu 處指定," #: src/file.c:283 #, c-format msgid "Recipe for file '%s' was found by implicit rule search," msgstr "關於檔案「%sã€çš„æŒ‡ä»¤æ–¹æ¡ˆé€éŽéš±å«è¦å‰‡æœå°‹è€Œæ‰¾åˆ°ï¼Œ" #: src/file.c:287 #, c-format msgid "but '%s' is now considered the same file as '%s'." msgstr "但「%sã€ç¾åœ¨è¢«çœ‹åšã€Œ%sã€çš„åŒä¸€å€‹æª”案。" #: src/file.c:290 #, c-format msgid "Recipe for '%s' will be ignored in favor of the one for '%s'." msgstr "「%sã€çš„æŒ‡ä»¤æ–¹æ¡ˆè¢«å¿½ç•¥ï¼Œè½‰è€Œä½¿ç”¨ã€Œ%sã€çš„。" #: src/file.c:310 #, c-format msgid "can't rename single-colon '%s' to double-colon '%s'" msgstr "無法將單冒號「%sã€é‡æ–°å‘½å為雙冒號「%sã€" #: src/file.c:316 #, c-format msgid "can't rename double-colon '%s' to single-colon '%s'" msgstr "無法將雙冒號「%sã€é‡æ–°å‘½å為單冒號「%sã€" #: src/file.c:408 #, c-format msgid "*** Deleting intermediate file '%s'" msgstr "*** 正在刪除中間檔案「%sã€" #: src/file.c:412 #, c-format msgid "Removing intermediate files...\n" msgstr "正在刪除中間檔案...\n" #: src/file.c:872 msgid "Current time" msgstr "ç›®å‰æ™‚é–“" #: src/file.c:876 #, c-format msgid "%s: Timestamp out of range; substituting %s" msgstr "%s:時間標記超出範åœï¼›æ­£åœ¨å–代 %s" #: src/file.c:1016 msgid "# Not a target:" msgstr "# 䏿˜¯ä¸€å€‹ç›®æ¨™ï¼š" #: src/file.c:1021 msgid "# Precious file (prerequisite of .PRECIOUS)." msgstr "# é‡è¦æª”案 (.PRECIOUS çš„å‰æ)。" #: src/file.c:1023 msgid "# Phony target (prerequisite of .PHONY)." msgstr "# å‡ç›®æ¨™ (.PHONY çš„å‰æ)。" #: src/file.c:1025 msgid "# Command line target." msgstr "# 指令列目標。" #: src/file.c:1027 msgid "# A default, MAKEFILES, or -include/sinclude makefile." msgstr "# é è¨­çš„ã€MAKEFILES 指定的ã€-include/sinclude 包å«çš„ makefile。" #: src/file.c:1029 msgid "# Builtin rule" msgstr "# 內建è¦å‰‡" #: src/file.c:1031 msgid "# Implicit rule search has been done." msgstr "# å°éš±å«è¦å‰‡çš„æœå°‹å·²å®Œæˆã€‚" #: src/file.c:1032 msgid "# Implicit rule search has not been done." msgstr "# å°éš±å«è¦å‰‡çš„æœå°‹å°šæœªå®Œæˆã€‚" #: src/file.c:1034 #, c-format msgid "# Implicit/static pattern stem: '%s'\n" msgstr "# éš±å«/éœæ…‹æ¨¡å¼ä¸»å¹¹ï¼šã€Œ%sã€\n" #: src/file.c:1036 msgid "# File is an intermediate prerequisite." msgstr "# æª”æ¡ˆæ˜¯ä¸€å€‹ä¸­é–“å‰æã€‚" #: src/file.c:1040 msgid "# Also makes:" msgstr "# é‚„è¦è£½ä½œï¼š" #: src/file.c:1046 msgid "# Modification time never checked." msgstr "# å¾žä¸æª¢æŸ¥ä¿®æ”¹æ™‚間。" #: src/file.c:1048 msgid "# File does not exist." msgstr "# 檔案ä¸å­˜åœ¨ã€‚" #: src/file.c:1050 msgid "# File is very old." msgstr "# 檔案éžå¸¸é™³èˆŠã€‚" #: src/file.c:1055 #, c-format msgid "# Last modified %s\n" msgstr "# 最近更新 %s\n" #: src/file.c:1058 msgid "# File has been updated." msgstr "# 檔案已經被更新。" #: src/file.c:1058 msgid "# File has not been updated." msgstr "# 檔案尚未被更新。" #: src/file.c:1062 msgid "# Recipe currently running (THIS IS A BUG)." msgstr "# 正在執行的方案 (這是 BUG)。" #: src/file.c:1065 msgid "# Dependencies recipe running (THIS IS A BUG)." msgstr "# 正在執行的ä¾è³´æ€§æ–¹æ¡ˆ (這是 BUG)。" #: src/file.c:1074 msgid "# Successfully updated." msgstr "# æ›´æ–°æˆåŠŸã€‚" #: src/file.c:1078 msgid "# Needs to be updated (-q is set)." msgstr "# éœ€è¦æ›´æ–° (用 -q 設定)。" #: src/file.c:1081 msgid "# Failed to be updated." msgstr "# 更新失敗。" #: src/file.c:1086 msgid "# Invalid value in 'command_state' member!" msgstr "# 「command_stateã€æˆå“¡ä¸­å­˜åœ¨ç„¡æ•ˆçš„值ï¼" #: src/file.c:1105 msgid "" "\n" "# Files" msgstr "" "\n" "# 檔案" #: src/file.c:1109 msgid "" "\n" "# files hash-table stats:\n" "# " msgstr "" "\n" "# 檔案雜湊表狀態:\n" "# " #: src/file.c:1119 #, c-format msgid "%s: Field '%s' not cached: %s" msgstr "%s:欄ä½ã€Œ%sã€æœªè¢«å¿«å–:%s" #: src/function.c:794 msgid "non-numeric first argument to 'word' function" msgstr "「wordã€å‡½æ•¸çš„ç¬¬ä¸€å€‹åƒæ•¸ä¸æ˜¯æ•¸å­—" #: src/function.c:799 #, c-format msgid "first argument to 'word' function must be greater than 0" msgstr "「wordã€å‡½æ•¸çš„ç¬¬ä¸€å€‹åƒæ•¸å¿…須大於 0" #: src/function.c:819 msgid "non-numeric first argument to 'wordlist' function" msgstr "「wordlistã€å‡½æ•¸çš„ç¬¬ä¸€å€‹åƒæ•¸ä¸æ˜¯æ•¸å­—" #: src/function.c:821 msgid "non-numeric second argument to 'wordlist' function" msgstr "「wordlistã€å‡½æ•¸çš„ç¬¬äºŒå€‹åƒæ•¸ä¸æ˜¯æ•¸å­—" # 程å¼è¨­è¨ˆå¸«çš„函數åæç¤ºï¼Œé‚„是ä¸è¦å‹•å§ã€‚ #: src/function.c:1533 #, c-format msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n" msgstr "windows32_openpipe: DuplicateHandle(In) 失敗 (e=%ld)\n" #: src/function.c:1557 #, c-format msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n" msgstr "windows32_openpipe: DuplicateHandle(Err) 失敗 (e=%ld)\n" #: src/function.c:1564 #, c-format msgid "CreatePipe() failed (e=%ld)\n" msgstr "CreatePipe() 失敗 (e=%ld)\n" #: src/function.c:1572 #, c-format msgid "windows32_openpipe(): process_init_fd() failed\n" msgstr "windows32_openpipe(): process_init_fd() 失敗\n" #: src/function.c:1857 #, c-format msgid "Cleaning up temporary batch file %s\n" msgstr "正在清除暫時批次檔 %s\n" #: src/function.c:2230 src/function.c:2255 #, c-format msgid "file: missing filename" msgstr "file:缺少檔案å" #: src/function.c:2234 src/function.c:2265 #, c-format msgid "open: %s: %s" msgstr "open: %s: %s" #: src/function.c:2242 #, c-format msgid "write: %s: %s" msgstr "write: %s: %s" #: src/function.c:2245 src/function.c:2282 #, c-format msgid "close: %s: %s" msgstr "close:%s:%s" #: src/function.c:2258 #, c-format msgid "file: too many arguments" msgstr "fileï¼šå¤ªå¤šåƒæ•¸" #: src/function.c:2277 #, c-format msgid "read: %s: %s" msgstr "read:%s:%s" #: src/function.c:2290 #, c-format msgid "file: invalid file operation: %s" msgstr "file:無效檔案(file)動作:%s" #: src/function.c:2405 #, c-format msgid "insufficient number of arguments (%d) to function '%s'" msgstr "函數「%2$sã€çš„åƒæ•¸æ•¸é‡ (%1$d) ä¸å¤ " #: src/function.c:2417 #, c-format msgid "unimplemented on this platform: function '%s'" msgstr "在本平å°ä¸Šæœªå¯¦ç¾ï¼šå‡½æ•¸ã€Œ%sã€" #: src/function.c:2483 #, c-format msgid "unterminated call to function '%s': missing '%c'" msgstr "å°å‡½æ•¸ã€Œ%sã€çš„æœªçµ‚止的呼å«ï¼šéºæ¼ã€Œ%cã€" #: src/function.c:2667 #, c-format msgid "Empty function name" msgstr "空函數å" #: src/function.c:2669 #, c-format msgid "Invalid function name: %s" msgstr "無效的函數å稱:%s" #: src/function.c:2671 #, c-format msgid "Function name too long: %s" msgstr "函數å稱太長:%s" #: src/function.c:2674 #, c-format msgid "Invalid minimum argument count (%u) for function %s" msgstr "函數「%2$sã€çš„æœ€å°‘åƒæ•¸æ•¸é‡ (%1$u) 無效" #: src/function.c:2677 #, c-format msgid "Invalid maximum argument count (%u) for function %s" msgstr "函數「%2$sã€çš„æœ€å¤šåƒæ•¸æ•¸é‡ (%1$u) 無效" #: src/getopt.c:659 #, c-format msgid "%s: option '%s' is ambiguous\n" msgstr "%s:é¸é …「%sã€å«ç¾©ä¸æ¸…\n" #: src/getopt.c:683 #, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s:é¸é …「--%sã€ä¸å…è¨±åƒæ•¸\n" #: src/getopt.c:688 #, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s:é¸é …「%c%sã€ä¸å…è¨±åƒæ•¸\n" #: src/getopt.c:705 src/getopt.c:878 #, c-format msgid "%s: option '%s' requires an argument\n" msgstr "%s:é¸é …「%sã€éœ€è¦ä¸€å€‹åƒæ•¸\n" #: src/getopt.c:734 #, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s:無法識別的é¸é …「--%sã€\n" #: src/getopt.c:738 #, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s:無法識別的é¸é …「%c%sã€\n" #: src/getopt.c:764 #, c-format msgid "%s: illegal option -- %c\n" msgstr "%s:é¸é …無效 ─ %c\n" #: src/getopt.c:767 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s:無效é¸é … -- %c\n" #: src/getopt.c:797 src/getopt.c:927 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s:é¸é …需è¦ä¸€å€‹åƒæ•¸ -- %c\n" #: src/getopt.c:844 #, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s:é¸é …「-W %sã€å«ç¾©ä¸æ¸…\n" #: src/getopt.c:862 #, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s:é¸é …「-W %sã€ä¸å…è¨±çµ¦å‡ºåƒæ•¸\n" #: src/guile.c:58 #, c-format msgid "guile: Expanding '%s'\n" msgstr "guile: 正展開 '%s'\n" #: src/guile.c:74 #, c-format msgid "guile: Evaluating '%s'\n" msgstr "guile: 正求值 '%s'\n" #: src/hash.c:50 #, c-format msgid "can't allocate %lu bytes for hash table: memory exhausted" msgstr "ç„¡æ³•ç‚ºé›œæ¹Šè¡¨åˆ†é… %lu ä½å…ƒçµ„: 記憶體耗盡" #: src/hash.c:280 #, c-format msgid "Load=%lu/%lu=%.0f%%, " msgstr "負載=%lu/%lu=%.0f%%, " #: src/hash.c:282 #, c-format msgid "Rehash=%u, " msgstr "釿–°é›œæ¹Š=%u, " #: src/hash.c:283 #, c-format msgid "Collisions=%lu/%lu=%.0f%%" msgstr "碰撞=%lu/%lu=%.0f%%" #: src/implicit.c:38 #, c-format msgid "Looking for an implicit rule for '%s'.\n" msgstr "正在為「%sã€å°‹æ‰¾éš±å«è¦å‰‡ã€‚\n" #: src/implicit.c:54 #, c-format msgid "Looking for archive-member implicit rule for '%s'.\n" msgstr "正在為「%sã€å°‹æ‰¾å°å­˜æˆå“¡éš±å«è¦å‰‡ã€‚\n" #: src/implicit.c:311 #, c-format msgid "Avoiding implicit rule recursion.\n" msgstr "é¿å…éš±å«è¦å‰‡éžè¿´ã€‚\n" #: src/implicit.c:484 #, c-format msgid "Stem too long: '%s%.*s'.\n" msgstr "主幹太長:「%s%.*sã€ã€‚\n" #: src/implicit.c:490 #, c-format msgid "Trying pattern rule with stem '%.*s'.\n" msgstr "用主幹「%.*sã€å˜—è©¦ç¬¦åˆæ¨¡å¼è¦å‰‡ã€‚\n" #: src/implicit.c:717 #, c-format msgid "Rejecting impossible rule prerequisite '%s'.\n" msgstr "拒絕ä¸å¯èƒ½çš„è¦å‰‡å‰æã€Œ%sã€ã€‚\n" #: src/implicit.c:718 #, c-format msgid "Rejecting impossible implicit prerequisite '%s'.\n" msgstr "拒絕ä¸å¯èƒ½çš„éš±å«å‰æã€Œ%sã€ã€‚\n" #: src/implicit.c:732 #, c-format msgid "Trying rule prerequisite '%s'.\n" msgstr "嘗試è¦å‰‡å‰æã€Œ%sã€ã€‚\n" #: src/implicit.c:733 #, c-format msgid "Trying implicit prerequisite '%s'.\n" msgstr "嘗試隱å«å‰æã€Œ%sã€ã€‚\n" #: src/implicit.c:772 #, c-format msgid "Found prerequisite '%s' as VPATH '%s'\n" msgstr "å‰æã€Œ%sã€åœ¨ VPATH「%sã€ä¸­ç™¼ç¾\n" #: src/implicit.c:786 #, c-format msgid "Looking for a rule with intermediate file '%s'.\n" msgstr "正在尋找包å«ä¸­é–“檔案「%sã€çš„è¦å‰‡ã€‚\n" #: src/job.c:370 msgid "Cannot create a temporary file\n" msgstr "無法建立暫存檔\n" #: src/job.c:548 msgid " (core dumped)" msgstr " (已傾尿 ¸å¿ƒ)" #: src/job.c:553 msgid " (ignored)" msgstr " (已忽略)" #: src/job.c:557 src/job.c:1892 msgid "" msgstr "<內建>" #: src/job.c:573 #, c-format msgid "%s[%s: %s] Error %d%s" msgstr "%s[%s:%s] 錯誤 %d%s" #: src/job.c:662 #, c-format msgid "*** Waiting for unfinished jobs...." msgstr "*** 正在等待未完æˆçš„作業...." #: src/job.c:704 #, c-format msgid "Live child %p (%s) PID %s %s\n" msgstr "使用中å­ç¨‹åº %p (%s) PID %s %s\n" #: src/job.c:706 src/job.c:900 src/job.c:1072 src/job.c:1644 #, c-format msgid " (remote)" msgstr " (é ç«¯)" #: src/job.c:898 #, c-format msgid "Reaping winning child %p PID %s %s\n" msgstr "正在中止ç²å‹çš„å­ç¨‹åº %p PID %s %s\n" #: src/job.c:899 #, c-format msgid "Reaping losing child %p PID %s %s\n" msgstr "正在中止失敗的å­ç¨‹åº %p PID %s %s\n" #: src/job.c:950 #, c-format msgid "Cleaning up temp batch file %s\n" msgstr "正在清除暫時批次檔 %s\n" #: src/job.c:956 #, c-format msgid "Cleaning up temp batch file %s failed (%d)\n" msgstr "æ¸…ç†æš«æ™‚批次檔 %s 失敗 (%d)\n" #: src/job.c:1071 #, c-format msgid "Removing child %p PID %s%s from chain.\n" msgstr "從éˆä¸­åˆªé™¤å­ç¨‹åº %p PID %s%s。\n" #: src/job.c:1120 #, c-format msgid "Released token for child %p (%s).\n" msgstr "為å­ç¨‹åº %p (%s) 釋放憑證 (token)。\n" #: src/job.c:1575 src/job.c:2487 #, c-format msgid "process_easy() failed to launch process (e=%ld)\n" msgstr "process_easy() 啟動處ç†ç¨‹åºå¤±æ•— (e=%ld)\n" #: src/job.c:1579 src/job.c:2491 #, c-format msgid "" "\n" "Counted %d args in failed launch\n" msgstr "" "\n" "失敗執行中共有 %d å€‹åƒæ•¸ã€‚\n" #: src/job.c:1642 #, c-format msgid "Putting child %p (%s) PID %s%s on the chain.\n" msgstr "å°‡å­ç¨‹åº %p (%s) PID %s%s 放入éˆã€‚\n" #: src/job.c:1875 #, c-format msgid "Obtained token for child %p (%s).\n" msgstr "å–得至處ç†ç¨‹åº %p (%s) 的標記。\n" #: src/job.c:1902 #, c-format msgid "%s: target '%s' does not exist" msgstr "%s: 目標檔案「%sã€ä¸å­˜åœ¨" #: src/job.c:1905 #, c-format msgid "%s: update target '%s' due to: %s" msgstr "%s:更新「%sã€ï¼Œå› ç‚ºï¼š%s" #: src/job.c:2108 #, c-format msgid "cannot enforce load limits on this operating system" msgstr "無法在本作業系統中實施負載é™åˆ¶" #: src/job.c:2110 msgid "cannot enforce load limit: " msgstr "無法實施負載é™åˆ¶ï¼š" #: src/job.c:2200 #, c-format msgid "no more file handles: could not duplicate stdin\n" msgstr "沒有剩餘的檔案處ç†å™¨: 無法複製標準輸入\n" #: src/job.c:2212 #, c-format msgid "no more file handles: could not duplicate stdout\n" msgstr "沒有剩餘的檔案處ç†å™¨: 無法複製標準輸出\n" #: src/job.c:2226 #, c-format msgid "no more file handles: could not duplicate stderr\n" msgstr "沒有剩餘的檔案處ç†å™¨: 無法複製標準錯誤\n" #: src/job.c:2241 #, c-format msgid "Could not restore stdin\n" msgstr "無法還原標準輸入\n" #: src/job.c:2249 #, c-format msgid "Could not restore stdout\n" msgstr "無法還原標準輸出\n" #: src/job.c:2257 #, c-format msgid "Could not restore stderr\n" msgstr "無法還原標準錯誤\n" #: src/job.c:2520 #, c-format msgid "make reaped child pid %s, still waiting for pid %s\n" msgstr "make 已中止的å­ç¨‹åº pid %s,ä»åœ¨ç­‰å¾… pid %s\n" #: src/job.c:2623 #, c-format msgid "spawnvpe: environment space might be exhausted" msgstr "spawnvpe: 環境變數空間å¯èƒ½æœƒè€—盡" #: src/job.c:2862 #, c-format msgid "$SHELL changed (was '%s', now '%s')\n" msgstr "$SHELL 已改變 (原為「%sã€ï¼Œç¾ç‚ºã€Œ%sã€)\n" #: src/job.c:3300 src/job.c:3485 #, c-format msgid "Creating temporary batch file %s\n" msgstr "正在建立暫時批檔案 %s\n" #: src/job.c:3308 #, c-format msgid "" "Batch file contents:\n" "\t@echo off\n" msgstr "" "批次檔內容:\n" "\t@echo off\n" #: src/job.c:3497 #, c-format msgid "" "Batch file contents:%s\n" "\t%s\n" msgstr "" "批次檔內容:%s\n" "\t%s\n" #: src/job.c:3605 #, c-format msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n" msgstr "%s (行 %d) 錯誤的 shell 上下文 (!unixy && !batch_mode_shell)\n" #: src/load.c:60 #, c-format msgid "Failed to open global symbol table: %s" msgstr "打開全域符號表失敗:%s" #: src/load.c:97 #, c-format msgid "Loaded object %s is not declared to be GPL compatible" msgstr "已載入的物件 %s æœªè²æ˜Žç‚º GPL 相容" #: src/load.c:104 #, c-format msgid "Failed to load symbol %s from %s: %s" msgstr "從 %2$s 載入符號 %1$s 失敗:%3$s" #: src/load.c:149 #, c-format msgid "Empty symbol name for load: %s" msgstr "è¦è¼‰å…¥çš„符號å為空:%s" #: src/load.c:204 #, c-format msgid "Loading symbol %s from %s\n" msgstr "正從 %2$s 載入符號 %1$s\n" #: src/load.c:256 #, c-format msgid "The 'load' operation is not supported on this platform." msgstr "本平å°ä¸æ”¯æ´ã€Œloadã€å‹•作。" #: src/main.c:335 msgid "Options:\n" msgstr "é¸é …:\n" #: src/main.c:336 msgid " -b, -m Ignored for compatibility.\n" msgstr " -b, -m 為相容性而忽略。\n" #: src/main.c:338 msgid " -B, --always-make Unconditionally make all targets.\n" msgstr " -B, --always-make ç„¡æ¢ä»¶è£½ä½œ (make) 所有目標。\n" #: src/main.c:340 msgid "" " -C DIRECTORY, --directory=DIRECTORY\n" " Change to DIRECTORY before doing anything.\n" msgstr " -C 目錄, --directory=目錄 在執行å‰å…ˆåˆ‡æ›åˆ° <目錄>。\n" #: src/main.c:343 msgid " -d Print lots of debugging information.\n" msgstr " -d 輸出大é‡é™¤éŒ¯è¨Šæ¯ã€‚\n" #: src/main.c:345 msgid "" " --debug[=FLAGS] Print various types of debugging information.\n" msgstr " --debug[=旗標] 輸出å„種除錯訊æ¯ã€‚\n" #: src/main.c:347 msgid "" " -e, --environment-overrides\n" " Environment variables override makefiles.\n" msgstr "" " -e, --environment-overrides\n" " 環境變數覆蓋 makefile 中的變數。\n" #: src/main.c:350 msgid "" " -E STRING, --eval=STRING Evaluate STRING as a makefile statement.\n" msgstr " -E 字串, --eval=字串 å°‡ <字串> 作為 makefile 語å¥ä¼°å€¼ã€‚\n" #: src/main.c:352 msgid "" " -f FILE, --file=FILE, --makefile=FILE\n" " Read FILE as a makefile.\n" msgstr "" " -f 檔案, --file=檔案, --makefile=檔案\n" " 從 <檔案> 中讀入 makefile。\n" #: src/main.c:355 msgid " -h, --help Print this message and exit.\n" msgstr " -h, --help 輸出該訊æ¯ä¸¦é›¢é–‹ã€‚\n" #: src/main.c:357 msgid " -i, --ignore-errors Ignore errors from recipes.\n" msgstr " -i, --ignore-errors 忽略來自指令方案的錯誤。\n" #: src/main.c:359 msgid "" " -I DIRECTORY, --include-dir=DIRECTORY\n" " Search DIRECTORY for included makefiles.\n" msgstr " -I 目錄, --include-dir=目錄 在 <目錄> 中æœå°‹è¢«åŒ…å«çš„ makefile。\n" #: src/main.c:362 msgid "" " -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no " "arg.\n" msgstr "" " -j [N], --jobs[=N] åŒæ™‚å…許 N å€‹ä½œæ¥­ï¼›ç„¡åƒæ•¸è¡¨æ˜Žå…許無é™å€‹ä½œæ¥­ã€‚\n" #: src/main.c:364 msgid "" " -k, --keep-going Keep going when some targets can't be made.\n" msgstr " -k, --keep-going ç•¶æŸäº›ç›®æ¨™ç„¡æ³•製作時ä»ç„¶ç¹¼çºŒã€‚\n" #: src/main.c:366 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" " 在系統負載高於 N 時ä¸å•Ÿå‹•多作業。\n" #: src/main.c:369 msgid "" " -L, --check-symlink-times Use the latest mtime between symlinks and " "target.\n" msgstr "" " -L, --check-symlink-times 使用符號連çµåŠç¬¦è™Ÿé€£çµç›®æ¨™ä¸­ä¿®æ”¹æ™‚間較晚的一" "個。\n" #: src/main.c:371 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" #: src/main.c:374 msgid "" " -o FILE, --old-file=FILE, --assume-old=FILE\n" " Consider FILE to be very old and don't remake " "it.\n" msgstr "" " -o 檔案, --old-file=檔案, --assume-old=檔案\n" " å°‡ <檔案> ç•¶åšå¾ˆèˆŠï¼Œä¸å¿…釿–°è£½ä½œã€‚\n" #: src/main.c:377 msgid "" " -O[TYPE], --output-sync[=TYPE]\n" " Synchronize output of parallel jobs by TYPE.\n" msgstr "" " -O[類型], --output-sync[=類型]\n" " 使用 <類型> æ–¹å¼åŒæ­¥ä¸¦è¡Œä½œæ¥­è¼¸å‡ºã€‚\n" #: src/main.c:380 msgid " -p, --print-data-base Print make's internal database.\n" msgstr " -p, --print-data-base 輸出 make 的內部資料庫。\n" #: src/main.c:382 msgid "" " -q, --question Run no recipe; exit status says if up to " "date.\n" msgstr "" " -q, --question ä¸åŸ·è¡Œä»»ä½•方案;離開狀態說明是å¦å·²å…¨éƒ¨æ›´æ–°ã€‚\n" #: src/main.c:384 msgid " -r, --no-builtin-rules Disable the built-in implicit rules.\n" msgstr " -r, --no-builtin-rules åœç”¨å…§å»ºéš±å«è¦å‰‡ã€‚\n" #: src/main.c:386 msgid " -R, --no-builtin-variables Disable the built-in variable settings.\n" msgstr " -R, --no-builtin-variables åœç”¨å…§å»ºè®Šæ•¸è¨­å®šã€‚\n" #: src/main.c:388 msgid " -s, --silent, --quiet Don't echo recipes.\n" msgstr " -s, --silent, --quiet ä¸è¼¸å‡ºæ–¹æ¡ˆæŒ‡ä»¤ã€‚\n" #: src/main.c:390 msgid " --no-silent Echo recipes (disable --silent mode).\n" msgstr " --no-silent å°æ–¹æ¡ˆé€²è¡Œå›žé¡¯ï¼ˆåœç”¨ --silent 模å¼ï¼‰ã€‚\n" #: src/main.c:392 msgid "" " -S, --no-keep-going, --stop\n" " Turns off -k.\n" msgstr "" " -S, --no-keep-going, --stop\n" " 關閉 -k。\n" #: src/main.c:395 msgid " -t, --touch Touch targets instead of remaking them.\n" msgstr "" " -t, --touch touch ç›®æ¨™ï¼ˆæ›´æ–°ä¿®æ”¹æ™‚é–“ï¼‰è€Œä¸æ˜¯é‡æ–°è£½ä½œå®ƒ" "們。\n" #: src/main.c:397 msgid " --trace Print tracing information.\n" msgstr " --trace 輸出跟蹤訊æ¯ã€‚\n" #: src/main.c:399 msgid "" " -v, --version Print the version number of make and exit.\n" msgstr " -v, --version 輸出 make 的版本號並離開。\n" #: src/main.c:401 msgid " -w, --print-directory Print the current directory.\n" msgstr " -w, --print-directory 輸出目å‰ç›®éŒ„。\n" #: src/main.c:403 msgid "" " --no-print-directory Turn off -w, even if it was turned on " "implicitly.\n" msgstr " --no-print-directory 關閉 -w,å³ä½¿ -w é è¨­é–‹å•Ÿã€‚\n" #: src/main.c:405 msgid "" " -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n" " Consider FILE to be infinitely new.\n" msgstr "" " -W 檔案, --what-if=檔案, --new-file=檔案, --assume-new=檔案\n" " å°‡ <檔案> ç•¶åšæœ€æ–°ã€‚\n" #: src/main.c:408 msgid "" " --warn-undefined-variables Warn when an undefined variable is " "referenced.\n" msgstr " --warn-undefined-variables 當引用未定義變數的時候發出警告。\n" #: src/main.c:671 #, c-format msgid "empty string invalid as file name" msgstr "空字串是無效的檔案å" #: src/main.c:754 #, c-format msgid "unknown debug level specification '%s'" msgstr "未知的除錯級別定義「%sã€" #: src/main.c:794 #, c-format msgid "unknown output-sync type '%s'" msgstr "䏿˜Žè¼¸å‡ºåŒæ­¥é¡žåž‹ã€Œ%sã€" #: src/main.c:849 #, c-format msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n" msgstr "%s:æ•ç²ä¸­æ–·/異常 (程å¼ç¢¼ = 0x%lx, ä½å€ = 0x%p)\n" #: src/main.c:856 #, c-format msgid "" "\n" "Unhandled exception filter called from program %s\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" msgstr "" "\n" "å¾žç¨‹å¼ %s 產生的未處ç†çš„ç•°å¸¸éŽæ¿¾å™¨\n" "異常碼 = %lx\n" "異常標誌 = %lx\n" "異常ä½å€ = 0x%p\n" #: src/main.c:864 #, c-format msgid "Access violation: write operation at address 0x%p\n" msgstr "å­˜å–è¡çªï¼šä½å€ 0x%p 處的寫入動作\n" #: src/main.c:865 #, c-format msgid "Access violation: read operation at address 0x%p\n" msgstr "å­˜å–è¡çªï¼šä½å€ 0x%p 處的讀å–動作\n" #: src/main.c:941 src/main.c:956 #, c-format msgid "find_and_set_shell() setting default_shell = %s\n" msgstr "find_and_set_shell() 設定 default_shell = %s\n" #: src/main.c:1009 #, c-format msgid "find_and_set_shell() path search set default_shell = %s\n" msgstr "find_and_set_shell() 路徑æœå°‹çµæžœè¨­å®š default_shell = %s\n" #: src/main.c:1609 #, c-format msgid "" "warning: jobserver unavailable: using -j1. Add '+' to parent make rule." msgstr "警告: jobserver ä¸å¯ç”¨: 正使用 -j1。添加「+ã€åˆ°çˆ¶ make çš„è¦å‰‡ã€‚" #: src/main.c:1617 #, c-format msgid "warning: -j%d forced in submake: resetting jobserver mode." msgstr "警告: å­ make 中強制 -j%d: é‡è¨­ jobserver 模å¼ã€‚" #: src/main.c:1781 #, c-format msgid "Makefile from standard input specified twice." msgstr "兩次指明來自標準輸入的 makefile。" #: src/main.c:1819 src/vmsjobs.c:1248 msgid "fopen (temporary file)" msgstr "fopen (暫存檔)" #: src/main.c:1825 msgid "fwrite (temporary file)" msgstr "fwrite (暫存檔)" #: src/main.c:2004 #, c-format msgid "warning: -j%d forced in makefile: resetting jobserver mode." msgstr "警告: å­ make 中強制 -j%d: é‡è¨­ jobserver 模å¼ã€‚" #: src/main.c:2068 #, c-format msgid "Parallel jobs (-j) are not supported on this platform." msgstr "本平å°ä¸æ”¯æ´ä¸¦è¡Œä½œæ¥­ (-j)。" #: src/main.c:2069 #, c-format msgid "Resetting to single job (-j1) mode." msgstr "é‡è¨­ç‚ºå–®ä½œæ¥­æ¨¡å¼ (-j1)。" #: src/main.c:2109 #, c-format msgid "Symbolic links not supported: disabling -L." msgstr "䏿”¯æ´ç¬¦è™Ÿé€£çµï¼šåœç”¨ -L。" #: src/main.c:2190 #, c-format msgid "Updating makefiles....\n" msgstr "正在更新 makefile....\n" #: src/main.c:2226 #, c-format msgid "Makefile '%s' might loop; not remaking it.\n" msgstr "Makefile「%sã€å¯èƒ½å¾ªç’°ï¼›ä¸æœƒé‡æ–°åŸ·è¡Œå®ƒã€‚\n" #: src/main.c:2303 #, c-format msgid "Failed to remake makefile '%s'." msgstr "釿–°åŸ·è¡Œ makefile「%sã€å¤±æ•—。" #: src/main.c:2323 #, c-format msgid "Included makefile '%s' was not found." msgstr "找ä¸åˆ°è¢«å¼•入的 makefile「%sã€ã€‚" #: src/main.c:2328 #, c-format msgid "Makefile '%s' was not found" msgstr "找ä¸åˆ° makefile「%sã€" #: src/main.c:2394 #, c-format msgid "Couldn't change back to original directory." msgstr "無法回到原始目錄。" #: src/main.c:2402 #, c-format msgid "Re-executing[%u]:" msgstr "釿–°åŸ·è¡Œ[%u]:" #: src/main.c:2522 msgid "unlink (temporary file): " msgstr "刪除 (暫存檔):" #: src/main.c:2555 #, c-format msgid ".DEFAULT_GOAL contains more than one target" msgstr ".DEFAULT_GOAL 包å«å¤šé¤˜ä¸€å€‹ç›®æ¨™" #: src/main.c:2579 #, c-format msgid "No targets" msgstr "無目標" #: src/main.c:2581 #, c-format msgid "No targets specified and no makefile found" msgstr "沒有指明目標並且找ä¸åˆ° makefile" #: src/main.c:2586 #, c-format msgid "Updating goal targets....\n" msgstr "更新目標....\n" #: src/main.c:2610 #, c-format msgid "warning: Clock skew detected. Your build may be incomplete." msgstr "警告:檢測到時é˜éŒ¯èª¤ã€‚您的構建版本å¯èƒ½æ˜¯ä¸å®Œæ•´çš„。" #: src/main.c:2804 #, c-format msgid "Usage: %s [options] [target] ...\n" msgstr "用法:%s [é¸é …] [目標] ...\n" #: src/main.c:2810 #, c-format msgid "" "\n" "This program built for %s\n" msgstr "" "\n" "該程å¼ç‚º %s 編譯\n" #: src/main.c:2812 #, c-format msgid "" "\n" "This program built for %s (%s)\n" msgstr "" "\n" "該程å¼ç‚º %s (%s) 編譯\n" #: src/main.c:2815 #, c-format msgid "Report bugs to \n" msgstr "報告錯誤到 \n" #: src/main.c:2901 #, c-format msgid "the '%s%s' option requires a non-empty string argument" msgstr "「%s%sã€é¸é …需è¦éžç©ºå­—ä¸²åƒæ•¸" #: src/main.c:2965 #, c-format msgid "the '-%c' option requires a positive integer argument" msgstr "「-%cã€é¸é …éœ€è¦æ­£æ•´æ•¸åƒæ•¸" #: src/main.c:3363 #, c-format msgid "%sBuilt for %s\n" msgstr "%s為 %s 編譯\n" #: src/main.c:3365 #, c-format msgid "%sBuilt for %s (%s)\n" msgstr "%s為 %s (%s) 編譯\n" #: src/main.c:3376 #, c-format msgid "" "%sLicense GPLv3+: GNU GPL version 3 or later \n" "%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 版或更新版本。\n" "%s本軟體是自由軟體:您å¯ä»¥è‡ªç”±ä¿®æ”¹å’Œé‡æ–°ç™¼å¸ƒå®ƒã€‚\n" "%s在法律å…許的範åœå…§æ²’有其他ä¿è­‰ã€‚\n" #: src/main.c:3397 #, c-format msgid "" "\n" "# Make data base, printed on %s" msgstr "" "\n" "# make 資料基礎,輸出在 %s" #: src/main.c:3407 #, c-format msgid "" "\n" "# Finished Make data base on %s\n" msgstr "" "\n" "# 在 %s ä¸Šå®Œæˆ make 資料基礎\n" #: src/misc.c:643 #, c-format msgid "%s: user %lu (real %lu), group %lu (real %lu)\n" msgstr "%s: 使用者 %lu (真實使用者 %lu), 組 %lu (真實組 %lu)\n" #: src/misc.c:664 msgid "Initialized access" msgstr "åˆå§‹åŒ–æˆåŠŸ" #: src/misc.c:743 msgid "User access" msgstr "使用者權é™" #: src/misc.c:791 msgid "Make access" msgstr "Make 權é™" #: src/misc.c:825 msgid "Child access" msgstr "å­ç¨‹åº 權é™" #: src/output.c:97 #, c-format msgid "%s: Entering an unknown directory\n" msgstr "%s: 進入一個未知的目錄\n" #: src/output.c:99 #, c-format msgid "%s: Leaving an unknown directory\n" msgstr "%s: 離開一個未知的目錄\n" #: src/output.c:102 #, c-format msgid "%s: Entering directory '%s'\n" msgstr "%s: 進入目錄「%sã€\n" #: src/output.c:104 #, c-format msgid "%s: Leaving directory '%s'\n" msgstr "%s: 離開目錄「%sã€\n" #: src/output.c:108 #, c-format msgid "%s[%u]: Entering an unknown directory\n" msgstr "%s[%u]: 進入一個未知的目錄\n" #: src/output.c:110 #, c-format msgid "%s[%u]: Leaving an unknown directory\n" msgstr "%s[%u]: 離開一個未知的目錄\n" #: src/output.c:113 #, c-format msgid "%s[%u]: Entering directory '%s'\n" msgstr "%s[%u]: 進入目錄「%sã€\n" #: src/output.c:115 #, c-format msgid "%s[%u]: Leaving directory '%s'\n" msgstr "%s[%u]: 離開目錄「%sã€\n" #: src/output.c:442 src/output.c:444 #, c-format msgid "write error: stdout" msgstr "寫錯誤: 標準輸出" #: src/output.c:624 msgid ". Stop.\n" msgstr "。 åœæ­¢ã€‚\n" #: src/output.c:658 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" #: src/output.c:667 #, c-format msgid "%s: %s" msgstr "%s: %s" #: src/output.h:62 #, c-format msgid "-O[TYPE] (--output-sync[=TYPE]) is not configured for this build." msgstr "-O[類型] (--output-sync[=類型]) 並未設定入此 make 構建。" #: src/posixos.c:90 msgid "creating jobs pipe" msgstr "正在建立作業管é“" #: src/posixos.c:98 src/posixos.c:251 msgid "duping jobs pipe" msgstr "正在複製作業管é“" #: src/posixos.c:104 msgid "init jobserver pipe" msgstr "創始化作業伺æœå™¨ç®¡é“" #: src/posixos.c:119 #, c-format msgid "internal error: invalid --jobserver-auth string '%s'" msgstr "內部錯誤:無效 --jobserver-auth 驗證字串「%sã€" #: src/posixos.c:122 #, c-format msgid "Jobserver client (fds %d,%d)\n" msgstr "Jobserver 客戶端(檔案æè¿°ç¬¦ %d,%d)\n" #: src/posixos.c:138 msgid "jobserver pipeline" msgstr "作業伺æœå™¨ç®¡é“" #: src/posixos.c:186 msgid "write jobserver" msgstr "寫入作業伺æœå™¨" #: src/posixos.c:300 #, c-format msgid "job server shut down" msgstr "作業伺æœå™¨é—œé–‰" # , fuzzy #: src/posixos.c:303 msgid "pselect jobs pipe" msgstr "pselect 作業管é“" #: src/posixos.c:319 src/posixos.c:433 msgid "read jobs pipe" msgstr "讀å–作業管é“" #: src/read.c:181 #, c-format msgid "Reading makefiles...\n" msgstr "正在讀入 makefile...\n" #: src/read.c:336 #, c-format msgid "Reading makefile '%s'" msgstr "正在讀入 makefile「%sã€" #: src/read.c:338 #, c-format msgid " (no default goal)" msgstr " (沒有é è¨­ç›®æ¨™)" #: src/read.c:340 #, c-format msgid " (search path)" msgstr " (æœå°‹è·¯å¾‘)" #: src/read.c:342 #, c-format msgid " (don't care)" msgstr " (ä¸ç”¨ç†)" #: src/read.c:344 #, c-format msgid " (no ~ expansion)" msgstr " (沒有 ~ 展開)" #: src/read.c:655 #, c-format msgid "Skipping UTF-8 BOM in makefile '%s'\n" msgstr "è·³éŽ Makefile「%sã€ä¸­çš„ UTF-8 BOM\n" #: src/read.c:658 #, c-format msgid "Skipping UTF-8 BOM in makefile buffer\n" msgstr "è·³éŽ Makefile ç·©è¡å€ä¸­çš„ UTF-8 BOM\n" #: src/read.c:787 #, c-format msgid "invalid syntax in conditional" msgstr "æ¢ä»¶ä¸­å«æœ‰ç„¡æ•ˆèªžæ³•" #: src/read.c:960 #, c-format msgid "%s: failed to load" msgstr "%s: 載入失敗" #: src/read.c:986 #, c-format msgid "recipe commences before first target" msgstr "方案在第一個目標å‰é–‹å§‹" #: src/read.c:1035 #, c-format msgid "missing rule before recipe" msgstr "方案之å‰éºæ¼äº†è¦å‰‡" #: src/read.c:1136 #, c-format msgid "missing separator (did you mean TAB instead of 8 spaces?)" msgstr "缺少分隔符 (你大概想用 TABï¼Œè€Œä¸æ˜¯å…«å€‹ç©ºæ ¼)" #: src/read.c:1138 #, c-format msgid "missing separator" msgstr "缺少分隔符" #: src/read.c:1283 #, c-format msgid "missing target pattern" msgstr "無目標符åˆ" #: src/read.c:1285 #, c-format msgid "multiple target patterns" msgstr "多個目標符åˆ" #: src/read.c:1289 #, c-format msgid "target pattern contains no '%%'" msgstr "目標模å¼ä¸å«æœ‰ã€Œ%%ã€" #: src/read.c:1404 #, c-format msgid "missing 'endif'" msgstr "éºæ¼ã€Œendifã€" #: src/read.c:1443 src/read.c:1488 src/variable.c:1600 #, c-format msgid "empty variable name" msgstr "空變數å" #: src/read.c:1478 #, c-format msgid "extraneous text after 'define' directive" msgstr "「endefã€æŒ‡ä»¤å¾Œå«æœ‰ä¸è©²å‡ºç¾çš„æ–‡å­—" #: src/read.c:1503 #, c-format msgid "missing 'endef', unterminated 'define'" msgstr "éºæ¼ã€Œendefã€ï¼Œæœªçµ‚止的「defineã€" #: src/read.c:1531 #, c-format msgid "extraneous text after 'endef' directive" msgstr "「endefã€æŒ‡ä»¤å¾Œå«æœ‰ä¸è©²å‡ºç¾çš„æ–‡å­—" #: src/read.c:1603 #, c-format msgid "extraneous text after '%s' directive" msgstr "在「%sã€æŒ‡ä»¤ä¹‹å¾Œå«æœ‰ä¸è©²å‡ºç¾çš„æ–‡å­—" #: src/read.c:1604 #, c-format msgid "extraneous '%s'" msgstr "ä¸è©²å‡ºç¾çš„「%sã€" #: src/read.c:1632 #, c-format msgid "only one 'else' per conditional" msgstr "æ¯å€‹æ¢ä»¶åªèƒ½æœ‰ä¸€å€‹ã€Œelseã€" #: src/read.c:1908 #, c-format msgid "Malformed target-specific variable definition" msgstr "é‡å°ç›®æ¨™çš„ç´”é‡å®šç¾©æ ¼å¼éŒ¯èª¤" #: src/read.c:1968 #, c-format msgid "prerequisites cannot be defined in recipes" msgstr "ä¾è³´ç„¡æ³•在方案腳本中定義" #: src/read.c:1986 #, c-format msgid "grouped targets must provide a recipe" msgstr "æˆçµ„的目標必須æä¾›ä¸€å€‹æ–¹æ¡ˆ" #: src/read.c:2029 #, c-format msgid "mixed implicit and static pattern rules" msgstr "æ··åˆçš„éš±å«å’Œéœæ…‹æ¨¡å¼è¦å‰‡" #: src/read.c:2052 #, c-format msgid "mixed implicit and normal rules" msgstr "æ··åˆçš„éš±å«å’Œæ™®é€šè¦å‰‡" #: src/read.c:2107 #, c-format msgid "target '%s' doesn't match the target pattern" msgstr "目標「%sã€ä¸ç¬¦åˆç›®æ¨™æ¨¡å¼" #: src/read.c:2122 src/read.c:2168 #, c-format msgid "target file '%s' has both : and :: entries" msgstr "目標檔案「%sã€å«æœ‰ : å’Œ :: 兩種æ¢ç›®" #: src/read.c:2128 #, c-format msgid "target '%s' given more than once in the same rule" msgstr "目標「%sã€åœ¨åŒä¸€å€‹è¦å‰‡ä¸­çµ¦å‡ºäº†å¤šæ¬¡" #: src/read.c:2138 #, c-format msgid "warning: overriding recipe for target '%s'" msgstr "警告:覆蓋關於目標「%sã€çš„æ–¹æ¡ˆ" #: src/read.c:2141 #, c-format msgid "warning: ignoring old recipe for target '%s'" msgstr "警告:忽略關於目標「%sã€çš„舊方案" #: src/read.c:2254 #, c-format msgid "*** mixed implicit and normal rules: deprecated syntax" msgstr "*** éš±å«å’Œæ™®é€šè¦å‰‡æ··åˆï¼šå·²æ£„用的語法" #: src/read.c:2271 #, c-format msgid "warning: overriding group membership for target '%s'" msgstr "警告:覆蓋關於目標「%sã€çš„組æˆå“¡" #: src/read.c:2636 #, c-format msgid "warning: NUL character seen; rest of line ignored" msgstr "警告:é‡åˆ°äº† NUL 字元;忽略行的剩餘部分" #: src/remake.c:226 #, c-format msgid "Nothing to be done for '%s'." msgstr "å°ã€Œ%sã€ç„¡éœ€åšä»»ä½•事。" #: src/remake.c:227 #, c-format msgid "'%s' is up to date." msgstr "「%sã€å·²æ˜¯æœ€æ–°ã€‚" #: src/remake.c:323 #, c-format msgid "Pruning file '%s'.\n" msgstr "正刪除檔案「%sã€ã€‚\n" #: src/remake.c:389 #, c-format msgid "%sNo rule to make target '%s', needed by '%s'%s" msgstr "%s沒有è¦å‰‡å¯è£½ä½œç›®æ¨™ã€Œ%sã€ï¼Œç”±ã€Œ%sã€%s 需求" #: src/remake.c:399 #, c-format msgid "%sNo rule to make target '%s'%s" msgstr "%s沒有è¦å‰‡å¯è£½ä½œç›®æ¨™ã€Œ%sã€%s" #: src/remake.c:425 #, c-format msgid "Considering target file '%s'.\n" msgstr "正在考慮目標檔案「%sã€ã€‚\n" #: src/remake.c:432 #, c-format msgid "Recently tried and failed to update file '%s'.\n" msgstr "æœ€è¿‘å·²å˜—è©¦éŽæ›´æ–°æª”案「%sã€ä¸¦å¤±æ•—。\n" #: src/remake.c:444 #, c-format msgid "File '%s' was considered already.\n" msgstr "å·²è€ƒæ…®éŽæª”案「%sã€ã€‚\n" #: src/remake.c:454 #, c-format msgid "Still updating file '%s'.\n" msgstr "ä»ç„¶åœ¨æ›´æ–°æª”案「%sã€ã€‚\n" #: src/remake.c:457 #, c-format msgid "Finished updating file '%s'.\n" msgstr "更新檔案「%sã€å®Œæˆã€‚\n" #: src/remake.c:486 #, c-format msgid "File '%s' does not exist.\n" msgstr "檔案「%sã€ä¸å­˜åœ¨ã€‚\n" #: src/remake.c:494 #, c-format msgid "" "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp" msgstr "*** 警告: .LOW_RESOLUTION_TIME 檔案 `%s' 有一個高精度的的時間標誌" #: src/remake.c:507 src/remake.c:1039 #, c-format msgid "Found an implicit rule for '%s'.\n" msgstr "找到一æ¢é—œæ–¼ã€Œ%sã€çš„éš±å«è¦å‰‡ã€‚\n" #: src/remake.c:509 src/remake.c:1041 #, c-format msgid "No implicit rule found for '%s'.\n" msgstr "找ä¸åˆ°é—œæ–¼ã€Œ%sã€çš„éš±å«è¦å‰‡ã€‚\n" #: src/remake.c:515 #, c-format msgid "Using default recipe for '%s'.\n" msgstr "使用「%sã€çš„é è¨­æ–¹æ¡ˆã€‚\n" #: src/remake.c:549 src/remake.c:1088 #, c-format msgid "Circular %s <- %s dependency dropped." msgstr "放棄循環ä¾è³´ %s <- %s 。" #: src/remake.c:674 #, c-format msgid "Finished prerequisites of target file '%s'.\n" msgstr "目標檔案「%sã€çš„å‰æå·²å®Œæˆã€‚\n" #: src/remake.c:680 #, c-format msgid "The prerequisites of '%s' are being made.\n" msgstr "正在製作「%sã€çš„å‰æã€‚\n" #: src/remake.c:694 #, c-format msgid "Giving up on target file '%s'.\n" msgstr "放棄目標檔案「%sã€ã€‚\n" #: src/remake.c:699 #, c-format msgid "Target '%s' not remade because of errors." msgstr "由於錯誤目標「%sã€ä¸¦æœªé‡æ–°è£½ä½œã€‚" #: src/remake.c:751 #, c-format msgid "Prerequisite '%s' is order-only for target '%s'.\n" msgstr "å‰æã€Œ%sã€å°ç›®æ¨™ã€Œ%sã€ä¾†èªªåƒ…ç”¨æ–¼æŒ‡å®šåŸ·è¡Œé †åº (order-only) 。\n" #: src/remake.c:756 #, c-format msgid "Prerequisite '%s' of target '%s' does not exist.\n" msgstr "目標「%2$sã€çš„å‰æã€Œ%1$sã€ä¸å­˜åœ¨ã€‚\n" #: src/remake.c:761 #, c-format msgid "Prerequisite '%s' is newer than target '%s'.\n" msgstr "å‰æã€Œ%sã€æ¯”目標「%sã€æ–°ã€‚\n" #: src/remake.c:764 #, c-format msgid "Prerequisite '%s' is older than target '%s'.\n" msgstr "å‰æã€Œ%sã€æ¯”目標「%sã€èˆŠã€‚\n" #: src/remake.c:782 #, c-format msgid "Target '%s' is double-colon and has no prerequisites.\n" msgstr "目標「%sã€æ˜¯é›™å†’è™Ÿç›®æ¨™ä¸¦ä¸”æ²’æœ‰å‰æã€‚\n" #: src/remake.c:789 #, c-format msgid "No recipe for '%s' and no prerequisites actually changed.\n" msgstr "沒有關於「%sã€çš„æ–¹æ¡ˆï¼Œä¸¦ä¸”æ²’æœ‰å¯¦éš›æ”¹è®Šçš„å‰æã€‚\n" #: src/remake.c:794 #, c-format msgid "Making '%s' due to always-make flag.\n" msgstr "由於 always-make 標誌所以製作「%sã€ã€‚\n" #: src/remake.c:802 #, c-format msgid "No need to remake target '%s'" msgstr "ä¸éœ€è¦é‡æ–°è£½ä½œç›®æ¨™ã€Œ%sã€" #: src/remake.c:804 #, c-format msgid "; using VPATH name '%s'" msgstr ";使用 VPATH å稱「%sã€" #: src/remake.c:824 #, c-format msgid "Must remake target '%s'.\n" msgstr "å¿…é ˆé‡æ–°è£½ä½œç›®æ¨™ã€Œ%sã€ã€‚\n" #: src/remake.c:830 #, c-format msgid " Ignoring VPATH name '%s'.\n" msgstr " 忽略 VPATH å稱「%sã€ã€‚\n" #: src/remake.c:839 #, c-format msgid "Recipe of '%s' is being run.\n" msgstr "「%sã€çš„æŒ‡ä»¤æ–¹æ¡ˆæ­£åœ¨è¢«åŸ·è¡Œã€‚\n" #: src/remake.c:846 #, c-format msgid "Failed to remake target file '%s'.\n" msgstr "釿–°è£½ä½œç›®æ¨™æª”案「%sã€å¤±æ•—。\n" #: src/remake.c:849 #, c-format msgid "Successfully remade target file '%s'.\n" msgstr "釿–°è£½ä½œç›®æ¨™æª”案「%sã€æˆåŠŸã€‚\n" #: src/remake.c:852 #, c-format msgid "Target file '%s' needs to be remade under -q.\n" msgstr "目標檔案「%sã€éœ€è¦ä»¥ -q é¸é …釿–°è£½ä½œã€‚\n" #: src/remake.c:1047 #, c-format msgid "Using default commands for '%s'.\n" msgstr "使用關於「%sã€çš„é è¨­æŒ‡ä»¤ã€‚\n" #: src/remake.c:1422 #, c-format msgid "Warning: File '%s' has modification time %s s in the future" msgstr "警告:檔案「%sã€çš„修改時間在未來 %s 秒後" #: src/remake.c:1662 #, c-format msgid ".LIBPATTERNS element '%s' is not a pattern" msgstr ".LIBPATTERNS 的元素「%sã€ä¸æ˜¯ä¸€å€‹æ¨¡å¼" #: src/remote-cstms.c:122 #, c-format msgid "Customs won't export: %s\n" msgstr "使用者ä¸å¸Œæœ›åŒ¯å‡ºï¼š%s\n" #: src/rule.c:289 #, c-format msgid "warning: ignoring prerequisites on suffix rule definition" msgstr "" #: src/rule.c:530 msgid "" "\n" "# Implicit Rules" msgstr "" "\n" "# éš±å«è¦å‰‡" #: src/rule.c:545 msgid "" "\n" "# No implicit rules." msgstr "" "\n" "# 沒有隱å«è¦å‰‡ã€‚" #: src/rule.c:548 #, c-format msgid "" "\n" "# %u implicit rules, %u (%.1f%%) terminal." msgstr "" "\n" "# %u æ¢éš±å«è¦å‰‡ï¼Œ%u (%.1f%%) 為末端。" #: src/rule.c:557 #, c-format msgid "BUG: num_pattern_rules is wrong! %u != %u" msgstr "BUG:num_pattern_rules 出錯ï¼%u != %u" #: src/signame.c:84 msgid "unknown signal" msgstr "未知的訊號" #: src/signame.c:92 msgid "Hangup" msgstr "掛斷" #: src/signame.c:95 msgid "Interrupt" msgstr "中止" #: src/signame.c:98 msgid "Quit" msgstr "çµæŸ" #: src/signame.c:101 msgid "Illegal Instruction" msgstr "無效指令" #: src/signame.c:104 msgid "Trace/breakpoint trap" msgstr "追蹤 / 斷點陷阱" #: src/signame.c:109 msgid "Aborted" msgstr "å–æ¶ˆ" #: src/signame.c:112 msgid "IOT trap" msgstr "IOT 陷阱" #: src/signame.c:115 msgid "EMT trap" msgstr "EMT 陷阱" #: src/signame.c:118 msgid "Floating point exception" msgstr "期望浮點數" #: src/signame.c:121 msgid "Killed" msgstr "å¼·åˆ¶çµæŸ" #: src/signame.c:124 msgid "Bus error" msgstr "åŒ¯æµæŽ’éŒ¯èª¤" #: src/signame.c:127 msgid "Segmentation fault" msgstr "分割錯誤" #: src/signame.c:130 msgid "Bad system call" msgstr "無效系統呼å«" #: src/signame.c:133 msgid "Broken pipe" msgstr "管線æå£ž" #: src/signame.c:136 msgid "Alarm clock" msgstr "鬧é˜" #: src/signame.c:139 msgid "Terminated" msgstr "終止" #: src/signame.c:142 msgid "User defined signal 1" msgstr "使用者定義信號 1" #: src/signame.c:145 msgid "User defined signal 2" msgstr "使用者定義信號 2" #: src/signame.c:150 src/signame.c:153 msgid "Child exited" msgstr "å­ç¨‹åºé€€å‡º" #: src/signame.c:156 msgid "Power failure" msgstr "é›»æºéŒ¯èª¤" #: src/signame.c:159 msgid "Stopped" msgstr "åœæ­¢" #: src/signame.c:162 msgid "Stopped (tty input)" msgstr "åœæ­¢ï¼ˆtty 輸入)" #: src/signame.c:165 msgid "Stopped (tty output)" msgstr "åœæ­¢ï¼ˆtty 輸出)" #: src/signame.c:168 msgid "Stopped (signal)" msgstr "åœæ­¢ï¼ˆä¿¡è™Ÿï¼‰" #: src/signame.c:171 msgid "CPU time limit exceeded" msgstr "åˆ°é” CPU 時間上é™" #: src/signame.c:174 msgid "File size limit exceeded" msgstr "åˆ°é”æª”案大å°ä¸Šé™" #: src/signame.c:177 msgid "Virtual timer expired" msgstr "è™›æ“¬è¨ˆæ™‚å™¨éŽæœŸ" #: src/signame.c:180 msgid "Profiling timer expired" msgstr "分æžè¨ˆæ™‚å™¨éŽæœŸ" #: src/signame.c:186 msgid "Window changed" msgstr "已變更視窗" #: src/signame.c:189 msgid "Continued" msgstr "繼續" #: src/signame.c:192 msgid "Urgent I/O condition" msgstr "緊急 I/O æ¢ä»¶" #: src/signame.c:199 src/signame.c:208 msgid "I/O possible" msgstr "å¯èƒ½ I/O" #: src/signame.c:202 msgid "SIGWIND" msgstr "SIGWIND" #: src/signame.c:205 msgid "SIGPHONE" msgstr "SIGPHONE" #: src/signame.c:211 msgid "Resource lost" msgstr "資æºéºå¤±" #: src/signame.c:214 msgid "Danger signal" msgstr "å±éšªè¨Šè™Ÿ" #: src/signame.c:217 msgid "Information request" msgstr "資訊請求" #: src/signame.c:220 msgid "Floating point co-processor not available" msgstr "浮點數å”處ç†å™¨ä¸å¯ç”¨" #: src/strcache.c:274 #, c-format msgid "" "\n" "%s No strcache buffers\n" msgstr "" "\n" "%s 沒有 strcache ç·©è¡å€\n" #: src/strcache.c:304 #, c-format msgid "" "\n" "%s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu " "B\n" msgstr "" "\n" "%s strcache ç·©è¡: %lu (%lu) / 字串 = %lu / 空間 = %lu B / å¹³å‡ = %lu B\n" #: src/strcache.c:308 #, c-format msgid "" "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B\n" msgstr "%s ç›®å‰ç·©è¡: 尺寸 = %hu B / 已用 = %hu B / æ•¸é‡ = %hu / å¹³å‡ = %u B\n" #: src/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" #: src/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" #: src/strcache.c:326 #, c-format msgid "" "\n" "%s strcache performance: lookups = %lu / hit rate = %lu%%\n" msgstr "" "\n" "%s strcache 性能:尋找 = %lu / 命中率 = %lu%%\n" #: src/strcache.c:328 msgid "" "# hash-table stats:\n" "# " msgstr "" "# 雜湊表統計資料:\n" "# " #: src/variable.c:1653 msgid "automatic" msgstr "自動" #: src/variable.c:1656 msgid "default" msgstr "é è¨­" #: src/variable.c:1659 msgid "environment" msgstr "環境" #: src/variable.c:1662 msgid "makefile" msgstr "makefile" #: src/variable.c:1665 msgid "environment under -e" msgstr "-e 指定的環境變數" #: src/variable.c:1668 msgid "command line" msgstr "指令列" #: src/variable.c:1671 msgid "'override' directive" msgstr "「overrideã€æŒ‡ä»¤" #: src/variable.c:1682 #, c-format msgid " (from '%s', line %lu)" msgstr " (從「%sã€ï¼Œè¡Œ %lu)" #: src/variable.c:1745 msgid "# variable set hash-table stats:\n" msgstr "# 變數的雜湊表狀態:\n" #: src/variable.c:1756 msgid "" "\n" "# Variables\n" msgstr "" "\n" "# 變數\n" #: src/variable.c:1760 msgid "" "\n" "# Pattern-specific Variable Values" msgstr "" "\n" "# Pattern-specific 變數值" #: src/variable.c:1774 msgid "" "\n" "# No pattern-specific variable values." msgstr "" "\n" "# 沒有 pattern-specific 變數的值。" #: src/variable.c:1776 #, c-format msgid "" "\n" "# %u pattern-specific variable values" msgstr "" "\n" "# %u 個 pattern-specific 變數的值" #: src/variable.h:229 #, c-format msgid "warning: undefined variable '%.*s'" msgstr "警告:未定義的變數「%.*sã€" #: src/vmsfunctions.c:91 #, c-format msgid "sys$search() failed with %d\n" msgstr "sys$search() 失敗並返回 %d\n" #: src/vmsjobs.c:244 #, c-format msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n" msgstr "-警告, ä½ å¯èƒ½å¿…須從 DCL 釿–°å•Ÿç”¨ CTRL-Y 處ç†ã€‚\n" #: src/vmsjobs.c:681 #, c-format msgid "BUILTIN CD %s\n" msgstr "BUILTIN CD %s\n" #: src/vmsjobs.c:1224 #, c-format msgid "DCL: %s\n" msgstr "DCL:%s\n" #: src/vmsjobs.c:1284 #, c-format msgid "Append output to %s\n" msgstr "將輸出追加到 %s\n" #: src/vmsjobs.c:1309 #, c-format msgid "Append %.*s and cleanup\n" msgstr "追加 %.*s 並清ç†\n" #: src/vmsjobs.c:1322 #, c-format msgid "Executing %s instead\n" msgstr "執行 %s 作為替代\n" #: src/vpath.c:603 msgid "" "\n" "# VPATH Search Paths\n" msgstr "" "\n" "# VPATH æœå°‹è·¯å¾‘\n" #: src/vpath.c:620 msgid "# No 'vpath' search paths." msgstr "# 沒有「vpathã€æœå°‹è·¯å¾‘。" #: src/vpath.c:622 #, c-format msgid "" "\n" "# %u 'vpath' search paths.\n" msgstr "" "\n" "# %u「vpathã€æœå°‹è·¯å¾‘。\n" #: src/vpath.c:625 msgid "" "\n" "# No general ('VPATH' variable) search path." msgstr "" "\n" "# 沒有通用æœå°‹è·¯å¾‘(「VPATHã€è®Šæ•¸)。" #: src/vpath.c:631 msgid "" "\n" "# General ('VPATH' variable) search path:\n" "# " msgstr "" "\n" "# 通用æœå°‹è·¯å¾‘ (「VPATHã€è®Šæ•¸):\n" "# " #: src/w32/w32os.c:44 #, c-format msgid "Jobserver slots limited to %d\n" msgstr "Jobserver æ§½ä½æ•¸é™åˆ¶ç‚º %d\n" #: src/w32/w32os.c:60 #, c-format msgid "creating jobserver semaphore: (Error %ld: %s)" msgstr "正建立 jobserver 訊號é‡ï¼šï¼ˆéŒ¯èª¤ %ld:%s)" #: src/w32/w32os.c:79 #, c-format msgid "" "internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)" msgstr "內部錯誤:無法打開 jobserver 訊號é‡ã€Œ%sã€ï¼šï¼ˆéŒ¯èª¤ %ld:%s)" #: src/w32/w32os.c:82 #, c-format msgid "Jobserver client (semaphore %s)\n" msgstr "Jobserver å®¢æˆ¶ç«¯ï¼ˆè¨Šè™Ÿé‡ %s)\n" #: src/w32/w32os.c:123 #, c-format msgid "release jobserver semaphore: (Error %ld: %s)" msgstr "釋放 jobserver 訊號é‡ï¼šï¼ˆéŒ¯èª¤ %ld:%s)" #: src/w32/w32os.c:194 #, c-format msgid "semaphore or child process wait: (Error %ld: %s)" msgstr "è¨Šè™Ÿé‡æˆ–å­ç¨‹åºç­‰å¾…:(錯誤 %ld:%s)" #~ msgid "write error" #~ msgstr "寫入時發生錯誤" make-4.3/po/tr.gmo0000644000175000017500000004506413611136532010777 00000000000000Þ•ÆL | °&±Øè!ñ %F'\#„¨ ¿Í"ë *LKP˜Mé@7oxoèPXF©Jð€;9¼Cöf:_¡;O=J}Ø~V>ÕCFXIŸ;é %"/ R_ n|—ª ¼ÆÕÞ%ï7Ve~–°(Î÷& *3^#s#—)»-å$,9Q‹3ªÞú! =,js"z!+¿ë&.F&u%œ Â#Î>ò 1 +; g o "{ ž ­ ½ É Ó ë ! !%%!K!$k! !š!³!+Í!ù!!" 8"E" _"m"v"Œ")¥"Ï"è" ï"ü"##-# @#J# Q#-]#-‹#¹# ¼#*Ç# ò#6ü# 3$A$Y$^$p$†$"¦$#É$ í$û$% %%'%8%L%+a% %˜%®%É%á%!ö% &$&:&P&f& u&&3›& Ï&Ü&ï&!÷&' -'9'N'e'}'‘'¯'¸'Ï''ï'(0(03(1d(0–(Ç(.Ö(,)2)A)[)={)1¹)ë)Õû)*Ñ+ ü+ ,0,C,+W,ƒ,,™,'Æ,î,-*-,@-#m-(‘-Pº-T .}`.KÞ.J*/ku/yá/S[0M¯0€ý0<~1G»1P2lT2;Á2„ý2L‚3‚Ï3³R4C5OJ5Oš5Jê5856 n6+y6¥64·6ì6ÿ6767 J7 X7 f7s7 …7 ¦7>²7ñ78 8 -8"N8`q8Ò8/æ819H9.g90–9.Ç96ö9-:(G:7p:"¨:1Ë:ý:;-(;EV;œ;¥;$¬;&Ñ;:ø; 3<T</r<>¢<(á<* =5='H=Rp= Ã=0Í= þ= >->F>[>v>ˆ>š>$¸> Ý> ê>3ø>/,?7\?”?(£?+Ì?$ø?"@0@@q@9x@²@ Â@Ï@#ï@)A#=AaA jA xA…A žA¬AÅAËA ÞA.ìA'BCB JB.TB ƒB1‘BÃB.ÓBC!C*CDCtbC:×C D D)D1D FDQDeDD2¡DÔD"åD&E/EOE(aEŠEŸE¾E*ÝE!F*F3F7SF‹FšF ­F%ºFàFõFüFG%G{‰¨H‡¸ƒY¡Ÿ/nšÃÄGf1QgM7C¬Jo ¦5L? ¤Æ£3:¹%™!ºXzµ # %u pattern-specific variable values # Directories # Files # Finished Make data base on %s # Implicit Rules # Make data base, printed on %s # No implicit rules. # No pattern-specific variable values. # Pattern-specific Variable Values # VPATH Search Paths # Variables # files hash-table stats: # Counted %d args in failed launch This program built for %s This program built for %s (%s) --debug[=FLAGS] Print various types of debugging information. --no-print-directory Turn off -w, even if it was turned on implicitly. --warn-undefined-variables Warn when an undefined variable is referenced. -B, --always-make Unconditionally make all targets. -C DIRECTORY, --directory=DIRECTORY Change to DIRECTORY before doing anything. -I DIRECTORY, --include-dir=DIRECTORY Search DIRECTORY for included makefiles. -L, --check-symlink-times Use the latest mtime between symlinks and target. -R, --no-builtin-variables Disable the built-in variable settings. -S, --no-keep-going, --stop Turns off -k. -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE Consider FILE to be infinitely new. -b, -m Ignored for compatibility. -d Print lots of debugging information. -e, --environment-overrides Environment variables override makefiles. -f FILE, --file=FILE, --makefile=FILE Read FILE as a makefile. -h, --help Print this message and exit. -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no arg. -k, --keep-going Keep going when some targets can't be made. -l [N], --load-average[=N], --max-load[=N] Don't start multiple jobs unless load is below N. -o FILE, --old-file=FILE, --assume-old=FILE Consider FILE to be very old and don't remake it. -p, --print-data-base Print make's internal database. -r, --no-builtin-rules Disable the built-in implicit rules. -t, --touch Touch targets instead of remaking them. -v, --version Print the version number of make and exit. -w, --print-directory Print the current directory. Date %s uid = %d, gid = %d, mode = 0%o. (built-in): (core dumped) (don't care) (name might be truncated) (no default goal) (no ~ expansion) (remote) (search path) files, impossibilities impossibilities in %lu directories. so far.# A default, MAKEFILES, or -include/sinclude makefile.# Also makes:# Failed to be updated.# File does not exist.# File has been updated.# File has not been updated.# File is an intermediate prerequisite.# File is very old.# Implicit rule search has been done.# Implicit rule search has not been done.# Last modified %s # Modification time never checked.# Needs to be updated (-q is set).# Phony target (prerequisite of .PHONY).# Precious file (prerequisite of .PRECIOUS).# Successfully updated.# %s (device %d, inode [%d,%d,%d]): # %s (device %d, inode [%d,%d,%d]): could not be opened. # %s (device %ld, inode %ld): # %s (device %ld, inode %ld): could not be opened. # %s: could not be stat'd. # Not a target:# variable set hash-table stats: %s (line %d) Bad shell context (!unixy && !batch_mode_shell) %s%s: %s%s: %s%s: Entering an unknown directory %s: Leaving an unknown directory %s: Timestamp out of range; substituting %s%s: illegal option -- %c %s: invalid option -- %c %s: option requires an argument -- %c %s: user %lu (real %lu), group %lu (real %lu) %s[%u]: Entering an unknown directory %s[%u]: Leaving an unknown directory *** Break. *** Waiting for unfinished jobs....-warning, you may have to re-enable CTRL-Y handling from DCL. . Stop. .DEFAULT_GOAL contains more than one targetAbortedAlarm clockAvoiding implicit rule recursion. BUILTIN CD %s Bad system callBroken pipeBus errorCPU time limit exceededCannot create a temporary file Child accessChild exitedCircular %s <- %s dependency dropped.Cleaning up temp batch file %s Cleaning up temporary batch file %s ContinuedCould not restore stdin Could not restore stdout Couldn't change back to original directory.CreatePipe() failed (e=%ld) Creating temporary batch file %s Current timeCustoms won't export: %s Danger signalEMT trapExecuting %s instead File size limit exceededFloating point co-processor not availableFloating point exceptionHangupI/O possibleIOT trapIllegal InstructionInformation requestInitialized accessInterruptKilledMake accessMakefile from standard input specified twice.Malformed target-specific variable definitionNoNo targetsNo targets specified and no makefile foundOptions: Parallel jobs (-j) are not supported on this platform.Power failureProfiling timer expiredQuitRe-executing[%u]:Reading makefiles... Removing intermediate files... Report bugs to Resetting to single job (-j1) mode.Resource lostSIGPHONESIGWINDSegmentation faultStoppedStopped (signal)Stopped (tty input)Stopped (tty output)Symbolic links not supported: disabling -L.TerminatedTrace/breakpoint trapUpdating goal targets.... Updating makefiles.... Urgent I/O conditionUsage: %s [options] [target] ... User accessUser defined signal 1User defined signal 2Virtual timer expiredWindow changedautomaticcannot enforce load limit: cannot enforce load limits on this operating systemcommand linecreating jobs pipedefaultempty string invalid as file nameempty variable nameenvironmentenvironment under -efopen (temporary file)fwrite (temporary file)init jobserver pipeinvalid syntax in conditionalmakefilemissing target patternmixed implicit and normal rulesmixed implicit and static pattern rulesmultiple target patternsnono more file handles: could not duplicate stdin no more file handles: could not duplicate stdout process_easy() failed to launch process (e=%ld) read jobs pipespawnvpe: environment space might be exhaustedtouch archive member is not available on VMSunknown signalunlink (temporary file): unterminated variable referencewarning: Clock skew detected. Your build may be incomplete.warning: NUL character seen; rest of line ignoredwrite jobserverProject-Id-Version: make 3.81 Report-Msgid-Bugs-To: bug-make@gnu.org PO-Revision-Date: 2006-04-23 08:45+0300 Last-Translator: Nilgün Belma Bugüner Language-Team: Turkish Language: tr MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. X-Generator: KBabel 1.9.1 Plural-Forms: nplurals=2; plural=(n != 1); # %u örneÄŸe duyarlı deÄŸiÅŸken deÄŸeri # Dizin # Dosyalar # %s üzerindeki Make veri tabanı tamamlandı # Örtük Kurallar # Make veri tabanı, %s üzerine basıldı # Örtük kural yok. # ÖrneÄŸe duyarlı deÄŸiÅŸken deÄŸeri yok. # Kalıba özgü DeÄŸiÅŸken DeÄŸerleri # VPATH Arama yolu # DeÄŸiÅŸkenler # dosyaların hash tablosu durumları: # Sayılan %d argüman ile baÅŸarısız oldu Bu program %s için kurgulanmış Bu program %s için kurgulanmış (%s) --debug[=SEÇENEKLER] ÇeÅŸitli türde hata ayıklama bilgileri basar. --no-print-directory Dolaylı olarak açılmış olsa bile -w 'yi kapatır --warn-undefined-variables Atanmamış bir deÄŸiÅŸkene bağıntı yapıldığında uyarır. -B, --always-make Tüm hedefler koÅŸulsuz olarak oluÅŸturulur. -C DİZİN, --directory=DIZIN BirÅŸey yapmadan önce DİZİNe geçilir. -I DİZİN, --include-dir=DİZİN Eklenecek makefile'ları DİZİNde arar. -L, --check-symlink-times sembolik baÄŸlarla hedef arasında en son mtime kullanılır -R, --no-builtin-variables OluÅŸumiçi deÄŸiÅŸken ayarlarını etkisizleÅŸtirir -S, --no-keep-going, --stop Bazı hedefler yapılmadığında devam etmez. -W DOSYA, --what-if=DOSYA, --new-file=DOSYA, --assume-new=DOSYA DOSYA sonsuz yeni varsayılır. -b, -m Uyumluluk için yoksayıldı. -b, -m Bir sürü hata ayıklama bilgisi basar. -e, --environment-overrides Ortam deÄŸiÅŸkenleri makefile'ları deÄŸiÅŸtirir. -f DOSYA, --file=DOSYA, --makefile=DOSYA DOSYAyı bir makefile olarak okur. -h, --help Bu iletiyi basar ve çıkar. -j [N], --jobs[=N] Bir defada N iÅŸe izin verir; argumansız iÅŸ sayısı sınırsızdır. -k, --keep-going Bazı hedefler yapılmadığında devam eder. -l [N], --load-average[=N], --max-load[=N] Yük N'den az olmadıkça çoklu iÅŸler baÅŸlatılmaz. -o DOSYA, --old-file=DOSYA, --assume-old=DOSYA DOSYAnın çok eski olduÄŸu varsayılır ve yeniden iÅŸlem yapılmaz. -p, --print-data-base make'in içsel veritabanını basar. -r, --no-builtin-rules OluÅŸumiçi örtük kuralları etkisizleÅŸtirir. -t, --touch Yeniden derlemek yerine hedeflere bakıp geçer. -v, --version make sürüm numarasını basar ve çıkar. -w, --print-directory Kullanılan dizini basar. Tarih %s Kull-kim = %d, Grup-kim = %d, kip = 0%o. (paket içinde): (bellek kopyası - core dosyası - diske yazıldı) (umurunda deÄŸil)(isim kırpılmış olmalı) (öntanımlı amaç yok)( ~ uzantısı yok) (karşıdan) (arama yolu) dosyaları,olanaksızlıklar %lu dizinde olanaksızlıklar. çok uzak.# Bir öntanımlı,MAKEFILES veya -include/sinclude makefile.# OluÅŸtursa da:# GüncellenmiÅŸ olamadı.# Dosya yok.# Dosya güncelleÅŸtirilmiÅŸti.# Dosya güncelleÅŸtirilmemiÅŸti.# Orta seviyede önceden gerekli bir dosya (öncelikle gerekli dosyalara aracılık eden dosya)# Dosya çok eski.# Örtük kural araÅŸtırması yapılmıştı.# Örtük kural araÅŸtırması yapılmamıştı.# Son deÄŸiÅŸiklik tarihi %s # DeÄŸiÅŸiklik zamanı hiç kontrol edilmedi.# GüncellenmiÅŸ olması gerekir (-q verildi).# Sahte hedef (.PHONY önceden gerekliliÄŸi).# Kıymetli dosya (.PRECIOUS önceden gerekliliÄŸi).# Tamamen güncellendi.# %s (aygıt %d, i-düğüm [%d,%d,%d]):# %s (aygıt %d, i-düğüm [%d,%d,%d]): açılamadı. # %s (aygıt %ld, i-düğüm %ld):# %s (aygıt %ld, i-düğüm %ld): açılamadı. # %s: durumlanamadı. # Bir hedef deÄŸil:# deÄŸiÅŸken kümesi hash tablosunun durumu: %s (satır %d) kabuk baÄŸlamı hatalı (!unixy && !batch_mode_shell) %s%s: %s%s: %s%s: bilinmeyen bir dizine giriliyor %s: bilinmeyen dizinden çıkılıyor %s: Tarih damgası kapsamdışı; yerine %s kullanılıyor%s: kuraldışı seçenek -- %c %s: geçersiz seçenek -- %c %s: seçenek bir argümanla kullanılır -- %c %s: kullanıcı %lu (gerçekte %lu), grup %lu (gerçekte %lu) %s[%u]: Bilinmeyen bir dizine giriliyor %s[%u]: Bilinmeyen dizinden çıkılıyor *** Bırakıldı. *** BitmemiÅŸ iÅŸler için bekliyor....-uyarı, DCL den yönetimi almak için CTRL-Y'yi yeniden etkinleÅŸtirebilirsiniz. . Durdu. .DEFAULT_GOAL bir hedeften fazlasını içeriyorİptal edildiAlarm saatiÖrtük kural çevrimi görmezden geliniyor. OLUÅžUMİÇİ CD %s Sistem çaÄŸrısı hatalıVeri alınamıyorVeri yolu hatasıCPU zaman sınırı aşıldıBir geçici dosya oluÅŸturulamıyor Asta eriÅŸimAst bıraktıÇevrimsel %s <- %s bağımlılığı iptal edildi.Geçici komut-listesi dosyası %s temizleniyor Geçici komut-listesi (batch) dosyası %s temizleniyor Devam ediliyorStandart girdi eski haline getirilemedi Standart çıktı eski haline getirilemedi Geriye, özgün dizine geçilemiyor.CreatePipe() baÅŸarısız (e=%ld) %s geçici komut-liste dosyasını oluÅŸturuyor Åžu anÖzelleÅŸtirilmiÅŸ olanlar dışarı aktarılmayacak: %s Tehlike sinyaliEMT tuzağı%s yerine çalıştırılıyor Dosya uzunluÄŸu sınırı aşıldıAritmetik iÅŸlemci kullanılabilir deÄŸilGerçek sayı olaÄŸandışı durumuTıkanmaG/Ç mümkünIOT tuzağıYönergeler uygun deÄŸilBilgi isteÄŸiİlklendirilmiÅŸ eriÅŸimKesmeSüreç durdurulduMake eriÅŸimiMakefile standart girdiden iki kez belirtildi.Hedefe özgü deÄŸiÅŸken tanımı bozukHayırHedef yokHedefler belirtilmediÄŸinden make dosyası yokSeçenekler: Bu platformda paralel iÅŸler (-j) desteklenmiyor.Güç kesilmesiTanıtım süreölçer kullanım süresi dolduÇıkYeniden çalıştırılıyor[%u]:Makefile'lar okunuyor... Aracı dosyalar siliniyor... Yazılım hatalarını adresine, çeviri hatalarını adresine bildiriniz. Tek iÅŸ kipi (-j1) için make'i baÅŸlatma konumuna alıyorKaynak kaybıSIGPHONESIGWINDParçalama arızasıDurdurulduDurduruldu (sinyal)Durduruldu (konsol girdisi)Durduruldu (konsol çıktısı)Sembolik baÄŸlar desteklenmiyor: -L iptal ediliyorSonlandırıldıİzleme/kesmenoktası yakalayıcıAmaçlanan hedefler güncelleniyor... makefile'ları güncelliyor... Acil G/Ç koÅŸuluKullanım: %s [seçenekler] [hedef] ... Kullanıcı eriÅŸimiKullanıcı tanımlı sinyal 1Kullanıcı tanımlı sinyal 2Sanal süreölçer kullanım süresi dolduPencere boyutları deÄŸiÅŸtirildiotomatikulaşılamayan yük sınırı: iÅŸletim sisteminde yük sınırlarına ulaşılamadı komut satırıiÅŸleri yaratıyoröntanımlıdosyaismi olarak boÅŸ dizge geçersizboÅŸ deÄŸiÅŸken ismiçevreçevre -e altındafopen (geçici dosya)fwrite (geçici dosya)iÅŸleri hazırlıyorÅŸartlı ifade de yazılış hatasıderleme dosyasıhedef kalıp kayıpörtük ve normal kurallar karışmışörtük ve duraÄŸan kalıp kuralları karışmışçok sayıda hedef kalıphayırbaÅŸka dosya tutucu yok: standart girdi kopyalanamadı baÅŸka dosya tutucu yok: standart çıktı kopyalanamadı Süreci baÅŸlatacak process_easy() baÅŸarısız oldu (e=%ld) görev listesi okunuyorspawnvpe: ortam alanı tükenmiÅŸ olabilirVMS'de iÅŸe yaramayan arÅŸiv üyesine dokunup geçiyorbilinmeyen sinyalunlink (geçici dosya): sonlandırılmamış deÄŸiÅŸken bağıntısıuyarı: Clock skew saptandı. Derleme tamamlanamayabilir.uyarı: NUL karakteri görüldü; satırın geri kalanı yoksayılıyoriÅŸ-sunucusu yazıyormake-4.3/po/he.gmo0000644000175000017500000002364713611136532010751 00000000000000Þ•„¿ìè &é   !) K l '‚ ª Á "Ï ò "ü  , ; I d w ‰ “ ¢ « ¼ Å Ô í (=f&{*¢Í#â#)*-T‚$›9Àú3Mi=y+·ãý& >#J>n ­· ¿"Ëîý  # ;%Hn$Ž ³+½!é  2@I_)x¢» ÂÏØì  -? B*M x6‚ ¹Çßä#ú ,5=PXi} ’³Îæ!û3I_ nx3” ÈÕè!ð &2G^vЍ±È'è),,;hw‘=±1ï!n1& Ç×!à #'9a x † §"± Ôá )<NWfo€‰˜±Éã(*&?*f‘#¦#Ê)î-F$_9„¾3Ý-I=6‡¾ Úû !+ 6M „ Ž – ¢ ¾ Í Ý é ó !!4!O! j!t!’! ­!¸! Ï!Ý!æ!ù!)"<"U" \"i"r"†" š"¤"+«"×" Ú"&ä"7 #&C# j#x##•# ¬# Í#Û#ä#ì#ÿ#$$,$ A$L$b$v$Ž$&£$Ê$à$ö$ % %%%#A% e%r%…% % ®% »%Ç%Ü%ó% &&2&;&#J&(n&—&ª&­&4¼&ñ&' '5;'%q'—'O.u_AI<5VN|M‰)(PrB !tkvKWeˆ~ŒCi"‚D\,U € 9w>&z‹m= …'4LQ0G`g7b@8/X 1T?F†ƒŠ]6$nd‡R[fxZjJ%qE+2 :Hlph3o^;*sy{c-}Ya„#S # %u pattern-specific variable values # Directories # Files # Finished Make data base on %s # Make data base, printed on %s # No implicit rules. # No pattern-specific variable values. # VPATH Search Paths # Variables Counted %d args in failed launch Date %s uid = %d, gid = %d, mode = 0%o. (built-in): (core dumped) (don't care) (name might be truncated) (no default goal) (no ~ expansion) (remote) (search path) files, impossibilities so far.# Also makes:# Failed to be updated.# File does not exist.# File has been updated.# File has not been updated.# File is an intermediate prerequisite.# File is very old.# Implicit rule search has been done.# Implicit rule search has not been done.# Last modified %s # Modification time never checked.# Needs to be updated (-q is set).# Phony target (prerequisite of .PHONY).# Precious file (prerequisite of .PRECIOUS).# Successfully updated.# %s (device %d, inode [%d,%d,%d]): # %s (device %d, inode [%d,%d,%d]): could not be opened. # %s (device %ld, inode %ld): # %s (device %ld, inode %ld): could not be opened. # %s: could not be stat'd. # Not a target:%s (line %d) Bad shell context (!unixy && !batch_mode_shell) %s: Timestamp out of range; substituting %s%s: illegal option -- %c %s: invalid option -- %c %s: option requires an argument -- %c *** Break. *** Waiting for unfinished jobs....-warning, you may have to re-enable CTRL-Y handling from DCL. . Stop. AbortedAlarm clockAvoiding implicit rule recursion. BUILTIN CD %s Bad system callBroken pipeBus errorCPU time limit exceededChild exitedCircular %s <- %s dependency dropped.Cleaning up temp batch file %s Cleaning up temporary batch file %s ContinuedCouldn't change back to original directory.Creating temporary batch file %s Current timeCustoms won't export: %s Danger signalEMT trapExecuting %s instead File size limit exceededFloating point co-processor not availableFloating point exceptionHangupI/O possibleIOT trapIllegal InstructionInformation requestInterruptKilledMakefile from standard input specified twice.NoNo targetsNo targets specified and no makefile foundOptions: Parallel jobs (-j) are not supported on this platform.Power failureProfiling timer expiredQuitReading makefiles... Resetting to single job (-j1) mode.Resource lostSIGPHONESIGWINDSegmentation faultStoppedStopped (signal)Stopped (tty input)Stopped (tty output)TerminatedTrace/breakpoint trapUpdating goal targets.... Updating makefiles.... Urgent I/O conditionUsage: %s [options] [target] ... User defined signal 1User defined signal 2Virtual timer expiredWindow changedautomaticcannot enforce load limit: cannot enforce load limits on this operating systemcommand linecreating jobs pipedefaultempty string invalid as file nameempty variable nameenvironmentenvironment under -efopen (temporary file)fwrite (temporary file)init jobserver pipeinvalid syntax in conditionalmakefilemissing target patternmixed implicit and normal rulesmixed implicit and static pattern rulesmultiple target patternsnoread jobs pipetouch archive member is not available on VMSunknown signalunlink (temporary file): unterminated variable referencewarning: Clock skew detected. Your build may be incomplete.warning: NUL character seen; rest of line ignoredwrite jobserverProject-Id-Version: make 3.79.1 Report-Msgid-Bugs-To: bug-make@gnu.org PO-Revision-Date: 2002-03-30 21:33+0300 Last-Translator: Eli Zaretskii Language-Team: Hebrew Language: he MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. # %u pattern-specific variable values # Directories # Files # Finished Make data base on %s # Make data base, printed on %s # No implicit rules. # No pattern-specific variable values. # VPATH Search Paths # Variables ìùëðù øåâéùá åðîð íéèðîåâøà %d Date %s uid = %d, gid = %d, mode = 0%o. (built-in): (core õáå÷á íùøð ïåøëæä ïëåú) (don't care) (name might be truncated) (no default goal) (no ~ expansion)(ú÷çåøî) (search path) files, impossibilities so far.# Also makes:# Failed to be updated.# File does not exist.# File has been updated.# File has not been updated.# File is an intermediate prerequisite.# File is very old.# Implicit rule search has been done.# Implicit rule search has not been done.# Last modified %s # Modification time never checked.# Needs to be updated (-q is set).# Phony target (prerequisite of .PHONY).# Precious file (prerequisite of .PRECIOUS).# Successfully updated.# %s (device %d, inode [%d,%d,%d]): # %s (device %d, inode [%d,%d,%d]): could not be opened. # %s (device %ld, inode %ld): # %s (device %ld, inode %ld): could not be opened. # %s: could not be stat'd. # Not a target:(!unixy && !batch_mode_shell) shell-mode úòéá÷á äì÷ú :%s õáå÷ ìù %d äøåù øúåîä íåçúì õåçî äðéäù ,%s ìù ïîæä úîéúç úà %s-á óéìçî%s: é÷åç-éúìá ïééôàî -- %c %s úéðëú øåáò éåâù ïééôàî -- %c %s: èðîåâøà áééçî ïééôàî -- %c *** Break. *** *** ...åîééúñð íøèù úåãåáòì ïéúîî.DCL-î CTRL-Y-á ìåôéè øåùôéàá êøåö úåéäì ìåìò :úåøéäæ . Stop. AbortedAlarm clock.úùøåôî-éúìá äéñøå÷øî òðîð BUILTIN CD %s Bad system callBroken pipeBus errorCPU time limit exceededChild exited.%s <- %s úéìâòî ìåìú èéîùî`%s' éðîæ batch õáå÷ ÷ìñî `%s' éðîæ batch õáå÷ ÷ìñî Continued.úéøå÷îä äé÷éúì øåæçì ïúéð àì`%s' éðîæ batch õáå÷ øöåé úëøòî ïåòù%s àöééî åðéà Customs Danger signalEMT trap%s õéøî úàæ íå÷îá File size limit exceededFloating point co-processor not availableFloating point exceptionHangupI/O possibleIOT trapIllegal InstructionInformation requestInterruptKilled.úçà íòôî øúåé ïúéð éð÷ú èì÷ õåøòî MakefileNoúåøèî ïéàmakefile éöá÷ åàöîð àìå úåøèî ïåéö ïéà :íéðééôàî .åæ úëøòîá êîúð åðéà (-j) éìéá÷î òåöéáPower failureProfiling timer expiredQuit...makefile éöá÷ àøå÷ .(-j1) éúøãñ ïôåàá åòöåáé úåãå÷ôResource lostSIGPHONESIGWINDSegmentation faultStoppedStopped (signal)Stopped (tty input)Stopped (tty output)TerminatedTrace/breakpoint trap...ãòé úåøèî ïëãòî ...makefile éöá÷ ïëãòî Urgent I/O condition%s [íéðééôàî] [äøèî] ... :ùåîéù ïôåà User defined signal 1User defined signal 2Virtual timer expiredWindow changedautomaticcannot enforce load limit: åæ úëøòîá ñîåò úåìáâî úåôëì ïúéð àìcommand linecreating jobs pipedefaultõáå÷ íùë úìá÷úî äðéà ä÷éø úæåøçî÷éø äðúùî íùenvironmentenvironment under -efopen (temporary file)fwrite (temporary file)init jobserver pipeéàðú ìù éåâù øéáçúmakefileäøèî úéðáú ïéàíéùøåôî-éúìáå íéìéâø íéììë ìù áåáøòíéùøåôî-éúìáå íééèèñ úéðáú éììë ìù áåáøòúåáåøî äøèî úåéðáúnoread jobs pipeVMS úëøòîá ïåéëøàá øáà ìù äòù/êéøàú éåðéùá äëéîú ïéàunknown signalunlink (temporary file): äëìäë úîééúñî äðéà äðúùîì äééðôä.äîìù àì úåéäì äìåìò äéðáä .ïåòù úùéìâ äúìâúð :úåøéäæäçðæð äøåùä úøúé ;NUL åú éúùâô :äøäæàwrite jobservermake-4.3/po/pl.gmo0000644000175000017500000012676213611136532010772 00000000000000Þ•®Œ Aü$$+$&J$q$$!Š$-¬$Ú$ ì$- %;%'Q%#y%% ´%Â%à%Pù%;J&"†&©& Å&tæ&L['P¨'Dù'9>(Mx(@Æ(o)Gw)o¿)P/*l€*Fí*J4+€+9,C:,f~,_å,;E-:-O¼-J .}W.uÕ.~K/>Ê/M 0CW02›0FÎ0I1;_1 ›1¥1"Â1 å1ò1 22&2 ?2J2e2x2 Š2”2£2¬2%½2ã27ì2$333C3/[3‹3¤3¼3Ö3(ô34&24*Y4&„4+«4×4#ì4#5)45-^5,Œ5¹5Ò5$ç59 6F63e6™61¶6è677/7!F7$h7=7GË7G89[8•8ž8"¥8È8å8;9!?9a9+}9©9¼9Ö9,ð9:%;:,a:-Ž: ¼:&Ý:;#;C;!c;.…;´;Ä;ÍÙ;§</Ç<÷<& = 4=%U={=›=¯=1Ä= ö=>#>#=>La>6®>å>6?A8?>z? ¹?+Ã?*ï?@ 2@<@1D@2v@ ©@µ@Î@"ã@*A1A@A PAqA A ™A£A»A ÛA èA%õAB+;B$gBŒB¦B ÅBÏBéBC+CHC!eC ‡C”C®C ·CÅCÎCâCD$D&_0X_‰_=©_;ç_:#`1^`,`H½`4a*;a"fa/‰a8¹a7òa*b>b Nb\b(êc3d$Gd ldyd0‚d9³díd'e<+ehe'†e!®e"Ðe óe-ÿe-fTIfDžf2ãf&g+=gyigsãgxWhLÐhDiwbiLÚi“'jV»jkkW~k|ÖkJSlJžl€él?jmKªmgöm`^nM¿n9 owGou¿o¦5psÜp¥PqIöqƒ@rGÄr5 sDBsL‡s;Ôs t!t"[v+‘C½/€41€îf€)U@À(×"‚(#‚"L‚o‚ƒ‚=˜‚Ö‚æ‚%ü‚-"ƒSPƒB¤ƒçƒF„MI„D—„Ü„,å„*…=… W… c…2m…1 …Ò… Ù…ú…:†(R†{†Œ†(ª†#Ó†÷† ‡‡(*‡S‡c‡'v‡,ž‡Dˇ%ˆ6ˆ&Mˆ tˆˆŸˆ¼ˆ+Úˆ(‰*/‰ Z‰h‰…‰މ ©‰¶‰$ʉï‰, Š89Š:rŠ9­ŠçŠ"‹##‹-G‹%u‹6›‹Ò‹+î‹-ŒHŒ fŒ ‡Œ •Œ ¢Œ¯Œ0ÃŒôŒ "-:H9ƒ"½#à-Ž2Ž#9Ž]ŽA{޽Ž7ÚŽ(<; xG…"Í5ð+&.R+*­Ø$Ü/‘81‘j‘.y‘¨‘%È‘î‘@ö‘7’/K’0{’>¬’-ë’“8“0Q“‚“‹“¥““0Ø“. ”88”Cq”Oµ”$• *•)K•2u•¨•6¼•3ó•%'–(M–!v–7˜–+Жü– ———+:—.f— •—¶— Ö—á—ö—˜5/˜=e˜J£˜=î˜?,™ l™7x™"°™Ó™*ç™3š'Fš'nš#–šºš#Κòš››,5›,b››9«›å›,ô› !œ5.œPdœLµœL,O;|¸ÌÝ3õ )ž3ž+Nžzž žž°ž%Àž'æž&Ÿ$5ŸZŸkŸHˆŸ0ÑŸ8 ; S 5l ¢ º !Ò :ô </¡\l¡)É¡ó¡ ¢1!¢QS¢4¥¢Ú¢+㢣!"£D£?Y£™£)´£3Þ£¤-¤>1¤=p¤>®¤2í¤6 ¥3W¥*‹¥¶¥7Ç¥5ÿ¥5¦K¦`¦2o¦4¢¦;צ3§%G§(m§2–§%ɧ ï§8¨EI¨4¨'Ĩ!ì¨4© C©Bd©8§© à©-ª/ª@ª2[ª%ŽªH´ªFýªFD«8‹«1Ä«_ö«7V¬.ެ%½¬;ã¬D­Cd­#¨­Ì­ ä­’’ž­u› ÙfŠœ´hcÓ='6݉#‰€“þEAf—)«$­¡É ~‘à k©µŒ9|jè2e-S„&vs•Ü`N¡H !š¨' ¦1uD§ô{}&.Y« Ïÿê?V¶50 mO¾v…JõK‡سöºxWQ ]tr–9 {C4ƒB±ÂMT†,\Z0š˰q:¨ó œU71ÌrHÛl™<:øò¿3B¢|/æjcP¸¯g5²Š—ç(+Áb-[+@†}~ŽzÊ™bFYä>n›"*]€,˜íÑlðQ =£‹Ldaã`8Ð÷åZÍ”#©@%ÎgnMÃsª_ÕD\S®ùTR„^7‚Ò ‹ _kEKž¬Vh6$¤/dwŸŸXúƒN4R¢^xtëLª®Ö»‘q*Åâ>W[ì§¹‡Ô·˜ÇF;!3PJe•y‚ÆoG¥ ;¥¼£I”ŽpˆéĈ"ß×GÚŒ“zÀo)ÞmUXa8¤Aý¬ip2(ïO–IiȦ…y½.ñîü%áCûw<? # %u 'vpath' search paths. # %u implicit rules, %u (%.1f%%) terminal. # %u pattern-specific variable values # Directories # Files # Finished Make data base on %s # General ('VPATH' variable) search path: # # Implicit Rules # Make data base, printed on %s # No general ('VPATH' variable) search path. # No implicit rules. # No pattern-specific variable values. # Pattern-specific Variable Values # VPATH Search Paths # Variables # files hash-table stats: # %s No strcache buffers %s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu B %s strcache performance: lookups = %lu / hit rate = %lu%% Counted %d args in failed launch This program built for %s This program built for %s (%s) Unhandled exception filter called from program %s ExceptionCode = %lx ExceptionFlags = %lx ExceptionAddress = 0x%p --debug[=FLAGS] Print various types of debugging information. --no-print-directory Turn off -w, even if it was turned on implicitly. --no-silent Echo recipes (disable --silent mode). --trace Print tracing information. --warn-undefined-variables Warn when an undefined variable is referenced. -B, --always-make Unconditionally make all targets. -C DIRECTORY, --directory=DIRECTORY Change to DIRECTORY before doing anything. -E STRING, --eval=STRING Evaluate STRING as a makefile statement. -I DIRECTORY, --include-dir=DIRECTORY Search DIRECTORY for included makefiles. -L, --check-symlink-times Use the latest mtime between symlinks and target. -O[TYPE], --output-sync[=TYPE] Synchronize output of parallel jobs by TYPE. -R, --no-builtin-variables Disable the built-in variable settings. -S, --no-keep-going, --stop Turns off -k. -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE Consider FILE to be infinitely new. -b, -m Ignored for compatibility. -d Print lots of debugging information. -e, --environment-overrides Environment variables override makefiles. -f FILE, --file=FILE, --makefile=FILE Read FILE as a makefile. -h, --help Print this message and exit. -i, --ignore-errors Ignore errors from recipes. -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no arg. -k, --keep-going Keep going when some targets can't be made. -l [N], --load-average[=N], --max-load[=N] Don't start multiple jobs unless load is below N. -n, --just-print, --dry-run, --recon Don't actually run any recipe; just print them. -o FILE, --old-file=FILE, --assume-old=FILE Consider FILE to be very old and don't remake it. -p, --print-data-base Print make's internal database. -q, --question Run no recipe; exit status says if up to date. -r, --no-builtin-rules Disable the built-in implicit rules. -s, --silent, --quiet Don't echo recipes. -t, --touch Touch targets instead of remaking them. -v, --version Print the version number of make and exit. -w, --print-directory Print the current directory. Date %s Ignoring VPATH name '%s'. uid = %d, gid = %d, mode = 0%o. (built-in): (core dumped) (don't care) (from '%s', line %lu) (from '%s', line %lu): (ignored) (name might be truncated) (no default goal) (no ~ expansion) (remote) (search path) files, impossibilities impossibilities in %lu directories. so far.# A default, MAKEFILES, or -include/sinclude makefile.# Also makes:# Builtin rule# Command line target.# Dependencies recipe running (THIS IS A BUG).# Failed to be updated.# File does not exist.# File has been updated.# File has not been updated.# File is an intermediate prerequisite.# File is very old.# Implicit rule search has been done.# Implicit rule search has not been done.# Implicit/static pattern stem: '%s' # Invalid value in 'command_state' member!# Last modified %s # Modification time never checked.# Needs to be updated (-q is set).# Phony target (prerequisite of .PHONY).# Precious file (prerequisite of .PRECIOUS).# Recipe currently running (THIS IS A BUG).# Successfully updated.# recipe to execute# %s (device %d, inode [%d,%d,%d]): # %s (device %d, inode [%d,%d,%d]): could not be opened. # %s (device %ld, inode %ld): # %s (device %ld, inode %ld): could not be opened. # %s (key %s, mtime %I64u): # %s (key %s, mtime %I64u): could not be opened. # %s: could not be stat'd. # No 'vpath' search paths.# Not a target:# hash-table stats: # # variable set hash-table stats: $SHELL changed (was '%s', now '%s') %s (line %d) Bad shell context (!unixy && !batch_mode_shell) %s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B %s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B %s other used: total = %lu B / count = %lu / avg = %lu B %s%s: %s%s: %s%s: Entering an unknown directory %s: Entering directory '%s' %s: Field '%s' not cached: %s%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p) %s: Leaving an unknown directory %s: Leaving directory '%s' %s: Timestamp out of range; substituting %s%s: failed to load%s: illegal option -- %c %s: invalid option -- %c %s: option '%c%s' doesn't allow an argument %s: option '%s' is ambiguous %s: option '%s' requires an argument %s: option '--%s' doesn't allow an argument %s: option '-W %s' doesn't allow an argument %s: option '-W %s' is ambiguous %s: option requires an argument -- %c %s: target '%s' does not exist%s: unrecognized option '%c%s' %s: unrecognized option '--%s' %s: update target '%s' due to: %s%s: user %lu (real %lu), group %lu (real %lu) %sBuilt for %s %sBuilt for %s (%s) %sLicense GPLv3+: GNU GPL version 3 or later %sThis is free software: you are free to change and redistribute it. %sThere is NO WARRANTY, to the extent permitted by law. %sNo rule to make target '%s'%s%sNo rule to make target '%s', needed by '%s'%s%s[%s: %s] Error %d%s%s[%u]: Entering an unknown directory %s[%u]: Entering directory '%s' %s[%u]: Leaving an unknown directory %s[%u]: Leaving directory '%s' '%s' is up to date.'override' directive*** Archive member '%s' may be bogus; not deleted*** Break. *** Deleting file '%s'*** Deleting intermediate file '%s'*** Waiting for unfinished jobs....*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp*** [%s] Archive member '%s' may be bogus; not deleted*** [%s] Deleting file '%s'*** mixed implicit and normal rules: deprecated syntax-O[TYPE] (--output-sync[=TYPE]) is not configured for this build.-warning, you may have to re-enable CTRL-Y handling from DCL. . Stop. .DEFAULT_GOAL contains more than one target.LIBPATTERNS element '%s' is not a pattern; using VPATH name '%s'AbortedAccess violation: read operation at address 0x%p Access violation: write operation at address 0x%p Alarm clockAppend %.*s and cleanup Append output to %s Avoiding implicit rule recursion. BUG: num_pattern_rules is wrong! %u != %uBUILTIN CD %s Bad system callBatch file contents: @echo off Batch file contents:%s %s Broken pipeBus errorCPU time limit exceededCannot create a temporary file Child accessChild exitedCircular %s <- %s dependency dropped.Cleaning up temp batch file %s Cleaning up temp batch file %s failed (%d) Cleaning up temporary batch file %s Collisions=%lu/%lu=%.0f%%Considering target file '%s'. ContinuedCould not restore stderr Could not restore stdin Could not restore stdout Couldn't change back to original directory.CreatePipe() failed (e=%ld) Creating temporary batch file %s Current timeCustoms won't export: %s DCL: %s Danger signalEMT trapEmpty function nameEmpty symbol name for load: %sExecuting %s instead Failed to load symbol %s from %s: %sFailed to open global symbol table: %sFailed to remake makefile '%s'.Failed to remake target file '%s'. File '%s' does not exist. File '%s' was considered already. File size limit exceededFinished prerequisites of target file '%s'. Finished updating file '%s'. Floating point co-processor not availableFloating point exceptionFound an implicit rule for '%s'. Found prerequisite '%s' as VPATH '%s' Function name too long: %sGiving up on target file '%s'. HangupI/O possibleIOT trapIllegal InstructionIncluded makefile '%s' was not found.Information requestInitialized accessInterruptInvalid function name: %sInvalid maximum argument count (%u) for function %sInvalid minimum argument count (%u) for function %sJobserver client (fds %d,%d) Jobserver client (semaphore %s) Jobserver slots limited to %d KilledLive child %p (%s) PID %s %s Load=%lu/%lu=%.0f%%, Loaded object %s is not declared to be GPL compatibleLoading symbol %s from %s Looking for a rule with intermediate file '%s'. Looking for an implicit rule for '%s'. Looking for archive-member implicit rule for '%s'. Make accessMakefile '%s' might loop; not remaking it. Makefile '%s' was not foundMakefile from standard input specified twice.Making '%s' due to always-make flag. Malformed target-specific variable definitionMember '%s'%s: %ld bytes at %ld (%ld). Must remake target '%s'. NoNo implicit rule found for '%s'. No need to remake target '%s'No recipe for '%s' and no prerequisites actually changed. No targetsNo targets specified and no makefile foundNothing to be done for '%s'.Obtained token for child %p (%s). Options: Parallel jobs (-j) are not supported on this platform.Power failurePrerequisite '%s' is newer than target '%s'. Prerequisite '%s' is older than target '%s'. Prerequisite '%s' is order-only for target '%s'. Prerequisite '%s' of target '%s' does not exist. Profiling timer expiredPruning file '%s'. Putting child %p (%s) PID %s%s on the chain. QuitRe-executing[%u]:Reading makefile '%s'Reading makefiles... Reaping losing child %p PID %s %s Reaping winning child %p PID %s %s Recently tried and failed to update file '%s'. Recipe for '%s' will be ignored in favor of the one for '%s'.Recipe for file '%s' was found by implicit rule search,Recipe has too many lines (%ud)Recipe of '%s' is being run. Recipe was specified for file '%s' at %s:%lu,Recursive variable '%s' references itself (eventually)Rehash=%u, Rejecting impossible implicit prerequisite '%s'. Rejecting impossible rule prerequisite '%s'. Released token for child %p (%s). Removing child %p PID %s%s from chain. Removing intermediate files... Report bugs to Resetting to single job (-j1) mode.Resource lostSIGPHONESIGWINDSegmentation faultSkipping UTF-8 BOM in makefile '%s' Skipping UTF-8 BOM in makefile buffer Stem too long: '%s%.*s'. Still updating file '%s'. StoppedStopped (signal)Stopped (tty input)Stopped (tty output)Successfully remade target file '%s'. Symbolic links not supported: disabling -L.Target '%s' is double-colon and has no prerequisites. Target '%s' not remade because of errors.Target file '%s' needs to be remade under -q. TerminatedThe 'load' operation is not supported on this platform.The prerequisites of '%s' are being made. Trace/breakpoint trapTrying implicit prerequisite '%s'. Trying pattern rule with stem '%.*s'. Trying rule prerequisite '%s'. Updating goal targets.... Updating makefiles.... Urgent I/O conditionUsage: %s [options] [target] ... User accessUser defined signal 1User defined signal 2Using default commands for '%s'. Using default recipe for '%s'. Virtual timer expiredWarning: File '%s' has modification time %s s in the futureWindow changedattempt to use unsupported feature: '%s'automaticbut '%s' is now considered the same file as '%s'.can't allocate %lu bytes for hash table: memory exhaustedcan't rename double-colon '%s' to single-colon '%s'can't rename single-colon '%s' to double-colon '%s'cannot enforce load limit: cannot enforce load limits on this operating systemclose: %s: %scommand linecreating jobs pipecreating jobserver semaphore: (Error %ld: %s)defaultduping jobs pipeempty string invalid as file nameempty variable nameenvironmentenvironment under -eextraneous '%s'extraneous text after '%s' directiveextraneous text after 'define' directiveextraneous text after 'endef' directivefile: invalid file operation: %sfile: missing filenamefile: too many argumentsfind_and_set_shell() path search set default_shell = %s find_and_set_shell() setting default_shell = %s first argument to 'word' function must be greater than 0fopen (temporary file)fwrite (temporary file)grouped targets must provide a recipeguile: Evaluating '%s' guile: Expanding '%s' init jobserver pipeinsufficient number of arguments (%d) to function '%s'internal error: invalid --jobserver-auth string '%s'internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)invalid syntax in conditionaljob server shut downjobserver pipelinelbr$ini_control() failed with status = %dlbr$set_module() failed to extract module info, status = %dmake reaped child pid %s, still waiting for pid %s makefilemissing 'endef', unterminated 'define'missing 'endif'missing rule before recipemissing separatormissing separator (did you mean TAB instead of 8 spaces?)missing target patternmixed implicit and normal rulesmixed implicit and static pattern rulesmultiple target patternsnono more file handles: could not duplicate stderr no more file handles: could not duplicate stdin no more file handles: could not duplicate stdout non-numeric first argument to 'word' functionnon-numeric first argument to 'wordlist' functionnon-numeric second argument to 'wordlist' functiononly one 'else' per conditionalopen: %s: %sprerequisites cannot be defined in recipesprocess_easy() failed to launch process (e=%ld) pselect jobs piperead jobs piperead: %s: %srecipe commences before first targetrelease jobserver semaphore: (Error %ld: %s)semaphore or child process wait: (Error %ld: %s)spawnvpe: environment space might be exhaustedsys$search() failed with %d target '%s' doesn't match the target patterntarget '%s' given more than once in the same ruletarget file '%s' has both : and :: entriestarget pattern contains no '%%'the '%s%s' option requires a non-empty string argumentthe '-%c' option requires a positive integer argumenttouch archive member is not available on VMStouch: '%s' is not a valid archivetouch: Archive '%s' does not existtouch: Bad return code from ar_member_touch on '%s'touch: Member '%s' does not exist in '%s'unable to open library '%s' to lookup member status %dunimplemented on this platform: function '%s'unknown debug level specification '%s'unknown output-sync type '%s'unknown signalunlink (temporary file): unterminated call to function '%s': missing '%c'unterminated variable referencewarning: Clock skew detected. Your build may be incomplete.warning: -j%d forced in makefile: resetting jobserver mode.warning: -j%d forced in submake: resetting jobserver mode.warning: NUL character seen; rest of line ignoredwarning: ignoring old recipe for target '%s'warning: jobserver unavailable: using -j1. Add '+' to parent make rule.warning: overriding group membership for target '%s'warning: overriding recipe for target '%s'warning: undefined variable '%.*s'windows32_openpipe(): process_init_fd() failed windows32_openpipe: DuplicateHandle(Err) failed (e=%ld) windows32_openpipe: DuplicateHandle(In) failed (e=%ld) write error: stdoutwrite jobserverwrite: %s: %sProject-Id-Version: make 4.2.93 Report-Msgid-Bugs-To: bug-make@gnu.org PO-Revision-Date: 2020-01-03 20:30+0100 Last-Translator: Jakub Bogusz Language-Team: Polish Language: pl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. # %u Å›cieżek przeszukiwania 'vpath'. # %u standardowych reguÅ‚, %u (%.1f%%) koÅ„cowych. # %u wartoÅ›ci zmiennych dla wzorca # Katalogi # Pliki # ZakoÅ„czono tworzenie bazy danych Make na %s # Ogólna (zmienna 'VPATH') Å›cieżka przeszukiwania: # # ReguÅ‚y stadardowe # Baza danych Make, wyÅ›wietlana na %s # Brak ogólnej (zmienna 'VPATH') Å›cieżki przeszukiwania. # Brak standardowych reguÅ‚. # Brak wartoÅ›ci zmiennych dla wzorca. # WartoÅ›ci zmiennych dla wzorca # Åšcieżki przeszukiwania VPATH # Zmienne # statystyki tablic haszujÄ…cych plików: # %s Brak buforów strcache %s bufory strcache: %lu (%lu) / Å‚aÅ„cuchów = %lu / miejsce = %lu B / Å›r = %lu B %s wydajność strcache: wyszukiwaÅ„ = %lu / wsp. trafieÅ„ = %lu%% Naliczono %d parametrów nieudanego uruchomienia Ten program zostaÅ‚ zbudowany dla %s Ten program zostaÅ‚ zbudowany dla %s (%s) NieobsÅ‚ugiwany filtr wyjÄ…tku wywoÅ‚any z programu %s ExceptionCode = %lx ExceptionFlags = %lx ExceptionAddress = 0x%p --debug[=FLAGI] WyÅ›wietla różne rodzaje informacji diagnostycznych. --no-print-directory Wyłącza -w, nawet jeÅ›li byÅ‚o ono włączone domyÅ›lnie. --no-silent Wypisuje polecenia (wyłącza tryb --silent). --trace Wypisywanie informacji ze Å›ledzenia. --warn-undefined-variables Ostrzega przy odwoÅ‚aniach do niezdefiniowanych zmiennych. -B, --always-make Bezwarunkowe utworzenie wszystkich obiektów. -C KATALOG, --directory=KATALOG PrzejÅ›cie do KATALOGu przed robieniem czegokolwiek. -E ÅAŃCUCH, --eval=ÅAŃCUCH Wyznacza ÅAŃCUCH jako instrukcjÄ™ pliku makefile. -I KATALOG, --include-dir=KATALOG Szuka dołączanych makefile w KATALOGu. -L, --check-symlink-times Używanie ostatniego mtime miÄ™dzy dowiÄ…zaniem a celem. -O[SPOSÓB], --output-sync[=SPOSÓB] Sposób synchronizacji wyjÅ›cia zadaÅ„ równolegÅ‚ych. -R, --no-builtin-variables Wyłącza ustawianie wbudowanych zmiennych. -S, --no-keep-going, --stop Wyłącza -k. -W PLIK, --what-if=PLIK, --new-file=PLIK, --assume-new=PLIK Uznaje PLIK za nieskoÅ„czenie nowy. -b, -m Ignorowane dla kompatybilnoÅ›ci. -d WyÅ›wietla dużo informacji diagnostycznych. -e, --environment-overrides Zmienne Å›rodowiska przykrywajÄ… makefile. -f PLIK, --file=PLIK, --makefile=PLIK Czyta PLIK jako makefile. -h, --help WyÅ›wietla ten komunikat i koÅ„czy dziaÅ‚anie. -i, --ignore-errors Ignoruje błędy poleceÅ„. -j [N], --jobs[=N] Dopuszcza N zadaÅ„ naraz; brak N oznacza brak ograniczeÅ„. -k, --keep-going Kontynuuj jeÅ›li nie da siÄ™ zrobić jakichÅ› obiektów. -l [N], --load-average[=N], --max-load[=N] Nie uruchamiaj wielu zadaÅ„ jeÅ›li load nie jest poniżej N. -n, --just-print, --dry-run, --recon Nie wykonuje poleceÅ„; jedynie je wyÅ›wietla. -o PLIK, --old-file=PLIK, --assume-old=PLIK Uznanie PLIKu za bardzo stary i nie tworzenie go ponownie. -p, --print-data-base WyÅ›wietla wewnÄ™trznÄ… bazÄ™ danych make. -q, --question Nie uruchamia żadnych poleceÅ„; status powrotu wskazuje aktualność. -r, --no-builtin-rules Wyłącza wbudowane reguÅ‚y standardowe. -s, --silent, --quiet Nie wypisuje poleceÅ„. -t, --touch Uaktualnia obiekty zamiast je robić. -v, --version WyÅ›wietla wersjÄ™ make i koÅ„czy dziaÅ‚anie. -w, --print-directory WyÅ›wietla aktualny katalog. Data %s Zignorowano nazwÄ™ VPATH '%s'. uid = %d, gid = %d, mode = 0%o. (wbudowane): (zrzut pamiÄ™ci) (nieważne) (z '%s', linia %lu) (z '%s', linia %lu): (zignorowano) (nazwa może zostać okrojona) (brak celu domyÅ›lnego) (brak rozszerzenia ~) (zdalne) (przeszukiwana Å›cieżka) pliki, niemożliwoÅ›ci niemożliwoÅ›ci w %lu katalogach. jak dotÄ…d.# Makefile domyÅ›lny, wymieniony w MAKEFILES lub -include/sinclude.# Robi również:# ReguÅ‚a wbudowana# Obiekt podany w linii poleceÅ„.# Aktualnie uruchamiane polecenia zależnoÅ›ci (TO JEST BÅÄ„D).# Uaktualnianie nie powiodÅ‚o siÄ™.# Plik nie istnieje.# Plik zostaÅ‚ uaktualniony.# Plik nie zostaÅ‚ uaktualniony.# Plik jest zależnoÅ›ciÄ… przejÅ›ciowÄ….# Plik jest bardzo stary.# Szukanie reguÅ‚ domyÅ›lnych zostaÅ‚o wykonane.# Szukanie reguÅ‚ domyÅ›lnych nie zostaÅ‚o wykonane.# Gałąź wzorców domyÅ›lnych/statycznych: '%s' # Błędna wartość w elemencie 'command_state'!# Ostatnio modyfikowany %s # Czas modyfikacji nie byÅ‚ sprawdzany.# Powinien być uaktualniony (-q jest włączone).# Obiekt niejawny (zależność .PHONY).# Cenny plik (zależność .PRECIOUS).# Aktualnie uruchamiane polecenia (TO JEST BÅÄ„D).# Uaktualnienie powiodÅ‚o siÄ™.# polecenia do wykonania# %s (urzÄ…dzenie %d, i-wÄ™zeÅ‚ [%d,%d,%d]): # %s (urzÄ…dzenie %d, i-wÄ™zeÅ‚ [%d,%d,%d]): otwarcie byÅ‚o niemożliwe. # %s (urzÄ…dzenie %ld, i-wÄ™zeÅ‚ %ld): # %s (urzÄ…dzenie %ld, i-wÄ™zeÅ‚ %ld): otwarcie byÅ‚o niemożliwe. # %s (klucz %s, czas modyfikacji %I64u): # %s (klucz %s, czas modyfikacji %I64u): otwarcie byÅ‚o niemożliwe. # %s: stat() zwraca błąd. # Brak Å›cieżek przeszukiwania 'vpath'# To nie jest obiekt:# statystyki tablic haszujÄ…cych: # # statystyki tablic haszujÄ…cych ustawionych zmiennych: $SHELL siÄ™ zmieniÅ‚ (byÅ‚ '%s', jest '%s') %s (linia %d) ZÅ‚y kontekst powÅ‚oki (!unixy && !batch_mode_shell) %s bieżący buf: rozmiar = %hu B / użyty = %hu B / liczba = %hu / Å›r = %u B %s pozostaÅ‚e wolne: razem = %lu B / maks = %lu B / min = %lu B / Å›r = %hu B %s pozostaÅ‚e użyte: razem = %lu B / liczba = %lu / Å›r = %lu B %s%s: %s%s: %s%s: WejÅ›cie do nieznanego katalogu %s: WejÅ›cie do katalogu '%s' %s: Pole '%s' nie zapamiÄ™tane w pamiÄ™ci podrÄ™cznej: %s%s: zÅ‚apano przerwanie/wyjÄ…tek (kod = 0x%lx, adres = 0x%p) %s: Opuszczenie nieznanego katalogu %s: Opuszczenie katalogu '%s' %s: Oznaczenie czasu spoza zakresu; zastÄ…piono %s%s: nie udaÅ‚o siÄ™ zaÅ‚adować%s: niedozwolona opcja -- %c %s: błędna opcja -- %c %s: opcja '%c%s' nie może mieć argumentów %s: opcja '%s' jest niejednoznaczna %s: opcja '%s' musi mieć argument %s: opcja '--%s' nie przyjmuje argumentów %s: opcja '-W %s' nie może mieć argumentów %s: opcja '-W %s' jest niejednoznaczna %s: opcja musi mieć argument -- %c %s: obiekt '%s' nie istnieje%s: nieznana opcja '%c%s' %s: nieznana opcja '--%s' %s: uaktualnianie obiektu '%s' z powodu: %s%s: użytkownik %lu (rzeczywisty %lu), grupa %lu (rzeczywista %lu) %sTen program zostaÅ‚ zbudowany dla systemu %s %sTen program zostaÅ‚ zbudowany dla systemu %s (%s) %sLicencja GPLv3+: GNU GPL wersja 3 lub nowsza %sTo oprogramowanie jest wolnodostÄ™pne: można je swobodnie zmieniać i rozpowszechniać. %sNie ma Å»ADNEJ GWARANCJI w zakresie dopuszczalnym przez prawo. %sBrak reguÅ‚ do wykonania obiektu '%s'%s%sBrak reguÅ‚ do zrobienia obiektu '%s', wymaganego przez '%s'%s%s[%s: %s] Błąd %d%s%s[%u]: WejÅ›cie do nieznanego katalogu %s[%u]: WejÅ›cie do katalogu '%s' %s[%u]: Opuszczenie nieznanego katalogu %s[%u]: Opuszczenie katalogu '%s' '%s' jest aktualne.dyrektywa 'override'*** Element archiwum '%s' może być faÅ‚szywy; nie usuniÄ™ty*** Przerwano. *** KasujÄ™ plik '%s'*** Kasowanie pliku poÅ›redniego '%s'*** Oczekiwanie na niezakoÅ„czone zadania....*** Uwaga: plik .LOW_RESOLUTION_TIME '%s' ma dużą rozdzielczość znacznika czasu*** [%s] Element archiwum '%s' może być faÅ‚szywy; nie usuniÄ™ty*** [%s] KasujÄ™ plik '%s'*** pomieszane reguÅ‚y standardowe i normalne: przestarzaÅ‚a skÅ‚adnia-O[TYP] (--output-sync[=TYP]) nie zostaÅ‚o skonfigurowane przy tym budowaniu.-uwaga, bÄ™dzie trzeba ponownie umożliwić obsÅ‚ugÄ™ CTRL-Y z DCL. . Stop. .DEFAULT_GOAL zawiera wiÄ™cej niż jeden celElement .LIBPATTERNS '%s' nie jest wzorcem; użyto nazwy VPATH '%s'PrzerwanyNaruszenie praw dostÄ™pu: odczyt spod adresu 0x%p Naruszenie praw dostÄ™pu: zapis pod adresem 0x%p BudzikDołączanie %.*s i czyszczenie Dołączanie wyjÅ›cia do %s Pomijanie rekurencyjnego wywoÅ‚ania reguÅ‚y standardowej. BÅÄ„D: zÅ‚e num_pattern_rules! %u != %uWBUDOWANE CD %s Błędne wywoÅ‚anie systemoweZawartość pliku wsadowego: @echo off Zawartość pliku wsadowego:%s %s Przerwany potokBłąd szynyPrzekroczony czas CPUNie można utworzyć pliku tymczasowego DostÄ™p potomkaPotomek powróciÅ‚Okrężna dyrektywa %s <- %s porzucona.Czyszczenie tymczasowego pliku wsadowego %s Czyszczenie tymczasowego pliku wsadowego %s nie powiodÅ‚o siÄ™ (%d) CzyszczÄ™ tymczasowy plik wsadowy %s Kolizje=%lu/%lu=%.0f%%Przetwarzanie pliku obiektowego '%s'. KontynuowanyNie można odtworzyć stderr Nie można odtworzyć stdin Nie można odtworzyć stdout Niemożliwy powrót do katalogu startowego.CreatePipe() nie powiodÅ‚o siÄ™ (e=%ld) Tworzenie tymczasowego pliku wsadowego %s Aktualny czasZasady nie eksportowane: %s DCL: %s SygnaÅ‚ niebezpieczeÅ„stwaPuÅ‚apka EMTPusta nazwa funkcjiPusta nazwa symbolu do wczytania: %sZamiast tego wykonywanie %s Nie udaÅ‚o siÄ™ wczytać symbolu %s z %s: %sNie udaÅ‚o siÄ™ otworzyć tablicy symboli globalnych: %sNie udaÅ‚o siÄ™ ponownie przetworzyć pliku makefile '%s'.Ponowne tworzenie pliku obiektu '%s' nie powiodÅ‚o siÄ™. Plik '%s' nie istnieje. Plik '%s' byÅ‚ już przetwarzany. Przekroczony limit wielkoÅ›ci plikuZakoÅ„czono zależnoÅ›ci pliku obiektu '%s'. SkoÅ„czyÅ‚em uaktualniać plik '%s'. Koprocesor obliczeÅ„ zmiennoprzecinkowych niedostÄ™pnyWyjÄ…tek zmiennoprzecinkowyZnaleziono standardowÄ… regułę dla '%s'. Znaleziono zależność '%s' jako VPATH '%s' Zbyt dÅ‚uga nazwa funkcji: %sZaniechany plik obiektowy '%s'. RozłączenieI/O możliwePuÅ‚apka IOTBłędna instrukcjaNie znaleziono włączanego pliku makefile '%s'.Żądanie informacjiZainicjalizowany dostÄ™pPrzerwanieBłędna nazwa funkcji: %sBłędna maksymalna liczba argumentów (%u) dla funkcji %sBłędna minimalna liczba argumentów (%u) dla funkcji %sKlient serwera zadaÅ„ (fds %d,%d) Klient serwera zadaÅ„ (semafor %s) Pojemność serwera zadaÅ„ ograniczona do %d ZabityÅ»yjÄ…cy potomek %p (%s) PID %s %s WypeÅ‚nienie=%lu/%lu=%.0f%%, Wczytany obiekt %s nie jest zadeklarowany jako kompatybilny z GPLWczytywanie symbolu %s z %s Szukanie reguÅ‚y zawierajÄ…cej plik przejÅ›ciowy '%s'. Szukanie standardowej reguÅ‚y dla '%s'. Szukanie standardowej reguÅ‚y typu archive-member dla '%s'. DostÄ™p makePlik makefile '%s' może siÄ™ zapÄ™tlić; bez ponownego przetwarzania. Nie znaleziono pliku makefile '%s'Makefile ze standardowego wejÅ›cia podano dwukrotnie.Tworzenie '%s' z powodu flagi always-make. Źle sformuÅ‚owana definicja zmiennej dla celuElement '%s'%s: %ld bajtów pod %ld (%ld). Konieczne ponowne wykonanie obiektu '%s'. NieBrak standardowych reguÅ‚ dla '%s'. Nie ma potrzeby ponownego robienia obiektu '%s'Brak poleceÅ„ dla '%s' i brak zmienionych zależnoÅ›ci. Brak obiektówNie podano obiektów i nie znaleziono makefileNie ma nic do zrobienia w '%s'.Otrzymano token dla potomka %p (%s). Opcje: RównolegÅ‚e zadania (-j) nie sÄ… obsÅ‚ugiwane na tej platformiePrzerwa w zasilaniuZależność '%s' jest nowsza od obiektu '%s'. Zależność '%s' jest starsza od obiektu '%s'. Zależność '%s' dotyczy tylko kolejnoÅ›ci dla obiektu '%s'. Zależność '%s' obiektu '%s' nie istnieje. Wyczerpany stoper profilujÄ…cyCzyszczenie pliku '%s'. Wstawianie potomka %p (%s) PID %s%s do kolejki. WyjÅ›ciePonowne uruchamianie[%u]:Czytanie pliku makefile '%s'Czytanie makefile... Zbieranie przegrywajÄ…cego potomka %p PID %s %s Zbieranie wygrywajÄ…cego potomka %p PID %s %s Już bez powodzenia próbowaÅ‚em uaktualnić plik '%s'. Polecenia dla '%s' zostanÄ… zignorowane na rzecz poleceÅ„ dla '%s'.Polecenia dla pliku '%s' zostaÅ‚y wyznaczone na podstawie reguÅ‚ standardowych,Polecenia majÄ… za dużo linii (%ud)Uruchomiono polecenia dla '%s'. Polecenia dla pliku '%s' podano w %s:%lu,Rekurencyjna zmienna '%s' wskazuje na samÄ… siebiePrzehaszowania=%u, Odrzucenie niemożliwej zależnoÅ›ci domyÅ›lnej '%s'. Odrzucenie niemożliwej zależnoÅ›ci reguÅ‚y '%s'. Zwolniony token dla potomka %p (%s). Usuwanie potomka %p PID %s%s z kolejki. Kasowanie plików poÅ›rednich... Błędy proszÄ™ zgÅ‚aszać na adres Przełączanie w tryb jednozadaniowy (-j1).Zaginione zasobySIGPHONESIGWINDNaruszenie ochrony pamiÄ™ciPominiÄ™to BOM UTF-8 w pliku makefile '%s' PominiÄ™to BOM UTF-8 w buforze pliku makefile Gałąź zbyt dÅ‚uga: '%s%.*s'. Wciąż uaktualniam plik '%s'. ZatrzymanyZatrzymany (sygnaÅ‚)Zatrzymany (wejÅ›cie z tty)Zatrzymany (wyjÅ›cie na tty)Ponowne tworzenie pliku obiektu '%s' powiodÅ‚o siÄ™. DowiÄ…zania symboliczne nie sÄ… obsÅ‚ugiwane: wyłączono -L.Obiekt '%s' jest z podwójnym dwukropkiem i nie ma żadnych zależnoÅ›ci. Obiekt '%s' nie zostaÅ‚ ponownie wykonany z powodu błędów.Plik obiektu '%s' powinien być ponownie tworzony z opcjÄ… -q. ZakoÅ„czonyOperacja 'load' nie jest obsÅ‚ugiwana na tej platformieZależnoÅ›ci '%s' sÄ… wykonywane. PuÅ‚apka Å›ledzeniaPróbowanie zależnoÅ›ci domyÅ›lnej '%s'. Próbowanie reguÅ‚y wzorcowej z gałęziÄ… '%.*s'. Próbowanie zależnoÅ›ci reguÅ‚y '%s'. Uaktualnianie obiektów docelowych.... Uaktualnianie plików makefile.... NagÅ‚a sytuacja I/OSkÅ‚adnia: %s [opcje] [obiekt] ... DostÄ™p użytkownikaSygnaÅ‚ użytkownika 1SygnaÅ‚ użytkownika 2Stosowanie standardowych poleceÅ„ dla '%s'. Stosowanie standardowych poleceÅ„ dla '%s'. Wyczerpany stoper wirtualnyUwaga: Plik '%s' ma czas modyfikacji %s s w przyszÅ‚oÅ›ciZmienione oknopróba użycia nieistniejÄ…cej funkcji: '%s'automatycznaale '%s' jest teraz uznawany za ten sam plik co '%s'.nie można przydzielić %lu bajtów na tablicÄ™ haszujÄ…cÄ…: pamięć wyczerpananie można przemianować '%s' z podwójnym dwukropkiem na '%s' z pojedynczymnie można przemianować '%s' z pojedynczym dwukropkiem na '%s' z podwójnymniemożliwe wymuszenie limitu obciążenia: niemożliwe wymuszenie limitów obciążenia w tym systemiezamkniÄ™cie: %s: %sz linii poleceÅ„tworzenie potoku zadaÅ„tworzenie semafora serwera zadaÅ„: (Błąd %ld: %s)domyÅ›lnaduplikowanie potoku zadaÅ„pusty Å‚aÅ„cuch nie może być nazwÄ… plikupusta nazwa zmiennejÅ›rodowiskowaÅ›rodowisko pod -enadmiarowy '%s'niezwiÄ…zany tekst po dyrektywie '%s'nadmiarowy tekst po dyrektywie 'define'nadmiarowy tekst po dyrektywie 'endef'plik: błędna operacja na pliku: %splik: brak nazwyplik: zbyt dużo argumentówfind_and_set_shell() ustawia Å›cieżkÄ™ wyszukiwania default_shell = %s find_and_set_shell() ustawia default_shell = %s pierwszy argument funkcji 'word' musi być wiÄ™kszy od 0fopen (plik tymczasowy)fwrite (plik tymczasowy)pogrupowane obiekty muszÄ… dostarczać opis poleceniaguile: Wyliczanie '%s' guile: Rozwijanie '%s' inicjowanie potoku serwera zadaÅ„niewystarczajÄ…ca liczba argumentów (%d) dla funkcji '%s'błąd wewnÄ™trzny: błędny Å‚aÅ„cuch --jobserver-auth '%s'błąd wewnÄ™trzny: nie udaÅ‚o siÄ™ otworzyć semafora serwera zadaÅ„ '%s': (Błąd %ld: %s)błędna skÅ‚adnia wyrażenia warunkowegoserwer zadaÅ„ zamkniÄ™typotok serwera zadaÅ„lbr$ini_control() nie powiodÅ‚o siÄ™, status = %dUzyskanie informacji o module przez lnr$set_module() nie udaÅ‚o siÄ™, status = %dmake usunÄ…Å‚ potomka pid %s, nadal czeka na pid %s makefilebrakujÄ…cy 'endef', niezakoÅ„czone 'define'brakujÄ…cy 'endif'brakuje reguÅ‚y przed poleceniamibrakujÄ…cy separatorbrakujÄ…cy separator (czyżby miaÅ‚ być TAB zamiast 8 spacji?)brakujÄ…cy wzorzec obiektupomieszane standardowe i normalne reguÅ‚ypomieszane standardowe i statyczne reguÅ‚y wzorcówwielokrotne wzorce obiektunienie ma wiÄ™cej uchwytów plików: nie można powielić stderr nie ma wiÄ™cej uchwytów plików: nie można powielić stdin nie ma wiÄ™cej uchwytów plików: nie można powielić stdout pierwszy argument funkcji 'word' nie jest liczbowypierwszy argument funkcji 'wordlist' nie jest liczbowydrugi argument funkcji 'wordlist' nie jest liczbowytylko jedno 'else' w wyrażeniu warunkowymotwarcie: %s: %swymagania nie mogÄ… być definiowane w opisach poleceÅ„process_easy() nie mógÅ‚ uruchomić procesu (e=%ld) pselect potoku zadaÅ„odczyt potoku zadaÅ„odczyt: %s: %spolecenia zaczynajÄ… siÄ™ przed pierwszym obiektemzwalnianie semafora serwera zadaÅ„: (Błąd %ld: %s)oczekiwanie na semafor lub proces potomny: (Błąd %ld: %s)spawnvpe: mogÅ‚o zabraknąć miejsca na Å›rodowiskosys$search() nie powiodÅ‚o siÄ™ - %d obiekt '%s' nie pasuje do wzorca obiektuobiekt '%s' podany wielokrotnie w tej samej reguleplik obiektu '%s' ma pozycje i : i ::wzorzec obiektu nie zawiera '%%'opcja '%s%s' wymaga niepustego Å‚aÅ„cucha jako argumentuopcja '-%c' wymaga argumentu bÄ™dÄ…cego liczbÄ… caÅ‚kowitÄ… dodatniÄ…element biblioteki `touch' jest niedostÄ™pny pod VMStouch: '%s' nie jest poprawnym archiwumtouch: Archiwum '%s' nie istniejetouch: Błędny kod powrotu z ar_member_touch w '%s'touch: Brak elementu '%s' w '%s'błąd otwarcia biblioteki '%s' podczas szukania stanu elementu %dfunkcja '%s' nie jest zaimplementowana na tej platformienieznany poziom diagnostyki '%s'nieznany sposób synchronizacji wyjÅ›cia '%s'nieznany sygnaÅ‚unlink (plik tymczasowy): nie dokoÅ„czone wywoÅ‚anie funkcji '%s': brak '%c'niezakoÅ„czone odwoÅ‚anie do zmiennejuwaga: Wykryto przestawienie zegara. Budowanie może być niekompletne.uwaga: -j%d wymuszone w podzadaniu: wyłączanie trybu serwera zadaÅ„.uwaga: -j%d wymuszone w podzadaniu: wyłączanie trybu serwera zadaÅ„.uwaga: napotkaÅ‚em na znak NUL; reszta linii zignorowanauwaga: ignorujÄ™ stare polecenia dla obiektu '%s'uwaga: serwer zadaÅ„ niedostÄ™pny: użycie -j1. Należy dodać `+' do nadrzÄ™dnej reguÅ‚y make.uwaga: zakrycie czÅ‚onkowstwa w grupie dla obiektu '%s'uwaga: polecenia zakrywajÄ…ce dla obiektu '%s'uwaga: niezdefiniowana zmienna '%.*s'windows32_openpipe(): process_init_fd() nie powiodÅ‚o siÄ™ windows32_openpipe: DuplicateHandle(Err) nie powiodÅ‚o siÄ™ (e=%ld) windows32_openpipe: DuplicateHandle(In) nie powiodÅ‚o siÄ™ (e=%ld) błąd zapisu: standardowe wyjÅ›ciezapis do serwera zadaÅ„zapis: %s: %smake-4.3/po/POTFILES.in0000644000175000017500000000222113603564437011421 00000000000000# List of source files containing translatable strings. # Copyright (C) 2000-2020 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 . src/ar.c src/arscan.c src/commands.c src/dir.c src/expand.c src/file.c src/function.c src/getopt.c src/guile.c src/hash.c src/implicit.c src/job.c src/load.c src/main.c src/misc.c src/output.c src/output.h src/posixos.c src/read.c src/remake.c src/remote-cstms.c src/rule.c src/signame.c src/strcache.c src/variable.c src/variable.h src/vmsfunctions.c src/vmsjobs.c src/vpath.c src/w32/w32os.c make-4.3/po/pt_BR.gmo0000644000175000017500000012601313611136532011352 00000000000000Þ•­„ Aìð#ñ#+$&:$a$q$!z$-œ$Ê$ Ü$-ý$+%'A%#i%% ¤%²%Ð%Pé%;:&"v&™& µ&tÖ&LK'P˜'Dé'9.(Mh(@¶(o÷(Gg)o¯)P*lp*FÝ*J$+€o+9ð+C*,fn,_Õ,;5-:q-O¬-Jü-}G.uÅ.~;/>º/Mù/CG02‹0F¾0I1;O1 ‹1•1"²1 Õ1â1 ñ1ÿ12 /2:2U2h2 z2„2“2œ2%­2Ó27Ü23#333/K3{3”3¬3Æ3(ä3 4&"4*I4&t4+›4Ç4#Ü4#5)$5-N5,|5©5Â5$×59ü5663U6‰61¦6Ø6ô677!67$X7=}7G»7G89K8…8Ž8"•8¸8Õ8;ó8!/9Q9+m9™9¬9Æ9,à9 :%+:,Q:-~: ¬:&Í:ô:;3;!S;.u;¤;´;ÍÉ;—</·<ç<&ý< $=%E=k=‹=Ÿ=1´= æ=ò=# >#->LQ>6ž>Õ>6ñ>A(?>j? ©?+³?*ß? @ "@,@14@2f@ ™@¥@¾@"Ó@*ö@!A0A @AaA }A ‰A“A«A ËA ØA%åA B++B$WB|B–B µB¿BÙBòB+ C8C!UC wC„CžC §CµC¾CÒCñC$D&,DSD#sD—D"²DÕD,îDE)9EcE!|E&žEÅEàEF FFF%1FWFkF ~FˆF3¢F3ÖF G (GIGhGoGG5£GÙG0ôG'%H3MH H+H¹H-ÕH%I-)I'WII™I!œI¾I:ÜI J*"JMJ"jJ J6—J ÎJ-ÜJ- K18K1jKœK´K-ÈKöKûK L#L"9L#\L/€L=°L7îL&MFM-dM6’M ÉM1ÕM-N"5N'XN€N" N#ÃN çNõNþNO$O&>OeO€OˆO™O­O&ÂO+éO6P)LP.vP ¥P7°P*èPQ#)Q&MQtQ”Q¯QÇQ!ÜQ þQ R R!6RXRxR;ŽRÊR(ÙR S1 S9>S3xS3¬SàS3üS 0T >TKT-^TŒT”T!¥TÇT ÛTçTüT$ U(1U'ZU ‚U£UºU8ÓU0 V8=VvVV%¥VËVãVúV6W4EWHzWÃWáWöW) X;3X3oX£X&¬XÓXãXþX9YJYaY'Y©YÂY1ÅY0÷Y1(Z-ZZ1ˆZ2ºZíZ [*[0E[v[ˆ[ —[$¤[,É[0ö[.'\V\,s\1 \*Ò\ý\6]5T],Š]"·]"Ú]3ý])1^6[^-’^&À^ç^__0.___=_;½_:ù_14`,f`H“`4Ü`*a"d5od¥d µd+Ád,íde)1e-[e ‰e9ªe0äef'f6fUfTtfAÉf) g%5g*[g~†gVha\hQ¾hEiWViI®iqøiUjjzÀjY;ks•kS lS]l±l<AmH~miÇm{1n;­n;én]%oZƒoÞoxnpçpGxqfÀq?'r4grXœrIõr9?s ys ƒs"¤s ÇsÔsësÿst .t9tWttt ‡t‘t ¨t´t&Æt ít>út9uHu>wu ¶u×uðu v0-v ^v*v/ªv1Úv- w:w3Vw-Šw&¸w1ßw-x?xYx)ox@™x#Úx:þx9y2Wy#Šy®yÆyÙy)öy, z?MzKzHÙz="{`{i{+p{!œ{"¾{Já{),|V|,v|£|º|!Ù|/û|+}(K}0t}1¥}"×}(ú}#~&<~&c~$Š~2¯~â~÷~á)ó?€]€/r€%¢€-È€#ö€2:G ‚'¨+Ð[ü?X‚˜‚=¶‚Nô‚5Cƒ yƒ*ƒƒ0®ƒ߃ ûƒ„>„>N„ „™„´„(Ñ„)ú„$…4…)Q…${… …»…Î…1ä… † #†*0†+[†@‡†*Ȇó†# ‡ 0‡#>‡"b‡#…‡1©‡Û‡'ø‡ ˆ$+ˆPˆYˆ hˆrˆ‰ˆ¤ˆ*Àˆ0ëˆ)‰#F‰j‰%ˆ‰®‰)ʉ*ô‰(ŠHŠ(eŠ0ŽŠ ¿ŠàŠ þŠ ‹ ‹"‹+5‹a‹‹ “‹¡‹DÀ‹DŒJŒ!iŒ ‹Œ ¬Œ·ŒÖŒ>ìŒ+9I1ƒCµù9Ž$BŽ4gŽ0œŽ0ÍŽ'þŽ$&K0P,@®ï5ø.4K €=‹É6ä8‘6T‘1‹‘½‘Ü‘7ú‘2’7’J’h’*…’*°’/Û’C “KO“!›“%½“8ã“D” a”.l”,›”4È”2ý”#0•.T•+ƒ•¯•¿•È•Е%ç•' –)5–_–f–u–Š–%–:Ö@þ–6?—.v— ¥—7¯—/ç—˜*.˜)Y˜,ƒ˜#°˜&Ô˜û˜™4™G™f™(…™(®™×™9ô™.š%>š dš1pšF¢šCéšD-›"r›@•›Ö›æ› ÷›,œEœ#Mœ?qœ±œÉœÒœâœ'ñœ+)E,o#œÀ@Û2ž@Ožž¬ž.ÉžøžŸ*'ŸCRŸ8–ŸGÏŸ! 9 S (n H— <à ¡*&¡Q¡"c¡†¡B›¡Þ¡*û¡7&¢^¢~¢Aƒ¢@Å¢A£8H£=£<¿£%ü£"¤61¤5h¤ž¤º¤ Ô¤(á¤/ ¥2:¥0m¥ž¥(º¥=ã¥(!¦&J¦0q¦5¢¦%ئ&þ¦%§FE§(Œ§Hµ§8þ§)7¨"a¨„¨%—¨;½¨'ù¨G!©>i©?¨©;è©3$ªEXª.žª2ͪ#«/$«;T«;«Ì«ç«ø«’‘¬uš ÙeŠœ´gcÓ<'6݉#ˆ“þDAf–)ª$­ É }‘à k©µŒ8|jè1e,Rƒ&vr•Ü`N¡HŸ!š¨€ ¥0tD§ôz|&-X« Ïÿê>U¶40 lO¾u…IõJ†سöºwVP ]sr•9 {C3‚A±ÂMT…+[Y/™˰p:§ó ›U71ÌqGÛl˜;9øò¿2B¡{Œ/æibO¸~¯g5²‰—ç'+Áa-Z*@†}~yÊ™bEYä=n›")\€,˜íÑkðQ =¢‹Kd`ã_8Ð÷åZÍ“#¨?%ÎfmLÃs©_ÕC\SŽ®ùSR„^6Ò Š ^jEKž¬Vh5$¤.cwžŸWúƒM4Q¢]xtëLª­Ö»q*Åâ>W[즹‡Ô·—ÇF:!3PJd”y‚ÆoF¥ ;¤¼£H”Žp‡éĈ"ß×GÚ‹’zÀn(ÞmTXaœ7£@ý«io2(ïN–IhȦ„x½.ñîü%áBûv<? # %u 'vpath' search paths. # %u implicit rules, %u (%.1f%%) terminal. # %u pattern-specific variable values # Directories # Files # Finished Make data base on %s # General ('VPATH' variable) search path: # # Implicit Rules # Make data base, printed on %s # No general ('VPATH' variable) search path. # No implicit rules. # No pattern-specific variable values. # Pattern-specific Variable Values # VPATH Search Paths # Variables # files hash-table stats: # %s No strcache buffers %s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu B %s strcache performance: lookups = %lu / hit rate = %lu%% Counted %d args in failed launch This program built for %s This program built for %s (%s) Unhandled exception filter called from program %s ExceptionCode = %lx ExceptionFlags = %lx ExceptionAddress = 0x%p --debug[=FLAGS] Print various types of debugging information. --no-print-directory Turn off -w, even if it was turned on implicitly. --no-silent Echo recipes (disable --silent mode). --trace Print tracing information. --warn-undefined-variables Warn when an undefined variable is referenced. -B, --always-make Unconditionally make all targets. -C DIRECTORY, --directory=DIRECTORY Change to DIRECTORY before doing anything. -E STRING, --eval=STRING Evaluate STRING as a makefile statement. -I DIRECTORY, --include-dir=DIRECTORY Search DIRECTORY for included makefiles. -L, --check-symlink-times Use the latest mtime between symlinks and target. -O[TYPE], --output-sync[=TYPE] Synchronize output of parallel jobs by TYPE. -R, --no-builtin-variables Disable the built-in variable settings. -S, --no-keep-going, --stop Turns off -k. -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE Consider FILE to be infinitely new. -b, -m Ignored for compatibility. -d Print lots of debugging information. -e, --environment-overrides Environment variables override makefiles. -f FILE, --file=FILE, --makefile=FILE Read FILE as a makefile. -h, --help Print this message and exit. -i, --ignore-errors Ignore errors from recipes. -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no arg. -k, --keep-going Keep going when some targets can't be made. -l [N], --load-average[=N], --max-load[=N] Don't start multiple jobs unless load is below N. -n, --just-print, --dry-run, --recon Don't actually run any recipe; just print them. -o FILE, --old-file=FILE, --assume-old=FILE Consider FILE to be very old and don't remake it. -p, --print-data-base Print make's internal database. -q, --question Run no recipe; exit status says if up to date. -r, --no-builtin-rules Disable the built-in implicit rules. -s, --silent, --quiet Don't echo recipes. -t, --touch Touch targets instead of remaking them. -v, --version Print the version number of make and exit. -w, --print-directory Print the current directory. Date %s Ignoring VPATH name '%s'. uid = %d, gid = %d, mode = 0%o. (built-in): (core dumped) (don't care) (from '%s', line %lu) (from '%s', line %lu): (ignored) (name might be truncated) (no default goal) (no ~ expansion) (remote) (search path) files, impossibilities impossibilities in %lu directories. so far.# A default, MAKEFILES, or -include/sinclude makefile.# Also makes:# Builtin rule# Command line target.# Dependencies recipe running (THIS IS A BUG).# Failed to be updated.# File does not exist.# File has been updated.# File has not been updated.# File is an intermediate prerequisite.# File is very old.# Implicit rule search has been done.# Implicit rule search has not been done.# Implicit/static pattern stem: '%s' # Invalid value in 'command_state' member!# Last modified %s # Modification time never checked.# Needs to be updated (-q is set).# Phony target (prerequisite of .PHONY).# Precious file (prerequisite of .PRECIOUS).# Recipe currently running (THIS IS A BUG).# Successfully updated.# recipe to execute# %s (device %d, inode [%d,%d,%d]): # %s (device %d, inode [%d,%d,%d]): could not be opened. # %s (device %ld, inode %ld): # %s (device %ld, inode %ld): could not be opened. # %s (key %s, mtime %I64u): # %s (key %s, mtime %I64u): could not be opened. # %s: could not be stat'd. # No 'vpath' search paths.# Not a target:# hash-table stats: # # variable set hash-table stats: $SHELL changed (was '%s', now '%s') %s (line %d) Bad shell context (!unixy && !batch_mode_shell) %s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B %s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B %s other used: total = %lu B / count = %lu / avg = %lu B %s%s: %s%s: %s%s: Entering an unknown directory %s: Entering directory '%s' %s: Field '%s' not cached: %s%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p) %s: Leaving an unknown directory %s: Leaving directory '%s' %s: Timestamp out of range; substituting %s%s: failed to load%s: illegal option -- %c %s: invalid option -- %c %s: option '%c%s' doesn't allow an argument %s: option '%s' is ambiguous %s: option '%s' requires an argument %s: option '--%s' doesn't allow an argument %s: option '-W %s' doesn't allow an argument %s: option '-W %s' is ambiguous %s: option requires an argument -- %c %s: target '%s' does not exist%s: unrecognized option '%c%s' %s: unrecognized option '--%s' %s: update target '%s' due to: %s%s: user %lu (real %lu), group %lu (real %lu) %sBuilt for %s %sBuilt for %s (%s) %sLicense GPLv3+: GNU GPL version 3 or later %sThis is free software: you are free to change and redistribute it. %sThere is NO WARRANTY, to the extent permitted by law. %sNo rule to make target '%s'%s%sNo rule to make target '%s', needed by '%s'%s%s[%s: %s] Error %d%s%s[%u]: Entering an unknown directory %s[%u]: Entering directory '%s' %s[%u]: Leaving an unknown directory %s[%u]: Leaving directory '%s' '%s' is up to date.'override' directive*** Archive member '%s' may be bogus; not deleted*** Break. *** Deleting file '%s'*** Deleting intermediate file '%s'*** Waiting for unfinished jobs....*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp*** [%s] Archive member '%s' may be bogus; not deleted*** [%s] Deleting file '%s'*** mixed implicit and normal rules: deprecated syntax-O[TYPE] (--output-sync[=TYPE]) is not configured for this build.-warning, you may have to re-enable CTRL-Y handling from DCL. . Stop. .DEFAULT_GOAL contains more than one target.LIBPATTERNS element '%s' is not a pattern; using VPATH name '%s'AbortedAccess violation: read operation at address 0x%p Access violation: write operation at address 0x%p Alarm clockAppend %.*s and cleanup Append output to %s Avoiding implicit rule recursion. BUG: num_pattern_rules is wrong! %u != %uBUILTIN CD %s Bad system callBatch file contents: @echo off Batch file contents:%s %s Broken pipeBus errorCPU time limit exceededCannot create a temporary file Child accessChild exitedCircular %s <- %s dependency dropped.Cleaning up temp batch file %s Cleaning up temp batch file %s failed (%d) Cleaning up temporary batch file %s Collisions=%lu/%lu=%.0f%%Considering target file '%s'. ContinuedCould not restore stderr Could not restore stdin Could not restore stdout Couldn't change back to original directory.CreatePipe() failed (e=%ld) Creating temporary batch file %s Current timeCustoms won't export: %s DCL: %s Danger signalEMT trapEmpty function nameEmpty symbol name for load: %sExecuting %s instead Failed to load symbol %s from %s: %sFailed to open global symbol table: %sFailed to remake makefile '%s'.Failed to remake target file '%s'. File '%s' does not exist. File '%s' was considered already. File size limit exceededFinished prerequisites of target file '%s'. Finished updating file '%s'. Floating point co-processor not availableFloating point exceptionFound an implicit rule for '%s'. Found prerequisite '%s' as VPATH '%s' Function name too long: %sGiving up on target file '%s'. HangupI/O possibleIOT trapIllegal InstructionIncluded makefile '%s' was not found.Information requestInitialized accessInterruptInvalid function name: %sInvalid maximum argument count (%u) for function %sInvalid minimum argument count (%u) for function %sJobserver client (fds %d,%d) Jobserver client (semaphore %s) Jobserver slots limited to %d KilledLive child %p (%s) PID %s %s Load=%lu/%lu=%.0f%%, Loaded object %s is not declared to be GPL compatibleLoading symbol %s from %s Looking for a rule with intermediate file '%s'. Looking for an implicit rule for '%s'. Looking for archive-member implicit rule for '%s'. Make accessMakefile '%s' might loop; not remaking it. Makefile '%s' was not foundMakefile from standard input specified twice.Making '%s' due to always-make flag. Malformed target-specific variable definitionMember '%s'%s: %ld bytes at %ld (%ld). Must remake target '%s'. NoNo implicit rule found for '%s'. No need to remake target '%s'No recipe for '%s' and no prerequisites actually changed. No targetsNo targets specified and no makefile foundNothing to be done for '%s'.Obtained token for child %p (%s). Options: Parallel jobs (-j) are not supported on this platform.Power failurePrerequisite '%s' is newer than target '%s'. Prerequisite '%s' is older than target '%s'. Prerequisite '%s' is order-only for target '%s'. Prerequisite '%s' of target '%s' does not exist. Profiling timer expiredPruning file '%s'. Putting child %p (%s) PID %s%s on the chain. QuitRe-executing[%u]:Reading makefile '%s'Reading makefiles... Reaping losing child %p PID %s %s Reaping winning child %p PID %s %s Recently tried and failed to update file '%s'. Recipe for '%s' will be ignored in favor of the one for '%s'.Recipe for file '%s' was found by implicit rule search,Recipe has too many lines (%ud)Recipe of '%s' is being run. Recipe was specified for file '%s' at %s:%lu,Recursive variable '%s' references itself (eventually)Rehash=%u, Rejecting impossible implicit prerequisite '%s'. Rejecting impossible rule prerequisite '%s'. Released token for child %p (%s). Removing child %p PID %s%s from chain. Removing intermediate files... Report bugs to Resetting to single job (-j1) mode.Resource lostSIGPHONESIGWINDSegmentation faultSkipping UTF-8 BOM in makefile '%s' Skipping UTF-8 BOM in makefile buffer Still updating file '%s'. StoppedStopped (signal)Stopped (tty input)Stopped (tty output)Successfully remade target file '%s'. Symbolic links not supported: disabling -L.Target '%s' is double-colon and has no prerequisites. Target '%s' not remade because of errors.Target file '%s' needs to be remade under -q. TerminatedThe 'load' operation is not supported on this platform.The prerequisites of '%s' are being made. Trace/breakpoint trapTrying implicit prerequisite '%s'. Trying pattern rule with stem '%.*s'. Trying rule prerequisite '%s'. Updating goal targets.... Updating makefiles.... Urgent I/O conditionUsage: %s [options] [target] ... User accessUser defined signal 1User defined signal 2Using default commands for '%s'. Using default recipe for '%s'. Virtual timer expiredWarning: File '%s' has modification time %s s in the futureWindow changedattempt to use unsupported feature: '%s'automaticbut '%s' is now considered the same file as '%s'.can't allocate %lu bytes for hash table: memory exhaustedcan't rename double-colon '%s' to single-colon '%s'can't rename single-colon '%s' to double-colon '%s'cannot enforce load limit: cannot enforce load limits on this operating systemclose: %s: %scommand linecreating jobs pipecreating jobserver semaphore: (Error %ld: %s)defaultduping jobs pipeempty string invalid as file nameempty variable nameenvironmentenvironment under -eextraneous '%s'extraneous text after '%s' directiveextraneous text after 'define' directiveextraneous text after 'endef' directivefile: invalid file operation: %sfile: missing filenamefile: too many argumentsfind_and_set_shell() path search set default_shell = %s find_and_set_shell() setting default_shell = %s first argument to 'word' function must be greater than 0fopen (temporary file)fwrite (temporary file)grouped targets must provide a recipeguile: Evaluating '%s' guile: Expanding '%s' init jobserver pipeinsufficient number of arguments (%d) to function '%s'internal error: invalid --jobserver-auth string '%s'internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)invalid syntax in conditionaljob server shut downjobserver pipelinelbr$ini_control() failed with status = %dlbr$set_module() failed to extract module info, status = %dmake reaped child pid %s, still waiting for pid %s makefilemissing 'endef', unterminated 'define'missing 'endif'missing rule before recipemissing separatormissing separator (did you mean TAB instead of 8 spaces?)missing target patternmixed implicit and normal rulesmixed implicit and static pattern rulesmultiple target patternsnono more file handles: could not duplicate stderr no more file handles: could not duplicate stdin no more file handles: could not duplicate stdout non-numeric first argument to 'word' functionnon-numeric first argument to 'wordlist' functionnon-numeric second argument to 'wordlist' functiononly one 'else' per conditionalopen: %s: %sprerequisites cannot be defined in recipesprocess_easy() failed to launch process (e=%ld) pselect jobs piperead jobs piperead: %s: %srecipe commences before first targetrelease jobserver semaphore: (Error %ld: %s)semaphore or child process wait: (Error %ld: %s)spawnvpe: environment space might be exhaustedsys$search() failed with %d target '%s' doesn't match the target patterntarget '%s' given more than once in the same ruletarget file '%s' has both : and :: entriestarget pattern contains no '%%'the '%s%s' option requires a non-empty string argumentthe '-%c' option requires a positive integer argumenttouch archive member is not available on VMStouch: '%s' is not a valid archivetouch: Archive '%s' does not existtouch: Bad return code from ar_member_touch on '%s'touch: Member '%s' does not exist in '%s'unable to open library '%s' to lookup member status %dunimplemented on this platform: function '%s'unknown debug level specification '%s'unknown output-sync type '%s'unknown signalunlink (temporary file): unterminated call to function '%s': missing '%c'unterminated variable referencewarning: Clock skew detected. Your build may be incomplete.warning: -j%d forced in makefile: resetting jobserver mode.warning: -j%d forced in submake: resetting jobserver mode.warning: NUL character seen; rest of line ignoredwarning: ignoring old recipe for target '%s'warning: jobserver unavailable: using -j1. Add '+' to parent make rule.warning: overriding group membership for target '%s'warning: overriding recipe for target '%s'warning: undefined variable '%.*s'windows32_openpipe(): process_init_fd() failed windows32_openpipe: DuplicateHandle(Err) failed (e=%ld) windows32_openpipe: DuplicateHandle(In) failed (e=%ld) write error: stdoutwrite jobserverwrite: %s: %sProject-Id-Version: GNU make 4.2.91 Report-Msgid-Bugs-To: bug-make@gnu.org PO-Revision-Date: 2019-10-04 22:31-0300 Last-Translator: Fábio Henrique F. Silva Language-Team: Brazilian Portuguese Language: pt_BR MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. Plural-Forms: nplurals=2; plural=(n > 1); X-Generator: Poedit 2.0.6 # %u caminhos 'vpath'. # %u regras implícitas, %u (%.1f%%) terminal. # %u valores para variável de padrões específicos # Diretórios # Arquivos # Banco de dados do Make finalizado em %s # Caminho genérico (variável 'VPATH'): # # Regras implícitas. # Banco de dados do Make, impresso em %s # Sem caminho genérico (variável 'VPATH'). # Faltam as regras implícitas. # Faltam valores para variável de padrões específicos # Valores da variável de padrões específicos # Caminho VPATH # Variáveis # tabela hash de arquivos: # %s Não há strcache buffers %s strcache buffers: %lu (%lu) / strings = %lu / armazenamento = %lu / med = %lu B %s desempenho strcache: pesquisados = %lu / encontrados = %lu%% Contados %d args na falha de execução Este programa foi compilado para %s Este programa foi compilado para %s (%s) Não pôde tratar o filtro de exceção chamado por %s CódigoExceção = %lx SinalExceção = %lx EndereçoExceção = 0x%p --debug[=OPÇÕES] Imprime vários tipos de informações de depuração. --no-print-directory Desativa a opção -w, mesmo que ela esteja implicitamente ativada. --no-silent Ecoa as instruções (desabilita o modo --silent). -trace Imprime informação de depuração. --warn-undefined-variables Avisa quando um variável não definida for referenciada. -B, --always-make Processa todos os alvos incondicionalmente. -C DIRETÓRIO, --directory=DIRETÓRIO Muda para o DIRETÓRIO antes de fazer algo. -E STRING, --eval=STRING Avalia a STRING como uma declaração para um makefile. -I DIRETÓRIO, --include-dir=DIRETÓRIO Pesquisa o DIRETÃ’RIO por arquivos make a incluir. -L, --check-symlink-times Usa o tempo mais antigo entre o vínculo simbólico e o alvo. -O[TYPE], --output-sync[=TYPE] Sincroniza a saída de tarefas paralelas pelo TIPO. -R, --no-builtin-variables Desabilita a configuração das variáveis embutidas. -S, --no-keep-going, --stop Desativa a opção -k. -W ARQUIVO, --what-if=ARQUIVO, --new-file=ARQUIVO, --assume-new=ARQUIVO Considera o ARQUIVO infinitamente novo. -b, -m Ignorado para compatibilidade. -d Imprime muita informação de depuração. -e, --environment-overrides Assume os valores das variáveis de ambiente. -f ARQUIVO, --file=ARQUIVO, --makefile=ARQUIVO Lê o ARQUIVO como se fosse um arquivo make. -h, --help Imprime esta mensagem e sai. -i, --ignore-errors Ignora os erros dos comandos. -j [N], --jobs[=N] Permite N tarefas de uma vez; tarefas infinitas sem argumentos. -k, --keep-going Continua mesmo que alguns alvos não possam ser processados. -l [N], --load-average[=N], --max-load[=N] Não inicia múltiplas tarefas a menos que a carga seja menor que N. -n, --just-print, --dry-run, --recon Não executa quaisquer comandos; apenas imprime-os. -o ARQUIVO, --old-file=ARQUIVO, --assume-old=ARQUIVO Considera o ARQUIVO como muito antigo e não reprocessá-o. -p, --print-data-base Imprime o banco de dados interno do make. -q, --question Não executa os comandos; O código de saida indica se está atualizado. -r, --no-builtin-rules Desabilita as regras implícitas. -s, --silent, --quiet Não ecoa os comandos. -t, --touch Executa um `touch' nos alvos ao invés de reprocessá-los. -v, --version Imprime o número de versão do make e sai. -w, --print-directory Imprime o diretório atual. Data %s Ignorando o nome VPATH '%s'. uid = %d, gid = %d, modo = 0%o. (embutido): (arquivo core criado) (sem importância) (de '%s', linha %lu) (de '%s', linha %lu): (ignorado) (o nome pode estar truncado) (não há objetivo padrão) (sem expansão ~) (remoto) (caminho de pesquisa) arquivos, impossibilidades impossibilidades em %lu diretórios. até agora.# Um Padrão, arquivo MAKEFILES ou -include/sinclude makefile.# Também faz:# Regra implícita# Linha de Comando do Alvo.# Comandos de dependências em execução (ISTO É UMA FALHA).# Problemas com a atualização.# O Arquivo não existe.# O Arquivo foi atualizado.# O Arquivo não foi atualizado.# O arquivo é um pré-requisito intermediário.# O Arquivo está desatualizado.# Pesquisa por regra implícita concluida.# Pesquisa por regra implícita não concluida.# Derivação padrão implícita/estática: '%s' # Valor inválido no membro 'command_state' !# Última modificação %s # O Período da modificação nunca foi verificado.# Precisa ser atualizado (-q está definido).# Alvo Falso (prerequisito de .PHONY).# Arquivo importante (prerequisito de .PRECIOUS).# Comandos em execução (ISTO É UMA FALHA).# Atualizado com sucesso.# comandos a executar# %s (dispositivo %d, inode [%d,%d,%d]): # %s (dispositivo %d, inode [%d,%d,%d]): não pôde ser aberto. # %s (dispositivo %ld, inode %ld): # %s (dispositivo %ld, inode %ld): não pôde ser aberto. # %s (chave %s, mtime %ull): # %s (chave %s, mtime %d): não pôde ser aberto. # %s: não pôde ser estabelecido. # Sem caminho 'vpath'. # Não é um alvo:# tabela hash de arquivos: ## tabela hash do conjunto de variávies: $SHELL alterado (era '%s' e agora é '%s') %s (linha %d) contexto inválido (!unixy && !batch_mode_shell) %s buf atual: tamanho = %hu B / usado = %hu B / contado = %hu / med = %u B %s outro livre: total = %lu B / max = %lu B / min = %lu B / med = %hu B %s outro usado: total = %lu B / contado = %lu / med = %lu B %s%s: %s%s: %s%s: Entrando em um diretório desconhecido %s: Entrando no diretório '%s' %s: Campo '%s' não memorizado: %s%s: Interrupção/Exceção capturada (código = 0x%lx, endereço = 0x%p) %s: Saindo de um diretório desconhecido %s: Saindo do diretório '%s' %s: Data/Hora fora de faixa; substituindo %s%s: falhou ao carregar%s: a opção é ilegal -- %c %s: a opção é inválida -- %c %s: a opção '%c%s' não permite um argumento %s: a opção '%s' é ambigua %s: a opção '%s' requer um argumento %s: a opção '--%s' não permite um argumento %s: a opção '-W %s' não permite um argumento %s: a opção '-W %s' é ambigua %s: a opção requer um argumento -- %c %s Alvo '%s' não existe%s: a opção é desconhecida '%c%s' %s: a opção é desconhecida '--%s' %s: alvo atualizado '%s'devido a: %s%s: usuário %lu (real %lu), grupo %lu (real %lu) %sCompilado para %s %sCompilado para %s (%s) %sLicença GPLv3+: GNU GPL versão 3 ou posterior %sIsto é um aplicativo livre: você pode alterá-lo e redistribui-lo livremente. %sNÃO Hà GARANTIAS, exceto o que for permitido por lei. %sSem regra para processar o alvo '%s'%s %sSem regra para processar o alvo '%s', necessário por '%s'%s %s[%s: %s] Erro %d%s%s[%u]: Entrando em um diretório desconhecido %s[%u]: Entrando no diretório '%s' %s[%u]: Saindo de um diretório desconhecido %s[%u]: Saindo do diretório '%s' '%s' está atualizado. diretiva 'override' ** O arquivo membro '%s' pode ser falso. Não foi apagado.*** Quebra. ** Apagando arquivo '%s'** Apagando arquivo intermediário '%s'** Esperando que outros processos terminem.*** Aviso: arquivo .LOW_RESOLUTION_TIME '%s' tem uma etiqueta de tempo de alta resolução ** [%s] O arquivo membro '%s' pode ser falso. Não foi apagado.** [%s] Apagando arquivo '%s'As regras implícitas e normais misturadas: síntaxe obsoleta-O[TYPE] (--output-sync[=TYPE]) não está configurado para esta compilação.-warning, pode ser preciso reativar o CTRL-Y no DCL. . Pare. . DEFAULT_GOAL contém mais do que um alvoO elemento .LIBPATTERNS '%s' não é um padrão ; usando o nome VPATH '%s' AbortadoViolação de acesso: operação de leitura no endereço 0x%p Violação de acesso: operação de escrita no endereço 0x%p DespertadorAcrescentado %.*s e limpo Saida redirecionada para %s Evitando recursão em regra implícita. ERRO: num_pattern_rules errada! %u != %uCD EMBUTIDO %s Chamada de sistema inválidaConteúdo do arquivo de lote: @echo off Conteúdo do arquivo de lote:%s %s Canalização interrompidaErro de barramentoTempo de CPU excedidoNão foi possível criar um arquivos temporário Acesso filhoO Filho saiuDependência circular %s <- %s abandonada.Apagando o arquivo de lote temporário: %s Ao apagar o arquivo de lote temporário %s houve uma falha (%d) Apagando o arquivo de lote temporário %s Colisões=%lu/%lu=%.0f%%Considerando o arquivo alvo '%s'. ContinuaçãoNão é possível restaurar stderr Não é possível restaurar stdin Não é possível restaurar stdout Não foi possível voltar ao diretório original.CreatePipe() falhou (e=%ld) Criando arquivo de lote temporário %s Hora atualCustomizações não exportadas: %s DCL: %s Sinal perigosoAviso EMTNome da função vazioNome do símbolo vazio: %sExecutando %s ao invés de Falhou ao carragar o símbolo %s de %s: %sFalha ao abrir a tabela de símbolos globais: %sProblemas ao reprocessar o arquivo '%s'. Falha ao reprocessar o alvo '%s'. O arquivo '%s' não existe. O arquivo '%s' já foi considerado. Tamanho do arquivo excedidoPré-requisitos do alvo '%s' concluido. Atualização do arquivo '%s' concluida. Co-processador aritmético indisponívelExceção de ponto flutuanteRegra implícita encontrada para '%s'. Pré-requisito '%s' encontrado como VPATH '%s' Nome da função muito longo: %sDesistindo do arquivo '%s'. DesconectarPossível E/SAviso IOTInstrução ilegalArquivo '%s' incluido não foi encontrado. Solicitação de informaçãoAcesso inicializadoInterrupçãoNome da função inválido: %sO número máximo de argumentos é inválido (%u) para a função %sO número mínimo de argumentos é inválido (%u) para a função %sCliente Jobserver (fds %d,%d) Cliente Jobserver (semáforo %s) Slots Jobserver limitados a %d) FinalizadoFilho ativo %p (%s) PID %s %s Carga=%lu/%lu=%.0f%%,O objeto carregado %s não foi declarado compatível com a GPLCarregando símbolo %s de %s Procurando uma regra com o arquivo intermediário '%s'. Procurando por uma regra implícita para '%s'. Procurando por uma regra implícita de arquivo-membro para '%s'. Acesso do makeO arquivo '%s' pode estar em loop; não reprocessá-lo. O arquivo '%s' não foi encontrado. Makefile na entrada padrão especificado duas vezes.Processando '%s' devido a opção always-make. Definição de variável para o alvo mau formadaMembro '%s'%s: %ld bytes de %ld (%ld). O alvo '%s' deve ser reprocessado. NãoNenhuma regra implícita encontrada para '%s'. Não é necessário reprocessar o alvo '%s' Nenhum comando para '%s' e nenhum pré-requisito foi alterado. Sem alvoNenhum alvo indicado e nenhum arquivo make encontradoNada a ser feito para '%s'. Obtido o sinalizador para o processo filho %p (%s). Opções: Tarefas paralelas (-j) não são suportadas nesta plataforma.Falha na Energia ElétricaPré-requisito '%s' é mais novo do que o alvo '%s'. Pré-requisito '%s' é mais antigo do que o alvo '%s'. Pré-requisito '%s' está ordenado para o alvo '%s'. Pré-requisitos '%s' do alvo '%s' não existem. Temporizador de perfil expirouAtualizando o arquivo '%s'. Colocando o processo filho %p (%s) PID %s%s na cadeia. SairRe-executando[%u]:Lendo arquivos makefile '%s' Lendo arquivos makefile ... Descarregando processo filho %p PID %s %s Descarregando processo filho %p PID %s %s Tentativa de atualizar o arquivo '%s' falhou. Os comandos para '%s' serão ignorados em favor daqueles para '%s'.Os comandos para o arquivo '%s' foram encontrados por uma regra implícita,O comando tem muitas linhas (%ud)Os comandos de '%s' estão rodando. Os comandos especificados para o arquivo '%s' em %s:%lu,Variável recursiva '%s' faz referência a ela mesma (eventualmente)Rehash=%u,Rejeitando pré-requisitos implícitos '%s'. Rejeitando pré-requisito para regra '%s'. Liberado sinalizador para o processo filho %p (%s). Removendo o processo filho %p PID %s%s da cadeia. Apagando arquivo intermediário... Informe os problemas para . Reiniciando no modo de tarefa única (-j1).Recurso perdidoSIGPHONESIGWINDFalha de segmentaçãoIgnorando UTF-8 BOM no makefile '%s' Ignorando UTF-8 BOM no makefile buffer Ainda está atualizando o arquivo '%s'. ParadoParado (sinal)Parado (entrada tty)Parado (saida tty)Alvo '%s' reprocessado com sucesso. Vínculos simbólicos não são suportados: desabilite -L.O alvo '%s' são dois-pontos duplos e não tem pré-requisitos. O alvo '%s' não foi reprocessado por causa de erros. O alvo '%s' precisa ser reprocessado sob -q. TerminadoA operação 'load' não é suportada nesta plataforma.Pré-requisitos do '%s' estão sendo criados. Aviso Trace/breakpointTentando pré-requisito implícito '%s'. Tentando padrão para regra com '%.*s'. Tentanto pré-requisito para a regra '%s'. Atualizando os objetivos finais... Atualizando os arquivos makefiles ... Condição de E/S urgenteUso: %s [opções] [alvo] ... Acesso do usuárioSinal 1 definido pelo usuárioSinal 2 definido pelo usuárioUsando os comandos padrões para '%s'. Usando os comandos padrões para '%s'. Temporizador virtual expirou** Aviso: O arquivo '%s' está com a hora %s s adiantada Janela alteradacaracterística não suportada: '%s' automáticomas '%s' é considerado o mesmo arquivo que '%s'.não foi possível alocar %lu bytes para a tabela hash: memória cheianão pôde renomer de dois-pontos duplos '%s' para dois-pontos '%s'não pôde renomear de dois-pontos '%s' para dois-pontos duplos '%s'não pôde forçar a carga limite:não pôde forçar os limites de carga neste sistema operacionalfechado: %s: %slinha de comandocriando canalização de tarefascriando semáforos jobserver: (Erro %ld: %s)padrãoduplicando canalização de tarefasCadeia de caracteres vazia não é válida como nome de arquivonome de variável vazioambienteambiente sob -e'%s' estranho Texto estranho depois da diretiva '%s' Texto estranho depois da diretiva 'define' Texto estranho depois da diretiva 'endef'arquivo: operação de arquivo inválida: %sarquivo: faltando o nome do arquivoarquivo: muitos argumentosfind_and_set_shell(), caminho de pesquisa do default_shell = %s find_and_set_shell() definiu o default_shell = %s o primeiro argumento para a função 'word' deve ser maior que 0fopen (arquivo temporário)fwrite (arquivo temporário)alvos agrupados devem fornecer uma instruçãoguile: Avaliando '%s' guile: Expandindo '%s' inicializando a canalização do jobserverO número de argumentos é insuficiente (%d) para a função '%s' erro interno: valor '%s' inválido para --jobserver-autherro interno: falha ao abrir o semáforo jobserver '%s': (Erro %ld: %s)síntaxe inválida na condicionalservidor de job desligadocanalização do jobserverlbr$ini_control() falhou com estado = %do lbr$set_module() falhou ao obter informações do módulo, estado = %dprocesso filho descarregado: pid %s, aguardando pelo pid %s makefilefaltando 'endef', 'define' não terminado faltando 'endif' falta uma regra antes dos comandosfaltando o separadorfaltando separador (você pensou em TAB ao invés de 8 espaços?)faltando o padrão dos alvosAs regras implícitas e normais misturadasAs regras implícitas e de padrão estático misturadasmúltiplos padrões para o alvonãosem manipuladores de arquivos: não é possível duplicar stderr sem manipuladores de arquivos: não é possível duplicar stdin sem manipuladores de arquivos: não é possível duplicar stdout primeiro argumento não numérico para a função 'word'primeiro argumento não numérico para a função 'wordlist' segundo argumento não numérico para a função 'wordlist' use apenas um 'else' por condicional aberto: %s: %sos pré-requisitos não podem ser definidos no comandoprocess_easy() falhou ao executar o processo (e=%ld) tarefas canalizadas pselecttarefas canalizadas lidaslido: %s: %scomandos começam antes do primeiro alvoliberar semáforos do jobserver: (Erro %ld: %s)semáforo ou processo filho espera: (Erro %ld: %s)spawnvpe: o espaço de ambiente pode estar cheiosys$search() falhou com %d O alvo '%s' não coincide com o padrão O alvo '%s' foi informado mais do que um vez na mesma regra. O arquivo alvo '%s' tem entradas : e :: padrão para o alvo não contém '%%' a opção '%s%s' requer um argumento não vazio a opção '-%c' requer um argumento inteiro positivo o touch não está disponível no VMStouch: '%s' não é um arquivo válidotouch: Arquivo '%s' não existetouch: O ar_member_touch retornou um código de erro inválido em '%s'touch: O membro '%s' não existe em '%s'erro na abertura da biblioteca '%s' para localizar o status do membro %dA função '%s' não foi implementada nesta plataforma nível de depuração desconhecido: '%s' tipo output-sync desconhecido '%s'sinal desconhecidodesvinculado (arquivos temporário): Chamada não terminada para a função '%s': faltando '%c' referência a variável não finalizadaaviso: O relógio está errado. Sua compilação pode ficar incompleta.aviso: -j%d forçado no submake: reiniciando o modo jobserver.aviso: -j%d forçado no submake: reiniciando o modo jobserver.aviso: caracter NUL detetado; o resto da linha foi ignoradoaviso: ignorando comandos antigos para o alvo '%s' aviso: jobserver indisponível: usando -j1. Inclua '+' na regra pai. aviso: sobrescrevendo o grupo para o alvo '%s'aviso: sobrescrevendo os comandos para o alvo '%s'aviso: variável indefinida '%.*s' windows32_openpipe(): process_init_fd() falhou windows32_openpipe(): DuplicateHandle(Err) falhou (e=%ld) windows32_openpipe(): DuplicateHandle(In) falhou (e=%ld) Erro de gravação: stdoutgravar jobservergravação: %s: %smake-4.3/po/uk.gmo0000644000175000017500000015531613611136532010773 00000000000000Þ•®Œ Aü$$+$&J$q$$!Š$-¬$Ú$ ì$- %;%'Q%#y%% ´%Â%à%Pù%;J&"†&©& Å&tæ&L['P¨'Dù'9>(Mx(@Æ(o)Gw)o¿)P/*l€*Fí*J4+€+9,C:,f~,_å,;E-:-O¼-J .}W.uÕ.~K/>Ê/M 0CW02›0FÎ0I1;_1 ›1¥1"Â1 å1ò1 22&2 ?2J2e2x2 Š2”2£2¬2%½2ã27ì2$333C3/[3‹3¤3¼3Ö3(ô34&24*Y4&„4+«4×4#ì4#5)45-^5,Œ5¹5Ò5$ç59 6F63e6™61¶6è677/7!F7$h7=7GË7G89[8•8ž8"¥8È8å8;9!?9a9+}9©9¼9Ö9,ð9:%;:,a:-Ž: ¼:&Ý:;#;C;!c;.…;´;Ä;ÍÙ;§</Ç<÷<& = 4=%U={=›=¯=1Ä= ö=>#>#=>La>6®>å>6?A8?>z? ¹?+Ã?*ï?@ 2@<@1D@2v@ ©@µ@Î@"ã@*A1A@A PAqA A ™A£A»A ÛA èA%õAB+;B$gBŒB¦B ÅBÏBéBC+CHC!eC ‡C”C®C ·CÅCÎCâCD$D&_0X_‰_=©_;ç_:#`1^`,`H½`4a*;a"fa/‰a8¹a7òa*b>b NbÈ\b'%dJMdN˜dçd üd; eFFee6¬e[ãe(?fWhfKÀf! g.gK?g'‹gf³gqhsŒh0i51iígi„UjÚjwjkUâky8lb²l¥mh»m$n—Ân±Zoe pQrpÄpSbq`¶q£r»rZ=sl˜s¢t‰¨t¾2uÁñuÓ³vZ‡wÌâw_¯xUyey`öyfWz ¾z.Ìz(ûz${,;{h{{š{·{-Ñ{%ÿ{ %|F|^|w| ‡|<¨|$å|> }I}$e}NŠ}SÙ}8-~f~&ƒ~+ª~7Ö~";1ImR·D €(O€>x€S·€6 @B>ƒ#Â9æ5 ‚ZV‚/±‚Uá‚97ƒSqƒGŃ8 „F„=\„4š„;Ï„b …„n…jó…h^†džІ>׆0‡-G‡lu‡>â‡'!ˆpIˆ.ºˆ,éˆ,‰iC‰;­‰Jé‰i4ŠjžŠ> ‹CH‹#Œ‹1°‹1â‹GŒ_\Œ¼Œ ØŒ½ùŒC·ŽeûŽaB€4Ã=ø+6,bd¯‘$)‘9N‘?ˆ‘‡È‘iP’)º’kä’pP“Á“C”EW”9”6×”•%•b8•`›• ü•.–5L–`‚–Uã–9—.U—B„—0Ç—ø—˜J-˜Cx˜0¼˜,í˜B™K]™ˆ©™I2š|š3–šÊš.ßš-›.<›Gk›$³›EØ›œ86œoœxœ˜œ(©œLÒœ:DZ[ŸLûYHž9¢ž2Üž9ŸjIŸ7´ŸsìŸD` :¥ Là 1-¡K_¡ «¡$¶¡Û¡-ì¡T¢o¢+¢»¢2Ò¢j£hp£6Ù£?¤PP¤¡¤I²¤)ü¤^&¥/…¥Cµ¥8ù¥P2¦ƒ¦j•¦1§j2§T§xò§8k¨9¤¨Þ¨?ã¨R#©wv©î©CªBFªR‰ª ܪuéª_«Dy«F¾«r¬=x¬*¶¬$á¬X­ _­(j­#“­$·­TÜ­P1®j‚®pí®^¯5à¯.°CE°n‰°(ø°V!±Vx±TϱX$²2}²G°²Qø²J³h³q³y³F™³Là³6-´2d´—´¨´2È´3û´H/µnxµmçµMU¶[£¶ÿ¶^·Gq·@¹·5ú·_0¸7¸*ȸ(ó¸7¹;T¹#¹>´¹>ó¹D2ºHwº(ÀºgéºQ»kk»×»_î»~N¼„ͼ„R½Z×½Š2¾ ½¾5˾,¿Y.¿ˆ¿*—¿J¿% À*3À^ÀyÀ:‰À@ÄÀ?Á9EÁ/Á2¯ÁlâÁ=OÂiÂ%÷Â&ÃcDÃ#¨Ã%ÌÃCòÃW6Ä]ŽÄ•ìÄJ‚Å,ÍÅ(úÅN#ÆZrÆ”ÍÆ bÇ;pǬÇ5ÇÇ'ýÇo%È*•È>ÀÈgÿÈ#gÉ‹ÉqÉpÊqsÊPåÊT6ËT‹Ë[àË <Ì^IÌK¨Ì=ôÌ<2Í oÍ|ÍYþÍlXÎUÅÎ9Ï?UÏ[•ÏOñÏ.AÐnpÐtßÐgTÑO¼ÑG Ò”TÒUéÒs?ÓQ³ÓSÔZYÔ´Ô(ÔÔRýÔ;PÕ—ŒÕw$ÖvœÖt×eˆ×Åî×j´ØPÙDpÙ7µÙ@íÙ?.Ú#nÚ-’Ú ÀÚ’’ž­u› ÙfŠœ´hcÓ='6݉#‰€“þEAf—)«$­¡É ~‘à k©µŒ9|jè2e-S„&vs•Ü`N¡H !š¨' ¦1uD§ô{}&.Y« Ïÿê?V¶50 mO¾v…JõK‡سöºxWQ ]tr–9 {C4ƒB±ÂMT†,\Z0š˰q:¨ó œU71ÌrHÛl™<:øò¿3B¢|/æjcP¸¯g5²Š—ç(+Áb-[+@†}~ŽzÊ™bFYä>n›"*]€,˜íÑlðQ =£‹Ldaã`8Ð÷åZÍ”#©@%ÎgnMÃsª_ÕD\S®ùTR„^7‚Ò ‹ _kEKž¬Vh6$¤/dwŸŸXúƒN4R¢^xtëLª®Ö»‘q*Åâ>W[ì§¹‡Ô·˜ÇF;!3PJe•y‚ÆoG¥ ;¥¼£I”ŽpˆéĈ"ß×GÚŒ“zÀo)ÞmUXa8¤Aý¬ip2(ïO–IiȦ…y½.ñîü%áCûw<? # %u 'vpath' search paths. # %u implicit rules, %u (%.1f%%) terminal. # %u pattern-specific variable values # Directories # Files # Finished Make data base on %s # General ('VPATH' variable) search path: # # Implicit Rules # Make data base, printed on %s # No general ('VPATH' variable) search path. # No implicit rules. # No pattern-specific variable values. # Pattern-specific Variable Values # VPATH Search Paths # Variables # files hash-table stats: # %s No strcache buffers %s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu B %s strcache performance: lookups = %lu / hit rate = %lu%% Counted %d args in failed launch This program built for %s This program built for %s (%s) Unhandled exception filter called from program %s ExceptionCode = %lx ExceptionFlags = %lx ExceptionAddress = 0x%p --debug[=FLAGS] Print various types of debugging information. --no-print-directory Turn off -w, even if it was turned on implicitly. --no-silent Echo recipes (disable --silent mode). --trace Print tracing information. --warn-undefined-variables Warn when an undefined variable is referenced. -B, --always-make Unconditionally make all targets. -C DIRECTORY, --directory=DIRECTORY Change to DIRECTORY before doing anything. -E STRING, --eval=STRING Evaluate STRING as a makefile statement. -I DIRECTORY, --include-dir=DIRECTORY Search DIRECTORY for included makefiles. -L, --check-symlink-times Use the latest mtime between symlinks and target. -O[TYPE], --output-sync[=TYPE] Synchronize output of parallel jobs by TYPE. -R, --no-builtin-variables Disable the built-in variable settings. -S, --no-keep-going, --stop Turns off -k. -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE Consider FILE to be infinitely new. -b, -m Ignored for compatibility. -d Print lots of debugging information. -e, --environment-overrides Environment variables override makefiles. -f FILE, --file=FILE, --makefile=FILE Read FILE as a makefile. -h, --help Print this message and exit. -i, --ignore-errors Ignore errors from recipes. -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no arg. -k, --keep-going Keep going when some targets can't be made. -l [N], --load-average[=N], --max-load[=N] Don't start multiple jobs unless load is below N. -n, --just-print, --dry-run, --recon Don't actually run any recipe; just print them. -o FILE, --old-file=FILE, --assume-old=FILE Consider FILE to be very old and don't remake it. -p, --print-data-base Print make's internal database. -q, --question Run no recipe; exit status says if up to date. -r, --no-builtin-rules Disable the built-in implicit rules. -s, --silent, --quiet Don't echo recipes. -t, --touch Touch targets instead of remaking them. -v, --version Print the version number of make and exit. -w, --print-directory Print the current directory. Date %s Ignoring VPATH name '%s'. uid = %d, gid = %d, mode = 0%o. (built-in): (core dumped) (don't care) (from '%s', line %lu) (from '%s', line %lu): (ignored) (name might be truncated) (no default goal) (no ~ expansion) (remote) (search path) files, impossibilities impossibilities in %lu directories. so far.# A default, MAKEFILES, or -include/sinclude makefile.# Also makes:# Builtin rule# Command line target.# Dependencies recipe running (THIS IS A BUG).# Failed to be updated.# File does not exist.# File has been updated.# File has not been updated.# File is an intermediate prerequisite.# File is very old.# Implicit rule search has been done.# Implicit rule search has not been done.# Implicit/static pattern stem: '%s' # Invalid value in 'command_state' member!# Last modified %s # Modification time never checked.# Needs to be updated (-q is set).# Phony target (prerequisite of .PHONY).# Precious file (prerequisite of .PRECIOUS).# Recipe currently running (THIS IS A BUG).# Successfully updated.# recipe to execute# %s (device %d, inode [%d,%d,%d]): # %s (device %d, inode [%d,%d,%d]): could not be opened. # %s (device %ld, inode %ld): # %s (device %ld, inode %ld): could not be opened. # %s (key %s, mtime %I64u): # %s (key %s, mtime %I64u): could not be opened. # %s: could not be stat'd. # No 'vpath' search paths.# Not a target:# hash-table stats: # # variable set hash-table stats: $SHELL changed (was '%s', now '%s') %s (line %d) Bad shell context (!unixy && !batch_mode_shell) %s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B %s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B %s other used: total = %lu B / count = %lu / avg = %lu B %s%s: %s%s: %s%s: Entering an unknown directory %s: Entering directory '%s' %s: Field '%s' not cached: %s%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p) %s: Leaving an unknown directory %s: Leaving directory '%s' %s: Timestamp out of range; substituting %s%s: failed to load%s: illegal option -- %c %s: invalid option -- %c %s: option '%c%s' doesn't allow an argument %s: option '%s' is ambiguous %s: option '%s' requires an argument %s: option '--%s' doesn't allow an argument %s: option '-W %s' doesn't allow an argument %s: option '-W %s' is ambiguous %s: option requires an argument -- %c %s: target '%s' does not exist%s: unrecognized option '%c%s' %s: unrecognized option '--%s' %s: update target '%s' due to: %s%s: user %lu (real %lu), group %lu (real %lu) %sBuilt for %s %sBuilt for %s (%s) %sLicense GPLv3+: GNU GPL version 3 or later %sThis is free software: you are free to change and redistribute it. %sThere is NO WARRANTY, to the extent permitted by law. %sNo rule to make target '%s'%s%sNo rule to make target '%s', needed by '%s'%s%s[%s: %s] Error %d%s%s[%u]: Entering an unknown directory %s[%u]: Entering directory '%s' %s[%u]: Leaving an unknown directory %s[%u]: Leaving directory '%s' '%s' is up to date.'override' directive*** Archive member '%s' may be bogus; not deleted*** Break. *** Deleting file '%s'*** Deleting intermediate file '%s'*** Waiting for unfinished jobs....*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp*** [%s] Archive member '%s' may be bogus; not deleted*** [%s] Deleting file '%s'*** mixed implicit and normal rules: deprecated syntax-O[TYPE] (--output-sync[=TYPE]) is not configured for this build.-warning, you may have to re-enable CTRL-Y handling from DCL. . Stop. .DEFAULT_GOAL contains more than one target.LIBPATTERNS element '%s' is not a pattern; using VPATH name '%s'AbortedAccess violation: read operation at address 0x%p Access violation: write operation at address 0x%p Alarm clockAppend %.*s and cleanup Append output to %s Avoiding implicit rule recursion. BUG: num_pattern_rules is wrong! %u != %uBUILTIN CD %s Bad system callBatch file contents: @echo off Batch file contents:%s %s Broken pipeBus errorCPU time limit exceededCannot create a temporary file Child accessChild exitedCircular %s <- %s dependency dropped.Cleaning up temp batch file %s Cleaning up temp batch file %s failed (%d) Cleaning up temporary batch file %s Collisions=%lu/%lu=%.0f%%Considering target file '%s'. ContinuedCould not restore stderr Could not restore stdin Could not restore stdout Couldn't change back to original directory.CreatePipe() failed (e=%ld) Creating temporary batch file %s Current timeCustoms won't export: %s DCL: %s Danger signalEMT trapEmpty function nameEmpty symbol name for load: %sExecuting %s instead Failed to load symbol %s from %s: %sFailed to open global symbol table: %sFailed to remake makefile '%s'.Failed to remake target file '%s'. File '%s' does not exist. File '%s' was considered already. File size limit exceededFinished prerequisites of target file '%s'. Finished updating file '%s'. Floating point co-processor not availableFloating point exceptionFound an implicit rule for '%s'. Found prerequisite '%s' as VPATH '%s' Function name too long: %sGiving up on target file '%s'. HangupI/O possibleIOT trapIllegal InstructionIncluded makefile '%s' was not found.Information requestInitialized accessInterruptInvalid function name: %sInvalid maximum argument count (%u) for function %sInvalid minimum argument count (%u) for function %sJobserver client (fds %d,%d) Jobserver client (semaphore %s) Jobserver slots limited to %d KilledLive child %p (%s) PID %s %s Load=%lu/%lu=%.0f%%, Loaded object %s is not declared to be GPL compatibleLoading symbol %s from %s Looking for a rule with intermediate file '%s'. Looking for an implicit rule for '%s'. Looking for archive-member implicit rule for '%s'. Make accessMakefile '%s' might loop; not remaking it. Makefile '%s' was not foundMakefile from standard input specified twice.Making '%s' due to always-make flag. Malformed target-specific variable definitionMember '%s'%s: %ld bytes at %ld (%ld). Must remake target '%s'. NoNo implicit rule found for '%s'. No need to remake target '%s'No recipe for '%s' and no prerequisites actually changed. No targetsNo targets specified and no makefile foundNothing to be done for '%s'.Obtained token for child %p (%s). Options: Parallel jobs (-j) are not supported on this platform.Power failurePrerequisite '%s' is newer than target '%s'. Prerequisite '%s' is older than target '%s'. Prerequisite '%s' is order-only for target '%s'. Prerequisite '%s' of target '%s' does not exist. Profiling timer expiredPruning file '%s'. Putting child %p (%s) PID %s%s on the chain. QuitRe-executing[%u]:Reading makefile '%s'Reading makefiles... Reaping losing child %p PID %s %s Reaping winning child %p PID %s %s Recently tried and failed to update file '%s'. Recipe for '%s' will be ignored in favor of the one for '%s'.Recipe for file '%s' was found by implicit rule search,Recipe has too many lines (%ud)Recipe of '%s' is being run. Recipe was specified for file '%s' at %s:%lu,Recursive variable '%s' references itself (eventually)Rehash=%u, Rejecting impossible implicit prerequisite '%s'. Rejecting impossible rule prerequisite '%s'. Released token for child %p (%s). Removing child %p PID %s%s from chain. Removing intermediate files... Report bugs to Resetting to single job (-j1) mode.Resource lostSIGPHONESIGWINDSegmentation faultSkipping UTF-8 BOM in makefile '%s' Skipping UTF-8 BOM in makefile buffer Stem too long: '%s%.*s'. Still updating file '%s'. StoppedStopped (signal)Stopped (tty input)Stopped (tty output)Successfully remade target file '%s'. Symbolic links not supported: disabling -L.Target '%s' is double-colon and has no prerequisites. Target '%s' not remade because of errors.Target file '%s' needs to be remade under -q. TerminatedThe 'load' operation is not supported on this platform.The prerequisites of '%s' are being made. Trace/breakpoint trapTrying implicit prerequisite '%s'. Trying pattern rule with stem '%.*s'. Trying rule prerequisite '%s'. Updating goal targets.... Updating makefiles.... Urgent I/O conditionUsage: %s [options] [target] ... User accessUser defined signal 1User defined signal 2Using default commands for '%s'. Using default recipe for '%s'. Virtual timer expiredWarning: File '%s' has modification time %s s in the futureWindow changedattempt to use unsupported feature: '%s'automaticbut '%s' is now considered the same file as '%s'.can't allocate %lu bytes for hash table: memory exhaustedcan't rename double-colon '%s' to single-colon '%s'can't rename single-colon '%s' to double-colon '%s'cannot enforce load limit: cannot enforce load limits on this operating systemclose: %s: %scommand linecreating jobs pipecreating jobserver semaphore: (Error %ld: %s)defaultduping jobs pipeempty string invalid as file nameempty variable nameenvironmentenvironment under -eextraneous '%s'extraneous text after '%s' directiveextraneous text after 'define' directiveextraneous text after 'endef' directivefile: invalid file operation: %sfile: missing filenamefile: too many argumentsfind_and_set_shell() path search set default_shell = %s find_and_set_shell() setting default_shell = %s first argument to 'word' function must be greater than 0fopen (temporary file)fwrite (temporary file)grouped targets must provide a recipeguile: Evaluating '%s' guile: Expanding '%s' init jobserver pipeinsufficient number of arguments (%d) to function '%s'internal error: invalid --jobserver-auth string '%s'internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)invalid syntax in conditionaljob server shut downjobserver pipelinelbr$ini_control() failed with status = %dlbr$set_module() failed to extract module info, status = %dmake reaped child pid %s, still waiting for pid %s makefilemissing 'endef', unterminated 'define'missing 'endif'missing rule before recipemissing separatormissing separator (did you mean TAB instead of 8 spaces?)missing target patternmixed implicit and normal rulesmixed implicit and static pattern rulesmultiple target patternsnono more file handles: could not duplicate stderr no more file handles: could not duplicate stdin no more file handles: could not duplicate stdout non-numeric first argument to 'word' functionnon-numeric first argument to 'wordlist' functionnon-numeric second argument to 'wordlist' functiononly one 'else' per conditionalopen: %s: %sprerequisites cannot be defined in recipesprocess_easy() failed to launch process (e=%ld) pselect jobs piperead jobs piperead: %s: %srecipe commences before first targetrelease jobserver semaphore: (Error %ld: %s)semaphore or child process wait: (Error %ld: %s)spawnvpe: environment space might be exhaustedsys$search() failed with %d target '%s' doesn't match the target patterntarget '%s' given more than once in the same ruletarget file '%s' has both : and :: entriestarget pattern contains no '%%'the '%s%s' option requires a non-empty string argumentthe '-%c' option requires a positive integer argumenttouch archive member is not available on VMStouch: '%s' is not a valid archivetouch: Archive '%s' does not existtouch: Bad return code from ar_member_touch on '%s'touch: Member '%s' does not exist in '%s'unable to open library '%s' to lookup member status %dunimplemented on this platform: function '%s'unknown debug level specification '%s'unknown output-sync type '%s'unknown signalunlink (temporary file): unterminated call to function '%s': missing '%c'unterminated variable referencewarning: Clock skew detected. Your build may be incomplete.warning: -j%d forced in makefile: resetting jobserver mode.warning: -j%d forced in submake: resetting jobserver mode.warning: NUL character seen; rest of line ignoredwarning: ignoring old recipe for target '%s'warning: jobserver unavailable: using -j1. Add '+' to parent make rule.warning: overriding group membership for target '%s'warning: overriding recipe for target '%s'warning: undefined variable '%.*s'windows32_openpipe(): process_init_fd() failed windows32_openpipe: DuplicateHandle(Err) failed (e=%ld) windows32_openpipe: DuplicateHandle(In) failed (e=%ld) write error: stdoutwrite jobserverwrite: %s: %sProject-Id-Version: make 4.2.93 Report-Msgid-Bugs-To: bug-make@gnu.org PO-Revision-Date: 2020-01-03 12:37+0200 Last-Translator: Yuri Chornoivan Language-Team: Ukrainian Language: uk MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. Plural-Forms: nplurals=1; plural=0; X-Generator: Lokalize 19.11.70 # %u шлÑхи пошуку "vpath". # ÐеÑвних правил: %u, термінальних: %u (%.1f%%). # %u Ñпецифічних Ð´Ð»Ñ Ð·Ñ€Ð°Ð·ÐºÐ° значень змінних # Каталоги # Файли # Друк бази даних Make завершено %s # Загальний шлÑÑ… пошуку (змінна "VPATH"): # # ÐеÑвні правила # База даних Make, надрукована %s # Ðе визначено загальний шлÑÑ… пошуку (змінна "VPATH"). # ÐеÑвних правил нема. # Ðемає Ñпецифічних Ð´Ð»Ñ Ð·Ñ€Ð°Ð·ÐºÐ° значень змінних. # Специфічні Ð´Ð»Ñ Ð·Ñ€Ð°Ð·ÐºÐ° Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð·Ð¼Ñ–Ð½Ð½Ð¸Ñ… # ШлÑхи пошуку VPATH # Змінні # ÑтатиÑтика щодо таблиці хешів файлів: # %s немає буферів strcache Буфери strcache %s: %lu (%lu) / Ñ€Ñдків = %lu / Ñховище = %lu Б / Ñер = %lu Б Ð¨Ð²Ð¸Ð´ÐºÐ¾Ð´Ñ–Ñ strcache %s: циклів пошуку = %lu / відÑоток знайденого = %lu%% Під Ñ‡Ð°Ñ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾Ð³Ð¾ запуÑку кількіÑть аргументів дорівнювала %d Цю програму зібрано Ð´Ð»Ñ %s Цю програму зібрано Ð´Ð»Ñ %s (%s) З програми %s викликано фільтр непридатних до обробки виключень Код Ð²Ð¸ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ = %lx Прапорці Ð²Ð¸ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ = %lx ÐдреÑа Ð²Ð¸ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ = 0x%p --debug[=ПРÐПОРЦІ] ВивеÑти діагноÑтичні Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð²ÐºÐ°Ð·Ð°Ð½Ð¸Ñ… типів. --no-print-directory Вимкнути -w, навіть Ñкщо Ð²Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ Ð±ÑƒÐ»Ð¾ виконано неÑвним чином. --no-silent Виводити ÑпоÑоби Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ (вимкнути режим --silent). --trace ВивеÑти дані щодо траÑуваннÑ. --warn-undefined-variables Попереджати про поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° невизначену змінну. -B, --always-make безумовно оброблÑти вÑÑ– запиÑи мети. -C КÐТÐЛОГ, --directory=КÐТÐЛОГ Перейти до каталогу до Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð±ÑƒÐ´ÑŒ-Ñких дій. -E РЯДОК, --eval=РЯДОК Обробити РЯДОК Ñк інÑтрукцію makefile. -I КÐТÐЛОГ, --include-dir=КÐТÐЛОГ Виконати пошук включених makefile у каталозі. -L, --check-symlink-times ВикориÑтовувати новіший Ñ‡Ð°Ñ Ð·Ð¼Ñ–Ð½Ð¸ з чаÑів зміни поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ñ– мети. -O[ТИП], --output-sync[=ТИП] Ñинхронізувати виведені дані паралельних завдань за ТИПом. -R, --no-builtin-variables Вимкнути вбудовані параметри змінних. -S, --no-keep-going, --stop Вимкнути -k. -W ФÐЙЛ, --what-if=ФÐЙЛ, --new-file=ФÐЙЛ, --assume-new=ФÐЙЛ Вважати ФÐЙЛ завжди новим. -b, -m ІгноруєтьÑÑ, Ð´Ð»Ñ ÑуміÑноÑті. -d ВивеÑти діагноÑтичні повідомленнÑ. -e, --environment-overrides Змінні Ñередовища мають вищий пріоритет за змінні makefile. -f ФÐЙЛ, --file=ФÐЙЛ, --makefile=ФÐЙЛ ВикориÑтати ФÐЙЛ Ñк makefile. -h, --help ВивеÑти це Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ– вийти. -i, --ignore-errors Ігнорувати помилки від ÑпоÑобів збираннÑ. -j [N], --jobs[=N] Виконувати одночаÑно N завдань; Ñкщо не вказано — необмежену кількіÑть. -k, --keep-going Продовжувати роботу, Ñкщо Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ ÑкоїÑÑŒ мети неможливе. -l [N], --load-average[=N], --max-load[=N] Ðе запуÑкати декількох завдань, Ñкщо Ð½Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” N. -n, --just-print, --dry-run, --recon Ðе заÑтоÑовувати ÑпоÑобів збираннÑ, проÑто вивеÑти назви ÑпоÑобів. -o ФÐЙЛ, --old-file=ФÐЙЛ, --assume-old=ФÐЙЛ Вважати ФÐЙЛ дуже Ñтарим Ñ– не виконувати його повторного збираннÑ. -p, --print-data-base ВивеÑти внутрішню базу даних make. -q, --question не заÑтоÑовувати жодних ÑпоÑобів; код Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð¿Ð¾ÐºÐ°Ð·ÑƒÑ”, чи вÑе вже зроблено. -r, --no-builtin-rules Вимкнути вбудовані неÑвні правила. -s, --silent, --quiet Ðе виводити ÑпоÑоби збираннÑ. -t, --touch Змінювати Ñ‡Ð°Ñ Ð´Ð¾Ñтупу до мети заміÑть Ñ—Ñ— повторного збираннÑ. -v, --version ВивеÑти дані щодо верÑÑ–Ñ— make Ñ– вийти. -w, --print-directory Виводити дані щодо поточного каталогу. Дата %s Ігноруємо назву VPATH «%s». uid = %d, gid = %d, режим = 0%o. (вбудоване): (зроблений дамп пам'Ñті) (не зважати) (з "%s", Ñ€Ñдок %lu) (з "%s", Ñ€Ñдок %lu): (ігноруєтьÑÑ) (ім'Ñ Ð¼Ð¾Ð¶Ðµ бути обрізано) (немає типової мети) (не розширювати ~) (віддалений) (шлÑÑ… пошуку) файлів, недоÑÑжних цілей недоÑÑжних цілей у %lu каталогах. на поточний момент.# Типово, MAKEFILES, або -include/sinclude makefile.# Збирає також:# Вбудоване правило# Мета, що викликаєтьÑÑ Ð· командного Ñ€Ñдка.# Ці залежноÑті вже оброблÑютьÑÑ (ЦЕ ПОМИЛКÐ).# Спроба Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð±ÐµÐ·ÑƒÑпішна.# Файл не Ñ–Ñнує.# Файл був оновлений.# Файл не було оновлено.# Файл Ñ” проміжною залежніÑтю.# Файл дуже Ñтарий.# Пошук неÑвних правил виконано.# Пошук неÑвних правил не було виконано.# ОÑнова неÑвного або Ñтатичного шаблону: "%s" # Ðекоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ‡Ð»ÐµÐ½Ð° "command_state"!# ВоÑтаннє оновлено %s # Ð§Ð°Ñ Ð·Ð¼Ñ–Ð½Ð¸ ніколи не перевірÑвÑÑ.# Повинно бути оновлено (вÑтановлений ключ -q).# ПÑевдоціль (залежніÑть .PHONY).# ВартіÑний файл (залежніÑть .PRECIOUS).# ВиконуєтьÑÑ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ° (ЦЕ ПОМИЛКÐ)# УÑпішно оновлено.# ÑпоÑіб, Ñкий Ñлід заÑтоÑувати# %s (приÑтрій %d, івузол [%d,%d,%d]): # %s (приÑтрій %d, івузол [%d,%d,%d]): неможливо відкрити. # %s (приÑтрій %ld, івузол %ld): # %s (приÑтрій %ld, івузол %ld): не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸. # %s (ключ %s, Ñ‡Ð°Ñ Ð¼Ð¾Ð´Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ— %I64u): # %s (ключ %s, Ñ‡Ð°Ñ Ð·Ð¼Ñ–Ð½Ð¸ %I64u): не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸. # %s: неможливо отримати інформацію (stat). # Ðе визначено шлÑÑ… пошуку "vpath".# Ðе Ñ” метою:# ÑтатиÑтика щодо таблиці хешів: # # Ñтан змінних у хеш-таблиці: $SHELL змінено (було «%s», тепер «%s») %s (Ñ€Ñдок %d) Поганий контекÑÑ‚ оболонки (!unixy && !batch_mode_shell) Поточний буфер %s: розмір = %hu Б / викориÑтано = %hu Б / кількіÑть = %hu / Ñер = %u Б Інше вільне %s: загалом = %lu Б / Ð¼Ð°ÐºÑ = %lu Б / мін = %lu Б / Ñер = %hu Б Інше викориÑтане %s: загалом = %lu B / кількіÑть = %lu / Ñер = %lu Б %s%s: %s%s: %s%s: входимо до невідомого каталогу %s: входимо до каталогу «%s» %s: поле «%s» не кешовано: %s%s: ÑталоÑÑ Ð¿ÐµÑ€ÐµÑ€Ð¸Ð²Ð°Ð½Ð½Ñ Ð°Ð±Ð¾ Ð²Ð¸ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ (код = 0x%lx, адреÑа = 0x%p) %s: виходимо з невідомого каталогу %s: Залишаю каталог "%s" %s: чаÑова позначка поза допуÑтимим діапазоном; замінюємо на %s%s: не вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸%s: невірний параметр -- %c %s: невірний параметр -- %c %s: Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ñ–Ð² до параметра «%c%s» не передбачено %s: параметр «%s» не Ñ” однозначним %s: до параметра «%s» Ñлід додати аргумент %s: Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ñ–Ð² до параметра «--%s» не передбачено %s: Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ñ–Ð² до параметра «-W %s» не передбачено %s: параметр «-W %s» не Ñ” однозначним %s: параметру необхідний аргумент -- %c %s: мети «%s» не Ñ–Ñнує%s: невідомий параметр «%c%s» %s: невідомий параметр «--%s» %s: Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¼ÐµÑ‚Ð¸ «%s» з такої причини: %s%s: кориÑтувач %lu (наÑправді %lu), група %lu (наÑправді %lu) %sЗібрано Ð´Ð»Ñ %s %sЗібрано Ð´Ð»Ñ %s (%s) %sУмови Ð»Ñ–Ñ†ÐµÐ½Ð·ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ»Ð°Ð´ÐµÐ½Ð¾ у GPLv3+: GNU GPL верÑÑ–Ñ— 3 або новішій, %sЦе вільне програмне забезпеченнÑ: ви можете вільно змінювати Ñ– поширювати його. %sВам не надаєтьÑÑ Ð–ÐžÐ”ÐИХ ГÐРÐÐТІЙ, окрім гарантій передбачених законодавÑтвом. %sÐема правила Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ†Ñ–Ð»Ñ– "%s"%s%sÐема правила Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ†Ñ–Ð»Ñ– "%s", необхідної Ð´Ð»Ñ "%s"%s%s[%s: %s] Помилка %d%s%s[%u]: входимо до невідомого каталогу %s[%u]: входимо до каталогу «%s» %s[%u]: залишаємо невідомий каталог %s[%u]: Залишаю каталог "%s" "%s" не вимагає оновленнÑ.Директива «override»*** Елемент архіву, «%s», можливо Ñ” фіктивним; не вилучено*** Зупинка. *** Вилучаємо файл "%s"*** Вилучаємо проміжний файл «%s»*** ÐžÑ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð·Ð°Ð²Ð´Ð°Ð½ÑŒ...*** ПопередженнÑ: файл .LOW_RESOLUTION_TIME «%s» має чаÑову позначку виÑокої точноÑті*** [%s] Елемент архіву, «%s», можливо Ñ” фіктивним; не вилучено*** [%s] Вилучаємо файл "%s"*** змішані неÑвні Ñ– звичайні правила: заÑтарілий ÑинтакÑиÑ-O[ТИП] (--output-sync[=ТИП]) Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ ÑеанÑу Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð½Ðµ налаштовано.-попередженнÑ, ймовірно, вам варто повторно увімкнути обробку CTRL-Y з DCL. . Зупинка. .DEFAULT_GOAL міÑтить декілька запиÑів метиЕлемент .LIBPATTERNS «%s» не Ñ” зразком; викориÑтовуємо назву VPATH «%s»<вбудований>ÐŸÑ€Ð¸Ð¿Ð¸Ð½ÐµÐ½Ð¾ÐŸÐ¾Ñ€ÑƒÑˆÐµÐ½Ð½Ñ Ð¿Ñ€Ð°Ð²Ð¸Ð» доÑтупу: Ð´Ñ–Ñ Ð· Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð·Ð° адреÑою 0x%p ÐŸÐ¾Ñ€ÑƒÑˆÐµÐ½Ð½Ñ Ð¿Ñ€Ð°Ð²Ð¸Ð» доÑтупу: Ð´Ñ–Ñ Ð· запиÑу за адреÑою 0x%p Сигнал по таймеруДопиÑати %.*s Ñ– Ñпорожнити ДопиÑати виведенні дані до %s Ð—Ð°Ð¿Ð¾Ð±Ñ–Ð³Ð°Ð½Ð½Ñ Ñ€ÐµÐºÑƒÑ€Ñивного виклику неÑвного правила. ПОМИЛКÐ: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ num_pattern_rules Ñ” помилковим! %u != %uВБУДОВÐÐИЙ CD %s Поганий ÑиÑтемний викликВміÑÑ‚ файла пакетної обробки: @echo off ВміÑÑ‚ пакетного файла:%s %s Обрив каналуПомилка на шиніПеревищене Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð½Ð° процеÑорний чаÑÐе вдалоÑÑ Ñтворити тимчаÑовий файл ДоÑтуп дочірнього процеÑуÐащадок завершив роботуЦиклічна залежніÑть %s <- %s пропущена.Ð—Ð½Ð¸Ñ‰ÐµÐ½Ð½Ñ Ñ‚Ð¸Ð¼Ñ‡Ð°Ñового командного файла %s Спроба Ð²Ð¸Ñ‚Ð¸ÐºÐ°Ð½Ð½Ñ Ñ‚Ð¸Ð¼Ñ‡Ð°Ñового файла пакетної обробки %s зазнала невдачі (%d) Спорожнюємо тимчаÑовий пакетний файл %s Збіги=%lu/%lu=%.0f%%Обробка цільового файла "%s". ПродовженоÐе вдалоÑÑ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ stderr Ðе вдалоÑÑ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ stdin Ðе вдалоÑÑ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ stdout Ðеможливо перейти у первіÑний каталог.Помилка CreatePipe() (e=%ld) Створюємо тимчаÑовий пакетний файл %s Поточний чаÑÐеекÑпортовні налаштуваннÑ: %s DCL: %s Сигнал небезпекиПаÑтка EMTÐŸÐ¾Ñ€Ð¾Ð¶Ð½Ñ Ð½Ð°Ð·Ð²Ð° Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ—ÐŸÐ¾Ñ€Ð¾Ð¶Ð½Ñ Ð½Ð°Ð·Ð²Ð° Ñимволу Ð´Ð»Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ: %sЗаміÑть заданого виконуєтьÑÑ %s Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ Ñимвол %s з %s: %sÐе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ таблицю загальних Ñимволів: %sСпроба перезібрати make-файл "%s" безуÑпішна.Спроба перезібрати цільовий файл "%s" безуÑпішна. Ðе виÑвлено файла з назвою «%s». Файл "%s" вже було оброблено. Перевищений межа розміру файлаЗавершено обробку попередніх залежноÑтей файла мети «%s». ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° "%s" завершено. Допоміжний процеÑор Ð´Ð»Ñ Ð¾Ð±Ñ‡Ð¸Ñлень з рухомою комою недоÑтупнийПомилка операції з крапкою, що плаваєЗнайдено неÑвне правило Ð´Ð»Ñ "%s". ВиÑвлено залежніÑть «%s» у форматі VPATH «%s» Ðазва функції Ñ” задовгою: %sÐварійний зупинка на цільовому файлі "%s". ОбривМожливий ввід/вивідПаÑтка IOTÐеприпуÑтима інÑтрукціÑMake-файл "%s", Ñкий включаєтьÑÑ, не було знайдено.Запит інформаціїІніціалізований доÑтупПерериваннÑÐекоректна назва функції: %sÐекоректна макÑимальна кількіÑть аргументів (%u) функції %sÐекоректна мінімальна кількіÑть аргументів (%u) функції %sКлієнт Ñервера завдань (fd %d,%d) Клієнт Ñервера завдань (Ñемафор %s) Слоти Ñервера завдань обмежено значеннÑм %d ЗнищеннÑÐезавершений дочірній Ð¿Ñ€Ð¾Ñ†ÐµÑ %p (%s) PID %s %s ЗавантаженнÑ=%lu/%lu=%.0f%%, Завантажений об’єкт %s не оголошено Ñк ÑуміÑний з GPLЗавантажуємо Ñимвол %s з %s Пошук правила з проміжним файлом "%s". Пошук неÑвного правила Ð´Ð»Ñ "%s". Пошук неÑвного правила Ð´Ð»Ñ Ñ‡Ð»ÐµÐ½Ð° архіву "%s". ДоÑтуп makeMake-файл "%s", можливо, зациклений, він не перезбиратиметьÑÑ. Make-файл "%s" не було знайденоMakefile зі Ñтандартного джерела вхідних даних вказано двічі.Збираємо «%s» через вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð° always-make. Помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñпецифічного Ð´Ð»Ñ Ð¼ÐµÑ‚Ð¸ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð·Ð¼Ñ–Ð½Ð½Ð¾Ñ—Ð•Ð»ÐµÐ¼ÐµÐ½Ñ‚ «%s»%s: %ld байтів з %ld (%ld). Ðеобхідно перезібрати ціль "%s". ÐÑ–Ðе знайдено неÑвних правил Ð´Ð»Ñ "%s". Потреби у повторному збиранні мети «%s» немаєÐемає ÑпоÑобу Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Â«%s», вÑÑ– попередні залежноÑті не змінено. Ðема цілейÐе задані цілі Ñ– не знайдений make-файлЦіль "%s" не вимагає Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´.Отримано Ñимвол Ð´Ð»Ñ Ð´Ð¾Ñ‡Ñ–Ñ€Ð½ÑŒÐ¾Ð³Ð¾ процеÑу %p (%s). Ключі: Ðа цій платформі паралельної обробки завдань (-j) не передбачено.Збій живленнÑЗалежніÑть «%s» Ñ” новішою за мету «%s». ЗалежніÑть «%s» Ñ” Ñтарішою за мету «%s». ЗалежніÑть «%s» визначено Ð´Ð»Ñ Ð¼ÐµÑ‚Ð¸ «%s» лише порÑдком збираннÑ. ЗалежноÑті «%s» мети «%s» не Ñ–Ñнує. Ð§Ð°Ñ Ð¿Ñ€Ð¾Ñ„Ñ–Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð¼Ð¸Ð½ÑƒÐ²ÐžÐ±Ñ€Ñ–Ð·Ð°Ñ”Ð¼Ð¾ файл «%s». Додаємо дочірній Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð· PID %p (%s) %s%s до ланцюжка. ВихідПовторне виконаннÑ[%u]:Ð§Ð¸Ñ‚Ð°Ð½Ð½Ñ make-файла "%s"Ð§Ð¸Ñ‚Ð°Ð½Ð½Ñ make-файлів... Підбираємо невдалий дочірній Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð· PID %p %s %s Підбираємо вдалий дочірній Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð· PID %p %s %s ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ Ñпроба оновити файл "%s" завершилаÑÑ Ð±ÐµÐ·ÑƒÑпішно. СпоÑіб Ð´Ð»Ñ Â«%s» буде проігноровано на кориÑть ÑпоÑобу Ð´Ð»Ñ Â«%s».СпоÑіб Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð° «%s» було знайдено за допомогою пошуку неÑвних правил,У рецепті забагато Ñ€Ñдків (%ud)ЗаÑтоÑовуємо ÑпоÑіб «%s». СпоÑіб Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð° «%s» було задано %s:%lu,РекурÑивна змінна "%s" поÑилаєтьÑÑ Ñама на Ñебе (у результаті)Повторне хешуваннÑ=%u, Ð’Ñ–Ð´ÐºÐ¸Ð´Ð°Ð½Ð½Ñ Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾Ñ— неÑвної залежноÑті «%s». Ð’Ñ–Ð´ÐºÐ¸Ð´Ð°Ð½Ð½Ñ Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾Ñ— залежноÑті правила «%s». Звільнено Ñимвол Ð´Ð»Ñ Ð´Ð¾Ñ‡Ñ–Ñ€Ð½ÑŒÐ¾Ð³Ð¾ процеÑу %p (%s). Вилучаємо PID дочірнього процеÑу %p %s%s з ланцюжка. Вилучаємо проміжні файли... Повідомлюйте про помилки до ПовертаємоÑÑ Ð´Ð¾ режиму єдиного Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ (-j1).РеÑÑƒÑ€Ñ Ð²Ñ‚Ñ€Ð°Ñ‡ÐµÐ½Ð¾SIGPHONESIGWINDЗбій ÑегментаціїПропуÑкаємо мітку UTF-8 у файлі makefile «%s» ПропуÑкаємо мітку UTF-8 у буфері файла makefile Занадто довгий шаблон: «%s%.*s». Ð’Ñе ще оновлюєтьÑÑ Ñ„Ð°Ð¹Ð» "%s". ЗупиненоЗупинено (Ñигнал)Зупинено (ввід з термінала) Зупинено (вивід на термінал)Цільовий файл "%s" уÑпішно перезібраний. Підтримки Ñимволічних поÑилань не передбачено: вимикаємо -L.Ціль "%s" оголошена з двома двокрапками Ñ– не має залежноÑтей. Ціль "%s" не була перезібрана через помилки.Цільовий файл "%s" вимагає Ð¿ÐµÑ€ÐµÐ·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð· ключем -q. ЗавершеноÐа цій платформі Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð´Ñ–Ñ— «load» не передбачено.Цілі, від Ñких залежить "%s", збираютьÑÑ. ПаÑтка траÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‡Ð¸ точки зупинкиПробую неÑвні залежноÑті "%s". Спроба заÑтоÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð°Ð²Ð¸Ð»Ð° зі зразком, оÑнова "%.*s". Пробую залежніÑть правило "%s". ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ†Ñ–Ð»ÐµÐ¹ мети... ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ make-файлів... Умова екÑтреного вводу/виводуВикориÑтаннÑ: %s [КЛЮЧІ]... [ЦІЛЬ]... ДоÑтуп кориÑтувачаОбумовлений кориÑтувачем Ñигнал 1Обумовлений кориÑтувачем Ñигнал 2ВикориÑÑ‚Ð°Ð½Ð½Ñ Ñ‚Ð¸Ð¿Ð¾Ð²Ð¸Ñ… команд Ð´Ð»Ñ Â«%s». ВикориÑтовуємо типовий ÑпоÑіб Ð´Ð»Ñ Â«%s». Віртуальний Ñ‡Ð°Ñ Ð¼Ð¸Ð½ÑƒÐ²Ð£Ð²Ð°Ð³Ð°: Ñ‡Ð°Ñ Ð·Ð¼Ñ–Ð½Ð¸ файла «%s» перебуває на %s Ñ Ñƒ майбутньомуВікно зміненоÑпроба вжити можливіÑть, підтримки Ñкої не передбачено: "%s"автоматичнаале "%s" Ñ– "%s" тепер вважаютьÑÑ Ð¾Ð´Ð½Ð¸Ð¼ Ñ– тим же ж файлом. не вдалоÑÑ Ñ€Ð¾Ð·Ð¼Ñ–Ñтити %lu байтів Ð´Ð»Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– хешів: вичерпано пам’Ñтьнеможливо перейменувати "%s" з двома двокрапками у "%s" з однією двокрапкоюнеможливо перейменувати "%s" з однією двокрапкою у "%s" з двома двокрапкаминеможливо вÑтановити Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð½Ð° завантаженнÑ: Ñ†Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ð¹Ð½Ð° ÑиÑтема не дозволÑÑ” вÑтановлювати Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð½Ð° завантаженнÑclose: %s: %sвизначена у командному Ñ€ÑдкуÑтворюємо канал завданьÑтворюємо Ñемафор Ñервера завдань: (помилка %ld: %s)типовийдублюємо канал завданьпорожній Ñ€Ñдок не може бути назвою файлапорожнє ім'Ñ Ð·Ð¼Ñ–Ð½Ð½Ð¾Ñ—Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð° у Ñередовищізаданий ключ -eзайва "%s"зайвий текÑÑ‚ піÑÐ»Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð¸ "%s"зайвий текÑÑ‚ піÑÐ»Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð¸ «define»зайвий текÑÑ‚ піÑÐ»Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð¸ «endef»file: некоректна Ð´Ñ–Ñ Ð½Ð°Ð´ файлом: %sfile: не вказано назви файлаfile: надто багато аргументівПошуком шлÑхів find_and_set_shell() вÑтановлено Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ default_shell = %s find_and_set_shell() вÑтановлює default_shell = %s першим аргументом функції «word» має бути чиÑло, більше за 0fopen (тимчаÑовий файл)fwrite (тимчаÑовий файл)Ð´Ð»Ñ Ð·Ð³Ñ€ÑƒÐ¿Ð¾Ð²Ð°Ð½Ð¸Ñ… цілей має бути надано ÑпоÑіб збираннÑguile: обчиÑлюємо «%s» guile: розгортаємо «%s» ініціалізуємо канал Ñервера завданьнедоÑÑ‚Ð°Ñ‚Ð½Ñ ÐºÑ–Ð»ÑŒÐºÑ–Ñть аргументів (%d) функції «%sÂ»Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: некоректний Ñ€Ñдок --jobserver-auth, «%sÂ»Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ Ñемафор Ñервера завдань «%s»: (помилка %ld: %s)невірний ÑинтакÑÐ¸Ñ Ñƒ умовному вираженніÑервер завдань вимкненоканал Ñервера завданьПомилка lbr$ini_control() з повідомленнÑм Ñтану = %dlbr$set_module() не вдалоÑÑ Ð²Ð¸Ð´Ð¾Ð±ÑƒÑ‚Ð¸ дані модулÑ, Ñтан = %dmake підібрано дочірній Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð· pid %s, Ñкий вÑе ще чекає на Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑу з pid %s файл makeпропущена "endif", незавершена "define"пропущена "endif"пропущено правило до ÑпоÑобупропущено розділювачпропущено роздільник (ви хотіли ввеÑти TAB заміÑть 8 пробілів?)пропущений шаблон цілізмішані неÑвні Ñ– звичайні правилазмішані неÑвні правила Ñ– правила зі Ñтатичними зразкамине один шаблон цілініне виÑтачає файлових деÑкрипторів: не вдалоÑÑ Ð·Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ñ‚Ð¸ stderr не виÑтачає файлових деÑкрипторів: не вдалоÑÑ Ð·Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ñ‚Ð¸ stdin не виÑтачає файлових деÑкрипторів: не вдалоÑÑ Ð·Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ñ‚Ð¸ stdout не чиÑловий перший аргумент Ð´Ð»Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— "word"не чиÑловий перший аргумент Ð´Ð»Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— "wordlist"не чиÑловий другий аргумент Ð´Ð»Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— "wordlist"в умовному виразі можлива лише одна директива `else'open: %s: %sу ÑпоÑобах Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð½Ðµ можна вказувати залежноÑтейprocess_easy() не вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити Ð¿Ñ€Ð¾Ñ†ÐµÑ (e=%ld) Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ pselect Ð´Ð»Ñ ÐºÐ°Ð½Ð°Ð»Ñƒ Ð·Ð°Ð²Ð´Ð°Ð½ÑŒÑ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñів з потоку завданьread: %s: %sÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÑпоÑобу Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð¿Ð¾Ñ‡Ð¸Ð½Ð°Ñ”Ñ‚ÑŒÑÑ Ð´Ð¾ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÑˆÐ¾Ñ— метиÑпуÑкаємо Ñемафор Ñервера завдань: (Помилка %ld: %s)Ð¾Ñ‡Ñ–ÐºÐºÑƒÐ²Ð°Ð½Ð½Ñ Ñемафора або дочірнього процеÑу: (помилка %ld: %s)spawnvpe: ймовірно, завершилоÑÑ Ð¼Ñ–Ñце у Ñередовищіsys$search() повернуто код помилки %d ціль "%s" не відповідає зразку цілейціль "%s" зазначено декілька разів у одному правиліцільовий файл "%s" має Ð²Ñ…Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ Ñ– з ":", Ñ– з "::" шаблон цілі не міÑтить "%%"разом з «%s%s» мало бути вказано непорожній Ñ€Ñдковий аргументключ "-%c" повинен викориÑтовуватиÑÑ Ð· цілим додатним Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð¾Ð¼Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ‡Ð°Ñу зміни члена архіву неможливо у ÑиÑтемі VMSÐ¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ‡Ð°Ñу зміни: некоректний архів: "%s"Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ‡Ð°Ñу зміни: Ðрхів "%s" не Ñ–ÑÐ½ÑƒÑ”Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ‡Ð°Ñу зміни: Ð¤ÑƒÐ½ÐºÑ†Ñ–Ñ ar_member_touch повернула помилковий код відповіді Ð´Ð»Ñ "%s"Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ‡Ð°Ñу зміни: Член "%s" не міÑтитьÑÑ Ñƒ "%s"не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ бібліотеку «%s» Ð´Ð»Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ Ñтану елемента %dне реалізовано на цій платформі: Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ Â«%s»невідома ÑÐ¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ Ñ€Ñ–Ð²Ð½Ñ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñтики, «%s»невідомий тип Ñинхронізації виведених даних, «%s»невідомий Ñигналunlink (тимчаÑовий файл): незавершений виклик функції "%s"; пропущено "%c"незавершена поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° зміннупопередженнÑ: виÑвлено Ð²Ñ–Ð´Ñ…Ð¸Ð»ÐµÐ½Ð½Ñ Ð¿Ð¾ÐºÐ°Ð·Ñ–Ð² годинника. Ð—Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð¼Ð¾Ð¶Ðµ бути неповним.попередженнÑ: у makefile вказано -j%d: вимикаємо режим Ñервера завдань.попередженнÑ: у submake вказано -j%d: вимикаємо режим Ñервера завдань.попередженнÑ: зуÑтрінутий Ñимвол NUL; ігноруєтьÑÑ Ð´Ð¾ ÐºÑ–Ð½Ñ†Ñ Ñ€ÑдкипопередженнÑ: ігноруємо заÑтарілий ÑпоÑіб Ð´Ð»Ñ Ð¼ÐµÑ‚Ð¸ «%s»попередженнÑ: Ñервер завдань недоÑтупний: викориÑтовуємо -j1. Додайте «+» до батьківÑького правила збираннÑ.попередженнÑ: перевизначаємо учаÑть у групах Ð´Ð»Ñ Ð¼ÐµÑ‚Ð¸ «%s»попередженнÑ: замінюємо ÑпоÑіб Ð´Ð»Ñ Ð¼ÐµÑ‚Ð¸ «%s»попередженнÑ: невизначена змінна "%.*s"windows32_openpipe(): помилка process_init_fd() windows32_openpipe: помилка DuplicateHandle(Err) (e=%ld) windows32_openpipe: помилка DuplicateHandle(In) (e=%ld) помилка запиÑу: stdoutÐ·Ð°Ð¿Ð¸Ñ Ð´Ð¾ Ñервера завданьwrite: %s: %smake-4.3/po/es.po0000644000175000017500000024274113611136530010614 00000000000000# Mensajes en español para GNU make. # Copyright (C) 1996, 2001, 2011, 2013, 2014, 2016, 2019, 2020 Free Software Foundation, Inc. # This file is distributed under the same license as the make package. # Max de Mendizábal , 1996, 2011. # Antonio Ceballos , 2013, 2014, 2016, 2019, 2020 # msgid "" msgstr "" "Project-Id-Version: GNU make 4.2.93\n" "Report-Msgid-Bugs-To: bug-make@gnu.org\n" "POT-Creation-Date: 2020-01-19 15:34-0500\n" "PO-Revision-Date: 2020-01-03 15:38+0100\n" "Last-Translator: Antonio Ceballos \n" "Language-Team: Spanish \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" #: src/ar.c:46 #, c-format msgid "attempt to use unsupported feature: '%s'" msgstr "Se intentó utilizar una característica no implementada: '%s'" # Sugerencia: touch -> `touch'. sv # Ok, aceptada. A falta de cursivas... mm # No veo porqué no se ha de usar 'tocar' en vez de touch em+ # El mensaje además hace referencia a un touch de un objeto dentro # de una librería, y de eso no se dice nada en el mensaje. Creo que # hay que tener cuidado con estas cosas. # El programa para tocar un miembro de un archivo ... , y ahi estamos # ya en problemas con el dichoso archivo/fichero. # A ver que se os ocurre em+ # Enrique: touch es un programa del sistema operativo y sirve para # cambiar la fecha de un programa o archivo. Es decir lo "toca" y # modifica sus atributos. Por eso preferí no traducirlo. #: src/ar.c:123 #, c-format msgid "touch archive member is not available on VMS" msgstr "El programa para hacer un 'touch' no está disponible en VMS" #: src/ar.c:147 #, c-format msgid "touch: Archive '%s' does not exist" msgstr "touch: El archivo '%s' no existe" #: src/ar.c:150 #, c-format msgid "touch: '%s' is not a valid archive" msgstr "touch: '%s' no es un archivo válido" #: src/ar.c:157 #, c-format msgid "touch: Member '%s' does not exist in '%s'" msgstr "touch: El miembro '%s' no existe en '%s'" #: src/ar.c:164 #, c-format 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'" #: src/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" #: src/arscan.c:236 #, c-format msgid "lbr$ini_control() failed with status = %d" msgstr "fallo en lbr$ini_control() con estado = %d" #: src/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 el estado %d del elemento" #: src/arscan.c:944 #, c-format msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n" msgstr "Miembro '%s'%s: %ld bytes en %ld (%ld).\n" #: src/arscan.c:945 msgid " (name might be truncated)" msgstr " (el nombre puede estar truncado)" #: src/arscan.c:947 #, c-format msgid " Date %s" msgstr " Fecha %s" #: src/arscan.c:948 #, c-format msgid " uid = %d, gid = %d, mode = 0%o.\n" msgstr " uid = %d, gid = %d, modo = 0%o.\n" #: src/commands.c:403 #, c-format msgid "Recipe has too many lines (%ud)" msgstr "Las instrucciones tienen demasiadas líneas (%ud)" #: src/commands.c:504 msgid "*** Break.\n" msgstr "*** Interrumpir.\n" #: src/commands.c:628 #, 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" #: src/commands.c:632 #, c-format msgid "*** Archive member '%s' may be bogus; not deleted" msgstr "" "*** El miembro del archivo '%s' podría estar incorrecto; aunque no se elimina" # Propongo un cambio en el tiempo verbal: Se borra el archivo temporal. sv # Ok. mm #: src/commands.c:646 #, 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 #: src/commands.c:648 #, c-format msgid "*** Deleting file '%s'" msgstr "*** Se borra el archivo '%s'" #: src/commands.c:684 msgid "# recipe to execute" msgstr "# las instrucciones para ejecutar" #: src/commands.c:687 msgid " (built-in):" msgstr " (integrado):" #: src/commands.c:689 #, c-format msgid " (from '%s', line %lu):\n" msgstr " (de '%s', linea %lu):\n" #: src/dir.c:1073 msgid "" "\n" "# Directories\n" msgstr "" "\n" "# Directorios\n" #: src/dir.c:1085 #, c-format msgid "# %s: could not be stat'd.\n" 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 #: src/dir.c:1089 msgid "# %s (key %s, mtime %I64u): could not be opened.\n" msgstr "# %s (llave %s, mtime %I64u): 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 #: src/dir.c:1094 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n" msgstr "" "# %s (dispositivo %d, nodo-i [%d,%d,%d]): posiblemente no se pueda abrir.\n" # ¿No sobraría el "posiblemente"? # Propongo dejarlo en " no se pudo abrir ". sv # Ok. Es consistente con otras traducciones. mm #: src/dir.c:1099 #, 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" #: src/dir.c:1126 msgid "# %s (key %s, mtime %I64u): " msgstr "# %s (llave %s, mtime %I64u): " #: src/dir.c:1131 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): " msgstr "# %s (dispositivo %d, nodo-i [%d,%d,%d]): " #: src/dir.c:1136 #, c-format msgid "# %s (device %ld, inode %ld): " msgstr "# %s (dispositivo %ld, nodo-i %ld): " #: src/dir.c:1142 src/dir.c:1163 msgid "No" msgstr "No" #: src/dir.c:1145 src/dir.c:1166 msgid " files, " msgstr " archivos, " #: src/dir.c:1147 src/dir.c:1168 msgid "no" msgstr "no" #: src/dir.c:1150 msgid " impossibilities" msgstr " imposibilidades" # ¿"So far" no era "hasta ahora"? (no me hagas mucho caso) sv # Si tu traducción es mejor. Aceptada. mm #: src/dir.c:1154 msgid " so far." msgstr " hasta ahora." #: src/dir.c:1171 #, c-format msgid " impossibilities in %lu directories.\n" msgstr " imposibilidades en %lu directorios.\n" # Creo que eventually sería "finalmente" o algo así. sv # Si, es finalmente no a veces. Ok. mm # referencia me parece que no lleva tilde. sv # No, no lleva acento. Me emocioné con elos. mm # Creeis de veras que tiene sentido 'finalmente'em+ # yo pondría ser termina autoreferenciando, por # ejemplo em+ # Mejor lo eliminamos. Es de alguna forma reiterativo e innecesario. # Lo de `al final' puede ser más confuso. mm #: src/expand.c:125 #, c-format msgid "Recursive variable '%s' references itself (eventually)" 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. #: src/expand.c:271 #, c-format msgid "unterminated variable reference" msgstr "la referencia a la variable está sin terminar" #: src/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 #: src/file.c:283 #, c-format msgid "Recipe for file '%s' was found by implicit rule search," msgstr "" "Las instrucciones para el archivo '%s' se encontraron por búsqueda en reglas " "implícitas," # "now" es "ahora". ¿te lo has comido consciente o inconscientemente? sv # inconscientemente. mm #: src/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'." # Lo repetiré una y mil veces... :-) # "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 #: src/file.c:290 #, c-format msgid "Recipe for '%s' will be ignored in favor of the one for '%s'." msgstr "" "Las instrucciones para '%s' no serán tenidas en cuenta en favor de las que " "están en '%s'." # 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 #: src/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 #: src/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 #: src/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 #: src/file.c:412 #, c-format msgid "Removing intermediate files...\n" msgstr "*** Se borran los archivos intermedios...\n" #: src/file.c:872 msgid "Current time" msgstr "Hora actual" #: src/file.c:876 #, c-format msgid "%s: Timestamp out of range; substituting %s" msgstr "%s: Fecha fuera de intervalo; sustituyéndola %s" #: src/file.c:1016 msgid "# Not a target:" msgstr "# No es un objetivo:" # Pondría: es una dependencia de em+ # Si, tienes razón. mm #: src/file.c:1021 msgid "# Precious file (prerequisite of .PRECIOUS)." msgstr "# Archivo valioso (es una dependencia de .PRECIOUS)." # Lo mismo. Y traducir por falso es poco menos que poco exacto. # Los phony target de make son aquellos que se ejecutan siempre # sin tener en cuenta si existe un archivo con el nombre del objetivo # y de si es actual. Propondría incondicional en vez de falso, ya que # explica exactamente qué es un phony target em+ # 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 #: src/file.c:1023 msgid "# Phony target (prerequisite of .PHONY)." msgstr "# objetivo falso (dependencia de .PHONY)." # FUZZY # Pondria línea de comandos # Y creo que no sé exactamente a que se refiere, No creo que haya visto # este mensaje nunca en make lo marco con FUZZY em+ # 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 #: src/file.c:1025 msgid "# Command line target." msgstr "# Objetivo en línea de instrucciones." # Habría que entender esto # Creo que esto es lo que significa. El fuente no es demasiado claro. mm # Se refiere a que el fichero makefile es uno que encuentra por # defecto ( en este orden GNUmakefile, Makefile y makefile ) o uno # que está definido en la variable de entorno MAKEFILE em+ # 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 #: src/file.c:1027 msgid "# A default, MAKEFILES, or -include/sinclude makefile." msgstr "# Por omisión, MAKEFILES, o -include/sinclude makefile." #: src/file.c:1029 msgid "# Builtin rule" msgstr "# Regla incorporada" # Propongo efectuada en lugar de terminada. sv # 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 #: src/file.c:1031 msgid "# Implicit rule search has been done." msgstr "# La búsqueda de reglas implícitas ha sido efectuada." # Propongo efectuada en lugar de terminada. sv # 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 #: src/file.c:1032 msgid "# Implicit rule search has not been done." msgstr "# La búsqueda de reglas implícitas ha sido efectuada." #: src/file.c:1034 #, c-format msgid "# Implicit/static pattern stem: '%s'\n" msgstr "# Tema del patrón implícita/estática: '%s'\n" #: src/file.c:1036 msgid "# File is an intermediate prerequisite." msgstr "# El archivo es una dependencia intermedia." # Sugerencia: "crea". sv # Ok. Aunque, viendolo bien, que tal "hace"? mm. #: src/file.c:1040 msgid "# Also makes:" msgstr "# También hace:" # ¿y "comprobó"? sv # Ok. Mejora. mm # No pondría nunca, sino simplemente 'no se comprobó 'em+ # Si, es lo mismo pero es más español. mm #: src/file.c:1046 msgid "# Modification time never checked." msgstr "# La fecha de modificación no se comprobó." #: src/file.c:1048 msgid "# File does not exist." msgstr "# El archivo no existe." #: src/file.c:1050 msgid "# File is very old." msgstr "# El archivo es muy viejo." #: src/file.c:1055 #, c-format msgid "# Last modified %s\n" msgstr "# Última modificación %s\n" #: src/file.c:1058 msgid "# File has been updated." msgstr "# El archivo ha sido actualizado." #: src/file.c:1058 msgid "# File has not been updated." msgstr "# El archivo ha sido actualizado." #: src/file.c:1062 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 #: src/file.c:1065 msgid "# Dependencies recipe running (THIS IS A BUG)." msgstr "" "# Las instrucciones de las dependencias continúan en ejecución (ESTO ES UN " "BUG)." #: src/file.c:1074 msgid "# Successfully updated." msgstr "# Actualizado con éxito." #: src/file.c:1078 msgid "# Needs to be updated (-q is set)." msgstr "# Necesita ser actualizado (la opción -q está activa)." #: src/file.c:1081 msgid "# Failed to be updated." msgstr "# Fallo al ser actualizado." #: src/file.c:1086 msgid "# Invalid value in 'command_state' member!" msgstr "# ¡Valor inválido en el miembro 'command_state'!" #: src/file.c:1105 msgid "" "\n" "# Files" msgstr "" "\n" "# Archivos" #: src/file.c:1109 msgid "" "\n" "# files hash-table stats:\n" "# " msgstr "" "\n" "# estadísticas de la tabla «hash» de los archivos:\n" "# " #: src/file.c:1119 #, c-format msgid "%s: Field '%s' not cached: %s" msgstr "%s: El campo '%s' no está en «cache»: %s" #: src/function.c:794 msgid "non-numeric first argument to 'word' function" msgstr "el primer argumento de la función 'word' no es numérico" #: src/function.c:799 #, c-format 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" #: src/function.c:819 msgid "non-numeric first argument to 'wordlist' function" msgstr "el primer argumento de la función 'wordlist' no es numérico" #: src/function.c:821 msgid "non-numeric second argument to 'wordlist' function" msgstr "el segundo argumento de la función 'wordlist' no es numérico" #: src/function.c:1533 #, c-format msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n" msgstr "windows32_openpipe: fallo en DuplicateHandle(In), (e=%ld)\n" #: src/function.c:1557 #, c-format msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n" msgstr "windows32_openpipe: fallo en DuplicateHandle(Err), (e=%ld)\n" #: src/function.c:1564 #, c-format msgid "CreatePipe() failed (e=%ld)\n" msgstr "Fallo en CreatePipe(), (e=%ld)\n" #: src/function.c:1572 #, c-format msgid "windows32_openpipe(): process_init_fd() failed\n" msgstr "windows32_openpipe(): fallo en process_init_fd()\n" #: src/function.c:1857 #, c-format msgid "Cleaning up temporary batch file %s\n" msgstr "Limpiando el archivo temporal %s\n" #: src/function.c:2230 src/function.c:2255 #, c-format msgid "file: missing filename" msgstr "archivo: falta el nombre del archivo" #: src/function.c:2234 src/function.c:2265 #, c-format msgid "open: %s: %s" msgstr "abrir: %s: %s" # 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. #: src/function.c:2242 #, c-format msgid "write: %s: %s" msgstr "escribir: %s: %s" #: src/function.c:2245 src/function.c:2282 #, c-format msgid "close: %s: %s" msgstr "cerrar: %s: %s" #: src/function.c:2258 #, c-format 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. #: src/function.c:2277 #, c-format msgid "read: %s: %s" msgstr "leer: %s: %s" #: src/function.c:2290 #, c-format msgid "file: invalid file operation: %s" msgstr "archivo: operación de archivo no válida: %s" #: src/function.c:2405 #, c-format msgid "insufficient number of arguments (%d) to function '%s'" msgstr "Número de argumentos (%d) insuficientes para la función '%s'" #: src/function.c:2417 #, c-format msgid "unimplemented on this platform: function '%s'" msgstr "No implementado en esta plataforma: función '%s'" #: src/function.c:2483 #, c-format msgid "unterminated call to function '%s': missing '%c'" msgstr "la llamada a la función '%s' no concluyó: falta '%c'" #: src/function.c:2667 #, c-format msgid "Empty function name" msgstr "Nombre de función vacío" #: src/function.c:2669 #, c-format msgid "Invalid function name: %s" msgstr "Nombre de función no válido: %s" #: src/function.c:2671 #, c-format msgid "Function name too long: %s" msgstr "Nombre de función demasiado largo: %s" #: src/function.c:2674 #, c-format msgid "Invalid minimum argument count (%u) for function %s" msgstr "Número insuficiente de argumentos (%u) para la función %s" #: src/function.c:2677 #, c-format msgid "Invalid maximum argument count (%u) for function %s" msgstr "El número máximo de argumentos (%u) no es válido para la función %s" #: src/getopt.c:659 #, c-format msgid "%s: option '%s' is ambiguous\n" msgstr "%s: la opción '%s' es ambigua\n" # No admite ningún argumento. sv # Ok. Y vuelve la burra al trigo. mm #: src/getopt.c:683 #, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s: la opción '--%s' no admite ningún argumento\n" # Lo mismo. sv # Ok. mm #: src/getopt.c:688 #, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s: la opción '%c%s' no admite ningún argumento\n" #: src/getopt.c:705 src/getopt.c:878 #, c-format msgid "%s: option '%s' requires an argument\n" msgstr "%s: la opción '%s' requiere un argumento\n" #: src/getopt.c:734 #, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s: opción no reconocida '--%s'\n" #: src/getopt.c:738 #, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s: opción no reconocida '%c%s'\n" #: src/getopt.c:764 #, c-format msgid "%s: illegal option -- %c\n" msgstr "%s: opción inválida -- %c\n" #: src/getopt.c:767 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s: opción inválida -- %c\n" #: src/getopt.c:797 src/getopt.c:927 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: la opción requiere un argumento -- %c\n" #: src/getopt.c:844 #, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s: la opción '-W %s' es ambigua\n" # No admite ningún argumento. sv # Ok. Y vuelve la burra al trigo. mm #: src/getopt.c:862 #, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s: la opción '-W %s' no admite ningún argumento\n" #: src/guile.c:58 #, c-format msgid "guile: Expanding '%s'\n" msgstr "guile: Expandiendo '%s'\n" #: src/guile.c:74 #, c-format msgid "guile: Evaluating '%s'\n" msgstr "guile: Evaluando '%s'\n" #: src/hash.c:50 #, c-format msgid "can't allocate %lu bytes for hash table: memory exhausted" msgstr "no se pueden reservar %lu bytes para la tabla «hash»: memoria agotada" #: src/hash.c:280 #, c-format msgid "Load=%lu/%lu=%.0f%%, " msgstr "Carga=%lu/%lu=%.0f%%, " #: src/hash.c:282 #, c-format msgid "Rehash=%u, " msgstr "Rehash=%u, " #: src/hash.c:283 #, c-format msgid "Collisions=%lu/%lu=%.0f%%" msgstr "Colisiones=%lu/%lu=%.0f%%" # Y no sería mejor "Buscando una regla implícita ..." # Ten en cuenta que este mensaje no parece un mensaje de error, sino más # de "debug" o de "verbose". sv # Cierto. mm #: src/implicit.c:38 #, c-format msgid "Looking for an implicit rule for '%s'.\n" msgstr "Buscando una regla implícita para '%s'.\n" # Lo mismo. # Buscando una regla implítita para el miembro del archivo `%s' em+ # Se me resbaló. mm #: src/implicit.c:54 #, c-format msgid "Looking for archive-member implicit rule for '%s'.\n" msgstr "Buscando una regla implícita para el miembro del archivo '%s'.\n" # Pues si ilegal le suena a cárcel a Enrique, "evade" me suena a mí a # escaparse de la cárcel... (fuga de alcatraz :-) # te voy a dar yo a tí fuga ... em+ # ¿Qué te parecería "se evita"? sv # 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 #: src/implicit.c:311 #, c-format msgid "Avoiding implicit rule recursion.\n" msgstr "Evitando la recursión en la regla implícita.\n" #: src/implicit.c:484 #, c-format msgid "Stem too long: '%s%.*s'.\n" msgstr "Tema demasiado largo: '%s%.*s'.\n" # FUZZY # Esto me suena fatal. Se a que se refiere, porque lo # he visto, pero en cristiano no se si podría entenderlo. # se refiere a las reglas del tipo % , lo pongo FUZZY , tendré # que pensar un poco en ello em+ # De momento cambio la regla patron por una regla de patron , y # pondría a toda costa gerundio ( intentando ) em+ # Ok con el gerundio. Pero también tengo que meditarlo. mm #: src/implicit.c:490 #, c-format msgid "Trying pattern rule with stem '%.*s'.\n" msgstr "Intentando una regla de patrón con el tema '%.*s'.\n" # ## Corrijo la palabra "dependencia". sv # Cuando aparezca este mensaje tendrá poco menos que sentido # testimonial. Date cuenta que los argumentos estan cambiados. # Pon el orden correcto, siempre será más lógico que lo que vaya a # aparecer tal y como está ahora (Se rechaza la dependencia imposible # `%s' `%s )'em+ # Ok. mm #: src/implicit.c:717 #, c-format msgid "Rejecting impossible rule prerequisite '%s'.\n" msgstr "Se rechaza la regla de dependencia imposible '%s'.\n" # ## Corrijo la palabra "dependencia". sv # Cuando aparezca este mensaje tendrá poco menos que sentido # testimonial. Date cuenta que los argumentos estan cambiados. # Pon el orden correcto, siempre será más lógico que lo que vaya a # aparecer tal y como está ahora (Se rechaza la dependencia imposible # `%s' `%s )'em+ # Ok. mm #: src/implicit.c:718 #, c-format msgid "Rejecting impossible implicit prerequisite '%s'.\n" msgstr "Se rechaza la dependencia implícita imposible '%s'.\n" # FUZZY # Esto me suena fatal. Se a que se refiere, porque lo # he visto, pero en cristiano no se si podría entenderlo. # se refiere a las reglas del tipo % , lo pongo FUZZY , tendré # que pensar un poco en ello em+ # De momento cambio la regla patron por una regla de patron , y # pondría a toda costa gerundio ( intentando ) em+ # Ok con el gerundio. Pero también tengo que meditarlo. mm #: src/implicit.c:732 #, c-format msgid "Trying rule prerequisite '%s'.\n" msgstr "Intentando la regla de dependencia '%s'.\n" # Pues si ilegal le suena a cárcel a Enrique, "evade" me suena a mí a # escaparse de la cárcel... (fuga de alcatraz :-) # te voy a dar yo a tí fuga ... em+ # ¿Qué te parecería "se evita"? sv # 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 #: src/implicit.c:733 #, c-format msgid "Trying implicit prerequisite '%s'.\n" msgstr "Probando la dependencia implícita '%s'.\n" #: src/implicit.c:772 #, c-format msgid "Found prerequisite '%s' as VPATH '%s'\n" msgstr "Se encontró la dependencia '%s' como la VPATH '%s'.\n" #: src/implicit.c:786 #, c-format msgid "Looking for a rule with intermediate file '%s'.\n" msgstr "Se busca una regla con el archivo intermedio '%s'.\n" #: src/job.c:370 msgid "Cannot create a temporary file\n" msgstr "No se puede crear un archivo temporal\n" # Sugerencia: " (volcado de `core')". sv # 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 #: src/job.c:548 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 #: src/job.c:553 msgid " (ignored)" msgstr " (no tiene efecto)" #: src/job.c:557 src/job.c:1892 msgid "" msgstr "" #: src/job.c:573 #, c-format 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 #: src/job.c:662 #, c-format 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 #: src/job.c:704 #, c-format msgid "Live child %p (%s) PID %s %s\n" msgstr "Hijo activo %p (%s) PID %s %s\n" #: src/job.c:706 src/job.c:900 src/job.c:1072 src/job.c:1644 #, c-format msgid " (remote)" msgstr " (remoto)" # Lo mismo, pon Proceso hijo, y quita lo que hay # entre paréntesis em+ #: src/job.c:898 #, c-format msgid "Reaping winning child %p PID %s %s\n" msgstr "Se recupera al proceso hijo ganador %p PID %s %s\n" # Lo mismo, pon Proceso hijo, y quita lo que hay # entre paréntesis em+ #: src/job.c:899 #, c-format msgid "Reaping losing child %p PID %s %s\n" msgstr "Se recupera al proceso hijo perdido %p PID %s %s\n" # Give up no es enfocar, es abandonar, o desistir em+ # Si, metí la pata. mm #: src/job.c:950 #, 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 #: src/job.c:956 #, 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. #: src/job.c:1071 #, 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" # Lo mismo, pon Proceso hijo, y quita lo que hay # entre paréntesis em+ #: src/job.c:1120 #, c-format msgid "Released token for child %p (%s).\n" msgstr "Se libera el token para el proceso hijo %p (%s).\n" #: src/job.c:1575 src/job.c:2487 #, c-format msgid "process_easy() failed to launch process (e=%ld)\n" msgstr "fallo en process_easy() para lanzar al proceso (e=%ld)\n" #: src/job.c:1579 src/job.c:2491 #, c-format msgid "" "\n" "Counted %d args in failed launch\n" msgstr "" "\n" "Se contaron %d argumentos en el lanzamiento fallido\n" # Proceso hijo em+ # Ok. #: src/job.c:1642 #, 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" # Lo mismo, pon Proceso hijo, y quita lo que hay # entre paréntesis em+ #: src/job.c:1875 #, c-format msgid "Obtained token for child %p (%s).\n" msgstr "Se obtiene el token para el proceso hijo %p (%s).\n" #: src/job.c:1902 #, c-format msgid "%s: target '%s' does not exist" msgstr "%s: el objetivo '%s' no existe" #: src/job.c:1905 #, c-format msgid "%s: update target '%s' due to: %s" msgstr "%s: actualizar el objetivo '%s' a causa de: %s" #: src/job.c:2108 #, c-format msgid "cannot enforce load limits on this operating system" msgstr "no se pueden forzar los límites de carga en este sistema operativo" #: src/job.c:2110 msgid "cannot enforce load limit: " msgstr "no se puede forzar la carga límite: " #: src/job.c:2200 #, c-format msgid "no more file handles: could not duplicate stdin\n" msgstr "no hay más manejadores de archivos: no se puede duplicar stdin\n" #: src/job.c:2212 #, c-format msgid "no more file handles: could not duplicate stdout\n" msgstr "no hay más manejadores de archivos: no se puede duplicar stdout\n" #: src/job.c:2226 #, c-format msgid "no more file handles: could not duplicate stderr\n" msgstr "no hay más manejadores de archivos: no se puede duplicar stderr\n" #: src/job.c:2241 #, c-format msgid "Could not restore stdin\n" msgstr "No se puede restaurar stdin\n" #: src/job.c:2249 #, c-format msgid "Could not restore stdout\n" msgstr "No se puede restaurar stdout\n" #: src/job.c:2257 #, c-format msgid "Could not restore stderr\n" msgstr "No se puede restaurar stderr\n" #: src/job.c:2520 #, 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" #: src/job.c:2623 #, c-format msgid "spawnvpe: environment space might be exhausted" msgstr "spawnvpe: el espacio ambiental podría estar agotado" #: src/job.c:2862 #, c-format msgid "$SHELL changed (was '%s', now '%s')\n" msgstr "$SHELL ha cambiado (era '%s' y ahora es '%s')\n" #: src/job.c:3300 src/job.c:3485 #, c-format msgid "Creating temporary batch file %s\n" msgstr "Se crea el archivo temporal %s\n" #: src/job.c:3308 #, c-format msgid "" "Batch file contents:\n" "\t@echo off\n" msgstr "" "Contenido del archivo de lotes:\n" "\t@echo off\n" #: src/job.c:3497 #, c-format msgid "" "Batch file contents:%s\n" "\t%s\n" msgstr "" "Contenido del archivo de lotes:%s\n" "\t%s\n" #: src/job.c:3605 #, c-format msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n" msgstr "" "%s (linea %d) Contexto de shell erróneo (!unixy && !batch_mode_shell)\n" #: src/load.c:60 #, c-format msgid "Failed to open global symbol table: %s" msgstr "Fallo al abrir tabla global de símbolos: %s" #: src/load.c:97 #, c-format msgid "Loaded object %s is not declared to be GPL compatible" msgstr "" "El objeto %s que se ha cargado no está declarado como compatible con GPL" #: src/load.c:104 #, c-format msgid "Failed to load symbol %s from %s: %s" msgstr "Fallo al cargar símbolo %s desde %s: %s" #: src/load.c:149 #, c-format msgid "Empty symbol name for load: %s" msgstr "Nombre de símbolo vacío en la carga: %s" #: src/load.c:204 #, c-format msgid "Loading symbol %s from %s\n" msgstr "Cargando símbolo %s desde %s\n" #: src/load.c:256 #, c-format msgid "The 'load' operation is not supported on this platform." msgstr "La operación 'load' no está implementada en esta plataforma." #: src/main.c:335 msgid "Options:\n" msgstr "Opciones:\n" # Lo mismo de arriba con "ignorar". sv # Ok. mm. #: src/main.c:336 msgid " -b, -m Ignored for compatibility.\n" msgstr "" " -b, -m No se tendrá en cuenta por compatibilidad.\n" #: src/main.c:338 msgid " -B, --always-make Unconditionally make all targets.\n" msgstr "" " -B, --always-make Hace incondicionalmente todos los objetivos.\n" #: src/main.c:340 msgid "" " -C DIRECTORY, --directory=DIRECTORY\n" " Change to DIRECTORY before doing anything.\n" msgstr "" " -C DIRECTORIO, --directory=DIRECTORIO\n" " Se cambia al DIRECTORIO antes de hacer nada.\n" # ¿"depurado" o "depuración"? sv # Puse de depurado para evitar la cacofonía información depuración. # Sugerencias bienvenidas. mm #: src/main.c:343 msgid " -d Print lots of debugging information.\n" msgstr "" " -d Se imprimirán grandes cantidades de información de depurado.\n" # ¿"depurado" o "depuración"? sv # Puse de depurado para evitar la cacofonía información depuración. # Sugerencias bienvenidas. mm #: src/main.c:345 msgid "" " --debug[=FLAGS] Print various types of debugging information.\n" msgstr "" " --debug[=BANDERAS] Se imprimirán varios tipos de información de " "depurado.\n" #: src/main.c:347 msgid "" " -e, --environment-overrides\n" " Environment variables override makefiles.\n" msgstr "" " -e, --environment-overrides\n" " Las variables ambientales se imponen a las de los " "makefiles.\n" #: src/main.c:350 msgid "" " -E STRING, --eval=STRING Evaluate STRING as a makefile statement.\n" msgstr "" " -E CADENA, --eval=CADENA Evalúa la CADENA como una instrucción de un " "makefile.\n" #: src/main.c:352 msgid "" " -f FILE, --file=FILE, --makefile=FILE\n" " Read FILE as a makefile.\n" msgstr "" " -f ARCHIVO, --file=ARCHIVO, --makefile=ARCHIVO\n" " Lee al ARCHIVO como un makefile.\n" #: src/main.c:355 msgid " -h, --help Print this message and exit.\n" msgstr " -h, --help Muestra este mensaje y finaliza.\n" # Ojo con ignorar. sv # Ok. mm # Por favor, si has traducido commands como instrucciones , hazlo aqui # tambien. # No me gusta este mensaje, preferiría: Se ignoran los errores obtenidos # en la ejecución de las instrucciones em+ #: src/main.c:357 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" #: src/main.c:359 msgid "" " -I DIRECTORY, --include-dir=DIRECTORY\n" " Search DIRECTORY for included makefiles.\n" msgstr "" " -I DIRECTORIO, --include-dir=DIRECTORIO\n" " Busca dentro del DIRECTORIO los makefiles incluidos.\n" # Yo traduciría "infinite" por "infinitos", no por "una infinidad", que # parece que son muchos menos... sv # Ok. mm #: src/main.c:362 msgid "" " -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no " "arg.\n" msgstr "" " -j [N], --jobs[=N] Se permiten N trabajos a la vez; si no se " "especifica un\n" "argumento son infinitos.\n" # No entiendo por qué aquí empleas subjuntivo: "pudieron". sv # Es incorrecto. Es una de las opciones `k' que dice... mm #: src/main.c:364 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" #: src/main.c:366 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" " No inicia con trabajos múltiples a menos que la carga esté por debajo " "de N.\n" #: src/main.c:369 msgid "" " -L, --check-symlink-times Use the latest mtime between symlinks and " "target.\n" msgstr "" " -L, --check-symlink-times Utiliza el último mtime entre los enlaces " "simbólicos y los objetivos.\n" #: src/main.c:371 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" " No ejecuta ninguna instrucción; sólo las " "muestra.\n" #: src/main.c:374 msgid "" " -o FILE, --old-file=FILE, --assume-old=FILE\n" " Consider FILE to be very old and don't remake " "it.\n" msgstr "" " -o ARCHIVO, --old-file=ARCHIVO, --assume-old=ARCHIVO\n" " Supone que ARCHIVO es muy viejo y no lo " "reconstruye.\n" #: src/main.c:377 msgid "" " -O[TYPE], --output-sync[=TYPE]\n" " Synchronize output of parallel jobs by TYPE.\n" msgstr "" " -O[TIPO], --output-sync[=TIPO]\n" " Sincroniza la salida de tareas paralelas por " "tipo.\n" # de 'make' em+ # ok. mm #: src/main.c:380 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" #: src/main.c:382 msgid "" " -q, --question Run no recipe; exit status says if up to " "date.\n" msgstr "" " -q, --question No se ejecutan las instrucciones; el estado de " "salida\n" " indicará si están actualizados.\n" # ¿desabilitan o deshabilitan? sv # Error de dedo. mm # ¡ Por favor ! , ¿ pero qué es eso de interconstruidas ? # Pon almacenadas internamente, que es exactamente lo que son :) em+ # Bueno, bajo protesta. mm #: src/main.c:384 msgid " -r, --no-builtin-rules Disable the built-in implicit rules.\n" msgstr "" " -r, --no-builtin-rules Se deshabilitan las reglas implícitas " "almacenadas internamente.\n" # ¿desabilitan o deshabilitan? sv # Error de dedo. mm # ¡ Por favor ! , ¿ pero qué es eso de interconstruidas ? # Pon almacenadas internamente, que es exactamente lo que son :) em+ # Bueno, bajo protesta. mm #: src/main.c:386 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" #: src/main.c:388 msgid " -s, --silent, --quiet Don't echo recipes.\n" msgstr " -s, --silent, --quiet No muestra las instrucciones.\n" #: src/main.c:390 msgid " --no-silent Echo recipes (disable --silent mode).\n" msgstr "" " --no-silent Muestra las instrucciones (desactiva el modo --" "silent).\n" #: src/main.c:392 msgid "" " -S, --no-keep-going, --stop\n" " Turns off -k.\n" msgstr "" " -S, --no-keep-going, --stop\n" " Desactiva la opción -k.\n" # Se *tocan*, ¿no? sv # Si. mm # # Pues entonces cámbialo arriba tambien em+ # En donde? mm #: src/main.c:395 msgid " -t, --touch Touch targets instead of remaking them.\n" msgstr "" " -t, --touch Se tocan los objetivos en vez de " "reconstruirlos.\n" # ¿"depurado" o "depuración"? sv # Puse de depurado para evitar la cacofonía información depuración. # Sugerencias bienvenidas. mm #: src/main.c:397 msgid " --trace Print tracing information.\n" msgstr " --trace Muestra trazas.\n" # Me comería el "Se" inicial. "Muestra la versión..." sv # Ok. mm #: src/main.c:399 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 #: src/main.c:401 msgid " -w, --print-directory Print the current directory.\n" msgstr " -w, --print-directory Muestra el directorio actual.\n" # Lo mismo. sv # Turn off , desactiva o deshabilita , pero no apaga em+ # 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 #: src/main.c:403 msgid "" " --no-print-directory Turn off -w, even if it was turned on " "implicitly.\n" msgstr "" " --no-print-directory Desactiva -w, aún cuando haya sido activado " "implícitamente.\n" #: src/main.c:405 msgid "" " -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n" " Consider FILE to be infinitely new.\n" msgstr "" " -W ARCHIVO, --what-if=ARCHIVO, --new-file=ARCHIVO, --assume-new=ARCHIVO\n" " Supone que ARCHIVO es infinitamente " "reciente.\n" # Lo mismo. sv # Todas estas parecen descripciones de opciones. #: src/main.c:408 msgid "" " --warn-undefined-variables Warn when an undefined variable is " "referenced.\n" msgstr "" " --warn-undefined-variables Advierte cuando se hace una referencia a una " "variable no definida.\n" #: src/main.c:671 #, c-format msgid "empty string invalid as file name" msgstr "no se permite que una cadena vacía sea el nombre de un archivo" #: src/main.c:754 #, c-format msgid "unknown debug level specification '%s'" msgstr "se especificó un nivel de depuración desconocido '%s'" #: src/main.c:794 #, c-format msgid "unknown output-sync type '%s'" msgstr "tipo de sincronización de salida desconocido '%s'" #: src/main.c:849 #, 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" #: src/main.c:856 #, c-format msgid "" "\n" "Unhandled exception filter called from program %s\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" msgstr "" "\n" "Se ha llamado un filtro de excepción no manejado desde el programa %s\n" "Código de la excepción = %lx\n" "Banderas de la excepción = %lx\n" "Dirección de la excepción = 0x%p\n" #: src/main.c:864 #, 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" #: src/main.c:865 #, 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" #: src/main.c:941 src/main.c:956 #, 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" #: src/main.c:1009 #, 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" #: src/main.c:1609 #, c-format 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." #: src/main.c:1617 #, c-format msgid "warning: -j%d forced in submake: resetting jobserver mode." msgstr "" "atención: se fuerza a -j%d en el submake: se restablece el modo de servidor " "de tareas." #: src/main.c:1781 #, c-format msgid "Makefile from standard input specified twice." msgstr "" "El archivo Makefile ha sido especificado dos veces desde la entrada estándard" #: src/main.c:1819 src/vmsjobs.c:1248 msgid "fopen (temporary file)" msgstr "fopen (archivo temporal)" #: src/main.c:1825 msgid "fwrite (temporary file)" msgstr "fwrite (archivo temporal)" #: src/main.c:2004 #, c-format msgid "warning: -j%d forced in makefile: resetting jobserver mode." msgstr "" "atención: se fuerza a -j%d en el makefile: se restablece el modo de servidor " "de tareas." #: src/main.c:2068 #, c-format msgid "Parallel jobs (-j) are not supported on this platform." msgstr "" "Los trabajos en paralelo (-j) no están implementados en esta plataforma." #: src/main.c:2069 #, c-format msgid "Resetting to single job (-j1) mode." msgstr "Reajustando al modo monotarea (-j1)." #: src/main.c:2109 #, c-format 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 #: src/main.c:2190 #, c-format msgid "Updating makefiles....\n" msgstr "Actualizando archivos makefiles....\n" # Me comería el "archivo" inicial. # Ok. mm # "El Makefile `%s' ..." sv # 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. #: src/main.c:2226 #, 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 #: src/main.c:2303 #, c-format msgid "Failed to remake makefile '%s'." msgstr "Fallo al reconstruir el makefile '%s'." # Lo mismo. sv #: src/main.c:2323 #, c-format msgid "Included makefile '%s' was not found." msgstr "No se encontró el makefile incluído '%s'." # Lo mismo. sv #: src/main.c:2328 #, c-format msgid "Makefile '%s' was not found" msgstr "No se encontró el makefile '%s'" #: src/main.c:2394 #, c-format msgid "Couldn't change back to original directory." msgstr "No se pudo regresar al directorio original." #: src/main.c:2402 #, c-format msgid "Re-executing[%u]:" msgstr "Re-ejecutando[%u]:" #: src/main.c:2522 msgid "unlink (temporary file): " msgstr "unlink (archivo temporal)" #: src/main.c:2555 #, c-format msgid ".DEFAULT_GOAL contains more than one target" msgstr ".DEFAULT_GOAL contien más de un objetivo" #: src/main.c:2579 #, c-format msgid "No targets" msgstr "No hay objetivos" # Sugerencia: "No se especificó ningún objetivo ... " sv # Ok. Me gusta. mm #: src/main.c:2581 #, c-format msgid "No targets specified and no makefile found" msgstr "No se especificó ningún objetivo y no se encontró ningún makefile" #: src/main.c:2586 #, c-format msgid "Updating goal targets....\n" msgstr "Actualizando los objetivos finales....\n" #: src/main.c:2610 #, c-format 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 " "estar incompleta." # ¿Y Modo de empleo? sv # Soy medio bestia. Debería hacerlo automático. mm # "target" es "objetivo", no "objetivos". Fíjate que lleva puntos # suspensivos, permitiendo así varios objetivos. sv # Ok. mm #: src/main.c:2804 #, c-format msgid "Usage: %s [options] [target] ...\n" msgstr "Modo de empleo: %s [opciones] [objetivo] ...\n" #: src/main.c:2810 #, c-format msgid "" "\n" "This program built for %s\n" msgstr "" "\n" "Este programa fue construido para %s\n" #: src/main.c:2812 #, c-format msgid "" "\n" "This program built for %s (%s)\n" msgstr "" "\n" "Este programa construido para %s (%s)\n" #: src/main.c:2815 #, c-format msgid "Report bugs to \n" msgstr "Informe sobre los errores a \n" # Me comería el "de" de "requiere de" sv # Ok. mm #: src/main.c:2901 #, 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 #: src/main.c:2965 #, c-format msgid "the '-%c' option requires a positive integer argument" msgstr "la opción '-%c' requiere un argumento positivo y entero" #: src/main.c:3363 #, c-format msgid "%sBuilt for %s\n" msgstr "%sEste programa fue construido para %s\n" #: src/main.c:3365 #, c-format msgid "%sBuilt for %s (%s)\n" msgstr "%sEste programa fue construido para %s (%s)\n" #: src/main.c:3376 #, c-format msgid "" "%sLicense GPLv3+: GNU GPL version 3 or later \n" "%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 "" "%sLicencia GPLv3+: GNU GPL versión 3 o posterior \n" "%sEste es software libre: cualquiera es libre para redistribuirlo y " "modificarlo.\n" "%sNo existe GARANTÃA ALGUNA, hasta los límites permitidos por las leyes " "aplicables.\n" #: src/main.c:3397 #, c-format msgid "" "\n" "# Make data base, printed on %s" msgstr "" "\n" "# Base de datos del Make, mostrada en %s" # make -> Make. sv # Ok. mm # Porqué 'del', o pones 'del programa' Make o pones # 'de Make' em+ # Ok. mm #: src/main.c:3407 #, c-format msgid "" "\n" "# Finished Make data base on %s\n" msgstr "" "\n" "# Se termina la base de datos de Make en %s\n" #: src/misc.c:643 #, c-format msgid "%s: user %lu (real %lu), group %lu (real %lu)\n" msgstr "%s: usuario %lu (real %lu), grupo %lu (real %lu)\n" #: src/misc.c:664 msgid "Initialized access" msgstr "Acceso inicializado" #: src/misc.c:743 msgid "User access" msgstr "Acceso del usuario" #: src/misc.c:791 msgid "Make access" msgstr "Acceso del Make" #: src/misc.c:825 msgid "Child access" msgstr "Acceso del hijo" #: src/output.c:97 #, c-format msgid "%s: Entering an unknown directory\n" msgstr "%s: se ingresa a un directorio desconocido\n" #: src/output.c:99 #, c-format msgid "%s: Leaving an unknown directory\n" msgstr "%s: se sale del directorio desconocido\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. #: src/output.c:102 #, c-format msgid "%s: Entering directory '%s'\n" msgstr "%s: se entra en el directorio '%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. #: src/output.c:104 #, c-format msgid "%s: Leaving directory '%s'\n" msgstr "%s: se sale del directorio '%s'\n" #: src/output.c:108 #, c-format msgid "%s[%u]: Entering an unknown directory\n" msgstr "%s[%u]: se ingresa a un directorio desconocido\n" #: src/output.c:110 #, c-format msgid "%s[%u]: Leaving an unknown directory\n" msgstr "%s[%u]: se sale del directorio desconocido\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. #: src/output.c:113 #, c-format msgid "%s[%u]: Entering directory '%s'\n" msgstr "%s[%u]: se entra en el directorio '%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. #: src/output.c:115 #, c-format msgid "%s[%u]: Leaving directory '%s'\n" msgstr "%s[%u]: se sale del directorio '%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. #: src/output.c:442 src/output.c:444 #, c-format msgid "write error: stdout" msgstr "error al escribir: stdout" # Interrumpido (?). sv # Mmgmh... El mensaje indica que hubo algún error muy grave y que por # eso se detiene el make. Probablemente sea mejor dejarlo así. mm #: src/output.c:624 msgid ". Stop.\n" msgstr ". Alto.\n" #: src/output.c:658 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" #: src/output.c:667 #, c-format msgid "%s: %s" msgstr "%s: %s" #: src/output.h:62 #, c-format msgid "-O[TYPE] (--output-sync[=TYPE]) is not configured for this build." msgstr "-O[TIPO] (--output-sync[=TIPO]) no está configurado para este «build»." #: src/posixos.c:90 msgid "creating jobs pipe" msgstr "creando una tubería de tareas" #: src/posixos.c:98 src/posixos.c:251 msgid "duping jobs pipe" msgstr "duplicando una tubería de tareas" #: src/posixos.c:104 msgid "init jobserver pipe" msgstr "se inicializa la tubería al servidor de tareas" #: src/posixos.c:119 #, c-format msgid "internal error: invalid --jobserver-auth string '%s'" msgstr "error interno: cadena --jobserver-auth inválida '%s'" #: src/posixos.c:122 #, c-format msgid "Jobserver client (fds %d,%d)\n" msgstr "Cliente del servidor de tareas (fds %d,%d)\n" #: src/posixos.c:138 msgid "jobserver pipeline" msgstr "tubería al servidor de tareas" #: src/posixos.c:186 msgid "write jobserver" msgstr "escribir en el servidor de tareas" #: src/posixos.c:300 #, c-format msgid "job server shut down" msgstr "servidor de tareas detenido" #: src/posixos.c:303 msgid "pselect jobs pipe" msgstr "tubería de trabajos «pselect»" #: src/posixos.c:319 src/posixos.c:433 msgid "read jobs pipe" msgstr "tubería de trabajos leídos" # Sugerencia: eliminar la palabra "archivo". sv # Ok. Mejora. mm #: src/read.c:181 #, c-format msgid "Reading makefiles...\n" msgstr "Leyendo makefiles...\n" #: src/read.c:336 #, c-format msgid "Reading makefile '%s'" msgstr "Leyendo makefile '%s'" #: src/read.c:338 #, c-format msgid " (no default goal)" msgstr " (no hay objetivo por defecto)" #: src/read.c:340 #, c-format msgid " (search path)" msgstr " (ruta de búsqueda)" #: src/read.c:342 #, c-format msgid " (don't care)" msgstr " (no importa)" #: src/read.c:344 #, c-format msgid " (no ~ expansion)" msgstr " (no hay expansión del ~)" #: src/read.c:655 #, c-format msgid "Skipping UTF-8 BOM in makefile '%s'\n" msgstr "se salta BOM UTF-8 en el makefile '%s'\n" #: src/read.c:658 #, 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 #: src/read.c:787 #, c-format msgid "invalid syntax in conditional" msgstr "sintaxis no válida en condicional" #: src/read.c:960 #, c-format msgid "%s: failed to load" msgstr "%s: fallo al cargar" #: src/read.c:986 #, c-format msgid "recipe commences before first target" msgstr "las instrucciones comenzaron antes del primer objetivo" # "falta una regla". sv # (es que extraviada me suena muy raro). # 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 #: src/read.c:1035 #, c-format msgid "missing rule before recipe" msgstr "falta una regla antes de las instrucciones" #: src/read.c:1136 #, c-format msgid "missing separator (did you mean TAB instead of 8 spaces?)" msgstr "falta un separador (¿quiso decir TAB en vez de 8 espacios?)" #: src/read.c:1138 #, c-format msgid "missing separator" msgstr "falta un separador" #: src/read.c:1283 #, c-format msgid "missing target pattern" msgstr "falta un patrón de objetivos" #: src/read.c:1285 #, c-format msgid "multiple target patterns" msgstr "hay varios patrones de objetivos" #: src/read.c:1289 #, c-format msgid "target pattern contains no '%%'" msgstr "el patrón de objetivo no contiene '%%'" #: src/read.c:1404 #, c-format msgid "missing 'endif'" msgstr "falta un 'endif'" #: src/read.c:1443 src/read.c:1488 src/variable.c:1600 #, c-format msgid "empty variable name" msgstr "nombre de variable vacío" #: src/read.c:1478 #, c-format msgid "extraneous text after 'define' directive" msgstr "" "Hay un texto irrelevante o mal colocado después de la instrucción 'define'" #: src/read.c:1503 #, c-format msgid "missing 'endef', unterminated 'define'" msgstr "falta un 'endef', no se terminó un 'define'" #: src/read.c:1531 #, c-format msgid "extraneous text after 'endef' directive" msgstr "" "Hay un texto irrelevante o mal colocado después de la instrucción 'endef'" #: src/read.c:1603 #, c-format msgid "extraneous text after '%s' directive" msgstr "Texto irrelevante o mal colocado después de la instrucción '%s'" #: src/read.c:1604 #, c-format msgid "extraneous '%s'" msgstr "irrelevante o mal colocado '%s'" #: src/read.c:1632 #, c-format msgid "only one 'else' per conditional" msgstr "sólo se admite un 'else' por condicional" #: src/read.c:1908 #, c-format msgid "Malformed target-specific variable definition" msgstr "" "La definición de las variables específicas al blanco está mal construida" #: src/read.c:1968 #, c-format msgid "prerequisites cannot be defined in recipes" msgstr "" "los prerequisitos no pueden ser definidos por los guiones de instrucciones" #: src/read.c:1986 #, c-format msgid "grouped targets must provide a recipe" msgstr "los objetivos agrupados deben proporcionar instrucción" #: src/read.c:2029 #, c-format 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 #: src/read.c:2052 #, c-format msgid "mixed implicit and normal rules" msgstr "las reglas implícitas y las normales están mezcladas" #: src/read.c:2107 #, c-format msgid "target '%s' doesn't match the target pattern" msgstr "el objetivo '%s' no coincide con el patrón de objetivos" #: src/read.c:2122 src/read.c:2168 #, 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 #: src/read.c:2128 #, 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" # 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 #: src/read.c:2138 #, c-format msgid "warning: overriding recipe for target '%s'" msgstr "atención: se anulan las instrucciones para el objetivo '%s'" # Ojo con ignora. sv #: src/read.c:2141 #, 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 #: src/read.c:2254 #, c-format msgid "*** mixed implicit and normal rules: deprecated syntax" msgstr "" "*** las reglas implícitas y las normales están mezcladas: sintaxis obsoleta" # 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 #: src/read.c:2271 #, c-format msgid "warning: overriding group membership for target '%s'" msgstr "atención: se anula pertenencia a grupo al objetivo '%s'" #: src/read.c:2636 #, c-format 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" #: src/remake.c:226 #, c-format msgid "Nothing to be done for '%s'." msgstr "No se hace nada para '%s'." #: src/remake.c:227 #, c-format msgid "'%s' is up to date." msgstr "'%s' está actualizado." #: src/remake.c:323 #, c-format msgid "Pruning file '%s'.\n" msgstr "Se poda el archivo '%s'.\n" #: src/remake.c:389 #, c-format msgid "%sNo rule to make target '%s', needed by '%s'%s" msgstr "" "%sNo hay ninguna regla para construir el objetivo '%s', necesario para '%s'%s" # Sugerencia: No hay ninguna regla... sv # Como una no hay ninguna. mm #: src/remake.c:399 #, c-format msgid "%sNo rule to make target '%s'%s" msgstr "%sNo hay ninguna regla para construir el objetivo '%s'%s" # ¿target file no sería "archivo objetivo"? sv # Literalmente si pero un archivo make puede tener varios objetivos. mm # Max , pero no existe un archivo de objetivos. Esta línea, que es # 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 #: src/remake.c:425 #, c-format msgid "Considering target file '%s'.\n" msgstr "Se considera el archivo objetivo '%s'.\n" # Un compañero mío dice que una buena regla es poner siempre que se pueda # un número par de comas. # Es decir: "Se intentó, sin éxito, actualizar ..." # o bien "Se intentó sin éxito actualizar ..." # ¿Qué te parece? sv # Bien y tiene razón. mm #: src/remake.c:432 #, c-format msgid "Recently tried and failed to update file '%s'.\n" msgstr "Se intentó hace poco, sin éxito, actualizar el archivo '%s'.\n" #: src/remake.c:444 #, c-format msgid "File '%s' was considered already.\n" msgstr "Ya se ha tenido en cuenta el archivo '%s'.\n" #: src/remake.c:454 #, c-format msgid "Still updating file '%s'.\n" msgstr "Se continúa actualizando el archivo '%s'.\n" #: src/remake.c:457 #, c-format msgid "Finished updating file '%s'.\n" msgstr "Se terminó de actualizar el archivo '%s'.\n" #: src/remake.c:486 #, c-format msgid "File '%s' does not exist.\n" msgstr "El archivo '%s' no existe.\n" #: src/remake.c:494 #, c-format msgid "" "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp" msgstr "" "*** Atención: el archivo .LOW_RESOLUTION_TIME '%s' tiene una marca de tiempo " "de alta resolución" #: src/remake.c:507 src/remake.c:1039 #, 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 #: src/remake.c:509 src/remake.c:1041 #, 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 #: src/remake.c:515 #, c-format msgid "Using default recipe for '%s'.\n" msgstr "Se utilizan las instrucciones por omisión para '%s'.\n" #: src/remake.c:549 src/remake.c:1088 #, c-format msgid "Circular %s <- %s dependency dropped." 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 #: src/remake.c:674 #, c-format msgid "Finished prerequisites of target file '%s'.\n" msgstr "Se terminaron las dependencias del archivo objetivo '%s'.\n" #: src/remake.c:680 #, 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 #: src/remake.c:694 #, c-format msgid "Giving up on target file '%s'.\n" msgstr "Se abandona el archivo objetivo '%s'.\n" #: src/remake.c:699 #, c-format msgid "Target '%s' not remade because of errors." msgstr "Debido a los errores, el objetivo '%s' no se reconstruyó." #: src/remake.c:751 #, 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" #: src/remake.c:756 #, c-format msgid "Prerequisite '%s' of target '%s' does not exist.\n" msgstr "La dependencia '%s' del objetivo '%s' no existe.\n" #: src/remake.c:761 #, c-format msgid "Prerequisite '%s' is newer than target '%s'.\n" msgstr "La dependencia '%s' es más reciente que el objetivo '%s'.\n" #: src/remake.c:764 #, 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 #: src/remake.c:782 #, 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" #: src/remake.c:789 #, 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" #: src/remake.c:794 #, c-format msgid "Making '%s' due to always-make flag.\n" msgstr "Haciendo '%s' debido a la bandera always-make.\n" #: src/remake.c:802 #, c-format msgid "No need to remake target '%s'" msgstr "No es necesario reconstruir el objetivo '%s'." #: src/remake.c:804 #, c-format msgid "; using VPATH name '%s'" 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 #: src/remake.c:824 #, c-format msgid "Must remake target '%s'.\n" msgstr "Se debe reconstruir el objetivo '%s'.\n" #: src/remake.c:830 #, c-format msgid " Ignoring VPATH name '%s'.\n" msgstr " Se ignora el nombre del VPATH '%s'.\n" #: src/remake.c:839 #, c-format msgid "Recipe of '%s' is being run.\n" 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 #: src/remake.c:846 #, c-format msgid "Failed to remake target file '%s'.\n" msgstr "Fallo al reconstruir el archivo objetivo '%s'.\n" # Lo mismo em+ # Ok. mm #: src/remake.c:849 #, 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 #: src/remake.c:852 #, 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 #: src/remake.c:1047 #, 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 #: src/remake.c:1422 #, 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" #: src/remake.c:1662 #, c-format msgid ".LIBPATTERNS element '%s' is not a pattern" msgstr "El elemento .LIBPATTERNS '%s' no es un patrón" # ¿Las aduanas? sv # Si, las aduanas de exportación de procesos. Suena rarísimo pero # revisé el código y todo parece apuntar a que así son las cosas. # Creo que esto es otra cosa. Custom se refiere a los valores dados # por el usuario ( customizables ) , y que no se exportarán se refiere # a que al llamar a otros makefiles, no serán pasados como valores # que se antepongan ( otro término para override ) a los que make # tiene por defecto . # La traducción exacta por tanto es, los valores definidos por el usuario # no se exportarán em+ # Muchísimo más claro (es más me gusta más en español que en inglés con tu # arreglo) mm #: src/remote-cstms.c:122 #, c-format msgid "Customs won't export: %s\n" msgstr "Los valores definidos por el usuario no se exportarán: %s\n" #: src/rule.c:289 #, c-format msgid "warning: ignoring prerequisites on suffix rule definition" msgstr "" #: src/rule.c:530 msgid "" "\n" "# Implicit Rules" msgstr "" "\n" "# Reglas implícitas." #: src/rule.c:545 msgid "" "\n" "# No implicit rules." msgstr "" "\n" "# No hay reglas implícitas." #: src/rule.c:548 #, c-format msgid "" "\n" "# %u implicit rules, %u (%.1f%%) terminal." msgstr "" "\n" "# %u reglas implícitas, %u (%.1f%%) terminal." # ## Añado ¡ con tu permiso. sv # Gracias. mm # ¿ qué tal erróneo ? em+ # Si, suena mejor. mm #: src/rule.c:557 #, c-format msgid "BUG: num_pattern_rules is wrong! %u != %u" msgstr "BUG: ¡num_pattern_rules erróneo! %u != %u" #: src/signame.c:84 msgid "unknown signal" msgstr "señal desconocida" #: src/signame.c:92 msgid "Hangup" msgstr "Colgado" # ¿ Y por qué no Interrupción ? em+ # Porque es una acción. De hecho es un mensaje que se envía a través # del sistema en este caso le enviarías un kill -INT num_proceso para # interrumpir al programa. Lo revisé contra el fuente. mm #: src/signame.c:95 msgid "Interrupt" msgstr "Interrumpir" #: src/signame.c:98 msgid "Quit" msgstr "Finalizar" #: src/signame.c:101 msgid "Illegal Instruction" msgstr "Instrucción no válida" # Los trap los hemos dejado como traps, simplemente. em+ # Ok. mm #: src/signame.c:104 msgid "Trace/breakpoint trap" msgstr "Trace/breakpoint trap" #: src/signame.c:109 msgid "Aborted" msgstr "Abortado" # Ponte de acuerdo con Enrique en cómo se traduce esto. # Enrique tiene esta misma frase en glibc. sv # Eso es :) IOT trap em+ # Ok. mm #: src/signame.c:112 msgid "IOT trap" msgstr "IOT trap" # Otra em+ # Ok. mm #: src/signame.c:115 msgid "EMT trap" msgstr "EMT trap" # Coma flotante, por favor. sv # Creeme que aquí lo de coma flotante no vale. Somos pro-yanquis y # por eso usamos el punto flotante. Debemos llegar a un acuerdo. # Por ahora pongo coma flotante para facilitar las cosas, pero bajo # protesta ;-) mm #: src/signame.c:118 msgid "Floating point exception" msgstr "Excepción de coma flotante" # "Terminado por la señal kill" quedaría un poco más suave ... sv # Enrique tiene en glibc "Terminado (killed)". sv # Bueno, creo que mi traducción es más exacta, concisa y clara # pero si insisten... Además recuerda en que estoy en un país # en donde asesinado es palabra de todos los días. mm #: src/signame.c:121 msgid "Killed" msgstr "Terminado (killed)" #: src/signame.c:124 msgid "Bus error" msgstr "Error en el bus" #: src/signame.c:127 msgid "Segmentation fault" msgstr "Fallo de segmentación" #: src/signame.c:130 msgid "Bad system call" msgstr "Llamada al sistema errónea" #: src/signame.c:133 msgid "Broken pipe" msgstr "Tubería rota" # ¿Temporizador? (así lo tradujo Enrique en glibc). sv # Suena como StarTrek. Mejor lo platico con él. A lo mejor # hasta lo convenzo. mm # Pues tendrás que darme razones em+ # Bueno, un alarm clock es una alarma del reloj. No tiene pierde. # Temporizador es una bonita palabra pero en donde dice que va a # sonar una campana para despertarte? mm #: src/signame.c:136 msgid "Alarm clock" msgstr "Alarma del reloj" #: src/signame.c:139 msgid "Terminated" msgstr "Finalizado" #: src/signame.c:142 msgid "User defined signal 1" msgstr "Señal 1 definida por el usuario" #: src/signame.c:145 msgid "User defined signal 2" msgstr "Señal 2 definida por el usuario" # Proceso hijo terminado em+ # Ok. mm #: src/signame.c:150 src/signame.c:153 msgid "Child exited" msgstr "Proceso hijo terminado" # Fallo. sv # Alimentación eléctrico em+ # Ok. mm #: src/signame.c:156 msgid "Power failure" msgstr "Falla de alimentación eléctrica" #: src/signame.c:159 msgid "Stopped" msgstr "Detenido" # Enrique hizo una preciosa traducción de este mensaje que, según él, # mejora el original. Era algo así como: # "Detenido (requiere entrada de terminal)". sv # Tiene razón se ve bien. mm # Requiere 'de';) , como te vea Santiago que le metes # otro 'de' otra vez ... em+ # Ok. mm #: src/signame.c:162 msgid "Stopped (tty input)" msgstr "Detenido (se requiere entrada de terminal)" # lo mismo, se requiere entrada de terminal , em+ # Ok. mm #: src/signame.c:165 msgid "Stopped (tty output)" msgstr "Detenido (se requiere salida de terminal)" # idem em+ #: src/signame.c:168 msgid "Stopped (signal)" msgstr "Detenido (se requiere una señal)" #: src/signame.c:171 msgid "CPU time limit exceeded" msgstr "Se agotó el tiempo de CPU permitido" #: src/signame.c:174 msgid "File size limit exceeded" msgstr "Se excedió el tamaño máximo de archivo permitido" #: src/signame.c:177 msgid "Virtual timer expired" msgstr "El contador de tiempo virtual ha expirado" # Nunca me enteré de cómo se traducía profile, pero perfil me suena raro. # ¿De dónde lo has sacado? sv # Es lo que quiere decir, ni modo. Perfil de un avión es plane profile. # Por cierto, lo más probable es que esta "traducción" haya que # modificarla para que sea entendible. mm # Esto lo tengo en glibc, lo mirare otro día. Estos mensajes no son # importantes em+ # Agregué unas palabras en aras de claridad (espero) mm #: src/signame.c:180 msgid "Profiling timer expired" msgstr "El contador de tiempo para la generación del perfil ha expirado" #: src/signame.c:186 msgid "Window changed" msgstr "La ventana ha cambiado" #: src/signame.c:189 msgid "Continued" msgstr "Continuado" #: src/signame.c:192 msgid "Urgent I/O condition" msgstr "Condición urgente de I/O" #: src/signame.c:199 src/signame.c:208 msgid "I/O possible" msgstr "Posible I/O" #: src/signame.c:202 msgid "SIGWIND" msgstr "SIGWIND" #: src/signame.c:205 msgid "SIGPHONE" msgstr "SIGPHONE" #: src/signame.c:211 msgid "Resource lost" msgstr "Recurso perdido" #: src/signame.c:214 msgid "Danger signal" msgstr "Señal de peligro" #: src/signame.c:217 msgid "Information request" msgstr "Petición de información" #: src/signame.c:220 msgid "Floating point co-processor not available" msgstr "Coprocesador de punto flotante no disponible" #: src/strcache.c:274 #, c-format msgid "" "\n" "%s No strcache buffers\n" msgstr "" "\n" "%s No hay «buffers» strcache\n" #: src/strcache.c:304 #, c-format msgid "" "\n" "%s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu " "B\n" msgstr "" "\n" "%s «buffers» strcache: %lu (%lu) / cadenas = %lu / almacenamiento = %lu B / " "promedio = %lu B\n" #: src/strcache.c:308 #, c-format msgid "" "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B\n" msgstr "" "%s «buffer» actual: tamaño = %hu B / utilizado = %hu B / número = %hu / " "promedio = %u B\n" #: src/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" #: src/strcache.c:322 #, c-format msgid "" "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n" msgstr "" "%s otros libre: total = %lu B / máx = %lu B / mín = %lu B / promedio = %hu " "B\n" #: src/strcache.c:326 #, c-format msgid "" "\n" "%s strcache performance: lookups = %lu / hit rate = %lu%%\n" msgstr "" "\n" "%s rendimiento de strcache: búsquedas = %lu / coincidencias = %lu%%\n" #: src/strcache.c:328 msgid "" "# hash-table stats:\n" "# " msgstr "" "# estadísticas de la tabla «hash»:\n" "# " # Lo he cmabiado em+ # Ok. Deberíamos platicarlo con Ulrich. mm #: src/variable.c:1653 msgid "automatic" msgstr "automática/o" #: src/variable.c:1656 msgid "default" msgstr "por defecto" #: src/variable.c:1659 msgid "environment" msgstr "entorno" # Sugerencia: No poner archivo. sv # Ok. mm #: src/variable.c:1662 msgid "makefile" msgstr "makefile" # 'bajo -e' = 'con -e activo' em+ # Ok. Esta inversión en los idiomas sajones se pega. mm #: src/variable.c:1665 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 #: src/variable.c:1668 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 #: src/variable.c:1671 msgid "'override' directive" msgstr "directiva 'override'" #: src/variable.c:1682 #, c-format msgid " (from '%s', line %lu)" msgstr " (de '%s', línea %lu):" # Bueno. Aquí un punto de discusión. Traduzco buckets por cubetas o # mejor las dejo tal cual? Opiniones bienvenidas. mm # 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 #: src/variable.c:1745 msgid "# variable set hash-table stats:\n" msgstr "# estadísticas del conjunto de variables de la tabla «hash»:\n" #: src/variable.c:1756 msgid "" "\n" "# Variables\n" msgstr "" "\n" "# Variables\n" #: src/variable.c:1760 msgid "" "\n" "# Pattern-specific Variable Values" msgstr "" "\n" "# Valores de variables específicas al patrón" #: src/variable.c:1774 msgid "" "\n" "# No pattern-specific variable values." msgstr "" "\n" "# No hay valores de variables específicas al patrón." #: src/variable.c:1776 #, c-format msgid "" "\n" "# %u pattern-specific variable values" msgstr "" "\n" "# %u valores de variables específicas al patrón" # ¿Qué te parece "atención"? Lo hemos usado mucho en otros programas. sv # Pero que bestia soy. Perdón por el desbarre. mm #: src/variable.h:229 #, c-format msgid "warning: undefined variable '%.*s'" msgstr "atención: la variable '%.*s' no ha sido definida" #: src/vmsfunctions.c:91 #, c-format msgid "sys$search() failed with %d\n" msgstr "fallo en sys$search() con %d\n" #: src/vmsjobs.c:244 #, 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" #: src/vmsjobs.c:681 #, c-format msgid "BUILTIN CD %s\n" msgstr "CD INTEGRADO %s\n" #: src/vmsjobs.c:1224 #, c-format msgid "DCL: %s\n" msgstr "DCL: %s\n" #: src/vmsjobs.c:1284 #, c-format msgid "Append output to %s\n" msgstr "Salida redirigida a %s\n" #: src/vmsjobs.c:1309 #, 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 #: src/vmsjobs.c:1322 #, c-format msgid "Executing %s instead\n" msgstr "En su lugar, se ejecuta %s\n" # ¿Y al revés?: Rutas de búsqueda VPATH. sv # Mejora #: src/vpath.c:603 msgid "" "\n" "# VPATH Search Paths\n" msgstr "" "\n" "# Rutas de búsqueda VPATH\n" # Rutas creo que queda mejor. sv # Ok. Es más común. mm #: src/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 #: src/vpath.c:622 #, c-format msgid "" "\n" "# %u 'vpath' search paths.\n" msgstr "" "\n" "# %u rutas de búsqueda 'vpath'.\n" #: src/vpath.c:625 msgid "" "\n" "# No general ('VPATH' variable) search path." msgstr "" "\n" "# No hay ruta de búsqueda general (variable 'VPATH')." #: src/vpath.c:631 msgid "" "\n" "# General ('VPATH' variable) search path:\n" "# " msgstr "" "\n" "# Ruta de búsqueda general (variable 'VPATH'):\n" "# " #: src/w32/w32os.c:44 #, c-format msgid "Jobserver slots limited to %d\n" msgstr "Ranuras del servidor de tareas limitads a %d\n" #: src/w32/w32os.c:60 #, c-format msgid "creating jobserver semaphore: (Error %ld: %s)" msgstr "creando semáforo del servidor de tareas: (Error %ld: %s)" #: src/w32/w32os.c:79 #, 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)" #: src/w32/w32os.c:82 #, c-format msgid "Jobserver client (semaphore %s)\n" msgstr "Cliente del servidor de tareas (semáforo %s)\n" #: src/w32/w32os.c:123 #, c-format msgid "release jobserver semaphore: (Error %ld: %s)" msgstr "liberar semáforo del servidor de tareas: (Error %ld: %s)" #: src/w32/w32os.c:194 #, c-format msgid "semaphore or child process wait: (Error %ld: %s)" msgstr "semáforo o proceso hijo en espera: (Error %ld: %s)" #~ msgid "%s: %s: Command not found\n" #~ msgstr "%s: %s: No se encontró el programa\n" #~ 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 # Suena, pero no es mejor. Tal y como esta escrito, incluso # 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 #~ msgid "%s: Shell program not found" #~ msgstr "%s: No se ha encontrado el `shell'" #~ msgid "%s is suspending for 30 seconds..." #~ msgstr "%s está suspendida por 30 segundos..." #~ msgid "done sleep(30). Continuing.\n" #~ msgstr "se hizo un sleep(30). Continuando.\n" #~ msgid "Unknown error %d" #~ msgstr "Error desconocido %d" # Ubicada :)) , que tal futura, a secas ? em+ # Bueno, sonaba como StarTrek, muy chido, pero acepto tu sugerencia. mm #~ 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" #~ msgid " terminal." #~ msgstr " terminal." # 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" #~ msgid "internal error: multiple --jobserver-fds options" #~ msgstr "error interno: hay varias opciones --jobserver-fds" # Propongo eliminar la palabra virtual. sv # Pero si es muy bonita. :) Bueno. Como ya platicamos puede que sea # una buena idea pero, por ahora la dejaría. mm #~ msgid "virtual memory exhausted" #~ msgstr "memoria virtual agotada" #~ msgid "write error" #~ msgstr "error al escribir" #~ msgid "BUILTIN RM %s\n" #~ msgstr "RM INTERCONSTRUIDO %s\n" make-4.3/po/de.gmo0000644000175000017500000013021613611136532010734 00000000000000Þ•  -Ð"Ñ"&î"#%#!.#-P#~# #-±#ß#'õ##$A$ X$f$„$P$;î$"*%M% i%tŠ%Lÿ%PL&9&M×&@%'of'oÖ'PF(l—(F)JK)€–)9*CQ*f•*_ü*;\+:˜+OÓ+J#,}n,uì,~b->á-M .Cn.2².Få.I,/;v/ ²/¼/"Ù/ ü/ 0 0&0=0 V0a0|00 ¡0«0º0Ã0%Ô0ú071;1J1Z1/r1¢1»1Ó1í1( 242&I2*p2&›2+Â2î2#3#'3)K3-u3,£3Ð3é3$þ39#4]43|4°41Í4ÿ4565F5!]5$5=¤5Gâ59*6d6m6"t6—6´6;Ò6!707+L7x7‹7¥7,¿7ì7% 8,08-]8 ‹8&¬8Ó8ò89!29.T9ƒ9“9ͨ9v:/–:Æ:&Ü: ;%$;J;j;~;1“; Å;Ñ;#è;# <L0<6}<´<6Ð<A=>I= ˆ=+’=*¾=é= > >1>2E> x>„>>"²>*Õ>?? ?@? \? h?r?Š? ª? ·?%Ä?ê?+ @$6@[@ z@„@ž@·@+Ñ@ý@!A U)QU;{U3·UëU&ôUV+VFV9XV’V©V'ÉVñV W1 W0?W1pW-¢W1ÐW2X5X UX*bX0X¾XÐX ßX$ìX,Y0>Y.oYžY,»Y1èY*ZEZ6eZ5œZ,ÒZ"ÿZ""[3E[)y[6£[-Ú[&\/\M\\\0v\§\=Ç\1],7]Hd]*­]"Ø]/û]8+^7d^œ^°^ À^…Î^T`&r`™` «`'¶`2Þ`a(%a4Na%ƒa+©a#Õaùa b.bJbZjb>Åb:c%?c*eccPdZodKÊdeD¤exéeŸbf•gq˜gP hK[h‚§hJ*iLuiwÂib:jAjAßj…!k€§k†(lk¯l‚mLžm‰ëmNun5Änˆún^ƒo@âo #p*.p0Yp Šp˜p³pÃpÞp ûp-q6qLq bq nq zq…q)—qÁqEÊqr&r 9rFZr%¡rÇrår"s8%s^s8us>®s1ís;t[t6tt8«t/ät-u/Buruu$§uDÌuv>0v0ovc v/w4wSw iw*Šw5µwCëwH/xAxxºxÃx.Êx'ùx4!yIVy/ y(ÐyDùy>z^z}z,šz#Çz+ëz,{-D{&r{(™{#Â{!æ{!|-*|AX|š|¬|ãÃ|)§}XÑ}*~2A~+t~3 ~,Ô~F8 !:¯9êx$€K€&é€1NBE‘ ×*ä-‚=‚ [‚g‚2}‚5°‚ æ‚ñ‚ƒ3,ƒ.`ƒƒžƒ0´ƒ+僄 !„,„0L„ }„‰„7„5Õ„K …:W…’… ²…6¾…;õ…;1†8m†'¦†5Ά ‡#‡6‡?‡N‡f‡%{‡ ¡‡0‡;ó‡?/ˆ3oˆ$£ˆ-Ȉ$öˆ=‰+Y‰=…‰É3Ô‰=Š!FŠ:hŠ £Š ­ŠºŠÒŠFãŠ*‹B‹Z‹r‹F’‹IÙ‹#Œ AŒ,bŒŒ&¤Œ?ËŒ U*;€P¼ Ž]&Ž8„Ž?½ŽCýŽ)A7k-£Ñ.×9T@ •I¡)ë-‘ C‘IN‘ ˜‘G¥‘Fí‘F4’L{’È’>â’5!“W“\“,u“+¢“,Γ.û“Y*”J„”]Ï”#-•1Q•<ƒ•CÀ•=–CB–1†–0¸–=é–-'—U—q—z—‚—2–—0É—1ú— ,˜7˜K˜b˜7z˜I²˜Nü˜9K™4…™º™FÓ™8š3Sš3‡š2»š.îš›)9›c›"{›ž›µ›Ä›7Ó›1 œ=œIXœ¢œH¾œ E[Yeµež0žZ²ž Ÿ !Ÿ/Ÿ2NŸŸŠŸ3©ŸÝŸòŸûŸ  2$ 6W 5Ž Ä ä ÿ ;¡,U¡I‚¡Ì¡å¡ÿ¡¢+7¢1c¢<•¢uÒ¢"H£+k£2—£JÊ£r¤ˆ¤9‘¤ˤ!ᤥ?¥U¥-n¥6œ¥Ó¥é¥Yï¥^I¦^¨¦>§BF§>‰§/ȧø§8¨>A¨€¨š¨ ²¨"À¨2ã¨7©CN©$’©+·©4ã©Fª"_ªI‚ªC̪R«)c«&«O´«3¬Y8¬F’¬)Ù¬4­8­K­<g­&¤­^Ë­@*®=k®b©®A ¯)N¯4x¯J­¯Hø¯A°`°|°†|•-Þa4Båuh„Ù'`S‘„J‚H±\ÍDWœnnPÒ?SX&(V 3®Š§~…¬RÈ@’/ñ‚´kgœTéj]s3 ×^/=…“ðGZ ÌO)êÎAb:ó[ :€‡. þÏÜrމC “ef7–º¿pq UŠ|9 îŸ;ˆšoš0L~¯¸‹Mh¾OLÛ’v .ƒö™=Ë­_ÓN‰ž›–@¥ `lçwj³ôÕ©•8»5ýzdtEõz!«ŸŽeÉIk0·s!#>+uä%"F÷¹‘-;&A^c$8â”CdÑVt{l+mZ˜¶ YúáŒ<ØèˆM %¨¦µ”žNòvIT1›Ä6ÂKæ }˜,xßH¤½bpÊ¡Å"Á—oÿc#Ö2ªQÐx°6üÇB¢UDÚë1mi{?'øÆùÃݼí4‹Kiy_ûy}²2QRrfà£g9)ã*ÔY‡>ƒ($XwÀ<q\7JP]WŒ*€ aFE™ì[ï5†—G, # %u 'vpath' search paths. # %u pattern-specific variable values # Directories # Files # Finished Make data base on %s # General ('VPATH' variable) search path: # # Implicit Rules # Make data base, printed on %s # No general ('VPATH' variable) search path. # No implicit rules. # No pattern-specific variable values. # Pattern-specific Variable Values # VPATH Search Paths # Variables # files hash-table stats: # %s No strcache buffers %s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu B %s strcache performance: lookups = %lu / hit rate = %lu%% Counted %d args in failed launch This program built for %s This program built for %s (%s) Unhandled exception filter called from program %s ExceptionCode = %lx ExceptionFlags = %lx ExceptionAddress = 0x%p --debug[=FLAGS] Print various types of debugging information. --no-print-directory Turn off -w, even if it was turned on implicitly. --trace Print tracing information. --warn-undefined-variables Warn when an undefined variable is referenced. -B, --always-make Unconditionally make all targets. -C DIRECTORY, --directory=DIRECTORY Change to DIRECTORY before doing anything. -I DIRECTORY, --include-dir=DIRECTORY Search DIRECTORY for included makefiles. -L, --check-symlink-times Use the latest mtime between symlinks and target. -O[TYPE], --output-sync[=TYPE] Synchronize output of parallel jobs by TYPE. -R, --no-builtin-variables Disable the built-in variable settings. -S, --no-keep-going, --stop Turns off -k. -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE Consider FILE to be infinitely new. -b, -m Ignored for compatibility. -d Print lots of debugging information. -e, --environment-overrides Environment variables override makefiles. -f FILE, --file=FILE, --makefile=FILE Read FILE as a makefile. -h, --help Print this message and exit. -i, --ignore-errors Ignore errors from recipes. -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no arg. -k, --keep-going Keep going when some targets can't be made. -l [N], --load-average[=N], --max-load[=N] Don't start multiple jobs unless load is below N. -n, --just-print, --dry-run, --recon Don't actually run any recipe; just print them. -o FILE, --old-file=FILE, --assume-old=FILE Consider FILE to be very old and don't remake it. -p, --print-data-base Print make's internal database. -q, --question Run no recipe; exit status says if up to date. -r, --no-builtin-rules Disable the built-in implicit rules. -s, --silent, --quiet Don't echo recipes. -t, --touch Touch targets instead of remaking them. -v, --version Print the version number of make and exit. -w, --print-directory Print the current directory. Date %s Ignoring VPATH name '%s'. uid = %d, gid = %d, mode = 0%o. (built-in): (core dumped) (don't care) (from '%s', line %lu) (from '%s', line %lu): (ignored) (name might be truncated) (no default goal) (no ~ expansion) (remote) (search path) files, impossibilities impossibilities in %lu directories. so far.# A default, MAKEFILES, or -include/sinclude makefile.# Also makes:# Builtin rule# Command line target.# Dependencies recipe running (THIS IS A BUG).# Failed to be updated.# File does not exist.# File has been updated.# File has not been updated.# File is an intermediate prerequisite.# File is very old.# Implicit rule search has been done.# Implicit rule search has not been done.# Implicit/static pattern stem: '%s' # Invalid value in 'command_state' member!# Last modified %s # Modification time never checked.# Needs to be updated (-q is set).# Phony target (prerequisite of .PHONY).# Precious file (prerequisite of .PRECIOUS).# Recipe currently running (THIS IS A BUG).# Successfully updated.# recipe to execute# %s (device %d, inode [%d,%d,%d]): # %s (device %d, inode [%d,%d,%d]): could not be opened. # %s (device %ld, inode %ld): # %s (device %ld, inode %ld): could not be opened. # %s (key %s, mtime %I64u): # %s (key %s, mtime %I64u): could not be opened. # %s: could not be stat'd. # No 'vpath' search paths.# Not a target:# hash-table stats: # # variable set hash-table stats: $SHELL changed (was '%s', now '%s') %s (line %d) Bad shell context (!unixy && !batch_mode_shell) %s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B %s other used: total = %lu B / count = %lu / avg = %lu B %s%s: %s%s: %s%s: Entering an unknown directory %s: Entering directory '%s' %s: Field '%s' not cached: %s%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p) %s: Leaving an unknown directory %s: Leaving directory '%s' %s: Timestamp out of range; substituting %s%s: failed to load%s: illegal option -- %c %s: invalid option -- %c %s: option '%c%s' doesn't allow an argument %s: option '%s' is ambiguous %s: option '%s' requires an argument %s: option '--%s' doesn't allow an argument %s: option '-W %s' doesn't allow an argument %s: option '-W %s' is ambiguous %s: option requires an argument -- %c %s: target '%s' does not exist%s: unrecognized option '%c%s' %s: unrecognized option '--%s' %s: update target '%s' due to: %s%s: user %lu (real %lu), group %lu (real %lu) %sBuilt for %s %sBuilt for %s (%s) %sLicense GPLv3+: GNU GPL version 3 or later %sThis is free software: you are free to change and redistribute it. %sThere is NO WARRANTY, to the extent permitted by law. %sNo rule to make target '%s'%s%sNo rule to make target '%s', needed by '%s'%s%s[%s: %s] Error %d%s%s[%u]: Entering an unknown directory %s[%u]: Entering directory '%s' %s[%u]: Leaving an unknown directory %s[%u]: Leaving directory '%s' '%s' is up to date.'override' directive*** Archive member '%s' may be bogus; not deleted*** Break. *** Deleting file '%s'*** Deleting intermediate file '%s'*** Waiting for unfinished jobs....*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp*** [%s] Archive member '%s' may be bogus; not deleted*** [%s] Deleting file '%s'*** mixed implicit and normal rules: deprecated syntax-O[TYPE] (--output-sync[=TYPE]) is not configured for this build.-warning, you may have to re-enable CTRL-Y handling from DCL. . Stop. .DEFAULT_GOAL contains more than one target.LIBPATTERNS element '%s' is not a pattern; using VPATH name '%s'AbortedAccess violation: read operation at address 0x%p Access violation: write operation at address 0x%p Alarm clockAppend %.*s and cleanup Append output to %s Avoiding implicit rule recursion. BUG: num_pattern_rules is wrong! %u != %uBUILTIN CD %s Bad system callBatch file contents: @echo off Batch file contents:%s %s Broken pipeBus errorCPU time limit exceededCannot create a temporary file Child accessChild exitedCircular %s <- %s dependency dropped.Cleaning up temp batch file %s Cleaning up temp batch file %s failed (%d) Cleaning up temporary batch file %s Considering target file '%s'. ContinuedCould not restore stderr Could not restore stdin Could not restore stdout Couldn't change back to original directory.CreatePipe() failed (e=%ld) Creating temporary batch file %s Current timeCustoms won't export: %s DCL: %s Danger signalEMT trapEmpty function nameEmpty symbol name for load: %sExecuting %s instead Failed to load symbol %s from %s: %sFailed to open global symbol table: %sFailed to remake makefile '%s'.Failed to remake target file '%s'. File '%s' does not exist. File '%s' was considered already. File size limit exceededFinished prerequisites of target file '%s'. Finished updating file '%s'. Floating point co-processor not availableFloating point exceptionFound an implicit rule for '%s'. Found prerequisite '%s' as VPATH '%s' Function name too long: %sGiving up on target file '%s'. HangupI/O possibleIOT trapIllegal InstructionIncluded makefile '%s' was not found.Information requestInitialized accessInterruptInvalid function name: %sInvalid maximum argument count (%u) for function %sInvalid minimum argument count (%u) for function %sJobserver client (fds %d,%d) Jobserver client (semaphore %s) Jobserver slots limited to %d KilledLive child %p (%s) PID %s %s Loaded object %s is not declared to be GPL compatibleLoading symbol %s from %s Looking for a rule with intermediate file '%s'. Looking for an implicit rule for '%s'. Looking for archive-member implicit rule for '%s'. Make accessMakefile '%s' might loop; not remaking it. Makefile '%s' was not foundMakefile from standard input specified twice.Making '%s' due to always-make flag. Malformed target-specific variable definitionMember '%s'%s: %ld bytes at %ld (%ld). Must remake target '%s'. NoNo implicit rule found for '%s'. No need to remake target '%s'No recipe for '%s' and no prerequisites actually changed. No targetsNo targets specified and no makefile foundNothing to be done for '%s'.Obtained token for child %p (%s). Options: Parallel jobs (-j) are not supported on this platform.Power failurePrerequisite '%s' is newer than target '%s'. Prerequisite '%s' is older than target '%s'. Prerequisite '%s' is order-only for target '%s'. Prerequisite '%s' of target '%s' does not exist. Profiling timer expiredPruning file '%s'. Putting child %p (%s) PID %s%s on the chain. QuitRe-executing[%u]:Reading makefile '%s'Reading makefiles... Reaping losing child %p PID %s %s Reaping winning child %p PID %s %s Recently tried and failed to update file '%s'. Recipe for '%s' will be ignored in favor of the one for '%s'.Recipe for file '%s' was found by implicit rule search,Recipe has too many lines (%ud)Recipe of '%s' is being run. Recipe was specified for file '%s' at %s:%lu,Recursive variable '%s' references itself (eventually)Rejecting impossible implicit prerequisite '%s'. Rejecting impossible rule prerequisite '%s'. Released token for child %p (%s). Removing child %p PID %s%s from chain. Report bugs to Resetting to single job (-j1) mode.Resource lostSIGPHONESIGWINDSegmentation faultSkipping UTF-8 BOM in makefile '%s' Skipping UTF-8 BOM in makefile buffer Still updating file '%s'. StoppedStopped (signal)Stopped (tty input)Stopped (tty output)Successfully remade target file '%s'. Symbolic links not supported: disabling -L.Target '%s' is double-colon and has no prerequisites. Target '%s' not remade because of errors.Target file '%s' needs to be remade under -q. TerminatedThe 'load' operation is not supported on this platform.The prerequisites of '%s' are being made. Trace/breakpoint trapTrying implicit prerequisite '%s'. Trying pattern rule with stem '%.*s'. Trying rule prerequisite '%s'. Updating goal targets.... Updating makefiles.... Urgent I/O conditionUsage: %s [options] [target] ... User accessUser defined signal 1User defined signal 2Using default commands for '%s'. Using default recipe for '%s'. Virtual timer expiredWarning: File '%s' has modification time %s s in the futureWindow changedattempt to use unsupported feature: '%s'automaticbut '%s' is now considered the same file as '%s'.can't allocate %lu bytes for hash table: memory exhaustedcan't rename double-colon '%s' to single-colon '%s'can't rename single-colon '%s' to double-colon '%s'cannot enforce load limit: cannot enforce load limits on this operating systemclose: %s: %scommand linecreating jobs pipecreating jobserver semaphore: (Error %ld: %s)defaultduping jobs pipeempty string invalid as file nameempty variable nameenvironmentenvironment under -eextraneous '%s'extraneous text after '%s' directiveextraneous text after 'define' directiveextraneous text after 'endef' directivefile: invalid file operation: %sfile: missing filenamefile: too many argumentsfind_and_set_shell() path search set default_shell = %s find_and_set_shell() setting default_shell = %s first argument to 'word' function must be greater than 0fopen (temporary file)fwrite (temporary file)guile: Evaluating '%s' guile: Expanding '%s' init jobserver pipeinsufficient number of arguments (%d) to function '%s'internal error: invalid --jobserver-auth string '%s'internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)invalid syntax in conditionaljobserver pipelinelbr$ini_control() failed with status = %dlbr$set_module() failed to extract module info, status = %dmake reaped child pid %s, still waiting for pid %s makefilemissing 'endef', unterminated 'define'missing 'endif'missing rule before recipemissing separatormissing separator (did you mean TAB instead of 8 spaces?)missing target patternmixed implicit and normal rulesmixed implicit and static pattern rulesmultiple target patternsnono more file handles: could not duplicate stderr no more file handles: could not duplicate stdin no more file handles: could not duplicate stdout non-numeric first argument to 'word' functionnon-numeric first argument to 'wordlist' functionnon-numeric second argument to 'wordlist' functiononly one 'else' per conditionalopen: %s: %sprerequisites cannot be defined in recipesprocess_easy() failed to launch process (e=%ld) pselect jobs piperead jobs piperead: %s: %srecipe commences before first targetrelease jobserver semaphore: (Error %ld: %s)semaphore or child process wait: (Error %ld: %s)spawnvpe: environment space might be exhaustedsys$search() failed with %d target '%s' doesn't match the target patterntarget '%s' given more than once in the same ruletarget file '%s' has both : and :: entriestarget pattern contains no '%%'the '%s%s' option requires a non-empty string argumentthe '-%c' option requires a positive integer argumenttouch archive member is not available on VMStouch: '%s' is not a valid archivetouch: Archive '%s' does not existtouch: Bad return code from ar_member_touch on '%s'touch: Member '%s' does not exist in '%s'unable to open library '%s' to lookup member status %dunimplemented on this platform: function '%s'unknown debug level specification '%s'unknown output-sync type '%s'unknown signalunlink (temporary file): unterminated call to function '%s': missing '%c'unterminated variable referencewarning: Clock skew detected. Your build may be incomplete.warning: NUL character seen; rest of line ignoredwarning: ignoring old recipe for target '%s'warning: jobserver unavailable: using -j1. Add '+' to parent make rule.warning: overriding recipe for target '%s'warning: undefined variable '%.*s'windows32_openpipe(): process_init_fd() failed windows32_openpipe: DuplicateHandle(Err) failed (e=%ld) windows32_openpipe: DuplicateHandle(In) failed (e=%ld) write error: stdoutwrite jobserverwrite: %s: %sProject-Id-Version: make 4.2.1 Report-Msgid-Bugs-To: bug-make@gnu.org PO-Revision-Date: 2016-06-20 15:03+0200 Last-Translator: Philipp Thomas Language-Team: German Language: de MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. # %u „vpath“-Suchpfade. # %u musterspezifische Variablenwerte # Verzeichnisse # Dateien # „Make“-Datenbank beendet am: %s # Allgemeiner Suchpfad (Variable „VPATH“): # # Implizite Regeln # „Make“-Datenbank; erstellt am: %s # Kein allgemeiner Suchpfad (Variable „VPATH“). # Keine impliziten Regeln vorhanden. # Keine musterspezifischen Variablenwerte. # Musterspezifische Variablenwerte # VPATH-Suchpfade # Variablen # Statistik der Hash-Tabelle für Dateien: # %s Keine Puffer für strcache %s Puffer für strcache: %lu (%lu) / Zeichenketten = %lu / Speicher = %lu B / ø = %lu B %s Leistung von strcache: Suchen = %lu / Trefferrate = %lu%% %d Argumente gehörten zum fehlgeschlagenen Prozessstart Diese Programm wurde für %s gebaut Diese Programm wurde für %s (%s) gebaut Das Programm %s rief einen Ausnahmefilter auf, der nicht bearbeitet wurde ExceptionCode = %lx ExceptionFlags = %lx ExceptionAddress = 0x%p --debug[=KENNUNGEN] Verschiedene Arten von Debug-Information ausgeben --no-print-directory -w abschalten, selbst wenn es implizit eingeschaltet wurde. --trace Viele Informationen zur Fehlersuche ausgeben --warn-undefined-variables Eine Warnung ausgeben, wenn eine undefinierte Variable referenziert wird. -B, --always-make Alle Ziele ohne Bedingungen erstellen -C VERZEICHNIS, --directory=VERZEICHNIS In VERZEICHNIS wechseln, bevor etwas getan wird -I VERZEICHNIS, --include-dir=VERZEICHNIS VERZEICHNIS nach eingebundenen Makedateien durchsuchen -L, --check-symlink-times Den neueste Modifizierungszeit zwischen symbolischer Verküpfung und dem Ziel verwenden. -O[TYP], --output-sync[=TYP] Synchronisiert die Ausgabe paralleler Jobs per TYP. -R, --no-builtin-variables Die eingebauten Variablenbelegungen deaktivieren. -S, --no-keep-going, --stop -k abschalten. -W DATEI, --what-if=DATEI, --new-file=DATEI, --assume-new=DATEI DATEI als unendlich neu erachten. -b, -m Wird aus Kompatibilitätsgründen ignoriert -d Viele Informationen zur Fehlersuche ausgeben. -e, --environment-overrides Umgebungsvariablen überschreiben „make“-Steuerdateien -f DATEI, --file=DATEI, --makefile=DATEI DATEI als Makefile lesen -h, --help Diese Meldung ausgeben und beenden -i, --ignore-errors Fehler in Regeln werden irgnoriert -j [N], --jobs[=N] N Jobs gleichzeitig erlauben; unbegrenzte Anzahl von Jobs ohne Argument -k, --keep-going Weiterlaufen, auch wenn einige Targets nicht erzeugt werden konnten -l [N], --load-average[=N], --max-load[=N] Keine Jobs starten bevor die Auslastung nicht unter N ist. -n, --just-print, --dry-run, --recon Keine Regel ausführen, nur ausgeben. -o DATEI, --old-file=DATEI, --assume-old=DATEI DATEI als sehr alt ansehen und nicht neu erzeugen. -p, --print-data-base Die interne Datenbank von „make“ ausgeben -q, --question Keine Regel ausführen; der Exit-Status gibt an, ob die Dateien aktuell sind -r, --no-builtin-rules Die eingebauten impliziten Regeln deaktivieren. -s, --silent, --quiet Regeln nicht ausgeben. -t, --touch Die Ziele werden nur als aktualisiert markiert, nicht tatsächlich erneuert -v, --version Die Versionsnummer von „make“ ausgeben und Programm beenden -w, --print-directory Das aktuelle Verzeichnis ausgeben Datum %s Der VPATH-Name „%s“ wird ignoriert. Nutzer-ID = %d, Gruppen-ID = %d, Modus = 0%o. (eingebaut): (Speicherauszug erstellt) (macht nichts) (aus „%s“, Zeile %lu) (aus „%s“, Zeile %lu): (ignoriert) (der Name ist möglicherweise abgeschnitten) (kein Standard-Ziel) (keine ~-Auflösung) (entfernt) (Suchpfad) Dateien, Unmöglichkeiten Unmöglichkeiten in %lu Verzeichnissen. bisher.# Eine standardmässige, MAKEFILES oder -include/sinclude Makedatei.# Erzeugt außerdem:# Eingebaute Regel# Kommandozeilen-Ziel (target).# Derzeit läuft die Regel für Abhängigkeiten (DAS IST EIN FEHLER).# Aktualisierung ist fehlgeschlagen.# Die Datei existiert nicht.# Datei wurde aktualisiert.# Datei wurde nicht aktualisiert.# Datei ist ein Zwischenschritt in den Abhängigkeiten.# Datei ist sehr alt.# Die Suche nach impliziten Regeln wurde durchgeführt.# Die Suche nach impliziten Regeln wurde nicht durchgeführt.# Wurzel impliziter/statischer Muster: „%s“ # Ungültiger Wert im „command_state“-Strukturelement!# Zuletzt geändert %s # Zeit der letzten Änderung wurde nicht überprüft.# Eine Aktualisierung ist notwendig (-q ist angegeben).# Vorgetäuschtes Ziel (benötigt von .PHONY).# Wertvolle Datei (benötigt von .PRECIOUS).# Derzeit laufende Regel (DAS IST EIN FEHLER).# Erfolgreich aktualisiert.# Auszuführende Regel# %s (Gerät %d, Inode [%d,%d,%d]): # %s (Gerät %d, Inode [%d,%d,%d]): Konnte nicht geöffnet werden. # %s (Gerät %ld, Inode %ld): # %s (Gerät %ld, Inode %ld): Konnte nicht geöffnet werden. # %s (Schlüssel %s, letzte Änderung %%I64u): # %s ( Schlüssel %s, letzte Änderung %I64u): Öffnen scheiterte. Konnte nicht geöffnet werden. # %s: Status konnte nicht festgestellt werden. # Keine „vpath“-Suchpfade.# Dies ist kein Ziel:# Statistik für Hashtabelle: # # Hashtabellen-Statistik für Variablen: $SHELL gewechselt (war „%s“, ist jetzt „%s“) %s (Zeile %d) Falscher Shell-Kontext (!unixy && !batch_mode_shell) %s andere freie: Summe = %lu B / Max = %lu B / Min = %lu B / ø = %hu B %s andere verwendete: Summe = %lu B / Anzahl = %lu / /ø = %lu B %s%s: %s%s: %s%s: ein unbekanntes Verzeichnis wird betreten %s: Verzeichnis „%s“ wird betreten %s: Feld „%s“ wird nicht zwischengespeichert: %s%s: bekam Unterbrechung/Ausnahme signalisiert (Kode = 0x%lx, Adr = 0x%p) %s: ein unbekanntes Verzeichnis wird verlassen %s: Verzeichnis „%s“ wird verlassen %s: Zeitstempel außerhalb des Gültigkeitsbereichs; %s wird ersetzt%s: konnte nicht geladen werden%s: unzulässige Option -- %c %s: ungültige Option -- %c %s: Option „%c%s“ erlaubt kein Argument %s: Option „%s“ ist mehrdeutig %s: Option „%s“ erfordert ein Argument %s: Option „--%s“ erlaubt kein Argument %s: Option „-W %s“ erlaubt kein Argument %s: Option „-W %s“ ist mehrdeutig %s: Option erfordert ein Argument -- %c %s: Archiv „%s“ existiert nicht%s: unbekannte Option „%c%s“ %s: unbekannte Option „--%s“ %s: Ziel „%s“ wird aktualisiert wegen: %s%s: Nutzer %lu (tatsächlich %lu), Gruppe %lu (tatsächlich %lu) %sGebaut für %s %sGebaut für %s (%s) %sLizenz GPLv3+: GNU GPL Version 3 oder später %sDies ist freie Software: Sie können sie nach Belieben ändern und weiter verteilen. %sSoweit es die Gesetze erlauben gibt es KEINE GARANTIE. %sKeine Regel, um „%s“ zu erstellen%s%sKeine Regel vorhanden, um das Ziel „%s“, benötigt von „%s“, zu erstellen%s%s[%s: %s] Fehler %d%s%s[%u]: Ein unbekanntes Verzeichnis wird betreten %s[%u]: Verzeichnis „%s“ wird betreten %s[%u]: Ein unbekanntes Verzeichnis wird verlassen %s[%u]: Verzeichnis „%s“ wird verlassen „%s“ ist bereits aktuell.„override“-Anweisung*** Archiveintrag „%s“ ist möglicherweise falsch; nicht gelöscht*** Abbruch. *** Datei „%s“ wird gelöscht*** Löschen der übergangsweise angelegten Datei „%s“*** Es wird auf noch nicht beendete Prozesse gewartet....*** Warnung: mit .LOW_RESOLUTION_TIME gekennzeichnete Datei „%s“ hat einen hochaufgelösten Zeitstempel*** [%s] Archiveintrag „%s“ ist möglicherweise falsch; nicht gelöscht*** [%s] Datei „%s“ wird gelöscht*** Implizite und normale Regeln wurden vermischt-O[TYPE] (--output-sync[=TYPE]) ist für diese Bau-Aufgabe nicht konfiguriert.-Warnung: Vielleicht müssen Sie STRG-Y aus DCL wieder ermöglichen. . Schluss. .DEFAULT_GOAL beinhaltet mehr als ein Ziel.LIBPATTERNS Element „%s“ ist kein Muster; benutze VPATH-Name „%s“Abgebrochen (Aborted)Zugriffsverletzung: Leseoperation an Adresse 0x%p Zugriffsverletzung: Schreiboperation an Adresse 0x%p Wecksignal%.*s anhängen und aufräumen Ausgabe nach %s umgeleitet Rekursion in den impliziten Regeln wird vermieden. BUG: „num_pattern_rules“ falsch! %u != %uBUILTIN CD %s Falscher SystemaufrufInhalt der Stapelverarbeitungsdatei: @echo off Inhalt der Stapelverarbeitungsdatei:%s %s Zerstörte PipeBus-FehlerCPU-Zeitschranke überschrittenEine temporäre Datei kann nicht erzeugt werden KindprozessKindprozess beendetZirkuläre Abhängigkeit %s <- %s wird nicht verwendet.Lösche temporäre Stapelverarbeitungsdatei „%s“ Löschen der temporären Stapelverarbeitungsdatei „%s“ scheiterte (%d) Die temporäre Stapelverarbeitungsdatei %s wird gelöscht Betrachte Ziel-Datei „%s“. FortgesetztStandardfehler konnte nicht wieder hergestellt werden Die Standardeingabe konnte nicht wieder hergestellt werden Die Standardausgabe konnte nicht wieder hergestellt werden Konnte nicht in das ursprüngliche Verzeichnis wechseln.„CreatePipe()“ schlug fehl (e=%ld) Temporäre Stapelverarbeitungsdatei %s wird erstellt Aktuelle ZeitCustoms wird nicht exportieren: %s DCL: %s GefahrensignalEMT abfangen (EMT trap)Leerer FunktionsnameZu ladedender Symbolname ist leer: %s%s wird stattdessen ausgeführt Symbol %s konnte nicht aus %s geladen werden: %sDie globale Symboltabelle konnte nicht geöffnet werden: %sKonnte die „make“-Steuerdatei „%s“ nicht neu erstellen.Fehler beim Aktualisieren der Ziel-Datei „%s“. Die Datei „%s“ existiert nicht. Die Datei „%s“ wurde bereits betrachtet. Dateigrößenschranke überschrittenFertig mit den Voraussetzungen für die Ziel-Datei „%s“. Aktualisierung der Datei „%s“ beendet. Es ist kein Koprozessor für Fließkommaoperationen vorhandenGleitkommafehlerEine implizite Regel für „%s“ wurde gefunden. Die Voraussetzung „%s“ wurde als VPATH „%s“ gefunden Der Funktionsname ist zu lang: %sDie Arbeit an der Target-Datei „%s“ wurde aufgegeben. AufgelegtI/O möglichIOT abfangen (IOT trap)Illegaler BefehlDie eingebundene „make“-Steuerdatei „%s“ wurde nicht gefunden.InformationsanforderungInitialisierter ZugriffAbgebrochen (Interrupt)Unzulässiger Funktionsname: %sUngülte maximale Anzahl an Argumenten (%u) für die Funktion „%s“Ungültige minimale Anzahl von Argumenten (%u) für die Funktion „%s“Jobserver-Klient (fds %d,%d) Jobserver-Klient (Semaphore %s) Zeitschlitze der Jobservers auf %d begranzt Abgebrochen (Killed)Aktiver Kindprozess %p (%s) PID %s %s Ds geladede Objekt %s wurde nicht als GPL-kompatibel deklariertSymbol %s wird aus %s geladen Es wird nach einer Regel mit der übergangsweise verwendeten Datei „%s“ gesucht. Es wird nach einer impliziten Regel für „%s“ gesucht. Es wird nach einer impliziten Regel für Archiveinträge für „%s“ gesucht. Zugriff durch „make“„make“-Steuerdatei „%s“ könnte eine Schleife enthalten; es wird nicht neu erzeugt. Die „make“-Steuerdatei „%s“ wurde nicht gefundenDas Makefile wurde zweimal über die Standardeingabe angegeben.„%s“ wird aufgrund der Keinnzeichnung als always-make erzeugt. Falsche Ziel-bezogene VariablendefinitionEintrag „%s“ %s: %ld Bytes an Position %ld (%ld). Das Target „%s“ muss neu erzeugt werden. KeineKeine implizite Regel für „%s“ gefunden. Es ist nicht notwendig, das Ziel „%s“ neu zu erzeugenKein Kommando für „%s“ und keine Voraussetzung wurde tatsächlich verändert. Keine ZieleEs wurden keine Ziele angegeben und keine „make“-Steuerdatei gefundenFür das Ziel „%s“ ist nichts zu tun.Token für den Kindprozess %p (%s) erhalten. Optionen: Parallele Abarbeitung (-j) wird auf dieser Plattform nicht unterstützt.StromausfallDie Datei „%s“ ist jünger als das davon abhängige Ziel „%s“. Die Datei „%s“ ist älter als das davon abhängige Ziel „%s“. Die Datei „%s“ ist älter als das davon abhängige Ziel „%s“. Die Datei „%s“, Voraussetzung für das Ziel „%s“, existiert nicht. Profiling Timer erloschenDie Datei „%s“ wird "gestutzt" (der Abhängigkeitsgraph). Nehme Kindprozess %p (%s) PID %s%s in die Kette auf. QuitErneute Ausführung[%u]:„make“-Steuerdatei „%s“ wird gelesen„make“-Steuerdateien werden gelesen... Sammle erfolglosen Kindprozess %p PID %s %s Sammle erfolgreichen Kindprozess %p PID %s %s Es wurde kürzlich versucht, die Datei „%s“ zu aktualisieren, dies schlug aber fehl. Die Regel für „%s“ wird ignoriert, die für „%s“ wird bevorzugt.Die Regel für die Datei „%s“ wurden aufgrund der Suche nach impliziten Regeln gefunden,Die Regel hat zu viele Zeilen (%ud)Die Regel für „%s“ wird gerade ausgeführt. Die Regel für die Datei „%s“ wurde in %s angegeben:%lu,Rekursive Variable „%s“ referenziert sich (schließlich) selbstUnmögliche implizite Voraussetzung „%s“ wird abgelehnt. Unmögliche Voraussetzung „%s“ für eine Regel wird abgelehnt. Token des Kindprozesses %p PID (%s) freigegeben. Entferne Kindprozess %p PID %s%s aus der Kette. Fehlermeldungen (auf Englisch) an senden. Umstellung auf Einzel-Job-Verarbeitung (-j1).Ressource verloren gegangenSIGPHONESIGWINDAdressierungsdefektUTF-8 BOM in makefile „%s“ wird übersprungen UTF-8 BOM im makefile-Puffer wird übersprungen Die Datei „%s“ wird immer noch aktualisiert. AngehaltenAngehalten (signal)Angehalten (tty input)Angehalten (tty output)Die Zieldatei „%s“ wurde erfolgreich aktualisiert. Symbolische Verknfungen werdfen nicht unterstützt: -L wird abgeschaltet.Das Ziel „%s“ hat einen doppelten Doppelpunkt und keine Voraussetzungen. Das Ziel „%s“ wurde wegen Fehlern nicht aktualisiert.Zieldatei „%s“ muss bei -q aktualisiert werden. Abgebrochen (Terminated)Die Operation „load“ wird auf dieser Plattform nicht unterstützt.Die Voraussetzungen von „%s“ werden fertiggestellt. Verfolgen/anhalten abfangen (Trace/breakpoint trap)Implizite Voraussetzung „%s“ wird ausprobiert. Muster-Regel mit Wurzel „%.*s“ wird probiert. Regel-Voraussetzung „%s“ wird auprobiert. Aktualisieren der Ziele... Aktualisiere „make“-Steuerdateien... Dringende I/O-BedingungAufruf: %s [Optionen] [Ziele] ... Zugriff durch BenutzerNutzersignal 1Nutzersignal 2Die Standard-Kommandos für „%s“ werden verwendet. Die Standard-Regel für „%s“ wird verwendet. Virtueller Timer erloschenWarnung: Datei „%s“ hat hat in der Zukunft liegende Änderungszeit %sFenster hat sich verändertVersuch, eine nicht unterstützte Funktionalität zu verwenden: „%s“automatischaber „%s“ wird jetzt als dieselbe Datei wie „%s“ betrachtet.es können keine %lu Bytes für die Hashtabelle reserviert werden: Hauptspeicher erschöpft„%s“ mit doppeltem Doppelpunkt kann nicht in „%s“ mit einfachem Doppelpunkt geändert werden„%s“ mit einfachem Doppelpunkt kann nicht in „%s“ mit doppeltem Doppelpunkt geändert werdenLasteinschränkung kann nicht erzwungen werden: Auf diesem Betriebssystem kann die Einhaltung der Lastbeschränkung nicht erzwungen werdenschließend: %s: %sKommandozeileÖffnen der Pipe für die JobsJobserver-Semaphore wird erzeugt: (Fehler %ld: %s)StandardÖffnen der Pipe für die JobsEine leere Zeichenkette ist als Dateiname ungültigLeerer VariablennameUmgebungUmgebung per -eÜberflüssiges „%s“Überflüssiger Text nach einer „%s“-AnweisungÜberflüssiger Text nach einer „define“-AnweisungÜberflüssiger Text nach einer „endef“-AnweisungUnzulässige Dateioperation: %sDatei: fehlender DateinameDatei: zu viele Argumentefind_and_set_shell Suche im Pfad setzte default_shell = %s find_and_set_shell setzt default_shell = %s Das erste Argument für die „word“-Funktion muss größer als 0 seinfopen (temporäre Datei)fwrite (temporäre Datei)guile: begutachte „%s“ guile: Verarbeite „%s“ Initialisierung der Pipe für den JobserverZuwenig Argumente (%d) für die Funktion „%s“Interner Fehler: ungültige --jobserver-auth Angabe „%s“interner Fehler: die Semaphore „%s“ des Jobservers kann nicht geöffnet werden: (Fehler %ld: %s)Ungültige Syntax in der BedingungInitialisierung der Pipe für den Jobserver„lbr$ini_control()“ scheiterte mit Status = %d„lbr$set_module()“ konnte keine Modulinformation auslesen; Status = %d„make“ registrierte die Beendigung des Kindprozesses mit ID %s, wartet jedoch noch auf den Prozess mit ID %s. MakefileFehlendes „endef“, nicht abgeschlossenes „define“Fehlendes „endif“Es fehlt eine Regel vor der RegelFehlender Trennerfehlender Trenner (Meinten Sie TAB anstelle von 8 Leerzeichen?)Es fehlt ein Ziel-MusterImplizite und normale Regeln wurden vermischtImplizite und statische Muster-Regeln wurden vermischtMehrfache Ziel-MusterkeineKeine weiteren Dateireferenzen verfügbar: Standardfehler konnte nicht dupliziert werden Keine weiteren Dateireferenzen verfügbar: die Standardeingabe konnte nicht dupliziert werden Keine weiteren Dateireferenzen verfügbar: die Standardausgabe konnte nicht dupliziert werden Nicht-numerisches erstes Argument für die „word“-FunktionNicht-numerisches erstes Argument für die „wordlist“-FunktionNicht-numerisches zweites Argument zur „wordlist“-FunktionEs ist nur ein „else“ pro Bedingung erlaubtÖffnen: %s: %sVoraussetzungen können nicht in Regeln definiert werden„process_easy()“ konnte den Prozess nicht starten (e=%ld) pselect der Jobs-PipelineLese Pipe für die JobsLesen: %s: %sRezept beginnt vor dem ersten ZielFreigabe der Jobserver-Semaphore: (Fehler %ld: %s)warten auf Semaphore oder Kindprozess: (Fehler %ld: %s)spawnvpe: der Platz in der Programmumgebung könnte erschöpft sein„sys$search“ schlug mit %d fehl Target „%s“ passt nicht zum Ziel-MusterDas Ziel „%s“ steht mehrfach in derselben Regel.Das Ziel „%s“ enthält sowohl „:“- als auch „::“-EinträgeZiel-Muster enthält kein „%%“Die Option „%s%s“ verlangt eine nicht-leere Zeichenkette als ArgumentDie Option „-%c“ verlangt eine positive ganze Zahl als ArgumentVMS bietet keine Möglichkeit einer Änderung der Zeitmarken von Archiveinträgentouch: „%s“ ist kein gültiges Archivtouch: Archiv „%s“ existiert nichttouch: Ungültiger Rückgabewert beim Zugriff von ar_member_touch auf „%s“touch: Eintrag „%s“ existiert nicht in „%s“Die Bibliothek „%s“ konnte nicht geöffnet werden um nach Eintragsstatus %d zu suchenAuf dieser Rechnerkonfiguration nicht implementiert: Funktion „%s“Unbekannte Debug-Level angegeben „%s“unbekannter Typ von Ausgabesynchronisierung „%s“Unbekanntes Signalunlink (temporäre Datei): Nicht beendeter Aufruf der Funktion „%s“: „%c“ fehltNicht abgeschlossene VariablenreferenzWarnung: Mit der Uhr stimmt etwas nicht. Der Bauauftrag könnte unvollständig sein.Warnung: NULL-Zeichen gelesen; der Rest der Zeile wird ignoriertWarnung: Alte Befehle für das Ziel „%s“ werden ignoriertWarnung: Kein Jobserver verfügbar: -j1 wird gesetzt. Fügen Sie der Ursprungsregel „+“ hinzu.Warnung: Die Befehle für das Ziel „%s“ werden überschriebenWarnung: undefinierte Variable „%.*s“windows32_openpipe(): process_init_fd() schlug fehl „cwindows32_openpipe“: „DuplicateHandle(Err)“ schlug fehl (e=%ld) „windows32_openpipe“: „DuplicateHandle(In)“ schlug fehl (e=%ld) Schreibfehler: StandardausgabeJob-Server wird geschriebenSchreiben: %s: %smake-4.3/po/de.po0000644000175000017500000020225113611136530010565 00000000000000# German message translation file for GNU make # Copyright © 1996, 1997, 2002, 2013, 2016 Free Software Foundation, Inc. # This file is distributed under the same license as the make package. # Philipp Thomas 2013, 2016 # Karl Eichwalder , 2002, 2005. # Alexander Mader , 2000. # Alexander Mader , 1997. # Jochen Hein , 1996. # # Vereinheitlichen: # ================= # command(s) -> Befehl(e)? (nicht: Kommando(s)) # target(s) -> Ziel(e) (nicht: Target(s)) # msgid "" msgstr "" "Project-Id-Version: make 4.2.1\n" "Report-Msgid-Bugs-To: bug-make@gnu.org\n" "POT-Creation-Date: 2020-01-19 15:34-0500\n" "PO-Revision-Date: 2016-06-20 15:03+0200\n" "Last-Translator: Philipp Thomas \n" "Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" #: src/ar.c:46 #, c-format msgid "attempt to use unsupported feature: '%s'" msgstr "Versuch, eine nicht unterstützte Funktionalität zu verwenden: „%s“" #: src/ar.c:123 #, c-format msgid "touch archive member is not available on VMS" msgstr "" "VMS bietet keine Möglichkeit einer Änderung \n" "der Zeitmarken von Archiveinträgen" #: src/ar.c:147 #, c-format msgid "touch: Archive '%s' does not exist" msgstr "touch: Archiv „%s“ existiert nicht" #: src/ar.c:150 #, c-format msgid "touch: '%s' is not a valid archive" msgstr "touch: „%s“ ist kein gültiges Archiv" #: src/ar.c:157 #, c-format msgid "touch: Member '%s' does not exist in '%s'" msgstr "touch: Eintrag „%s“ existiert nicht in „%s“" #: src/ar.c:164 #, c-format msgid "touch: Bad return code from ar_member_touch on '%s'" msgstr "" "touch: Ungültiger Rückgabewert beim Zugriff \n" "von ar_member_touch auf „%s“" #: src/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" #: src/arscan.c:236 #, c-format msgid "lbr$ini_control() failed with status = %d" msgstr "„lbr$ini_control()“ scheiterte mit Status = %d" #: src/arscan.c:261 #, c-format msgid "unable to open library '%s' to lookup member status %d" msgstr "" "Die Bibliothek „%s“ konnte nicht geöffnet werden um nach Eintragsstatus %d " "zu suchen" #: src/arscan.c:944 #, c-format msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n" msgstr "" "Eintrag „%s“ %s: \n" "%ld Bytes an Position %ld (%ld).\n" #: src/arscan.c:945 msgid " (name might be truncated)" msgstr " (der Name ist möglicherweise abgeschnitten)" #: src/arscan.c:947 #, c-format msgid " Date %s" msgstr " Datum %s" #: src/arscan.c:948 #, c-format msgid " uid = %d, gid = %d, mode = 0%o.\n" msgstr " Nutzer-ID = %d, Gruppen-ID = %d, Modus = 0%o.\n" #: src/commands.c:403 #, c-format msgid "Recipe has too many lines (%ud)" msgstr "Die Regel hat zu viele Zeilen (%ud)" #: src/commands.c:504 msgid "*** Break.\n" msgstr "*** Abbruch.\n" #: src/commands.c:628 #, c-format msgid "*** [%s] Archive member '%s' may be bogus; not deleted" msgstr "*** [%s] Archiveintrag „%s“ ist möglicherweise falsch; nicht gelöscht" #: src/commands.c:632 #, c-format msgid "*** Archive member '%s' may be bogus; not deleted" msgstr "*** Archiveintrag „%s“ ist möglicherweise falsch; nicht gelöscht" #: src/commands.c:646 #, c-format msgid "*** [%s] Deleting file '%s'" msgstr "*** [%s] Datei „%s“ wird gelöscht" #: src/commands.c:648 #, c-format msgid "*** Deleting file '%s'" msgstr "*** Datei „%s“ wird gelöscht" #: src/commands.c:684 msgid "# recipe to execute" msgstr "# Auszuführende Regel" #: src/commands.c:687 msgid " (built-in):" msgstr " (eingebaut):" #: src/commands.c:689 #, c-format msgid " (from '%s', line %lu):\n" msgstr " (aus „%s“, Zeile %lu):\n" #: src/dir.c:1073 msgid "" "\n" "# Directories\n" msgstr "" "\n" "# Verzeichnisse\n" #: src/dir.c:1085 #, c-format msgid "# %s: could not be stat'd.\n" msgstr "# %s: Status konnte nicht festgestellt werden.\n" #: src/dir.c:1089 msgid "# %s (key %s, mtime %I64u): could not be opened.\n" msgstr "" "# %s ( Schlüssel %s, letzte Änderung %I64u): Öffnen scheiterte.\n" "Konnte nicht geöffnet werden.\n" #: src/dir.c:1094 #, 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" #: src/dir.c:1099 #, 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" #: src/dir.c:1126 msgid "# %s (key %s, mtime %I64u): " msgstr "# %s (Schlüssel %s, letzte Änderung %%I64u): " #: src/dir.c:1131 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): " msgstr "# %s (Gerät %d, Inode [%d,%d,%d]): " #: src/dir.c:1136 #, c-format msgid "# %s (device %ld, inode %ld): " msgstr "# %s (Gerät %ld, Inode %ld): " #: src/dir.c:1142 src/dir.c:1163 msgid "No" msgstr "Keine" #: src/dir.c:1145 src/dir.c:1166 msgid " files, " msgstr " Dateien, " #: src/dir.c:1147 src/dir.c:1168 msgid "no" msgstr "keine" #: src/dir.c:1150 msgid " impossibilities" msgstr " Unmöglichkeiten" #: src/dir.c:1154 msgid " so far." msgstr " bisher." #: src/dir.c:1171 #, c-format msgid " impossibilities in %lu directories.\n" msgstr " Unmöglichkeiten in %lu Verzeichnissen.\n" #: src/expand.c:125 #, c-format msgid "Recursive variable '%s' references itself (eventually)" msgstr "Rekursive Variable „%s“ referenziert sich (schließlich) selbst" #: src/expand.c:271 #, c-format msgid "unterminated variable reference" msgstr "Nicht abgeschlossene Variablenreferenz" #: src/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," #: src/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," #: src/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." #: src/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." #: src/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" #: src/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" #: src/file.c:408 #, c-format msgid "*** Deleting intermediate file '%s'" msgstr "*** Löschen der übergangsweise angelegten Datei „%s“" #: src/file.c:412 #, fuzzy, c-format msgid "Removing intermediate files...\n" msgstr "Die übergangsweise angelegte Datei „%s“ wird gelöscht...\n" #: src/file.c:872 msgid "Current time" msgstr "Aktuelle Zeit" #: src/file.c:876 #, c-format msgid "%s: Timestamp out of range; substituting %s" msgstr "%s: Zeitstempel außerhalb des Gültigkeitsbereichs; %s wird ersetzt" #: src/file.c:1016 msgid "# Not a target:" msgstr "# Dies ist kein Ziel:" #: src/file.c:1021 msgid "# Precious file (prerequisite of .PRECIOUS)." msgstr "# Wertvolle Datei (benötigt von .PRECIOUS)." #: src/file.c:1023 msgid "# Phony target (prerequisite of .PHONY)." msgstr "# Vorgetäuschtes Ziel (benötigt von .PHONY)." #: src/file.c:1025 msgid "# Command line target." msgstr "# Kommandozeilen-Ziel (target)." #: src/file.c:1027 msgid "# A default, MAKEFILES, or -include/sinclude makefile." msgstr "# Eine standardmässige, MAKEFILES oder -include/sinclude Makedatei." #: src/file.c:1029 msgid "# Builtin rule" msgstr "# Eingebaute Regel" #: src/file.c:1031 msgid "# Implicit rule search has been done." msgstr "# Die Suche nach impliziten Regeln wurde durchgeführt." #: src/file.c:1032 msgid "# Implicit rule search has not been done." msgstr "# Die Suche nach impliziten Regeln wurde nicht durchgeführt." #: src/file.c:1034 #, c-format msgid "# Implicit/static pattern stem: '%s'\n" msgstr "# Wurzel impliziter/statischer Muster: „%s“\n" #: src/file.c:1036 msgid "# File is an intermediate prerequisite." msgstr "# Datei ist ein Zwischenschritt in den Abhängigkeiten." #: src/file.c:1040 msgid "# Also makes:" msgstr "# Erzeugt außerdem:" #: src/file.c:1046 msgid "# Modification time never checked." msgstr "# Zeit der letzten Änderung wurde nicht überprüft." #: src/file.c:1048 msgid "# File does not exist." msgstr "# Die Datei existiert nicht." #: src/file.c:1050 msgid "# File is very old." msgstr "# Datei ist sehr alt." #: src/file.c:1055 #, c-format msgid "# Last modified %s\n" msgstr "# Zuletzt geändert %s\n" #: src/file.c:1058 msgid "# File has been updated." msgstr "# Datei wurde aktualisiert." #: src/file.c:1058 msgid "# File has not been updated." msgstr "# Datei wurde nicht aktualisiert." #: src/file.c:1062 msgid "# Recipe currently running (THIS IS A BUG)." msgstr "# Derzeit laufende Regel (DAS IST EIN FEHLER)." #: src/file.c:1065 msgid "# Dependencies recipe running (THIS IS A BUG)." msgstr "# Derzeit läuft die Regel für Abhängigkeiten (DAS IST EIN FEHLER)." #: src/file.c:1074 msgid "# Successfully updated." msgstr "# Erfolgreich aktualisiert." #: src/file.c:1078 msgid "# Needs to be updated (-q is set)." msgstr "# Eine Aktualisierung ist notwendig (-q ist angegeben)." #: src/file.c:1081 msgid "# Failed to be updated." msgstr "# Aktualisierung ist fehlgeschlagen." #: src/file.c:1086 msgid "# Invalid value in 'command_state' member!" msgstr "# Ungültiger Wert im „command_state“-Strukturelement!" #: src/file.c:1105 msgid "" "\n" "# Files" msgstr "" "\n" "# Dateien" #: src/file.c:1109 msgid "" "\n" "# files hash-table stats:\n" "# " msgstr "" "\n" "# Statistik der Hash-Tabelle für Dateien:\n" "# " #: src/file.c:1119 #, c-format msgid "%s: Field '%s' not cached: %s" msgstr "%s: Feld „%s“ wird nicht zwischengespeichert: %s" #: src/function.c:794 msgid "non-numeric first argument to 'word' function" msgstr "Nicht-numerisches erstes Argument für die „word“-Funktion" #: src/function.c:799 #, c-format 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" #: src/function.c:819 msgid "non-numeric first argument to 'wordlist' function" msgstr "Nicht-numerisches erstes Argument für die „wordlist“-Funktion" #: src/function.c:821 msgid "non-numeric second argument to 'wordlist' function" msgstr "Nicht-numerisches zweites Argument zur „wordlist“-Funktion" #: src/function.c:1533 #, c-format msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n" msgstr "„windows32_openpipe“: „DuplicateHandle(In)“ schlug fehl (e=%ld)\n" #: src/function.c:1557 #, c-format msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n" msgstr "„cwindows32_openpipe“: „DuplicateHandle(Err)“ schlug fehl (e=%ld)\n" #: src/function.c:1564 #, c-format msgid "CreatePipe() failed (e=%ld)\n" msgstr "„CreatePipe()“ schlug fehl (e=%ld)\n" #: src/function.c:1572 #, c-format msgid "windows32_openpipe(): process_init_fd() failed\n" msgstr "windows32_openpipe(): process_init_fd() schlug fehl\n" #: src/function.c:1857 #, c-format msgid "Cleaning up temporary batch file %s\n" msgstr "Die temporäre Stapelverarbeitungsdatei %s wird gelöscht\n" #: src/function.c:2230 src/function.c:2255 #, c-format msgid "file: missing filename" msgstr "Datei: fehlender Dateiname" #: src/function.c:2234 src/function.c:2265 #, c-format msgid "open: %s: %s" msgstr "Öffnen: %s: %s" #: src/function.c:2242 #, c-format msgid "write: %s: %s" msgstr "Schreiben: %s: %s" #: src/function.c:2245 src/function.c:2282 #, c-format msgid "close: %s: %s" msgstr "schließend: %s: %s" #: src/function.c:2258 #, c-format msgid "file: too many arguments" msgstr "Datei: zu viele Argumente" #: src/function.c:2277 #, c-format msgid "read: %s: %s" msgstr "Lesen: %s: %s" #: src/function.c:2290 #, c-format msgid "file: invalid file operation: %s" msgstr "Unzulässige Dateioperation: %s" #: src/function.c:2405 #, c-format msgid "insufficient number of arguments (%d) to function '%s'" msgstr "Zuwenig Argumente (%d) für die Funktion „%s“" #: src/function.c:2417 #, c-format msgid "unimplemented on this platform: function '%s'" msgstr "Auf dieser Rechnerkonfiguration nicht implementiert: Funktion „%s“" #: src/function.c:2483 #, c-format msgid "unterminated call to function '%s': missing '%c'" msgstr "Nicht beendeter Aufruf der Funktion „%s“: „%c“ fehlt" #: src/function.c:2667 #, c-format msgid "Empty function name" msgstr "Leerer Funktionsname" #: src/function.c:2669 #, c-format msgid "Invalid function name: %s" msgstr "Unzulässiger Funktionsname: %s" #: src/function.c:2671 #, c-format msgid "Function name too long: %s" msgstr "Der Funktionsname ist zu lang: %s" #: src/function.c:2674 #, c-format msgid "Invalid minimum argument count (%u) for function %s" msgstr "Ungültige minimale Anzahl von Argumenten (%u) für die Funktion „%s“" #: src/function.c:2677 #, c-format msgid "Invalid maximum argument count (%u) for function %s" msgstr "Ungülte maximale Anzahl an Argumenten (%u) für die Funktion „%s“" #: src/getopt.c:659 #, c-format msgid "%s: option '%s' is ambiguous\n" msgstr "%s: Option „%s“ ist mehrdeutig\n" #: src/getopt.c:683 #, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s: Option „--%s“ erlaubt kein Argument\n" #: src/getopt.c:688 #, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s: Option „%c%s“ erlaubt kein Argument\n" #: src/getopt.c:705 src/getopt.c:878 #, c-format msgid "%s: option '%s' requires an argument\n" msgstr "%s: Option „%s“ erfordert ein Argument\n" #: src/getopt.c:734 #, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s: unbekannte Option „--%s“\n" #: src/getopt.c:738 #, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s: unbekannte Option „%c%s“\n" #: src/getopt.c:764 #, c-format msgid "%s: illegal option -- %c\n" msgstr "%s: unzulässige Option -- %c\n" #: src/getopt.c:767 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s: ungültige Option -- %c\n" #: src/getopt.c:797 src/getopt.c:927 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: Option erfordert ein Argument -- %c\n" #: src/getopt.c:844 #, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s: Option „-W %s“ ist mehrdeutig\n" #: src/getopt.c:862 #, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s: Option „-W %s“ erlaubt kein Argument\n" #: src/guile.c:58 #, c-format msgid "guile: Expanding '%s'\n" msgstr "guile: Verarbeite „%s“\n" #: src/guile.c:74 #, c-format msgid "guile: Evaluating '%s'\n" msgstr "guile: begutachte „%s“\n" #: src/hash.c:50 #, c-format msgid "can't allocate %lu bytes for hash table: memory exhausted" msgstr "" "es können keine %lu Bytes für die Hashtabelle reserviert werden: " "Hauptspeicher erschöpft" #: src/hash.c:280 #, fuzzy, c-format msgid "Load=%lu/%lu=%.0f%%, " msgstr "Auslastung=%ld/%ld=%.0f%%, " #: src/hash.c:282 #, fuzzy, c-format msgid "Rehash=%u, " msgstr "Rehash=%d, " #: src/hash.c:283 #, fuzzy, c-format msgid "Collisions=%lu/%lu=%.0f%%" msgstr "Kollisionen=%ld/%ld%.0f%%" #: src/implicit.c:38 #, c-format msgid "Looking for an implicit rule for '%s'.\n" msgstr "Es wird nach einer impliziten Regel für „%s“ gesucht.\n" #: src/implicit.c:54 #, c-format 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" #: src/implicit.c:311 #, c-format msgid "Avoiding implicit rule recursion.\n" msgstr "Rekursion in den impliziten Regeln wird vermieden.\n" #: src/implicit.c:484 #, fuzzy, c-format msgid "Stem too long: '%s%.*s'.\n" msgstr "Wurzel zu lang: „%.*s“.\n" #: src/implicit.c:490 #, c-format msgid "Trying pattern rule with stem '%.*s'.\n" msgstr "Muster-Regel mit Wurzel „%.*s“ wird probiert.\n" #: src/implicit.c:717 #, c-format msgid "Rejecting impossible rule prerequisite '%s'.\n" msgstr "Unmögliche Voraussetzung „%s“ für eine Regel wird abgelehnt.\n" #: src/implicit.c:718 #, c-format msgid "Rejecting impossible implicit prerequisite '%s'.\n" msgstr "Unmögliche implizite Voraussetzung „%s“ wird abgelehnt.\n" #: src/implicit.c:732 #, c-format msgid "Trying rule prerequisite '%s'.\n" msgstr "Regel-Voraussetzung „%s“ wird auprobiert.\n" #: src/implicit.c:733 #, c-format msgid "Trying implicit prerequisite '%s'.\n" msgstr "Implizite Voraussetzung „%s“ wird ausprobiert.\n" #: src/implicit.c:772 #, c-format msgid "Found prerequisite '%s' as VPATH '%s'\n" msgstr "Die Voraussetzung „%s“ wurde als VPATH „%s“ gefunden\n" #: src/implicit.c:786 #, c-format msgid "Looking for a rule with intermediate file '%s'.\n" msgstr "" "Es wird nach einer Regel mit der übergangsweise verwendeten Datei „%s“ " "gesucht.\n" #: src/job.c:370 msgid "Cannot create a temporary file\n" msgstr "Eine temporäre Datei kann nicht erzeugt werden\n" #: src/job.c:548 msgid " (core dumped)" msgstr " (Speicherauszug erstellt)" #: src/job.c:553 msgid " (ignored)" msgstr " (ignoriert)" #: src/job.c:557 src/job.c:1892 msgid "" msgstr "" #: src/job.c:573 #, c-format msgid "%s[%s: %s] Error %d%s" msgstr "%s[%s: %s] Fehler %d%s" #: src/job.c:662 #, c-format msgid "*** Waiting for unfinished jobs...." msgstr "*** Es wird auf noch nicht beendete Prozesse gewartet...." #: src/job.c:704 #, c-format msgid "Live child %p (%s) PID %s %s\n" msgstr "Aktiver Kindprozess %p (%s) PID %s %s\n" #: src/job.c:706 src/job.c:900 src/job.c:1072 src/job.c:1644 #, c-format msgid " (remote)" msgstr " (entfernt)" #: src/job.c:898 #, c-format msgid "Reaping winning child %p PID %s %s\n" msgstr "Sammle erfolgreichen Kindprozess %p PID %s %s\n" #: src/job.c:899 #, c-format msgid "Reaping losing child %p PID %s %s\n" msgstr "Sammle erfolglosen Kindprozess %p PID %s %s\n" #: src/job.c:950 #, c-format msgid "Cleaning up temp batch file %s\n" msgstr "Lösche temporäre Stapelverarbeitungsdatei „%s“\n" #: src/job.c:956 #, c-format msgid "Cleaning up temp batch file %s failed (%d)\n" msgstr "Löschen der temporären Stapelverarbeitungsdatei „%s“ scheiterte (%d)\n" #: src/job.c:1071 #, c-format msgid "Removing child %p PID %s%s from chain.\n" msgstr "Entferne Kindprozess %p PID %s%s aus der Kette.\n" #: src/job.c:1120 #, c-format msgid "Released token for child %p (%s).\n" msgstr "Token des Kindprozesses %p PID (%s) freigegeben.\n" #: src/job.c:1575 src/job.c:2487 #, c-format msgid "process_easy() failed to launch process (e=%ld)\n" msgstr "„process_easy()“ konnte den Prozess nicht starten (e=%ld)\n" #: src/job.c:1579 src/job.c:2491 #, c-format msgid "" "\n" "Counted %d args in failed launch\n" msgstr "" "\n" "%d Argumente gehörten zum fehlgeschlagenen Prozessstart\n" #: src/job.c:1642 #, 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" #: src/job.c:1875 #, c-format msgid "Obtained token for child %p (%s).\n" msgstr "Token für den Kindprozess %p (%s) erhalten.\n" #: src/job.c:1902 #, c-format msgid "%s: target '%s' does not exist" msgstr "%s: Archiv „%s“ existiert nicht" #: src/job.c:1905 #, c-format msgid "%s: update target '%s' due to: %s" msgstr "%s: Ziel „%s“ wird aktualisiert wegen: %s" #: src/job.c:2108 #, c-format msgid "cannot enforce load limits on this operating system" msgstr "" "Auf diesem Betriebssystem kann die Einhaltung\n" "der Lastbeschränkung nicht erzwungen werden" #: src/job.c:2110 msgid "cannot enforce load limit: " msgstr "Lasteinschränkung kann nicht erzwungen werden: " #: src/job.c:2200 #, c-format msgid "no more file handles: could not duplicate stdin\n" msgstr "" "Keine weiteren Dateireferenzen verfügbar: die Standardeingabe konnte\n" "nicht dupliziert werden\n" #: src/job.c:2212 #, c-format msgid "no more file handles: could not duplicate stdout\n" msgstr "" "Keine weiteren Dateireferenzen verfügbar: die Standardausgabe konnte\n" "nicht dupliziert werden\n" #: src/job.c:2226 #, c-format msgid "no more file handles: could not duplicate stderr\n" msgstr "" "Keine weiteren Dateireferenzen verfügbar: Standardfehler konnte\n" "nicht dupliziert werden\n" #: src/job.c:2241 #, c-format msgid "Could not restore stdin\n" msgstr "Die Standardeingabe konnte nicht wieder hergestellt werden\n" #: src/job.c:2249 #, c-format msgid "Could not restore stdout\n" msgstr "Die Standardausgabe konnte nicht wieder hergestellt werden\n" #: src/job.c:2257 #, c-format msgid "Could not restore stderr\n" msgstr "Standardfehler konnte nicht wieder hergestellt werden\n" #: src/job.c:2520 #, 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" #: src/job.c:2623 #, c-format msgid "spawnvpe: environment space might be exhausted" msgstr "spawnvpe: der Platz in der Programmumgebung könnte erschöpft sein" #: src/job.c:2862 #, c-format msgid "$SHELL changed (was '%s', now '%s')\n" msgstr "$SHELL gewechselt (war „%s“, ist jetzt „%s“)\n" #: src/job.c:3300 src/job.c:3485 #, c-format msgid "Creating temporary batch file %s\n" msgstr "Temporäre Stapelverarbeitungsdatei %s wird erstellt\n" #: src/job.c:3308 #, c-format msgid "" "Batch file contents:\n" "\t@echo off\n" msgstr "" "Inhalt der Stapelverarbeitungsdatei:\n" "\t@echo off\n" #: src/job.c:3497 #, c-format msgid "" "Batch file contents:%s\n" "\t%s\n" msgstr "" "Inhalt der Stapelverarbeitungsdatei:%s\n" "\t%s\n" #: src/job.c:3605 #, 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" #: src/load.c:60 #, c-format msgid "Failed to open global symbol table: %s" msgstr "Die globale Symboltabelle konnte nicht geöffnet werden: %s" #: src/load.c:97 #, c-format msgid "Loaded object %s is not declared to be GPL compatible" msgstr "Ds geladede Objekt %s wurde nicht als GPL-kompatibel deklariert" #: src/load.c:104 #, c-format msgid "Failed to load symbol %s from %s: %s" msgstr "Symbol %s konnte nicht aus %s geladen werden: %s" #: src/load.c:149 #, c-format msgid "Empty symbol name for load: %s" msgstr "Zu ladedender Symbolname ist leer: %s" #: src/load.c:204 #, c-format msgid "Loading symbol %s from %s\n" msgstr "Symbol %s wird aus %s geladen\n" #: src/load.c:256 #, c-format msgid "The 'load' operation is not supported on this platform." msgstr "Die Operation „load“ wird auf dieser Plattform nicht unterstützt." #: src/main.c:335 msgid "Options:\n" msgstr "Optionen:\n" #: src/main.c:336 msgid " -b, -m Ignored for compatibility.\n" msgstr "" " -b, -m Wird aus Kompatibilitätsgründen ignoriert\n" #: src/main.c:338 msgid " -B, --always-make Unconditionally make all targets.\n" msgstr " -B, --always-make Alle Ziele ohne Bedingungen erstellen\n" #: src/main.c:340 msgid "" " -C DIRECTORY, --directory=DIRECTORY\n" " Change to DIRECTORY before doing anything.\n" msgstr "" " -C VERZEICHNIS, --directory=VERZEICHNIS\n" " In VERZEICHNIS wechseln, bevor etwas getan " "wird\n" #: src/main.c:343 msgid " -d Print lots of debugging information.\n" msgstr "" " -d Viele Informationen zur Fehlersuche ausgeben.\n" #: src/main.c:345 msgid "" " --debug[=FLAGS] Print various types of debugging information.\n" msgstr "" " --debug[=KENNUNGEN] Verschiedene Arten von Debug-Information " "ausgeben\n" #: src/main.c:347 msgid "" " -e, --environment-overrides\n" " Environment variables override makefiles.\n" msgstr "" " -e, --environment-overrides\n" " Umgebungsvariablen überschreiben „make“-" "Steuerdateien\n" #: src/main.c:350 #, fuzzy msgid "" " -E STRING, --eval=STRING Evaluate STRING as a makefile statement.\n" msgstr "" " --eval=ZEIENKETTE ZEICHENKETTE wie einen Makedatei-Eintrag " "auswerten.\n" #: src/main.c:352 msgid "" " -f FILE, --file=FILE, --makefile=FILE\n" " Read FILE as a makefile.\n" msgstr "" " -f DATEI, --file=DATEI, --makefile=DATEI\n" " DATEI als Makefile lesen\n" #: src/main.c:355 msgid " -h, --help Print this message and exit.\n" msgstr " -h, --help Diese Meldung ausgeben und beenden\n" #: src/main.c:357 msgid " -i, --ignore-errors Ignore errors from recipes.\n" msgstr " -i, --ignore-errors Fehler in Regeln werden irgnoriert\n" #: src/main.c:359 msgid "" " -I DIRECTORY, --include-dir=DIRECTORY\n" " Search DIRECTORY for included makefiles.\n" msgstr "" " -I VERZEICHNIS, --include-dir=VERZEICHNIS\n" " VERZEICHNIS nach eingebundenen\n" " Makedateien durchsuchen\n" #: src/main.c:362 msgid "" " -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no " "arg.\n" msgstr "" " -j [N], --jobs[=N] N Jobs gleichzeitig erlauben; unbegrenzte " "Anzahl \n" " von Jobs ohne Argument\n" #: src/main.c:364 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" #: src/main.c:366 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" " Keine Jobs starten bevor die Auslastung nicht " "unter N ist.\n" #: src/main.c:369 msgid "" " -L, --check-symlink-times Use the latest mtime between symlinks and " "target.\n" msgstr "" " -L, --check-symlink-times Den neueste Modifizierungszeit zwischen\n" " symbolischer Verküpfung und dem Ziel " "verwenden.\n" #: src/main.c:371 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" " Keine Regel ausführen, nur ausgeben.\n" #: src/main.c:374 msgid "" " -o FILE, --old-file=FILE, --assume-old=FILE\n" " Consider FILE to be very old and don't remake " "it.\n" msgstr "" " -o DATEI, --old-file=DATEI, --assume-old=DATEI\n" " DATEI als sehr alt ansehen und nicht neu " "erzeugen.\n" #: src/main.c:377 msgid "" " -O[TYPE], --output-sync[=TYPE]\n" " Synchronize output of parallel jobs by TYPE.\n" msgstr "" " -O[TYP], --output-sync[=TYP]\n" " Synchronisiert die Ausgabe paralleler Jobs per " "TYP.\n" #: src/main.c:380 msgid " -p, --print-data-base Print make's internal database.\n" msgstr "" " -p, --print-data-base Die interne Datenbank von „make“ ausgeben\n" #: src/main.c:382 msgid "" " -q, --question Run no recipe; exit status says if up to " "date.\n" msgstr "" " -q, --question Keine Regel ausführen; der Exit-Status gibt " "an, ob die Dateien\n" " aktuell sind\n" #: src/main.c:384 msgid " -r, --no-builtin-rules Disable the built-in implicit rules.\n" msgstr "" " -r, --no-builtin-rules Die eingebauten impliziten Regeln " "deaktivieren.\n" #: src/main.c:386 msgid " -R, --no-builtin-variables Disable the built-in variable settings.\n" msgstr "" " -R, --no-builtin-variables Die eingebauten Variablenbelegungen " "deaktivieren.\n" #: src/main.c:388 msgid " -s, --silent, --quiet Don't echo recipes.\n" msgstr " -s, --silent, --quiet Regeln nicht ausgeben.\n" #: src/main.c:390 #, fuzzy msgid " --no-silent Echo recipes (disable --silent mode).\n" msgstr "" " -q, --question Keine Regel ausführen; der Exit-Status gibt " "an, ob die Dateien\n" " aktuell sind\n" #: src/main.c:392 msgid "" " -S, --no-keep-going, --stop\n" " Turns off -k.\n" msgstr "" " -S, --no-keep-going, --stop\n" " -k abschalten.\n" #: src/main.c:395 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" #: src/main.c:397 msgid " --trace Print tracing information.\n" msgstr "" " --trace Viele Informationen zur Fehlersuche ausgeben\n" #: src/main.c:399 msgid "" " -v, --version Print the version number of make and exit.\n" msgstr "" " -v, --version Die Versionsnummer von „make“ ausgeben und " "Programm beenden\n" #: src/main.c:401 msgid " -w, --print-directory Print the current directory.\n" msgstr " -w, --print-directory Das aktuelle Verzeichnis ausgeben\n" #: src/main.c:403 msgid "" " --no-print-directory Turn off -w, even if it was turned on " "implicitly.\n" msgstr "" " --no-print-directory -w abschalten, selbst wenn es implizit " "eingeschaltet wurde.\n" #: src/main.c:405 msgid "" " -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n" " Consider FILE to be infinitely new.\n" msgstr "" " -W DATEI, --what-if=DATEI, --new-file=DATEI, --assume-new=DATEI\n" " DATEI als unendlich neu erachten.\n" #: src/main.c:408 msgid "" " --warn-undefined-variables Warn when an undefined variable is " "referenced.\n" msgstr "" " --warn-undefined-variables Eine Warnung ausgeben, wenn eine undefinierte\n" " Variable referenziert wird.\n" #: src/main.c:671 #, c-format msgid "empty string invalid as file name" msgstr "Eine leere Zeichenkette ist als Dateiname ungültig" #: src/main.c:754 #, c-format msgid "unknown debug level specification '%s'" msgstr "Unbekannte Debug-Level angegeben „%s“" #: src/main.c:794 #, c-format msgid "unknown output-sync type '%s'" msgstr "unbekannter Typ von Ausgabesynchronisierung „%s“" #: src/main.c:849 #, 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" #: src/main.c:856 #, c-format msgid "" "\n" "Unhandled exception filter called from program %s\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" msgstr "" "\n" "Das Programm %s rief einen Ausnahmefilter auf, \n" "der nicht bearbeitet wurde\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" #: src/main.c:864 #, c-format msgid "Access violation: write operation at address 0x%p\n" msgstr "Zugriffsverletzung: Schreiboperation an Adresse 0x%p\n" #: src/main.c:865 #, c-format msgid "Access violation: read operation at address 0x%p\n" msgstr "Zugriffsverletzung: Leseoperation an Adresse 0x%p\n" #: src/main.c:941 src/main.c:956 #, c-format msgid "find_and_set_shell() setting default_shell = %s\n" msgstr "find_and_set_shell setzt default_shell = %s\n" #: src/main.c:1009 #, 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" #: src/main.c:1609 #, c-format 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." #: src/main.c:1617 #, fuzzy, c-format msgid "warning: -j%d forced in submake: resetting jobserver mode." msgstr "" "Warnung: -jN in „make“-Verarbeitungszweig erzwungen: \n" "Jobserver-Modus nicht verfügbar." #: src/main.c:1781 #, c-format msgid "Makefile from standard input specified twice." msgstr "Das Makefile wurde zweimal über die Standardeingabe angegeben." #: src/main.c:1819 src/vmsjobs.c:1248 msgid "fopen (temporary file)" msgstr "fopen (temporäre Datei)" #: src/main.c:1825 msgid "fwrite (temporary file)" msgstr "fwrite (temporäre Datei)" #: src/main.c:2004 #, fuzzy, c-format msgid "warning: -j%d forced in makefile: resetting jobserver mode." msgstr "" "Warnung: -jN in „make“-Verarbeitungszweig erzwungen: \n" "Jobserver-Modus nicht verfügbar." #: src/main.c:2068 #, c-format msgid "Parallel jobs (-j) are not supported on this platform." msgstr "" "Parallele Abarbeitung (-j) \n" "wird auf dieser Plattform nicht unterstützt." #: src/main.c:2069 #, c-format msgid "Resetting to single job (-j1) mode." msgstr "Umstellung auf Einzel-Job-Verarbeitung (-j1)." #: src/main.c:2109 #, c-format msgid "Symbolic links not supported: disabling -L." msgstr "" "Symbolische Verknfungen werdfen nicht unterstützt: -L wird abgeschaltet." #: src/main.c:2190 #, c-format msgid "Updating makefiles....\n" msgstr "Aktualisiere „make“-Steuerdateien...\n" #: src/main.c:2226 #, 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" #: src/main.c:2303 #, c-format msgid "Failed to remake makefile '%s'." msgstr "Konnte die „make“-Steuerdatei „%s“ nicht neu erstellen." #: src/main.c:2323 #, c-format msgid "Included makefile '%s' was not found." msgstr "Die eingebundene „make“-Steuerdatei „%s“ wurde nicht gefunden." #: src/main.c:2328 #, c-format msgid "Makefile '%s' was not found" msgstr "Die „make“-Steuerdatei „%s“ wurde nicht gefunden" #: src/main.c:2394 #, c-format msgid "Couldn't change back to original directory." msgstr "Konnte nicht in das ursprüngliche Verzeichnis wechseln." #: src/main.c:2402 #, c-format msgid "Re-executing[%u]:" msgstr "Erneute Ausführung[%u]:" #: src/main.c:2522 msgid "unlink (temporary file): " msgstr "unlink (temporäre Datei): " #: src/main.c:2555 #, c-format msgid ".DEFAULT_GOAL contains more than one target" msgstr ".DEFAULT_GOAL beinhaltet mehr als ein Ziel" #: src/main.c:2579 #, c-format msgid "No targets" msgstr "Keine Ziele" #: src/main.c:2581 #, c-format msgid "No targets specified and no makefile found" msgstr "Es wurden keine Ziele angegeben und keine „make“-Steuerdatei gefunden" #: src/main.c:2586 #, c-format msgid "Updating goal targets....\n" msgstr "Aktualisieren der Ziele...\n" #: src/main.c:2610 #, c-format 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." #: src/main.c:2804 #, c-format msgid "Usage: %s [options] [target] ...\n" msgstr "Aufruf: %s [Optionen] [Ziele] ...\n" #: src/main.c:2810 #, c-format msgid "" "\n" "This program built for %s\n" msgstr "" "\n" "Diese Programm wurde für %s gebaut\n" #: src/main.c:2812 #, c-format msgid "" "\n" "This program built for %s (%s)\n" msgstr "" "\n" "Diese Programm wurde für %s (%s) gebaut\n" #: src/main.c:2815 #, c-format msgid "Report bugs to \n" msgstr "Fehlermeldungen (auf Englisch) an senden.\n" #: src/main.c:2901 #, 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" #: src/main.c:2965 #, c-format msgid "the '-%c' option requires a positive integer argument" msgstr "Die Option „-%c“ verlangt eine positive ganze Zahl als Argument" #: src/main.c:3363 #, c-format msgid "%sBuilt for %s\n" msgstr "%sGebaut für %s\n" #: src/main.c:3365 #, c-format msgid "%sBuilt for %s (%s)\n" msgstr "%sGebaut für %s (%s)\n" #: src/main.c:3376 #, c-format msgid "" "%sLicense GPLv3+: GNU GPL version 3 or later \n" "%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 "" "%sLizenz GPLv3+: GNU GPL Version 3 oder später \n" "%sDies ist freie Software: Sie können sie nach Belieben ändern und weiter " "verteilen.\n" "%sSoweit es die Gesetze erlauben gibt es KEINE GARANTIE.\n" #: src/main.c:3397 #, c-format msgid "" "\n" "# Make data base, printed on %s" msgstr "" "\n" "# „Make“-Datenbank; erstellt am: %s" #: src/main.c:3407 #, c-format msgid "" "\n" "# Finished Make data base on %s\n" msgstr "" "\n" "# „Make“-Datenbank beendet am: %s\n" #: src/misc.c:643 #, 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" #: src/misc.c:664 msgid "Initialized access" msgstr "Initialisierter Zugriff" #: src/misc.c:743 msgid "User access" msgstr "Zugriff durch Benutzer" #: src/misc.c:791 msgid "Make access" msgstr "Zugriff durch „make“" #: src/misc.c:825 msgid "Child access" msgstr "Kindprozess" #: src/output.c:97 #, c-format msgid "%s: Entering an unknown directory\n" msgstr "%s: ein unbekanntes Verzeichnis wird betreten\n" #: src/output.c:99 #, c-format msgid "%s: Leaving an unknown directory\n" msgstr "%s: ein unbekanntes Verzeichnis wird verlassen\n" # !!! Attention: concatenated with the previous messages!!! #: src/output.c:102 #, c-format msgid "%s: Entering directory '%s'\n" msgstr "%s: Verzeichnis „%s“ wird betreten\n" # !!! Attention: concatenated with the previous messages!!! #: src/output.c:104 #, c-format msgid "%s: Leaving directory '%s'\n" msgstr "%s: Verzeichnis „%s“ wird verlassen\n" #: src/output.c:108 #, c-format msgid "%s[%u]: Entering an unknown directory\n" msgstr "%s[%u]: Ein unbekanntes Verzeichnis wird betreten\n" #: src/output.c:110 #, c-format msgid "%s[%u]: Leaving an unknown directory\n" msgstr "%s[%u]: Ein unbekanntes Verzeichnis wird verlassen\n" # !!! Attention: concatenated with the previous messages!!! #: src/output.c:113 #, c-format msgid "%s[%u]: Entering directory '%s'\n" msgstr "%s[%u]: Verzeichnis „%s“ wird betreten\n" # !!! Attention: concatenated with the previous messages!!! #: src/output.c:115 #, c-format msgid "%s[%u]: Leaving directory '%s'\n" msgstr "%s[%u]: Verzeichnis „%s“ wird verlassen\n" #: src/output.c:442 src/output.c:444 #, c-format msgid "write error: stdout" msgstr "Schreibfehler: Standardausgabe" #: src/output.c:624 msgid ". Stop.\n" msgstr ". Schluss.\n" #: src/output.c:658 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" #: src/output.c:667 #, c-format msgid "%s: %s" msgstr "%s: %s" #: src/output.h:62 #, c-format msgid "-O[TYPE] (--output-sync[=TYPE]) is not configured for this build." msgstr "" "-O[TYPE] (--output-sync[=TYPE]) ist für diese Bau-Aufgabe nicht konfiguriert." #: src/posixos.c:90 msgid "creating jobs pipe" msgstr "Öffnen der Pipe für die Jobs" #: src/posixos.c:98 src/posixos.c:251 msgid "duping jobs pipe" msgstr "Öffnen der Pipe für die Jobs" #: src/posixos.c:104 msgid "init jobserver pipe" msgstr "Initialisierung der Pipe für den Jobserver" #: src/posixos.c:119 #, c-format msgid "internal error: invalid --jobserver-auth string '%s'" msgstr "Interner Fehler: ungültige --jobserver-auth Angabe „%s“" #: src/posixos.c:122 #, c-format msgid "Jobserver client (fds %d,%d)\n" msgstr "Jobserver-Klient (fds %d,%d)\n" #: src/posixos.c:138 msgid "jobserver pipeline" msgstr "Initialisierung der Pipe für den Jobserver" #: src/posixos.c:186 msgid "write jobserver" msgstr "Job-Server wird geschrieben" #: src/posixos.c:300 #, c-format msgid "job server shut down" msgstr "" #: src/posixos.c:303 msgid "pselect jobs pipe" msgstr "pselect der Jobs-Pipeline" #: src/posixos.c:319 src/posixos.c:433 msgid "read jobs pipe" msgstr "Lese Pipe für die Jobs" #: src/read.c:181 #, c-format msgid "Reading makefiles...\n" msgstr "„make“-Steuerdateien werden gelesen...\n" #: src/read.c:336 #, c-format msgid "Reading makefile '%s'" msgstr "„make“-Steuerdatei „%s“ wird gelesen" #: src/read.c:338 #, c-format msgid " (no default goal)" msgstr " (kein Standard-Ziel)" #: src/read.c:340 #, c-format msgid " (search path)" msgstr " (Suchpfad)" #: src/read.c:342 #, c-format msgid " (don't care)" msgstr " (macht nichts)" #: src/read.c:344 #, c-format msgid " (no ~ expansion)" msgstr " (keine ~-Auflösung)" #: src/read.c:655 #, c-format msgid "Skipping UTF-8 BOM in makefile '%s'\n" msgstr "UTF-8 BOM in makefile „%s“ wird übersprungen\n" #: src/read.c:658 #, c-format msgid "Skipping UTF-8 BOM in makefile buffer\n" msgstr "UTF-8 BOM im makefile-Puffer wird übersprungen\n" #: src/read.c:787 #, c-format msgid "invalid syntax in conditional" msgstr "Ungültige Syntax in der Bedingung" #: src/read.c:960 #, c-format msgid "%s: failed to load" msgstr "%s: konnte nicht geladen werden" #: src/read.c:986 #, c-format msgid "recipe commences before first target" msgstr "Rezept beginnt vor dem ersten Ziel" #: src/read.c:1035 #, c-format msgid "missing rule before recipe" msgstr "Es fehlt eine Regel vor der Regel" #: src/read.c:1136 #, c-format msgid "missing separator (did you mean TAB instead of 8 spaces?)" msgstr "fehlender Trenner (Meinten Sie TAB anstelle von 8 Leerzeichen?)" #: src/read.c:1138 #, c-format msgid "missing separator" msgstr "Fehlender Trenner" #: src/read.c:1283 #, c-format msgid "missing target pattern" msgstr "Es fehlt ein Ziel-Muster" #: src/read.c:1285 #, c-format msgid "multiple target patterns" msgstr "Mehrfache Ziel-Muster" #: src/read.c:1289 #, c-format msgid "target pattern contains no '%%'" msgstr "Ziel-Muster enthält kein „%%“" #: src/read.c:1404 #, c-format msgid "missing 'endif'" msgstr "Fehlendes „endif“" #: src/read.c:1443 src/read.c:1488 src/variable.c:1600 #, c-format msgid "empty variable name" msgstr "Leerer Variablenname" #: src/read.c:1478 #, c-format msgid "extraneous text after 'define' directive" msgstr "Überflüssiger Text nach einer „define“-Anweisung" #: src/read.c:1503 #, c-format msgid "missing 'endef', unterminated 'define'" msgstr "Fehlendes „endef“, nicht abgeschlossenes „define“" #: src/read.c:1531 #, c-format msgid "extraneous text after 'endef' directive" msgstr "Überflüssiger Text nach einer „endef“-Anweisung" #: src/read.c:1603 #, c-format msgid "extraneous text after '%s' directive" msgstr "Überflüssiger Text nach einer „%s“-Anweisung" #: src/read.c:1604 #, c-format msgid "extraneous '%s'" msgstr "Überflüssiges „%s“" #: src/read.c:1632 #, c-format msgid "only one 'else' per conditional" msgstr "Es ist nur ein „else“ pro Bedingung erlaubt" #: src/read.c:1908 #, c-format msgid "Malformed target-specific variable definition" msgstr "Falsche Ziel-bezogene Variablendefinition" #: src/read.c:1968 #, c-format msgid "prerequisites cannot be defined in recipes" msgstr "Voraussetzungen können nicht in Regeln definiert werden" #: src/read.c:1986 #, c-format msgid "grouped targets must provide a recipe" msgstr "" #: src/read.c:2029 #, c-format msgid "mixed implicit and static pattern rules" msgstr "Implizite und statische Muster-Regeln wurden vermischt" #: src/read.c:2052 #, c-format msgid "mixed implicit and normal rules" msgstr "Implizite und normale Regeln wurden vermischt" #: src/read.c:2107 #, c-format msgid "target '%s' doesn't match the target pattern" msgstr "Target „%s“ passt nicht zum Ziel-Muster" #: src/read.c:2122 src/read.c:2168 #, c-format msgid "target file '%s' has both : and :: entries" msgstr "Das Ziel „%s“ enthält sowohl „:“- als auch „::“-Einträge" #: src/read.c:2128 #, c-format msgid "target '%s' given more than once in the same rule" msgstr "Das Ziel „%s“ steht mehrfach in derselben Regel." #: src/read.c:2138 #, c-format msgid "warning: overriding recipe for target '%s'" msgstr "Warnung: Die Befehle für das Ziel „%s“ werden überschrieben" #: src/read.c:2141 #, c-format msgid "warning: ignoring old recipe for target '%s'" msgstr "Warnung: Alte Befehle für das Ziel „%s“ werden ignoriert" #: src/read.c:2254 #, c-format msgid "*** mixed implicit and normal rules: deprecated syntax" msgstr "*** Implizite und normale Regeln wurden vermischt" #: src/read.c:2271 #, fuzzy, c-format msgid "warning: overriding group membership for target '%s'" msgstr "Warnung: Die Befehle für das Ziel „%s“ werden überschrieben" #: src/read.c:2636 #, c-format msgid "warning: NUL character seen; rest of line ignored" msgstr "Warnung: NULL-Zeichen gelesen; der Rest der Zeile wird ignoriert" #: src/remake.c:226 #, c-format msgid "Nothing to be done for '%s'." msgstr "Für das Ziel „%s“ ist nichts zu tun." #: src/remake.c:227 #, c-format msgid "'%s' is up to date." msgstr "„%s“ ist bereits aktuell." #: src/remake.c:323 #, c-format msgid "Pruning file '%s'.\n" msgstr "Die Datei „%s“ wird \"gestutzt\" (der Abhängigkeitsgraph).\n" #: src/remake.c:389 #, 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" #: src/remake.c:399 #, c-format msgid "%sNo rule to make target '%s'%s" msgstr "%sKeine Regel, um „%s“ zu erstellen%s" #: src/remake.c:425 #, c-format msgid "Considering target file '%s'.\n" msgstr "Betrachte Ziel-Datei „%s“.\n" #: src/remake.c:432 #, 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" #: src/remake.c:444 #, c-format msgid "File '%s' was considered already.\n" msgstr "Die Datei „%s“ wurde bereits betrachtet.\n" #: src/remake.c:454 #, c-format msgid "Still updating file '%s'.\n" msgstr "Die Datei „%s“ wird immer noch aktualisiert.\n" #: src/remake.c:457 #, c-format msgid "Finished updating file '%s'.\n" msgstr "Aktualisierung der Datei „%s“ beendet.\n" #: src/remake.c:486 #, c-format msgid "File '%s' does not exist.\n" msgstr "Die Datei „%s“ existiert nicht.\n" #: src/remake.c:494 #, c-format msgid "" "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp" msgstr "" "*** Warnung: mit .LOW_RESOLUTION_TIME gekennzeichnete Datei „%s“ hat einen\n" " hochaufgelösten Zeitstempel" #: src/remake.c:507 src/remake.c:1039 #, c-format msgid "Found an implicit rule for '%s'.\n" msgstr "Eine implizite Regel für „%s“ wurde gefunden.\n" #: src/remake.c:509 src/remake.c:1041 #, c-format msgid "No implicit rule found for '%s'.\n" msgstr "Keine implizite Regel für „%s“ gefunden.\n" #: src/remake.c:515 #, c-format msgid "Using default recipe for '%s'.\n" msgstr "Die Standard-Regel für „%s“ wird verwendet.\n" #: src/remake.c:549 src/remake.c:1088 #, c-format msgid "Circular %s <- %s dependency dropped." msgstr "Zirkuläre Abhängigkeit %s <- %s wird nicht verwendet." #: src/remake.c:674 #, c-format msgid "Finished prerequisites of target file '%s'.\n" msgstr "Fertig mit den Voraussetzungen für die Ziel-Datei „%s“.\n" #: src/remake.c:680 #, c-format msgid "The prerequisites of '%s' are being made.\n" msgstr "Die Voraussetzungen von „%s“ werden fertiggestellt.\n" #: src/remake.c:694 #, c-format msgid "Giving up on target file '%s'.\n" msgstr "Die Arbeit an der Target-Datei „%s“ wurde aufgegeben.\n" #: src/remake.c:699 #, c-format msgid "Target '%s' not remade because of errors." msgstr "Das Ziel „%s“ wurde wegen Fehlern nicht aktualisiert." #: src/remake.c:751 #, 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" #: src/remake.c:756 #, 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" #: src/remake.c:761 #, 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" #: src/remake.c:764 #, 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" #: src/remake.c:782 #, 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" #: src/remake.c:789 #, 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" #: src/remake.c:794 #, c-format msgid "Making '%s' due to always-make flag.\n" msgstr "„%s“ wird aufgrund der Keinnzeichnung als always-make erzeugt.\n" #: src/remake.c:802 #, c-format msgid "No need to remake target '%s'" msgstr "Es ist nicht notwendig, das Ziel „%s“ neu zu erzeugen" #: src/remake.c:804 #, c-format msgid "; using VPATH name '%s'" msgstr "; benutze VPATH-Name „%s“" #: src/remake.c:824 #, c-format msgid "Must remake target '%s'.\n" msgstr "Das Target „%s“ muss neu erzeugt werden.\n" #: src/remake.c:830 #, c-format msgid " Ignoring VPATH name '%s'.\n" msgstr " Der VPATH-Name „%s“ wird ignoriert.\n" #: src/remake.c:839 #, c-format msgid "Recipe of '%s' is being run.\n" msgstr "Die Regel für „%s“ wird gerade ausgeführt.\n" #: src/remake.c:846 #, c-format msgid "Failed to remake target file '%s'.\n" msgstr "Fehler beim Aktualisieren der Ziel-Datei „%s“.\n" #: src/remake.c:849 #, c-format msgid "Successfully remade target file '%s'.\n" msgstr "Die Zieldatei „%s“ wurde erfolgreich aktualisiert.\n" #: src/remake.c:852 #, c-format msgid "Target file '%s' needs to be remade under -q.\n" msgstr "Zieldatei „%s“ muss bei -q aktualisiert werden.\n" #: src/remake.c:1047 #, c-format msgid "Using default commands for '%s'.\n" msgstr "Die Standard-Kommandos für „%s“ werden verwendet.\n" #: src/remake.c:1422 #, 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" #: src/remake.c:1662 #, c-format msgid ".LIBPATTERNS element '%s' is not a pattern" msgstr ".LIBPATTERNS Element „%s“ ist kein Muster" #: src/remote-cstms.c:122 #, c-format msgid "Customs won't export: %s\n" msgstr "Customs wird nicht exportieren: %s\n" #: src/rule.c:289 #, c-format msgid "warning: ignoring prerequisites on suffix rule definition" msgstr "" #: src/rule.c:530 msgid "" "\n" "# Implicit Rules" msgstr "" "\n" "# Implizite Regeln" #: src/rule.c:545 msgid "" "\n" "# No implicit rules." msgstr "" "\n" "# Keine impliziten Regeln vorhanden." #: src/rule.c:548 #, fuzzy, c-format msgid "" "\n" "# %u implicit rules, %u (%.1f%%) terminal." msgstr "" "\n" "# %u implizite Regeln, %u" #: src/rule.c:557 #, c-format msgid "BUG: num_pattern_rules is wrong! %u != %u" msgstr "BUG: „num_pattern_rules“ falsch! %u != %u" #: src/signame.c:84 msgid "unknown signal" msgstr "Unbekanntes Signal" #: src/signame.c:92 msgid "Hangup" msgstr "Aufgelegt" #: src/signame.c:95 msgid "Interrupt" msgstr "Abgebrochen (Interrupt)" #: src/signame.c:98 msgid "Quit" msgstr "Quit" #: src/signame.c:101 msgid "Illegal Instruction" msgstr "Illegaler Befehl" #: src/signame.c:104 msgid "Trace/breakpoint trap" msgstr "Verfolgen/anhalten abfangen (Trace/breakpoint trap)" #: src/signame.c:109 msgid "Aborted" msgstr "Abgebrochen (Aborted)" #: src/signame.c:112 msgid "IOT trap" msgstr "IOT abfangen (IOT trap)" #: src/signame.c:115 msgid "EMT trap" msgstr "EMT abfangen (EMT trap)" #: src/signame.c:118 msgid "Floating point exception" msgstr "Gleitkommafehler" #: src/signame.c:121 msgid "Killed" msgstr "Abgebrochen (Killed)" #: src/signame.c:124 msgid "Bus error" msgstr "Bus-Fehler" #: src/signame.c:127 msgid "Segmentation fault" msgstr "Adressierungsdefekt" #: src/signame.c:130 msgid "Bad system call" msgstr "Falscher Systemaufruf" #: src/signame.c:133 msgid "Broken pipe" msgstr "Zerstörte Pipe" #: src/signame.c:136 msgid "Alarm clock" msgstr "Wecksignal" #: src/signame.c:139 msgid "Terminated" msgstr "Abgebrochen (Terminated)" #: src/signame.c:142 msgid "User defined signal 1" msgstr "Nutzersignal 1" #: src/signame.c:145 msgid "User defined signal 2" msgstr "Nutzersignal 2" #: src/signame.c:150 src/signame.c:153 msgid "Child exited" msgstr "Kindprozess beendet" #: src/signame.c:156 msgid "Power failure" msgstr "Stromausfall" #: src/signame.c:159 msgid "Stopped" msgstr "Angehalten" #: src/signame.c:162 msgid "Stopped (tty input)" msgstr "Angehalten (tty input)" #: src/signame.c:165 msgid "Stopped (tty output)" msgstr "Angehalten (tty output)" #: src/signame.c:168 msgid "Stopped (signal)" msgstr "Angehalten (signal)" #: src/signame.c:171 msgid "CPU time limit exceeded" msgstr "CPU-Zeitschranke überschritten" #: src/signame.c:174 msgid "File size limit exceeded" msgstr "Dateigrößenschranke überschritten" #: src/signame.c:177 msgid "Virtual timer expired" msgstr "Virtueller Timer erloschen" #: src/signame.c:180 msgid "Profiling timer expired" msgstr "Profiling Timer erloschen" #: src/signame.c:186 msgid "Window changed" msgstr "Fenster hat sich verändert" #: src/signame.c:189 msgid "Continued" msgstr "Fortgesetzt" #: src/signame.c:192 msgid "Urgent I/O condition" msgstr "Dringende I/O-Bedingung" #: src/signame.c:199 src/signame.c:208 msgid "I/O possible" msgstr "I/O möglich" #: src/signame.c:202 msgid "SIGWIND" msgstr "SIGWIND" #: src/signame.c:205 msgid "SIGPHONE" msgstr "SIGPHONE" #: src/signame.c:211 msgid "Resource lost" msgstr "Ressource verloren gegangen" #: src/signame.c:214 msgid "Danger signal" msgstr "Gefahrensignal" #: src/signame.c:217 msgid "Information request" msgstr "Informationsanforderung" #: src/signame.c:220 msgid "Floating point co-processor not available" msgstr "Es ist kein Koprozessor für Fließkommaoperationen vorhanden" #: src/strcache.c:274 #, c-format msgid "" "\n" "%s No strcache buffers\n" msgstr "" "\n" "%s Keine Puffer für strcache\n" #: src/strcache.c:304 #, c-format msgid "" "\n" "%s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu " "B\n" msgstr "" "\n" "%s Puffer für strcache: %lu (%lu) / Zeichenketten = %lu / Speicher = %lu B / " "ø = %lu B\n" #: src/strcache.c:308 #, fuzzy, c-format msgid "" "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B\n" msgstr "" "%s aktueller Puffer: Größe = %hu B / benutzt = %hu B / Anzahl = %hu / ø = " "%hu B\n" #: src/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" #: src/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" #: src/strcache.c:326 #, c-format msgid "" "\n" "%s strcache performance: lookups = %lu / hit rate = %lu%%\n" msgstr "" "\n" "%s Leistung von strcache: Suchen = %lu / Trefferrate = %lu%%\n" #: src/strcache.c:328 msgid "" "# hash-table stats:\n" "# " msgstr "" "# Statistik für Hashtabelle:\n" "# " #: src/variable.c:1653 msgid "automatic" msgstr "automatisch" #: src/variable.c:1656 msgid "default" msgstr "Standard" #: src/variable.c:1659 msgid "environment" msgstr "Umgebung" #: src/variable.c:1662 msgid "makefile" msgstr "Makefile" #: src/variable.c:1665 msgid "environment under -e" msgstr "Umgebung per -e" #: src/variable.c:1668 msgid "command line" msgstr "Kommandozeile" #: src/variable.c:1671 msgid "'override' directive" msgstr "„override“-Anweisung" #: src/variable.c:1682 #, c-format msgid " (from '%s', line %lu)" msgstr " (aus „%s“, Zeile %lu)" #: src/variable.c:1745 msgid "# variable set hash-table stats:\n" msgstr "" "# Hashtabellen-Statistik für Variablen:\n" "\n" #: src/variable.c:1756 msgid "" "\n" "# Variables\n" msgstr "" "\n" "# Variablen\n" #: src/variable.c:1760 msgid "" "\n" "# Pattern-specific Variable Values" msgstr "" "\n" "# Musterspezifische Variablenwerte" #: src/variable.c:1774 msgid "" "\n" "# No pattern-specific variable values." msgstr "" "\n" "# Keine musterspezifischen Variablenwerte." #: src/variable.c:1776 #, c-format msgid "" "\n" "# %u pattern-specific variable values" msgstr "" "\n" "# %u musterspezifische Variablenwerte" #: src/variable.h:229 #, c-format msgid "warning: undefined variable '%.*s'" msgstr "Warnung: undefinierte Variable „%.*s“" #: src/vmsfunctions.c:91 #, c-format msgid "sys$search() failed with %d\n" msgstr "„sys$search“ schlug mit %d fehl\n" #: src/vmsjobs.c:244 #, 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" #: src/vmsjobs.c:681 #, c-format msgid "BUILTIN CD %s\n" msgstr "BUILTIN CD %s\n" #: src/vmsjobs.c:1224 #, c-format msgid "DCL: %s\n" msgstr "DCL: %s\n" #: src/vmsjobs.c:1284 #, c-format msgid "Append output to %s\n" msgstr "Ausgabe nach %s umgeleitet\n" #: src/vmsjobs.c:1309 #, c-format msgid "Append %.*s and cleanup\n" msgstr "%.*s anhängen und aufräumen\n" #: src/vmsjobs.c:1322 #, c-format msgid "Executing %s instead\n" msgstr "%s wird stattdessen ausgeführt\n" #: src/vpath.c:603 msgid "" "\n" "# VPATH Search Paths\n" msgstr "" "\n" "# VPATH-Suchpfade\n" #: src/vpath.c:620 msgid "# No 'vpath' search paths." msgstr "# Keine „vpath“-Suchpfade." #: src/vpath.c:622 #, c-format msgid "" "\n" "# %u 'vpath' search paths.\n" msgstr "" "\n" "# %u „vpath“-Suchpfade.\n" #: src/vpath.c:625 msgid "" "\n" "# No general ('VPATH' variable) search path." msgstr "" "\n" "# Kein allgemeiner Suchpfad (Variable „VPATH“)." #: src/vpath.c:631 msgid "" "\n" "# General ('VPATH' variable) search path:\n" "# " msgstr "" "\n" "# Allgemeiner Suchpfad (Variable „VPATH“):\n" "# " #: src/w32/w32os.c:44 #, c-format msgid "Jobserver slots limited to %d\n" msgstr "Zeitschlitze der Jobservers auf %d begranzt\n" #: src/w32/w32os.c:60 #, c-format msgid "creating jobserver semaphore: (Error %ld: %s)" msgstr "Jobserver-Semaphore wird erzeugt: (Fehler %ld: %s)" #: src/w32/w32os.c:79 #, 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)" #: src/w32/w32os.c:82 #, c-format msgid "Jobserver client (semaphore %s)\n" msgstr "Jobserver-Klient (Semaphore %s)\n" #: src/w32/w32os.c:123 #, c-format msgid "release jobserver semaphore: (Error %ld: %s)" msgstr "Freigabe der Jobserver-Semaphore: (Fehler %ld: %s)" #: src/w32/w32os.c:194 #, c-format msgid "semaphore or child process wait: (Error %ld: %s)" msgstr "warten auf Semaphore oder Kindprozess: (Fehler %ld: %s)" #~ msgid "%s: %s: Command not found\n" #~ msgstr "%s: %s: Kommando nicht gefunden\n" #~ msgid "%s[%u]: %s: Command not found\n" #~ msgstr "%s[%u]: %s: Befehl nicht gefunden\n" #~ msgid "%s: Shell program not found" #~ msgstr "%s: Shell-Programm wurde nicht gefunden" #~ msgid "%s is suspending for 30 seconds..." #~ msgstr "%s setzt für 30 Sekunden aus..." #~ msgid "done sleep(30). Continuing.\n" #~ msgstr "„sleep(30)“ ist abgeschlossen. Es geht weiter.\n" #~ msgid "Unknown error %d" #~ msgstr "Unbekannter Fehler %d" #~ msgid "Warning: File '%s' has modification time in the future" #~ msgstr "Warnung: Datei „%s“ hat zukünftige Änderungszeit" #~ msgid " terminal." #~ msgstr " Terminal." #~ 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!" #~ msgid "*** [%s] Error 0x%x (ignored)" #~ msgstr "*** [%s] Fehler 0x%x (ignoriert)" #~ msgid "Do not specify -j or --jobs if sh.exe is not available." #~ msgstr "" #~ "Wenn „sh.exe“ nicht vorhanden ist, \n" #~ "sollten Sie nicht „-j“ oder „--jobs“ angeben." #~ msgid "Resetting make for single job mode." #~ msgstr "„make“ wird so umgestellt, dass nur ein Job laufen kann." #, fuzzy #~ 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" #~ "%sPARTICULAR PURPOSE.\n" #~ msgstr "" #~ ", von Richard Stallman und Roland McGrath.\n" #~ "%sErstellt für %s\n" #~ "%sCopyright (C) 1988, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 2000\n" #~ "%s\tFree Software Foundation, Inc.\n" #~ "%sDies ist Freie Software; siehe die Programmquellen für " #~ "Vervielfältigungsbedingungen.\n" #~ "%sEs gibt KEINE Gewährleistung; nicht einmal für VERMARKTUNG oder " #~ "NUTZBARKEIT FÜR EINEN\n" #~ "%sBESONDEREN ZWECK.\n" #~ "\n" #~ "%sFehlermeldungen (auf Englisch) an .\n" #~ "\n" #~ msgid "extraneous `endef'" #~ msgstr "Überflüssiges „endef“" #~ msgid "empty `override' directive" #~ msgstr "Leere „override“-Anweisung" #~ msgid "invalid `override' directive" #~ msgstr "Ungültige „override“-Anweisung" #~ msgid "-warning, CTRL-Y will leave sub-process(es) around.\n" #~ msgstr "-Warnung: STRG-Y wird Unterprozesse übriglassen!\n" #~ msgid "" #~ "\n" #~ "# %u files in %u hash buckets.\n" #~ msgstr "" #~ "\n" #~ "# %u Dateien zu %u hash-Werten.\n" #~ msgid "# average %.3f files per bucket, max %u files in one bucket.\n" #~ msgstr "" #~ "# durchschnittlich %.3f Dateien je hash-Wert,\n" #~ "max. %u Dateien zu einem hash-Wert.\n" #~ msgid "Syntax error, still inside '\"'\n" #~ msgstr "Syntaxfehler, immer noch in '\"'\n" #~ msgid "Got a SIGCHLD; %u unreaped children.\n" #~ msgstr "Erhielt Signal „SIGCHLD“; %u unbeendete Kindprozesse.\n" #~ msgid "DIRECTORY" #~ msgstr "VERZEICHNIS" #~ msgid "Change to DIRECTORY before doing anything" #~ msgstr "In das VERZEICHNIS wechseln, bevor etwas anderes ausgeführt wird" #~ msgid "FLAGS" #~ msgstr "FLAGS" #~ msgid "Suspend process to allow a debugger to attach" #~ msgstr "Prozess aussetzeb, um das Einklinken eines Debuggers zu ermöglichen" #~ msgid "Environment variables override makefiles" #~ msgstr "Umgebungsvariablen überschreiben „make“-Steuerdateien" #~ msgid "FILE" #~ msgstr "DATEI" #~ msgid "Read FILE as a makefile" #~ msgstr "DATEI als „make“-Steuerdatei lesen" #~ msgid "Search DIRECTORY for included makefiles" #~ msgstr "Das VERZEICHNIS nach eingebundenen „make“-Steuerdateien durchsuchen" #~ msgid "Don't start multiple jobs unless load is below N" #~ msgstr "Nur bei Belastung unterhalb N mehrere Prozesse starten" #~ msgid "Don't actually run any commands; just print them" #~ msgstr "Befehle nur anzeigen, nicht ausführen" #~ msgid "Consider FILE to be very old and don't remake it" #~ msgstr "DATEI als sehr alt betrachten und sie nicht neu erzeugen" #~ msgid "Don't echo commands" #~ msgstr "Die Kommandos nicht ausgeben" #~ msgid "Turns off -k" #~ msgstr "-k abschalten" #~ msgid "Consider FILE to be infinitely new" #~ msgstr "Die DATEI stets als neu betrachten" # !!! Attention: concatenated with the following messages!!! #~ msgid "Entering" #~ msgstr "Wechsel in das Verzeichnis" # !!! Attention: concatenated with the following messages!!! #~ msgid "Leaving" #~ msgstr "Verlassen des Verzeichnisses" #~ msgid "no file name for `%sinclude'" #~ msgstr "Kein Dateiname für „%sinclude“" #~ msgid "target `%s' leaves prerequisite pattern empty" #~ msgstr "Target „%s“ lässt Voraussetzungs-Muster leer" #~ msgid "# No variables." #~ msgstr "# Keine Variablen vorhanden." #~ msgid "# average of %.1f variables per bucket, max %u in one bucket.\n" #~ msgstr "# Durchschnittlich %.1f Variablen pro Wert, max %u je Wert.\n" #~ msgid "# average of %d.%d variables per bucket, max %u in one bucket.\n" #~ msgstr "# Durchschnittlich %d.%d Variablen pro Wert, max %u je Wert.\n" #~ msgid "the `word' function takes a positive index argument" #~ msgstr "Die „word“-Funktion erwartet als Argument einen positiven Index" make-4.3/po/cs.po0000644000175000017500000017212313611136530010606 00000000000000# 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 , 2011, 2013, 2014, 2016, 2019, 2020. # # directive → klíÄové slovo (nepÅ™ekládat jako příkaz kvůli zámÄ›nÄ›) # hash → haÅ¡ (zapisovat Äesky) # chain → Å™etÄ›zec # jobserver → správce úloh # make (verb) → vyrobit # make (substantivum) → (program) make (skloňovat, nelze-li jinak) # makefile → makefile (nepÅ™ekládat, ale skloňovat) # (archive) member → prvek # (C structure) member → Älen # pattern → vzor (nikoliv vzorek) # prerequisite → prerekvizita (pÅ™edpoklad se nehodí jako duální slovo # k target) # reap (child) → uklidit potomka # recipe → návod # target → cíl # token → token (nepÅ™ekládat) # # SECONDARY, INTERMEDIATE, PRECIOUS apod. nepÅ™ekládat, i když jsou použity # jako přívlastek. Jedná se o identifikátory jazyka make. # msgid "" msgstr "" "Project-Id-Version: make 4.2.93\n" "Report-Msgid-Bugs-To: bug-make@gnu.org\n" "POT-Creation-Date: 2020-01-19 15:34-0500\n" "PO-Revision-Date: 2020-01-03 17:47+01:00\n" "Last-Translator: Petr Pisar \n" "Language-Team: Czech \n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" #: src/ar.c:46 #, c-format msgid "attempt to use unsupported feature: '%s'" msgstr "pokus použít nepodporovanou vlastnost: „%s“" #: src/ar.c:123 #, c-format msgid "touch archive member is not available on VMS" msgstr "nastavení Äasu zmÄ›ny prvku archivu není na VMS dostupné" #: src/ar.c:147 #, c-format msgid "touch: Archive '%s' does not exist" msgstr "touch: Archiv „%s“ neexistuje" #: src/ar.c:150 #, c-format msgid "touch: '%s' is not a valid archive" msgstr "touch: „%s“ není platným archivem" #: src/ar.c:157 #, c-format msgid "touch: Member '%s' does not exist in '%s'" msgstr "touch: Prvek „%s“ v „%s“ neexistuje" #: src/ar.c:164 #, c-format 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“" #: src/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" #: src/arscan.c:236 #, c-format msgid "lbr$ini_control() failed with status = %d" msgstr "funkce lbr$ini_control() selhala se stavem = %d" #: src/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í stav prvku %d" # TODO: Pluralize #: src/arscan.c:944 #, c-format msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n" msgstr "Prvek „%s“%s: %'ld bajtů at %ld (%ld).\n" #: src/arscan.c:945 msgid " (name might be truncated)" msgstr " (název může být zkrácen)" #: src/arscan.c:947 #, c-format msgid " Date %s" msgstr " Datum %s" #: src/arscan.c:948 #, c-format msgid " uid = %d, gid = %d, mode = 0%o.\n" msgstr " UID = %d, GID = %d, práva = 0%o\n" #: src/commands.c:403 #, c-format msgid "Recipe has too many lines (%ud)" msgstr "Návod má příliÅ¡ mnoho řádků (%ud)" #: src/commands.c:504 msgid "*** Break.\n" msgstr "*** PÅ™eruÅ¡eno.\n" #: src/commands.c:628 #, c-format msgid "*** [%s] Archive member '%s' may be bogus; not deleted" msgstr "*** [%s] Prvek archivu „%s“ je možná chybný, nesmazáno" #: src/commands.c:632 #, c-format msgid "*** Archive member '%s' may be bogus; not deleted" msgstr "*** Prvek archivu „%s“ ne možná chybný, nesmazáno" #: src/commands.c:646 #, c-format msgid "*** [%s] Deleting file '%s'" msgstr "*** [%s] Maže se soubor „%s“" #: src/commands.c:648 #, c-format msgid "*** Deleting file '%s'" msgstr "*** Maže se soubor „%s“" #: src/commands.c:684 msgid "# recipe to execute" msgstr "# spustitelný návod" #: src/commands.c:687 msgid " (built-in):" msgstr " (vestavÄ›ný):" #: src/commands.c:689 #, c-format msgid " (from '%s', line %lu):\n" msgstr " (z „%s“, řádek %lu):\n" #: src/dir.c:1073 msgid "" "\n" "# Directories\n" msgstr "" "\n" "# Adresáře\n" #: src/dir.c:1085 #, c-format msgid "# %s: could not be stat'd.\n" msgstr "# %s: nebylo možné nad ním zavolat stat().\n" #: src/dir.c:1089 msgid "# %s (key %s, mtime %I64u): could not be opened.\n" msgstr "# %s (klÃ­Ä %s, Äas zmÄ›ny obsahu %I64u): nebylo možné otevřít.\n" #: src/dir.c:1094 #, 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" #: src/dir.c:1099 #, 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" #: src/dir.c:1126 msgid "# %s (key %s, mtime %I64u): " msgstr "# %s (klÃ­Ä %s, Äas zmÄ›ny obsahu %I64u): " #: src/dir.c:1131 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): " msgstr "# %s (zařízení %d, iuzel [%d,%d,%d]): " #: src/dir.c:1136 #, c-format msgid "# %s (device %ld, inode %ld): " msgstr "# %s (zařízení %ld, iuzel %ld): " #: src/dir.c:1142 src/dir.c:1163 msgid "No" msgstr "Žádný" # TODO: Pluralize #: src/dir.c:1145 src/dir.c:1166 msgid " files, " msgstr " souborů, " #: src/dir.c:1147 src/dir.c:1168 msgid "no" msgstr "žádný " # TODO: Pluralize #: src/dir.c:1150 msgid " impossibilities" msgstr " nemožností " #: src/dir.c:1154 msgid " so far." msgstr " zatím." # TODO: Pluralize #: src/dir.c:1171 #, c-format msgid " impossibilities in %lu directories.\n" msgstr " nemožností v %lu adresářích.\n" #: src/expand.c:125 #, c-format msgid "Recursive variable '%s' references itself (eventually)" msgstr "Rekurzivní promÄ›nná „%s“ odkazuje na sebe (nakonec)" #: src/expand.c:271 #, c-format msgid "unterminated variable reference" msgstr "neukonÄený odkaz na promÄ›nnou" #: src/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," #: src/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," #: src/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“." #: src/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“." #: src/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" #: src/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" #: src/file.c:408 #, c-format msgid "*** Deleting intermediate file '%s'" msgstr "Maže se mezilehlý soubor „%s“ " #: src/file.c:412 #, c-format msgid "Removing intermediate files...\n" msgstr "Odstraňují se mezilehlé soubory…\n" #: src/file.c:872 msgid "Current time" msgstr "Aktuální Äas" #: src/file.c:876 #, c-format msgid "%s: Timestamp out of range; substituting %s" msgstr "%s: ÄŒasový údaj mimo rozsah, nahrazuje se %s" #: src/file.c:1016 msgid "# Not a target:" msgstr "# Není cílem:" #: src/file.c:1021 msgid "# Precious file (prerequisite of .PRECIOUS)." msgstr "# Cenný soubor (prerekvizita k .PRECIOUS)." #: src/file.c:1023 msgid "# Phony target (prerequisite of .PHONY)." msgstr "# FaleÅ¡ný cíl (prerekvizita k .PHONY)." #: src/file.c:1025 msgid "# Command line target." msgstr "# Cíl příkazové řádky." #: src/file.c:1027 msgid "# A default, MAKEFILES, or -include/sinclude makefile." msgstr "# Default, MAKEFILES nebo -include/sinclude makefile." #: src/file.c:1029 msgid "# Builtin rule" msgstr "# VestavÄ›né pravidlo" #: src/file.c:1031 msgid "# Implicit rule search has been done." msgstr "# Hledalo se za pomoci implicitních pravidel." #: src/file.c:1032 msgid "# Implicit rule search has not been done." msgstr "# Nehledalo se za pomoci implicitních pravidel." #: src/file.c:1034 #, c-format msgid "# Implicit/static pattern stem: '%s'\n" msgstr "# KoÅ™en implicitního/statického vzoru: „%s“\n" #: src/file.c:1036 msgid "# File is an intermediate prerequisite." msgstr "# Soubor je mezilehlá prerekvizita." #: src/file.c:1040 msgid "# Also makes:" msgstr "# Rovněž vyrábí:" #: src/file.c:1046 msgid "# Modification time never checked." msgstr "# ÄŒas zmÄ›ny obsahu se nikdy nekontroluje." #: src/file.c:1048 msgid "# File does not exist." msgstr "# Soubor neexistuje." #: src/file.c:1050 msgid "# File is very old." msgstr "# Soubor je velmi starý." #: src/file.c:1055 #, c-format msgid "# Last modified %s\n" msgstr "# Obsah naposledy zmÄ›nÄ›n v %s\n" #: src/file.c:1058 msgid "# File has been updated." msgstr "# Soubor byl aktualizován." #: src/file.c:1058 msgid "# File has not been updated." msgstr "# Soubor nebyl aktualizován." #: src/file.c:1062 msgid "# Recipe currently running (THIS IS A BUG)." msgstr "# Návod se právÄ› vykonává (TOTO JE CHYBA)." #: src/file.c:1065 msgid "# Dependencies recipe running (THIS IS A BUG)." msgstr "# Návod pro závislosti se právÄ› vykonává (TOTO JE CHYBA)." #: src/file.c:1074 msgid "# Successfully updated." msgstr "# ÚspěšnÄ› aktualizováno." #: src/file.c:1078 msgid "# Needs to be updated (-q is set)." msgstr "# Je tÅ™eba aktualizovat (-q je nastaveno)." #: src/file.c:1081 msgid "# Failed to be updated." msgstr "# Aktualizace selhala." #: src/file.c:1086 msgid "# Invalid value in 'command_state' member!" msgstr "# Neplatná hodnota v Älenu „command_state“!" #: src/file.c:1105 msgid "" "\n" "# Files" msgstr "" "\n" "# Soubory" #: src/file.c:1109 msgid "" "\n" "# files hash-table stats:\n" "# " msgstr "" "\n" "# Statistika haÅ¡ovací tabulky souborů:\n" "# " #: src/file.c:1119 #, c-format msgid "%s: Field '%s' not cached: %s" msgstr "%s: Položka „%s“ není v keÅ¡i: %s" #: src/function.c:794 msgid "non-numeric first argument to 'word' function" msgstr "neÄíselný první argument funkce „word“" #: src/function.c:799 #, c-format msgid "first argument to 'word' function must be greater than 0" msgstr "první argument funkce „word“ musí být vetší než 0" #: src/function.c:819 msgid "non-numeric first argument to 'wordlist' function" msgstr "neÄíselný první argument funkce „wordlist“" #: src/function.c:821 msgid "non-numeric second argument to 'wordlist' function" msgstr "neÄíselný druhý argument funkce „wordlist“" #: src/function.c:1533 #, c-format msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n" msgstr "windows32_openpipe: DuplicateHandle(vstup) selhalo (chyba=%ld)\n" #: src/function.c:1557 #, c-format msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n" msgstr "" "windows32_openpipe: DuplicateHandle(chybový výstup) selhalo (chyba=%ld)\n" #: src/function.c:1564 #, c-format msgid "CreatePipe() failed (e=%ld)\n" msgstr "CreatePipe() selhalo (chyba=%ld)\n" #: src/function.c:1572 #, c-format msgid "windows32_openpipe(): process_init_fd() failed\n" msgstr "windows32_openpipe(): process_init_fd() selhalo\n" #: src/function.c:1857 #, c-format msgid "Cleaning up temporary batch file %s\n" msgstr "DoÄasný dávkový soubor %s se uklízí\n" #: src/function.c:2230 src/function.c:2255 #, c-format msgid "file: missing filename" msgstr "soubor: chybí název souboru" #: src/function.c:2234 src/function.c:2265 #, c-format msgid "open: %s: %s" msgstr "otevÅ™ení: %s: %s" #: src/function.c:2242 #, c-format msgid "write: %s: %s" msgstr "zápis: %s: %s" #: src/function.c:2245 src/function.c:2282 #, c-format msgid "close: %s: %s" msgstr "zavÅ™ení: %s: %s" #: src/function.c:2258 #, c-format msgid "file: too many arguments" msgstr "soubor: příliÅ¡ mnoho argumentů" #: src/function.c:2277 #, c-format msgid "read: %s: %s" msgstr "Ätení: %s: %s" #: src/function.c:2290 #, c-format msgid "file: invalid file operation: %s" msgstr "soubor: neplatná operace na souboru: %s" #: src/function.c:2405 #, c-format msgid "insufficient number of arguments (%d) to function '%s'" msgstr "nedostateÄný poÄet argumentů (%d) funkce „%s“" #: src/function.c:2417 #, c-format msgid "unimplemented on this platform: function '%s'" msgstr "na této platformÄ› neimplementováno: funkce „%s“" #: src/function.c:2483 #, c-format msgid "unterminated call to function '%s': missing '%c'" msgstr "neukonÄené volání funkce „%s“: chybí „%c“" #: src/function.c:2667 #, c-format msgid "Empty function name" msgstr "Prázdný název funkce" #: src/function.c:2669 #, c-format msgid "Invalid function name: %s" msgstr "Neplatný název funkce: %s" #: src/function.c:2671 #, c-format msgid "Function name too long: %s" msgstr "Název funkce je příliÅ¡ dlouhý: %s" #: src/function.c:2674 #, c-format msgid "Invalid minimum argument count (%u) for function %s" msgstr "Neplatný minimální poÄet argumentů (%u) funkce %s" #: src/function.c:2677 #, c-format msgid "Invalid maximum argument count (%u) for function %s" msgstr "Neplatný maximální poÄet argumentů (%u) funkce %s" #: src/getopt.c:659 #, c-format msgid "%s: option '%s' is ambiguous\n" msgstr "%s: pÅ™epínaÄ â€ž%s“ není jednoznaÄný\n" #: src/getopt.c:683 #, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s: pÅ™epínaÄe „--%s“ nepÅ™ipouÅ¡tí argument\n" #: src/getopt.c:688 #, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s: pÅ™epínaÄ â€ž%c%s“ nepÅ™ipouÅ¡tí argument\n" #: src/getopt.c:705 src/getopt.c:878 #, c-format msgid "%s: option '%s' requires an argument\n" msgstr "%s: pÅ™epínaÄ â€ž%s“ vyžaduje argument\n" #: src/getopt.c:734 #, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s: nerozpoznaný pÅ™epínaÄ â€ž--%s“\n" #: src/getopt.c:738 #, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s: nerozpoznaný pÅ™epínaÄ â€ž%c%s“\n" #: src/getopt.c:764 #, c-format msgid "%s: illegal option -- %c\n" msgstr "%s: zakázaný pÅ™epínaÄ – %c\n" #: src/getopt.c:767 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s: neplatný pÅ™epínaÄ – %c\n" #: src/getopt.c:797 src/getopt.c:927 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: pÅ™epínaÄ vyžaduje argument – %c\n" #: src/getopt.c:844 #, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s: pÅ™epínaÄ â€ž-W %s“ není jednoznaÄný\n" #: src/getopt.c:862 #, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s: pÅ™epínaÄ â€ž-W %s“ nepÅ™ipouÅ¡tí argument\n" #: src/guile.c:58 #, c-format msgid "guile: Expanding '%s'\n" msgstr "guile: Expanduje se „%s“\n" #: src/guile.c:74 #, c-format msgid "guile: Evaluating '%s'\n" msgstr "guile: Vyhodnocuje se „%s“\n" # TODO: Pluralize #: src/hash.c:50 #, c-format msgid "can't allocate %lu bytes for hash table: memory exhausted" msgstr "nelze alokovat %lu bajtů na haÅ¡ovací tabulku: paměť vyÄerpána" #: src/hash.c:280 #, c-format msgid "Load=%lu/%lu=%.0f%%, " msgstr "Zátěž = %lu/%lu = %.0f %%, " #: src/hash.c:282 #, c-format msgid "Rehash=%u, " msgstr "PÅ™ehaÅ¡ováno = %u, " #: src/hash.c:283 #, c-format msgid "Collisions=%lu/%lu=%.0f%%" msgstr "Kolizí = %lu/%lu = %.0f %%" #: src/implicit.c:38 #, c-format msgid "Looking for an implicit rule for '%s'.\n" msgstr "Hledá se implicitní pravidlo pro „%s“.\n" #: src/implicit.c:54 #, c-format msgid "Looking for archive-member implicit rule for '%s'.\n" msgstr "Hledá se implicitní pravidlo prvku archivu pro „%s“.\n" #: src/implicit.c:311 #, c-format msgid "Avoiding implicit rule recursion.\n" msgstr "Zabraňuje se rekurzi implicitního pravidla.\n" #: src/implicit.c:484 #, c-format msgid "Stem too long: '%s%.*s'.\n" msgstr "KoÅ™en je příliÅ¡ dlouhý: „%s%.*s“.\n" #: src/implicit.c:490 #, c-format msgid "Trying pattern rule with stem '%.*s'.\n" msgstr "Zkouší se pravidlo vzoru s koÅ™enem „%.*s“.\n" #: src/implicit.c:717 #, c-format msgid "Rejecting impossible rule prerequisite '%s'.\n" msgstr "Zamítá se nemožná prerekvizita pravidla „%s“.\n" #: src/implicit.c:718 #, c-format msgid "Rejecting impossible implicit prerequisite '%s'.\n" msgstr "Zamítá se nemožná implicitní prerekvizita „%s“.\n" #: src/implicit.c:732 #, c-format msgid "Trying rule prerequisite '%s'.\n" msgstr "Zkouší se prerekvizita pravidla „%s“.\n" #: src/implicit.c:733 #, c-format msgid "Trying implicit prerequisite '%s'.\n" msgstr "Zkouší se implicitní prerekvizita „%s“.\n" #: src/implicit.c:772 #, c-format msgid "Found prerequisite '%s' as VPATH '%s'\n" msgstr "Nalezena prerekvizita „%s“ jako VPATH „%s“\n" #: src/implicit.c:786 #, c-format msgid "Looking for a rule with intermediate file '%s'.\n" msgstr "Hledá se pravidlo s mezilehlým souborem „%s“.\n" #: src/job.c:370 msgid "Cannot create a temporary file\n" msgstr "DoÄasný soubor nelze vytvoÅ™it\n" #: src/job.c:548 msgid " (core dumped)" msgstr " (obraz pamÄ›ti uložen)" #: src/job.c:553 msgid " (ignored)" msgstr " (ignorováno)" #: src/job.c:557 src/job.c:1892 msgid "" msgstr "" #: src/job.c:573 #, c-format msgid "%s[%s: %s] Error %d%s" msgstr "%s[%s: %s] Chyba %d%s" #: src/job.c:662 #, c-format msgid "*** Waiting for unfinished jobs...." msgstr "*** ÄŒeká se na nedokonÄené úlohy…" #: src/job.c:704 #, c-format msgid "Live child %p (%s) PID %s %s\n" msgstr "Živý potomek %p (%s) PID %s %s\n" # Continuation of Live child #: src/job.c:706 src/job.c:900 src/job.c:1072 src/job.c:1644 #, c-format msgid " (remote)" msgstr " (vzdálený)" #: src/job.c:898 #, c-format msgid "Reaping winning child %p PID %s %s\n" msgstr "Uklízí se vyhrávající potomek %p PID %s %s\n" #: src/job.c:899 #, c-format msgid "Reaping losing child %p PID %s %s\n" msgstr "Uklízí se prohrávající potomek %p PID %s %s\n" #: src/job.c:950 #, c-format msgid "Cleaning up temp batch file %s\n" msgstr "Uklízí se doÄasný dávkový soubor %s\n" #: src/job.c:956 #, 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" #: src/job.c:1071 #, 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" #: src/job.c:1120 #, c-format msgid "Released token for child %p (%s).\n" msgstr "UvolnÄ›n token pro potomka %p (%s).\n" #: src/job.c:1575 src/job.c:2487 #, c-format msgid "process_easy() failed to launch process (e=%ld)\n" msgstr "process_easy() nedokázala spustit proces (chyba=%ld)\n" # FIXME: Pluralize #: src/job.c:1579 src/job.c:2491 #, c-format msgid "" "\n" "Counted %d args in failed launch\n" msgstr "" "\n" "NapoÄítáno %d argumentů v selhaném spuÅ¡tÄ›ní\n" #: src/job.c:1642 #, 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" #: src/job.c:1875 #, c-format msgid "Obtained token for child %p (%s).\n" msgstr "Získán token pro potomka %p (%s).\n" #: src/job.c:1902 #, c-format msgid "%s: target '%s' does not exist" msgstr "%s: cíl „%s“ neexistuje" #: src/job.c:1905 #, c-format msgid "%s: update target '%s' due to: %s" msgstr "%s: aktualizovat cíl „%s“ potÅ™ebný pro %s" #: src/job.c:2108 #, c-format msgid "cannot enforce load limits on this operating system" msgstr "na tomto operaÄním systému nelze vynutit omezení zátěže" #: src/job.c:2110 msgid "cannot enforce load limit: " msgstr "omezení zátěže nelze vynutit: " #: src/job.c:2200 #, c-format msgid "no more file handles: could not duplicate stdin\n" msgstr "nedostatek deskriptorů souboru: standardní vstup nelze zduplikovat\n" #: src/job.c:2212 #, c-format msgid "no more file handles: could not duplicate stdout\n" msgstr "nedostatek deskriptorů souboru: standardní výstup nelze zduplikovat\n" #: src/job.c:2226 #, c-format msgid "no more file handles: could not duplicate stderr\n" msgstr "nedostatek deskriptorů souboru: chybový výstup nelze zduplikovat\n" #: src/job.c:2241 #, c-format msgid "Could not restore stdin\n" msgstr "Standardní vstup nelze obnovit\n" #: src/job.c:2249 #, c-format msgid "Could not restore stdout\n" msgstr "Standardní výstup nelze obnovit\n" #: src/job.c:2257 #, c-format msgid "Could not restore stderr\n" msgstr "Chybový výstup nelze obnovit\n" #: src/job.c:2520 #, 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" #: src/job.c:2623 #, c-format msgid "spawnvpe: environment space might be exhausted" msgstr "spawnvpe: možná byl vyÄerpán prostor pro prostÅ™edí" #: src/job.c:2862 #, c-format msgid "$SHELL changed (was '%s', now '%s')\n" msgstr "PromÄ›nná $SHELL se zmÄ›nila (byla „%s“, nyní je „%s“)\n" #: src/job.c:3300 src/job.c:3485 #, c-format msgid "Creating temporary batch file %s\n" msgstr "Vytváří se doÄasný dávkový soubor %s\n" #: src/job.c:3308 #, c-format msgid "" "Batch file contents:\n" "\t@echo off\n" msgstr "" "Obsah dávkového souboru:\n" "\t@echo off\n" #: src/job.c:3497 #, c-format msgid "" "Batch file contents:%s\n" "\t%s\n" msgstr "" "Obsah dávkového souboru:%s\n" "\t%s\n" #: src/job.c:3605 #, 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" #: src/load.c:60 #, c-format msgid "Failed to open global symbol table: %s" msgstr "NepodaÅ™ilo se otevřít tabulku globálních symbolů: %s" #: src/load.c:97 #, c-format msgid "Loaded object %s is not declared to be GPL compatible" msgstr "Zavedený objekt %s není veden jako sluÄitelný s GPL" #: src/load.c:104 #, c-format msgid "Failed to load symbol %s from %s: %s" msgstr "Symbol %s z %s se nepodaÅ™ilo zavést: %s" #: src/load.c:149 #, c-format msgid "Empty symbol name for load: %s" msgstr "Pokus zavést prázdný název symbolu: %s" #: src/load.c:204 #, c-format msgid "Loading symbol %s from %s\n" msgstr "Zavádí se symbol %s z %s\n" #: src/load.c:256 #, c-format msgid "The 'load' operation is not supported on this platform." msgstr "Na této platformÄ› není operace zavedení (load) podporována." #: src/main.c:335 msgid "Options:\n" msgstr "PÅ™epínaÄe:\n" #: src/main.c:336 msgid " -b, -m Ignored for compatibility.\n" msgstr " -b, -m Ignoruje se kvůli kompatibilitÄ›.\n" #: src/main.c:338 msgid " -B, --always-make Unconditionally make all targets.\n" msgstr " -B, --always-make BezpodmíneÄnÄ› vyrobí vÅ¡echny cíle.\n" #: src/main.c:340 msgid "" " -C DIRECTORY, --directory=DIRECTORY\n" " Change to DIRECTORY before doing anything.\n" msgstr "" " -C ADRESÃŘ, --directory=ADRESÃŘ\n" " PÅ™ed dÄ›láním Äehokoliv se pÅ™epne do ADRESÃŘE.\n" #: src/main.c:343 msgid " -d Print lots of debugging information.\n" msgstr " -d Vypisuje mnoho ladicích údajů.\n" #: src/main.c:345 msgid "" " --debug[=FLAGS] Print various types of debugging information.\n" msgstr "" " --debug[=PŘÃZNAKY] Vypisuje ladicí údaje rozliÄných druhů.\n" #: src/main.c:347 msgid "" " -e, --environment-overrides\n" " Environment variables override makefiles.\n" msgstr "" " -e, --environment-overrides\n" " PromÄ›nné prostÅ™edí pÅ™ebijí ty z makefilu.\n" #: src/main.c:350 msgid "" " -E STRING, --eval=STRING Evaluate STRING as a makefile statement.\n" msgstr " -E ŘETÄšZEC, --eval=ŘETÄšZEC Vyhodnotí ŘETÄšZEC jako kód makefilu.\n" #: src/main.c:352 msgid "" " -f FILE, --file=FILE, --makefile=FILE\n" " Read FILE as a makefile.\n" msgstr "" " -f SOUBOR, --file=SOUBOR, --makefile=SOUBOR\n" " NaÄte SOUBOR coby makefile.\n" #: src/main.c:355 msgid " -h, --help Print this message and exit.\n" msgstr " -h, --help Vypíše tuto zprávu a skonÄí.\n" #: src/main.c:357 msgid " -i, --ignore-errors Ignore errors from recipes.\n" msgstr " -i, --ignore-errors Ignoruje chyby z návodů.\n" #: src/main.c:359 msgid "" " -I DIRECTORY, --include-dir=DIRECTORY\n" " Search DIRECTORY for included makefiles.\n" msgstr "" " -I ADRESÃŘ, --include-dir=ADRESÃŘ\n" " Vložené makefily hledá v ADRESÃŘI.\n" #: src/main.c:362 msgid "" " -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no " "arg.\n" msgstr "" " -j [N], --jobs[=N] Dovolí nejvíce N úloh najednou;\n" " nekoneÄno úloh bez argumentu.\n" #: src/main.c:364 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" #: src/main.c:366 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" " NespouÅ¡tí souběžné úlohy, dokud zátěž\n" " neklesne pod N.\n" #: src/main.c:369 msgid "" " -L, --check-symlink-times Use the latest mtime between symlinks and " "target.\n" msgstr "" " -L, --check-symlink-times Použije nejnovÄ›jší Äas zmÄ›ny obsahu z Äasů\n" " symbolických odkazů a cíle.\n" #: src/main.c:371 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" " Ve skuteÄnosti nevykoná žádný návod, pouze\n" " jej vypíše.\n" #: src/main.c:374 msgid "" " -o FILE, --old-file=FILE, --assume-old=FILE\n" " Consider FILE to be very old and don't remake " "it.\n" msgstr "" " -o SOUBOR, --old-file=SOUBOR, --assume-old=SOUBOR\n" " Považuje SOUBOR za velmi starý a znovu jej\n" " nevyrobí.\n" #: src/main.c:377 msgid "" " -O[TYPE], --output-sync[=TYPE]\n" " Synchronize output of parallel jobs by TYPE.\n" msgstr "" " -O[DRUH], --output-sync[=DRUH]\n" " Synchronizuje výstup souběžných úloh podle " "DRUHU.\n" #: src/main.c:380 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" #: src/main.c:382 msgid "" " -q, --question Run no recipe; exit status says if up to " "date.\n" msgstr "" " -q, --question Nespustí žádný návod. Návratový kód Å™ekne,\n" " jestli je aktuální.\n" #: src/main.c:384 msgid " -r, --no-builtin-rules Disable the built-in implicit rules.\n" msgstr " -r, --no-builtin-rules Vypne vestavÄ›ná implicitní pravidla.\n" #: src/main.c:386 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" #: src/main.c:388 msgid " -s, --silent, --quiet Don't echo recipes.\n" msgstr " -s, --silent, --quiet Neopisuje návod.\n" #: src/main.c:390 msgid " --no-silent Echo recipes (disable --silent mode).\n" msgstr " --no-silent Opisuje návod (vypne režim --silent).\n" #: src/main.c:392 msgid "" " -S, --no-keep-going, --stop\n" " Turns off -k.\n" msgstr "" " -S, --no-keep-going, --stop\n" " Vypne -k.\n" #: src/main.c:395 msgid " -t, --touch Touch targets instead of remaking them.\n" msgstr " -t, --touch Namísto výroby cílů jim zmÄ›ní Äas.\n" #: src/main.c:397 msgid " --trace Print tracing information.\n" msgstr " --trace Vypisuje trasovací údaje.\n" #: src/main.c:399 msgid "" " -v, --version Print the version number of make and exit.\n" msgstr "" " -v, --version Vypíše Äíslo verze programu make a skonÄí.\n" #: src/main.c:401 msgid " -w, --print-directory Print the current directory.\n" msgstr " -w, --print-directory Vypisuje aktuální adresář.\n" #: src/main.c:403 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" #: src/main.c:405 msgid "" " -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n" " Consider FILE to be infinitely new.\n" msgstr "" " -W SOUBOR, --what-if=SOUBOR, --new-file=SOUBOR, --assume-new=SOUBOR\n" " Považuje SOUBOR za nekoneÄnÄ› nový.\n" #: src/main.c:408 msgid "" " --warn-undefined-variables Warn when an undefined variable is " "referenced.\n" msgstr "" " --warn-undefined-variables Upozorní, kdykoliv je odkazováno na\n" " nedefinovanou promÄ›nnou.\n" #: src/main.c:671 #, c-format msgid "empty string invalid as file name" msgstr "prázdný Å™etÄ›zec není platný název souboru" #: src/main.c:754 #, c-format msgid "unknown debug level specification '%s'" msgstr "zadána neznámá úroveň ladÄ›ní „%s“" #: src/main.c:794 #, c-format msgid "unknown output-sync type '%s'" msgstr "neznámý druh synchronizace výstupu „%s“" #: src/main.c:849 #, 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" #: src/main.c:856 #, c-format msgid "" "\n" "Unhandled exception filter called from program %s\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" msgstr "" "\n" "Filtr neoÅ¡etÅ™ených výjimek zavolán z programu %s\n" "Kód výjimky = %lx\n" "Příznaky výjimky = %lx\n" "Adresa výjimky = 0x%p\n" #: src/main.c:864 #, 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" #: src/main.c:865 #, c-format msgid "Access violation: read operation at address 0x%p\n" msgstr "PoruÅ¡ení přístupu: operace Ätení na adrese 0x%p\n" #: src/main.c:941 src/main.c:956 #, c-format msgid "find_and_set_shell() setting default_shell = %s\n" msgstr "find_and_set_shell() nastavuje default_shell = %s\n" #: src/main.c:1009 #, 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" #: src/main.c:1609 #, c-format 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 „+“." #: src/main.c:1617 #, c-format msgid "warning: -j%d forced in submake: resetting jobserver mode." msgstr "" "pozor: -j%d vnuceno podřízenému programu make: režim správce úloh se restuje." #: src/main.c:1781 #, c-format msgid "Makefile from standard input specified twice." msgstr "Makefile na standardním vstupu uveden dvakrát." #: src/main.c:1819 src/vmsjobs.c:1248 msgid "fopen (temporary file)" msgstr "fopen (doÄasný soubor)" #: src/main.c:1825 msgid "fwrite (temporary file)" msgstr "fwrite (doÄasný soubor)" #: src/main.c:2004 #, c-format msgid "warning: -j%d forced in makefile: resetting jobserver mode." msgstr "" "pozor: -j%d vnuceno v souboru makefile: režim správce úloh se resetuje." #: src/main.c:2068 #, c-format msgid "Parallel jobs (-j) are not supported on this platform." msgstr "Na této platformÄ› nejsou paralelní úlohy (-j) podporovány." #: src/main.c:2069 #, c-format msgid "Resetting to single job (-j1) mode." msgstr "Návrat k jednoúlohovému režimu (-j1)." #: src/main.c:2109 #, c-format msgid "Symbolic links not supported: disabling -L." msgstr "Symbolické odkazy nejsou podporovány: vypíná se -L." #: src/main.c:2190 #, c-format msgid "Updating makefiles....\n" msgstr "Soubory makefile se aktualizují…\n" #: src/main.c:2226 #, c-format msgid "Makefile '%s' might loop; not remaking it.\n" msgstr "Makefile „%s“ může cyklit, nebude znovu vyroben.\n" #: src/main.c:2303 #, c-format msgid "Failed to remake makefile '%s'." msgstr "Výroba nového makefilu „%s“ selhala." #: src/main.c:2323 #, c-format msgid "Included makefile '%s' was not found." msgstr "Vložený makefile „%s“ nebyl nalezen." #: src/main.c:2328 #, c-format msgid "Makefile '%s' was not found" msgstr "Makefile „%s“ nebyl nalezen" #: src/main.c:2394 #, c-format msgid "Couldn't change back to original directory." msgstr "Nebylo možné se vrátit do původního adresáře." #: src/main.c:2402 #, c-format msgid "Re-executing[%u]:" msgstr "Znovu se spouÅ¡tí [%u]:" #: src/main.c:2522 msgid "unlink (temporary file): " msgstr "unlink (doÄasný soubor): " #: src/main.c:2555 #, c-format msgid ".DEFAULT_GOAL contains more than one target" msgstr ".DEFAULT_GOAL obsahuje více než jeden cíl" #: src/main.c:2579 #, c-format msgid "No targets" msgstr "Žádné cíle" #: src/main.c:2581 #, c-format msgid "No targets specified and no makefile found" msgstr "Nezadány žádné cíle a žádné makefily nenalezeny" #: src/main.c:2586 #, c-format msgid "Updating goal targets....\n" msgstr "Aktualizují se cíle…\n" #: src/main.c:2610 #, c-format msgid "warning: Clock skew detected. Your build may be incomplete." msgstr "pozor: ZjiÅ¡tÄ›n posun hodin. VaÅ¡e sestavení možná nebude úplné." #: src/main.c:2804 #, c-format msgid "Usage: %s [options] [target] ...\n" msgstr "Použití: %s [PŘEPÃNAÄŒE] [CÃLE]…\n" #: src/main.c:2810 #, c-format msgid "" "\n" "This program built for %s\n" msgstr "" "\n" "Tento program byl sestaven pro %s\n" #: src/main.c:2812 #, c-format msgid "" "\n" "This program built for %s (%s)\n" msgstr "" "\n" "Tento program byl sestaven pro %s (%s)\n" #: src/main.c:2815 #, c-format msgid "Report bugs to \n" msgstr "" "Chyby v programu hlaste anglicky na . Nedostatky\n" "v pÅ™ekladu hlaste Äesky na .\n" #: src/main.c:2901 #, 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" #: src/main.c:2965 #, c-format msgid "the '-%c' option requires a positive integer argument" msgstr "pÅ™epínaÄ â€ž-%c“ vyžaduje kladný celoÄíselný argument" #: src/main.c:3363 #, c-format msgid "%sBuilt for %s\n" msgstr "%sSestaveno pro %s\n" #: src/main.c:3365 #, c-format msgid "%sBuilt for %s (%s)\n" msgstr "%s Sestaveno pro %s (%s)\n" #: src/main.c:3376 #, c-format msgid "" "%sLicense GPLv3+: GNU GPL version 3 or later \n" "%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 "" "%sLicence GPLv3+: GNU GPL verze 3 nebo novÄ›jší \n" "%sToto je svobodné programové vybavení: máte právo jej mÄ›nit a dále šířit.\n" "%sNesposkytuje se ŽÃDNà ZÃRUKA, jak jen zákon dovoluje.\n" # FIXME: i18n %s (time) #: src/main.c:3397 #, c-format msgid "" "\n" "# Make data base, printed on %s" msgstr "" "\n" "# Databáze maku vypsána v %s" # FIXME: i18n %s (time) #: src/main.c:3407 #, c-format msgid "" "\n" "# Finished Make data base on %s\n" msgstr "" "\n" "# Konec databáze maku v %s\n" #: src/misc.c:643 #, 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" #: src/misc.c:664 msgid "Initialized access" msgstr "Přístup zahájen" #: src/misc.c:743 msgid "User access" msgstr "Přístup uživatelem" #: src/misc.c:791 msgid "Make access" msgstr "Přístup makem" #: src/misc.c:825 msgid "Child access" msgstr "Přístup potomkem" #: src/output.c:97 #, c-format msgid "%s: Entering an unknown directory\n" msgstr "%s: Vstupuje se do neznámého adresáře\n" #: src/output.c:99 #, c-format msgid "%s: Leaving an unknown directory\n" msgstr "%s OpouÅ¡tí se neznámý adresář\n" #: src/output.c:102 #, c-format msgid "%s: Entering directory '%s'\n" msgstr "%s: Vstupuje se do adresáře „%s“\n" #: src/output.c:104 #, c-format msgid "%s: Leaving directory '%s'\n" msgstr "%s: OpouÅ¡tí se adresář „%s“\n" #: src/output.c:108 #, c-format msgid "%s[%u]: Entering an unknown directory\n" msgstr "%s[%u]: Vstupuje se do neznámého adresáře\n" #: src/output.c:110 #, c-format msgid "%s[%u]: Leaving an unknown directory\n" msgstr "%s[%u]: OpouÅ¡tí se neznámý adresář\n" #: src/output.c:113 #, c-format msgid "%s[%u]: Entering directory '%s'\n" msgstr "%s[%u]: Vstupuje se do adresáře „%s“\n" #: src/output.c:115 #, c-format msgid "%s[%u]: Leaving directory '%s'\n" msgstr "%s[%u]: OpouÅ¡tí se adresář „%s“\n" #: src/output.c:442 src/output.c:444 #, c-format msgid "write error: stdout" msgstr "chyba zápisu: standardní výstup" #: src/output.c:624 msgid ". Stop.\n" msgstr ". Konec.\n" #: src/output.c:658 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" #: src/output.c:667 #, c-format msgid "%s: %s" msgstr "%s: %s" #: src/output.h:62 #, c-format msgid "-O[TYPE] (--output-sync[=TYPE]) is not configured for this build." msgstr "" "PÅ™epínaÄ -O[DRUH] (--output-sync[=DRUH]) není v tomto sestavení zahrnut." #: src/posixos.c:90 msgid "creating jobs pipe" msgstr "vytváření roury úloh" #: src/posixos.c:98 src/posixos.c:251 msgid "duping jobs pipe" msgstr "duplikace roury úloh" #: src/posixos.c:104 msgid "init jobserver pipe" msgstr "inicializace roury správce úloh" #: src/posixos.c:119 #, c-format msgid "internal error: invalid --jobserver-auth string '%s'" msgstr "vnitÅ™ní chyba: neplatný Å™etÄ›zec --jobserver-auth „%s“" #: src/posixos.c:122 #, c-format msgid "Jobserver client (fds %d,%d)\n" msgstr "Klient správce úloh (deskriptory %d,%d)\n" #: src/posixos.c:138 msgid "jobserver pipeline" msgstr "kolona správce úloh" #: src/posixos.c:186 msgid "write jobserver" msgstr "zápis správce úloh" #: src/posixos.c:300 #, c-format msgid "job server shut down" msgstr "správce úloh vypnut" #: src/posixos.c:303 msgid "pselect jobs pipe" msgstr "volání pselect nad rourou úloh" #: src/posixos.c:319 src/posixos.c:433 msgid "read jobs pipe" msgstr "Ätení z roury úloh" #: src/read.c:181 #, c-format msgid "Reading makefiles...\n" msgstr "ÄŒtou se makefily…\n" #: src/read.c:336 #, c-format msgid "Reading makefile '%s'" msgstr "ÄŒte se makefile „%s“" #: src/read.c:338 #, c-format msgid " (no default goal)" msgstr " (žádný výchozí cíl)" #: src/read.c:340 #, c-format msgid " (search path)" msgstr " (vyhledávací cesta)" #: src/read.c:342 #, c-format msgid " (don't care)" msgstr " (nestarat se)" #: src/read.c:344 #, c-format msgid " (no ~ expansion)" msgstr " (žádný expanze ~)" #: src/read.c:655 #, c-format msgid "Skipping UTF-8 BOM in makefile '%s'\n" msgstr "PÅ™eskakuje se UTF-8 BOM v makefilu „%s“\n" #: src/read.c:658 #, c-format msgid "Skipping UTF-8 BOM in makefile buffer\n" msgstr "PÅ™eskakuje se UTF-8 BOM v pamÄ›ti makefilu\n" #: src/read.c:787 #, c-format msgid "invalid syntax in conditional" msgstr "neplatná syntaxe podmínky" #: src/read.c:960 #, c-format msgid "%s: failed to load" msgstr "%s: zavedení selhalo" #: src/read.c:986 #, c-format msgid "recipe commences before first target" msgstr "návod zahájen pÅ™ed prvním cílem" #: src/read.c:1035 #, c-format msgid "missing rule before recipe" msgstr "pÅ™ed návodem chybí pravidlo" #: src/read.c:1136 #, c-format msgid "missing separator (did you mean TAB instead of 8 spaces?)" msgstr "chybí oddÄ›lovaÄ (mysleli jste tabulátor místo 8 mezer?)" #: src/read.c:1138 #, c-format msgid "missing separator" msgstr "chybí oddÄ›lovaÄ" #: src/read.c:1283 #, c-format msgid "missing target pattern" msgstr "chybí vzor cíle" #: src/read.c:1285 #, c-format msgid "multiple target patterns" msgstr "více vzorů cíle" #: src/read.c:1289 #, c-format msgid "target pattern contains no '%%'" msgstr "vzor cíle neobsahuje „%%“" #: src/read.c:1404 #, c-format msgid "missing 'endif'" msgstr "chybí „endif“" #: src/read.c:1443 src/read.c:1488 src/variable.c:1600 #, c-format msgid "empty variable name" msgstr "prázdný název promÄ›nné" #: src/read.c:1478 #, c-format msgid "extraneous text after 'define' directive" msgstr "nadbyteÄný text po klíÄovém slovu „define“" #: src/read.c:1503 #, c-format msgid "missing 'endef', unterminated 'define'" msgstr "chybí „endef“, neukonÄený „define“" #: src/read.c:1531 #, c-format msgid "extraneous text after 'endef' directive" msgstr "nadbyteÄný text po klíÄovém slovu „endef“" #: src/read.c:1603 #, c-format msgid "extraneous text after '%s' directive" msgstr "nadbyteÄný text po klíÄovém slovu „%s“" #: src/read.c:1604 #, c-format msgid "extraneous '%s'" msgstr "nadbyteÄný „%s“" #: src/read.c:1632 #, c-format msgid "only one 'else' per conditional" msgstr "pouze jeden „else“ na podmínku" #: src/read.c:1908 #, c-format msgid "Malformed target-specific variable definition" msgstr "ChybÄ› utvoÅ™ená definice promÄ›nné specifické pro cíl" #: src/read.c:1968 #, c-format msgid "prerequisites cannot be defined in recipes" msgstr "prerekvizitu nelze definovat v návodu" #: src/read.c:1986 #, c-format msgid "grouped targets must provide a recipe" msgstr "seskupené cíle musí poskytovat návod" #: src/read.c:2029 #, c-format msgid "mixed implicit and static pattern rules" msgstr "smíšené implicitní a statická pravidla vzorů" #: src/read.c:2052 #, c-format msgid "mixed implicit and normal rules" msgstr "smíšené implicitní a normální pravidla" #: src/read.c:2107 #, c-format msgid "target '%s' doesn't match the target pattern" msgstr "cíl „%s“ neodpovídá vzoru cíle" #: src/read.c:2122 src/read.c:2168 #, c-format msgid "target file '%s' has both : and :: entries" msgstr "cílový soubor „%s“ obsahuje jak :, tak i ::" #: src/read.c:2128 #, 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" #: src/read.c:2138 #, c-format msgid "warning: overriding recipe for target '%s'" msgstr "pozor: návod pro cíl „%s“ bude pÅ™ebit" #: src/read.c:2141 #, c-format msgid "warning: ignoring old recipe for target '%s'" msgstr "pozor: starý návod pro cíl „%s“ bude ignorován" #: src/read.c:2254 #, c-format msgid "*** mixed implicit and normal rules: deprecated syntax" msgstr "*** smíšená implicitní a normální pravidla: zastaralá skladba" #: src/read.c:2271 #, c-format msgid "warning: overriding group membership for target '%s'" msgstr "pozor: Älenství ve skupinÄ› pro cíl „%s“ bude pÅ™ebito" #: src/read.c:2636 #, c-format msgid "warning: NUL character seen; rest of line ignored" msgstr "pozor: zaznamenán znak NUL, zbytek řádku bude ignorován" #: src/remake.c:226 #, c-format msgid "Nothing to be done for '%s'." msgstr "Pro „%s“ nebude nic udÄ›láno." #: src/remake.c:227 #, c-format msgid "'%s' is up to date." msgstr "„%s“ je aktuální." #: src/remake.c:323 #, c-format msgid "Pruning file '%s'.\n" msgstr "Uklízí se soubor „%s“.\n" #: src/remake.c:389 #, 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" #: src/remake.c:399 #, c-format msgid "%sNo rule to make target '%s'%s" msgstr "%sŽádné pravidlo jak vyrobit cíl „%s“%s" #: src/remake.c:425 #, c-format msgid "Considering target file '%s'.\n" msgstr "Zvažuje se cílový soubor „%s“.\n" #: src/remake.c:432 #, c-format msgid "Recently tried and failed to update file '%s'.\n" msgstr "Nedávná aktualizace souboru „%s“ selhala.\n" #: src/remake.c:444 #, c-format msgid "File '%s' was considered already.\n" msgstr "Soubor „%s“ již byl uvážen.\n" #: src/remake.c:454 #, c-format msgid "Still updating file '%s'.\n" msgstr "Stále se aktualizuje soubor „%s“.\n" #: src/remake.c:457 #, c-format msgid "Finished updating file '%s'.\n" msgstr "Aktualizace soubor „%s“ dokonÄena.\n" #: src/remake.c:486 #, c-format msgid "File '%s' does not exist.\n" msgstr "Soubor „%s“ neexistuje.\n" #: src/remake.c:494 #, c-format msgid "" "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp" msgstr "" "*** Pozor: Soubor .LOW_RESOLUTION_TIME „%s“ má Äasový údaj ve vysokém " "rozliÅ¡ení" #: src/remake.c:507 src/remake.c:1039 #, c-format msgid "Found an implicit rule for '%s'.\n" msgstr "Nalezeno implicitní pravidlo pro „%s“.\n" #: src/remake.c:509 src/remake.c:1041 #, c-format msgid "No implicit rule found for '%s'.\n" msgstr "Pro „%s“ nenalezeno žádné implicitní pravidlo.\n" #: src/remake.c:515 #, c-format msgid "Using default recipe for '%s'.\n" msgstr "Pro „%s“ se použije výchozí návod.\n" #: src/remake.c:549 src/remake.c:1088 #, c-format msgid "Circular %s <- %s dependency dropped." msgstr "Kruhová závislost „%s ↠%s zahozena." #: src/remake.c:674 #, c-format msgid "Finished prerequisites of target file '%s'.\n" msgstr "Prerekvizity cílového souboru „%s“ dokonÄeny.\n" #: src/remake.c:680 #, c-format msgid "The prerequisites of '%s' are being made.\n" msgstr "Prerekvizity „%s“ se vyrábÄ›jí.\n" #: src/remake.c:694 #, c-format msgid "Giving up on target file '%s'.\n" msgstr "Výroba cílového souboru „%s“ vzdána.\n" #: src/remake.c:699 #, c-format msgid "Target '%s' not remade because of errors." msgstr "Cíl „%s“ nebyl kvůli chybám znovu vyroben." #: src/remake.c:751 #, 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" #: src/remake.c:756 #, c-format msgid "Prerequisite '%s' of target '%s' does not exist.\n" msgstr "Prerekvizita „%s“ cíle „%s“ neexistuje.\n" #: src/remake.c:761 #, c-format msgid "Prerequisite '%s' is newer than target '%s'.\n" msgstr "Prerekvizita „%s“ je novÄ›jší než cíl „%s“.\n" #: src/remake.c:764 #, c-format msgid "Prerequisite '%s' is older than target '%s'.\n" msgstr "Prerekvizita „%s“ je starší než cíl „%s“.\n" #: src/remake.c:782 #, 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" #: src/remake.c:789 #, 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 #: src/remake.c:794 #, 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" #: src/remake.c:802 #, c-format msgid "No need to remake target '%s'" msgstr "Cíl „%s“ není tÅ™eba znovu vyrábÄ›t" #: src/remake.c:804 #, c-format msgid "; using VPATH name '%s'" msgstr "; použije se název „%s“ z VPATH" #: src/remake.c:824 #, c-format msgid "Must remake target '%s'.\n" msgstr "Cíl „%s“ je tÅ™eba znovu vyrobit.\n" #: src/remake.c:830 #, c-format msgid " Ignoring VPATH name '%s'.\n" msgstr " Ignoruje se název „%s“ z VPATH.\n" #: src/remake.c:839 #, c-format msgid "Recipe of '%s' is being run.\n" msgstr "PrávÄ› se vykonává návod pro „%s“.\n" #: src/remake.c:846 #, c-format msgid "Failed to remake target file '%s'.\n" msgstr "Cílový soubor „%s“ nebylo možné znovu vyrobit.\n" #: src/remake.c:849 #, c-format msgid "Successfully remade target file '%s'.\n" msgstr "Cílový soubor „%s“ byl úspěšnÄ› znovu vyroben.\n" #: src/remake.c:852 #, 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" #: src/remake.c:1047 #, c-format msgid "Using default commands for '%s'.\n" msgstr "Pro „%s„ se použijí se výchozí příkazy.\n" #: src/remake.c:1422 #, 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" #: src/remake.c:1662 #, c-format msgid ".LIBPATTERNS element '%s' is not a pattern" msgstr "Prvek .LIBPATTERNS „%s“ není vzorem" # `Customs' is literal (a library name). See README.customs. #: src/remote-cstms.c:122 #, c-format msgid "Customs won't export: %s\n" msgstr "Customs nebude exportovat: %s\n" #: src/rule.c:289 #, c-format msgid "warning: ignoring prerequisites on suffix rule definition" msgstr "" #: src/rule.c:530 msgid "" "\n" "# Implicit Rules" msgstr "" "\n" "# Implicitní pravidla" #: src/rule.c:545 msgid "" "\n" "# No implicit rules." msgstr "" "\n" "# Žádná implicitní pravidla." # FIXME: Pluralize #: src/rule.c:548 #, c-format msgid "" "\n" "# %u implicit rules, %u (%.1f%%) terminal." msgstr "" "\n" "# %u implicitních pravidel, %u (%.1f %%) koncových" #: src/rule.c:557 #, c-format msgid "BUG: num_pattern_rules is wrong! %u != %u" msgstr "CHYBA: num_pattern_rules je chybný! %u != %u" #: src/signame.c:84 msgid "unknown signal" msgstr "neznámý signál" # Keep signal names in sync with GNU libc translations. #: src/signame.c:92 msgid "Hangup" msgstr "Odpojen terminál (SIGHUP)" #: src/signame.c:95 msgid "Interrupt" msgstr "PÅ™eruÅ¡ení (SIGINT)" #: src/signame.c:98 msgid "Quit" msgstr "Konec (SIGQUIT)" #: src/signame.c:101 msgid "Illegal Instruction" msgstr "Nedovolená instrukce (SIGILL)" #: src/signame.c:104 msgid "Trace/breakpoint trap" msgstr "Trasovací/ladící past (SIGTRAP)" #: src/signame.c:109 msgid "Aborted" msgstr "NeúspěšnÄ› ukonÄen (SIGABRT)" #: src/signame.c:112 msgid "IOT trap" msgstr "IOT past (SIGIOT)" #: src/signame.c:115 msgid "EMT trap" msgstr "EMT past (SIGEMT)" #: src/signame.c:118 msgid "Floating point exception" msgstr "Výjimka práce s pohyblivou řádovou Äárkou (SIGFPE)" #: src/signame.c:121 msgid "Killed" msgstr "Zabit (SIGKILL)" #: src/signame.c:124 msgid "Bus error" msgstr "Chyba na sbÄ›rnici (neplatná adresa) (SIGBUS)" #: src/signame.c:127 msgid "Segmentation fault" msgstr "NeoprávnÄ›ný přístup do pamÄ›ti (SIGSEGV)" #: src/signame.c:130 msgid "Bad system call" msgstr "Chybné volání systému (SIGSYS)" #: src/signame.c:133 msgid "Broken pipe" msgstr "Roura pÅ™eruÅ¡ena (SIGPIPE)" #: src/signame.c:136 msgid "Alarm clock" msgstr "Budík (SIGALRM)" #: src/signame.c:139 msgid "Terminated" msgstr "UkonÄen (SIGTERM)" #: src/signame.c:142 msgid "User defined signal 1" msgstr "Uživatelem definovaný signál 1 (SIGUSR1)" #: src/signame.c:145 msgid "User defined signal 2" msgstr "Uživatelem definovaný signál 2 (SIGUSR2)" #: src/signame.c:150 src/signame.c:153 msgid "Child exited" msgstr "Potomek skonÄil (SIGCHLD)" #: src/signame.c:156 msgid "Power failure" msgstr "Výpadek napájení (SIGPWR)" #: src/signame.c:159 msgid "Stopped" msgstr "Pozastaven (SIGTSTP)" #: src/signame.c:162 msgid "Stopped (tty input)" msgstr "Pozastaven (vstup TTY) (SIGTTIN)" #: src/signame.c:165 msgid "Stopped (tty output)" msgstr "Pozastaven (výstup TTY) (SIGTTOU)" #: src/signame.c:168 msgid "Stopped (signal)" msgstr "Pozastaven (SIGSTOP)" #: src/signame.c:171 msgid "CPU time limit exceeded" msgstr "PÅ™ekroÄen Äasový limit pro procesor (SIGXCPU)" #: src/signame.c:174 msgid "File size limit exceeded" msgstr "PÅ™ekroÄen limit délky souboru (SIGXFS2)" #: src/signame.c:177 msgid "Virtual timer expired" msgstr "Virtuální ÄasovaÄ vyprÅ¡el (SIGVTALRM)" #: src/signame.c:180 msgid "Profiling timer expired" msgstr "Profilovací ÄasovaÄ vyprÅ¡el (SIGPROF)" #: src/signame.c:186 msgid "Window changed" msgstr "Okno se zmÄ›nilo (SIGWINCH)" #: src/signame.c:189 msgid "Continued" msgstr "Je pokraÄováno (SIGCONT)" #: src/signame.c:192 msgid "Urgent I/O condition" msgstr "Naléhavá I/O situace (SIGURG)" #: src/signame.c:199 src/signame.c:208 msgid "I/O possible" msgstr "Vstup/Výstup možný (SIGIO)" # SIGWIND exists on Darwin #: src/signame.c:202 msgid "SIGWIND" msgstr "Okno se zmÄ›nilo (SIGWIND)" # SIGPHONE exists on Unix PC (3B1) #: src/signame.c:205 msgid "SIGPHONE" msgstr "ZmÄ›na stavu linky (SIGPHONE)" #: src/signame.c:211 msgid "Resource lost" msgstr "ProstÅ™edek byl ztracen (SIGLOST)" # SIGDANGER exists on AIX #: src/signame.c:214 msgid "Danger signal" msgstr "NebezpeÄí nedostatku pamÄ›ti (SIGDANGER)" #: src/signame.c:217 msgid "Information request" msgstr "Žádost o informaci (SIGINFO)" #: src/signame.c:220 msgid "Floating point co-processor not available" msgstr "Koprocesor pro práci s pohyblivou řádkou není dostupný (SIGNOFP)" #: src/strcache.c:274 #, c-format msgid "" "\n" "%s No strcache buffers\n" msgstr "" "\n" "%s Žádná keÅ¡ Å™etÄ›zců\n" #: src/strcache.c:304 #, c-format msgid "" "\n" "%s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu " "B\n" msgstr "" "\n" "%s užito z keÅ¡e Å™etÄ›zců: %lu (%lu) / Å™etÄ›zců = %lu / úložiÅ¡tÄ› = %lu B / " "prům. = %lu B\n" #: src/strcache.c:308 #, c-format msgid "" "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B\n" msgstr "" "%s souÄasná keÅ¡: velikost = %hu B / užito = %hu B / poÄet = %hu / prům. = " "%u B\n" #: src/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" #: src/strcache.c:322 #, c-format msgid "" "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n" msgstr "" "%s volno dalších: celkem = %lu B / max. = %lu B / min. = %lu B / prům. = " "%hu B\n" #: src/strcache.c:326 #, c-format msgid "" "\n" "%s strcache performance: lookups = %lu / hit rate = %lu%%\n" msgstr "" "\n" "%s vytížení keÅ¡e Å™etÄ›zců: dotazů = %lu / pomÄ›r nálezů = %lu %%\n" #: src/strcache.c:328 msgid "" "# hash-table stats:\n" "# " msgstr "" "# Statistika haÅ¡ovací tabulky:\n" "# " #: src/variable.c:1653 msgid "automatic" msgstr "automatická" #: src/variable.c:1656 msgid "default" msgstr "výchozí" #: src/variable.c:1659 msgid "environment" msgstr "prostÅ™edí" #: src/variable.c:1662 msgid "makefile" msgstr "makefile" #: src/variable.c:1665 msgid "environment under -e" msgstr "prostÅ™edí z pÅ™epínaÄe -e" #: src/variable.c:1668 msgid "command line" msgstr "příkazový řádek" #: src/variable.c:1671 msgid "'override' directive" msgstr "klíÄové slovo „override“" #: src/variable.c:1682 #, c-format msgid " (from '%s', line %lu)" msgstr " (z „%s“, řádek %lu)" #: src/variable.c:1745 msgid "# variable set hash-table stats:\n" msgstr "# statistika haÅ¡ovací tabulky pro množinu promÄ›nných:\n" #: src/variable.c:1756 msgid "" "\n" "# Variables\n" msgstr "" "\n" "# PromÄ›nné\n" #: src/variable.c:1760 msgid "" "\n" "# Pattern-specific Variable Values" msgstr "" "\n" "# Hodnoty promÄ›nných specifických pro vzor" #: src/variable.c:1774 msgid "" "\n" "# No pattern-specific variable values." msgstr "" "\n" "# Žádné hodnoty promÄ›nných specifických pro vzor." # FIXME: Pluralize #: src/variable.c:1776 #, c-format msgid "" "\n" "# %u pattern-specific variable values" msgstr "" "\n" "# Hodnot promÄ›nných specifických pro vzor: %u" #: src/variable.h:229 #, c-format msgid "warning: undefined variable '%.*s'" msgstr "pozor: nedefinovaná promÄ›nná „%.*s“" #: src/vmsfunctions.c:91 #, c-format msgid "sys$search() failed with %d\n" msgstr "volání sys$search() selhalo s %d\n" #: src/vmsjobs.c:244 #, 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" #: src/vmsjobs.c:681 #, c-format msgid "BUILTIN CD %s\n" msgstr "VESTAVÄšNà PŘÃKAZ CD %s\n" #: src/vmsjobs.c:1224 #, c-format msgid "DCL: %s\n" msgstr "DCL: %s\n" #: src/vmsjobs.c:1284 #, c-format msgid "Append output to %s\n" msgstr "Výstup pÅ™ipojen k %s\n" #: src/vmsjobs.c:1309 #, c-format msgid "Append %.*s and cleanup\n" msgstr "PÅ™ipojit %.*s a uklidit\n" #: src/vmsjobs.c:1322 #, c-format msgid "Executing %s instead\n" msgstr "Místo toho se spustí %s\n" #: src/vpath.c:603 msgid "" "\n" "# VPATH Search Paths\n" msgstr "" "\n" "# Vyhledávací cesty VPATH\n" #: src/vpath.c:620 msgid "# No 'vpath' search paths." msgstr "# Žádné vyhledávací cesty „vpath“." # FIXME: Pluralize #: src/vpath.c:622 #, c-format msgid "" "\n" "# %u 'vpath' search paths.\n" msgstr "" "\n" "$ Vyhledávacích cest „vpath“: %u\n" #: src/vpath.c:625 msgid "" "\n" "# No general ('VPATH' variable) search path." msgstr "" "\n" "# Žádná obecná vyhledávací cesta (promÄ›nná „VPATH“)." #: src/vpath.c:631 msgid "" "\n" "# General ('VPATH' variable) search path:\n" "# " msgstr "" "\n" "# Obecná vyhledávací cesta (promÄ›nná „VPATH“):\n" "# " #: src/w32/w32os.c:44 #, c-format msgid "Jobserver slots limited to %d\n" msgstr "Místa ve správci úloh jsou omezena na %d\n" #: src/w32/w32os.c:60 #, c-format msgid "creating jobserver semaphore: (Error %ld: %s)" msgstr "vytváření semaforu správce úloh: (Chyba %ld: %s)" #: src/w32/w32os.c:79 #, 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)" #: src/w32/w32os.c:82 #, c-format msgid "Jobserver client (semaphore %s)\n" msgstr "Klient správce úloh (semafor %s)\n" #: src/w32/w32os.c:123 #, c-format msgid "release jobserver semaphore: (Error %ld: %s)" msgstr "uvolnÄ›ní semaforu správce úloh: (Chyba %ld: %s)" #: src/w32/w32os.c:194 #, c-format msgid "semaphore or child process wait: (Error %ld: %s)" msgstr "Äekání na semafor nebo potomka: (Chyba %ld: %s)" #~ msgid "%s: %s: Command not found\n" #~ msgstr "%s: %s: Příkaz nenalezen\n" #~ msgid "%s[%u]: %s: Command not found\n" #~ msgstr "%s[%u]: %s: Příkaz nenalezen\n" #~ msgid "%s: Shell program not found" #~ msgstr "%s: Program shellu nenalezen" #~ msgid "%s is suspending for 30 seconds..." #~ msgstr "%s se uspí na 30 sekund…" #~ msgid "done sleep(30). Continuing.\n" #~ msgstr "sleep(30) dokonÄeno. PokraÄuje se.\n" #~ msgid "Unknown error %d" #~ msgstr "Neznámá chyba %d" #~ msgid "Warning: File '%s' has modification time in the future" #~ msgstr "Pozor: Soubor „%s“ má Äas zmÄ›ny obsahu v budoucnu" #~ msgid " terminal." #~ msgstr " terminál." #~ 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" #~ msgid "internal error: multiple --jobserver-fds options" #~ msgstr "vnitÅ™ní chyba: více pÅ™epínaÄů --jobserver-fds" #~ msgid "virtual memory exhausted" #~ msgstr "virtuální paměť vyÄerpána" #~ msgid "write error" #~ msgstr "chyba zápisu" #~ msgid "BUILTIN RM %s\n" #~ msgstr "VESTAVÄšNà RM %s\n" #~ msgid "# Invalid value in 'update_status' member!" #~ msgstr "# Neplatná hodnota v Älenu „update_status“!" #~ msgid "unknown trace mode '%s'" #~ msgstr "neznámý režim trasování „%s“" #~ msgid "*** [%s] Error 0x%x (ignored)" #~ msgstr "*** [%s] Chyba 0x%x (ignorováno)" #~ msgid "Invoking recipe from %s:%lu to update target `%s'.\n" #~ msgstr "Za úÄelem aktualizace cíle „%3$s“ se volá se návod z %1$s:%2$lu.\n" #~ msgid "Invoking builtin recipe to update target `%s'.\n" #~ msgstr "Za úÄelem aktualizace cíle „%s“ se volá vestavÄ›ný návod.\n" #~ msgid "%s # of strcache buffers: %d (* %d B/buffer = %d B)\n" #~ msgstr "" #~ "%s poÄet vyrovnávacích pamÄ›tí keÅ¡e Å™etÄ›zců: %d (* %d B/buffer = %d B)\n" #~ msgid "" #~ "\n" #~ "# strcache hash-table stats:\n" #~ "# " #~ msgstr "" #~ "\n" #~ "# statistika haÅ¡ovací tabulky keÅ¡e Å™etÄ›zců:\n" #~ "# " make-4.3/po/ja.po0000644000175000017500000020351513611136531010574 00000000000000# Japanese message catalog for make # Copyright (C) 2001 Free Software Foundation, Inc. # This file is distributed under the same license as the make package. # Daisuke Yamashita , 2001. # Thanks to NISHIJIMA Takanori # GOTO Masanori , 2003-2004. # Takeshi Hamasaki , 2011, 2014, 2016, 2019, 2020. # msgid "" msgstr "" "Project-Id-Version: make 4.2.93\n" "Report-Msgid-Bugs-To: bug-make@gnu.org\n" "POT-Creation-Date: 2020-01-19 15:34-0500\n" "PO-Revision-Date: 2020-01-03 21:11+0900\n" "Last-Translator: Takeshi Hamasaki \n" "Language-Team: Japanese \n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "X-Generator: Poedit 2.2.1\n" #: src/ar.c:46 #, c-format msgid "attempt to use unsupported feature: '%s'" msgstr "サãƒãƒ¼ãƒˆã•れã¦ã„ãªã„機能を使ãŠã†ã¨ã—ã¦ã„ã¾ã™: '%s'" #: src/ar.c:123 #, c-format msgid "touch archive member is not available on VMS" msgstr "VMS ã§ã¯æ›¸åº«ã®ãƒ¡ãƒ³ãƒã‚’ touch ã™ã‚‹æ©Ÿèƒ½ãŒã‚りã¾ã›ã‚“" #: src/ar.c:147 #, c-format msgid "touch: Archive '%s' does not exist" msgstr "touch: 書庫 '%s' ãŒã‚りã¾ã›ã‚“" #: src/ar.c:150 #, c-format msgid "touch: '%s' is not a valid archive" msgstr "'%s' ã¯æœ‰åŠ¹ãªæ›¸åº«ã§ã¯ã‚りã¾ã›ã‚“" #: src/ar.c:157 #, c-format msgid "touch: Member '%s' does not exist in '%s'" msgstr "touch: メンム'%s' 㯠'%s' 内ã«å­˜åœ¨ã—ã¾ã›ã‚“" #: src/ar.c:164 #, c-format msgid "touch: Bad return code from ar_member_touch on '%s'" msgstr "touch: '%s' ã¸ã® ar_member_touch ã‹ã‚‰ç•°å¸¸ãªå€¤ãŒè¿”りã¾ã—ãŸ" #: src/arscan.c:130 #, c-format msgid "lbr$set_module() failed to extract module info, status = %d" msgstr "lbr$set_module() ãŒãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«æƒ…å ±ã®æŠ½å‡ºã«å¤±æ•—ã—ã¾ã—ãŸ. 状態 = %d" #: src/arscan.c:236 #, c-format msgid "lbr$ini_control() failed with status = %d" msgstr "lbr$ini_control() ãŒå¤±æ•—ã—ã¾ã—ãŸ. 状態 = %d" #: src/arscan.c:261 #, c-format msgid "unable to open library '%s' to lookup member status %d" msgstr "ライブラリ '%s' ã‚’é–‹ã‘ãªã„ãŸã‚, メンãƒã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ %d ãŒæ¤œç´¢ã§ãã¾ã›ã‚“" #: src/arscan.c:944 #, c-format msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n" msgstr "メンム'%s'%s: %ld ãƒã‚¤ãƒˆ at %ld (%ld).\n" #: src/arscan.c:945 msgid " (name might be truncated)" msgstr " (åå‰ãŒåˆ‡ã‚Šè©°ã‚られãŸã‹ã‚‚)" #: src/arscan.c:947 #, c-format msgid " Date %s" msgstr " 日付 %s" #: src/arscan.c:948 #, c-format msgid " uid = %d, gid = %d, mode = 0%o.\n" msgstr " uid = %d, gid = %d, mode = 0%o.\n" #: src/commands.c:403 #, c-format msgid "Recipe has too many lines (%ud)" msgstr "レシピã®è¡Œæ•°ãŒå¤šã™ãŽã¾ã™ (%ud)" #: src/commands.c:504 msgid "*** Break.\n" msgstr "*** 中断.\n" #: src/commands.c:628 #, c-format msgid "*** [%s] Archive member '%s' may be bogus; not deleted" msgstr "*** [%s] 書庫ã®ãƒ¡ãƒ³ãƒ '%s' ã¯å¤šåˆ†å½ç‰©ã§ã™ ― 削除ã—ã¾ã›ã‚“ã§ã—ãŸ" #: src/commands.c:632 #, c-format msgid "*** Archive member '%s' may be bogus; not deleted" msgstr "*** 書庫ã®ãƒ¡ãƒ³ãƒ '%s' ã¯å¤šåˆ†å½ç‰©ã§ã™ ― 削除ã—ã¾ã›ã‚“ã§ã—ãŸ" #: src/commands.c:646 #, c-format msgid "*** [%s] Deleting file '%s'" msgstr "*** [%s] ファイル '%s' を削除ã—ã¾ã™" #: src/commands.c:648 #, c-format msgid "*** Deleting file '%s'" msgstr "*** ファイル '%s' を削除ã—ã¾ã™" #: src/commands.c:684 msgid "# recipe to execute" msgstr "# 実行ã™ã‚‹ãƒ¬ã‚·ãƒ”" #: src/commands.c:687 msgid " (built-in):" msgstr " (ビルトイン):" #: src/commands.c:689 #, c-format msgid " (from '%s', line %lu):\n" msgstr " (ファイル '%s', %lu 行目):\n" #: src/dir.c:1073 msgid "" "\n" "# Directories\n" msgstr "" "\n" "# ディレクトリ\n" #: src/dir.c:1085 #, c-format msgid "# %s: could not be stat'd.\n" msgstr "# %s: 状態を調ã¹ã‚‰ã‚Œã¾ã›ã‚“ã§ã—ãŸ.\n" #: src/dir.c:1089 msgid "# %s (key %s, mtime %I64u): could not be opened.\n" msgstr "# %s (key %s, mtime %I64u): é–‹ã‘ã¾ã›ã‚“ã§ã—ãŸ.\n" #: src/dir.c:1094 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n" msgstr "# %s (device %d, inode [%d,%d,%d]): é–‹ã‘ã¾ã›ã‚“ã§ã—ãŸ.\n" #: src/dir.c:1099 #, c-format msgid "# %s (device %ld, inode %ld): could not be opened.\n" msgstr "# %s (device %ld, inode %ld): é–‹ã‘ã¾ã›ã‚“ã§ã—ãŸ.\n" #: src/dir.c:1126 msgid "# %s (key %s, mtime %I64u): " msgstr "# %s (key %s, mtime %I64u): " #: src/dir.c:1131 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): " msgstr "# %s (device %d, inode [%d,%d,%d]): " #: src/dir.c:1136 #, c-format msgid "# %s (device %ld, inode %ld): " msgstr "# %s (device %ld, inode %ld): " #: src/dir.c:1142 src/dir.c:1163 msgid "No" msgstr "0" #: src/dir.c:1145 src/dir.c:1166 msgid " files, " msgstr " 個ã®ãƒ•ァイル, " #: src/dir.c:1147 src/dir.c:1168 msgid "no" msgstr "0" #: src/dir.c:1150 msgid " impossibilities" msgstr " 個ã®é©ç”¨ä¸èƒ½ãƒ•ァイルå" #: src/dir.c:1154 msgid " so far." msgstr " (ã“ã“ã¾ã§ã«)." #: src/dir.c:1171 #, c-format msgid " impossibilities in %lu directories.\n" msgstr " 個ã®é©ç”¨ä¸èƒ½ãƒ•ァイルå (%lu 個ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªå†…).\n" #: src/expand.c:125 #, c-format msgid "Recursive variable '%s' references itself (eventually)" msgstr "å†å¸°çš„変数 '%s' ãŒ(最終的ã«)ãれ自身をå‚ç…§ã—ã¦ã„ã¾ã™" #: src/expand.c:271 #, c-format msgid "unterminated variable reference" msgstr "終端ã®ãªã„変数å‚ç…§" #: src/file.c:278 #, c-format msgid "Recipe was specified for file '%s' at %s:%lu," msgstr "ファイル '%s' ã®ãŸã‚ã®ã®ãƒ¬ã‚·ãƒ”㌠%s:%lu ã§æŒ‡å®šã•れã¾ã—ãŸ," #: src/file.c:283 #, c-format msgid "Recipe for file '%s' was found by implicit rule search," msgstr "ファイル '%s' ã®ãŸã‚ã®ãƒ¬ã‚·ãƒ”ãŒæš—é»™ãƒ«ãƒ¼ãƒ«ã®æŽ¢ç´¢ã§è¦‹ã¤ã‹ã‚Šã¾ã—ãŸ," #: src/file.c:287 #, c-format msgid "but '%s' is now considered the same file as '%s'." msgstr "ã—ã‹ã—今㯠'%s' 㨠'%s' ã¯åŒã˜ãƒ•ァイルã¨è¦‹ãªã•れã¾ã™." #: src/file.c:290 #, c-format msgid "Recipe for '%s' will be ignored in favor of the one for '%s'." msgstr "'%s' ã®ãŸã‚ã®ãƒ¬ã‚·ãƒ”ã¯, '%s' ã®ãŸã‚ã®ã‚‚ã®ã‚’優先ã™ã‚‹ãŸã‚無視ã•れã¾ã™." #: src/file.c:310 #, c-format msgid "can't rename single-colon '%s' to double-colon '%s'" msgstr "シングルコロン '%s' ã‹ã‚‰ãƒ€ãƒ–ルコロン '%s' ã«åå‰ã‚’変ãˆã‚‰ã‚Œã¾ã›ã‚“" #: src/file.c:316 #, c-format msgid "can't rename double-colon '%s' to single-colon '%s'" msgstr "ダブルコロン '%s' ã‹ã‚‰ã‚·ãƒ³ã‚°ãƒ«ã‚³ãƒ­ãƒ³ '%s' ã«åå‰ã‚’変ãˆã‚‰ã‚Œã¾ã›ã‚“" #: src/file.c:408 #, c-format msgid "*** Deleting intermediate file '%s'" msgstr "*** 中間ファイル '%s' を削除ã—ã¾ã™" #: src/file.c:412 #, c-format msgid "Removing intermediate files...\n" msgstr "中間ファイルを削除ã—ã¦ã„ã¾ã™...\n" #: src/file.c:872 msgid "Current time" msgstr "ç¾åœ¨æ™‚刻" #: src/file.c:876 #, c-format msgid "%s: Timestamp out of range; substituting %s" msgstr "%s: タイムスタンプãŒç¯„囲外ã§ã™ -- 代り㫠%s ã¨ã—ã¾ã™" #: src/file.c:1016 msgid "# Not a target:" msgstr "# ターゲットã§ã¯ã‚りã¾ã›ã‚“:" #: src/file.c:1021 msgid "# Precious file (prerequisite of .PRECIOUS)." msgstr "# 特別扱ã„ã®ãƒ•ァイル (.PRECIOUS ã®å¿…è¦æ¡ä»¶)" #: src/file.c:1023 msgid "# Phony target (prerequisite of .PHONY)." msgstr "# 疑似ターゲット (.PHONY ã®å¿…è¦æ¡ä»¶)" #: src/file.c:1025 msgid "# Command line target." msgstr "# コマンドラインターゲット." #: src/file.c:1027 msgid "# A default, MAKEFILES, or -include/sinclude makefile." msgstr "# デフォルトã¾ãŸã¯ MAKEFILES, -include/sinclude Makefile." #: src/file.c:1029 msgid "# Builtin rule" msgstr "# ビルトインルール" #: src/file.c:1031 msgid "# Implicit rule search has been done." msgstr "# æš—é»™ãƒ«ãƒ¼ãƒ«ã®æŽ¢ç´¢ãŒè¡Œã‚れã¾ã—ãŸ." #: src/file.c:1032 msgid "# Implicit rule search has not been done." msgstr "# æš—é»™ãƒ«ãƒ¼ãƒ«ã®æŽ¢ç´¢ã¯è¡Œã‚れã¾ã›ã‚“ã§ã—ãŸ." #: src/file.c:1034 #, c-format msgid "# Implicit/static pattern stem: '%s'\n" msgstr "# æš—é»™/é™çš„パターン語幹: '%s'\n" #: src/file.c:1036 msgid "# File is an intermediate prerequisite." msgstr "# ファイルã¯ä¸­é–“å¿…è¦æ¡ä»¶ã§ã™." #: src/file.c:1040 msgid "# Also makes:" msgstr "# ã•ら㫠make:" #: src/file.c:1046 msgid "# Modification time never checked." msgstr "# 修正時刻ãŒãƒã‚§ãƒƒã‚¯ã•れるã“ã¨ã¯ã‚りã¾ã›ã‚“." #: src/file.c:1048 msgid "# File does not exist." msgstr "# ファイルãŒå­˜åœ¨ã—ã¾ã›ã‚“." #: src/file.c:1050 msgid "# File is very old." msgstr "# ファイルãŒéžå¸¸ã«å¤ã„ã§ã™." #: src/file.c:1055 #, c-format msgid "# Last modified %s\n" msgstr "# 最終修正 %s\n" #: src/file.c:1058 msgid "# File has been updated." msgstr "# ãƒ•ã‚¡ã‚¤ãƒ«ã¯æ›´æ–°ã•れã¦ã„ã¾ã™." #: src/file.c:1058 msgid "# File has not been updated." msgstr "# ãƒ•ã‚¡ã‚¤ãƒ«ã¯æ›´æ–°ã•れã¦ã„ã¾ã›ã‚“." #: src/file.c:1062 msgid "# Recipe currently running (THIS IS A BUG)." msgstr "# レシピをç¾åœ¨å®Ÿè¡Œä¸­ã§ã™ (*ã“れã¯ãƒã‚°ã§ã™*)." #: src/file.c:1065 msgid "# Dependencies recipe running (THIS IS A BUG)." msgstr "# ä¾å­˜é–¢ä¿‚レシピを実行中ã§ã™ (*ã“れã¯ãƒã‚°ã§ã™*)." #: src/file.c:1074 msgid "# Successfully updated." msgstr "# æ›´æ–°ã«æˆåŠŸã—ã¾ã—ãŸ." #: src/file.c:1078 msgid "# Needs to be updated (-q is set)." msgstr "# æ›´æ–°ãŒå¿…è¦ã§ã™ (-q ãŒã‚»ãƒƒãƒˆã•れã¦ã„ã¾ã™)." #: src/file.c:1081 msgid "# Failed to be updated." msgstr "# æ›´æ–°ã«å¤±æ•—ã—ã¾ã—ãŸ." #: src/file.c:1086 msgid "# Invalid value in 'command_state' member!" msgstr "# 'command_state' メンãƒã«ç„¡åйãªå€¤ã§ã™!" #: src/file.c:1105 msgid "" "\n" "# Files" msgstr "" "\n" "# ファイル" #: src/file.c:1109 msgid "" "\n" "# files hash-table stats:\n" "# " msgstr "" "\n" "# ファイルãƒãƒƒã‚·ãƒ¥ãƒ†ãƒ¼ãƒ–ルã®çŠ¶æ…‹:\n" "# " #: src/file.c:1119 #, c-format msgid "%s: Field '%s' not cached: %s" msgstr "%s: フィールド '%s' ã¯ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã•れã¦ã„ã¾ã›ã‚“: %s" #: src/function.c:794 msgid "non-numeric first argument to 'word' function" msgstr "éžæ•°å€¤ã®ç¬¬1引数㌠'word' 関数ã«ä¸Žãˆã‚‰ã‚Œã¾ã—ãŸ" #: src/function.c:799 #, c-format msgid "first argument to 'word' function must be greater than 0" msgstr "'word' 関数ã¸ã®ç¬¬1引数㯠0 より大ãããªã‘れã°ãªã‚Šã¾ã›ã‚“" #: src/function.c:819 msgid "non-numeric first argument to 'wordlist' function" msgstr "éžæ•°å€¤ã®ç¬¬1引数㌠'wordlist' 関数ã«ä¸Žãˆã‚‰ã‚Œã¾ã—ãŸ" #: src/function.c:821 msgid "non-numeric second argument to 'wordlist' function" msgstr "éžæ•°å€¤ã®ç¬¬2引数㌠'wordlist' 関数ã«ä¸Žãˆã‚‰ã‚Œã¾ã—ãŸ" #: src/function.c:1533 #, c-format msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n" msgstr "windows32_openpipe: DuplicateHandle(In) ãŒå¤±æ•— (e=%ld)\n" #: src/function.c:1557 #, c-format msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n" msgstr "windows32_openpipe: DuplicateHandle(Err) ãŒå¤±æ•— (e=%ld)\n" #: src/function.c:1564 #, c-format msgid "CreatePipe() failed (e=%ld)\n" msgstr "CreatePipe() ãŒå¤±æ•— (e=%ld)\n" #: src/function.c:1572 #, c-format msgid "windows32_openpipe(): process_init_fd() failed\n" msgstr "windows32_openpipe (): process_init_fd() ãŒå¤±æ•—\n" #: src/function.c:1857 #, c-format msgid "Cleaning up temporary batch file %s\n" msgstr "一時的ãªãƒãƒƒãƒãƒ•ァイル %s を消去ã—ã¾ã™\n" #: src/function.c:2230 src/function.c:2255 #, c-format msgid "file: missing filename" msgstr "file: ファイルåãŒæŒ‡å®šã•れã¦ã„ã¾ã›ã‚“" #: src/function.c:2234 src/function.c:2265 #, c-format msgid "open: %s: %s" msgstr "open: %s: %s" #: src/function.c:2242 #, c-format msgid "write: %s: %s" msgstr "write: %s: %s" #: src/function.c:2245 src/function.c:2282 #, c-format msgid "close: %s: %s" msgstr "close: %s: %s" #: src/function.c:2258 #, c-format msgid "file: too many arguments" msgstr "file: 引数ãŒå¤šã™ãŽã¾ã™" #: src/function.c:2277 #, c-format msgid "read: %s: %s" msgstr "read: %s: %s" #: src/function.c:2290 #, c-format msgid "file: invalid file operation: %s" msgstr "file: 無効ãªãƒ•ァイルæ“作: %s" #: src/function.c:2405 #, c-format msgid "insufficient number of arguments (%d) to function '%s'" msgstr "å¼•æ•°ã®æ•°(%d)ãŒé–¢æ•° '%s' ã«ã¨ã£ã¦ä¸å分ã§ã™" #: src/function.c:2417 #, c-format msgid "unimplemented on this platform: function '%s'" msgstr "ã“ã®ãƒ—ラットフォームã§ã¯å®Ÿè£…ã•れã¦ã„ã¾ã›ã‚“: 関数 '%s'" #: src/function.c:2483 #, c-format msgid "unterminated call to function '%s': missing '%c'" msgstr "終端ãŒãªã„関数呼ã³å‡ºã— '%s': '%c' ãŒã‚りã¾ã›ã‚“" #: src/function.c:2667 #, c-format msgid "Empty function name" msgstr "空ã®é–¢æ•°å" #: src/function.c:2669 #, c-format msgid "Invalid function name: %s" msgstr "無効ãªé–¢æ•°å: %s" #: src/function.c:2671 #, c-format msgid "Function name too long: %s" msgstr "関数åãŒé•·ã™ãŽã¾ã™: %s" #: src/function.c:2674 #, c-format msgid "Invalid minimum argument count (%u) for function %s" msgstr "引数個数指定(最å°å€¤;%u)ãŒç„¡åйã§ã™: 関数 %s" #: src/function.c:2677 #, c-format msgid "Invalid maximum argument count (%u) for function %s" msgstr "引数個数指定(最大値;%u)ãŒç„¡åйã§ã™: 関数 %s" #: src/getopt.c:659 #, c-format msgid "%s: option '%s' is ambiguous\n" msgstr "%s: オプション '%s' ã¯çŸ­ã™ãŽã¦æ­£ã—ã判別ã§ãã¾ã›ã‚“\n" #: src/getopt.c:683 #, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s: オプション '--%s' ã¯å¼•æ•°ã‚’å–ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“\n" #: src/getopt.c:688 #, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s: オプション '%c%s' ã¯å¼•æ•°ã‚’å–ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“\n" #: src/getopt.c:705 src/getopt.c:878 #, c-format msgid "%s: option '%s' requires an argument\n" msgstr "%s: オプション '%s' ã«ã¯å¼•æ•°ãŒ1ã¤å¿…è¦ã§ã™\n" #: src/getopt.c:734 #, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s: オプション '--%s' ã‚’èªè­˜ã§ãã¾ã›ã‚“\n" #: src/getopt.c:738 #, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s: オプション '%c%s' ã‚’èªè­˜ã§ãã¾ã›ã‚“\n" #: src/getopt.c:764 #, c-format msgid "%s: illegal option -- %c\n" msgstr "%s: 䏿­£ãªã‚ªãƒ—ション ― %c\n" #: src/getopt.c:767 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s: 無効ãªã‚ªãƒ—ション ― %c\n" #: src/getopt.c:797 src/getopt.c:927 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: オプションã«ã¯å¼•æ•°ãŒå¿…è¦ã§ã™ ― %c\n" #: src/getopt.c:844 #, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s: オプション '-W %s' ã¯çŸ­ã™ãŽã¦æ­£ã—ã判別ã§ãã¾ã›ã‚“\n" #: src/getopt.c:862 #, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s: オプション '-W %s' ã¯å¼•æ•°ã‚’å–ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“\n" #: src/guile.c:58 #, c-format msgid "guile: Expanding '%s'\n" msgstr "guile: 展開中 '%s'\n" #: src/guile.c:74 #, c-format msgid "guile: Evaluating '%s'\n" msgstr "guile: 評価中 '%s'\n" #: src/hash.c:50 #, c-format msgid "can't allocate %lu bytes for hash table: memory exhausted" msgstr "" "ãƒãƒƒã‚·ãƒ¥ãƒ†ãƒ¼ãƒ–ル用 %lu ãƒã‚¤ãƒˆã®å‰²ã‚Šå½“ã¦ã«å¤±æ•—ã—ã¾ã—ãŸ: ãƒ¡ãƒ¢ãƒªã‚’ä½¿ã„æžœãŸã—ã¾ã—" "ãŸ" #: src/hash.c:280 #, c-format msgid "Load=%lu/%lu=%.0f%%, " msgstr "è² è·=%lu/%lu=%.0f%%, " #: src/hash.c:282 #, c-format msgid "Rehash=%u, " msgstr "å†ãƒãƒƒã‚·ãƒ¥=%u, " #: src/hash.c:283 #, c-format msgid "Collisions=%lu/%lu=%.0f%%" msgstr "è¡çª=%lu/%lu=%.0f%%" #: src/implicit.c:38 #, c-format msgid "Looking for an implicit rule for '%s'.\n" msgstr "'%s' ã®ãŸã‚ã®æš—黙ルールを探ã—ã¾ã™.\n" #: src/implicit.c:54 #, c-format msgid "Looking for archive-member implicit rule for '%s'.\n" msgstr "'%s' ã®ãŸã‚ã®æ›¸åº«ãƒ¡ãƒ³ãƒæš—黙ルールを探ã—ã¾ã™.\n" #: src/implicit.c:311 #, c-format msgid "Avoiding implicit rule recursion.\n" msgstr "暗黙ルールã®å†å¸°ã‚’回é¿ã—ã¾ã™.\n" #: src/implicit.c:484 #, c-format msgid "Stem too long: '%s%.*s'.\n" msgstr "語幹ãŒé•·ã™ãŽã¾ã™: '%s%.*s'.\n" #: src/implicit.c:490 #, c-format msgid "Trying pattern rule with stem '%.*s'.\n" msgstr "語幹 '%.*s' ã¨ã®ãƒ‘ターンルールを試ã—ã¾ã™.\n" #: src/implicit.c:717 #, c-format msgid "Rejecting impossible rule prerequisite '%s'.\n" msgstr "é©ç”¨ä¸èƒ½ãªãƒ«ãƒ¼ãƒ«ã®å¿…è¦æ¡ä»¶ '%s' ã‚’å´ä¸‹ã—ã¾ã™.\n" #: src/implicit.c:718 #, c-format msgid "Rejecting impossible implicit prerequisite '%s'.\n" msgstr "é©ç”¨ä¸èƒ½ãªæš—é»™ã®å¿…è¦æ¡ä»¶ '%s' ã‚’å´ä¸‹ã—ã¾ã™.\n" #: src/implicit.c:732 #, c-format msgid "Trying rule prerequisite '%s'.\n" msgstr "ルールã®å¿…è¦æ¡ä»¶ '%s' を試ã—ã¾ã™.\n" #: src/implicit.c:733 #, c-format msgid "Trying implicit prerequisite '%s'.\n" msgstr "æš—é»™ã®å¿…è¦æ¡ä»¶ '%s' を試ã—ã¾ã™.\n" #: src/implicit.c:772 #, c-format msgid "Found prerequisite '%s' as VPATH '%s'\n" msgstr "VPATH '%2$s' ã¨ã—ã¦å¿…è¦æ¡ä»¶ '%1$s' を見ã¤ã‘ã¾ã—ãŸ\n" #: src/implicit.c:786 #, c-format msgid "Looking for a rule with intermediate file '%s'.\n" msgstr "中間ファイル '%s' ã®ãƒ«ãƒ¼ãƒ«ã‚’探ã—ã¾ã™.\n" #: src/job.c:370 msgid "Cannot create a temporary file\n" msgstr "一時ファイルを作æˆã§ãã¾ã›ã‚“\n" #: src/job.c:548 msgid " (core dumped)" msgstr " (コアダンプã—ã¾ã—ãŸ)" #: src/job.c:553 msgid " (ignored)" msgstr " (無視ã•れã¾ã—ãŸ)" #: src/job.c:557 src/job.c:1892 msgid "" msgstr "<ビルトイン>" #: src/job.c:573 #, c-format msgid "%s[%s: %s] Error %d%s" msgstr "%s[%s: %s] エラー %d%s" #: src/job.c:662 #, c-format msgid "*** Waiting for unfinished jobs...." msgstr "*** 未完了ã®ã‚¸ãƒ§ãƒ–ã‚’å¾…ã£ã¦ã„ã¾ã™...." #: src/job.c:704 #, c-format msgid "Live child %p (%s) PID %s %s\n" msgstr "生存å­ãƒ—ロセス %p (%s) PID %s %s\n" #: src/job.c:706 src/job.c:900 src/job.c:1072 src/job.c:1644 #, c-format msgid " (remote)" msgstr " (リモート)" #: src/job.c:898 #, c-format msgid "Reaping winning child %p PID %s %s\n" msgstr "æˆåŠŸã—ãŸå­ãƒ—ロセス %p PID %s %s を回åŽã—ã¾ã™\n" #: src/job.c:899 #, c-format msgid "Reaping losing child %p PID %s %s\n" msgstr "失敗ã—ãŸå­ãƒ—ロセス %p PID %s %s を回åŽã—ã¾ã™\n" #: src/job.c:950 #, c-format msgid "Cleaning up temp batch file %s\n" msgstr "一時的ãªãƒãƒƒãƒãƒ•ァイル %s を消去ã—ã¾ã™\n" #: src/job.c:956 #, c-format msgid "Cleaning up temp batch file %s failed (%d)\n" msgstr "一時的ãªãƒãƒƒãƒãƒ•ァイル %s ã®æ¶ˆåŽ»ã«å¤±æ•—ã—ã¾ã—ãŸ(%d)\n" #: src/job.c:1071 #, c-format msgid "Removing child %p PID %s%s from chain.\n" msgstr "ãƒã‚§ã‚¤ãƒ³ã‹ã‚‰å­ãƒ—ロセス %p PID %s%s を削除ã—ã¾ã™.\n" #: src/job.c:1120 #, c-format msgid "Released token for child %p (%s).\n" msgstr "å­ãƒ—ロセス %p (%s) ã®å°ã‚’解放ã—ã¾ã—ãŸ.\n" #: src/job.c:1575 src/job.c:2487 #, c-format msgid "process_easy() failed to launch process (e=%ld)\n" msgstr "process_easy() ãŒå¤±æ•—ã—プロセスãŒèµ·å‹•ã§ãã¾ã›ã‚“ã§ã—㟠(e=%ld)\n" #: src/job.c:1579 src/job.c:2491 #, c-format msgid "" "\n" "Counted %d args in failed launch\n" msgstr "" "\n" "èµ·å‹•ã®å¤±æ•—ã§ %d 個ã®å¼•æ•°ãŒã‚«ã‚¦ãƒ³ãƒˆã•れã¾ã—ãŸ\n" #: src/job.c:1642 #, c-format msgid "Putting child %p (%s) PID %s%s on the chain.\n" msgstr "ãƒã‚§ã‚¤ãƒ³ã«å­ãƒ—ロセス %p (%s) PID %s%s ã‚’å–り込ã¿ã¾ã—ãŸ.\n" #: src/job.c:1875 #, c-format msgid "Obtained token for child %p (%s).\n" msgstr "å­ãƒ—ロセス %p (%s) ã«å°ã‚’ã¤ã‘ã¾ã—ãŸ.\n" #: src/job.c:1902 #, c-format msgid "%s: target '%s' does not exist" msgstr "%s: ターゲット '%s' ãŒå­˜åœ¨ã—ã¾ã›ã‚“" #: src/job.c:1905 #, c-format msgid "%s: update target '%s' due to: %s" msgstr "%s: ターゲット '%s' ã‚’ %s ã®ãŸã‚ã«æ›´æ–°ã—ã¾ã™" #: src/job.c:2108 #, c-format msgid "cannot enforce load limits on this operating system" msgstr "ã“ã®ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã§ã¯ã‚·ã‚¹ãƒ†ãƒ è² è·åˆ¶é™ã‚’加ãˆã‚‰ã‚Œã¾ã›ã‚“" #: src/job.c:2110 msgid "cannot enforce load limit: " msgstr "システム負è·åˆ¶é™ã‚’課ã™ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ: " #: src/job.c:2200 #, c-format msgid "no more file handles: could not duplicate stdin\n" msgstr "ファイルãƒãƒ³ãƒ‰ãƒ«ã‚’使ã„å°½ãã—ã¾ã—ãŸ: 標準入力を複製ã§ãã¾ã›ã‚“\n" #: src/job.c:2212 #, c-format msgid "no more file handles: could not duplicate stdout\n" msgstr "ファイルãƒãƒ³ãƒ‰ãƒ«ã‚’使ã„å°½ãã—ã¾ã—ãŸ: 標準出力を複製ã§ãã¾ã›ã‚“\n" #: src/job.c:2226 #, c-format msgid "no more file handles: could not duplicate stderr\n" msgstr "ファイルãƒãƒ³ãƒ‰ãƒ«ã‚’使ã„å°½ãã—ã¾ã—ãŸ: 標準エラー出力を複製ã§ãã¾ã›ã‚“\n" #: src/job.c:2241 #, c-format msgid "Could not restore stdin\n" msgstr "標準入力を復元ã§ãã¾ã›ã‚“ã§ã—ãŸ\n" #: src/job.c:2249 #, c-format msgid "Could not restore stdout\n" msgstr "標準出力を復元ã§ãã¾ã›ã‚“ã§ã—ãŸ\n" #: src/job.c:2257 #, c-format msgid "Could not restore stderr\n" msgstr "標準エラー出力を復元ã§ãã¾ã›ã‚“ã§ã—ãŸ\n" #: src/job.c:2520 #, c-format msgid "make reaped child pid %s, still waiting for pid %s\n" msgstr "make 㯠pid %s ã®å­ãƒ—ロセスを回åŽã—, pid %s ã‚’å¾…ã¡ç¶šã‘ã¾ã™\n" #: src/job.c:2623 #, c-format msgid "spawnvpe: environment space might be exhausted" msgstr "spawnvpe:環境設定ã®ãŸã‚ã®ãƒ¡ãƒ¢ãƒªã‚’使ã„å°½ãã™ã‹ã‚‚ã—れã¾ã›ã‚“" #: src/job.c:2862 #, c-format msgid "$SHELL changed (was '%s', now '%s')\n" msgstr "$SHELL ãŒå¤‰æ›´ã•れã¾ã—㟠(å‰ã¯ '%s', 今㯠'%s')\n" #: src/job.c:3300 src/job.c:3485 #, c-format msgid "Creating temporary batch file %s\n" msgstr "一時的ãªãƒãƒƒãƒãƒ•ァイル %s を作æˆã—ã¾ã™\n" #: src/job.c:3308 #, c-format msgid "" "Batch file contents:\n" "\t@echo off\n" msgstr "" "ãƒãƒƒãƒãƒ•ァイルã®å†…容:\n" "\t@echo off\n" #: src/job.c:3497 #, c-format msgid "" "Batch file contents:%s\n" "\t%s\n" msgstr "" "ãƒãƒƒãƒãƒ•ァイルã®å†…容 :%s\n" "\t%s\n" #: src/job.c:3605 #, c-format msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n" msgstr "%s (%d 行目) 䏿­£ãªã‚·ã‚§ãƒ«ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆ (!unixy && !batch_mode_shell)\n" #: src/load.c:60 #, c-format msgid "Failed to open global symbol table: %s" msgstr "グローãƒãƒ«ã‚·ãƒ³ãƒœãƒ«ãƒ†ãƒ¼ãƒ–ルを開ãã“ã¨ãŒã§ãã¾ã›ã‚“: %s" #: src/load.c:97 #, c-format msgid "Loaded object %s is not declared to be GPL compatible" msgstr "読ã¿è¾¼ã‚“ã ã‚ªãƒ–ジェクト %s 㯠GPL互æ›ã®å®£è¨€ãŒãªã•れã¦ã„ã¾ã›ã‚“" #: src/load.c:104 #, c-format msgid "Failed to load symbol %s from %s: %s" msgstr "シンボル %s ã‚’ %s ã‹ã‚‰èª­ã¿è¾¼ã‚€ã®ã«å¤±æ•—ã—ã¾ã—ãŸ: %s" #: src/load.c:149 #, c-format msgid "Empty symbol name for load: %s" msgstr "空ã®ã‚·ãƒ³ãƒœãƒ«åを読ã¿è¾¼ã‚‚ã†ã¨ã—ã¦ã„ã¾ã™: %s" #: src/load.c:204 #, c-format msgid "Loading symbol %s from %s\n" msgstr "シンボル %s ã‚’ %s ã‹ã‚‰èª­ã¿è¾¼ã‚“ã§ã„ã¾ã™\n" #: src/load.c:256 #, c-format msgid "The 'load' operation is not supported on this platform." msgstr "'load' 命令ã¯ã“ã®ãƒ—ラットフォームã§ã‚µãƒãƒ¼ãƒˆã•れã¾ã›ã‚“." #: src/main.c:335 msgid "Options:\n" msgstr "オプション:\n" #: src/main.c:336 msgid " -b, -m Ignored for compatibility.\n" msgstr " -b, -m äº’æ›æ€§ã®ãŸã‚ã®ã‚‚ã®ã§, 無視ã•れる.\n" #: src/main.c:338 msgid " -B, --always-make Unconditionally make all targets.\n" msgstr " -B, --always-make ç„¡æ¡ä»¶ã«å…¨ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚’ make ã™ã‚‹.\n" #: src/main.c:340 msgid "" " -C DIRECTORY, --directory=DIRECTORY\n" " Change to DIRECTORY before doing anything.\n" msgstr "" " -C DIRECTORY, --directory=DIRECTORY\n" " make é–‹å§‹å‰ã«ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒª DIRECTORY ã¸ç§»å‹•ã™" "ã‚‹.\n" #: src/main.c:343 msgid " -d Print lots of debugging information.\n" msgstr " -d デãƒãƒƒã‚°æƒ…報を大é‡ã«è¡¨ç¤ºã™ã‚‹.\n" #: src/main.c:345 msgid "" " --debug[=FLAGS] Print various types of debugging information.\n" msgstr " --debug[=FLAGS] 様々ãªã‚¿ã‚¤ãƒ—ã®ãƒ‡ãƒãƒƒã‚°æƒ…報を表示ã™ã‚‹.\n" #: src/main.c:347 msgid "" " -e, --environment-overrides\n" " Environment variables override makefiles.\n" msgstr "" " -e, --environment-overrides\n" " 環境変数㌠makefile 中ã®è¨˜è¿°ã«å„ªå…ˆã™ã‚‹\n" #: src/main.c:350 msgid "" " -E STRING, --eval=STRING Evaluate STRING as a makefile statement.\n" msgstr " -E STRING, --eval=STRING STRING ã‚’ makefile ã®æ–‡ã¨ã—ã¦è©•価ã™ã‚‹.\n" #: src/main.c:352 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" #: src/main.c:355 msgid " -h, --help Print this message and exit.\n" msgstr " -h, --help ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã—ã¦çµ‚了ã™ã‚‹.\n" #: src/main.c:357 msgid " -i, --ignore-errors Ignore errors from recipes.\n" msgstr " -i, --ignore-errors レシピã‹ã‚‰è¿”ã£ãŸã‚¨ãƒ©ãƒ¼ã‚’無視ã™ã‚‹.\n" #: src/main.c:359 msgid "" " -I DIRECTORY, --include-dir=DIRECTORY\n" " Search DIRECTORY for included makefiles.\n" msgstr "" " -I DIRECTORY, --include-dir=DIRECTORY\n" " Search DIRECTORY for included makefiles.\n" " インクルードã™ã‚‹ makefile を探索ã™ã‚‹ " "DIRECTORY.\n" #: src/main.c:362 msgid "" " -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no " "arg.\n" msgstr "" " -j [N], --jobs[=N] 一度㫠N 個ã¾ã§ã®ã‚¸ãƒ§ãƒ–を許å¯; 無引数ã ã¨ã‚¸ãƒ§ãƒ–" "数制é™ãªã—.\n" #: src/main.c:364 msgid "" " -k, --keep-going Keep going when some targets can't be made.\n" msgstr "" " -k, --keep-going ã‚るターゲット㌠make ã§ããªãã¦ã‚‚実行を続ã‘" "ã‚‹.\n" #: src/main.c:366 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" " è² è· ãŒ N 未満ã§ãªã„é™ã‚Šè¤‡æ•°ã®ã‚¸ãƒ§ãƒ–ã‚’é–‹å§‹ã—ãª" "ã„.\n" #: src/main.c:369 msgid "" " -L, --check-symlink-times Use the latest mtime between symlinks and " "target.\n" msgstr "" " -L, --check-symlink-times シンボリックリンクã¨ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã®ä¸­ã§ä¸€ç•ªæ–°ã—ã„ " "mtime を使ã†.\n" #: src/main.c:371 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" #: src/main.c:374 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 ã‚’ã¨ã¦ã‚‚å¤ã„ã‚‚ã®ã¨è¦‹ãªã—ã¦, å† make ã—ãª" "ã„.\n" #: src/main.c:377 msgid "" " -O[TYPE], --output-sync[=TYPE]\n" " Synchronize output of parallel jobs by TYPE.\n" msgstr "" " -O[TYPE], --output-sync[=TYPE]\n" " 並列ジョブã®å‡ºåŠ›ã‚’ TYPE ã§æƒãˆã‚‹.\n" #: src/main.c:380 msgid " -p, --print-data-base Print make's internal database.\n" msgstr " -p, --print-data-base make ã®å†…部データベースを表示ã™ã‚‹.\n" #: src/main.c:382 msgid "" " -q, --question Run no recipe; exit status says if up to " "date.\n" msgstr "" " -q, --question レシピを実行ã—ãªã„; 更新済ã§ã‚ã‚‹ã‹ã©ã†ã‹ã‚’終了" "ステータスã§é€šçŸ¥.\n" #: src/main.c:384 msgid " -r, --no-builtin-rules Disable the built-in implicit rules.\n" msgstr " -r, --no-builtin-rules ãƒ“ãƒ«ãƒˆã‚¤ãƒ³ã®æš—黙ルールを無効ã«ã™ã‚‹.\n" #: src/main.c:386 msgid " -R, --no-builtin-variables Disable the built-in variable settings.\n" msgstr " -R, --no-builtin-variables ビルトインã®å¤‰æ•°è¨­å®šã‚’無効ã«ã™ã‚‹.\n" #: src/main.c:388 msgid " -s, --silent, --quiet Don't echo recipes.\n" msgstr " -s, --silent, --quiet レシピを表示ã—ãªã„.\n" #: src/main.c:390 msgid " --no-silent Echo recipes (disable --silent mode).\n" msgstr "" " --no-silent レシピをエコーã™ã‚‹ ( --silent mode ã¯ç„¡åйã«ãª" "ã‚‹).\n" #: src/main.c:392 msgid "" " -S, --no-keep-going, --stop\n" " Turns off -k.\n" msgstr "" " -S, --no-keep-going, --stop\n" " -k オプションをオフã«ã™ã‚‹.\n" #: src/main.c:395 msgid " -t, --touch Touch targets instead of remaking them.\n" msgstr "" " -t, --touch ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚’å† make ã™ã‚‹ä»£ã‚りã«ã‚¿ãƒƒãƒã™ã‚‹.\n" #: src/main.c:397 msgid " --trace Print tracing information.\n" msgstr " --trace トレース情報を表示ã™ã‚‹.\n" #: src/main.c:399 msgid "" " -v, --version Print the version number of make and exit.\n" msgstr "" " -v, --version make ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ã‚’表示ã—ã¦çµ‚了ã™ã‚‹.\n" #: src/main.c:401 msgid " -w, --print-directory Print the current directory.\n" msgstr " -w, --print-directory カレントディレクトリを表示ã™ã‚‹.\n" #: src/main.c:403 msgid "" " --no-print-directory Turn off -w, even if it was turned on " "implicitly.\n" msgstr "" " --no-print-directory -w をオフã«ã™ã‚‹. æš—é»™ã«æœ‰åйãªå ´åˆã§ã‚‚オフã«ã™" "ã‚‹.\n" #: src/main.c:405 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" #: src/main.c:408 msgid "" " --warn-undefined-variables Warn when an undefined variable is " "referenced.\n" msgstr "" " --warn-undefined-variables 未定義ã®å¤‰æ•°ãŒå‚ç…§ã•れãŸã¨ãã«è­¦å‘Šã‚’発ã™ã‚‹.\n" #: src/main.c:671 #, c-format msgid "empty string invalid as file name" msgstr "ç©ºã®æ–‡å­—列ã¯ãƒ•ァイルåã¨ã—ã¦ã¯ç„¡åйã§ã™" #: src/main.c:754 #, c-format msgid "unknown debug level specification '%s'" msgstr "䏿˜Žãªãƒ‡ãƒãƒƒã‚°ãƒ¬ãƒ™ãƒ«æŒ‡å®š '%s'" #: src/main.c:794 #, c-format msgid "unknown output-sync type '%s'" msgstr "未知ã®å‡ºåŠ›åŒæœŸåž‹ '%s'" #: src/main.c:849 #, c-format msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n" msgstr "%s: 割り込ã¿/ä¾‹å¤–ã‚’æ•æ‰ã—ã¾ã—㟠(code = 0x%lx, addr = 0x%p)\n" #: src/main.c:856 #, c-format msgid "" "\n" "Unhandled exception filter called from program %s\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" msgstr "" "\n" "処ç†ã•れãªã„例外ã®ãŸã‚ã®ãƒ•ィルタãŒãƒ—ログラム %s ã‹ã‚‰å‘¼ã°ã‚Œã¾ã—ãŸ\n" "例外コード = %lx\n" "例外フラグ = %lx\n" "例外アドレス = 0x%p\n" #: src/main.c:864 #, c-format msgid "Access violation: write operation at address 0x%p\n" msgstr "アクセスä¿è­·é•å: アドレス 0x%p ã§ã®æ›¸ãè¾¼ã¿æ“作\n" #: src/main.c:865 #, c-format msgid "Access violation: read operation at address 0x%p\n" msgstr "アクセスä¿è­·é•å: アドレス 0x%p ã§ã®èª­ã¿è¾¼ã¿æ“作\n" #: src/main.c:941 src/main.c:956 #, c-format msgid "find_and_set_shell() setting default_shell = %s\n" msgstr "find_and_set_shell() 㯠default_shell = %s ã«è¨­å®šã—ã¾ã™\n" #: src/main.c:1009 #, c-format msgid "find_and_set_shell() path search set default_shell = %s\n" msgstr "find_and_set_shell() パス探索㧠default_shell = %s ã«ã‚»ãƒƒãƒˆã—ã¾ã—ãŸ\n" #: src/main.c:1609 #, c-format msgid "" "warning: jobserver unavailable: using -j1. Add '+' to parent make rule." msgstr "" "警告: jobserver ãŒåˆ©ç”¨ä¸å¯: 今回㯠-j1 を使ã„ã¾ã™. 親 make ルール㫠`+' を追" "加ã—ã¾ã—ょã†." #: src/main.c:1617 #, c-format msgid "warning: -j%d forced in submake: resetting jobserver mode." msgstr "" "警告: 副次 make ã§ -j%d を強制指定ã—ã¾ã—ãŸ: jobserver モードをリセットã—ã¾ã™." #: src/main.c:1781 #, c-format msgid "Makefile from standard input specified twice." msgstr "標準入力ã‹ã‚‰ã® makefile ãŒäºŒå›žæŒ‡å®šã•れã¾ã—ãŸ." #: src/main.c:1819 src/vmsjobs.c:1248 msgid "fopen (temporary file)" msgstr "fopen (一時ファイル)" #: src/main.c:1825 msgid "fwrite (temporary file)" msgstr "fwrite (一時ファイル)" #: src/main.c:2004 #, c-format msgid "warning: -j%d forced in makefile: resetting jobserver mode." msgstr "" "警告: makefile ã§ -j%d を強制指定ã—ã¾ã—ãŸ: jobserver モードをリセットã—ã¾ã™." #: src/main.c:2068 #, c-format msgid "Parallel jobs (-j) are not supported on this platform." msgstr "並列ジョブ (-j) ã¯ã“ã®ãƒ—ラットフォームã§ã‚µãƒãƒ¼ãƒˆã•れã¾ã›ã‚“." #: src/main.c:2069 #, c-format msgid "Resetting to single job (-j1) mode." msgstr "å˜ä¸€ã‚¸ãƒ§ãƒ– (-j1) モードã«ãƒªã‚»ãƒƒãƒˆã—ã¾ã™." #: src/main.c:2109 #, c-format msgid "Symbolic links not supported: disabling -L." msgstr "シンボリックリンクã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“: -L ã¯ç„¡åйã§ã™." #: src/main.c:2190 #, c-format msgid "Updating makefiles....\n" msgstr "makefile ã®æ›´æ–°ä¸­....\n" #: src/main.c:2226 #, c-format msgid "Makefile '%s' might loop; not remaking it.\n" msgstr "makefile '%s' 自己å†å¸°ã®ãŠãれã‚り ― å†make ã—ã¾ã›ã‚“.\n" #: src/main.c:2303 #, c-format msgid "Failed to remake makefile '%s'." msgstr "makefile '%s' ã®å†makeã«å¤±æ•—ã—ã¾ã—ãŸ." #: src/main.c:2323 #, c-format msgid "Included makefile '%s' was not found." msgstr "インクルードã•れる makefile '%s' ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ." #: src/main.c:2328 #, c-format msgid "Makefile '%s' was not found" msgstr "makefile '%s' ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ" #: src/main.c:2394 #, c-format msgid "Couldn't change back to original directory." msgstr "å…ƒã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«æˆ»ã‚Œã¾ã›ã‚“ã§ã—ãŸ." #: src/main.c:2402 #, c-format msgid "Re-executing[%u]:" msgstr "å†å®Ÿè¡Œã—ã¾ã™[%u]:" #: src/main.c:2522 msgid "unlink (temporary file): " msgstr "unlink (一時ファイル): " #: src/main.c:2555 #, c-format msgid ".DEFAULT_GOAL contains more than one target" msgstr ".DEFAULT_GOAL ãŒäºŒã¤ä»¥ä¸Šã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚’å«ã‚“ã§ã„ã¾ã™" #: src/main.c:2579 #, c-format msgid "No targets" msgstr "ターゲットãŒã‚りã¾ã›ã‚“" #: src/main.c:2581 #, c-format msgid "No targets specified and no makefile found" msgstr "ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãŒæŒ‡å®šã•れã¦ãŠã‚‰ãš, makefile も見ã¤ã‹ã‚Šã¾ã›ã‚“" #: src/main.c:2586 #, c-format msgid "Updating goal targets....\n" msgstr "最終ターゲットを更新中....\n" #: src/main.c:2610 #, c-format msgid "warning: Clock skew detected. Your build may be incomplete." msgstr "警告: 時刻ã®ãšã‚Œã‚’検出. ä¸å®Œå…¨ãªãƒ“ãƒ«ãƒ‰çµæžœã«ãªã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“." #: src/main.c:2804 #, c-format msgid "Usage: %s [options] [target] ...\n" msgstr "ä½¿ã„æ–¹: %s [オプション] [ターゲット] ...\n" #: src/main.c:2810 #, c-format msgid "" "\n" "This program built for %s\n" msgstr "" "\n" "ã“ã®ãƒ—ログラム㯠%s 用ã«ãƒ“ルドã•れã¾ã—ãŸ\n" #: src/main.c:2812 #, c-format msgid "" "\n" "This program built for %s (%s)\n" msgstr "" "\n" "ã“ã®ãƒ—ログラム㯠%s (%s) 用ã«ãƒ“ルドã•れã¾ã—ãŸ\n" #: src/main.c:2815 #, c-format msgid "Report bugs to \n" msgstr "ãƒã‚°ãƒ¬ãƒãƒ¼ãƒˆã¯ ã¾ã§.\n" #: src/main.c:2901 #, c-format msgid "the '%s%s' option requires a non-empty string argument" msgstr "'%s%s' オプションã¯ç©ºã§ãªã„æ–‡å­—åˆ—å¼•æ•°ã‚’è¦æ±‚ã—ã¾ã™" #: src/main.c:2965 #, c-format msgid "the '-%c' option requires a positive integer argument" msgstr "'-%c' ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã¯æ­£ã®æ•´æ•°å¼•æ•°ã‚’è¦æ±‚ã—ã¾ã™" #: src/main.c:3363 #, c-format msgid "%sBuilt for %s\n" msgstr "%sã“ã®ãƒ—ログラム㯠%s 用ã«ãƒ“ルドã•れã¾ã—ãŸ\n" #: src/main.c:3365 #, c-format msgid "%sBuilt for %s (%s)\n" msgstr "%sã“ã®ãƒ—ログラム㯠%s (%s) 用ã«ãƒ“ルドã•れã¾ã—ãŸ\n" #: src/main.c:3376 #, c-format msgid "" "%sLicense GPLv3+: GNU GPL version 3 or later \n" "%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 GPL ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 3 ä»¥é™ \n" "%sã“れã¯ãƒ•リーソフトウェアã§ã™: 自由ã«å¤‰æ›´ãŠã‚ˆã³é…布ã§ãã¾ã™.\n" "%s法律ã®è¨±ã™é™ã‚Šã€ã€€ç„¡ä¿è¨¼ã€€ã§ã™.\n" #: src/main.c:3397 #, c-format msgid "" "\n" "# Make data base, printed on %s" msgstr "" "\n" "# Make データベース出力 %s" #: src/main.c:3407 #, c-format msgid "" "\n" "# Finished Make data base on %s\n" msgstr "" "\n" "# Make データベース終了 %s\n" #: src/misc.c:643 #, c-format msgid "%s: user %lu (real %lu), group %lu (real %lu)\n" msgstr "%s: ユーザ %lu (実効 %lu), グループ %lu (実効 %lu)\n" #: src/misc.c:664 msgid "Initialized access" msgstr "アクセス権é™ã‚’åˆæœŸåŒ–" #: src/misc.c:743 msgid "User access" msgstr "ユーザアクセス" #: src/misc.c:791 msgid "Make access" msgstr "make アクセス" #: src/misc.c:825 msgid "Child access" msgstr "å­ãƒ—ロセスアクセス" #: src/output.c:97 #, c-format msgid "%s: Entering an unknown directory\n" msgstr "%s: ディレクトリ(ディレクトリå䏿˜Ž)ã«å…¥ã‚Šã¾ã™\n" #: src/output.c:99 #, c-format msgid "%s: Leaving an unknown directory\n" msgstr "%s: ディレクトリ(ディレクトリå䏿˜Ž)ã‹ã‚‰å‡ºã¾ã™\n" #: src/output.c:102 #, c-format msgid "%s: Entering directory '%s'\n" msgstr "%s: ディレクトリ '%s' ã«å…¥ã‚Šã¾ã™\n" #: src/output.c:104 #, c-format msgid "%s: Leaving directory '%s'\n" msgstr "%s: ディレクトリ '%s' ã‹ã‚‰å‡ºã¾ã™\n" #: src/output.c:108 #, c-format msgid "%s[%u]: Entering an unknown directory\n" msgstr "%s[%u]: ディレクトリ(ディレクトリå䏿˜Ž)ã«å…¥ã‚Šã¾ã™\n" #: src/output.c:110 #, c-format msgid "%s[%u]: Leaving an unknown directory\n" msgstr "%s[%u]: ディレクトリ(ディレクトリå䏿˜Ž)ã‹ã‚‰å‡ºã¾ã™\n" #: src/output.c:113 #, c-format msgid "%s[%u]: Entering directory '%s'\n" msgstr "%s[%u]: ディレクトリ '%s' ã«å…¥ã‚Šã¾ã™\n" #: src/output.c:115 #, c-format msgid "%s[%u]: Leaving directory '%s'\n" msgstr "%s[%u]: ディレクトリ '%s' ã‹ã‚‰å‡ºã¾ã™\n" #: src/output.c:442 src/output.c:444 #, c-format msgid "write error: stdout" msgstr "書ãè¾¼ã¿ã‚¨ãƒ©ãƒ¼: 標準出力" #: src/output.c:624 msgid ". Stop.\n" msgstr ". 中止.\n" #: src/output.c:658 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" #: src/output.c:667 #, c-format msgid "%s: %s" msgstr "%s: %s" #: src/output.h:62 #, c-format msgid "-O[TYPE] (--output-sync[=TYPE]) is not configured for this build." msgstr "ã“ã®ãƒ“ルドã§ã¯ -O[TYPE] (--output-sync[=TYPE]) ãŒè¨­å®šã•れã¦ã„ã¾ã›ã‚“." #: src/posixos.c:90 msgid "creating jobs pipe" msgstr "ジョブパイプ作æˆä¸­" #: src/posixos.c:98 src/posixos.c:251 msgid "duping jobs pipe" msgstr "ジョブパイプ複製中" #: src/posixos.c:104 msgid "init jobserver pipe" msgstr "jobserver パイプã®åˆæœŸåŒ–" #: src/posixos.c:119 #, c-format msgid "internal error: invalid --jobserver-auth string '%s'" msgstr "内部エラー: 無効㪠--jobserver-auth 文字列 '%s'" #: src/posixos.c:122 #, c-format msgid "Jobserver client (fds %d,%d)\n" msgstr "jobserver クライアント (fds %d,%d)\n" #: src/posixos.c:138 msgid "jobserver pipeline" msgstr "jobserver パイプライン" #: src/posixos.c:186 msgid "write jobserver" msgstr "ジョブサーãƒã¸ã® write" #: src/posixos.c:300 #, c-format msgid "job server shut down" msgstr "ジョブサーãƒãƒ¼ãŒã‚·ãƒ£ãƒƒãƒˆãƒ€ã‚¦ãƒ³ã—ã¾ã—ãŸ" #: src/posixos.c:303 msgid "pselect jobs pipe" msgstr "ジョブã®ãƒ‘イプ㮠pselect" #: src/posixos.c:319 src/posixos.c:433 msgid "read jobs pipe" msgstr "ジョブã®ãƒ‘イプ㮠read" #: src/read.c:181 #, c-format msgid "Reading makefiles...\n" msgstr "makefile を読ã¿è¾¼ã¿ã¾ã™...\n" #: src/read.c:336 #, c-format msgid "Reading makefile '%s'" msgstr "makefile '%s' ã®èª­ã¿è¾¼ã¿ä¸­" #: src/read.c:338 #, c-format msgid " (no default goal)" msgstr " (ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®æœ€çµ‚ターゲットãŒã‚りã¾ã›ã‚“)" #: src/read.c:340 #, c-format msgid " (search path)" msgstr " (探索パス)" #: src/read.c:342 #, c-format msgid " (don't care)" msgstr " (æ°—ã«ã—ãªãã¦ã‚ˆã„)" #: src/read.c:344 #, c-format msgid " (no ~ expansion)" msgstr " (~ ã®å±•é–‹ãªã—)" #: src/read.c:655 #, c-format msgid "Skipping UTF-8 BOM in makefile '%s'\n" msgstr "makefile '%s' ã®ä¸­ã® UTF-8 BOM をスキップã—ã¾ã™\n" #: src/read.c:658 #, c-format msgid "Skipping UTF-8 BOM in makefile buffer\n" msgstr "makefile ãƒãƒƒãƒ•ã‚¡ã®ä¸­ã® UTF-8 BOM をスキップã—ã¾ã™\n" #: src/read.c:787 #, c-format msgid "invalid syntax in conditional" msgstr "æ¡ä»¶éƒ¨ã®æ–‡æ³•ãŒç„¡åйã§ã™" #: src/read.c:960 #, c-format msgid "%s: failed to load" msgstr "%s: 読ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ" #: src/read.c:986 #, c-format msgid "recipe commences before first target" msgstr "最åˆã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚ˆã‚Šå‰ã«ãƒ¬ã‚·ãƒ”ãŒã‚りã¾ã™" #: src/read.c:1035 #, c-format msgid "missing rule before recipe" msgstr "レシピã®å‰ã®ãƒ«ãƒ¼ãƒ«ãŒä¸è¶³ã—ã¦ã„ã¾ã™" #: src/read.c:1136 #, c-format msgid "missing separator (did you mean TAB instead of 8 spaces?)" msgstr "分離記å·ã‚’欠ã„ã¦ã„ã¾ã™ (8 個ã®ç©ºç™½ã§ã—ãŸãŒ, TAB ã®ã¤ã‚‚りã§ã—ãŸã‹?)" #: src/read.c:1138 #, c-format msgid "missing separator" msgstr "分離記å·ã‚’欠ã„ã¦ã„ã¾ã™" #: src/read.c:1283 #, c-format msgid "missing target pattern" msgstr "ターゲットパターンを欠ã„ã¦ã„ã¾ã™" #: src/read.c:1285 #, c-format msgid "multiple target patterns" msgstr "複数ã®ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒ‘ターンã§ã™" #: src/read.c:1289 #, c-format msgid "target pattern contains no '%%'" msgstr "ターゲットパターン㌠'%%' ã‚’å«ã‚“ã§ã„ã¾ã›ã‚“" #: src/read.c:1404 #, c-format msgid "missing 'endif'" msgstr "'endif'ã€€ãŒæ¬ è½ã—ã¦ã„ã¾ã™" #: src/read.c:1443 src/read.c:1488 src/variable.c:1600 #, c-format msgid "empty variable name" msgstr "空ã®å¤‰æ•°å" #: src/read.c:1478 #, c-format msgid "extraneous text after 'define' directive" msgstr "'define' 疑似命令ã®å¾Œã‚ã«ç„¡é–¢ä¿‚ãªæ–‡å­—列ãŒã‚りã¾ã™" #: src/read.c:1503 #, c-format msgid "missing 'endef', unterminated 'define'" msgstr "'endef' を欠ã„ã¦ãŠã‚Š, 'define' ãŒçµ‚了ã—ã¦ã„ã¾ã›ã‚“" #: src/read.c:1531 #, c-format msgid "extraneous text after 'endef' directive" msgstr "'endef' 疑似命令ã®å¾Œã‚ã«ç„¡é–¢ä¿‚ãªæ–‡å­—列ãŒã‚りã¾ã™" #: src/read.c:1603 #, c-format msgid "extraneous text after '%s' directive" msgstr "'%s' 疑似命令ã®å¾Œã‚ã«ç„¡é–¢ä¿‚ãªæ–‡å­—列ãŒã‚りã¾ã™" #: src/read.c:1604 #, c-format msgid "extraneous '%s'" msgstr "無関係㪠'%s'" #: src/read.c:1632 #, c-format msgid "only one 'else' per conditional" msgstr "一ã¤ã®æ¡ä»¶éƒ¨ã«ã¤ã一ã¤ã—ã‹ 'else' を使ãˆã¾ã›ã‚“" #: src/read.c:1908 #, c-format msgid "Malformed target-specific variable definition" msgstr "ターゲット特有ã®å¤‰æ•°å®šç¾©ãŒç•°å¸¸ã§ã™" #: src/read.c:1968 #, c-format msgid "prerequisites cannot be defined in recipes" msgstr "å¿…è¦æ¡ä»¶ã‚’レシピ内ã§å®šç¾©ã§ãã¾ã›ã‚“" #: src/read.c:1986 #, c-format msgid "grouped targets must provide a recipe" msgstr "グループ化ã—ãŸã‚¿ãƒ¼ã‚²ãƒƒãƒˆã¯ãƒ¬ã‚·ãƒ”を供給ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™" #: src/read.c:2029 #, c-format msgid "mixed implicit and static pattern rules" msgstr "暗黙ルールã¨é™çš„ãƒ‘ã‚¿ãƒ¼ãƒ³ãƒ«ãƒ¼ãƒ«ãŒæ··ã–りã¾ã—ãŸ" #: src/read.c:2052 #, c-format msgid "mixed implicit and normal rules" msgstr "暗黙ルールã¨é€šå¸¸ãƒ«ãƒ¼ãƒ«ãŒæ··ã–りã¾ã—ãŸ" #: src/read.c:2107 #, c-format msgid "target '%s' doesn't match the target pattern" msgstr "ターゲット '%s' ã¯ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒ‘ターンã¨ä¸€è‡´ã—ã¾ã›ã‚“" #: src/read.c:2122 src/read.c:2168 #, c-format msgid "target file '%s' has both : and :: entries" msgstr "ターゲットファイル '%s' ㌠: 㨠:: é …ç›®ã®ä¸¡æ–¹ã‚’æŒã£ã¦ã„ã¾ã™" #: src/read.c:2128 #, c-format msgid "target '%s' given more than once in the same rule" msgstr "ターゲット '%s' ãŒåŒä¸€ãƒ«ãƒ¼ãƒ«å†…ã§è¤‡æ•°å›žä¸Žãˆã‚‰ã‚Œã¾ã—ãŸ" #: src/read.c:2138 #, c-format msgid "warning: overriding recipe for target '%s'" msgstr "警告: ターゲット '%s' ã®ãŸã‚ã®ãƒ¬ã‚·ãƒ”ã‚’ç½®ãæ›ãˆã¾ã™" #: src/read.c:2141 #, c-format msgid "warning: ignoring old recipe for target '%s'" msgstr "警告: ターゲット '%s' ã®ãŸã‚ã®å¤ã„レシピã¯ç„¡è¦–ã•れã¾ã™" #: src/read.c:2254 #, c-format msgid "*** mixed implicit and normal rules: deprecated syntax" msgstr "*** 暗黙ルールã¨é€šå¸¸ãƒ«ãƒ¼ãƒ«ãŒæ··ã–りã¾ã—ãŸ: 推奨ã•れãªã„文法" #: src/read.c:2271 #, c-format msgid "warning: overriding group membership for target '%s'" msgstr "警告: ターゲット '%s' ã®ã‚°ãƒ«ãƒ¼ãƒ—メンãƒãƒ¼ã‚·ãƒƒãƒ—を上書ãã—ã¾ã™" #: src/read.c:2636 #, c-format msgid "warning: NUL character seen; rest of line ignored" msgstr "警告: NUL 文字ãŒã‚りã¾ã™; è¡Œã®æ®‹ã‚Šã¯ç„¡è¦–ã•れã¾ã™" #: src/remake.c:226 #, c-format msgid "Nothing to be done for '%s'." msgstr "'%s' ã«å¯¾ã—ã¦è¡Œã†ã¹ã事ã¯ã‚りã¾ã›ã‚“." #: src/remake.c:227 #, c-format msgid "'%s' is up to date." msgstr "'%s' ã¯æ›´æ–°æ¸ˆã¿ã§ã™." #: src/remake.c:323 #, c-format msgid "Pruning file '%s'.\n" msgstr "ファイル '%s' ã®ä¾å­˜é–¢ä¿‚ã‚’æ•´ç†ã—ã¦ã„ã¾ã™.\n" #: src/remake.c:389 #, c-format msgid "%sNo rule to make target '%s', needed by '%s'%s" msgstr "" "%1$s'%3$s' ã«å¿…è¦ãªã‚¿ãƒ¼ã‚²ãƒƒãƒˆ '%2$s' ã‚’ make ã™ã‚‹ãƒ«ãƒ¼ãƒ«ãŒã‚りã¾ã›ã‚“%4$s" #: src/remake.c:399 #, c-format msgid "%sNo rule to make target '%s'%s" msgstr "%sターゲット '%s' ã‚’ make ã™ã‚‹ãƒ«ãƒ¼ãƒ«ãŒã‚りã¾ã›ã‚“%s" #: src/remake.c:425 #, c-format msgid "Considering target file '%s'.\n" msgstr "ファイル '%s' を検討ã—ã¦ã„ã¾ã™.\n" #: src/remake.c:432 #, c-format msgid "Recently tried and failed to update file '%s'.\n" msgstr "最近ファイル '%s' ã®æ›´æ–°ã‚’試ã—ã¦å¤±æ•—ã—ã¦ã„ã¾ã™.\n" #: src/remake.c:444 #, c-format msgid "File '%s' was considered already.\n" msgstr "ファイル '%s' ã¯æ¤œè¨Žæ¸ˆã¿ã§ã™.\n" #: src/remake.c:454 #, c-format msgid "Still updating file '%s'.\n" msgstr "ファイル '%s'ã€€ã®æ›´æ–°ã‚’ã—ã¦ã„ã¾ã™.\n" #: src/remake.c:457 #, c-format msgid "Finished updating file '%s'.\n" msgstr "ファイル '%s'ã€€ã®æ›´æ–°ãŒçµ‚了ã—ã¾ã—ãŸ.\n" #: src/remake.c:486 #, c-format msgid "File '%s' does not exist.\n" msgstr "ファイル '%s' ãŒå­˜åœ¨ã—ã¾ã›ã‚“.\n" #: src/remake.c:494 #, c-format msgid "" "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp" msgstr "" "*** 警告: .LOW_RESOLUTION_TIME ファイル '%s' ãŒé«˜è§£åƒåº¦ã‚¿ã‚¤ãƒ ã‚¹ã‚¿ãƒ³ãƒ—ã‚’æŒã£ã¦" "ã„ã¾ã™" #: src/remake.c:507 src/remake.c:1039 #, c-format msgid "Found an implicit rule for '%s'.\n" msgstr "'%s' ã®ãŸã‚ã®æš—黙ルールを見ã¤ã‘ã¾ã—ãŸ.\n" #: src/remake.c:509 src/remake.c:1041 #, c-format msgid "No implicit rule found for '%s'.\n" msgstr "'%s' ã®ãŸã‚ã®æš—黙ルールãŒã‚りã¾ã›ã‚“.\n" #: src/remake.c:515 #, c-format msgid "Using default recipe for '%s'.\n" msgstr "'%s' 用ã®ãƒ‡ãƒ•ォルトレシピを使用ã—ã¾ã™.\n" #: src/remake.c:549 src/remake.c:1088 #, c-format msgid "Circular %s <- %s dependency dropped." msgstr "循環 %s <- %s ä¾å­˜é–¢ä¿‚ãŒç ´æ£„ã•れã¾ã—ãŸ." #: src/remake.c:674 #, c-format msgid "Finished prerequisites of target file '%s'.\n" msgstr "ターゲットファイル '%s' ã®å¿…è¦æ¡ä»¶ã‚’満ãŸã—ã¾ã—ãŸ.\n" #: src/remake.c:680 #, c-format msgid "The prerequisites of '%s' are being made.\n" msgstr "'%s' ã®å¿…è¦æ¡ä»¶ã‚’ make ã—ã¾ã™.\n" #: src/remake.c:694 #, c-format msgid "Giving up on target file '%s'.\n" msgstr "ターゲットファイル '%s' を諦ã‚ã¾ã™.\n" #: src/remake.c:699 #, c-format msgid "Target '%s' not remade because of errors." msgstr "ターゲット '%s' ã¯ã‚¨ãƒ©ãƒ¼ã«ã‚ˆã‚Š å†make ã§ãã¾ã›ã‚“ã§ã—ãŸ." #: src/remake.c:751 #, c-format msgid "Prerequisite '%s' is order-only for target '%s'.\n" msgstr "å¿…è¦æ¡ä»¶ '%s' ã¯ã‚¿ãƒ¼ã‚²ãƒƒãƒˆ '%s' ã® order-only(é †åºæ±ºå®šæ¡ä»¶)ã§ã™.\n" #: src/remake.c:756 #, c-format msgid "Prerequisite '%s' of target '%s' does not exist.\n" msgstr "ターゲット '%2$s' ã®å¿…è¦æ¡ä»¶ '%1$s' ãŒå­˜åœ¨ã—ã¾ã›ã‚“.\n" #: src/remake.c:761 #, c-format msgid "Prerequisite '%s' is newer than target '%s'.\n" msgstr "å¿…è¦æ¡ä»¶ '%s' ã¯ã‚¿ãƒ¼ã‚²ãƒƒãƒˆ '%s' よりも新ã—ã„.\n" #: src/remake.c:764 #, c-format msgid "Prerequisite '%s' is older than target '%s'.\n" msgstr "å¿…è¦æ¡ä»¶ '%s' ã¯ã‚¿ãƒ¼ã‚²ãƒƒãƒˆ '%s' よりもå¤ã„.\n" #: src/remake.c:782 #, c-format msgid "Target '%s' is double-colon and has no prerequisites.\n" msgstr "ターゲット '%s' ã¯ãƒ€ãƒ–ルコロンã§, ã‹ã¤å¿…è¦æ¡ä»¶ã‚’æŒãŸãªã„.\n" #: src/remake.c:789 #, c-format msgid "No recipe for '%s' and no prerequisites actually changed.\n" msgstr "'%s' ã®ãŸã‚ã®ãƒ¬ã‚·ãƒ”ãŒç„¡ã, å¿…è¦æ¡ä»¶ã¯å®Ÿéš›ã«ã¯å¤‰æ›´ã•れã¾ã›ã‚“ã§ã—ãŸ.\n" #: src/remake.c:794 #, c-format msgid "Making '%s' due to always-make flag.\n" msgstr "always-make フラグãŒç«‹ã£ã¦ã„ã‚‹ã®ã§ '%s' ã‚’ make ã—ã¾ã™.\n" #: src/remake.c:802 #, c-format msgid "No need to remake target '%s'" msgstr "ターゲット '%s' ã‚’å†make ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“" #: src/remake.c:804 #, c-format msgid "; using VPATH name '%s'" msgstr "; VPATH å '%s' を使用ã—ã¾ã™" #: src/remake.c:824 #, c-format msgid "Must remake target '%s'.\n" msgstr "ターゲット '%s' ã‚’å†make ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™.\n" #: src/remake.c:830 #, c-format msgid " Ignoring VPATH name '%s'.\n" msgstr " VPATH å '%s' を無視ã—ã¾ã™.\n" #: src/remake.c:839 #, c-format msgid "Recipe of '%s' is being run.\n" msgstr "'%s' ã®ãƒ¬ã‚·ãƒ”を実行中ã§ã™.\n" #: src/remake.c:846 #, c-format msgid "Failed to remake target file '%s'.\n" msgstr "ターゲットファイル '%s' ã®å†make ã«å¤±æ•—ã—ã¾ã—ãŸ.\n" #: src/remake.c:849 #, c-format msgid "Successfully remade target file '%s'.\n" msgstr "ターゲットファイル '%s' ã®å† make ã«æˆåŠŸã—ã¾ã—ãŸ.\n" #: src/remake.c:852 #, c-format msgid "Target file '%s' needs to be remade under -q.\n" msgstr "ターゲットファイル '%s' 㯠-q オプションを付ã‘ã¦ã®å†make ãŒå¿…è¦ã§ã™.\n" #: src/remake.c:1047 #, c-format msgid "Using default commands for '%s'.\n" msgstr "'%s' ã®ãŸã‚ã®ãƒ‡ãƒ•ォルトã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使ã„ã¾ã™.\n" #: src/remake.c:1422 #, c-format msgid "Warning: File '%s' has modification time %s s in the future" msgstr "警告: ファイル '%s' ã®ä¿®æ­£æ™‚刻 %s ã¯æœªæ¥ã®æ™‚刻ã§ã™" #: src/remake.c:1662 #, c-format msgid ".LIBPATTERNS element '%s' is not a pattern" msgstr ".LIBPATTERNS è¦ç´  '%s' ãŒãƒ‘ターンã§ã¯ã‚りã¾ã›ã‚“" #: src/remote-cstms.c:122 #, c-format msgid "Customs won't export: %s\n" msgstr "Customs ãŒã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã—ã¦ãれã¾ã›ã‚“: %s\n" #: src/rule.c:289 #, c-format msgid "warning: ignoring prerequisites on suffix rule definition" msgstr "" #: src/rule.c:530 msgid "" "\n" "# Implicit Rules" msgstr "" "\n" "# 暗黙ルール" #: src/rule.c:545 msgid "" "\n" "# No implicit rules." msgstr "" "\n" "# 暗黙ルールãªã—." #: src/rule.c:548 #, c-format msgid "" "\n" "# %u implicit rules, %u (%.1f%%) terminal." msgstr "" "\n" "# %u å€‹ã®æš—黙ルール, %u (%.1f%%) 端末。" #: src/rule.c:557 #, c-format msgid "BUG: num_pattern_rules is wrong! %u != %u" msgstr "ãƒã‚°: num_pattern_rules ãŒé–“é•ã£ã¦ã„ã‚‹! %u != %u" #: src/signame.c:84 msgid "unknown signal" msgstr "未知ã®ã‚·ã‚°ãƒŠãƒ«" #: src/signame.c:92 msgid "Hangup" msgstr "ãƒãƒ³ã‚°ã‚¢ãƒƒãƒ—" #: src/signame.c:95 msgid "Interrupt" msgstr "割り込ã¿" #: src/signame.c:98 msgid "Quit" msgstr "終了" #: src/signame.c:101 msgid "Illegal Instruction" msgstr "䏿­£ãªãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢å‘½ä»¤" #: src/signame.c:104 msgid "Trace/breakpoint trap" msgstr "トレース/ブレイクãƒã‚¤ãƒ³ãƒˆãƒˆãƒ©ãƒƒãƒ—" #: src/signame.c:109 msgid "Aborted" msgstr "Abort ã—ã¾ã—ãŸ" #: src/signame.c:112 msgid "IOT trap" msgstr "IOT トラップ" #: src/signame.c:115 msgid "EMT trap" msgstr "EMT トラップ" #: src/signame.c:118 msgid "Floating point exception" msgstr "æµ®å‹•å°æ•°ç‚¹ä¾‹å¤–" #: src/signame.c:121 msgid "Killed" msgstr "Kill ã•れã¾ã—ãŸ" #: src/signame.c:124 msgid "Bus error" msgstr "ãƒã‚¹ã‚¨ãƒ©ãƒ¼" #: src/signame.c:127 msgid "Segmentation fault" msgstr "メモリé•å" #: src/signame.c:130 msgid "Bad system call" msgstr "䏿­£ãªã‚·ã‚¹ãƒ†ãƒ ã‚³ãƒ¼ãƒ«" #: src/signame.c:133 msgid "Broken pipe" msgstr "èª­ã¿æ‰‹ã®ãªã„パイプã¸ã®æ›¸ãè¾¼ã¿" #: src/signame.c:136 msgid "Alarm clock" msgstr "アラームクロック" #: src/signame.c:139 msgid "Terminated" msgstr "強制終了" #: src/signame.c:142 msgid "User defined signal 1" msgstr "ユーザ定義シグナル 1" #: src/signame.c:145 msgid "User defined signal 2" msgstr "ユーザ定義シグナル 2" #: src/signame.c:150 src/signame.c:153 msgid "Child exited" msgstr "å­ãƒ—ロセス終了" #: src/signame.c:156 msgid "Power failure" msgstr "é›»æºéšœå®³" #: src/signame.c:159 msgid "Stopped" msgstr "ä¸€æ™‚åœæ­¢" #: src/signame.c:162 msgid "Stopped (tty input)" msgstr "ä¸€æ™‚åœæ­¢ (tty 入力)" #: src/signame.c:165 msgid "Stopped (tty output)" msgstr "ä¸€æ™‚åœæ­¢ (tty 出力)" #: src/signame.c:168 msgid "Stopped (signal)" msgstr "ä¸€æ™‚åœæ­¢ (シグナル)" #: src/signame.c:171 msgid "CPU time limit exceeded" msgstr "CPU 時間ãŒåˆ¶é™ã‚’è¶Šãˆã¾ã—ãŸ" #: src/signame.c:174 msgid "File size limit exceeded" msgstr "ファイルサイズ制é™ã‚’è¶Šãˆã¾ã—ãŸ" #: src/signame.c:177 msgid "Virtual timer expired" msgstr "仮想タイマ満了" #: src/signame.c:180 msgid "Profiling timer expired" msgstr "プロファイルタイマ満了" #: src/signame.c:186 msgid "Window changed" msgstr "ウィンドウサイズ変更" #: src/signame.c:189 msgid "Continued" msgstr "å†é–‹ã•れã¾ã—ãŸ" #: src/signame.c:192 msgid "Urgent I/O condition" msgstr "緊急 I/O æ¡ä»¶" #: src/signame.c:199 src/signame.c:208 msgid "I/O possible" msgstr "入出力å¯èƒ½" #: src/signame.c:202 msgid "SIGWIND" msgstr "SIGWIND" #: src/signame.c:205 msgid "SIGPHONE" msgstr "SIGPHONE" #: src/signame.c:211 msgid "Resource lost" msgstr "リソースãŒå¤±ã‚れã¾ã—ãŸ" #: src/signame.c:214 msgid "Danger signal" msgstr "å±é™ºã‚·ã‚°ãƒŠãƒ«" #: src/signame.c:217 msgid "Information request" msgstr "æƒ…å ±è¦æ±‚" #: src/signame.c:220 msgid "Floating point co-processor not available" msgstr "æµ®å‹•å°æ•°ç‚¹ã‚³ãƒ—ロセッサãŒåˆ©ç”¨ä¸èƒ½" #: src/strcache.c:274 #, c-format msgid "" "\n" "%s No strcache buffers\n" msgstr "" "\n" "%s strcache ãƒãƒƒãƒ•ã‚¡ã¯ã‚りã¾ã›ã‚“\n" #: src/strcache.c:304 #, c-format msgid "" "\n" "%s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu " "B\n" msgstr "" "\n" "%s strcache ãƒãƒƒãƒ•ã‚¡: %lu (%lu) / 文字列 = %lu / æ ¼ç´ = %lu B / å¹³å‡ = %lu " "B\n" #: src/strcache.c:308 #, c-format msgid "" "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B\n" msgstr "" "%s ç¾åœ¨ã®ãƒãƒƒãƒ•ã‚¡: サイズ = %hu B / 使用中 = %hu B / 個数 = %hu / å¹³å‡ = %u " "B\n" #: src/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" #: src/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" #: src/strcache.c:326 #, c-format msgid "" "\n" "%s strcache performance: lookups = %lu / hit rate = %lu%%\n" msgstr "" "\n" "%s strcache ã®ç¨¼åƒ: 探索 = %lu / ヒット率 = %lu%%\n" #: src/strcache.c:328 msgid "" "# hash-table stats:\n" "# " msgstr "" "# ãƒãƒƒã‚·ãƒ¥ãƒ†ãƒ¼ãƒ–ルã®çŠ¶æ…‹:\n" "# " #: src/variable.c:1653 msgid "automatic" msgstr "自動変数" #: src/variable.c:1656 msgid "default" msgstr "デフォルト" #: src/variable.c:1659 msgid "environment" msgstr "環境変数" #: src/variable.c:1662 msgid "makefile" msgstr "makefile 変数" #: src/variable.c:1665 msgid "environment under -e" msgstr "-e ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã§æŒ‡å®šã—ãŸç’°å¢ƒå¤‰æ•°" #: src/variable.c:1668 msgid "command line" msgstr "コマンドライン変数" #: src/variable.c:1671 msgid "'override' directive" msgstr "'override' 疑似命令" #: src/variable.c:1682 #, c-format msgid " (from '%s', line %lu)" msgstr " (ファイル '%s', %lu 行目)" #: src/variable.c:1745 msgid "# variable set hash-table stats:\n" msgstr "# 変数セットã®ãƒãƒƒã‚·ãƒ¥ãƒ†ãƒ¼ãƒ–ルã®çŠ¶æ…‹:\n" #: src/variable.c:1756 msgid "" "\n" "# Variables\n" msgstr "" "\n" "# 変数\n" #: src/variable.c:1760 msgid "" "\n" "# Pattern-specific Variable Values" msgstr "" "\n" "# パターン指定 変数 値" #: src/variable.c:1774 msgid "" "\n" "# No pattern-specific variable values." msgstr "" "\n" "# パターン指定変数ã®å€¤ãªã—." #: src/variable.c:1776 #, c-format msgid "" "\n" "# %u pattern-specific variable values" msgstr "" "\n" "# %u 個ã®ãƒ‘ターン指定変数ã®å€¤" #: src/variable.h:229 #, c-format msgid "warning: undefined variable '%.*s'" msgstr "警告: 未定義ã®å¤‰æ•° '%.*s'" #: src/vmsfunctions.c:91 #, c-format msgid "sys$search() failed with %d\n" msgstr "sys$search() ㌠%d ã§å¤±æ•—ã—ã¾ã—ãŸ\n" #: src/vmsjobs.c:244 #, c-format msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n" msgstr "" "-警告, DCL ã‹ã‚‰ã® CTRL-Y æ“作をå†ã³æœ‰åйã«ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã‹ã‚‚知れã¾ã›ã‚“.\n" #: src/vmsjobs.c:681 #, c-format msgid "BUILTIN CD %s\n" msgstr "ビルトイン CD %s\n" #: src/vmsjobs.c:1224 #, c-format msgid "DCL: %s\n" msgstr "DCL: %s\n" #: src/vmsjobs.c:1284 #, c-format msgid "Append output to %s\n" msgstr "出力を %s ã¸è¿½åŠ \n" #: src/vmsjobs.c:1309 #, c-format msgid "Append %.*s and cleanup\n" msgstr "追加 %.*s ã¨å¾Œç‰‡ä»˜ã‘\n" #: src/vmsjobs.c:1322 #, c-format msgid "Executing %s instead\n" msgstr "代ã‚り㫠%s を実行ã—ã¾ã™\n" #: src/vpath.c:603 msgid "" "\n" "# VPATH Search Paths\n" msgstr "" "\n" "# VPATH 探索パス\n" #: src/vpath.c:620 msgid "# No 'vpath' search paths." msgstr "# 'vpath' 探索パスã¯ã‚りã¾ã›ã‚“." #: src/vpath.c:622 #, c-format msgid "" "\n" "# %u 'vpath' search paths.\n" msgstr "" "\n" "# %u ã¤ã® 'vpath' 探索パス.\n" #: src/vpath.c:625 msgid "" "\n" "# No general ('VPATH' variable) search path." msgstr "" "\n" "# 一般㮠('VPATH' 変数) 探索パスãªã—." #: src/vpath.c:631 msgid "" "\n" "# General ('VPATH' variable) search path:\n" "# " msgstr "" "\n" "# 一般㮠('VPATH' 変数) 探索パス:\n" "# " #: src/w32/w32os.c:44 #, c-format msgid "Jobserver slots limited to %d\n" msgstr "jobserver ã®ã‚¹ãƒ­ãƒƒãƒˆã¯ %d ã¾ã§ã§ã™\n" #: src/w32/w32os.c:60 #, c-format msgid "creating jobserver semaphore: (Error %ld: %s)" msgstr "ジョブサームセマフォを作æˆã—ã¦ã„ã¾ã™: (エラー %ld: %s)" #: src/w32/w32os.c:79 #, c-format msgid "" "internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)" msgstr "内部エラー: ジョブサームセマフォを開ã‘ã¾ã›ã‚“ '%s': (エラー %ld: %s)" #: src/w32/w32os.c:82 #, c-format msgid "Jobserver client (semaphore %s)\n" msgstr "jobserver クライアント (セマフォ %s)\n" #: src/w32/w32os.c:123 #, c-format msgid "release jobserver semaphore: (Error %ld: %s)" msgstr "ジョブサーãƒã®ã‚»ãƒžãƒ•ォを解放ã—ã¾ã™: (エラー %ld: %s)" #: src/w32/w32os.c:194 #, c-format msgid "semaphore or child process wait: (Error %ld: %s)" msgstr "セマフォ ã¾ãŸã¯ å­ãƒ—ロセスを待ã£ã¦ã„ã¾ã™: (エラー %ld: %s)" #~ msgid "%s: %s: Command not found\n" #~ msgstr "%s: %s: コマンドãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ\n" #~ msgid "%s[%u]: %s: Command not found\n" #~ msgstr "%s[%u]: %s: コマンドãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ\n" #~ msgid "%s: Shell program not found" #~ msgstr "%s: シェルプログラムãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ" #~ msgid "%s is suspending for 30 seconds..." #~ msgstr "%s 㯠30 ç§’é–“åœæ­¢ã—ã¾ã™..." #~ msgid "done sleep(30). Continuing.\n" #~ msgstr "sleep(30) ãŒçµ‚ã‚りã¾ã—ãŸ. ç¶šã‘ã¾ã™.\n" #~ msgid "Unknown error %d" #~ msgstr "未知ã®ã‚¨ãƒ©ãƒ¼ %d" #~ msgid "Warning: File '%s' has modification time in the future" #~ msgstr "警告: ファイル '%s' ã®ä¿®æ­£æ™‚åˆ»ã¯æœªæ¥ã®ã‚‚ã®ã§ã™" #~ msgid " terminal." #~ msgstr " 以上." #~ 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 オプション" #~ msgid "internal error: multiple --jobserver-fds options" #~ msgstr "内部エラー: 複数㮠--jobserver-fds オプション" #~ msgid "virtual memory exhausted" #~ msgstr "ä»®æƒ³ãƒ¡ãƒ¢ãƒªã‚’ä½¿ã„æžœãŸã—ã¾ã—ãŸ" #~ msgid "write error" #~ msgstr "書ãè¾¼ã¿ã‚¨ãƒ©ãƒ¼" #~ msgid "BUILTIN RM %s\n" #~ msgstr "ビルトイン RM %s\n" #~ msgid "# Invalid value in `update_status' member!" #~ msgstr "# `update_status' メンãƒã«ç„¡åйãªå€¤!" #~ msgid "*** [%s] Error 0x%x (ignored)" #~ msgstr "*** [%s] エラー 0x%x (無視ã•れã¾ã—ãŸ)" #~ msgid "[%s] Error %d (ignored)" #~ msgstr "[%s] エラー %d (無視ã•れã¾ã—ãŸ)" #~ msgid "Invoking recipe from %s:%lu to update target `%s'.\n" #~ msgstr "レシピを %s:%lu ã‹ã‚‰å‘¼ã³å‡ºã—ã¦ã‚¿ãƒ¼ã‚²ãƒƒãƒˆ `%s' ã‚’æ›´æ–°ã—ã¾ã™.\n" #~ msgid "Invoking builtin recipe to update target `%s'.\n" #~ msgstr "ターゲット `%s' ã‚’æ›´æ–°ã™ã‚‹ãŸã‚内蔵レシピを呼ã³å‡ºã—ã¦ã„ã¾ã™.\n" #~ msgid "%s # of strcache buffers: %d (* %d B/buffer = %d B)\n" #~ msgstr "%s # strcache ãƒãƒƒãƒ•ã‚¡ %d ã®ã†ã¡: (* %d B/ãƒãƒƒãƒ•ã‚¡ = %d B)\n" #~ msgid "" #~ "\n" #~ "# strcache hash-table stats:\n" #~ "# " #~ msgstr "" #~ "\n" #~ "# strcache ãƒãƒƒã‚·ãƒ¥ãƒ†ãƒ¼ãƒ–ルã®çµ±è¨ˆ:\n" #~ "# " #~ msgid "Syntax error, still inside '\"'\n" #~ msgstr "文法エラー, '\"' 内ã®ã¾ã¾ã§ã™\n" #~ msgid "Got a SIGCHLD; %u unreaped children.\n" #~ msgstr "SIGCHLD ãŒç™ºç”Ÿ; %u å€‹ã®æœªå›žåŽå­ãƒ—ロセス.\n" #~ msgid "-warning, CTRL-Y will leave sub-process(es) around.\n" #~ msgstr "-警告, CTRL-Y ã¯å­ãƒ—ロセスを散らã‹ã—ãŸã¾ã¾ã«ã™ã‚‹ã§ã—ょã†.\n" #~ msgid "Do not specify -j or --jobs if sh.exe is not available." #~ msgstr "sh.exe ãŒä½¿ãˆãªã„状態㧠-j ã‚„ --jobs を指定ã—ã¦ã¯ã„ã‘ã¾ã›ã‚“." #~ msgid "Resetting make for single job mode." #~ msgstr "å˜ä¸€ã‚¸ãƒ§ãƒ–モード㮠make ã«ãƒªã‚»ãƒƒãƒˆã—ã¾ã™." #~ 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" #~ "%sPARTICULAR PURPOSE.\n" #~ msgstr "" #~ "%sã“れã¯ãƒ•リーソフトウェアã§ã™. 利用許諾ã«ã¤ã„ã¦ã¯ã‚½ãƒ¼ã‚¹ã‚’\n" #~ "%sã”覧ãã ã•ã„.\n" #~ "%s商業性や特定ã®ç›®çš„ã¸ã®é©åˆæ€§ã®å¦‚何ã«é–¢ã‚らãš, ç„¡ä¿è¨¼ã§ã™.\n" #~ msgid "extraneous `endef'" #~ msgstr "関係ã®ãªã„ `endef'" #~ msgid "empty `override' directive" #~ msgstr "空㮠`override' 疑似命令" #~ msgid "invalid `override' directive" #~ msgstr "無効㪠`override' 疑似命令" #~ msgid "no file name for `%sinclude'" #~ msgstr "`%sinclude' ã«ãƒ•ァイルåãŒã‚りã¾ã›ã‚“" #~ msgid "target `%s' leaves prerequisite pattern empty" #~ msgstr "ターゲット `%s' ã®å¿…è¦æ¡ä»¶ãƒ‘ターンãŒç©ºã®ã¾ã¾ã§ã™" #~ msgid "# average %.3f files per bucket, max %u files in one bucket.\n" #~ msgstr "" #~ "# ãƒãƒƒã‚·ãƒ¥è¦ç´ ã‚ãŸã‚Šã€å¹³å‡ %.3f å€‹ã€æœ€å¤§ %u 個ã®ãƒ•ァイルãŒã‚りã¾ã™ã€‚\n" #~ msgid "Suspend process to allow a debugger to attach" #~ msgstr "デãƒãƒƒã‚¬ã« attach ã™ã‚‹ãŸã‚プロセスã®ä¸€æ™‚åœæ­¢ã‚’許å¯ã™ã‚‹" #~ msgid "# average of %.1f variables per bucket, max %u in one bucket.\n" #~ msgstr "# ãƒãƒƒã‚·ãƒ¥è¦ç´ ã‚ãŸã‚Šã€å¹³å‡ %.1f å€‹ã€æœ€å¤§ %u 個ã®å¤‰æ•°ãŒã‚りã¾ã™ã€‚\n" #~ msgid "# average of %d.%d variables per bucket, max %u in one bucket.\n" #~ msgstr "# ãƒãƒƒã‚·ãƒ¥è¦ç´ ã‚ãŸã‚Šå¹³å‡ %d.%d å€‹ã€æœ€å¤§ %u 個ã®å¤‰æ•°ãŒã‚りã¾ã™ã€‚\n" #~ msgid "the `word' function takes a positive index argument" #~ msgstr "`word' 関数ã¯éžè² ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹å¼•æ•°ã‚’ã¨ã‚Šã¾ã™" make-4.3/po/be.po0000644000175000017500000013540713611136530010573 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) 2002, 2003 Free Software Foundation, Inc. # Ales Nyakhaychyk , 2002, 2003. # msgid "" msgstr "" "Project-Id-Version: make 3.80\n" "Report-Msgid-Bugs-To: bug-make@gnu.org\n" "POT-Creation-Date: 2020-01-19 15:34-0500\n" "PO-Revision-Date: 2003-10-21 11:50+0300\n" "Last-Translator: Ales Nyakhaychyk \n" "Language-Team: Belarusian \n" "Language: be\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "X-Generator: KBabel 0.9.6\n" #: src/ar.c:46 #, fuzzy, c-format msgid "attempt to use unsupported feature: '%s'" msgstr "Ñпроба выкарыÑтаць непадтрымліваемую мажліваÑьць: \"%s\"" #: src/ar.c:123 #, c-format msgid "touch archive member is not available on VMS" msgstr "дакрананьне да ўдзельніку архіва недаÑтупна на VMS" #: src/ar.c:147 #, fuzzy, c-format msgid "touch: Archive '%s' does not exist" msgstr "touch: архіў \"%s\" Ð½Ñ Ð¹Ñнуе" #: src/ar.c:150 #, fuzzy, c-format msgid "touch: '%s' is not a valid archive" msgstr "touch: \"%s\" - гÑта не Ñ€ÑчаіÑны архіў" #: src/ar.c:157 #, fuzzy, c-format msgid "touch: Member '%s' does not exist in '%s'" msgstr "touch: удзельнік \"%s\" Ð½Ñ Ð¹Ñнуе Ñž \"%s\"" #: src/ar.c:164 #, c-format msgid "touch: Bad return code from ar_member_touch on '%s'" msgstr "" #: src/arscan.c:130 #, c-format msgid "lbr$set_module() failed to extract module info, status = %d" msgstr "" #: src/arscan.c:236 #, c-format msgid "lbr$ini_control() failed with status = %d" msgstr "" #: src/arscan.c:261 #, c-format msgid "unable to open library '%s' to lookup member status %d" msgstr "" #: src/arscan.c:944 #, c-format msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n" msgstr "" #: src/arscan.c:945 msgid " (name might be truncated)" msgstr " (назва муÑіла быць абрÑзана)" #: src/arscan.c:947 #, c-format msgid " Date %s" msgstr " Дата %s" #: src/arscan.c:948 #, c-format msgid " uid = %d, gid = %d, mode = 0%o.\n" msgstr " uid = %d, gid = %d, Ñ€Ñжым = 0%o.\n" #: src/commands.c:403 #, c-format msgid "Recipe has too many lines (%ud)" msgstr "" #: src/commands.c:504 msgid "*** Break.\n" msgstr "" #: src/commands.c:628 #, c-format msgid "*** [%s] Archive member '%s' may be bogus; not deleted" msgstr "" #: src/commands.c:632 #, c-format msgid "*** Archive member '%s' may be bogus; not deleted" msgstr "" #: src/commands.c:646 #, fuzzy, c-format msgid "*** [%s] Deleting file '%s'" msgstr "*** [%s] ВыдалÑецца файл \"%s\"" #: src/commands.c:648 #, fuzzy, c-format msgid "*** Deleting file '%s'" msgstr "*** ВыдалÑецца файл \"%s\"" #: src/commands.c:684 #, fuzzy msgid "# recipe to execute" msgstr "# загады Ð´Ð»Ñ Ð²Ñ‹ÐºÐ°Ð½Ð°Ð½ÑŒÐ½Ñ" #: src/commands.c:687 msgid " (built-in):" msgstr " (убудаваны):" #: src/commands.c:689 #, fuzzy, c-format msgid " (from '%s', line %lu):\n" msgstr " (з\"%s\", радок %lu):\n" #: src/dir.c:1073 msgid "" "\n" "# Directories\n" msgstr "" "\n" "# ТÑчкі\n" #: src/dir.c:1085 #, c-format msgid "# %s: could not be stat'd.\n" msgstr "" #: src/dir.c:1089 msgid "# %s (key %s, mtime %I64u): could not be opened.\n" msgstr "" #: src/dir.c:1094 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n" msgstr "" #: src/dir.c:1099 #, c-format msgid "# %s (device %ld, inode %ld): could not be opened.\n" msgstr "" #: src/dir.c:1126 msgid "# %s (key %s, mtime %I64u): " msgstr "" #: src/dir.c:1131 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): " msgstr "" #: src/dir.c:1136 #, c-format msgid "# %s (device %ld, inode %ld): " msgstr "" #: src/dir.c:1142 src/dir.c:1163 msgid "No" msgstr "Ðе" #: src/dir.c:1145 src/dir.c:1166 msgid " files, " msgstr " файлаў, " #: src/dir.c:1147 src/dir.c:1168 msgid "no" msgstr "не" #: src/dir.c:1150 msgid " impossibilities" msgstr "" #: src/dir.c:1154 msgid " so far." msgstr " так далёка." #: src/dir.c:1171 #, c-format msgid " impossibilities in %lu directories.\n" msgstr "" #: src/expand.c:125 #, c-format msgid "Recursive variable '%s' references itself (eventually)" msgstr "" #: src/expand.c:271 #, c-format msgid "unterminated variable reference" msgstr "" #: src/file.c:278 #, c-format msgid "Recipe was specified for file '%s' at %s:%lu," msgstr "" #: src/file.c:283 #, c-format msgid "Recipe for file '%s' was found by implicit rule search," msgstr "" #: src/file.c:287 #, c-format msgid "but '%s' is now considered the same file as '%s'." msgstr "" #: src/file.c:290 #, c-format msgid "Recipe for '%s' will be ignored in favor of the one for '%s'." msgstr "" #: src/file.c:310 #, c-format msgid "can't rename single-colon '%s' to double-colon '%s'" msgstr "" #: src/file.c:316 #, c-format msgid "can't rename double-colon '%s' to single-colon '%s'" msgstr "" #: src/file.c:408 #, fuzzy, c-format msgid "*** Deleting intermediate file '%s'" msgstr "*** ВыдалÑецца файл \"%s\"" #: src/file.c:412 #, c-format msgid "Removing intermediate files...\n" msgstr "ВыдалÑюцца Ð¿Ñ€Ð°Ð¼ÐµÐ¶ÐºÐ°Ð²Ñ‹Ñ Ñ„Ð°Ð¹Ð»Ñ‹...\n" #: src/file.c:872 msgid "Current time" msgstr "БÑгучы чаÑ" #: src/file.c:876 #, c-format msgid "%s: Timestamp out of range; substituting %s" msgstr "%s: адбітак чаÑу па-за дапушчальнымі межамі, падÑтаўлÑецца %s" #: src/file.c:1016 msgid "# Not a target:" msgstr "# ÐÑ Ð¼Ñта:" #: src/file.c:1021 msgid "# Precious file (prerequisite of .PRECIOUS)." msgstr "" #: src/file.c:1023 msgid "# Phony target (prerequisite of .PHONY)." msgstr "" #: src/file.c:1025 #, fuzzy msgid "# Command line target." msgstr "загадны радок" #: src/file.c:1027 msgid "# A default, MAKEFILES, or -include/sinclude makefile." msgstr "" #: src/file.c:1029 msgid "# Builtin rule" msgstr "" #: src/file.c:1031 msgid "# Implicit rule search has been done." msgstr "" #: src/file.c:1032 msgid "# Implicit rule search has not been done." msgstr "" #: src/file.c:1034 #, c-format msgid "# Implicit/static pattern stem: '%s'\n" msgstr "" #: src/file.c:1036 msgid "# File is an intermediate prerequisite." msgstr "" #: src/file.c:1040 msgid "# Also makes:" msgstr "# Так Ñама робÑцца:" #: src/file.c:1046 msgid "# Modification time never checked." msgstr "# Ð§Ð°Ñ Ð·ÑŒÐ¼ÑÐ½ÐµÐ½ÑŒÐ½Ñ Ð½Ñ–ÐºÐ¾Ð»Ñ– не правÑраўÑÑ." #: src/file.c:1048 msgid "# File does not exist." msgstr "# Файл Ð½Ñ Ð¹Ñнуе." #: src/file.c:1050 msgid "# File is very old." msgstr "# Файл вельмі Ñтары." #: src/file.c:1055 #, c-format msgid "# Last modified %s\n" msgstr "# ÐпошнÑе зьмÑненьне %s\n" #: src/file.c:1058 msgid "# File has been updated." msgstr "# Файл быў абноўлены." #: src/file.c:1058 msgid "# File has not been updated." msgstr "# Файл Ð½Ñ Ð±Ñ‹Ñž абноўлены." #: src/file.c:1062 #, fuzzy msgid "# Recipe currently running (THIS IS A BUG)." msgstr "# Загады, што выконваюцца зараз (ГЭТР- ПÐМЫЛКÐ)." #: src/file.c:1065 #, fuzzy msgid "# Dependencies recipe running (THIS IS A BUG)." msgstr "# Загады, што выконваюцца зараз (ГЭТР- ПÐМЫЛКÐ)." #: src/file.c:1074 msgid "# Successfully updated." msgstr "# ПаÑьпÑхова абноўлены." #: src/file.c:1078 msgid "# Needs to be updated (-q is set)." msgstr "" #: src/file.c:1081 msgid "# Failed to be updated." msgstr "" #: src/file.c:1086 msgid "# Invalid value in 'command_state' member!" msgstr "" #: src/file.c:1105 msgid "" "\n" "# Files" msgstr "" "\n" "# Файлы" #: src/file.c:1109 msgid "" "\n" "# files hash-table stats:\n" "# " msgstr "" #: src/file.c:1119 #, c-format msgid "%s: Field '%s' not cached: %s" msgstr "" #: src/function.c:794 msgid "non-numeric first argument to 'word' function" msgstr "" #: src/function.c:799 #, c-format msgid "first argument to 'word' function must be greater than 0" msgstr "" #: src/function.c:819 msgid "non-numeric first argument to 'wordlist' function" msgstr "" #: src/function.c:821 msgid "non-numeric second argument to 'wordlist' function" msgstr "" #: src/function.c:1533 #, fuzzy, c-format msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n" msgstr "windows32_openpipe (): памылка Ñž process_init_fd()\n" #: src/function.c:1557 #, fuzzy, c-format msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n" msgstr "windows32_openpipe (): памылка Ñž process_init_fd()\n" #: src/function.c:1564 #, fuzzy, c-format msgid "CreatePipe() failed (e=%ld)\n" msgstr "памылка Ñž CreatePipe() (e=%d)\n" #: src/function.c:1572 #, fuzzy, c-format msgid "windows32_openpipe(): process_init_fd() failed\n" msgstr "windows32_openpipe (): памылка Ñž process_init_fd()\n" #: src/function.c:1857 #, c-format msgid "Cleaning up temporary batch file %s\n" msgstr "" #: src/function.c:2230 src/function.c:2255 #, c-format msgid "file: missing filename" msgstr "" #: src/function.c:2234 src/function.c:2265 #, fuzzy, c-format msgid "open: %s: %s" msgstr "%s: %s" #: src/function.c:2242 #, fuzzy, c-format msgid "write: %s: %s" msgstr "%s: %s" #: src/function.c:2245 src/function.c:2282 #, fuzzy, c-format msgid "close: %s: %s" msgstr "%s%s: %s" #: src/function.c:2258 #, c-format msgid "file: too many arguments" msgstr "" #: src/function.c:2277 #, fuzzy, c-format msgid "read: %s: %s" msgstr "%s: %s" #: src/function.c:2290 #, fuzzy, c-format msgid "file: invalid file operation: %s" msgstr "%s: нерÑчаіÑны выбар -- %c.\n" #: src/function.c:2405 #, c-format msgid "insufficient number of arguments (%d) to function '%s'" msgstr "" #: src/function.c:2417 #, fuzzy, c-format msgid "unimplemented on this platform: function '%s'" msgstr "ÐÑ Ð·Ñ€Ð¾Ð±Ð»ÐµÐ½Ð° Ð´Ð»Ñ Ð³Ñтае плÑтформы: Ñ„ÑƒÐ½ÐºÑ†Ñ‹Ñ \"%s\"" #: src/function.c:2483 #, c-format msgid "unterminated call to function '%s': missing '%c'" msgstr "" #: src/function.c:2667 #, c-format msgid "Empty function name" msgstr "" #: src/function.c:2669 #, c-format msgid "Invalid function name: %s" msgstr "" #: src/function.c:2671 #, c-format msgid "Function name too long: %s" msgstr "" #: src/function.c:2674 #, c-format msgid "Invalid minimum argument count (%u) for function %s" msgstr "" #: src/function.c:2677 #, c-format msgid "Invalid maximum argument count (%u) for function %s" msgstr "" #: src/getopt.c:659 #, fuzzy, c-format msgid "%s: option '%s' is ambiguous\n" msgstr "%s: выбар \"%s\" - неадназначы.\n" #: src/getopt.c:683 #, fuzzy, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s: выбар \"--%s\" не дазвалÑе довад.\n" #: src/getopt.c:688 #, fuzzy, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s: выбар \"%c%s\" не дазвалÑе довад.\n" #: src/getopt.c:705 src/getopt.c:878 #, fuzzy, c-format msgid "%s: option '%s' requires an argument\n" msgstr "%s: выбар \"%s\" патрабуе довад.\n" #: src/getopt.c:734 #, fuzzy, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s: нераÑпазнаны выбар \"--%s\".\n" #: src/getopt.c:738 #, fuzzy, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s: нераÑпазнаны выбар \"%c%s\".\n" #: src/getopt.c:764 #, c-format msgid "%s: illegal option -- %c\n" msgstr "%s: недапушчальны выбар -- %c.\n" #: src/getopt.c:767 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s: нерÑчаіÑны выбар -- %c.\n" #: src/getopt.c:797 src/getopt.c:927 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: выбар патрабуе довад -- %c.\n" #: src/getopt.c:844 #, fuzzy, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s: выбар \"-W %s\" - неадназначын.\n" #: src/getopt.c:862 #, fuzzy, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s: выбар \"-W %s\" не дазвалÑе довад.\n" #: src/guile.c:58 #, c-format msgid "guile: Expanding '%s'\n" msgstr "" #: src/guile.c:74 #, c-format msgid "guile: Evaluating '%s'\n" msgstr "" #: src/hash.c:50 #, c-format msgid "can't allocate %lu bytes for hash table: memory exhausted" msgstr "" #: src/hash.c:280 #, c-format msgid "Load=%lu/%lu=%.0f%%, " msgstr "" #: src/hash.c:282 #, c-format msgid "Rehash=%u, " msgstr "" #: src/hash.c:283 #, c-format msgid "Collisions=%lu/%lu=%.0f%%" msgstr "" #: src/implicit.c:38 #, c-format msgid "Looking for an implicit rule for '%s'.\n" msgstr "" #: src/implicit.c:54 #, c-format msgid "Looking for archive-member implicit rule for '%s'.\n" msgstr "" #: src/implicit.c:311 #, c-format msgid "Avoiding implicit rule recursion.\n" msgstr "" #: src/implicit.c:484 #, c-format msgid "Stem too long: '%s%.*s'.\n" msgstr "" #: src/implicit.c:490 #, c-format msgid "Trying pattern rule with stem '%.*s'.\n" msgstr "" #: src/implicit.c:717 #, c-format msgid "Rejecting impossible rule prerequisite '%s'.\n" msgstr "" #: src/implicit.c:718 #, c-format msgid "Rejecting impossible implicit prerequisite '%s'.\n" msgstr "" #: src/implicit.c:732 #, c-format msgid "Trying rule prerequisite '%s'.\n" msgstr "" #: src/implicit.c:733 #, c-format msgid "Trying implicit prerequisite '%s'.\n" msgstr "" #: src/implicit.c:772 #, c-format msgid "Found prerequisite '%s' as VPATH '%s'\n" msgstr "" #: src/implicit.c:786 #, fuzzy, c-format msgid "Looking for a rule with intermediate file '%s'.\n" msgstr "ВыдалÑюцца Ð¿Ñ€Ð°Ð¼ÐµÐ¶ÐºÐ°Ð²Ñ‹Ñ Ñ„Ð°Ð¹Ð»Ñ‹...\n" #: src/job.c:370 #, fuzzy msgid "Cannot create a temporary file\n" msgstr "fwrite (чаÑовы файл)" #: src/job.c:548 msgid " (core dumped)" msgstr "" #: src/job.c:553 msgid " (ignored)" msgstr "" #: src/job.c:557 src/job.c:1892 #, fuzzy msgid "" msgstr " (убудаваны):" #: src/job.c:573 #, fuzzy, c-format msgid "%s[%s: %s] Error %d%s" msgstr "*** [%s] Памылка %d" #: src/job.c:662 #, c-format msgid "*** Waiting for unfinished jobs...." msgstr "*** Чакаюцца Ð½ÐµÐ·Ð°Ð²ÐµÑ€ÑˆÐ°Ð½Ñ‹Ñ Ð¿Ñ€Ð°Ñ†Ñ‹...." #: src/job.c:704 #, c-format msgid "Live child %p (%s) PID %s %s\n" msgstr "" #: src/job.c:706 src/job.c:900 src/job.c:1072 src/job.c:1644 #, c-format msgid " (remote)" msgstr "" #: src/job.c:898 #, c-format msgid "Reaping winning child %p PID %s %s\n" msgstr "" #: src/job.c:899 #, c-format msgid "Reaping losing child %p PID %s %s\n" msgstr "" #: src/job.c:950 #, c-format msgid "Cleaning up temp batch file %s\n" msgstr "" #: src/job.c:956 #, c-format msgid "Cleaning up temp batch file %s failed (%d)\n" msgstr "" #: src/job.c:1071 #, c-format msgid "Removing child %p PID %s%s from chain.\n" msgstr "" #: src/job.c:1120 #, c-format msgid "Released token for child %p (%s).\n" msgstr "" #: src/job.c:1575 src/job.c:2487 #, c-format msgid "process_easy() failed to launch process (e=%ld)\n" msgstr "" #: src/job.c:1579 src/job.c:2491 #, c-format msgid "" "\n" "Counted %d args in failed launch\n" msgstr "" #: src/job.c:1642 #, c-format msgid "Putting child %p (%s) PID %s%s on the chain.\n" msgstr "" #: src/job.c:1875 #, c-format msgid "Obtained token for child %p (%s).\n" msgstr "" #: src/job.c:1902 #, fuzzy, c-format msgid "%s: target '%s' does not exist" msgstr "touch: архіў \"%s\" Ð½Ñ Ð¹Ñнуе" #: src/job.c:1905 #, fuzzy, c-format msgid "%s: update target '%s' due to: %s" msgstr "%s ÐÑма правіла каб зрабіць мÑту \"%s\", патрÑбную Ð´Ð»Ñ \"%s\"%s" #: src/job.c:2108 #, c-format msgid "cannot enforce load limits on this operating system" msgstr "" #: src/job.c:2110 msgid "cannot enforce load limit: " msgstr "" #: src/job.c:2200 #, c-format msgid "no more file handles: could not duplicate stdin\n" msgstr "" #: src/job.c:2212 #, c-format msgid "no more file handles: could not duplicate stdout\n" msgstr "" #: src/job.c:2226 #, c-format msgid "no more file handles: could not duplicate stderr\n" msgstr "" #: src/job.c:2241 #, c-format msgid "Could not restore stdin\n" msgstr "" #: src/job.c:2249 #, c-format msgid "Could not restore stdout\n" msgstr "" #: src/job.c:2257 #, c-format msgid "Could not restore stderr\n" msgstr "" #: src/job.c:2520 #, c-format msgid "make reaped child pid %s, still waiting for pid %s\n" msgstr "" #: src/job.c:2623 #, c-format msgid "spawnvpe: environment space might be exhausted" msgstr "" #: src/job.c:2862 #, fuzzy, c-format msgid "$SHELL changed (was '%s', now '%s')\n" msgstr "$SHELL зьменена (раней \"%s\", зараз \"%s\")" #: src/job.c:3300 src/job.c:3485 #, c-format msgid "Creating temporary batch file %s\n" msgstr "" #: src/job.c:3308 #, c-format msgid "" "Batch file contents:\n" "\t@echo off\n" msgstr "" #: src/job.c:3497 #, c-format msgid "" "Batch file contents:%s\n" "\t%s\n" msgstr "" #: src/job.c:3605 #, c-format msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n" msgstr "" #: src/load.c:60 #, c-format msgid "Failed to open global symbol table: %s" msgstr "" #: src/load.c:97 #, c-format msgid "Loaded object %s is not declared to be GPL compatible" msgstr "" #: src/load.c:104 #, c-format msgid "Failed to load symbol %s from %s: %s" msgstr "" #: src/load.c:149 #, c-format msgid "Empty symbol name for load: %s" msgstr "" #: src/load.c:204 #, c-format msgid "Loading symbol %s from %s\n" msgstr "" #: src/load.c:256 #, fuzzy, c-format msgid "The 'load' operation is not supported on this platform." msgstr "ÐŸÐ°Ñ€Ð°Ð»ÐµÐ»ÑŒÐ½Ñ Ð¿Ñ€Ð°Ñ†Ñ‹ (-j) не падтрымліваюцца на гÑтае плÑтхорме." #: src/main.c:335 msgid "Options:\n" msgstr "Выбары:\n" #: src/main.c:336 msgid " -b, -m Ignored for compatibility.\n" msgstr "" #: src/main.c:338 msgid " -B, --always-make Unconditionally make all targets.\n" msgstr "" #: src/main.c:340 msgid "" " -C DIRECTORY, --directory=DIRECTORY\n" " Change to DIRECTORY before doing anything.\n" msgstr "" #: src/main.c:343 msgid " -d Print lots of debugging information.\n" msgstr "" #: src/main.c:345 msgid "" " --debug[=FLAGS] Print various types of debugging information.\n" msgstr "" #: src/main.c:347 msgid "" " -e, --environment-overrides\n" " Environment variables override makefiles.\n" msgstr "" #: src/main.c:350 msgid "" " -E STRING, --eval=STRING Evaluate STRING as a makefile statement.\n" msgstr "" #: src/main.c:352 msgid "" " -f FILE, --file=FILE, --makefile=FILE\n" " Read FILE as a makefile.\n" msgstr "" #: src/main.c:355 msgid " -h, --help Print this message and exit.\n" msgstr "" " -h, --help Друкуе гÑтае паведамленьне й выходзіць.\n" #: src/main.c:357 msgid " -i, --ignore-errors Ignore errors from recipes.\n" msgstr "" #: src/main.c:359 msgid "" " -I DIRECTORY, --include-dir=DIRECTORY\n" " Search DIRECTORY for included makefiles.\n" msgstr "" #: src/main.c:362 msgid "" " -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no " "arg.\n" msgstr "" #: src/main.c:364 msgid "" " -k, --keep-going Keep going when some targets can't be made.\n" msgstr "" #: src/main.c:366 msgid "" " -l [N], --load-average[=N], --max-load[=N]\n" " Don't start multiple jobs unless load is below " "N.\n" msgstr "" #: src/main.c:369 msgid "" " -L, --check-symlink-times Use the latest mtime between symlinks and " "target.\n" msgstr "" #: src/main.c:371 msgid "" " -n, --just-print, --dry-run, --recon\n" " Don't actually run any recipe; just print " "them.\n" msgstr "" #: src/main.c:374 msgid "" " -o FILE, --old-file=FILE, --assume-old=FILE\n" " Consider FILE to be very old and don't remake " "it.\n" msgstr "" #: src/main.c:377 msgid "" " -O[TYPE], --output-sync[=TYPE]\n" " Synchronize output of parallel jobs by TYPE.\n" msgstr "" #: src/main.c:380 msgid " -p, --print-data-base Print make's internal database.\n" msgstr " -p, --print-data-base Друкуе нутраную базу даньнÑÑž make.\n" #: src/main.c:382 msgid "" " -q, --question Run no recipe; exit status says if up to " "date.\n" msgstr "" #: src/main.c:384 msgid " -r, --no-builtin-rules Disable the built-in implicit rules.\n" msgstr "" #: src/main.c:386 msgid " -R, --no-builtin-variables Disable the built-in variable settings.\n" msgstr "" #: src/main.c:388 #, fuzzy msgid " -s, --silent, --quiet Don't echo recipes.\n" msgstr " -s, --silent, --quiet Ðе адлюÑтроўваць загады.\n" #: src/main.c:390 msgid " --no-silent Echo recipes (disable --silent mode).\n" msgstr "" #: src/main.c:392 msgid "" " -S, --no-keep-going, --stop\n" " Turns off -k.\n" msgstr "" " -S, --no-keep-going, --stop\n" " Выключае -k.\n" #: src/main.c:395 msgid " -t, --touch Touch targets instead of remaking them.\n" msgstr "" #: src/main.c:397 #, fuzzy msgid " --trace Print tracing information.\n" msgstr "" " -h, --help Друкуе гÑтае паведамленьне й выходзіць.\n" #: src/main.c:399 msgid "" " -v, --version Print the version number of make and exit.\n" msgstr "" #: src/main.c:401 msgid " -w, --print-directory Print the current directory.\n" msgstr " -w, --print-directory Друкуе бÑгучую Ñ‚Ñчку.\n" #: src/main.c:403 msgid "" " --no-print-directory Turn off -w, even if it was turned on " "implicitly.\n" msgstr "" #: src/main.c:405 msgid "" " -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n" " Consider FILE to be infinitely new.\n" msgstr "" #: src/main.c:408 msgid "" " --warn-undefined-variables Warn when an undefined variable is " "referenced.\n" msgstr "" #: src/main.c:671 #, c-format msgid "empty string invalid as file name" msgstr "пуÑты радок нерÑчаіÑны Ñž ÑкаÑьці назвы файла" #: src/main.c:754 #, c-format msgid "unknown debug level specification '%s'" msgstr "" #: src/main.c:794 #, c-format msgid "unknown output-sync type '%s'" msgstr "" #: src/main.c:849 #, c-format msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n" msgstr "" #: src/main.c:856 #, c-format msgid "" "\n" "Unhandled exception filter called from program %s\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" msgstr "" #: src/main.c:864 #, c-format msgid "Access violation: write operation at address 0x%p\n" msgstr "" #: src/main.c:865 #, c-format msgid "Access violation: read operation at address 0x%p\n" msgstr "" #: src/main.c:941 src/main.c:956 #, c-format msgid "find_and_set_shell() setting default_shell = %s\n" msgstr "" #: src/main.c:1009 #, c-format msgid "find_and_set_shell() path search set default_shell = %s\n" msgstr "" #: src/main.c:1609 #, c-format msgid "" "warning: jobserver unavailable: using -j1. Add '+' to parent make rule." msgstr "" #: src/main.c:1617 #, c-format msgid "warning: -j%d forced in submake: resetting jobserver mode." msgstr "" #: src/main.c:1781 #, c-format msgid "Makefile from standard input specified twice." msgstr "Makefile Ñа Ñтандартнага ўводу зададзены двойчы." #: src/main.c:1819 src/vmsjobs.c:1248 msgid "fopen (temporary file)" msgstr "fopen (чаÑовы файл)" #: src/main.c:1825 msgid "fwrite (temporary file)" msgstr "fwrite (чаÑовы файл)" #: src/main.c:2004 #, c-format msgid "warning: -j%d forced in makefile: resetting jobserver mode." msgstr "" #: src/main.c:2068 #, c-format msgid "Parallel jobs (-j) are not supported on this platform." msgstr "ÐŸÐ°Ñ€Ð°Ð»ÐµÐ»ÑŒÐ½Ñ Ð¿Ñ€Ð°Ñ†Ñ‹ (-j) не падтрымліваюцца на гÑтае плÑтхорме." #: src/main.c:2069 #, c-format msgid "Resetting to single job (-j1) mode." msgstr "" #: src/main.c:2109 #, c-format msgid "Symbolic links not supported: disabling -L." msgstr "" #: src/main.c:2190 #, c-format msgid "Updating makefiles....\n" msgstr "ÐбнаўлÑюцца make-файлы....\n" #: src/main.c:2226 #, c-format msgid "Makefile '%s' might loop; not remaking it.\n" msgstr "" #: src/main.c:2303 #, c-format msgid "Failed to remake makefile '%s'." msgstr "" #: src/main.c:2323 #, fuzzy, c-format msgid "Included makefile '%s' was not found." msgstr "Makefile \"%s\" Ð½Ñ Ð·Ð½Ð¾Ð¹Ð´Ð·ÐµÐ½" #: src/main.c:2328 #, fuzzy, c-format msgid "Makefile '%s' was not found" msgstr "Makefile \"%s\" Ð½Ñ Ð·Ð½Ð¾Ð¹Ð´Ð·ÐµÐ½" #: src/main.c:2394 #, c-format msgid "Couldn't change back to original directory." msgstr "" #: src/main.c:2402 #, c-format msgid "Re-executing[%u]:" msgstr "" #: src/main.c:2522 msgid "unlink (temporary file): " msgstr "unlink (чаÑовы файл): " #: src/main.c:2555 #, c-format msgid ".DEFAULT_GOAL contains more than one target" msgstr "" #: src/main.c:2579 #, c-format msgid "No targets" msgstr "ÐÑма мÑÑ‚" #: src/main.c:2581 #, c-format msgid "No targets specified and no makefile found" msgstr "" #: src/main.c:2586 #, c-format msgid "Updating goal targets....\n" msgstr "" #: src/main.c:2610 #, c-format msgid "warning: Clock skew detected. Your build may be incomplete." msgstr "" #: src/main.c:2804 #, c-format msgid "Usage: %s [options] [target] ...\n" msgstr "ВыкарыÑтаньне: %s [выбары] [мÑта] ...\n" #: src/main.c:2810 #, c-format msgid "" "\n" "This program built for %s\n" msgstr "" "\n" "ГÑта праграма пабудавана Ð´Ð»Ñ %s\n" #: src/main.c:2812 #, c-format msgid "" "\n" "This program built for %s (%s)\n" msgstr "" "\n" "ГÑта праграма падубавана Ð´Ð»Ñ %s (%s)\n" #: src/main.c:2815 #, c-format msgid "Report bugs to \n" msgstr "ПаведамлÑйце пра памылкі на .\n" #: src/main.c:2901 #, fuzzy, c-format msgid "the '%s%s' option requires a non-empty string argument" msgstr "выбар \"-%c\" патрабуе Ñтаноўчы цÑлы довад" #: src/main.c:2965 #, fuzzy, c-format msgid "the '-%c' option requires a positive integer argument" msgstr "выбар \"-%c\" патрабуе Ñтаноўчы цÑлы довад" #: src/main.c:3363 #, fuzzy, c-format msgid "%sBuilt for %s\n" msgstr "" "\n" "ГÑта праграма пабудавана Ð´Ð»Ñ %s\n" #: src/main.c:3365 #, fuzzy, c-format msgid "%sBuilt for %s (%s)\n" msgstr "" "\n" "ГÑта праграма падубавана Ð´Ð»Ñ %s (%s)\n" #: src/main.c:3376 #, c-format msgid "" "%sLicense GPLv3+: GNU GPL version 3 or later \n" "%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 "" #: src/main.c:3397 #, c-format msgid "" "\n" "# Make data base, printed on %s" msgstr "" #: src/main.c:3407 #, c-format msgid "" "\n" "# Finished Make data base on %s\n" msgstr "" #: src/misc.c:643 #, c-format msgid "%s: user %lu (real %lu), group %lu (real %lu)\n" msgstr "%s: карыÑтальнік %lu (наÑамрÑч %lu), група %lu (наÑамрÑч %lu)\n" #: src/misc.c:664 msgid "Initialized access" msgstr "" #: src/misc.c:743 msgid "User access" msgstr "" #: src/misc.c:791 msgid "Make access" msgstr "" #: src/misc.c:825 msgid "Child access" msgstr "" #: src/output.c:97 #, fuzzy, c-format msgid "%s: Entering an unknown directory\n" msgstr "%s: уваход у невÑдомую Ñ‚Ñчку" #: src/output.c:99 #, fuzzy, c-format msgid "%s: Leaving an unknown directory\n" msgstr "%s: выхад зь невÑдомае Ñ‚Ñчкі" #: src/output.c:102 #, fuzzy, c-format msgid "%s: Entering directory '%s'\n" msgstr "%s: уваход у Ñ‚Ñчку \"%s\"\n" #: src/output.c:104 #, fuzzy, c-format msgid "%s: Leaving directory '%s'\n" msgstr "%s: выхад з Ñ‚Ñчкі \"%s\"\n" #: src/output.c:108 #, fuzzy, c-format msgid "%s[%u]: Entering an unknown directory\n" msgstr "%s[%u]: уваход у невÑдомую Ñ‚Ñчку" #: src/output.c:110 #, fuzzy, c-format msgid "%s[%u]: Leaving an unknown directory\n" msgstr "%s[%u]: выхад зь невÑдомае Ñ‚Ñчкі" #: src/output.c:113 #, fuzzy, c-format msgid "%s[%u]: Entering directory '%s'\n" msgstr "%s[%u]: уваход у Ñ‚Ñчку \"%s\"\n" #: src/output.c:115 #, fuzzy, c-format msgid "%s[%u]: Leaving directory '%s'\n" msgstr "%s[%u]: выхад з Ñ‚Ñчкі \"%s\"\n" #: src/output.c:442 src/output.c:444 #, c-format msgid "write error: stdout" msgstr "" #: src/output.c:624 msgid ". Stop.\n" msgstr "" #: src/output.c:658 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" #: src/output.c:667 #, c-format msgid "%s: %s" msgstr "%s: %s" #: src/output.h:62 #, c-format msgid "-O[TYPE] (--output-sync[=TYPE]) is not configured for this build." msgstr "" #: src/posixos.c:90 msgid "creating jobs pipe" msgstr "Ñтвараецца трубаправод прац" #: src/posixos.c:98 src/posixos.c:251 #, fuzzy msgid "duping jobs pipe" msgstr "Ñтвараецца трубаправод прац" #: src/posixos.c:104 msgid "init jobserver pipe" msgstr "" #: src/posixos.c:119 #, c-format msgid "internal error: invalid --jobserver-auth string '%s'" msgstr "" #: src/posixos.c:122 #, c-format msgid "Jobserver client (fds %d,%d)\n" msgstr "" #: src/posixos.c:138 msgid "jobserver pipeline" msgstr "" #: src/posixos.c:186 msgid "write jobserver" msgstr "" #: src/posixos.c:300 #, c-format msgid "job server shut down" msgstr "" #: src/posixos.c:303 #, fuzzy msgid "pselect jobs pipe" msgstr "Ñтвараецца трубаправод прац" #: src/posixos.c:319 src/posixos.c:433 msgid "read jobs pipe" msgstr "" #: src/read.c:181 #, c-format msgid "Reading makefiles...\n" msgstr "Чытаюцца make-файлы...\n" #: src/read.c:336 #, fuzzy, c-format msgid "Reading makefile '%s'" msgstr "Чытаецца make-файл \"%s\"" #: src/read.c:338 #, c-format msgid " (no default goal)" msgstr " (нÑма дапомнае мÑты)" #: src/read.c:340 #, c-format msgid " (search path)" msgstr " (пошук шлÑху)" #: src/read.c:342 #, c-format msgid " (don't care)" msgstr "" #: src/read.c:344 #, c-format msgid " (no ~ expansion)" msgstr "" #: src/read.c:655 #, c-format msgid "Skipping UTF-8 BOM in makefile '%s'\n" msgstr "" #: src/read.c:658 #, c-format msgid "Skipping UTF-8 BOM in makefile buffer\n" msgstr "" #: src/read.c:787 #, c-format msgid "invalid syntax in conditional" msgstr "" #: src/read.c:960 #, c-format msgid "%s: failed to load" msgstr "" #: src/read.c:986 #, c-format msgid "recipe commences before first target" msgstr "" #: src/read.c:1035 #, fuzzy, c-format msgid "missing rule before recipe" msgstr "прапушчана правіла перад загадамі" #: src/read.c:1136 #, fuzzy, c-format msgid "missing separator (did you mean TAB instead of 8 spaces?)" msgstr " (вы маеце на ўвазе TAB замеÑÑ‚ 8 прагалаў?)" #: src/read.c:1138 #, fuzzy, c-format msgid "missing separator" msgstr "прапушчан падзÑлÑльнік %s" #: src/read.c:1283 #, c-format msgid "missing target pattern" msgstr "" #: src/read.c:1285 #, c-format msgid "multiple target patterns" msgstr "" #: src/read.c:1289 #, c-format msgid "target pattern contains no '%%'" msgstr "" #: src/read.c:1404 #, fuzzy, c-format msgid "missing 'endif'" msgstr "прапушчаны \"endif\"" #: src/read.c:1443 src/read.c:1488 src/variable.c:1600 #, c-format msgid "empty variable name" msgstr "" #: src/read.c:1478 #, c-format msgid "extraneous text after 'define' directive" msgstr "" #: src/read.c:1503 #, fuzzy, c-format msgid "missing 'endef', unterminated 'define'" msgstr "прапушчаны \"endef\", незавершаны \"define\"" #: src/read.c:1531 #, c-format msgid "extraneous text after 'endef' directive" msgstr "" #: src/read.c:1603 #, c-format msgid "extraneous text after '%s' directive" msgstr "" #: src/read.c:1604 #, fuzzy, c-format msgid "extraneous '%s'" msgstr "зьнешні \"%s\"" #: src/read.c:1632 #, c-format msgid "only one 'else' per conditional" msgstr "" #: src/read.c:1908 #, c-format msgid "Malformed target-specific variable definition" msgstr "" #: src/read.c:1968 #, c-format msgid "prerequisites cannot be defined in recipes" msgstr "" #: src/read.c:1986 #, c-format msgid "grouped targets must provide a recipe" msgstr "" #: src/read.c:2029 #, c-format msgid "mixed implicit and static pattern rules" msgstr "" #: src/read.c:2052 #, c-format msgid "mixed implicit and normal rules" msgstr "" #: src/read.c:2107 #, c-format msgid "target '%s' doesn't match the target pattern" msgstr "" #: src/read.c:2122 src/read.c:2168 #, c-format msgid "target file '%s' has both : and :: entries" msgstr "" #: src/read.c:2128 #, c-format msgid "target '%s' given more than once in the same rule" msgstr "" #: src/read.c:2138 #, c-format msgid "warning: overriding recipe for target '%s'" msgstr "" #: src/read.c:2141 #, c-format msgid "warning: ignoring old recipe for target '%s'" msgstr "" #: src/read.c:2254 #, c-format msgid "*** mixed implicit and normal rules: deprecated syntax" msgstr "" #: src/read.c:2271 #, c-format msgid "warning: overriding group membership for target '%s'" msgstr "" #: src/read.c:2636 #, c-format msgid "warning: NUL character seen; rest of line ignored" msgstr "" #: src/remake.c:226 #, fuzzy, c-format msgid "Nothing to be done for '%s'." msgstr "Ðічога Ð½Ñ Ð±Ñ‹Ð»Ð¾ зроблена Ð´Ð»Ñ \"%s\"." #: src/remake.c:227 #, fuzzy, c-format msgid "'%s' is up to date." msgstr "\"%s\" - ÑаÑтарÑл(а)." #: src/remake.c:323 #, fuzzy, c-format msgid "Pruning file '%s'.\n" msgstr "УÑÑ‘ ÑÑˆÑ Ð°Ð±Ð½Ð°ÑžÐ»Ñецца файл \"%s\".\n" #: src/remake.c:389 #, fuzzy, c-format msgid "%sNo rule to make target '%s', needed by '%s'%s" msgstr "%s ÐÑма правіла каб зрабіць мÑту \"%s\", патрÑбную Ð´Ð»Ñ \"%s\"%s" #: src/remake.c:399 #, fuzzy, c-format msgid "%sNo rule to make target '%s'%s" msgstr "%sÐÑма правіла каб зрабіць мÑту \"%s\"%s" #: src/remake.c:425 #, c-format msgid "Considering target file '%s'.\n" msgstr "" #: src/remake.c:432 #, c-format msgid "Recently tried and failed to update file '%s'.\n" msgstr "" #: src/remake.c:444 #, fuzzy, c-format msgid "File '%s' was considered already.\n" msgstr "Файл \"%s\" ужо быў разгледжаны.\n" #: src/remake.c:454 #, fuzzy, c-format msgid "Still updating file '%s'.\n" msgstr "УÑÑ‘ ÑÑˆÑ Ð°Ð±Ð½Ð°ÑžÐ»Ñецца файл \"%s\".\n" #: src/remake.c:457 #, fuzzy, c-format msgid "Finished updating file '%s'.\n" msgstr "Скончана абнаўленьне файла \"%s\".\n" #: src/remake.c:486 #, fuzzy, c-format msgid "File '%s' does not exist.\n" msgstr "Файл \"%s\" Ð½Ñ Ð¹Ñнуе.\n" #: src/remake.c:494 #, c-format msgid "" "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp" msgstr "" #: src/remake.c:507 src/remake.c:1039 #, c-format msgid "Found an implicit rule for '%s'.\n" msgstr "" #: src/remake.c:509 src/remake.c:1041 #, c-format msgid "No implicit rule found for '%s'.\n" msgstr "" #: src/remake.c:515 #, c-format msgid "Using default recipe for '%s'.\n" msgstr "" #: src/remake.c:549 src/remake.c:1088 #, c-format msgid "Circular %s <- %s dependency dropped." msgstr "" #: src/remake.c:674 #, fuzzy, c-format msgid "Finished prerequisites of target file '%s'.\n" msgstr "Скончана абнаўленьне файла \"%s\".\n" #: src/remake.c:680 #, c-format msgid "The prerequisites of '%s' are being made.\n" msgstr "" #: src/remake.c:694 #, fuzzy, c-format msgid "Giving up on target file '%s'.\n" msgstr "Скончана абнаўленьне файла \"%s\".\n" #: src/remake.c:699 #, c-format msgid "Target '%s' not remade because of errors." msgstr "" #: src/remake.c:751 #, c-format msgid "Prerequisite '%s' is order-only for target '%s'.\n" msgstr "" #: src/remake.c:756 #, fuzzy, c-format msgid "Prerequisite '%s' of target '%s' does not exist.\n" msgstr "Файл \"%s\" Ð½Ñ Ð¹Ñнуе.\n" #: src/remake.c:761 #, c-format msgid "Prerequisite '%s' is newer than target '%s'.\n" msgstr "" #: src/remake.c:764 #, c-format msgid "Prerequisite '%s' is older than target '%s'.\n" msgstr "" #: src/remake.c:782 #, c-format msgid "Target '%s' is double-colon and has no prerequisites.\n" msgstr "" #: src/remake.c:789 #, c-format msgid "No recipe for '%s' and no prerequisites actually changed.\n" msgstr "" #: src/remake.c:794 #, c-format msgid "Making '%s' due to always-make flag.\n" msgstr "" #: src/remake.c:802 #, fuzzy, c-format msgid "No need to remake target '%s'" msgstr "%sÐÑма правіла каб зрабіць мÑту \"%s\"%s" #: src/remake.c:804 #, c-format msgid "; using VPATH name '%s'" msgstr "" #: src/remake.c:824 #, fuzzy, c-format msgid "Must remake target '%s'.\n" msgstr "%sÐÑма правіла каб зрабіць мÑту \"%s\"%s" #: src/remake.c:830 #, c-format msgid " Ignoring VPATH name '%s'.\n" msgstr "" #: src/remake.c:839 #, c-format msgid "Recipe of '%s' is being run.\n" msgstr "" #: src/remake.c:846 #, fuzzy, c-format msgid "Failed to remake target file '%s'.\n" msgstr "%sÐÑма правіла каб зрабіць мÑту \"%s\"%s" #: src/remake.c:849 #, c-format msgid "Successfully remade target file '%s'.\n" msgstr "" #: src/remake.c:852 #, c-format msgid "Target file '%s' needs to be remade under -q.\n" msgstr "" #: src/remake.c:1047 #, fuzzy, c-format msgid "Using default commands for '%s'.\n" msgstr "ÐевÑдомы ўбудаваны загад \"%s\".\n" #: src/remake.c:1422 #, fuzzy, c-format msgid "Warning: File '%s' has modification time %s s in the future" msgstr "Увага! Файл \"%s\" мае Ñ‡Ð°Ñ Ð·ÑŒÐ¼ÑÐ½ÐµÐ½ÑŒÐ½Ñ %.2g Ñ, Ñкі ÑˆÑ‡Ñ Ð½Ðµ надышоў." #: src/remake.c:1662 #, c-format msgid ".LIBPATTERNS element '%s' is not a pattern" msgstr "" #: src/remote-cstms.c:122 #, c-format msgid "Customs won't export: %s\n" msgstr "" #: src/rule.c:289 #, c-format msgid "warning: ignoring prerequisites on suffix rule definition" msgstr "" #: src/rule.c:530 msgid "" "\n" "# Implicit Rules" msgstr "" #: src/rule.c:545 msgid "" "\n" "# No implicit rules." msgstr "" #: src/rule.c:548 #, c-format msgid "" "\n" "# %u implicit rules, %u (%.1f%%) terminal." msgstr "" #: src/rule.c:557 #, c-format msgid "BUG: num_pattern_rules is wrong! %u != %u" msgstr "" #: src/signame.c:84 msgid "unknown signal" msgstr "невÑдомы Ñыгнал" #: src/signame.c:92 msgid "Hangup" msgstr "" #: src/signame.c:95 msgid "Interrupt" msgstr "" #: src/signame.c:98 msgid "Quit" msgstr "" #: src/signame.c:101 msgid "Illegal Instruction" msgstr "ÐÐµÐ´Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ñ–Ð½ÑтрукцыÑ" #: src/signame.c:104 msgid "Trace/breakpoint trap" msgstr "" #: src/signame.c:109 msgid "Aborted" msgstr "" #: src/signame.c:112 msgid "IOT trap" msgstr "" #: src/signame.c:115 msgid "EMT trap" msgstr "" #: src/signame.c:118 msgid "Floating point exception" msgstr "" #: src/signame.c:121 msgid "Killed" msgstr "Забіты" #: src/signame.c:124 msgid "Bus error" msgstr "Памылка шыны" #: src/signame.c:127 msgid "Segmentation fault" msgstr "" #: src/signame.c:130 msgid "Bad system call" msgstr "ДрÑнны ÑÑ‹ÑÑ‚Ñмны выклік" #: src/signame.c:133 msgid "Broken pipe" msgstr "Зламаны трубаправод" #: src/signame.c:136 msgid "Alarm clock" msgstr "" #: src/signame.c:139 msgid "Terminated" msgstr "Завершаны" #: src/signame.c:142 msgid "User defined signal 1" msgstr "" #: src/signame.c:145 msgid "User defined signal 2" msgstr "" #: src/signame.c:150 src/signame.c:153 msgid "Child exited" msgstr "" #: src/signame.c:156 msgid "Power failure" msgstr "" #: src/signame.c:159 msgid "Stopped" msgstr "Спынен" #: src/signame.c:162 msgid "Stopped (tty input)" msgstr "Спынен (tty увод)" #: src/signame.c:165 msgid "Stopped (tty output)" msgstr "Спынен (вывад на tty)" #: src/signame.c:168 msgid "Stopped (signal)" msgstr "Спынена (Ñыгнал)" #: src/signame.c:171 msgid "CPU time limit exceeded" msgstr "" #: src/signame.c:174 msgid "File size limit exceeded" msgstr "" #: src/signame.c:177 msgid "Virtual timer expired" msgstr "" #: src/signame.c:180 msgid "Profiling timer expired" msgstr "" #: src/signame.c:186 msgid "Window changed" msgstr "Ðкно зьменена" #: src/signame.c:189 msgid "Continued" msgstr "" #: src/signame.c:192 msgid "Urgent I/O condition" msgstr "" #: src/signame.c:199 src/signame.c:208 msgid "I/O possible" msgstr "магчым У/Ð’" #: src/signame.c:202 msgid "SIGWIND" msgstr "" #: src/signame.c:205 msgid "SIGPHONE" msgstr "" #: src/signame.c:211 msgid "Resource lost" msgstr "" #: src/signame.c:214 msgid "Danger signal" msgstr "Сыгнал пагрозы" #: src/signame.c:217 msgid "Information request" msgstr "Запыт аб зьвеÑтках" #: src/signame.c:220 msgid "Floating point co-processor not available" msgstr "" #: src/strcache.c:274 #, c-format msgid "" "\n" "%s No strcache buffers\n" msgstr "" #: src/strcache.c:304 #, c-format msgid "" "\n" "%s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu " "B\n" msgstr "" #: src/strcache.c:308 #, c-format msgid "" "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B\n" msgstr "" #: src/strcache.c:319 #, c-format msgid "%s other used: total = %lu B / count = %lu / avg = %lu B\n" msgstr "" #: src/strcache.c:322 #, c-format msgid "" "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n" msgstr "" #: src/strcache.c:326 #, c-format msgid "" "\n" "%s strcache performance: lookups = %lu / hit rate = %lu%%\n" msgstr "" #: src/strcache.c:328 msgid "" "# hash-table stats:\n" "# " msgstr "" #: src/variable.c:1653 msgid "automatic" msgstr "аўтаматычна" #: src/variable.c:1656 msgid "default" msgstr "дапомны" #: src/variable.c:1659 msgid "environment" msgstr "аÑÑродзьдзе" #: src/variable.c:1662 msgid "makefile" msgstr "make-файл" #: src/variable.c:1665 msgid "environment under -e" msgstr "" #: src/variable.c:1668 msgid "command line" msgstr "загадны радок" #: src/variable.c:1671 #, fuzzy msgid "'override' directive" msgstr "дырÑктыва \"override\"" #: src/variable.c:1682 #, fuzzy, c-format msgid " (from '%s', line %lu)" msgstr " (з \"%s\", радок %lu)" #: src/variable.c:1745 msgid "# variable set hash-table stats:\n" msgstr "" #: src/variable.c:1756 msgid "" "\n" "# Variables\n" msgstr "" "\n" "# ПераменныÑ\n" #: src/variable.c:1760 msgid "" "\n" "# Pattern-specific Variable Values" msgstr "" #: src/variable.c:1774 msgid "" "\n" "# No pattern-specific variable values." msgstr "" #: src/variable.c:1776 #, c-format msgid "" "\n" "# %u pattern-specific variable values" msgstr "" #: src/variable.h:229 #, fuzzy, c-format msgid "warning: undefined variable '%.*s'" msgstr "Увага! ÐÑÐ²Ñ‹Ð·Ð½Ð°Ñ‡Ð°Ð½Ð°Ñ Ð¿ÐµÑ€Ð°Ð¼ÐµÐ½Ð½Ð°Ñ \"%.*s\"" #: src/vmsfunctions.c:91 #, c-format msgid "sys$search() failed with %d\n" msgstr "" #: src/vmsjobs.c:244 #, c-format msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n" msgstr "" #: src/vmsjobs.c:681 #, c-format msgid "BUILTIN CD %s\n" msgstr "" #: src/vmsjobs.c:1224 #, c-format msgid "DCL: %s\n" msgstr "" #: src/vmsjobs.c:1284 #, fuzzy, c-format msgid "Append output to %s\n" msgstr "Перанакіраваны вывад у %s\n" #: src/vmsjobs.c:1309 #, c-format msgid "Append %.*s and cleanup\n" msgstr "" #: src/vmsjobs.c:1322 #, c-format msgid "Executing %s instead\n" msgstr "" #: src/vpath.c:603 msgid "" "\n" "# VPATH Search Paths\n" msgstr "" #: src/vpath.c:620 #, fuzzy msgid "# No 'vpath' search paths." msgstr " (пошук шлÑху)" #: src/vpath.c:622 #, c-format msgid "" "\n" "# %u 'vpath' search paths.\n" msgstr "" #: src/vpath.c:625 msgid "" "\n" "# No general ('VPATH' variable) search path." msgstr "" #: src/vpath.c:631 msgid "" "\n" "# General ('VPATH' variable) search path:\n" "# " msgstr "" #: src/w32/w32os.c:44 #, c-format msgid "Jobserver slots limited to %d\n" msgstr "" #: src/w32/w32os.c:60 #, c-format msgid "creating jobserver semaphore: (Error %ld: %s)" msgstr "" #: src/w32/w32os.c:79 #, c-format msgid "" "internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)" msgstr "" #: src/w32/w32os.c:82 #, c-format msgid "Jobserver client (semaphore %s)\n" msgstr "" #: src/w32/w32os.c:123 #, c-format msgid "release jobserver semaphore: (Error %ld: %s)" msgstr "" #: src/w32/w32os.c:194 #, 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 "%s: Command not found" #~ msgstr "%s: загад не адшуканы" #~ msgid "%s is suspending for 30 seconds..." #~ msgstr "%s Ñпынена на 30 ÑÑкундаў..." #~ msgid "Do not specify -j or --jobs if sh.exe is not available." #~ msgstr "Ðе задавайце -j ці --jobs, калі sh.exe недаÑтупны." #~ 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" #~ "%sPARTICULAR PURPOSE.\n" #~ msgstr "" #~ "%s ГÑта вольнае праграмнае забеÑьпÑчÑньне; глÑдзіце зыходны код длÑ\n" #~ "%sÐ¿Ð°Ð³Ð°Ð´Ð½ÐµÐ½ÑŒÐ½Ñ Ð°Ð± раÑпаўÑюджваньні. ÐÑ Ð¹Ñнуе ÐІЯКÐЕ гарантыі, нават аб\n" #~ "%sмагчымаÑьці выкарыÑÑ‚Ð½ÑŒÐ½Ñ Ð·ÑŒ Ñкой небудзь мÑтай.\n" #~ msgid "Unknown error %d" #~ msgstr "ÐевÑÐ´Ð¾Ð¼Ð°Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ° %d" #~ msgid "virtual memory exhausted" #~ msgstr "Ð²Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð°Ñ Ð¿Ð°Ð¼Ñць вычарпана" #~ msgid "invalid `override' directive" #~ msgstr "нерÑчаіÑÐ½Ð°Ñ Ð´Ñ‹Ñ€Ñктыва \"override\"" #~ msgid "no file name for `%sinclude'" #~ msgstr "нÑма назвы файла Ð´Ð»Ñ \"%sinclude\"" #~ msgid "Warning: File `%s' has modification time in the future" #~ msgstr "Увага! Файл \"%s\" мае Ñ‡Ð°Ñ Ð·ÑŒÐ¼ÑненьнÑ, Ñкі ÑˆÑ‡Ñ Ð½Ðµ надышоў." #~ msgid " terminal." #~ msgstr " Ñ‚Ñрмінал." #~ msgid "" #~ "\n" #~ "# No files." #~ msgstr "" #~ "\n" #~ "# ÐÑма файлаў." #~ msgid "DIRECTORY" #~ msgstr "ТЭЧКÐ" #~ msgid "FILE" #~ msgstr "ФÐЙЛ" #~ msgid "Read FILE as a makefile" #~ msgstr "Чытае ФÐЙЛ Ñк make-файл" #~ msgid "Entering" #~ msgstr "Уваход у" #~ msgid "Leaving" #~ msgstr "выхад з" #~ msgid "# No variables." #~ msgstr "# ÐÑма пераменных." make-4.3/po/fi.gmo0000644000175000017500000007630313611136532010750 00000000000000Þ•D< ±\ !&>eu!~- Î à-/'E#m‘ ¨¶"Ô÷ L4PMÒ@ oaoÑPAF’JÙ€$ 9¥ Cß f#!_Š!;ê!O&"Jv"}Á"~?#>¾#Cý#FA$Iˆ$;Ò$ %%"5% X%e% t%‚%™% ²%½%Ø% ê%ô%& &%&C&7L&„&“&£&»&Ô&ì&'($'M'&b'*‰'´'#É'#í')(-;(i($‚(9§(á(3)4)P)k){)!’)$´)=Ù)* *"'*J*;g*!£*Å*+á* +'+,A+n+%Œ+,²+-ß+ ,&.,U,t,”,.´,ã,ó,-&- E-%f-Œ-¬-À-1Õ- ..#*.#N.Lr.6¿.ö.>/ Q/+[/*‡/²/ Ê/Ô/1Ü/20 A0"M0*p0›0ª0 º0Û0 ÷0 1 1%1 E1 R1%_1…1$¥1Ê1 é1ó1 2&2+@2l2!‰2 «2¸2 Á2Ï2Ø2ì23#"3F3"a3„3,3Ê3)è34!+4&M4t44¯4 ¶4Ã4Ì4%à455 -575Q50X5'‰53±5 å5+ñ56-96%g6-6'»6ã6ý6!7"7 @7*K7v7 “767 Ô7-â7-81>8p8ˆ8œ8¡8³8É8/ß8691F9-x9¦9"Æ9#é9 ::$:,:$?:&d:‹:¦:®:¿:Ó:&è:+;);; e;*p;›;#±;&Õ;ü;<4<!I< k<w<<!£<Å<;Û<=(&= O=1Y=‹=3§= Û= é=ö= >!>3> G>S>h>$x>(>'Æ>î>?8?W?n?†??6±?è?)@;0@l@&u@œ@¬@¾@Õ@î@1ñ@0#A1TA-†A1´A2æAB 9BFB UB.bB,‘B1¾B*ðBC6;C5rC,¨C"ÕC"øC3D)OD-yD&§DÎDÝD0÷D(E=HE1†E"¸EÛEïE ÿEÉ F×G#öGH )H&6H/]HH!¡H1ÃHõH%I#5IYI mI+{I?§I4çI9JGVJPžJxïJ=hKi¦KxL|‰LOMRVM©MM7NE…NnËNy:O?´OVôO{KPÇPˆGQDÐQMRCcRF§R:îR)S&8S&_S†SS²SÃS âSTT/TCT KT XTeT"uT˜T@¬TíTU!U6UQUnU ŠU&«UÒU%îU*V?V&XV(V&¨V1ÏVW%W5EW{W/›WËWèW X*X(=X.fXE•XÛXäX,ëX&Y??Y,Y%¬Y7ÒY Z +Z-LZ)zZ(¤Z-ÍZ.ûZ,*[%W["}[& [&Ç[Bî[41\9f\ \0¶\*ç\0])C]m]‡]=£]á] ð]#^)5^Y_^B¹^%ü^O"_r_+{_,§_$Ô_ù_ `.`3I` }`&‹`-²`à`ú`+a&Fama }aŠa)¥aÏa ïa"ýa+ b+Lb'xb b(©b#Òb#öb6c"Qc)tcžc³c ¼cÊcÓcæc>d;Ed#d&¥dÌd0èd(e+Bene,€e9­eçe%f-f9j xj5…j6»j;òj.kMk kkuk"”k·k=×k;l1Ql6ƒlºlIÖl" mCmVm_mgm2{m(®m,×m nn'n Gn:hn;£n9ßn o-$oRo4no1£o9Õo'p7p&Ppwp'•p'½p1åpqF4q{q@Œq ÍqBÛq&rGEr r ›r§r¹r+Àrìr ss's:@s={s=¹s÷s!tE8t~tšt·tÔt3ôt#(u)LuEvu¼u3Åuùuvv2vFvRIvMœvLêv;7w?sw9³w(íw x#x 3x.@x.ox=žx9Üx)y:@y={y5¹y*ïy(zGCz8‹z1Äz0öz'{;{<Z{!—{W¹{;|1M||œ| µ|"gBNšì?Jž¡œl ÷”A:}ˆ  ´{Ð8M‰¦/30• =þ`rk¯ nɺ|;ßòa+†é3ÿõ Åðh/ iÌUm¿ â˜ÍÚTô[’fBæ±6²»9y>e„®&Óó‡¢:&ç ™vÝÞ1‹Ô2“ý‘@5b¨Øå80Ÿ#)ü޾L›!)<ó.û¹ÒÆ=ÄÎ?%€©À¤~sã,àuî9!>ä^èÊPŠ–Ç7½F_dÙ…ñV¶$(*1CŒÛx·í—jÏESzƒ \ö§2GAïË¥o.4R¼Õ;Iúª­pDY-ZcÜÑ$7Á'W%ù øµ '(@-ÖëqXÂ]°È¸<6Kê, 5#Hát*£"wD‚CQ«4×O+¬ # %u 'vpath' search paths. # %u pattern-specific variable values # Directories # Files # Finished Make data base on %s # General ('VPATH' variable) search path: # # Implicit Rules # Make data base, printed on %s # No general ('VPATH' variable) search path. # No implicit rules. # No pattern-specific variable values. # Pattern-specific Variable Values # VPATH Search Paths # Variables # files hash-table stats: # Counted %d args in failed launch This program built for %s This program built for %s (%s) --debug[=FLAGS] Print various types of debugging information. --no-print-directory Turn off -w, even if it was turned on implicitly. --warn-undefined-variables Warn when an undefined variable is referenced. -B, --always-make Unconditionally make all targets. -C DIRECTORY, --directory=DIRECTORY Change to DIRECTORY before doing anything. -I DIRECTORY, --include-dir=DIRECTORY Search DIRECTORY for included makefiles. -L, --check-symlink-times Use the latest mtime between symlinks and target. -R, --no-builtin-variables Disable the built-in variable settings. -S, --no-keep-going, --stop Turns off -k. -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE Consider FILE to be infinitely new. -b, -m Ignored for compatibility. -d Print lots of debugging information. -e, --environment-overrides Environment variables override makefiles. -f FILE, --file=FILE, --makefile=FILE Read FILE as a makefile. -h, --help Print this message and exit. -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no arg. -k, --keep-going Keep going when some targets can't be made. -l [N], --load-average[=N], --max-load[=N] Don't start multiple jobs unless load is below N. -o FILE, --old-file=FILE, --assume-old=FILE Consider FILE to be very old and don't remake it. -p, --print-data-base Print make's internal database. -r, --no-builtin-rules Disable the built-in implicit rules. -t, --touch Touch targets instead of remaking them. -v, --version Print the version number of make and exit. -w, --print-directory Print the current directory. Date %s Ignoring VPATH name '%s'. uid = %d, gid = %d, mode = 0%o. (built-in): (core dumped) (don't care) (from '%s', line %lu) (from '%s', line %lu): (ignored) (name might be truncated) (no ~ expansion) (remote) (search path) files, impossibilities impossibilities in %lu directories. so far.# A default, MAKEFILES, or -include/sinclude makefile.# Also makes:# Builtin rule# Command line target.# Failed to be updated.# File does not exist.# File has been updated.# File has not been updated.# File is an intermediate prerequisite.# File is very old.# Implicit rule search has been done.# Implicit rule search has not been done.# Last modified %s # Modification time never checked.# Needs to be updated (-q is set).# Phony target (prerequisite of .PHONY).# Precious file (prerequisite of .PRECIOUS).# Successfully updated.# %s (device %d, inode [%d,%d,%d]): # %s (device %d, inode [%d,%d,%d]): could not be opened. # %s (device %ld, inode %ld): # %s (device %ld, inode %ld): could not be opened. # %s: could not be stat'd. # No 'vpath' search paths.# Not a target:# hash-table stats: # # variable set hash-table stats: $SHELL changed (was '%s', now '%s') %s (line %d) Bad shell context (!unixy && !batch_mode_shell) %s%s: %s%s: %s%s: Entering an unknown directory %s: Entering directory '%s' %s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p) %s: Leaving an unknown directory %s: Leaving directory '%s' %s: Timestamp out of range; substituting %s%s: illegal option -- %c %s: invalid option -- %c %s: option '%c%s' doesn't allow an argument %s: option '%s' is ambiguous %s: option '%s' requires an argument %s: option '--%s' doesn't allow an argument %s: option '-W %s' doesn't allow an argument %s: option '-W %s' is ambiguous %s: option requires an argument -- %c %s: target '%s' does not exist%s: unrecognized option '%c%s' %s: unrecognized option '--%s' %s: user %lu (real %lu), group %lu (real %lu) %sBuilt for %s %sBuilt for %s (%s) %s[%s: %s] Error %d%s%s[%u]: Entering an unknown directory %s[%u]: Entering directory '%s' %s[%u]: Leaving an unknown directory %s[%u]: Leaving directory '%s' '%s' is up to date.'override' directive*** Archive member '%s' may be bogus; not deleted*** Break. *** Deleting file '%s'*** Deleting intermediate file '%s'*** Waiting for unfinished jobs....*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp*** [%s] Archive member '%s' may be bogus; not deleted*** [%s] Deleting file '%s'-warning, you may have to re-enable CTRL-Y handling from DCL. . Stop. .DEFAULT_GOAL contains more than one target.LIBPATTERNS element '%s' is not a pattern; using VPATH name '%s'AbortedAccess violation: read operation at address 0x%p Access violation: write operation at address 0x%p Alarm clockAvoiding implicit rule recursion. BUG: num_pattern_rules is wrong! %u != %uBUILTIN CD %s Bad system callBatch file contents: @echo off Batch file contents:%s %s Broken pipeBus errorCPU time limit exceededCannot create a temporary file Child accessChild exitedCircular %s <- %s dependency dropped.Cleaning up temp batch file %s Cleaning up temporary batch file %s Considering target file '%s'. ContinuedCould not restore stderr Could not restore stdin Could not restore stdout Couldn't change back to original directory.CreatePipe() failed (e=%ld) Creating temporary batch file %s Current timeDCL: %s Danger signalEMT trapEmpty function nameExecuting %s instead Failed to remake makefile '%s'.Failed to remake target file '%s'. File '%s' does not exist. File '%s' was considered already. File size limit exceededFinished prerequisites of target file '%s'. Finished updating file '%s'. Floating point co-processor not availableFloating point exceptionFound an implicit rule for '%s'. Found prerequisite '%s' as VPATH '%s' Function name too long: %sGiving up on target file '%s'. HangupI/O possibleIOT trapIllegal InstructionIncluded makefile '%s' was not found.Information requestInitialized accessInterruptInvalid function name: %sKilledLooking for a rule with intermediate file '%s'. Looking for an implicit rule for '%s'. Looking for archive-member implicit rule for '%s'. Make accessMakefile '%s' might loop; not remaking it. Makefile '%s' was not foundMakefile from standard input specified twice.Making '%s' due to always-make flag. Malformed target-specific variable definitionMember '%s'%s: %ld bytes at %ld (%ld). Must remake target '%s'. NoNo implicit rule found for '%s'. No need to remake target '%s'No targetsNo targets specified and no makefile foundNothing to be done for '%s'.Options: Parallel jobs (-j) are not supported on this platform.Power failurePrerequisite '%s' is newer than target '%s'. Prerequisite '%s' is older than target '%s'. Prerequisite '%s' of target '%s' does not exist. Profiling timer expiredPruning file '%s'. QuitRe-executing[%u]:Reading makefile '%s'Reading makefiles... Recently tried and failed to update file '%s'. Recursive variable '%s' references itself (eventually)Rejecting impossible implicit prerequisite '%s'. Rejecting impossible rule prerequisite '%s'. Removing intermediate files... Report bugs to Resetting to single job (-j1) mode.Resource lostSIGPHONESIGWINDSegmentation faultSkipping UTF-8 BOM in makefile '%s' Skipping UTF-8 BOM in makefile buffer Still updating file '%s'. StoppedStopped (signal)Stopped (tty input)Stopped (tty output)Successfully remade target file '%s'. Symbolic links not supported: disabling -L.Target '%s' not remade because of errors.TerminatedThe prerequisites of '%s' are being made. Trace/breakpoint trapTrying implicit prerequisite '%s'. Trying pattern rule with stem '%.*s'. Trying rule prerequisite '%s'. Updating makefiles.... Urgent I/O conditionUsage: %s [options] [target] ... User accessUser defined signal 1User defined signal 2Using default commands for '%s'. Virtual timer expiredWarning: File '%s' has modification time %s s in the futureWindow changedattempt to use unsupported feature: '%s'automaticbut '%s' is now considered the same file as '%s'.cannot enforce load limit: cannot enforce load limits on this operating systemclose: %s: %scommand linecreating jobs pipedefaultempty string invalid as file nameempty variable nameenvironmentenvironment under -eextraneous '%s'extraneous text after '%s' directiveextraneous text after 'define' directiveextraneous text after 'endef' directivefile: missing filenamefile: too many argumentsfirst argument to 'word' function must be greater than 0fopen (temporary file)fwrite (temporary file)guile: Expanding '%s' init jobserver pipeinsufficient number of arguments (%d) to function '%s'invalid syntax in conditionallbr$ini_control() failed with status = %dlbr$set_module() failed to extract module info, status = %dmakefilemissing 'endef', unterminated 'define'missing 'endif'missing separatormissing target patternmultiple target patternsnono more file handles: could not duplicate stderr no more file handles: could not duplicate stdin no more file handles: could not duplicate stdout non-numeric first argument to 'word' functionnon-numeric first argument to 'wordlist' functionnon-numeric second argument to 'wordlist' functiononly one 'else' per conditionalopen: %s: %sread jobs piperead: %s: %sspawnvpe: environment space might be exhaustedtarget '%s' doesn't match the target patterntarget '%s' given more than once in the same ruletarget file '%s' has both : and :: entriestarget pattern contains no '%%'the '%s%s' option requires a non-empty string argumentthe '-%c' option requires a positive integer argumenttouch archive member is not available on VMStouch: '%s' is not a valid archivetouch: Archive '%s' does not existtouch: Bad return code from ar_member_touch on '%s'touch: Member '%s' does not exist in '%s'unimplemented on this platform: function '%s'unknown debug level specification '%s'unknown signalunlink (temporary file): unterminated call to function '%s': missing '%c'unterminated variable referencewarning: Clock skew detected. Your build may be incomplete.warning: NUL character seen; rest of line ignoredwarning: undefined variable '%.*s'write error: stdoutwrite jobserverwrite: %s: %sProject-Id-Version: make 4.2 Report-Msgid-Bugs-To: bug-make@gnu.org PO-Revision-Date: 2016-05-26 20:40+0300 Last-Translator: Lauri Nurmi Language-Team: Finnish Language: fi MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. X-Generator: Poedit 1.8.7 Plural-Forms: nplurals=2; plural=(n != 1); # %u â€vpathâ€-hakupolkua. # %u hahmokohtaista muuttuja-arvoa # Hakemistot # Tiedostot # Make-tietokanta saatu valmiiksi %s # Yleinen (â€VPATHâ€-muuttuja) hakupolku: # # Oletussäännöt # Make-tietokanta, tulostettu %s # Ei yleistä (â€VPATHâ€-muuttuja) hakupolkua. # Ei oletussääntöjä. # Ei hahmokohtaisia muuttuja-arvoja. # Hahmokohtaisia muuttujien arvoja # VPATH-hakupolut # Muuttujat # tilasto tiedostojen hajautustaulusta: # Laskettiin %d argumenttia epäonnistuneessa käynnistyksessä Tämä ohjelma on käännetty järjestelmälle %s. Tämä ohjelma on käännetty järjestelmälle %s (%s). --debug[=LIPUT] Näytä monenlaisia vianetsintätietoja. --no-print-directory Kumoa -w, vaikka se olisi käytössä oletuksena. --warn-undefined-variables Varoita viittauksista määrittelemättömiin muuttujiin. -B, --always-make Tuota kaikki kohteet ehdoitta. -C HAKEMISTO, --directory=HAKEMISTO Siirry HAKEMISTOon ennen jatkamista. -I HAKEMISTO, --include-dir=HAKEMISTO Etsi sisällytettäviä makefile:ja HAKEMISTOsta. -L, --check-symlink-times Käytä uusinta mtime-aikaa symlinkkien ja kohteen välillä. -R, --no-builtin-variables Poista käytöstä sisäiset muuttuja-asetukset. -S, --no-keep-going, --stop Kumoaa valitsimen -k. -W TIEDOSTO, --what-if=TIEDOSTO, --new-file=TIEDOSTO, --assume-new=TIEDOSTO Käsittele TIEDOSTO aina uutena. -b, -m Yhteensopivuuden vuoksi jätetään huomiotta. -d Näytä runsaasti vianetsintätietoja. -e, --environment-overrides Ympäristömuuttujat kumoavat makefile-tiedostot. -f TIEDOSTO, --file=TIEDOSTO, --makefile=TIEDOSTO Käytä TIEDOSTOa makefile-tiedostona. -h, --help Näytä tämä viesti ja poistu. -j [N], --jobs[=N] Salli N yhtäaikaista työtä; ilman N:ää ääretön. -k, --keep-going Jatka vaikka joidenkin kohteiden tuottaminen epäonnistuisi. -l [N], --load-average[=N], --max-load[=N] Älä aloita useita töitä ellei kuormitus alle N. -o TIEDOSTO, --old-file=TIEDOSTO, --assume-old=TIEDOSTO Käsittele TIEDOSTO vanhana, älä tuota sitä. -p, --print-data-base Näytä make:in sisäinen tietokanta. -r, --no-builtin-rules Poista käytöstä sisäiset oletussäännöt. -t, --touch Kosketa kohteita tuottamisen sijaan. -v, --version Näytä make:in versionumero ja poistu. -w, --print-directory Näytä nykyinen hakemisto. Päiväys %s Ei huomioida VPATH-nimeä â€%sâ€. uid = %d, gid = %d, oikeudet = 0%o. (sisäänrakennettu): (muisti vedostettu) (ei välitetä) (tiedosto â€%sâ€, rivi %lu) (tiedosto â€%sâ€, rivi %lu): (ei huomioida) (nimi voi olla typistynyt) (ei ~-laajennusta) (etä) (hakupolku) tiedostoa, mahdottomuutta mahdottomuutta %lu hakemistossa. tähän mennessä.# Oletus-, MAKEFILES- tai -include/sinclude -makefile-tiedosto.# Tuotetaan myös:# Sisäänrakennettu sääntö# Komentorivikohde.# Päivitys epäonnistui.# Tiedosto ei ole olemassa.# Tiedosto on päivitetty.# Tiedostoa ei ole päivitetty.# Tiedosto on välitason ennakkoehto.# Tiedosto on hyvin vanha.# Oletussääntöhaku on suoritettu.# Oletussääntöhakua ei ole suoritettu.# Viimeksi muutettu %s # Muutosaikaa ei koskaan tarkastettu.# Vaatii päivitystä (-q on asetettu).# Valekohde (ennakkoehto .PHONY:lle).# Arvokas tiedosto (ennakkoehto .PRECIOUS:ille).# Päivitetty onnistuneesti.# %s (laite %d, i-solmu [%d,%d,%d]): # %s (laite %d, i-solmu [%d,%d,%d]): ei voitu avata. # %s (laite %ld, i-solmu %ld): # %s (laite %ld, i-solmu %ld): ei voitu avata. # %s: tilaa ei voitu lukea. # Ei â€vpathâ€-hakupolkuja.# Ei kohde:# tilasto tiedostojen hajautustaulusta: # # muuttujajoukon hajautustaulutilastot: $SHELL muuttunut (oli â€%sâ€, nyt â€%sâ€) %s (rivi %d) Väärä kuoriympäristö (!unixy && !batch_mode_shell) %s%s: %s%s: %s%s: Siirrytään tuntemattomaan hakemistoon %s: Siirrytään hakemistoon â€%s†%s: Keskeytys/poikkeus siepattu (koodi = 0x%lx, osoite = 0x%p) %s: Poistutaan tuntemattomasta hakemistosta %s: Poistutaan hakemistosta â€%s†%s: Aikaleima ei ole sallitulla välillä, korvataan %s%s: virheellinen valitsin -- %c %s: virheellinen valitsin -- %c %s: valitsin â€%c%s†ei salli argumenttia %s: valitsin â€%s†on moniselitteinen %s: valitsin â€%s†vaatii argumentin %s: valitsin â€--%s†ei salli argumenttia %s: valitsin â€-W %s†ei salli argumenttia %s: valitsin â€-W %s†on moniselitteinen %s: valitsin vaatii argumentin -- %c %s: kohde â€%s†ei ole olemassa%s: tunnistamaton valitsin â€%c%s†%s: tunnistamaton valitsin â€--%s†%s: käyttäjä %lu (todellinen %lu), ryhmä %lu (todellinen %lu) %sTämä ohjelma on käännetty järjestelmälle %s %sTämä ohjelma on käännetty järjestelmälle %s (%s) %s[%s: %s] Virhe %d%s%s[%u]: Siirrytään tuntemattomaan hakemistoon %s[%u]: Siirrytään hakemistoon â€%s†%s[%u]: Poistutaan tuntemattomasta hakemistosta %s[%u]: Poistutaan hakemistosta â€%s†â€%s†on ajan tasalla.â€overrideâ€-toimintaohje*** Arkistojäsen â€%s†voi olla viallinen – ei poisteta*** Katkaisu. *** Poistetaan tiedosto â€%sâ€*** Poistetaan aputiedosto â€%sâ€*** Odotetaan keskeneräisiä töitä....*** Varoitus: .LOW_RESOLUTION_TIME-tiedostolla â€%s†on korkearesoluutioinen aikaleima*** [%s] Arkistojäsen â€%s†voi olla viallinen – ei poisteta*** [%s] Poistetaan tiedosto â€%sâ€-varoitus, Ctrl-Y-käsittely on ehkä otettava uudelleen käyttöön DCL:stä. . Seis. .DEFAULT_GOAL sisältää yli yhden kohteen.LIBPATTERNS-elementti â€%s†ei ole hahmo; käytetään VPATH-nimeä â€%sâ€KeskeytettySuojausvirhe: lukuoperaatio osoitteeseen 0x%p Suojausvirhe: kirjoitusoperaatio osoitteeseen 0x%p HerätyskelloVältetään oletussääntörekursio. VIKA: num_pattern_rules on väärä! %u != %uSISÄÄNRAKENNETTU CD %s Virheellinen järjestelmäkutsuKomentojonotiedoston sisältö: @echo off Komentojonotiedoston sisältö:%s %s Katkennut putkiVäylävirheSuoritinaikaraja ylittynytVäliaikaistiedoston luominen ei onnistu Lapsiprosessin käyttöoikeudetLapsi lopettiKehäriippuvuus %s <- %s hylätty.Siivotaan väliaikainen komentotiedosto %s Siivotaan väliaikainen komentotiedosto %s Tarkastellaan kohdetiedostoa â€%sâ€. JatkettuVakiovirhetulostetta ei voitu palauttaa Vakiosyötettä ei voitu palauttaa Vakiotulostetta ei voitu palauttaa Ei voitu siirtyä takaisin alkuperäiseen hakemistoon.CreatePipe() epäonnistui (v=%ld) Luodaan väliaikainen komentotiedosto %s Tämänhetkinen aikaDCL: %s VaarasignaaliEMT-ansaTyhjä funktionimiKäynnistetään sen sijaan %s Makefile-tiedoston â€%s†uudelleentuottaminen epäonnistui.Kohdetiedoston â€%s†uudelleentuottaminen epäonnistui. Tiedosto â€%s†ei ole olemassa. Tiedostoa â€%s†on jo tarkasteltu. Tiedoston kokoraja ylitettyKohdetiedoston â€%s†ennakkoehdot täytetty. Tiedoston â€%s†päivitys valmistui. Käytettävissä ei ole liukulukusuoritintaLiukulukupoikkeusKohteelle â€%s†löytyi oletussääntö. Löydettiin ennakkoehto â€%sâ€, joka on VPATH â€%s†Funktionimi on liian pitkä: %sLuovutaan kohdetiedostosta â€%sâ€. LinjankatkaisuI/O mahdollistaIOT-ansaVirheellinen käskySisällytettyä makefile-tiedostoa â€%s†ei löytynyt.TietopyyntöAlkuperäiset käyttöoikeudetKeskeytysVirheellinen funktionimi: %sTapettuEtsitään sääntöä aputiedostolla â€%sâ€. Etsitään oletussääntöä kohteelle â€%sâ€. Etsitään arkistojäsenen oletussääntöä kohteelle â€%sâ€. Make-prosessin käyttöoikeudetEi uudelleentuoteta makefile-tiedostoa â€%s†– vältetään mahdollinen ikuinen silmukka. Makefile-tiedostoa â€%s†ei löytynytMakefile-tiedosto vakiosyötteestä määritelty kahdesti.Tuotetaan â€%sâ€, koska always-make-lippu on käytössä. Väärin muotoiltu kohdekohtainen muuttujamäärittelyJäsen â€%sâ€%s: %ld tavua kohdassa %ld (%ld). Kohde â€%s†on tuotettava uudelleen. EiKohteelle â€%s†ei löytynyt oletussääntöä. Ei tarvetta uudelleentuottaa kohdetta â€%sâ€Ei kohteitaKohteita ei ole annettu, eikä makefileä löytynytKohteelle â€%s†ei tarvitse tehdä mitään.Valitsimet: Rinnakkaiset työt (-j) eivät ole tuettuja tällä alustalla.SähkökatkoEnnakkoehto â€%s†on uudempi kuin kohde â€%sâ€. Ennakkoehto â€%s†on vanhempi kuin kohde â€%sâ€. Kohteen â€%2$s†ennakkoehto â€%1$s†ei ole olemassa. Profilointiajastin vanhentunutKarsitaan tiedosto â€%sâ€. LopetettuUudelleenkäynnistetään[%u]:Luetaan makefile-tiedosto â€%sâ€Luetaan makefile-tiedostoja... Tiedoston â€%s†päivitysyritys epäonnistui äskettäin. Rekursiivinen muuttuja â€%s†viittaa (lopulta) itseensäHylätään mahdoton oletusennakkoehto â€%sâ€. Hylätään mahdoton säännön ennakkoehto â€%sâ€. Poistetaan aputiedostot... Ilmoita ohjelmistovioista (englanniksi) osoitteeseen . Palataan yhden työn (-j1) tilaan.Resurssi menetettySIGPHONESIGWINDMuistialueen ylitysOhitetaan UTF-8-BOM makefile-tiedostossa â€%s†Ohitetaan UTF-8-BOM makefile-puskurissa Päivitetään edelleen tiedostoa â€%sâ€. PysäytettyPysäytetty (signaali)Pysäytetty (päätteen syöte)Pysäytetty (päätteen tuloste)Kohdetiedosto â€%s†uudelleentuotettiin onnistuneesti. Ei tukea symbolisille linkeille: poistetaan -L käytöstä.Kohdetta â€%s†ei tuotettu uudelleen virheiden vuoksi.PäätettyKohteen â€%s†ennakkoehtoja täytetään. Jäljitys/katkaisupisteansaYritetään käyttää oletusennakkoehtoa â€%sâ€. Kokeillaan hahmosääntöä rungolla â€%.*sâ€. Yritetään käyttää säännön ennakkoehtoa â€%sâ€. Päivitetään makefile-tiedostoja.... Kiireellinen I/O-tilanneKäyttö: %s [valitsimet] [kohde] ... Käyttäjän käyttöoikeudetKäyttäjän määrittelemä signaali 1Käyttäjän määrittelemä signaali 2Käytetään oletuskomentoja kohteelle â€%sâ€. Virtuaaliajastin vanhentunutVaroitus: Tiedoston â€%s†muutosaika on %s sekuntia tulevaisuudessaIkkuna vaihtunutyritettiin käyttää ominaisuutta, jolle ei ole tukea: â€%sâ€automaattinenmutta â€%sâ€:n katsotaan nyt olevan sama tiedosto kuin â€%sâ€.kuormarajaa ei voi ottaa käyttöön: kuormarajoja ei voi ottaa käyttöön tässä käyttöjärjestelmässäclose: %s: %skomentoriviluodaan työputkioletustyhjä merkkijono ei kelpaa tiedostonimeksityhjä muuttujan nimiympäristö-e:n alainen ympäristöylimääräinen â€%sâ€ylimääräistä tekstiä â€%sâ€-toimintaohjeen jälkeenylimääräistä tekstiä â€endefâ€-toimintaohjeen jälkeenylimääräistä tekstiä â€endefâ€-toimintaohjeen jälkeentiedosto: tiedostonimi puuttuutiedosto: liian monta argumenttiaâ€wordâ€-funktion ensimmäisen argumentin on oltava suurempi kuin 0fopen (väliaikaistiedosto)fwrite (väliaikaistiedosto)guile: Lavennetaan â€%s†alustetaan työpalvelimen putkiliian vähän (%d) argumentteja funktiolle â€%sâ€virheellinen syntaksi ehtolauseessalbr$ini_control() epäonnistui, tila = %dlbr$set_module() epäonnistui moduulitietojen noutamisessa, tila = %dmakefilepuuttuva â€endefâ€, päättämätön â€defineâ€puuttuva â€endifâ€puuttuva erotinpuuttuva kohdehahmouseita kohdehahmojaeitiedostokahvoja ei ole enempää: vakiovirhetulosteen kahdentaminen ei onnistunut tiedostokahvoja ei ole enempää: vakiosyötteen kahdentaminen ei onnistunut tiedostokahvoja ei ole enempää: vakiotulosteen kahdentaminen epäonnistui ei-numeerinen ensimmäinen argumentti â€wordâ€-funktiolleei-numeerinen ensimmäinen argumentti â€wordlistâ€-funktiolleei-numeerinen toinen argumentti â€wordlistâ€-funktiollevain yksi â€else†ehtolausetta kohdenopen: %s: %styöputken lukuread: %s: %sspawnvpe: ympäristötila saattaa olla lopussakohde â€%s†ei täsmää kohdehahmon kanssakohde â€%s†annettu yli yhden kerran samassa säännössäkohdetiedostolla â€%s†on sekä :- että ::-merkinnätkohdehahmo ei sisällä â€%%â€-merkkiävalitsin â€%s%s†vaatii ei-tyhjän merkkijonoargumentinvalitsin â€-%c†vaatii positiivisen kokonaislukuargumentinarkistojäsenten kosketus ei ole mahdollista VMS:ssätouch: â€%s†ei ole kelvollinen arkistotouch: Arkistoa â€%s†ei ole olemassatouch: ar_member_touch antoi virheellisen paluuarvon kohteesta â€%sâ€touch: Arkistossa â€%1$s†ei ole jäsentä â€%2$sâ€ei toteutettu tällä alustalla: funktio â€%sâ€tuntematon vianetsintätason määritys â€%sâ€tuntematon signaaliunlink (väliaikaistiedosto): päättämätön kutsu funktioon â€%sâ€: puuttuva â€%câ€päättämätön muuttujaviittausvaroitus: Havaittu väärä kellonaika. Käännösversio saattaa olla epätäydellinen.varoitus: havaittu NUL-merkki, rivin loppuosaa ei huomioidavaroitus: määrittelemätön muuttuja â€%.*sâ€kirjoitusvirhe: vakiotulostetyöpalvelimen kirjoituswrite: %s: %smake-4.3/po/hr.po0000644000175000017500000020506413611136531010614 00000000000000# Translation of CNU make messages to Croatian. # Copyright © 2016 Free Software Foundation, Inc. # This file is distributed under the same license as the make package. # # Hrvoje Niksic , 2002. # Tomislav Krznar , 2012. # Božidar Putanec , 2016, 2018, 2019, 2020. msgid "" msgstr "" "Project-Id-Version: make 4.2.93\n" "Report-Msgid-Bugs-To: bug-make@gnu.org\n" "POT-Creation-Date: 2020-01-19 15:34-0500\n" "PO-Revision-Date: 2020-01-06 11:39-0800\n" "Last-Translator: Božidar Putanec \n" "Language-Team: Croatian \n" "Language: hr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\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: Lokalize 19.04.3\n" #: src/ar.c:46 #, c-format msgid "attempt to use unsupported feature: '%s'" msgstr "pokuÅ¡aj upotrebe nepodržane znaÄajke „%s“" #: src/ar.c:123 #, c-format msgid "touch archive member is not available on VMS" msgstr "" "u VMS sustavu nije moguće „touch“ (promijeniti vrijeme modifikacije)\n" "Älana arhive" #: src/ar.c:147 #, c-format msgid "touch: Archive '%s' does not exist" msgstr "touch: arhiva „%s“ ne postoji" #: src/ar.c:150 #, c-format msgid "touch: '%s' is not a valid archive" msgstr "touch: „%s“ nije valjana arhiva" #: src/ar.c:157 #, c-format msgid "touch: Member '%s' does not exist in '%s'" msgstr "touch: Älan arhive „%s“ ne postoji u arhivi „%s“" #: src/ar.c:164 #, c-format msgid "touch: Bad return code from ar_member_touch on '%s'" msgstr "touch: ar_member_touch() na „%s“ nije uspjela" #: src/arscan.c:130 #, c-format msgid "lbr$set_module() failed to extract module info, status = %d" msgstr "lbr$set_module() nije uspjela izvući obavijesti o modulu, status = %d" #: src/arscan.c:236 #, c-format msgid "lbr$ini_control() failed with status = %d" msgstr "lbr$ini_control() nije uspjela, status = %d" #: src/arscan.c:261 #, c-format msgid "unable to open library '%s' to lookup member status %d" msgstr "nemoguće je otvoriti biblioteku „%s“ radi uvida u status Älana %d" #: src/arscan.c:944 #, c-format msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n" msgstr "ÄŒlan arhive „%s“%s: %ld bajtova na adresi %ld (%ld).\n" #: src/arscan.c:945 msgid " (name might be truncated)" msgstr " (može biti da je skraćeno)" #: src/arscan.c:947 #, c-format msgid " Date %s" msgstr " Datum %s" #: src/arscan.c:948 #, c-format msgid " uid = %d, gid = %d, mode = 0%o.\n" msgstr " uid = %d, gid = %d, mÈd = 0%o.\n" #: src/commands.c:403 #, c-format msgid "Recipe has too many lines (%ud)" msgstr "Recept ima previÅ¡e redaka (%ud)" #: src/commands.c:504 msgid "*** Break.\n" msgstr "*** Prekid.\n" #: src/commands.c:628 #, c-format msgid "*** [%s] Archive member '%s' may be bogus; not deleted" msgstr "*** [%s] ÄŒlan arhive „%s“ je možda lažan; nije izbrisani" #: src/commands.c:632 #, c-format msgid "*** Archive member '%s' may be bogus; not deleted" msgstr "*** ÄŒlan arhive „%s“ je možda lažan; nije izbrisani" #: src/commands.c:646 #, c-format msgid "*** [%s] Deleting file '%s'" msgstr "*** [%s] BriÅ¡e se datoteka „%s“" #: src/commands.c:648 #, c-format msgid "*** Deleting file '%s'" msgstr "*** BriÅ¡e se datoteka „%s“" #: src/commands.c:684 msgid "# recipe to execute" msgstr "# pokrenuti recept" #: src/commands.c:687 msgid " (built-in):" msgstr " (ugraÄ‘eno):" #: src/commands.c:689 #, c-format msgid " (from '%s', line %lu):\n" msgstr " (iz „%s“, redak %lu):\n" #: src/dir.c:1073 msgid "" "\n" "# Directories\n" msgstr "" "\n" "# Direktoriji\n" #: src/dir.c:1085 #, c-format msgid "# %s: could not be stat'd.\n" msgstr "# nije bilo moguće dobiti status od %s.\n" #: src/dir.c:1089 msgid "# %s (key %s, mtime %I64u): could not be opened.\n" msgstr "" "# %s (kljuÄ %s, vrijeme zadnje izmjene %I64u): nije bilo moguće otvoriti.\n" # inode > index in a table of contents or an inode in a Unix-like file system > iÄvor #: src/dir.c:1094 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n" msgstr "# %s (ureÄ‘aj %d, inode [%d,%d,%d]): nije bilo moguće otvoriti.\n" # 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. #: src/dir.c:1099 #, c-format msgid "# %s (device %ld, inode %ld): could not be opened.\n" msgstr "# %s (ureÄ‘aj %ld, inode %ld): nije bilo moguće otvoriti.\n" #: src/dir.c:1126 msgid "# %s (key %s, mtime %I64u): " msgstr "# %s (kljuÄ %s, vrijeme zadnje izmjene %I64u): " #: src/dir.c:1131 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): " msgstr "# %s (ureÄ‘aj %d, inode [%d,%d,%d]): " #: src/dir.c:1136 #, c-format msgid "# %s (device %ld, inode %ld): " msgstr "# %s (ureÄ‘aj %ld, inode %ld): " #: src/dir.c:1142 src/dir.c:1163 msgid "No" msgstr "Ne" #: src/dir.c:1145 src/dir.c:1166 msgid " files, " msgstr " datoteke, " #: src/dir.c:1147 src/dir.c:1168 msgid "no" msgstr "ne" #: src/dir.c:1150 msgid " impossibilities" msgstr " nemogućnosti" #: src/dir.c:1154 msgid " so far." msgstr " do sada." #: src/dir.c:1171 #, c-format msgid " impossibilities in %lu directories.\n" msgstr " nemogućnosti u %lu direktorija.\n" #: src/expand.c:125 #, c-format msgid "Recursive variable '%s' references itself (eventually)" msgstr "Rekurzivna varijabla „%s“ ukazuje na samu sebe (u konaÄnici)" #: src/expand.c:271 #, c-format msgid "unterminated variable reference" msgstr "nedovrÅ¡ena referencija na varijablu" #: src/file.c:278 #, c-format msgid "Recipe was specified for file '%s' at %s:%lu," msgstr "Recept za datoteku „%s“ bio je naveden u %s:%lu," #: src/file.c:283 #, c-format msgid "Recipe for file '%s' was found by implicit rule search," msgstr "Recept za datoteku „%s“ je pronaÄ‘en u implicitnim pravilima," #: src/file.c:287 #, c-format msgid "but '%s' is now considered the same file as '%s'." msgstr "ali „%s“ se sada smatra istom datotekom kao i „%s“." #: src/file.c:290 #, c-format msgid "Recipe for '%s' will be ignored in favor of the one for '%s'." msgstr "Recept za „%s“ će se ignorirati a koristit će se „%s“." #: src/file.c:310 #, c-format msgid "can't rename single-colon '%s' to double-colon '%s'" msgstr "" "ne može se preimenovati „%s“ s jednom dvotoÄkom u „%s“ s dvije dvotoÄke" #: src/file.c:316 #, c-format msgid "can't rename double-colon '%s' to single-colon '%s'" msgstr "" "ne može se preimenovati „%s“ s dvije dvotoÄke u „%s“ s jednom dvotoÄkom" #: src/file.c:408 #, c-format msgid "*** Deleting intermediate file '%s'" msgstr "*** BriÅ¡e se privremena posredna datoteka „%s“" #: src/file.c:412 #, c-format msgid "Removing intermediate files...\n" msgstr "Uklanjanju se privremene posredne datoteke...\n" #: src/file.c:872 msgid "Current time" msgstr "TrenutaÄno vrijeme" #: src/file.c:876 #, c-format msgid "%s: Timestamp out of range; substituting %s" msgstr "%s: Vremenski žig je izvan granica raspona; zamjenjuje se s %s" #: src/file.c:1016 msgid "# Not a target:" msgstr "# Nije cilj (target):" #: src/file.c:1021 msgid "# Precious file (prerequisite of .PRECIOUS)." msgstr "# Vrijedna (precious) datoteka (preduvjet za .PRECIOUS)." #: src/file.c:1023 msgid "# Phony target (prerequisite of .PHONY)." msgstr "# Lažni (phony) cilj (preduvjet za .PHONY)." #: src/file.c:1025 msgid "# Command line target." msgstr "# Cilj naredbenog retka." # Zadan > standardni #: src/file.c:1027 msgid "# A default, MAKEFILES, or -include/sinclude makefile." msgstr "# Zadani Makefile, MAKEFILES, ili include/sinclude-makefile" #: src/file.c:1029 msgid "# Builtin rule" msgstr "# UgraÄ‘eno pravilo" #: src/file.c:1031 msgid "# Implicit rule search has been done." msgstr "# Provedeno je pretraživanje pomoću implicitnih pravila." #: src/file.c:1032 msgid "# Implicit rule search has not been done." msgstr "# Nije provedeno pretraživanje pomoću implicitnih pravila." #: src/file.c:1034 #, c-format msgid "# Implicit/static pattern stem: '%s'\n" msgstr "# Implicitni ili statiÄki korijen uzorka: „%s“\n" #: src/file.c:1036 msgid "# File is an intermediate prerequisite." msgstr "# Datoteka je privremeni posredni preduvjet." #: src/file.c:1040 msgid "# Also makes:" msgstr "# TakoÄ‘er napravi:" #: src/file.c:1046 msgid "# Modification time never checked." msgstr "# Nikad nije provjereno vrijeme zadnje izmjene" #: src/file.c:1048 msgid "# File does not exist." msgstr "# Datoteka ne postoji." #: src/file.c:1050 msgid "# File is very old." msgstr "# Datoteka je vrlo stara." #: src/file.c:1055 #, c-format msgid "# Last modified %s\n" msgstr "# Vrijeme zadnje promjene %s\n" #: src/file.c:1058 msgid "# File has been updated." msgstr "# Datoteka je bila ažurirana." #: src/file.c:1058 msgid "# File has not been updated." msgstr "# Datoteka nije bila ažurirana." #: src/file.c:1062 msgid "# Recipe currently running (THIS IS A BUG)." msgstr "# Recept koji se joÅ¡ uvijek izvrÅ¡ava (OVO JE PROGRAMSKA GREÅ KA)." #: src/file.c:1065 msgid "# Dependencies recipe running (THIS IS A BUG)." msgstr "" "# Recept za ovisnosti koji se joÅ¡ uvijek izvrÅ¡ava (OVO JE PROGRAMSKA GREÅ KA)" #: src/file.c:1074 msgid "# Successfully updated." msgstr "# UspjeÅ¡no ažurirano." #: src/file.c:1078 msgid "# Needs to be updated (-q is set)." msgstr "# Ažuriranje je nužno (opcija -q je dana)." #: src/file.c:1081 msgid "# Failed to be updated." msgstr "# Ažuriranje nije uspjelo." #: src/file.c:1086 msgid "# Invalid value in 'command_state' member!" msgstr "# Nevaljana vrijednost u command_state Älanu!" #: src/file.c:1105 msgid "" "\n" "# Files" msgstr "" "\n" "# Datoteke" #: src/file.c:1109 msgid "" "\n" "# files hash-table stats:\n" "# " msgstr "" "\n" "# status datoteka hash-tablice:\n" "# " #: src/file.c:1119 #, c-format msgid "%s: Field '%s' not cached: %s" msgstr "%s: Polja „%s“ nema u predmemoriji (nije cached): %s" #: src/function.c:794 msgid "non-numeric first argument to 'word' function" msgstr "prvi argument funkcije „word“ nije broj" #: src/function.c:799 #, c-format msgid "first argument to 'word' function must be greater than 0" msgstr "prvi argument funkcije „word“ mora biti veći od 0" #: src/function.c:819 msgid "non-numeric first argument to 'wordlist' function" msgstr "prvi argument funkcije „wordlist“ nije broj" #: src/function.c:821 msgid "non-numeric second argument to 'wordlist' function" msgstr "drugi argument funkcije „wordlist“ nije broj" #: src/function.c:1533 #, c-format msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n" msgstr "windows32_openpipe: DuplicateHandle(In) nije uspjeÅ¡na (e=%ld)\n" #: src/function.c:1557 #, c-format msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n" msgstr "windows32_open_pipe: DuplicateHandle(Err) nije uspjeÅ¡na (e=%ld)\n" #: src/function.c:1564 #, c-format msgid "CreatePipe() failed (e=%ld)\n" msgstr "CreatePipe() nije uspjeÅ¡na (e=%ld)\n" #: src/function.c:1572 #, c-format msgid "windows32_openpipe(): process_init_fd() failed\n" msgstr "windows32_openpipe(): process_init_fd() nije uspjeÅ¡na\n" #: src/function.c:1857 #, c-format msgid "Cleaning up temporary batch file %s\n" msgstr "Izbrisana je privremena (batch) datoteka %s.\n" #: src/function.c:2230 src/function.c:2255 #, c-format msgid "file: missing filename" msgstr "datoteka: nema imena datoteke" #: src/function.c:2234 src/function.c:2265 #, c-format msgid "open: %s: %s" msgstr "open(): %s: %s" #: src/function.c:2242 #, c-format msgid "write: %s: %s" msgstr "write(): %s: %s" #: src/function.c:2245 src/function.c:2282 #, c-format msgid "close: %s: %s" msgstr "close(): %s: %s" #: src/function.c:2258 #, c-format msgid "file: too many arguments" msgstr "datoteka: previÅ¡e argumenata" #: src/function.c:2277 #, c-format msgid "read: %s: %s" msgstr "read(): %s: %s" #: src/function.c:2290 #, c-format msgid "file: invalid file operation: %s" msgstr "datoteka: nevaljana operacija na datoteci: %s" #: src/function.c:2405 #, c-format msgid "insufficient number of arguments (%d) to function '%s'" msgstr "nedovoljan broj argumenata (%d) za funkciju „%s“" #: src/function.c:2417 #, c-format msgid "unimplemented on this platform: function '%s'" msgstr "nije implementirana na ovoj platformi: funkcija „%s“" #: src/function.c:2483 #, c-format msgid "unterminated call to function '%s': missing '%c'" msgstr "nedovrÅ¡eni poziv funkciji „%s“: nedostaje %c" #: src/function.c:2667 #, c-format msgid "Empty function name" msgstr "Prazno ime funkcije" #: src/function.c:2669 #, c-format msgid "Invalid function name: %s" msgstr "Nevaljani naziv funkcije: %s" #: src/function.c:2671 #, c-format msgid "Function name too long: %s" msgstr "Naziv funkcije je predugaÄak: %s" #: src/function.c:2674 #, c-format msgid "Invalid minimum argument count (%u) for function %s" msgstr "Nevaljani minimalni broj argumenata (%u) za funkciju %s" #: src/function.c:2677 #, c-format msgid "Invalid maximum argument count (%u) for function %s" msgstr "Nevaljani maksimalni broj argumenata (%u) za funkciju %s" #: src/getopt.c:659 #, c-format msgid "%s: option '%s' is ambiguous\n" msgstr "%s: opcija „%s“ je dvosmislena\n" #: src/getopt.c:683 #, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s: opcija „--%s“ ne dopuÅ¡ta argument\n" #: src/getopt.c:688 #, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s: opcija „%c%s“ ne dopuÅ¡ta argument\n" #: src/getopt.c:705 src/getopt.c:878 #, c-format msgid "%s: option '%s' requires an argument\n" msgstr "%s: opcija „%s“ zahtijeva argument\n" #: src/getopt.c:734 #, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s: neprepoznata opcija „--%s“\n" #: src/getopt.c:738 #, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s: neprepoznata opcija „%c%s“\n" # * 1003.2 specifies the format of this message. */ # fprintf (stderr, _("%s: illegal option -- %c\n"), #: src/getopt.c:764 #, c-format msgid "%s: illegal option -- %c\n" msgstr "%s: nepropisna opcija -- %c\n" #: src/getopt.c:767 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s: nevaljana opcija -- %c\n" #: src/getopt.c:797 src/getopt.c:927 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: opcija zahtijeva argument -- %c\n" #: src/getopt.c:844 #, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s: opcija „-W %s“ je dvosmislena\n" #: src/getopt.c:862 #, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s: opcija „-W %s“ ne dopuÅ¡ta argument\n" #: src/guile.c:58 #, c-format msgid "guile: Expanding '%s'\n" msgstr "guile: ProÅ¡iruje se „%s“\n" #: src/guile.c:74 #, c-format msgid "guile: Evaluating '%s'\n" msgstr "guile: Procjena „%s“\n" #: src/hash.c:50 #, c-format msgid "can't allocate %lu bytes for hash table: memory exhausted" msgstr "ne može dodijeliti %lu bajtova za hash-tablicu: nema dovoljno memorije" #: src/hash.c:280 #, c-format msgid "Load=%lu/%lu=%.0f%%, " msgstr "Opterećenje=%lu/%lu=%.0f%%, " #: src/hash.c:282 #, c-format msgid "Rehash=%u, " msgstr "Rehash=%u, " # možda bi bolje bilo > Kontradikcije #: src/hash.c:283 #, c-format msgid "Collisions=%lu/%lu=%.0f%%" msgstr "Sudari=%lu/%lu=%.0f%%" #: src/implicit.c:38 #, c-format msgid "Looking for an implicit rule for '%s'.\n" msgstr "Potraga za implicitnim pravilom za „%s“.\n" #: src/implicit.c:54 #, c-format msgid "Looking for archive-member implicit rule for '%s'.\n" msgstr "Traži se implicitno pravilo za Älana arhive za „%s“\n" #: src/implicit.c:311 #, c-format msgid "Avoiding implicit rule recursion.\n" msgstr "SprjeÄavanje rekurzije implicitnog pravila.\n" #: src/implicit.c:484 #, c-format msgid "Stem too long: '%s%.*s'.\n" msgstr "Predugi korijen uzorka: „%s%.*s“.\n" #: src/implicit.c:490 #, c-format msgid "Trying pattern rule with stem '%.*s'.\n" msgstr "Isprobava se pravilo s korijenom uzorka „%.*s“.\n" #: src/implicit.c:717 #, c-format msgid "Rejecting impossible rule prerequisite '%s'.\n" msgstr "Odbija se nemogući preduvjet pravila „%s“.\n" #: src/implicit.c:718 #, c-format msgid "Rejecting impossible implicit prerequisite '%s'.\n" msgstr "Odbija se nemogući implicitni preduvjet „%s“.\n" #: src/implicit.c:732 #, c-format msgid "Trying rule prerequisite '%s'.\n" msgstr "Isprobava se pravilo preduvjeta „%s“.\n" #: src/implicit.c:733 #, c-format msgid "Trying implicit prerequisite '%s'.\n" msgstr "Isprobava se implicitni preduvjet „%s“.\n" #: src/implicit.c:772 #, c-format msgid "Found prerequisite '%s' as VPATH '%s'\n" msgstr "NaÄ‘eni preduvjet „%s“ kao VPATH „%s“\n" #: src/implicit.c:786 #, c-format msgid "Looking for a rule with intermediate file '%s'.\n" msgstr "Potraga za pravilom s privremenom posrednom datotekom „%s“.\n" #: src/job.c:370 msgid "Cannot create a temporary file\n" msgstr "Ne može se stvoriti privremena datoteka\n" # A core dump is a file of a computer's documented memory of when a program or computer crashed. #: src/job.c:548 msgid " (core dumped)" msgstr " (**krah**: stanje memorije je dokumentirano!)" #: src/job.c:553 msgid " (ignored)" msgstr " (ignorira se)" #: src/job.c:557 src/job.c:1892 msgid "" msgstr "" #: src/job.c:573 #, c-format msgid "%s[%s: %s] Error %d%s" msgstr "%s[%s: %s] GreÅ¡ka %d%s" #: src/job.c:662 #, c-format msgid "*** Waiting for unfinished jobs...." msgstr "*** ÄŒeka se na nedovrÅ¡ene poslove...." # child > dijete > potomak; pridjev potamaÄki #: src/job.c:704 #, c-format msgid "Live child %p (%s) PID %s %s\n" msgstr "Živi potomak (nedovrÅ¡eni dijete-proces) %p (%s) PID %s %s\n" #: src/job.c:706 src/job.c:900 src/job.c:1072 src/job.c:1644 #, c-format msgid " (remote)" msgstr " (udaljeno)" #: src/job.c:898 #, c-format msgid "Reaping winning child %p PID %s %s\n" msgstr "ÄŒišćenje iza uspjeÅ¡nog potomka (dijete-procesa) %p PID %s %s\n" # 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. #: src/job.c:899 #, c-format msgid "Reaping losing child %p PID %s %s\n" msgstr "ÄŒišćenje iza neuspjeÅ¡noga potomka (dijete-procesa) %p PID %s %s\n" # batch file > naredbena datoteka sustava (skript datoteka) #: src/job.c:950 #, c-format msgid "Cleaning up temp batch file %s\n" msgstr "ÄŒišćenje iza privremene (batch) datoteke %s\n" #: src/job.c:956 #, c-format msgid "Cleaning up temp batch file %s failed (%d)\n" msgstr "ÄŒišćenje iza privremene (batch) datoteke %s nije uspjelo (%d)\n" #: src/job.c:1071 #, c-format msgid "Removing child %p PID %s%s from chain.\n" msgstr "Potomak (dijete-proces) %p PID %s%s je uklonjen iz lanca.\n" #: src/job.c:1120 #, c-format msgid "Released token for child %p (%s).\n" msgstr "OsloboÄ‘en je token za potomka (dijete-procesa) %p (%s).\n" #: src/job.c:1575 src/job.c:2487 #, c-format msgid "process_easy() failed to launch process (e=%ld)\n" msgstr "process_easy() nije uspjela pokrenuti proces (e=%ld)\n" #: src/job.c:1579 src/job.c:2491 #, c-format msgid "" "\n" "Counted %d args in failed launch\n" msgstr "" "\n" "%d argumenata izbrojeno je pri neuspjelom pokretanju\n" #: src/job.c:1642 #, c-format msgid "Putting child %p (%s) PID %s%s on the chain.\n" msgstr "Umetanje potomka (dijete-procesa) %p (%s) PID %s%s u lanac.\n" #: src/job.c:1875 #, c-format msgid "Obtained token for child %p (%s).\n" msgstr "Dobiveni je token za potomka (dijete-procesa) %p (%s).\n" #: src/job.c:1902 #, c-format msgid "%s: target '%s' does not exist" msgstr "%s: cilj „%s“ ne postoji" #: src/job.c:1905 #, c-format msgid "%s: update target '%s' due to: %s" msgstr "%s: ažurira cilj „%s“ za potrebe: %s" #: src/job.c:2108 #, c-format msgid "cannot enforce load limits on this operating system" msgstr "ne mogu se nametnuti granice opterećenja na ovom operacijskom sustavu" #: src/job.c:2110 msgid "cannot enforce load limit: " msgstr "ne može nametnuti granice opterećenja: " # In Unix and related computer operating systems, a file descriptor is an abstract indicator (handle) used to access a file # stdin > standardni ulaz #: src/job.c:2200 #, c-format msgid "no more file handles: could not duplicate stdin\n" msgstr "" "nema viÅ¡e datoteÄnih kvaÄica: nije se mogao duplicirati standardni ulaz\n" # stdout > standardni izlaz #: src/job.c:2212 #, c-format msgid "no more file handles: could not duplicate stdout\n" msgstr "" "nema viÅ¡e datoteÄnih kvaÄica: nije se mogao duplicirati standardni izlaz\n" # stderr > standard error #: src/job.c:2226 #, c-format msgid "no more file handles: could not duplicate stderr\n" msgstr "" "nema viÅ¡e datoteÄnih kvaÄica: nije se mogao duplicirati\n" "standardni izlaz za greÅ¡ke\n" #: src/job.c:2241 #, c-format msgid "Could not restore stdin\n" msgstr "Nije moguće obnoviti standardni ulaz\n" #: src/job.c:2249 #, c-format msgid "Could not restore stdout\n" msgstr "Nije moguće obnoviti standardni izlaz\n" #: src/job.c:2257 #, c-format msgid "Could not restore stderr\n" msgstr "Nije moguće obnoviti standardni izlaz greÅ¡ki\n" #: src/job.c:2520 #, c-format msgid "make reaped child pid %s, still waiting for pid %s\n" msgstr "" "make je poÄistio potomka (dijete-proces) PID %s, ali joÅ¡ uvijek Äeka na PID " "%s\n" #: src/job.c:2623 #, c-format msgid "spawnvpe: environment space might be exhausted" msgstr "spawnvpe: može biti da u okolini nema dovoljno prostora" #: src/job.c:2862 #, c-format msgid "$SHELL changed (was '%s', now '%s')\n" msgstr "Varijabla $SHELL se promijenila (prije „%s“, sada „%s“)\n" #: src/job.c:3300 src/job.c:3485 #, c-format msgid "Creating temporary batch file %s\n" msgstr "Stvara se privremena (batch) datoteka %s\n" #: src/job.c:3308 #, c-format msgid "" "Batch file contents:\n" "\t@echo off\n" msgstr "" "Sadržaj (batch) datoteke:\n" "\t@echo off\n" #: src/job.c:3497 #, c-format msgid "" "Batch file contents:%s\n" "\t%s\n" msgstr "" "Sadržaj (batch) datoteke:%s\n" "\t%s\n" #: src/job.c:3605 #, c-format msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n" msgstr "%s (redak %d) LoÅ¡i kontekst ljuske (!unixy && !batch_mode_shell)\n" #: src/load.c:60 #, c-format msgid "Failed to open global symbol table: %s" msgstr "Otvaranje globalne tablice simbola nije uspjelo: %s" #: src/load.c:97 #, c-format msgid "Loaded object %s is not declared to be GPL compatible" msgstr "UÄitani objekt %s nema deklaraciju da je kompatibilan s GPL-om" #: src/load.c:104 #, c-format msgid "Failed to load symbol %s from %s: %s" msgstr "Simbol %s iz %s nije uspjelo uÄitati: %s" #: src/load.c:149 #, c-format msgid "Empty symbol name for load: %s" msgstr "Prazno ime simbola za uÄitati: %s" #: src/load.c:204 #, c-format msgid "Loading symbol %s from %s\n" msgstr "UÄitava se simbol %s iz %s\n" #: src/load.c:256 #, c-format msgid "The 'load' operation is not supported on this platform." msgstr "Operacija load nije podržana na ovoj platformi." #: src/main.c:335 msgid "Options:\n" msgstr "Opcije:\n" #: src/main.c:336 msgid " -b, -m Ignored for compatibility.\n" msgstr " -b, -m ignorira se zbog kompatibilnosti\n" #: src/main.c:338 msgid " -B, --always-make Unconditionally make all targets.\n" msgstr " -B, --always-make bezuvjetno napravi sve ciljeve\n" #: src/main.c:340 msgid "" " -C DIRECTORY, --directory=DIRECTORY\n" " Change to DIRECTORY before doing anything.\n" msgstr "" " -C DIREKTORIJ, --directory=DIREKTORIJ\n" " prije poÄetka rada prijeÄ‘e u DIREKTORIJ\n" #: src/main.c:343 msgid " -d Print lots of debugging information.\n" msgstr " -d ispisuje puno podataka za debugiranje\n" #: src/main.c:345 msgid "" " --debug[=FLAGS] Print various types of debugging information.\n" msgstr "" " --debug[=ZASTAVICE] ispisuje razne vrste informacija za " "debugiranje\n" #: src/main.c:347 msgid "" " -e, --environment-overrides\n" " Environment variables override makefiles.\n" msgstr "" " -e, --environment-overrides\n" " uÄini da „make“ rabi varijable okoline " "umjesto\n" " tih istih varijabli iz Makefiles\n" #: src/main.c:350 msgid "" " -E STRING, --eval=STRING Evaluate STRING as a makefile statement.\n" msgstr " -E STRING, --eval=STRING evaluira STRING kao Makefile direktivu\n" #: src/main.c:352 msgid "" " -f FILE, --file=FILE, --makefile=FILE\n" " Read FILE as a makefile.\n" msgstr "" " -f DATOTEKA, --file=DATOTEKA, --makefile=DATOTEKA\n" " Äita i koristi DATOTEKU kao Makefile\n" #: src/main.c:355 msgid " -h, --help Print this message and exit.\n" msgstr " -h, --help ova pomoć\n" #: src/main.c:357 msgid " -i, --ignore-errors Ignore errors from recipes.\n" msgstr " -i, --ignore-errors ignorira sve greÅ¡ke u receptima\n" #: src/main.c:359 msgid "" " -I DIRECTORY, --include-dir=DIRECTORY\n" " Search DIRECTORY for included makefiles.\n" msgstr "" " -I DIREKTORIJ, --include-dir=DIREKTORIJ\n" " traži include-Makefiles u DIREKTORIJU\n" #: src/main.c:362 msgid "" " -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no " "arg.\n" msgstr "" " -j [N], --jobs[=N] dopuÅ¡ta N istovremenih poslova; ako se " "izostavi\n" " argument N, nema ograniÄenja broju poslova\n" #: src/main.c:364 msgid "" " -k, --keep-going Keep going when some targets can't be made.\n" msgstr "" " -k, --keep-going nastavlja raditi (iako se neki od ciljeva\n" " ne mogu napraviti).\n" #: src/main.c:366 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će viÅ¡e poslova istovremeno ako\n" " je opterećenje veće od N\n" #: src/main.c:369 msgid "" " -L, --check-symlink-times Use the latest mtime between symlinks and " "target.\n" msgstr "" " -L, --check-symlink-times od simboliÄke veze i njezinoga cilja koristi\n" " se kasnije vrijeme izmjene (mtime)\n" #: src/main.c:371 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" " ne pokreće recepte već ih samo ispiÅ¡e\n" # 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. #: src/main.c:374 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" " ne obnavlja DATOTEKU jer je vrlo stara\n" #: src/main.c:377 msgid "" " -O[TYPE], --output-sync[=TYPE]\n" " Synchronize output of parallel jobs by TYPE.\n" msgstr "" " -O[TYPE], --output-sync[=TIP]\n" " TIP sinkronizacije izlaznih paralelnih " "poslova\n" #: src/main.c:380 msgid " -p, --print-data-base Print make's internal database.\n" msgstr "" " -p, --print-data-base ispiÅ¡e internu bazu podataka „make“ programa\n" #: src/main.c:382 msgid "" " -q, --question Run no recipe; exit status says if up to " "date.\n" msgstr "" " -q, --question ne pokreće recepte; izlazni status pokaže\n" " jesu li aktualni\n" #: src/main.c:384 msgid " -r, --no-builtin-rules Disable the built-in implicit rules.\n" msgstr " -r, --no-builtin-rules onemogući ugraÄ‘ena implicitna pravila\n" #: src/main.c:386 msgid " -R, --no-builtin-variables Disable the built-in variable settings.\n" msgstr "" " -R, --no-builtin-variables onemogući ugraÄ‘ene vrijednosti varijabli\n" #: src/main.c:388 msgid " -s, --silent, --quiet Don't echo recipes.\n" msgstr " -s, --silent, --quiet ne ispisuje recepte\n" #: src/main.c:390 msgid " --no-silent Echo recipes (disable --silent mode).\n" msgstr "" " --no-silent odjekuje recepte (poniÅ¡ti --silent naÄin)\n" #: src/main.c:392 msgid "" " -S, --no-keep-going, --stop\n" " Turns off -k.\n" msgstr "" " -S, --no-keep-going, --stop\n" " ukida opciju -k\n" #: src/main.c:395 msgid " -t, --touch Touch targets instead of remaking them.\n" msgstr "" " -t, --touch „touch“ (ažurira vrijeme) ciljeve umjesto\n" " da ih iznova napravi\n" #: src/main.c:397 msgid " --trace Print tracing information.\n" msgstr "" " -d ispisuje informacije praćenja (tracing)\n" #: src/main.c:399 msgid "" " -v, --version Print the version number of make and exit.\n" msgstr " -v, --version informacije o ovoj inaÄici programa\n" #: src/main.c:401 msgid " -w, --print-directory Print the current directory.\n" msgstr " -w, --print-directory ispiÅ¡e trenutaÄni direktorij\n" #: src/main.c:403 msgid "" " --no-print-directory Turn off -w, even if it was turned on " "implicitly.\n" msgstr "" " --no-print-directory ukida opciju -w (Äak i ako je implicirana)\n" #: src/main.c:405 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, --assume-" "new=DATOTEKA\n" " smatra da je DATOTEKA zauvijek nova\n" #: src/main.c:408 msgid "" " --warn-undefined-variables Warn when an undefined variable is " "referenced.\n" msgstr "" " --warn-undefined-variables upozori na referiranje nedefinirane varijable\n" #: src/main.c:671 #, c-format msgid "empty string invalid as file name" msgstr "prazni string nije valjano ime datoteke" #: src/main.c:754 #, c-format msgid "unknown debug level specification '%s'" msgstr "nepoznata specifikacija „%s“ za razinu dijagnostike" #: src/main.c:794 #, c-format msgid "unknown output-sync type '%s'" msgstr "nepoznati tip sinkronizacije izlaza „%s“" #: src/main.c:849 #, c-format msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n" msgstr "%s: Prekid/iznimka primljena (kÈd = 0x%lx, adresa = 0x%p)\n" #: src/main.c:856 #, c-format msgid "" "\n" "Unhandled exception filter called from program %s\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" msgstr "" "\n" "Filtar neobraÄ‘ene iznimke pozvan je iz programa %s\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" #: src/main.c:864 #, c-format msgid "Access violation: write operation at address 0x%p\n" msgstr "Povreda prava pristupa: operacija pisanja na adresi 0x%p\n" #: src/main.c:865 #, c-format msgid "Access violation: read operation at address 0x%p\n" msgstr "Povreda prava pristupa: operacija Äitanja na adresi 0x%p\n" #: src/main.c:941 src/main.c:956 #, c-format msgid "find_and_set_shell() setting default_shell = %s\n" msgstr "find_and_set_shell() postavlja default_shell = %s\n" #: src/main.c:1009 #, c-format msgid "find_and_set_shell() path search set default_shell = %s\n" msgstr "find_and_set_shell() pretragom staze postavlja default_shell = %s\n" # parent > roditelj > predak; pridjev predaÄki #: src/main.c:1609 #, c-format msgid "" "warning: jobserver unavailable: using -j1. Add '+' to parent make rule." msgstr "" "upozorenje: jobserver nije dostupni: koristi se -j1.\n" "Dodajte „+“ make pravilu pretka (parent)" #: src/main.c:1617 #, c-format msgid "warning: -j%d forced in submake: resetting jobserver mode." msgstr "upozorenje: -j%d je forsiran u submake: resetira mÈd jobservera." #: src/main.c:1781 #, c-format msgid "Makefile from standard input specified twice." msgstr "Makefile je dva puta naveden na standardnom ulazu." #: src/main.c:1819 src/vmsjobs.c:1248 msgid "fopen (temporary file)" msgstr "fopen (privremena datoteka)" #: src/main.c:1825 msgid "fwrite (temporary file)" msgstr "fwrite (privremena datoteka)" #: src/main.c:2004 #, c-format msgid "warning: -j%d forced in makefile: resetting jobserver mode." msgstr "upozorenje: -j%d je forsiran u makefile: resetira mÈd jobservera." #: src/main.c:2068 #, c-format msgid "Parallel jobs (-j) are not supported on this platform." msgstr "Paralelni poslovi (-j) nisu podržani na ovoj platformi." #: src/main.c:2069 #, c-format msgid "Resetting to single job (-j1) mode." msgstr "Povratak na naÄin rada s jednim poslom (-j1)." #: src/main.c:2109 #, c-format msgid "Symbolic links not supported: disabling -L." msgstr "SimboliÄke veze nisu podržane: onemogućuje se -L." #: src/main.c:2190 #, c-format msgid "Updating makefiles....\n" msgstr "Ažuriraju se Makefiles....\n" #: src/main.c:2226 #, c-format msgid "Makefile '%s' might loop; not remaking it.\n" msgstr "Makefile „%s“ bi mogao ući u petlju; neće se ponovno napraviti.\n" #: src/main.c:2303 #, c-format msgid "Failed to remake makefile '%s'." msgstr "Nije uspjelo ponovno napraviti Makefile „%s“." #: src/main.c:2323 #, c-format msgid "Included makefile '%s' was not found." msgstr "„%s“ include-Makefile nije bio pronaÄ‘en." #: src/main.c:2328 #, c-format msgid "Makefile '%s' was not found" msgstr "Makefile „%s“ nije pronaÄ‘en" #: src/main.c:2394 #, c-format msgid "Couldn't change back to original directory." msgstr "Ne bilo moguće vratiti se u izvorni direktorij." #: src/main.c:2402 #, c-format msgid "Re-executing[%u]:" msgstr "Ponovno izvrÅ¡avanje[%u]:" #: src/main.c:2522 msgid "unlink (temporary file): " msgstr "unlink (privremena datoteka): " #: src/main.c:2555 #, c-format msgid ".DEFAULT_GOAL contains more than one target" msgstr ".DEFAULT_GOAL sadrži viÅ¡e od jednoga cilja" #: src/main.c:2579 #, c-format msgid "No targets" msgstr "Nema ciljeva" #: src/main.c:2581 #, c-format msgid "No targets specified and no makefile found" msgstr "Nije navedeni nijedan cilj i nije pronaÄ‘eni nijedan Makefile" #: src/main.c:2586 #, c-format msgid "Updating goal targets....\n" msgstr "Ažuriraju se ciljevi....\n" #: src/main.c:2610 #, c-format msgid "warning: Clock skew detected. Your build may be incomplete." msgstr "" "upozorenje: Otkriveni je problem sa satom. Kompilacija možda nije kompletna." #: src/main.c:2804 #, c-format msgid "Usage: %s [options] [target] ...\n" msgstr "Uporaba: %s [opcije] [cilj] ...\n" #: src/main.c:2810 #, c-format msgid "" "\n" "This program built for %s\n" msgstr "" "\n" "Ovaj program je proizveden za %s\n" #: src/main.c:2812 #, c-format msgid "" "\n" "This program built for %s (%s)\n" msgstr "" "\n" "Ovaj program je proizveden za %s (%s)\n" #: src/main.c:2815 #, c-format msgid "Report bugs to \n" msgstr "" "GreÅ¡ke (bugs) na engleskom javite na \n" "PogreÅ¡ke u prijevodu i vaÅ¡e prijedloge javite na \n" #: src/main.c:2901 #, c-format msgid "the '%s%s' option requires a non-empty string argument" msgstr "opcija %s%s zahtijeva neprazni string za argument" #: src/main.c:2965 #, c-format msgid "the '-%c' option requires a positive integer argument" msgstr "opcija -%c zahtijeva pozitivni cijeli broj za argument" #: src/main.c:3363 #, c-format msgid "%sBuilt for %s\n" msgstr "%sProizvedeno za %s\n" #: src/main.c:3365 #, c-format msgid "%sBuilt for %s (%s)\n" msgstr "%sProizvedeno za %s (%s)\n" #: src/main.c:3376 #, c-format msgid "" "%sLicense GPLv3+: GNU GPL version 3 or later \n" "%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 "" "%sLicencija GPLv3+: GNU GPL inaÄica 3 ili kasnija\n" "v. \n" "%sOvo je slobodan softver: slobodno ga mijenjajte i distribuirajte.\n" "%sNEMA JAMSTVA do granica dopuÅ¡tenih zakonom.\n" "PogreÅ¡ke u prijevodu i vaÅ¡e prijedloge javite na \n" "\n" #: src/main.c:3397 #, c-format msgid "" "\n" "# Make data base, printed on %s" msgstr "" "\n" "# „Make“ baza podataka, ispisana na %s" #: src/main.c:3407 #, c-format msgid "" "\n" "# Finished Make data base on %s\n" msgstr "" "\n" "# Gotova „Make“ baza podataka je spremna na %s\n" # Da prevedem ovo? #: src/misc.c:643 #, c-format msgid "%s: user %lu (real %lu), group %lu (real %lu)\n" msgstr "%s: korisnik %lu (stvarni %lu), grupa %lu (stvarna %lu)\n" #: src/misc.c:664 msgid "Initialized access" msgstr "Pristup je iniciran" #: src/misc.c:743 msgid "User access" msgstr "Pristup korisnikom" #: src/misc.c:791 msgid "Make access" msgstr "Pristup make-om" #: src/misc.c:825 msgid "Child access" msgstr "Pristup potomkom (dijete-proces)" #: src/output.c:97 #, c-format msgid "%s: Entering an unknown directory\n" msgstr "%s: Unos nepoznatoga direktorija\n" #: src/output.c:99 #, c-format msgid "%s: Leaving an unknown directory\n" msgstr "%s: Nema nepoznatoga direktorija\n" #: src/output.c:102 #, c-format msgid "%s: Entering directory '%s'\n" msgstr "%s: Ulazi se u direktorij „%s“\n" #: src/output.c:104 #, c-format msgid "%s: Leaving directory '%s'\n" msgstr "%s: Izlazi se iz direktorija „%s“\n" #: src/output.c:108 #, c-format msgid "%s[%u]: Entering an unknown directory\n" msgstr "%s[%u]: Unos nepoznatoga direktorija\n" #: src/output.c:110 #, c-format msgid "%s[%u]: Leaving an unknown directory\n" msgstr "%s[%u]: Nema nepoznatoga direktorija\n" #: src/output.c:113 #, c-format msgid "%s[%u]: Entering directory '%s'\n" msgstr "%s[%u]: Ulazi se u direktorij „%s“\n" #: src/output.c:115 #, c-format msgid "%s[%u]: Leaving directory '%s'\n" msgstr "%s[%u]: Izlazi se iz direktorija „%s“\n" #: src/output.c:442 src/output.c:444 #, c-format msgid "write error: stdout" msgstr "greÅ¡ka pisanja: standardni izlaz (stdout)" #: src/output.c:624 msgid ". Stop.\n" msgstr ". Zaustavljeno.\n" #: src/output.c:658 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" #: src/output.c:667 #, c-format msgid "%s: %s" msgstr "%s: %s" #: src/output.h:62 #, c-format msgid "-O[TYPE] (--output-sync[=TYPE]) is not configured for this build." msgstr "" "Opcija -O[TYPE] (--output-sync[=TYPE]) nije ugraÄ‘ena u ovu kompilaciju." # 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. #: src/posixos.c:90 msgid "creating jobs pipe" msgstr "stvaranje cijevi za poslove" # http://make.mad-scientist.net/papers/jobserver-implementation/ #: src/posixos.c:98 src/posixos.c:251 msgid "duping jobs pipe" msgstr "stvaranje kopije cijevi za poslove" #: src/posixos.c:104 msgid "init jobserver pipe" msgstr "inicijalizacija cijevi jobservera" #: src/posixos.c:119 #, c-format msgid "internal error: invalid --jobserver-auth string '%s'" msgstr "**interna greÅ¡ka**: nevaljani string „%s“ za --jobserver-auth" #: src/posixos.c:122 #, c-format msgid "Jobserver client (fds %d,%d)\n" msgstr "Klijent jobservera (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. #: src/posixos.c:138 msgid "jobserver pipeline" msgstr "cjevovod (pipeline) jobservera" # Å to bi ovdje trebalo ići? # bp: iz izvornog kÈda, možda ovo. #: src/posixos.c:186 msgid "write jobserver" msgstr "zapis jobservera" #: src/posixos.c:300 #, c-format msgid "job server shut down" msgstr "jobserver iskljuÄen" #: src/posixos.c:303 msgid "pselect jobs pipe" msgstr "pselect() cijevi poslova" #: src/posixos.c:319 src/posixos.c:433 msgid "read jobs pipe" msgstr "Äitanje iz cijevi poslova" #: src/read.c:181 #, c-format msgid "Reading makefiles...\n" msgstr "ÄŒitaju se Makefiles...\n" #: src/read.c:336 #, c-format msgid "Reading makefile '%s'" msgstr "ÄŒita se Makefile „%s“" #: src/read.c:338 #, c-format msgid " (no default goal)" msgstr " (nema zadanog cilja)" #: src/read.c:340 #, c-format msgid " (search path)" msgstr " (staza pretraživanja)" #: src/read.c:342 #, c-format msgid " (don't care)" msgstr " (nije važno)" #: src/read.c:344 #, c-format msgid " (no ~ expansion)" msgstr " (bez proÅ¡irivanja znaka ~)" #: src/read.c:655 #, c-format msgid "Skipping UTF-8 BOM in makefile '%s'\n" msgstr "PreskaÄe se UTF-8 BOM u Makefile „%s“\n" #: src/read.c:658 #, c-format msgid "Skipping UTF-8 BOM in makefile buffer\n" msgstr "PreskaÄe se UTF-8 BOM u Makefile meÄ‘uspremniku\n" #: src/read.c:787 #, c-format msgid "invalid syntax in conditional" msgstr "nevaljana sintaksa u uvjetnom izrazu" #: src/read.c:960 #, c-format msgid "%s: failed to load" msgstr "%s: uÄitavanje nije uspjelo" #: src/read.c:986 #, c-format msgid "recipe commences before first target" msgstr "recept zapoÄinje prije prvog cilja" #: src/read.c:1035 #, c-format msgid "missing rule before recipe" msgstr "nema pravila prije recepta" #: src/read.c:1136 #, c-format msgid "missing separator (did you mean TAB instead of 8 spaces?)" msgstr "nema separatora (Mislili ste TAB umjesto 8 razmaka?)" # Grr, živjela engleska množina! I Å¡to sad da radim s onim %s-om? #: src/read.c:1138 #, c-format msgid "missing separator" msgstr "nema separatora" #: src/read.c:1283 #, c-format msgid "missing target pattern" msgstr "nema uzorka za cilj" #: src/read.c:1285 #, c-format msgid "multiple target patterns" msgstr "nekoliko uzoraka za cilj" #: src/read.c:1289 #, c-format msgid "target pattern contains no '%%'" msgstr "uzorak cilja ne sadrži „%%“" #: src/read.c:1404 #, c-format msgid "missing 'endif'" msgstr "nema „endif“" #: src/read.c:1443 src/read.c:1488 src/variable.c:1600 #, c-format msgid "empty variable name" msgstr "prazno ime varijable" #: src/read.c:1478 #, c-format msgid "extraneous text after 'define' directive" msgstr "suviÅ¡ni tekst nakon „define“ direktive" #: src/read.c:1503 #, c-format msgid "missing 'endef', unterminated 'define'" msgstr "nema „endef“, nedovrÅ¡eni „define“" #: src/read.c:1531 #, c-format msgid "extraneous text after 'endef' directive" msgstr "suviÅ¡ni tekst nakon „endef“ direktive" #: src/read.c:1603 #, c-format msgid "extraneous text after '%s' directive" msgstr "suviÅ¡ni tekst nakon „%s“ direktive" #: src/read.c:1604 #, c-format msgid "extraneous '%s'" msgstr "suviÅ¡ni „%s“" #: src/read.c:1632 #, c-format msgid "only one 'else' per conditional" msgstr "samo jedan „else“ po uvjetnom izrazu" #: src/read.c:1908 #, c-format msgid "Malformed target-specific variable definition" msgstr "Deformirana definicija varijable specifiÄne za cilj" #: src/read.c:1968 #, c-format msgid "prerequisites cannot be defined in recipes" msgstr "preduvjeti se ne mogu definirani u receptima" #: src/read.c:1986 #, c-format msgid "grouped targets must provide a recipe" msgstr "grupirani ciljevi moraju predati recept" #: src/read.c:2029 #, c-format msgid "mixed implicit and static pattern rules" msgstr "pomijeÅ¡ana su implicitna i statiÄka uzorak-pravila" #: src/read.c:2052 #, c-format msgid "mixed implicit and normal rules" msgstr "pomijeÅ¡ana su implicitna i normalna pravila" #: src/read.c:2107 #, c-format msgid "target '%s' doesn't match the target pattern" msgstr "cilj „%s“ se ne podudara s uzorkom cilja" #: src/read.c:2122 src/read.c:2168 #, c-format msgid "target file '%s' has both : and :: entries" msgstr "ciljna datoteka „%s“ sadrži „:“ i „::“" #: src/read.c:2128 #, c-format msgid "target '%s' given more than once in the same rule" msgstr "cilj „%s“ je naveden viÅ¡e od jedanput u istom pravilu" # prebrisati> briÅ¡ući ukloniti, briÅ¡ući poniÅ¡titi, prebrisati dio teksta, odbaciti #: src/read.c:2138 #, c-format msgid "warning: overriding recipe for target '%s'" msgstr "upozorenje: ignorira se recept za cilj „%s“" #: src/read.c:2141 #, c-format msgid "warning: ignoring old recipe for target '%s'" msgstr "upozorenje: ignorira se stari recept za cilj „%s“" #: src/read.c:2254 #, c-format msgid "*** mixed implicit and normal rules: deprecated syntax" msgstr "" "*** pomijeÅ¡ana su implicitna i normalna pravila: to je zastarjela sintaksa" # prebrisati> briÅ¡ući ukloniti, briÅ¡ući poniÅ¡titi, prebrisati dio teksta, odbaciti #: src/read.c:2271 #, c-format msgid "warning: overriding group membership for target '%s'" msgstr "upozorenje: ignorira se Älanstvo grupe za cilj „%s“" #: src/read.c:2636 #, c-format msgid "warning: NUL character seen; rest of line ignored" msgstr "upozorenje: proÄitani je NUL znak; ostatak retka se ignorira" #: src/remake.c:226 #, c-format msgid "Nothing to be done for '%s'." msgstr "Nema niÅ¡ta za napraviti za „%s“." #: src/remake.c:227 #, c-format msgid "'%s' is up to date." msgstr "„%s“ je ažurirani." #: src/remake.c:323 #, c-format msgid "Pruning file '%s'.\n" msgstr "ÄŒišćenje datoteke „%s“.\n" #: src/remake.c:389 #, c-format msgid "%sNo rule to make target '%s', needed by '%s'%s" msgstr "%sNema pravila za izradu cilja „%s“ koji je potrebni za „%s“%s" #: src/remake.c:399 #, c-format msgid "%sNo rule to make target '%s'%s" msgstr "%sNema pravila za izradu cilja „%s“%s" #: src/remake.c:425 #, c-format msgid "Considering target file '%s'.\n" msgstr "Razmatra se ciljna datoteka „%s“.\n" #: src/remake.c:432 #, c-format msgid "Recently tried and failed to update file '%s'.\n" msgstr "Nedavni pokuÅ¡aj ažuriranja datoteke „%s“ nije uspio.\n" #: src/remake.c:444 #, c-format msgid "File '%s' was considered already.\n" msgstr "Datoteka „%s“ je već bila razmatrana.\n" #: src/remake.c:454 #, c-format msgid "Still updating file '%s'.\n" msgstr "Datoteka „%s“ se joÅ¡ uvijek ažurira.\n" #: src/remake.c:457 #, c-format msgid "Finished updating file '%s'.\n" msgstr "Ažuriranje datoteke „%s“ je zavrÅ¡eno.\n" #: src/remake.c:486 #, c-format msgid "File '%s' does not exist.\n" msgstr "Datoteka „%s“ ne postoji.\n" #: src/remake.c:494 #, c-format msgid "" "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp" msgstr "" "*** Upozorenje: .LOW_RESOLUTION_TIME datoteka „%s“ ima\n" " vremensku oznaku visoke rezolucije" #: src/remake.c:507 src/remake.c:1039 #, c-format msgid "Found an implicit rule for '%s'.\n" msgstr "PronaÄ‘eno je implicitno pravilo za „%s“.\n" #: src/remake.c:509 src/remake.c:1041 #, c-format msgid "No implicit rule found for '%s'.\n" msgstr "Nijedno implicitno pravilo nije pronaÄ‘eno za „%s“.\n" #: src/remake.c:515 #, c-format msgid "Using default recipe for '%s'.\n" msgstr "Rabi se zadani recept za „%s“.\n" #: src/remake.c:549 src/remake.c:1088 #, c-format msgid "Circular %s <- %s dependency dropped." msgstr "Kružna ovisnost %s <- %s je odbaÄena." #: src/remake.c:674 #, c-format msgid "Finished prerequisites of target file '%s'.\n" msgstr "Preduvjeti za ciljnu datoteku „%s“ su gotovi.\n" #: src/remake.c:680 #, c-format msgid "The prerequisites of '%s' are being made.\n" msgstr "Preduvjeti za „%s“ se izraÄ‘uju.\n" #: src/remake.c:694 #, c-format msgid "Giving up on target file '%s'.\n" msgstr "Odustaje se od izrade ciljne datoteke „%s“.\n" #: src/remake.c:699 #, c-format msgid "Target '%s' not remade because of errors." msgstr "Cilj „%s“ nije bio zbog greÅ¡aka ponovno izraÄ‘en." # Nisam siguran da sam ovo ispravno shvatio. # 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 #: src/remake.c:751 #, c-format msgid "Prerequisite '%s' is order-only for target '%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 (normalno, make uvijek preradi\n" "recepte kad god se izmjeni vremenska oznaka na bilo kojem objektu).\n" #: src/remake.c:756 #, c-format msgid "Prerequisite '%s' of target '%s' does not exist.\n" msgstr "Preduvjet „%s“ za cilj „%s“ ne postoji.\n" #: src/remake.c:761 #, c-format msgid "Prerequisite '%s' is newer than target '%s'.\n" msgstr "Preduvjet „%s“ je noviji nego od od njega ovisni cilj „%s“.\n" #: src/remake.c:764 #, c-format msgid "Prerequisite '%s' is older than target '%s'.\n" msgstr "Preduvjet „%s“ je stariji nego od od njega ovisni cilj „%s“.\n" #: src/remake.c:782 #, c-format msgid "Target '%s' is double-colon and has no prerequisites.\n" msgstr "Cilj „%s“ je s dvije dvotoÄke i nema preduvjeta.\n" #: src/remake.c:789 #, c-format msgid "No recipe for '%s' and no prerequisites actually changed.\n" msgstr "" "Nema recepta za „%s“ i zapravo nijedan od preduvjeta nije promijenjen.\n" #: src/remake.c:794 #, c-format msgid "Making '%s' due to always-make flag.\n" msgstr "„%s“ se zbog zastavice always-make ponovno izraÄ‘uje.\n" #: src/remake.c:802 #, c-format msgid "No need to remake target '%s'" msgstr "Nema potrebe preraditi cilj „%s“" #: src/remake.c:804 #, c-format msgid "; using VPATH name '%s'" msgstr "; rabi se naziv „%s“ za VPATH" #: src/remake.c:824 #, c-format msgid "Must remake target '%s'.\n" msgstr "Cilj „%s“ se mora preraditi.\n" #: src/remake.c:830 #, c-format msgid " Ignoring VPATH name '%s'.\n" msgstr " Zanemaruje se naziv „%s“ za VPATH.\n" #: src/remake.c:839 #, c-format msgid "Recipe of '%s' is being run.\n" msgstr "Recept za „%s“ se upravo izvrÅ¡ava.\n" #: src/remake.c:846 #, c-format msgid "Failed to remake target file '%s'.\n" msgstr "Prerada ciljne datoteke „%s“ nije uspjela.\n" #: src/remake.c:849 #, c-format msgid "Successfully remade target file '%s'.\n" msgstr "Ciljna datoteka „%s“ je uspjeÅ¡no preraÄ‘ena.\n" #: src/remake.c:852 #, c-format msgid "Target file '%s' needs to be remade under -q.\n" msgstr "Ciljnu datoteku „%s“ treba ponovno preraditi s opcijom -q.\n" #: src/remake.c:1047 #, c-format msgid "Using default commands for '%s'.\n" msgstr "Rabe se zadane naredbe za „%s“.\n" #: src/remake.c:1422 #, c-format msgid "Warning: File '%s' has modification time %s s in the future" msgstr "" "Upozorenje: Vremenska oznaka modifikacije datoteke „%s“ je za\n" " %s sekunda u budućnosti" #: src/remake.c:1662 #, c-format msgid ".LIBPATTERNS element '%s' is not a pattern" msgstr ".LIBPATTERNS Älan „%s“ nije uzorak" # Customs' is literal (a library name). See README.customs. #: src/remote-cstms.c:122 #, c-format msgid "Customs won't export: %s\n" msgstr "Customs nije moguće eksportirati: %s\n" #: src/rule.c:289 #, c-format msgid "warning: ignoring prerequisites on suffix rule definition" msgstr "" #: src/rule.c:530 msgid "" "\n" "# Implicit Rules" msgstr "" "\n" "# Implicitna pravila" #: src/rule.c:545 msgid "" "\n" "# No implicit rules." msgstr "" "\n" "# Nema implicitnih pravila." #: src/rule.c:548 #, c-format msgid "" "\n" "# %u implicit rules, %u (%.1f%%) terminal." msgstr "" "\n" "# %u implicitnih pravila, %u (%.1f%%) terminal" #: src/rule.c:557 #, c-format msgid "BUG: num_pattern_rules is wrong! %u != %u" msgstr "BUG: pogreÅ¡na num_pattern_rules! %u != %u" #: src/signame.c:84 msgid "unknown signal" msgstr "nepoznati signal" # Keep signal names in sync with GNU libc translations. #: src/signame.c:92 msgid "Hangup" msgstr "Terminal zatvoren (SIGHUP)" #: src/signame.c:95 msgid "Interrupt" msgstr "Prekini (SIGINT)" #: src/signame.c:98 msgid "Quit" msgstr "ZavrÅ¡i" #: src/signame.c:101 msgid "Illegal Instruction" msgstr "Nepropisna instrukcija" # Breakpoint trap just means the processor has hit a breakpoint.Your process is running more than one thread. #: src/signame.c:104 msgid "Trace/breakpoint trap" msgstr "Trace/breakpoint (SIGTRAP)" #: src/signame.c:109 msgid "Aborted" msgstr "Prekid (SIGABRT)" #: src/signame.c:112 msgid "IOT trap" msgstr "IOT zamka (SIGIOT)" #: src/signame.c:115 msgid "EMT trap" msgstr "EMT zamka (SIGEMT)" #: src/signame.c:118 msgid "Floating point exception" msgstr "Iznimka (broja) pomiÄnog zareza (SIGFPE)" #: src/signame.c:121 msgid "Killed" msgstr "Ubijen (SIGKILL)" #: src/signame.c:124 msgid "Bus error" msgstr "SabirniÄka greÅ¡ka (SIGBUS)" #: src/signame.c:127 msgid "Segmentation fault" msgstr "Segmentacijska greÅ¡ka (SIGSEGV)" #: src/signame.c:130 msgid "Bad system call" msgstr "LoÅ¡i sustavski poziv (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 #: src/signame.c:133 msgid "Broken pipe" msgstr "Prekinuta cijev (SIGPIPE)" #: src/signame.c:136 msgid "Alarm clock" msgstr "Budilica (SIGALRM)" #: src/signame.c:139 msgid "Terminated" msgstr "ZavrÅ¡eno (SIGTERM)" #: src/signame.c:142 msgid "User defined signal 1" msgstr "Korisnikom definiran signal 1 (SIGUSR1)" #: src/signame.c:145 msgid "User defined signal 2" msgstr "Korisnikom definiran signal 2 (SIGUSR2)" #: src/signame.c:150 src/signame.c:153 msgid "Child exited" msgstr "Potomak (child process) je zavrÅ¡io (SIGCHLD)" #: src/signame.c:156 msgid "Power failure" msgstr "Prekinuto napajanje (SIGPWR)" #: src/signame.c:159 msgid "Stopped" msgstr "Zaustavljeno" #: src/signame.c:162 msgid "Stopped (tty input)" msgstr "Zaustavljeno (tty ulaz) (SIGTTIN)" #: src/signame.c:165 msgid "Stopped (tty output)" msgstr "Zaustavljeno (tty izlaz) (SIGTTOU)" #: src/signame.c:168 msgid "Stopped (signal)" msgstr "Zaustavljeno (signal) (SIGSTOP)" #: src/signame.c:171 msgid "CPU time limit exceeded" msgstr "PrekoraÄeno je vremensko ograniÄenje procesora (SIGXCPU)" #: src/signame.c:174 msgid "File size limit exceeded" msgstr "PrekoraÄeno ograniÄenje veliÄine datoteke (SIGXFS2)" # Kako prevesti "virtual timer"? #: src/signame.c:177 msgid "Virtual timer expired" msgstr "Virtualni tajmer je istekao (SIGVTALRM)" # Kako prevesti "profiling timer"? #: src/signame.c:180 msgid "Profiling timer expired" msgstr "Isteklo je vrijeme za profiliranj (SIGPROF)" #: src/signame.c:186 msgid "Window changed" msgstr "Promjena veliÄine prozora (SIGWINCH)" #: src/signame.c:189 msgid "Continued" msgstr "Nastavlja se (SIGCONT)" #: src/signame.c:192 msgid "Urgent I/O condition" msgstr "Hitno U/I stanje" #: src/signame.c:199 src/signame.c:208 msgid "I/O possible" msgstr "U/I je sada moguć" # Jesu li ova dva signala vic ili Å¡to? U svakom sluÄaju, ovo su samo # descriptioni. Za svaki sluÄaj, nisam ih dirao. #: src/signame.c:202 msgid "SIGWIND" msgstr "SIGWIND" #: src/signame.c:205 msgid "SIGPHONE" msgstr "SIGPHONE" #: src/signame.c:211 msgid "Resource lost" msgstr "Resurs je izgubljen (SIGLOST)" #: src/signame.c:214 msgid "Danger signal" msgstr "Signal za opasnost (SIGDANGER)" #: src/signame.c:217 msgid "Information request" msgstr "Zahtjev za informacijom (SIGINFO)" #: src/signame.c:220 msgid "Floating point co-processor not available" msgstr "Koprocesor za rad s pomiÄnim zarezom/toÄkom nije dostupan (SIGNOFP)" #: src/strcache.c:274 #, c-format msgid "" "\n" "%s No strcache buffers\n" msgstr "" "\n" "%s Nema meÄ‘uspremnika za strcache\n" #: src/strcache.c:304 #, c-format msgid "" "\n" "%s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu " "B\n" msgstr "" "\n" "%s strcache meÄ‘uspremnici: %lu (%lu) / stringova = %lu\n" " pohrana = %lu B / prosjek = %lu B\n" #: src/strcache.c:308 #, c-format msgid "" "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B\n" msgstr "" "%s trenutaÄni meÄ‘uspremnik: veliÄina = %hu B / koriÅ¡teno = %hu B\n" " broj = %hu / prosjek = %u B\n" #: src/strcache.c:319 #, c-format msgid "%s other used: total = %lu B / count = %lu / avg = %lu B\n" msgstr "%s ostalo koriÅ¡teno: ukupno = %lu B / broj = %lu / prosjek = %lu B\n" #: src/strcache.c:322 #, c-format msgid "" "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n" msgstr "" "%s ostalo slobodno: ukupno = %lu B / max = %lu B / min = %lu B\n" " prosjek = %hu B\n" #: src/strcache.c:326 #, c-format msgid "" "\n" "%s strcache performance: lookups = %lu / hit rate = %lu%%\n" msgstr "" "\n" "%s strcache uÄinkovitost: pretraga = %lu / pogodaka = %lu%%\n" #: src/strcache.c:328 msgid "" "# hash-table stats:\n" "# " msgstr "" "# statistika hash-tablice:\n" "# " #: src/variable.c:1653 msgid "automatic" msgstr "automatsko" #: src/variable.c:1656 msgid "default" msgstr "zadano" #: src/variable.c:1659 msgid "environment" msgstr "okolina" #: src/variable.c:1662 msgid "makefile" msgstr "Makefile" #: src/variable.c:1665 msgid "environment under -e" msgstr "okolina pod -e" #: src/variable.c:1668 msgid "command line" msgstr "naredbeni redak" #: src/variable.c:1671 msgid "'override' directive" msgstr "„override“ direktiva" #: src/variable.c:1682 #, c-format msgid " (from '%s', line %lu)" msgstr " (iz „%s“, redak %lu)" # https://en.wikipedia.org/wiki/Hash_table #: src/variable.c:1745 msgid "# variable set hash-table stats:\n" msgstr "# statistika varijabli u hash-tablici:\n" #: src/variable.c:1756 msgid "" "\n" "# Variables\n" msgstr "" "\n" "# Varijable\n" #: src/variable.c:1760 msgid "" "\n" "# Pattern-specific Variable Values" msgstr "" "\n" "# Vrijednosti varijabli specifiÄne za uzorke" #: src/variable.c:1774 msgid "" "\n" "# No pattern-specific variable values." msgstr "" "\n" "# Nema vrijednosti varijabli specifiÄne za uzorke." #: src/variable.c:1776 #, c-format msgid "" "\n" "# %u pattern-specific variable values" msgstr "" "\n" "# %u vrijednosti varijabli specifiÄne za uzorke" #: src/variable.h:229 #, c-format msgid "warning: undefined variable '%.*s'" msgstr "upozorenje: nedefinirana varijabla %.*s" #: src/vmsfunctions.c:91 #, c-format msgid "sys$search() failed with %d\n" msgstr "neuspjeÅ¡na sys$search() s greÅ¡kom %d\n" #: src/vmsjobs.c:244 #, c-format msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n" msgstr "" "-upozorenje, možda ćete morati ponovno omogućiti obraÄ‘ivanje CTRL-Y iz DCL-" "a.\n" #: src/vmsjobs.c:681 #, c-format msgid "BUILTIN CD %s\n" msgstr "UGRAÄENI CD %s\n" #: src/vmsjobs.c:1224 #, c-format msgid "DCL: %s\n" msgstr "DCL: %s\n" #: src/vmsjobs.c:1284 #, c-format msgid "Append output to %s\n" msgstr "Izlaz pripojen na kraj %s\n" #: src/vmsjobs.c:1309 #, c-format msgid "Append %.*s and cleanup\n" msgstr "%.*s pripojiti i poÄistiti\n" #: src/vmsjobs.c:1322 #, c-format msgid "Executing %s instead\n" msgstr "Umjesto toga izvrÅ¡ava se %s\n" #: src/vpath.c:603 msgid "" "\n" "# VPATH Search Paths\n" msgstr "" "\n" "# VPATH staza za pretraživanje\n" #: src/vpath.c:620 msgid "# No 'vpath' search paths." msgstr "# Nema „vpath“ staze za pretraživanje." #: src/vpath.c:622 #, c-format msgid "" "\n" "# %u 'vpath' search paths.\n" msgstr "" "\n" "# %u „vpath“ staza za pretraživanje.\n" #: src/vpath.c:625 msgid "" "\n" "# No general ('VPATH' variable) search path." msgstr "" "\n" "# Nema općenite („VPATH“ varijable) staze za pretraživanje." #: src/vpath.c:631 msgid "" "\n" "# General ('VPATH' variable) search path:\n" "# " msgstr "" "\n" "# Općenita („VPATH“ varijabla) staza za pretraživanje:\n" "# " # If the ‘-j’ option is followed by an integer, this is the number of recipes to execute at once; this is called the number of job slots. If there is nothing looking like an integer after the ‘-j’ option, there is no limit on the number of job slots. The default number of job slots is one, which means serial execution (one thing at a time). #: src/w32/w32os.c:44 #, c-format msgid "Jobserver slots limited to %d\n" msgstr "Jobserver broj mjesta je ograniÄen na %d\n" #: src/w32/w32os.c:60 #, c-format msgid "creating jobserver semaphore: (Error %ld: %s)" msgstr "kreiranje semafora jobservera: (GreÅ¡ka %ld: %s)" #: src/w32/w32os.c:79 #, c-format msgid "" "internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)" msgstr "" "**interna greÅ¡ka**: nije moguće otvoriti semafor\n" " jobservera „%s“: (GreÅ¡ka %ld: %s)" #: src/w32/w32os.c:82 #, c-format msgid "Jobserver client (semaphore %s)\n" msgstr "Klijent jobservera (semafor %s)\n" #: src/w32/w32os.c:123 #, c-format msgid "release jobserver semaphore: (Error %ld: %s)" msgstr "oslobaÄ‘anje semafora jobservera: (GreÅ¡ka %ld: %s)" #: src/w32/w32os.c:194 #, c-format msgid "semaphore or child process wait: (Error %ld: %s)" msgstr "Äekanje na semafor ili na potomka (dijete-procesa): (GreÅ¡ka %ld: %s)" #~ msgid "%s: %s: Command not found\n" #~ msgstr "%s: %s: Naredba nije pronaÄ‘ena\n" #~ msgid "%s[%u]: %s: Command not found\n" #~ msgstr "%s[%u]: %s: Naredba nije pronaÄ‘ena\n" #~ msgid "%s: Shell program not found" #~ msgstr "%s: Shell program (ljuska: interpreter komandi) nije pronaÄ‘en" #~ msgid "%s is suspending for 30 seconds..." #~ msgstr "%s će spavati 30 sekundi..." #~ msgid "done sleep(30). Continuing.\n" #~ msgstr "proÅ¡lo je 30 sekunda spavanja. Nastavlja se.\n" #~ msgid "Unknown error %d" #~ msgstr "Nepoznata greÅ¡ka %d" #~ msgid "Warning: File '%s' has modification time in the future" #~ msgstr "" #~ "Upozorenje: Vremenska oznaka modifikacije datoteke „%s“ je u budućnosti" #~ msgid " terminal." #~ msgstr " terminal." #~ msgid "# Invalid value in `update_status' member!" #~ msgstr "# Nevaljana 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" #~ msgid "Invoking builtin recipe to update target `%s'.\n" #~ msgstr "Pozivam ugraÄ‘eni recept za ažuriranje mete „%sâ€.\n" #~ 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" # Å to bi ovdje trebalo ići? #~ msgid "write error" #~ msgstr "gresÌŒka pisanja" #~ msgid "%s # of strcache buffers: %d (* %d B/buffer = %d B)\n" #~ msgstr "%s # strcache meÄ‘uspremnika: %d (* %d B/meÄ‘uspremniku = %d B)\n" #~ msgid "" #~ "\n" #~ "# strcache hash-table stats:\n" #~ "# " #~ msgstr "" #~ "\n" #~ "# 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" # Nepožetene ili nepožnjete? #~ msgid "Got a SIGCHLD; %u unreaped children.\n" #~ msgstr "Dobio SIGCHLD; %u nepožetene djece.\n" #~ msgid "-warning, CTRL-Y will leave sub-process(es) around.\n" #~ msgstr "-upozorenje, CTRL-Y će ostaviti potproces(e) na životu.\n" #~ msgid "Do not specify -j or --jobs if sh.exe is not available." #~ msgstr "Nemojte koristiti -j ili --jobs ako sh.exe nije dostupan." #~ msgid "Resetting make for single job mode." #~ msgstr "Resetiram make u mÈd jednog posla." #~ 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" #~ "%sPARTICULAR PURPOSE.\n" #~ msgstr "" #~ "%sOvaj program je slobodan; u izvornom kodu nalaze se uvjeti kopiranja.\n" #~ "%sNema NIKAKVOG jamstva, Äak ni za PROIZVODNOST ili UPOTREBLJIVOST ZA\n" #~ "%sPOJEDINU SVRHU.\n" #~ msgid "extraneous `endef'" #~ msgstr "suviÅ¡an `endef'" #~ msgid "empty `override' directive" #~ msgstr "prazna direktiva `ovverride'" #~ msgid "invalid `override' directive" #~ msgstr "neispravna direktiva `override'" #~ msgid "no file name for `%sinclude'" #~ msgstr "nedostaje naziv spisa za `%sinclude'" #~ msgid "target `%s' leaves prerequisite pattern empty" #~ msgstr "meta `%s' ostavlja prerekvizitni uzorak praznim" #~ msgid "" #~ "\n" #~ "# No files." #~ msgstr "" #~ "\n" #~ "# Nijedan spis." #~ msgid "" #~ "\n" #~ "# %u files in %u hash buckets.\n" #~ msgstr "" #~ "\n" #~ "# %u spisa u %u rasprÅ¡enih džepova.\n" #~ msgid "# average %.3f files per bucket, max %u files in one bucket.\n" #~ msgstr "# prosjeÄno %.3f spisa po džepu, maks. %u spisa u jednom džepu.\n" #~ msgid "DIRECTORY" #~ msgstr "DIREKTORIJ" #~ msgid "Change to DIRECTORY before doing anything" #~ msgstr "Promijeni u DIREKTORIJ prije nego Å¡to iÅ¡ta napraviÅ¡" #~ msgid "FLAGS" #~ msgstr "ZASTAVICE" #~ msgid "Suspend process to allow a debugger to attach" #~ msgstr "Zaustavi proces tako da se debugger može zakaÄiti" #~ msgid "Environment variables override makefiles" #~ msgstr "Varijable iz okoliÅ¡a imaju veću važnost od makefilea" #~ msgid "FILE" #~ msgstr "SPIS" #~ msgid "Read FILE as a makefile" #~ msgstr "ProÄitaj SPIS kao makefile" #~ msgid "Search DIRECTORY for included makefiles" #~ msgstr "Pretraži DIREKTORIJ za ukljuÄenim makefileovima" #~ msgid "Don't start multiple jobs unless load is below N" #~ msgstr "Ne pokreći viÅ¡estruke poslove osim ako je opterećenje ispod N" #~ msgid "Don't actually run any commands; just print them" #~ msgstr "Nemoj zapravo pokrenuti nijednu naredbu; samo ih ispiÅ¡i" #~ msgid "Consider FILE to be very old and don't remake it" #~ msgstr "Pretpostavi da je SPIS vrlo star i nemoj ga ponovo napraviti" #~ msgid "Don't echo commands" #~ msgstr "Ne ispisuj naredbe" #~ msgid "Turns off -k" #~ msgstr "IskljuÄuje -k" #~ msgid "Consider FILE to be infinitely new" #~ msgstr "Smatraj SPIS beskonaÄno novim" #~ msgid "Entering" #~ msgstr "Ulazim u" #~ msgid "Leaving" #~ msgstr "Izlazim iz" #~ msgid "# No variables." #~ msgstr "# Nema varijabli." #~ msgid "# average of %.1f variables per bucket, max %u in one bucket.\n" #~ msgstr "# prosjeÄno %.1f varijabli po džepu, maks. %u u jednom džepu.\n" #~ msgid "# average of %d.%d variables per bucket, max %u in one bucket.\n" #~ msgstr "# prosjeÄno %d.%d varijabli po džepu, maks. %u u jednom džepu.\n" make-4.3/po/quot.sed0000644000175000017500000000023113611136462011320 00000000000000s/"\([^"]*\)"/“\1â€/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“â€/""/g make-4.3/po/make.pot0000644000175000017500000011134713611136530011303 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the GNU make package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: GNU make 4.3\n" "Report-Msgid-Bugs-To: bug-make@gnu.org\n" "POT-Creation-Date: 2020-01-19 15:34-0500\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: src/ar.c:46 #, c-format msgid "attempt to use unsupported feature: '%s'" msgstr "" #: src/ar.c:123 #, c-format msgid "touch archive member is not available on VMS" msgstr "" #: src/ar.c:147 #, c-format msgid "touch: Archive '%s' does not exist" msgstr "" #: src/ar.c:150 #, c-format msgid "touch: '%s' is not a valid archive" msgstr "" #: src/ar.c:157 #, c-format msgid "touch: Member '%s' does not exist in '%s'" msgstr "" #: src/ar.c:164 #, c-format msgid "touch: Bad return code from ar_member_touch on '%s'" msgstr "" #: src/arscan.c:130 #, c-format msgid "lbr$set_module() failed to extract module info, status = %d" msgstr "" #: src/arscan.c:236 #, c-format msgid "lbr$ini_control() failed with status = %d" msgstr "" #: src/arscan.c:261 #, c-format msgid "unable to open library '%s' to lookup member status %d" msgstr "" #: src/arscan.c:944 #, c-format msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n" msgstr "" #: src/arscan.c:945 msgid " (name might be truncated)" msgstr "" #: src/arscan.c:947 #, c-format msgid " Date %s" msgstr "" #: src/arscan.c:948 #, c-format msgid " uid = %d, gid = %d, mode = 0%o.\n" msgstr "" #: src/commands.c:403 #, c-format msgid "Recipe has too many lines (%ud)" msgstr "" #: src/commands.c:504 msgid "*** Break.\n" msgstr "" #: src/commands.c:628 #, c-format msgid "*** [%s] Archive member '%s' may be bogus; not deleted" msgstr "" #: src/commands.c:632 #, c-format msgid "*** Archive member '%s' may be bogus; not deleted" msgstr "" #: src/commands.c:646 #, c-format msgid "*** [%s] Deleting file '%s'" msgstr "" #: src/commands.c:648 #, c-format msgid "*** Deleting file '%s'" msgstr "" #: src/commands.c:684 msgid "# recipe to execute" msgstr "" #: src/commands.c:687 msgid " (built-in):" msgstr "" #: src/commands.c:689 #, c-format msgid " (from '%s', line %lu):\n" msgstr "" #: src/dir.c:1073 msgid "" "\n" "# Directories\n" msgstr "" #: src/dir.c:1085 #, c-format msgid "# %s: could not be stat'd.\n" msgstr "" #: src/dir.c:1089 msgid "# %s (key %s, mtime %I64u): could not be opened.\n" msgstr "" #: src/dir.c:1094 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n" msgstr "" #: src/dir.c:1099 #, c-format msgid "# %s (device %ld, inode %ld): could not be opened.\n" msgstr "" #: src/dir.c:1126 msgid "# %s (key %s, mtime %I64u): " msgstr "" #: src/dir.c:1131 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): " msgstr "" #: src/dir.c:1136 #, c-format msgid "# %s (device %ld, inode %ld): " msgstr "" #: src/dir.c:1142 src/dir.c:1163 msgid "No" msgstr "" #: src/dir.c:1145 src/dir.c:1166 msgid " files, " msgstr "" #: src/dir.c:1147 src/dir.c:1168 msgid "no" msgstr "" #: src/dir.c:1150 msgid " impossibilities" msgstr "" #: src/dir.c:1154 msgid " so far." msgstr "" #: src/dir.c:1171 #, c-format msgid " impossibilities in %lu directories.\n" msgstr "" #: src/expand.c:125 #, c-format msgid "Recursive variable '%s' references itself (eventually)" msgstr "" #: src/expand.c:271 #, c-format msgid "unterminated variable reference" msgstr "" #: src/file.c:278 #, c-format msgid "Recipe was specified for file '%s' at %s:%lu," msgstr "" #: src/file.c:283 #, c-format msgid "Recipe for file '%s' was found by implicit rule search," msgstr "" #: src/file.c:287 #, c-format msgid "but '%s' is now considered the same file as '%s'." msgstr "" #: src/file.c:290 #, c-format msgid "Recipe for '%s' will be ignored in favor of the one for '%s'." msgstr "" #: src/file.c:310 #, c-format msgid "can't rename single-colon '%s' to double-colon '%s'" msgstr "" #: src/file.c:316 #, c-format msgid "can't rename double-colon '%s' to single-colon '%s'" msgstr "" #: src/file.c:408 #, c-format msgid "*** Deleting intermediate file '%s'" msgstr "" #: src/file.c:412 #, c-format msgid "Removing intermediate files...\n" msgstr "" #: src/file.c:872 msgid "Current time" msgstr "" #: src/file.c:876 #, c-format msgid "%s: Timestamp out of range; substituting %s" msgstr "" #: src/file.c:1016 msgid "# Not a target:" msgstr "" #: src/file.c:1021 msgid "# Precious file (prerequisite of .PRECIOUS)." msgstr "" #: src/file.c:1023 msgid "# Phony target (prerequisite of .PHONY)." msgstr "" #: src/file.c:1025 msgid "# Command line target." msgstr "" #: src/file.c:1027 msgid "# A default, MAKEFILES, or -include/sinclude makefile." msgstr "" #: src/file.c:1029 msgid "# Builtin rule" msgstr "" #: src/file.c:1031 msgid "# Implicit rule search has been done." msgstr "" #: src/file.c:1032 msgid "# Implicit rule search has not been done." msgstr "" #: src/file.c:1034 #, c-format msgid "# Implicit/static pattern stem: '%s'\n" msgstr "" #: src/file.c:1036 msgid "# File is an intermediate prerequisite." msgstr "" #: src/file.c:1040 msgid "# Also makes:" msgstr "" #: src/file.c:1046 msgid "# Modification time never checked." msgstr "" #: src/file.c:1048 msgid "# File does not exist." msgstr "" #: src/file.c:1050 msgid "# File is very old." msgstr "" #: src/file.c:1055 #, c-format msgid "# Last modified %s\n" msgstr "" #: src/file.c:1058 msgid "# File has been updated." msgstr "" #: src/file.c:1058 msgid "# File has not been updated." msgstr "" #: src/file.c:1062 msgid "# Recipe currently running (THIS IS A BUG)." msgstr "" #: src/file.c:1065 msgid "# Dependencies recipe running (THIS IS A BUG)." msgstr "" #: src/file.c:1074 msgid "# Successfully updated." msgstr "" #: src/file.c:1078 msgid "# Needs to be updated (-q is set)." msgstr "" #: src/file.c:1081 msgid "# Failed to be updated." msgstr "" #: src/file.c:1086 msgid "# Invalid value in 'command_state' member!" msgstr "" #: src/file.c:1105 msgid "" "\n" "# Files" msgstr "" #: src/file.c:1109 msgid "" "\n" "# files hash-table stats:\n" "# " msgstr "" #: src/file.c:1119 #, c-format msgid "%s: Field '%s' not cached: %s" msgstr "" #: src/function.c:794 msgid "non-numeric first argument to 'word' function" msgstr "" #: src/function.c:799 #, c-format msgid "first argument to 'word' function must be greater than 0" msgstr "" #: src/function.c:819 msgid "non-numeric first argument to 'wordlist' function" msgstr "" #: src/function.c:821 msgid "non-numeric second argument to 'wordlist' function" msgstr "" #: src/function.c:1533 #, c-format msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n" msgstr "" #: src/function.c:1557 #, c-format msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n" msgstr "" #: src/function.c:1564 #, c-format msgid "CreatePipe() failed (e=%ld)\n" msgstr "" #: src/function.c:1572 #, c-format msgid "windows32_openpipe(): process_init_fd() failed\n" msgstr "" #: src/function.c:1857 #, c-format msgid "Cleaning up temporary batch file %s\n" msgstr "" #: src/function.c:2230 src/function.c:2255 #, c-format msgid "file: missing filename" msgstr "" #: src/function.c:2234 src/function.c:2265 #, c-format msgid "open: %s: %s" msgstr "" #: src/function.c:2242 #, c-format msgid "write: %s: %s" msgstr "" #: src/function.c:2245 src/function.c:2282 #, c-format msgid "close: %s: %s" msgstr "" #: src/function.c:2258 #, c-format msgid "file: too many arguments" msgstr "" #: src/function.c:2277 #, c-format msgid "read: %s: %s" msgstr "" #: src/function.c:2290 #, c-format msgid "file: invalid file operation: %s" msgstr "" #: src/function.c:2405 #, c-format msgid "insufficient number of arguments (%d) to function '%s'" msgstr "" #: src/function.c:2417 #, c-format msgid "unimplemented on this platform: function '%s'" msgstr "" #: src/function.c:2483 #, c-format msgid "unterminated call to function '%s': missing '%c'" msgstr "" #: src/function.c:2667 #, c-format msgid "Empty function name" msgstr "" #: src/function.c:2669 #, c-format msgid "Invalid function name: %s" msgstr "" #: src/function.c:2671 #, c-format msgid "Function name too long: %s" msgstr "" #: src/function.c:2674 #, c-format msgid "Invalid minimum argument count (%u) for function %s" msgstr "" #: src/function.c:2677 #, c-format msgid "Invalid maximum argument count (%u) for function %s" msgstr "" #: src/getopt.c:659 #, c-format msgid "%s: option '%s' is ambiguous\n" msgstr "" #: src/getopt.c:683 #, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "" #: src/getopt.c:688 #, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "" #: src/getopt.c:705 src/getopt.c:878 #, c-format msgid "%s: option '%s' requires an argument\n" msgstr "" #: src/getopt.c:734 #, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "" #: src/getopt.c:738 #, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "" #: src/getopt.c:764 #, c-format msgid "%s: illegal option -- %c\n" msgstr "" #: src/getopt.c:767 #, c-format msgid "%s: invalid option -- %c\n" msgstr "" #: src/getopt.c:797 src/getopt.c:927 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "" #: src/getopt.c:844 #, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "" #: src/getopt.c:862 #, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "" #: src/guile.c:58 #, c-format msgid "guile: Expanding '%s'\n" msgstr "" #: src/guile.c:74 #, c-format msgid "guile: Evaluating '%s'\n" msgstr "" #: src/hash.c:50 #, c-format msgid "can't allocate %lu bytes for hash table: memory exhausted" msgstr "" #: src/hash.c:280 #, c-format msgid "Load=%lu/%lu=%.0f%%, " msgstr "" #: src/hash.c:282 #, c-format msgid "Rehash=%u, " msgstr "" #: src/hash.c:283 #, c-format msgid "Collisions=%lu/%lu=%.0f%%" msgstr "" #: src/implicit.c:38 #, c-format msgid "Looking for an implicit rule for '%s'.\n" msgstr "" #: src/implicit.c:54 #, c-format msgid "Looking for archive-member implicit rule for '%s'.\n" msgstr "" #: src/implicit.c:311 #, c-format msgid "Avoiding implicit rule recursion.\n" msgstr "" #: src/implicit.c:484 #, c-format msgid "Stem too long: '%s%.*s'.\n" msgstr "" #: src/implicit.c:490 #, c-format msgid "Trying pattern rule with stem '%.*s'.\n" msgstr "" #: src/implicit.c:717 #, c-format msgid "Rejecting impossible rule prerequisite '%s'.\n" msgstr "" #: src/implicit.c:718 #, c-format msgid "Rejecting impossible implicit prerequisite '%s'.\n" msgstr "" #: src/implicit.c:732 #, c-format msgid "Trying rule prerequisite '%s'.\n" msgstr "" #: src/implicit.c:733 #, c-format msgid "Trying implicit prerequisite '%s'.\n" msgstr "" #: src/implicit.c:772 #, c-format msgid "Found prerequisite '%s' as VPATH '%s'\n" msgstr "" #: src/implicit.c:786 #, c-format msgid "Looking for a rule with intermediate file '%s'.\n" msgstr "" #: src/job.c:370 msgid "Cannot create a temporary file\n" msgstr "" #: src/job.c:548 msgid " (core dumped)" msgstr "" #: src/job.c:553 msgid " (ignored)" msgstr "" #: src/job.c:557 src/job.c:1892 msgid "" msgstr "" #: src/job.c:573 #, c-format msgid "%s[%s: %s] Error %d%s" msgstr "" #: src/job.c:662 #, c-format msgid "*** Waiting for unfinished jobs...." msgstr "" #: src/job.c:704 #, c-format msgid "Live child %p (%s) PID %s %s\n" msgstr "" #: src/job.c:706 src/job.c:900 src/job.c:1072 src/job.c:1644 #, c-format msgid " (remote)" msgstr "" #: src/job.c:898 #, c-format msgid "Reaping winning child %p PID %s %s\n" msgstr "" #: src/job.c:899 #, c-format msgid "Reaping losing child %p PID %s %s\n" msgstr "" #: src/job.c:950 #, c-format msgid "Cleaning up temp batch file %s\n" msgstr "" #: src/job.c:956 #, c-format msgid "Cleaning up temp batch file %s failed (%d)\n" msgstr "" #: src/job.c:1071 #, c-format msgid "Removing child %p PID %s%s from chain.\n" msgstr "" #: src/job.c:1120 #, c-format msgid "Released token for child %p (%s).\n" msgstr "" #: src/job.c:1575 src/job.c:2487 #, c-format msgid "process_easy() failed to launch process (e=%ld)\n" msgstr "" #: src/job.c:1579 src/job.c:2491 #, c-format msgid "" "\n" "Counted %d args in failed launch\n" msgstr "" #: src/job.c:1642 #, c-format msgid "Putting child %p (%s) PID %s%s on the chain.\n" msgstr "" #: src/job.c:1875 #, c-format msgid "Obtained token for child %p (%s).\n" msgstr "" #: src/job.c:1902 #, c-format msgid "%s: target '%s' does not exist" msgstr "" #: src/job.c:1905 #, c-format msgid "%s: update target '%s' due to: %s" msgstr "" #: src/job.c:2108 #, c-format msgid "cannot enforce load limits on this operating system" msgstr "" #: src/job.c:2110 msgid "cannot enforce load limit: " msgstr "" #: src/job.c:2200 #, c-format msgid "no more file handles: could not duplicate stdin\n" msgstr "" #: src/job.c:2212 #, c-format msgid "no more file handles: could not duplicate stdout\n" msgstr "" #: src/job.c:2226 #, c-format msgid "no more file handles: could not duplicate stderr\n" msgstr "" #: src/job.c:2241 #, c-format msgid "Could not restore stdin\n" msgstr "" #: src/job.c:2249 #, c-format msgid "Could not restore stdout\n" msgstr "" #: src/job.c:2257 #, c-format msgid "Could not restore stderr\n" msgstr "" #: src/job.c:2520 #, c-format msgid "make reaped child pid %s, still waiting for pid %s\n" msgstr "" #: src/job.c:2623 #, c-format msgid "spawnvpe: environment space might be exhausted" msgstr "" #: src/job.c:2862 #, c-format msgid "$SHELL changed (was '%s', now '%s')\n" msgstr "" #: src/job.c:3300 src/job.c:3485 #, c-format msgid "Creating temporary batch file %s\n" msgstr "" #: src/job.c:3308 #, c-format msgid "" "Batch file contents:\n" "\t@echo off\n" msgstr "" #: src/job.c:3497 #, c-format msgid "" "Batch file contents:%s\n" "\t%s\n" msgstr "" #: src/job.c:3605 #, c-format msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n" msgstr "" #: src/load.c:60 #, c-format msgid "Failed to open global symbol table: %s" msgstr "" #: src/load.c:97 #, c-format msgid "Loaded object %s is not declared to be GPL compatible" msgstr "" #: src/load.c:104 #, c-format msgid "Failed to load symbol %s from %s: %s" msgstr "" #: src/load.c:149 #, c-format msgid "Empty symbol name for load: %s" msgstr "" #: src/load.c:204 #, c-format msgid "Loading symbol %s from %s\n" msgstr "" #: src/load.c:256 #, c-format msgid "The 'load' operation is not supported on this platform." msgstr "" #: src/main.c:335 msgid "Options:\n" msgstr "" #: src/main.c:336 msgid " -b, -m Ignored for compatibility.\n" msgstr "" #: src/main.c:338 msgid " -B, --always-make Unconditionally make all targets.\n" msgstr "" #: src/main.c:340 msgid "" " -C DIRECTORY, --directory=DIRECTORY\n" " Change to DIRECTORY before doing anything.\n" msgstr "" #: src/main.c:343 msgid " -d Print lots of debugging information.\n" msgstr "" #: src/main.c:345 msgid "" " --debug[=FLAGS] Print various types of debugging information.\n" msgstr "" #: src/main.c:347 msgid "" " -e, --environment-overrides\n" " Environment variables override makefiles.\n" msgstr "" #: src/main.c:350 msgid "" " -E STRING, --eval=STRING Evaluate STRING as a makefile statement.\n" msgstr "" #: src/main.c:352 msgid "" " -f FILE, --file=FILE, --makefile=FILE\n" " Read FILE as a makefile.\n" msgstr "" #: src/main.c:355 msgid " -h, --help Print this message and exit.\n" msgstr "" #: src/main.c:357 msgid " -i, --ignore-errors Ignore errors from recipes.\n" msgstr "" #: src/main.c:359 msgid "" " -I DIRECTORY, --include-dir=DIRECTORY\n" " Search DIRECTORY for included makefiles.\n" msgstr "" #: src/main.c:362 msgid "" " -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no " "arg.\n" msgstr "" #: src/main.c:364 msgid "" " -k, --keep-going Keep going when some targets can't be made.\n" msgstr "" #: src/main.c:366 msgid "" " -l [N], --load-average[=N], --max-load[=N]\n" " Don't start multiple jobs unless load is below " "N.\n" msgstr "" #: src/main.c:369 msgid "" " -L, --check-symlink-times Use the latest mtime between symlinks and " "target.\n" msgstr "" #: src/main.c:371 msgid "" " -n, --just-print, --dry-run, --recon\n" " Don't actually run any recipe; just print " "them.\n" msgstr "" #: src/main.c:374 msgid "" " -o FILE, --old-file=FILE, --assume-old=FILE\n" " Consider FILE to be very old and don't remake " "it.\n" msgstr "" #: src/main.c:377 msgid "" " -O[TYPE], --output-sync[=TYPE]\n" " Synchronize output of parallel jobs by TYPE.\n" msgstr "" #: src/main.c:380 msgid " -p, --print-data-base Print make's internal database.\n" msgstr "" #: src/main.c:382 msgid "" " -q, --question Run no recipe; exit status says if up to " "date.\n" msgstr "" #: src/main.c:384 msgid " -r, --no-builtin-rules Disable the built-in implicit rules.\n" msgstr "" #: src/main.c:386 msgid " -R, --no-builtin-variables Disable the built-in variable settings.\n" msgstr "" #: src/main.c:388 msgid " -s, --silent, --quiet Don't echo recipes.\n" msgstr "" #: src/main.c:390 msgid " --no-silent Echo recipes (disable --silent mode).\n" msgstr "" #: src/main.c:392 msgid "" " -S, --no-keep-going, --stop\n" " Turns off -k.\n" msgstr "" #: src/main.c:395 msgid " -t, --touch Touch targets instead of remaking them.\n" msgstr "" #: src/main.c:397 msgid " --trace Print tracing information.\n" msgstr "" #: src/main.c:399 msgid "" " -v, --version Print the version number of make and exit.\n" msgstr "" #: src/main.c:401 msgid " -w, --print-directory Print the current directory.\n" msgstr "" #: src/main.c:403 msgid "" " --no-print-directory Turn off -w, even if it was turned on " "implicitly.\n" msgstr "" #: src/main.c:405 msgid "" " -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n" " Consider FILE to be infinitely new.\n" msgstr "" #: src/main.c:408 msgid "" " --warn-undefined-variables Warn when an undefined variable is " "referenced.\n" msgstr "" #: src/main.c:671 #, c-format msgid "empty string invalid as file name" msgstr "" #: src/main.c:754 #, c-format msgid "unknown debug level specification '%s'" msgstr "" #: src/main.c:794 #, c-format msgid "unknown output-sync type '%s'" msgstr "" #: src/main.c:849 #, c-format msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n" msgstr "" #: src/main.c:856 #, c-format msgid "" "\n" "Unhandled exception filter called from program %s\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" msgstr "" #: src/main.c:864 #, c-format msgid "Access violation: write operation at address 0x%p\n" msgstr "" #: src/main.c:865 #, c-format msgid "Access violation: read operation at address 0x%p\n" msgstr "" #: src/main.c:941 src/main.c:956 #, c-format msgid "find_and_set_shell() setting default_shell = %s\n" msgstr "" #: src/main.c:1009 #, c-format msgid "find_and_set_shell() path search set default_shell = %s\n" msgstr "" #: src/main.c:1609 #, c-format msgid "" "warning: jobserver unavailable: using -j1. Add '+' to parent make rule." msgstr "" #: src/main.c:1617 #, c-format msgid "warning: -j%d forced in submake: resetting jobserver mode." msgstr "" #: src/main.c:1781 #, c-format msgid "Makefile from standard input specified twice." msgstr "" #: src/main.c:1819 src/vmsjobs.c:1248 msgid "fopen (temporary file)" msgstr "" #: src/main.c:1825 msgid "fwrite (temporary file)" msgstr "" #: src/main.c:2004 #, c-format msgid "warning: -j%d forced in makefile: resetting jobserver mode." msgstr "" #: src/main.c:2068 #, c-format msgid "Parallel jobs (-j) are not supported on this platform." msgstr "" #: src/main.c:2069 #, c-format msgid "Resetting to single job (-j1) mode." msgstr "" #: src/main.c:2109 #, c-format msgid "Symbolic links not supported: disabling -L." msgstr "" #: src/main.c:2190 #, c-format msgid "Updating makefiles....\n" msgstr "" #: src/main.c:2226 #, c-format msgid "Makefile '%s' might loop; not remaking it.\n" msgstr "" #: src/main.c:2303 #, c-format msgid "Failed to remake makefile '%s'." msgstr "" #: src/main.c:2323 #, c-format msgid "Included makefile '%s' was not found." msgstr "" #: src/main.c:2328 #, c-format msgid "Makefile '%s' was not found" msgstr "" #: src/main.c:2394 #, c-format msgid "Couldn't change back to original directory." msgstr "" #: src/main.c:2402 #, c-format msgid "Re-executing[%u]:" msgstr "" #: src/main.c:2522 msgid "unlink (temporary file): " msgstr "" #: src/main.c:2555 #, c-format msgid ".DEFAULT_GOAL contains more than one target" msgstr "" #: src/main.c:2579 #, c-format msgid "No targets" msgstr "" #: src/main.c:2581 #, c-format msgid "No targets specified and no makefile found" msgstr "" #: src/main.c:2586 #, c-format msgid "Updating goal targets....\n" msgstr "" #: src/main.c:2610 #, c-format msgid "warning: Clock skew detected. Your build may be incomplete." msgstr "" #: src/main.c:2804 #, c-format msgid "Usage: %s [options] [target] ...\n" msgstr "" #: src/main.c:2810 #, c-format msgid "" "\n" "This program built for %s\n" msgstr "" #: src/main.c:2812 #, c-format msgid "" "\n" "This program built for %s (%s)\n" msgstr "" #: src/main.c:2815 #, c-format msgid "Report bugs to \n" msgstr "" #: src/main.c:2901 #, c-format msgid "the '%s%s' option requires a non-empty string argument" msgstr "" #: src/main.c:2965 #, c-format msgid "the '-%c' option requires a positive integer argument" msgstr "" #: src/main.c:3363 #, c-format msgid "%sBuilt for %s\n" msgstr "" #: src/main.c:3365 #, c-format msgid "%sBuilt for %s (%s)\n" msgstr "" #: src/main.c:3376 #, c-format msgid "" "%sLicense GPLv3+: GNU GPL version 3 or later \n" "%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 "" #: src/main.c:3397 #, c-format msgid "" "\n" "# Make data base, printed on %s" msgstr "" #: src/main.c:3407 #, c-format msgid "" "\n" "# Finished Make data base on %s\n" msgstr "" #: src/misc.c:643 #, c-format msgid "%s: user %lu (real %lu), group %lu (real %lu)\n" msgstr "" #: src/misc.c:664 msgid "Initialized access" msgstr "" #: src/misc.c:743 msgid "User access" msgstr "" #: src/misc.c:791 msgid "Make access" msgstr "" #: src/misc.c:825 msgid "Child access" msgstr "" #: src/output.c:97 #, c-format msgid "%s: Entering an unknown directory\n" msgstr "" #: src/output.c:99 #, c-format msgid "%s: Leaving an unknown directory\n" msgstr "" #: src/output.c:102 #, c-format msgid "%s: Entering directory '%s'\n" msgstr "" #: src/output.c:104 #, c-format msgid "%s: Leaving directory '%s'\n" msgstr "" #: src/output.c:108 #, c-format msgid "%s[%u]: Entering an unknown directory\n" msgstr "" #: src/output.c:110 #, c-format msgid "%s[%u]: Leaving an unknown directory\n" msgstr "" #: src/output.c:113 #, c-format msgid "%s[%u]: Entering directory '%s'\n" msgstr "" #: src/output.c:115 #, c-format msgid "%s[%u]: Leaving directory '%s'\n" msgstr "" #: src/output.c:442 src/output.c:444 #, c-format msgid "write error: stdout" msgstr "" #: src/output.c:624 msgid ". Stop.\n" msgstr "" #: src/output.c:658 #, c-format msgid "%s%s: %s" msgstr "" #: src/output.c:667 #, c-format msgid "%s: %s" msgstr "" #: src/output.h:62 #, c-format msgid "-O[TYPE] (--output-sync[=TYPE]) is not configured for this build." msgstr "" #: src/posixos.c:90 msgid "creating jobs pipe" msgstr "" #: src/posixos.c:98 src/posixos.c:251 msgid "duping jobs pipe" msgstr "" #: src/posixos.c:104 msgid "init jobserver pipe" msgstr "" #: src/posixos.c:119 #, c-format msgid "internal error: invalid --jobserver-auth string '%s'" msgstr "" #: src/posixos.c:122 #, c-format msgid "Jobserver client (fds %d,%d)\n" msgstr "" #: src/posixos.c:138 msgid "jobserver pipeline" msgstr "" #: src/posixos.c:186 msgid "write jobserver" msgstr "" #: src/posixos.c:300 #, c-format msgid "job server shut down" msgstr "" #: src/posixos.c:303 msgid "pselect jobs pipe" msgstr "" #: src/posixos.c:319 src/posixos.c:433 msgid "read jobs pipe" msgstr "" #: src/read.c:181 #, c-format msgid "Reading makefiles...\n" msgstr "" #: src/read.c:336 #, c-format msgid "Reading makefile '%s'" msgstr "" #: src/read.c:338 #, c-format msgid " (no default goal)" msgstr "" #: src/read.c:340 #, c-format msgid " (search path)" msgstr "" #: src/read.c:342 #, c-format msgid " (don't care)" msgstr "" #: src/read.c:344 #, c-format msgid " (no ~ expansion)" msgstr "" #: src/read.c:655 #, c-format msgid "Skipping UTF-8 BOM in makefile '%s'\n" msgstr "" #: src/read.c:658 #, c-format msgid "Skipping UTF-8 BOM in makefile buffer\n" msgstr "" #: src/read.c:787 #, c-format msgid "invalid syntax in conditional" msgstr "" #: src/read.c:960 #, c-format msgid "%s: failed to load" msgstr "" #: src/read.c:986 #, c-format msgid "recipe commences before first target" msgstr "" #: src/read.c:1035 #, c-format msgid "missing rule before recipe" msgstr "" #: src/read.c:1136 #, c-format msgid "missing separator (did you mean TAB instead of 8 spaces?)" msgstr "" #: src/read.c:1138 #, c-format msgid "missing separator" msgstr "" #: src/read.c:1283 #, c-format msgid "missing target pattern" msgstr "" #: src/read.c:1285 #, c-format msgid "multiple target patterns" msgstr "" #: src/read.c:1289 #, c-format msgid "target pattern contains no '%%'" msgstr "" #: src/read.c:1404 #, c-format msgid "missing 'endif'" msgstr "" #: src/read.c:1443 src/read.c:1488 src/variable.c:1600 #, c-format msgid "empty variable name" msgstr "" #: src/read.c:1478 #, c-format msgid "extraneous text after 'define' directive" msgstr "" #: src/read.c:1503 #, c-format msgid "missing 'endef', unterminated 'define'" msgstr "" #: src/read.c:1531 #, c-format msgid "extraneous text after 'endef' directive" msgstr "" #: src/read.c:1603 #, c-format msgid "extraneous text after '%s' directive" msgstr "" #: src/read.c:1604 #, c-format msgid "extraneous '%s'" msgstr "" #: src/read.c:1632 #, c-format msgid "only one 'else' per conditional" msgstr "" #: src/read.c:1908 #, c-format msgid "Malformed target-specific variable definition" msgstr "" #: src/read.c:1968 #, c-format msgid "prerequisites cannot be defined in recipes" msgstr "" #: src/read.c:1986 #, c-format msgid "grouped targets must provide a recipe" msgstr "" #: src/read.c:2029 #, c-format msgid "mixed implicit and static pattern rules" msgstr "" #: src/read.c:2052 #, c-format msgid "mixed implicit and normal rules" msgstr "" #: src/read.c:2107 #, c-format msgid "target '%s' doesn't match the target pattern" msgstr "" #: src/read.c:2122 src/read.c:2168 #, c-format msgid "target file '%s' has both : and :: entries" msgstr "" #: src/read.c:2128 #, c-format msgid "target '%s' given more than once in the same rule" msgstr "" #: src/read.c:2138 #, c-format msgid "warning: overriding recipe for target '%s'" msgstr "" #: src/read.c:2141 #, c-format msgid "warning: ignoring old recipe for target '%s'" msgstr "" #: src/read.c:2254 #, c-format msgid "*** mixed implicit and normal rules: deprecated syntax" msgstr "" #: src/read.c:2271 #, c-format msgid "warning: overriding group membership for target '%s'" msgstr "" #: src/read.c:2636 #, c-format msgid "warning: NUL character seen; rest of line ignored" msgstr "" #: src/remake.c:226 #, c-format msgid "Nothing to be done for '%s'." msgstr "" #: src/remake.c:227 #, c-format msgid "'%s' is up to date." msgstr "" #: src/remake.c:323 #, c-format msgid "Pruning file '%s'.\n" msgstr "" #: src/remake.c:389 #, c-format msgid "%sNo rule to make target '%s', needed by '%s'%s" msgstr "" #: src/remake.c:399 #, c-format msgid "%sNo rule to make target '%s'%s" msgstr "" #: src/remake.c:425 #, c-format msgid "Considering target file '%s'.\n" msgstr "" #: src/remake.c:432 #, c-format msgid "Recently tried and failed to update file '%s'.\n" msgstr "" #: src/remake.c:444 #, c-format msgid "File '%s' was considered already.\n" msgstr "" #: src/remake.c:454 #, c-format msgid "Still updating file '%s'.\n" msgstr "" #: src/remake.c:457 #, c-format msgid "Finished updating file '%s'.\n" msgstr "" #: src/remake.c:486 #, c-format msgid "File '%s' does not exist.\n" msgstr "" #: src/remake.c:494 #, c-format msgid "" "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp" msgstr "" #: src/remake.c:507 src/remake.c:1039 #, c-format msgid "Found an implicit rule for '%s'.\n" msgstr "" #: src/remake.c:509 src/remake.c:1041 #, c-format msgid "No implicit rule found for '%s'.\n" msgstr "" #: src/remake.c:515 #, c-format msgid "Using default recipe for '%s'.\n" msgstr "" #: src/remake.c:549 src/remake.c:1088 #, c-format msgid "Circular %s <- %s dependency dropped." msgstr "" #: src/remake.c:674 #, c-format msgid "Finished prerequisites of target file '%s'.\n" msgstr "" #: src/remake.c:680 #, c-format msgid "The prerequisites of '%s' are being made.\n" msgstr "" #: src/remake.c:694 #, c-format msgid "Giving up on target file '%s'.\n" msgstr "" #: src/remake.c:699 #, c-format msgid "Target '%s' not remade because of errors." msgstr "" #: src/remake.c:751 #, c-format msgid "Prerequisite '%s' is order-only for target '%s'.\n" msgstr "" #: src/remake.c:756 #, c-format msgid "Prerequisite '%s' of target '%s' does not exist.\n" msgstr "" #: src/remake.c:761 #, c-format msgid "Prerequisite '%s' is newer than target '%s'.\n" msgstr "" #: src/remake.c:764 #, c-format msgid "Prerequisite '%s' is older than target '%s'.\n" msgstr "" #: src/remake.c:782 #, c-format msgid "Target '%s' is double-colon and has no prerequisites.\n" msgstr "" #: src/remake.c:789 #, c-format msgid "No recipe for '%s' and no prerequisites actually changed.\n" msgstr "" #: src/remake.c:794 #, c-format msgid "Making '%s' due to always-make flag.\n" msgstr "" #: src/remake.c:802 #, c-format msgid "No need to remake target '%s'" msgstr "" #: src/remake.c:804 #, c-format msgid "; using VPATH name '%s'" msgstr "" #: src/remake.c:824 #, c-format msgid "Must remake target '%s'.\n" msgstr "" #: src/remake.c:830 #, c-format msgid " Ignoring VPATH name '%s'.\n" msgstr "" #: src/remake.c:839 #, c-format msgid "Recipe of '%s' is being run.\n" msgstr "" #: src/remake.c:846 #, c-format msgid "Failed to remake target file '%s'.\n" msgstr "" #: src/remake.c:849 #, c-format msgid "Successfully remade target file '%s'.\n" msgstr "" #: src/remake.c:852 #, c-format msgid "Target file '%s' needs to be remade under -q.\n" msgstr "" #: src/remake.c:1047 #, c-format msgid "Using default commands for '%s'.\n" msgstr "" #: src/remake.c:1422 #, c-format msgid "Warning: File '%s' has modification time %s s in the future" msgstr "" #: src/remake.c:1662 #, c-format msgid ".LIBPATTERNS element '%s' is not a pattern" msgstr "" #: src/remote-cstms.c:122 #, c-format msgid "Customs won't export: %s\n" msgstr "" #: src/rule.c:289 #, c-format msgid "warning: ignoring prerequisites on suffix rule definition" msgstr "" #: src/rule.c:530 msgid "" "\n" "# Implicit Rules" msgstr "" #: src/rule.c:545 msgid "" "\n" "# No implicit rules." msgstr "" #: src/rule.c:548 #, c-format msgid "" "\n" "# %u implicit rules, %u (%.1f%%) terminal." msgstr "" #: src/rule.c:557 #, c-format msgid "BUG: num_pattern_rules is wrong! %u != %u" msgstr "" #: src/signame.c:84 msgid "unknown signal" msgstr "" #: src/signame.c:92 msgid "Hangup" msgstr "" #: src/signame.c:95 msgid "Interrupt" msgstr "" #: src/signame.c:98 msgid "Quit" msgstr "" #: src/signame.c:101 msgid "Illegal Instruction" msgstr "" #: src/signame.c:104 msgid "Trace/breakpoint trap" msgstr "" #: src/signame.c:109 msgid "Aborted" msgstr "" #: src/signame.c:112 msgid "IOT trap" msgstr "" #: src/signame.c:115 msgid "EMT trap" msgstr "" #: src/signame.c:118 msgid "Floating point exception" msgstr "" #: src/signame.c:121 msgid "Killed" msgstr "" #: src/signame.c:124 msgid "Bus error" msgstr "" #: src/signame.c:127 msgid "Segmentation fault" msgstr "" #: src/signame.c:130 msgid "Bad system call" msgstr "" #: src/signame.c:133 msgid "Broken pipe" msgstr "" #: src/signame.c:136 msgid "Alarm clock" msgstr "" #: src/signame.c:139 msgid "Terminated" msgstr "" #: src/signame.c:142 msgid "User defined signal 1" msgstr "" #: src/signame.c:145 msgid "User defined signal 2" msgstr "" #: src/signame.c:150 src/signame.c:153 msgid "Child exited" msgstr "" #: src/signame.c:156 msgid "Power failure" msgstr "" #: src/signame.c:159 msgid "Stopped" msgstr "" #: src/signame.c:162 msgid "Stopped (tty input)" msgstr "" #: src/signame.c:165 msgid "Stopped (tty output)" msgstr "" #: src/signame.c:168 msgid "Stopped (signal)" msgstr "" #: src/signame.c:171 msgid "CPU time limit exceeded" msgstr "" #: src/signame.c:174 msgid "File size limit exceeded" msgstr "" #: src/signame.c:177 msgid "Virtual timer expired" msgstr "" #: src/signame.c:180 msgid "Profiling timer expired" msgstr "" #: src/signame.c:186 msgid "Window changed" msgstr "" #: src/signame.c:189 msgid "Continued" msgstr "" #: src/signame.c:192 msgid "Urgent I/O condition" msgstr "" #: src/signame.c:199 src/signame.c:208 msgid "I/O possible" msgstr "" #: src/signame.c:202 msgid "SIGWIND" msgstr "" #: src/signame.c:205 msgid "SIGPHONE" msgstr "" #: src/signame.c:211 msgid "Resource lost" msgstr "" #: src/signame.c:214 msgid "Danger signal" msgstr "" #: src/signame.c:217 msgid "Information request" msgstr "" #: src/signame.c:220 msgid "Floating point co-processor not available" msgstr "" #: src/strcache.c:274 #, c-format msgid "" "\n" "%s No strcache buffers\n" msgstr "" #: src/strcache.c:304 #, c-format msgid "" "\n" "%s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu " "B\n" msgstr "" #: src/strcache.c:308 #, c-format msgid "" "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B\n" msgstr "" #: src/strcache.c:319 #, c-format msgid "%s other used: total = %lu B / count = %lu / avg = %lu B\n" msgstr "" #: src/strcache.c:322 #, c-format msgid "" "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n" msgstr "" #: src/strcache.c:326 #, c-format msgid "" "\n" "%s strcache performance: lookups = %lu / hit rate = %lu%%\n" msgstr "" #: src/strcache.c:328 msgid "" "# hash-table stats:\n" "# " msgstr "" #: src/variable.c:1653 msgid "automatic" msgstr "" #: src/variable.c:1656 msgid "default" msgstr "" #: src/variable.c:1659 msgid "environment" msgstr "" #: src/variable.c:1662 msgid "makefile" msgstr "" #: src/variable.c:1665 msgid "environment under -e" msgstr "" #: src/variable.c:1668 msgid "command line" msgstr "" #: src/variable.c:1671 msgid "'override' directive" msgstr "" #: src/variable.c:1682 #, c-format msgid " (from '%s', line %lu)" msgstr "" #: src/variable.c:1745 msgid "# variable set hash-table stats:\n" msgstr "" #: src/variable.c:1756 msgid "" "\n" "# Variables\n" msgstr "" #: src/variable.c:1760 msgid "" "\n" "# Pattern-specific Variable Values" msgstr "" #: src/variable.c:1774 msgid "" "\n" "# No pattern-specific variable values." msgstr "" #: src/variable.c:1776 #, c-format msgid "" "\n" "# %u pattern-specific variable values" msgstr "" #: src/variable.h:229 #, c-format msgid "warning: undefined variable '%.*s'" msgstr "" #: src/vmsfunctions.c:91 #, c-format msgid "sys$search() failed with %d\n" msgstr "" #: src/vmsjobs.c:244 #, c-format msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n" msgstr "" #: src/vmsjobs.c:681 #, c-format msgid "BUILTIN CD %s\n" msgstr "" #: src/vmsjobs.c:1224 #, c-format msgid "DCL: %s\n" msgstr "" #: src/vmsjobs.c:1284 #, c-format msgid "Append output to %s\n" msgstr "" #: src/vmsjobs.c:1309 #, c-format msgid "Append %.*s and cleanup\n" msgstr "" #: src/vmsjobs.c:1322 #, c-format msgid "Executing %s instead\n" msgstr "" #: src/vpath.c:603 msgid "" "\n" "# VPATH Search Paths\n" msgstr "" #: src/vpath.c:620 msgid "# No 'vpath' search paths." msgstr "" #: src/vpath.c:622 #, c-format msgid "" "\n" "# %u 'vpath' search paths.\n" msgstr "" #: src/vpath.c:625 msgid "" "\n" "# No general ('VPATH' variable) search path." msgstr "" #: src/vpath.c:631 msgid "" "\n" "# General ('VPATH' variable) search path:\n" "# " msgstr "" #: src/w32/w32os.c:44 #, c-format msgid "Jobserver slots limited to %d\n" msgstr "" #: src/w32/w32os.c:60 #, c-format msgid "creating jobserver semaphore: (Error %ld: %s)" msgstr "" #: src/w32/w32os.c:79 #, c-format msgid "" "internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)" msgstr "" #: src/w32/w32os.c:82 #, c-format msgid "Jobserver client (semaphore %s)\n" msgstr "" #: src/w32/w32os.c:123 #, c-format msgid "release jobserver semaphore: (Error %ld: %s)" msgstr "" #: src/w32/w32os.c:194 #, c-format msgid "semaphore or child process wait: (Error %ld: %s)" msgstr "" make-4.3/po/da.gmo0000644000175000017500000012040413611136532010726 00000000000000Þ•¡$ -,à"á"&þ"%#5#!>#-`#Ž#  #-Á#ï#'$#-$Q$ h$v$”$P­$;þ$":%]% y%tš%L&P\&9­&Mç&@5'ov'oæ'PV(l§(F)J[)€¦)9'*Ca*f¥*_ +;l+:¨+Oã+J3,}~,uü,~r->ñ-M0.C~.2Â.Fõ.IY= ˜=+¢=*Î=ù= >>1#>2U> ˆ>”>­>"Â>*å>?? /?P? l? x?‚?š? º? Ç?%Ô?ú?+@$F@k@ Š@”@®@Ç@+á@ A!*A LAYAsA |AŠA“A§AÆA$ÜA&B(B#HBlB"‡BªB,ÃBðB)C8C!QC&sCšCµCÕC ÜCéCòC%D,D@D SD]D3wD3«DßD ýDE=EDE5bE˜E0³E'äE3 F @F+LFxF-”F%ÂF-èF'G>GXG![G}G:›G ÖG*áG H")H LH6VH H-›H-ÉH1÷H1)I[IsI-‡IµIºIÌIâI"øI#J/?J=oJ7­JåJK-#K6QK1ˆK-ºK"èK' L3L"SL#vL šL¨L±L¹L$ÌL&ñLM3M;MLM`M&uM+œM6ÈM)ÿM.)N XN7cN*›NÆN#ÜN&O'OGObOzO!O ±O½OÓO!éO P+P;AP}P(ŒP µP1¿P9ñP3+Q3_Q“Q3¯Q ãQ ñQþQ-R?RGR!XRzR ŽRšR¯R$¿R(äR' S 5SVSmS8†S0¿S8ðS)T@TXTpT‡T6›T4ÒTHUPUnU)U;«U3çUV&$VKV[VvV9ˆVÂVÙV'ùV!W:W1=W0oW1 W-ÒW1X22XeX …X*’X0½XîXY Y$Y,AY0nY.ŸYÎY,ëY1Z*JZuZ6•Z5ÌZ,["/["R[3u[)©[6Ó[- \&8\_\}\Œ\0¦\×\=÷\15],g]H”]*Ý]"^/+^8[^7”^Ì^à^ ð^}þ^|`)—`Á`Ò`Û`*ù`$a9a-Wa…a-¡a&Ïaöa b$b>bQZb6¬b,ãb c%1cuWcRÍcT d9udH¯d?ød_8en˜eRfrZfGÍfJgw`gDØgIhfgh\Îh>+i<jiX§iJjƒKjuÏjEk>Çk‹lH’l7ÛlHmE\m<¢mßmðm#n3nBnXnkn‚n ›n§nÅnàn ön oo o$oCo;Soo o³o>Éop#p9p"Wpzp”p)®p.Øp)q)1q[qpq#Žq)²q0Üq/ r=r]r#{r6ŸrÖr0ôr%s2Es'xs s¼sÌs*ês#tB9tM|t?Êt uuu:u#Uu=yu·u×u,òuv7vSv/ov!Ÿv&Áv/èv0w$Iw&nw•w±wÌw)çw3xExVx×lx(Dy=my«y#Àyäy#z'zFz\z5pz¦z·zÎz"ézR {:_{š{<¶{Kó{L?| Œ|)–|/À|ð| }}3}4S} ˆ}”}$¬}'Ñ}*ù}$~3~ G~h~„~”~#œ~!À~ â~î~(ÿ~(6H!¡ ¼Èãþ4€!O€!q€ “€!ž€À€ É€Ô€ã€#ö€*0'[*ƒ+®Ú"ó%‚1<‚"n‚.‘‚/À‚"ð‚(ƒ<ƒ[ƒrƒ {ƒ …ƒƒ)¤ƒ΃èƒúƒ„:„:X„“„²„#Єô„&û„="…`…*|…)§…5Ñ… †I†]†-}†%«†)ц'û†#‡?‡&E‡'l‡C”‡ ؇*㇈$+ˆ Pˆ=Zˆ ˜ˆ/¦ˆ0ÖˆA‰2I‰|‰•‰1ª‰܉ã‰ö‰ Š)!Š*KŠ7vŠD®Š?óŠ%3‹+Y‹.…‹=´‹,ò‹(Œ'HŒ+pŒœŒ9µŒ.ïŒ +4<)M(w ¼ÄÕóŽ5,Ž?bŽ,¢Ž6ÏŽ C2Uˆ%¤*Ê!õ/H] |‰¢$»"à‘@#‘d‘:y‘ ´‘0¿‘<ð‘8-’8f’*Ÿ’@Ê’ “ “%“*7“b“k“$}“¢“´“ »“É“&Û“*”)-”W”u”Š”<¤”0á”?•R•j•ƒ•𕱕:Ï•3 –B>––ž–)­–C×–>—Z—&b—‰—™—¹—=Η ˜%#˜.I˜x˜‹˜3‘˜3Ř4ù˜4.™8c™6œ™Ó™ ñ™3þ™;2šnš š š%šš(Àš6éš' › H›)i›5“›,É›"ö›=œ7Wœ1œ$Áœæœ5(<?e6¥0Ü ž -ž;ž3VžŠži§ž2Ÿ3DŸSxŸ1ÌŸ$þŸ4# =X <– Ó æ  ö †|–-Þa4Cåvi„Ù'`S’…J‚I±\ÍEXœonPÒ@TY')V 3®‹§…¬SÈ@“/ñƒ´lh Ték^t4 ×^0>†”ðG[ ÌO)êÎBc;ó[ :ˆ. þÏÜsŽŠD “fg8—º¿pr VŠ}9!îŸ;ˆšo›0M~¯¸ž‹‚Nh¾PLÛ’v /ƒöš=Ë­`ÓO‰Ÿœ–A¥ amçwj³ôÕ©•9»6ý{duEõz"« eÉIk1·s!$?+uä%"G÷¹‘.<&A_c$8â”CeÑWt{l,nZ˜¶ YúáŽ<Øè‰M &¨¦µ•žNòwJU2›Ä6ÂLæ¡~™,xßH¤½bqÊ¡Å#Á˜pÿd#Ö3ªQÐy°7üÇB¢UDÚ€ë1mi|?(øÆùÃݼí5ŒKjy_ûz}²2RRrfà£g:*ã+ÔZ‘‡>„(%XxÀ=q]7KQ]WŒ*€ bFF™ì\ï5‡—H- # %u 'vpath' search paths. # %u pattern-specific variable values # Directories # Files # Finished Make data base on %s # General ('VPATH' variable) search path: # # Implicit Rules # Make data base, printed on %s # No general ('VPATH' variable) search path. # No implicit rules. # No pattern-specific variable values. # Pattern-specific Variable Values # VPATH Search Paths # Variables # files hash-table stats: # %s No strcache buffers %s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu B %s strcache performance: lookups = %lu / hit rate = %lu%% Counted %d args in failed launch This program built for %s This program built for %s (%s) Unhandled exception filter called from program %s ExceptionCode = %lx ExceptionFlags = %lx ExceptionAddress = 0x%p --debug[=FLAGS] Print various types of debugging information. --no-print-directory Turn off -w, even if it was turned on implicitly. --trace Print tracing information. --warn-undefined-variables Warn when an undefined variable is referenced. -B, --always-make Unconditionally make all targets. -C DIRECTORY, --directory=DIRECTORY Change to DIRECTORY before doing anything. -I DIRECTORY, --include-dir=DIRECTORY Search DIRECTORY for included makefiles. -L, --check-symlink-times Use the latest mtime between symlinks and target. -O[TYPE], --output-sync[=TYPE] Synchronize output of parallel jobs by TYPE. -R, --no-builtin-variables Disable the built-in variable settings. -S, --no-keep-going, --stop Turns off -k. -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE Consider FILE to be infinitely new. -b, -m Ignored for compatibility. -d Print lots of debugging information. -e, --environment-overrides Environment variables override makefiles. -f FILE, --file=FILE, --makefile=FILE Read FILE as a makefile. -h, --help Print this message and exit. -i, --ignore-errors Ignore errors from recipes. -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no arg. -k, --keep-going Keep going when some targets can't be made. -l [N], --load-average[=N], --max-load[=N] Don't start multiple jobs unless load is below N. -n, --just-print, --dry-run, --recon Don't actually run any recipe; just print them. -o FILE, --old-file=FILE, --assume-old=FILE Consider FILE to be very old and don't remake it. -p, --print-data-base Print make's internal database. -q, --question Run no recipe; exit status says if up to date. -r, --no-builtin-rules Disable the built-in implicit rules. -s, --silent, --quiet Don't echo recipes. -t, --touch Touch targets instead of remaking them. -v, --version Print the version number of make and exit. -w, --print-directory Print the current directory. Date %s Ignoring VPATH name '%s'. uid = %d, gid = %d, mode = 0%o. (built-in): (core dumped) (don't care) (from '%s', line %lu) (from '%s', line %lu): (ignored) (name might be truncated) (no default goal) (no ~ expansion) (remote) (search path) files, impossibilities impossibilities in %lu directories. so far.# A default, MAKEFILES, or -include/sinclude makefile.# Also makes:# Builtin rule# Command line target.# Dependencies recipe running (THIS IS A BUG).# Failed to be updated.# File does not exist.# File has been updated.# File has not been updated.# File is an intermediate prerequisite.# File is very old.# Implicit rule search has been done.# Implicit rule search has not been done.# Implicit/static pattern stem: '%s' # Invalid value in 'command_state' member!# Last modified %s # Modification time never checked.# Needs to be updated (-q is set).# Phony target (prerequisite of .PHONY).# Precious file (prerequisite of .PRECIOUS).# Recipe currently running (THIS IS A BUG).# Successfully updated.# recipe to execute# %s (device %d, inode [%d,%d,%d]): # %s (device %d, inode [%d,%d,%d]): could not be opened. # %s (device %ld, inode %ld): # %s (device %ld, inode %ld): could not be opened. # %s (key %s, mtime %I64u): # %s (key %s, mtime %I64u): could not be opened. # %s: could not be stat'd. # No 'vpath' search paths.# Not a target:# hash-table stats: # # variable set hash-table stats: $SHELL changed (was '%s', now '%s') %s (line %d) Bad shell context (!unixy && !batch_mode_shell) %s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B %s other used: total = %lu B / count = %lu / avg = %lu B %s%s: %s%s: %s%s: Entering an unknown directory %s: Entering directory '%s' %s: Field '%s' not cached: %s%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p) %s: Leaving an unknown directory %s: Leaving directory '%s' %s: Timestamp out of range; substituting %s%s: failed to load%s: illegal option -- %c %s: invalid option -- %c %s: option '%c%s' doesn't allow an argument %s: option '%s' is ambiguous %s: option '%s' requires an argument %s: option '--%s' doesn't allow an argument %s: option '-W %s' doesn't allow an argument %s: option '-W %s' is ambiguous %s: option requires an argument -- %c %s: target '%s' does not exist%s: unrecognized option '%c%s' %s: unrecognized option '--%s' %s: update target '%s' due to: %s%s: user %lu (real %lu), group %lu (real %lu) %sBuilt for %s %sBuilt for %s (%s) %sLicense GPLv3+: GNU GPL version 3 or later %sThis is free software: you are free to change and redistribute it. %sThere is NO WARRANTY, to the extent permitted by law. %sNo rule to make target '%s'%s%sNo rule to make target '%s', needed by '%s'%s%s[%s: %s] Error %d%s%s[%u]: Entering an unknown directory %s[%u]: Entering directory '%s' %s[%u]: Leaving an unknown directory %s[%u]: Leaving directory '%s' '%s' is up to date.'override' directive*** Archive member '%s' may be bogus; not deleted*** Break. *** Deleting file '%s'*** Deleting intermediate file '%s'*** Waiting for unfinished jobs....*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp*** [%s] Archive member '%s' may be bogus; not deleted*** [%s] Deleting file '%s'*** mixed implicit and normal rules: deprecated syntax-O[TYPE] (--output-sync[=TYPE]) is not configured for this build.-warning, you may have to re-enable CTRL-Y handling from DCL. . Stop. .DEFAULT_GOAL contains more than one target.LIBPATTERNS element '%s' is not a pattern; using VPATH name '%s'AbortedAccess violation: read operation at address 0x%p Access violation: write operation at address 0x%p Alarm clockAppend %.*s and cleanup Append output to %s Avoiding implicit rule recursion. BUG: num_pattern_rules is wrong! %u != %uBUILTIN CD %s Bad system callBatch file contents: @echo off Batch file contents:%s %s Broken pipeBus errorCPU time limit exceededCannot create a temporary file Child accessChild exitedCircular %s <- %s dependency dropped.Cleaning up temp batch file %s Cleaning up temp batch file %s failed (%d) Cleaning up temporary batch file %s Considering target file '%s'. ContinuedCould not restore stderr Could not restore stdin Could not restore stdout Couldn't change back to original directory.CreatePipe() failed (e=%ld) Creating temporary batch file %s Current timeCustoms won't export: %s DCL: %s Danger signalEMT trapEmpty function nameEmpty symbol name for load: %sExecuting %s instead Failed to load symbol %s from %s: %sFailed to open global symbol table: %sFailed to remake makefile '%s'.Failed to remake target file '%s'. File '%s' does not exist. File '%s' was considered already. File size limit exceededFinished prerequisites of target file '%s'. Finished updating file '%s'. Floating point co-processor not availableFloating point exceptionFound an implicit rule for '%s'. Found prerequisite '%s' as VPATH '%s' Function name too long: %sGiving up on target file '%s'. HangupI/O possibleIOT trapIllegal InstructionIncluded makefile '%s' was not found.Information requestInitialized accessInterruptInvalid function name: %sInvalid maximum argument count (%u) for function %sInvalid minimum argument count (%u) for function %sJobserver client (fds %d,%d) Jobserver client (semaphore %s) Jobserver slots limited to %d KilledLive child %p (%s) PID %s %s Loaded object %s is not declared to be GPL compatibleLoading symbol %s from %s Looking for a rule with intermediate file '%s'. Looking for an implicit rule for '%s'. Looking for archive-member implicit rule for '%s'. Make accessMakefile '%s' might loop; not remaking it. Makefile '%s' was not foundMakefile from standard input specified twice.Making '%s' due to always-make flag. Malformed target-specific variable definitionMember '%s'%s: %ld bytes at %ld (%ld). Must remake target '%s'. NoNo implicit rule found for '%s'. No need to remake target '%s'No recipe for '%s' and no prerequisites actually changed. No targetsNo targets specified and no makefile foundNothing to be done for '%s'.Obtained token for child %p (%s). Options: Parallel jobs (-j) are not supported on this platform.Power failurePrerequisite '%s' is newer than target '%s'. Prerequisite '%s' is older than target '%s'. Prerequisite '%s' is order-only for target '%s'. Prerequisite '%s' of target '%s' does not exist. Profiling timer expiredPruning file '%s'. Putting child %p (%s) PID %s%s on the chain. QuitRe-executing[%u]:Reading makefile '%s'Reading makefiles... Reaping losing child %p PID %s %s Reaping winning child %p PID %s %s Recently tried and failed to update file '%s'. Recipe for '%s' will be ignored in favor of the one for '%s'.Recipe for file '%s' was found by implicit rule search,Recipe has too many lines (%ud)Recipe of '%s' is being run. Recipe was specified for file '%s' at %s:%lu,Recursive variable '%s' references itself (eventually)Rejecting impossible implicit prerequisite '%s'. Rejecting impossible rule prerequisite '%s'. Released token for child %p (%s). Removing child %p PID %s%s from chain. Removing intermediate files... Report bugs to Resetting to single job (-j1) mode.Resource lostSIGPHONESIGWINDSegmentation faultSkipping UTF-8 BOM in makefile '%s' Skipping UTF-8 BOM in makefile buffer Still updating file '%s'. StoppedStopped (signal)Stopped (tty input)Stopped (tty output)Successfully remade target file '%s'. Symbolic links not supported: disabling -L.Target '%s' is double-colon and has no prerequisites. Target '%s' not remade because of errors.Target file '%s' needs to be remade under -q. TerminatedThe 'load' operation is not supported on this platform.The prerequisites of '%s' are being made. Trace/breakpoint trapTrying implicit prerequisite '%s'. Trying pattern rule with stem '%.*s'. Trying rule prerequisite '%s'. Updating goal targets.... Updating makefiles.... Urgent I/O conditionUsage: %s [options] [target] ... User accessUser defined signal 1User defined signal 2Using default commands for '%s'. Using default recipe for '%s'. Virtual timer expiredWarning: File '%s' has modification time %s s in the futureWindow changedattempt to use unsupported feature: '%s'automaticbut '%s' is now considered the same file as '%s'.can't allocate %lu bytes for hash table: memory exhaustedcan't rename double-colon '%s' to single-colon '%s'can't rename single-colon '%s' to double-colon '%s'cannot enforce load limit: cannot enforce load limits on this operating systemclose: %s: %scommand linecreating jobs pipecreating jobserver semaphore: (Error %ld: %s)defaultduping jobs pipeempty string invalid as file nameempty variable nameenvironmentenvironment under -eextraneous '%s'extraneous text after '%s' directiveextraneous text after 'define' directiveextraneous text after 'endef' directivefile: invalid file operation: %sfile: missing filenamefile: too many argumentsfind_and_set_shell() path search set default_shell = %s find_and_set_shell() setting default_shell = %s first argument to 'word' function must be greater than 0fopen (temporary file)fwrite (temporary file)guile: Evaluating '%s' guile: Expanding '%s' init jobserver pipeinsufficient number of arguments (%d) to function '%s'internal error: invalid --jobserver-auth string '%s'internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)invalid syntax in conditionaljobserver pipelinelbr$ini_control() failed with status = %dlbr$set_module() failed to extract module info, status = %dmake reaped child pid %s, still waiting for pid %s makefilemissing 'endef', unterminated 'define'missing 'endif'missing rule before recipemissing separatormissing separator (did you mean TAB instead of 8 spaces?)missing target patternmixed implicit and normal rulesmixed implicit and static pattern rulesmultiple target patternsnono more file handles: could not duplicate stderr no more file handles: could not duplicate stdin no more file handles: could not duplicate stdout non-numeric first argument to 'word' functionnon-numeric first argument to 'wordlist' functionnon-numeric second argument to 'wordlist' functiononly one 'else' per conditionalopen: %s: %sprerequisites cannot be defined in recipesprocess_easy() failed to launch process (e=%ld) pselect jobs piperead jobs piperead: %s: %srecipe commences before first targetrelease jobserver semaphore: (Error %ld: %s)semaphore or child process wait: (Error %ld: %s)spawnvpe: environment space might be exhaustedsys$search() failed with %d target '%s' doesn't match the target patterntarget '%s' given more than once in the same ruletarget file '%s' has both : and :: entriestarget pattern contains no '%%'the '%s%s' option requires a non-empty string argumentthe '-%c' option requires a positive integer argumenttouch archive member is not available on VMStouch: '%s' is not a valid archivetouch: Archive '%s' does not existtouch: Bad return code from ar_member_touch on '%s'touch: Member '%s' does not exist in '%s'unable to open library '%s' to lookup member status %dunimplemented on this platform: function '%s'unknown debug level specification '%s'unknown output-sync type '%s'unknown signalunlink (temporary file): unterminated call to function '%s': missing '%c'unterminated variable referencewarning: Clock skew detected. Your build may be incomplete.warning: NUL character seen; rest of line ignoredwarning: ignoring old recipe for target '%s'warning: jobserver unavailable: using -j1. Add '+' to parent make rule.warning: overriding recipe for target '%s'warning: undefined variable '%.*s'windows32_openpipe(): process_init_fd() failed windows32_openpipe: DuplicateHandle(Err) failed (e=%ld) windows32_openpipe: DuplicateHandle(In) failed (e=%ld) write error: stdoutwrite jobserverwrite: %s: %sProject-Id-Version: make-4.2.1 Report-Msgid-Bugs-To: bug-make@gnu.org PO-Revision-Date: 2016-12-04 18:52+0100 Last-Translator: Ask Hjorth Larsen Language-Team: Danish Language: da MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. # %u "vpath"-søgestier. # %u mønsterspecifikke variabelværdier # Filkataloger # Filer # Afsluttet makedatabase %s # Generel ("VPATH"-variabel) søgesti: # # Implicitte regler # Makedatabase, udskrevet %s # Ingen generel ("VPATH"-variabel) søgesti. # Ingen implicitte regler. # Ingen mønsterspecifikke variabelværdier. # Mønsterspecifikke variabelværdier # VPATH-søgestier # Variabler # Statistik for fil-hash-spande: # %s Ingen strcache-buffere %s strcache-buffere: %lu (%lu) / strenge = %lu / lager = %lu B / middel = %lu B %s strcache-ydelse: opslag = %lu / træffere = %lu%% Talte %d argumenter i fejlet igangsætning Dette program er bygget til %s Dette program er bygget til %s (%s) UhÃ¥ndteret undtagelsesfilter kaldt fra program %s ExceptionCode = %lx ExceptionFlags = %lx ExceptionAddress = 0x%p --debug[=FLAG] Udskriv forskellige slags fejlsøgningsinformation. --no-print-directory SlÃ¥ -w fra, selv hvis det var slÃ¥et til automatisk. --trace Udskriv trace-information. --warn-undefined-variables Advar nÃ¥r en udefineret variabel bruges. -B, --always-make Skab alle mÃ¥l betingelsesløst. -C KATALOG, --directory=KATALOG Skift allerførst til KATALOG. -I KATALOG, --include-dir=KATALOG Søg i KATALOG efter inkluderede makefiler. -L, --check-symlink-times Brug sidste mtime mellem symbolske lænker og mÃ¥l. -O[TYPE], --output-sync[=TYPE] Synkronisér udskrift af parallelle job efter TYPE -R, --no-builtin-variables SlÃ¥ de indbyggede variabelværdier fra. -S, --no-keep-going, --stop SlÃ¥r -k fra. -W FIL, --what-if=FIL, --new-file=FIL, --assume-new=FIL Anse FIL som værende nyskabt. -b, -m Ignoreret af hensyn til kompabilitet. -d Udskriv en masse fejlsøgningsinformation. -e, --environment-overrides Miljøvariable har forrang for makefiler. -f FIL, --file=FIL, --makefile=FIL Læs FIL som en makefil. -h, --help Udskriv denne besked og afslut. -i, --ignore-errors Ignorér fejl fra kommandoer. -j [N], --jobs[=N] Tillad N samtidige job; uendelig mange job uden argument. -k, --keep-going Fortsæt selvom nogen mÃ¥l ikke kan skabes. -l [N], --load-average[=N], --max-load[=N] Start ikke flere job medmindre belastningen er under N. -n, --just-print, --dry-run, --recon Udfør ikke nogen kommandoer; udskriv dem bare. -o FIL, --old-file=FIL, --assume-old=FIL Anse FIL som værende meget gammel og genskab den ikke. -p, --print-data-base Udskriv makes interne database. -q, --question Udfør ingen kommandoer; afslutningskoden angiver om mÃ¥let er tidssvarende. -r, --no-builtin-rules SlÃ¥ de indbyggede implicitte regler fra. -s, --silent, --quiet Udskriv ikke kommandoer. -t, --touch Berør mÃ¥l i stedet for at genskabe dem. -v, --version Udskriv makes versionnummer og afslut. -w, --print-directory Udskriv det aktuelle katalog. Tidsstempel %s Ignorerer VPATH-navnet "%s". uid = %d, gid = %d, modus = 0%o. (indbyggede): (core-fil efterladt) (ikke nødvendig) (fra "%s", linje %lu) (fra "%s", linje %lu): (ignoreret) (navnet kan være forkortet) (ingen standard-endemÃ¥l) (ingen ~-udfoldning) (eksternt) (søgesti) filer, umuligheder umuligheder i %lu kataloger. indtil videre.# Et forvalg, MAKEFILES, eller -include/sinclude makefile.# Skaber ogsÃ¥:# Indbygget regel# KommandolinjemÃ¥l.# Kommandoer for afhængigheder køres nu (DETTE ER EN FEJL).# Opdatering mislykkedes.# Filen findes ikke.# Filen er blevet opdateret.# Filen er ikke blevet opdateret.# Filen er en mellemfil.# Filen er meget gammel.# Der er udført implicit regelsøgning.# Der er ikke udført implicit regelsøgning.# Implicit/statisk mønsterstamme: "%s" # Ugyldig værdi i "command_state"-felt!# Sidst ændret %s # Ændringstid ikke tjekket.# Behøver opdatering (-q er sat).# Falsk mÃ¥l (forudsætning for .PHONY).# Værdifuld fil (forudsætning for .PRECIOUS).# Der køres kommandoer nu (DETTE ER EN FEJL).# Opdateret med godt resultat.# kommandoer der skal køres# %s (enhed %d, inode [%d,%d,%d]): # %s (enhed %d, inode [%d,%d,%d]): kunne ikke Ã¥bnes. # %s (enhed %ld, inode %ld): # %s (enhed %ld, inode %ld): kunne ikke Ã¥bnes. # %s (nøgle %s, mtime %I64u): # %s (nøgle %s, mtime %I64u): kunne ikke Ã¥bnes. # %s: kunne ikke undersøges med stat. # Ingen "vpath"-søgestier.# Ikke et mÃ¥l:# statistik for hashtabel: # # Statistik for variabelsæt-hash-spande: $SHELL ændret (var "%s", nu "%s") %s (linje %d) Forkert skal-kontekst (!unixy && !batch_mode_shell) %s øvrigt frit: i alt = %lu B / maks = %lu B / min = %lu B / middel = %hu B %s øvrigt brugt: i alt = %lu B / antal = %lu / middel = %lu B %s%s: %s%s: %s%s: GÃ¥r til et ukendt katalog %s: GÃ¥r til katalog "%s" %s: Feltet "%s" er ikke i cache: %s%s: Afbrydelse/undtagelse fanget (kode = 0x%lx, addr = 0x%p) %s: Forlader et ukendt katalog %s: Forlader katalog "%s" %s: Tidsstempel i forkert omrÃ¥de; bruger %s%s: kunne ikke indlæse%s: ulovligt tilvalg -- %c %s: ugyldigt tilvalg -- %c %s: tilvalget "%c%s" tillader ikke et argument %s: tilvalget "%s" er flertydigt %s tilvalget "%s" kræver et argument %s: tilvalget "--%s" tillader ikke et argument %s: tilvalget "-W %s" tillader ikke et argument %s: tilvalget "-W %s" er flertydigt %s: tilvalg kræver et argument -- %c %s: mÃ¥let "%s" findes ikke%s: ukendt tilvalg "%c%s" %s: ukendt tilvalg "--%s" %s: opdatér mÃ¥let "%s" pÃ¥ grund af: %s%s: bruger %lu (reelt %lu), gruppe %lu (reelt %lu) %sBygget til %s %sBygget til %s (%s) %sLicens GPLv3+: GNU GPL v3 eller nyere %sDette er frit programmel: Du kan frit ændre og videredistribuere det. %sDer gives INGEN GARANTI i den grad, som dette tillades af loven. %sIngen regel til at skabe mÃ¥let "%s"%s%sIngen regel til at skabe mÃ¥let "%s" som behøves af "%s"%s%s[%s: %s] Fejl %d%s%s[%u]: GÃ¥r til et ukendt katalog %s[%u]: GÃ¥r til katalog "%s" %s[%u]: Forlader et ukendt katalog %s[%u]: Forlader katalog "%s" "%s" er tidssvarende."override"-direktiv*** Arkivmedlemmet "%s" er mÃ¥ske falsk; ikke slettet*** Afbrydelse. *** Sletter filen "%s"*** Sletter mellemfil "%s"*** Venter pÃ¥ uafsluttede job....*** Advarsel: .LOW_RESOLUTION_TIME-fil "%s" har et tidsstempel med høj opløsning*** [%s] Arkivmedlemmet "%s" er mÃ¥ske falsk; ikke slettet*** [%s] Sletter filen "%s"*** blandede implicitte og normale regler: forældet syntaks-O[TYPE] (--output-sync[=TYPE]) er ikke konfigureret til denne kompilering.-advarsel, du kan blive nødt til at genetablere CTRL-Y-behandling fra DCL. . Stop. .DEFAULT_GOAL indeholder mere end et mÃ¥l.LIBPATTERNS-elementet "%s" er ikke et mønster; bruger VPATH-navnet "%s"AfbrudtAdgangskrænkelse: læseoperation pÃ¥ adresse 0x%p Adgangskrænkelse: skriveoperation pÃ¥ adresse 0x%p Alarmen gikTilføj %.*s og ryd op Tilføj uddata til slutningen af %s UndgÃ¥r rekursion i implicitte regler. FEJL: forkert num_pattern_rules! %u != %uBUILTIN CD %s Ugyldigt systemkaldIndhold af batchfil: @echo off Indhold af batchfil:%s %s Pipe blev brudtBusfejlBegrænsning af CPU-tid overskredetKan ikke oprette midlertidig fil BarneadgangBarnet afsluttetCirkulær %s <- %s afhængighed opgivet.Rydder midlertidig batchfil %s Oprydning af midlertidig batchfil %s mislykkedes (%d) Afrydder midlertidig batchfil %s Overvejer mÃ¥lfilen "%s". FortsættesKunne ikke gendanne stdin Kunne ikke gendanne stdin Kunne ikke gendanne stdout Kunne ikke skifte tilbage til det originale katalog.CreatePipe() mislykkedes (e=%ld) Opretter midlertidig batchfil %s Aktuel tidCustoms kan ikke eksporteres: %s DCL: %s FaresignalEmulatorfældeTomt funktionsnavnTomt symbolnavn ved indlæsning: %sUdfører i stedet %s Kunne ikke indlæse symbolet %s fra %s: %sKunne ikke Ã¥bne global symboltabel: %sGenskabelse af makefilen "%s" mislykkedes.Genskabelse af mÃ¥lfilen "%s" mislykkedes. Filen "%s" findes ikke. Filen "%s" er allerede overvejet. Grænse for filstørrelse overskredetAfsluttede forudsætningerne for mÃ¥lfilen "%s". Opdatering af fil "%s" afsluttet. Flydendetalshjælpeprocessor ikke tilgængeligUndtagelsestilfælde ved flydendetals-operationFandt en implicit regel for "%s". Fandt forudsætning "%s" som VPATH "%s" Funktionsnavn er for langt: %sOpgiver mÃ¥lfil "%s". Læg pÃ¥I/O muligIOT_fældeUlovlig instruktionInkluderet makefil "%s" blev ikke fundet.InformationsforespørgselIndledende adgangAfbrudtUgyldigt funktionsnavn: %sUtilstrækkeligt antal argumenter (%u) til funktionen "%s"utilstrækkeligt antal argumenter (%u) til funktionen "%s"Jobserverklient (fd'er %d,%d) Jobserverklient (semafor %s) Jobserverpladser begrænset til %d DræbtLevende underproces %p (%s) PID %s %s Det indlæste objekt %s er ikke erklæret som GPL-kompatibeltIndlæser symbol %s fra %s Kigger efter en regel med mellemfil "%s". Kigger efter en implicit regel for "%s". Kigger efter en implicit arkivmedlemsregel for "%s". Make-adgangMakefilen "%s" fÃ¥r mÃ¥ske make til at køre i ring; genskaber den ikke. Makefilen "%s" blev ikke fundetMakefil fra standard-ind er angivet to gange.Skaber "%s" pga. "always-make"-flag. Misdannet mÃ¥lspecifik variabeldefinitionMedlem "%s"%s: %ld byte ved %ld (%ld). Skal genskabe mÃ¥let "%s". IngenIngen implicit regel for "%s" fundet. Ingen grund til at genskabe mÃ¥let "%s"Ingen opskrift til "%s", og ingen forudsætninger har ændret sig. Ingen mÃ¥lIngen angivne mÃ¥l og ingen makefil fundetIngenting at gøre for "%s".Fik symbol for underproces %p (%s). Tilvalg: Parallelle job (-j) er ikke understøttet pÃ¥ denne platform.Strømmen gikForudsætningen "%s" er nyere end mÃ¥let "%s". Forudsætningen "%s" er ældre end mÃ¥let "%s". Forudsætningen "%s" angiver kun rækkefølgen ift. mÃ¥let "%s". Forudsætningen "%s" for mÃ¥let "%s" findes ikke. Profileringstiden udløbBeskærer fil "%s". Sætter underproces %p (%s) PID %s%s pÃ¥ kæden. AfslutUdfører igen[%u]:Læser makefilen "%s"Læser makefiler... Høster tabende underproces %p PID %s %s Høster vindende underproces %p PID %s %s Opdatering af fil "%s" er forgæves prøvet for nylig. Opskriften for "%s" vil blive ignoreret til fordel for den for "%s".Opskrift for filen "%s" blev fundet ved implicit regelsøgning,Opskriften har for mange linjer (%ud)Opskriften for "%s" er ved at blive kørt. Opskrift blev angivet for filen "%s" i %s:%lu,Rekursiv variabel "%s" refererer (i sidste ende) til sig selvAfviser umulig implicit forudsætning "%s". Afviser umulig regelforudsætning "%s". Frigav symbol for underproces %p (%s). Fjerner underproces %p PID %s%s fra kæde. Sletter mellemfiler ... Send fejlmeldinger (pÃ¥ engelsk) til . Sætter tilbage til enkelt job-tilstand (-j1).Resurse tabtSIGPHONESIGWINDLagersegmentfejlSpringer UTF-8-BOM over i makefilen "%s" Springer UTF-8-BOM over i makefilbuffer Opdaterer stadig fil "%s". StoppetStoppet (signal)Stoppet (ville læse fra tty)Stoppet (ville skrive til tty)MÃ¥lfilen "%s" genskabt. Symbolske lænker understøttes ikke: Deaktiverer -L.MÃ¥let "%s" er med dobbelt-kolon og har ingen forudsætninger. MÃ¥let "%s" ikke genskabt pÃ¥ grund af fejl.Det er nødvendigt at genskabe mÃ¥lfilen "%s" med -q. TermineretOperationen indlæs ('load') understøttes ikke pÃ¥ denne platform.Forudsætningerne for "%s" er ved at blive skabt. Sporings-/stoppunkts-fældePrøver implicit forudsætning "%s". Prøver mønsterregel med stammen "%.*s". Prøver regelforudsætning "%s". Opdaterer endemÃ¥l.... Opdaterer makefiler.... Kritisk I/O-tilstandBrug: %s [tilvalg] [mÃ¥l] ... BrugeradgangBrugerdefineret signal 1Brugerdefineret signal 2Bruger standardkommandoer for "%s". Bruger standardopskrift for "%s". Virtuel tidsgrænse overskredetAdvarsel: Filen "%s" har modifikationstidspunkt %s s i fremtidenVinduet blev ændretforsøg pÃ¥ at bruge funktion som ikke understøttes: "%s"automatiskmen "%s" bliver nu anset som samme fil som "%s".kan ikke tildele %lu byte til hashtabel: hukommelsen opbrugtkan ikke ændre dobbelt-kolon "%s" til enkelt-kolon "%s"kan ikke ændre enkelt-kolon "%s" til dobbelt-kolon "%s"kan ikke gennemtvinge belastningsgrænse: kan ikke gennemtvinge belastningsgrænser pÃ¥ dette styrestystemluk: %s: %skommandolinjeopretter job-pipeopretter jobserver-semafor: (Fejl %ld: %s)forvalgtkopierer job-pipeen tom streng er ugyldig som filnavntomt variabelnavnmiljømiljø med -eoverskydende "%s"overskydende tekst efter "%s"-direktivoverskydende tekst efter "define"-direktivoverskydende tekst efter "endef"-direktivfil: ugyldig filoperation: %sfil: mangler filnavnfil: for mange argumenterfind_and_set_shell()-stisøgning sætter default_shell = %s find_and_set_shell() sætter default_shell = %s første argument til "word"-funktionen skal være større end 0fopen (midlertidig fil)fwrite (midlertidig fil)guile: Evaluerer "%s" guile: Udskriver "%s" klargøring af jobserver-pipeutilstrækkeligt antal argumenter (%d) til funktionen "%s"intern fejl: ugyldig "--jobserver-auth"-streng "%s"intern fejl: kan ikke Ã¥bne jobserver-semafor "%s": (Fejl %ld: %s)ugyldig syntaks i betingelsejobserver-pipelbr$ini_control() fejlede med status = %dlbr$set_module() kunne ikke udtrække modulinformation, status = %dmake høstede underproces med pid %s, venter endnu pÃ¥ pid %s makefilmanglende "endef", uafsluttet "define"mangler "endif"manglende regel før kommandoermanglende skilletegnmanglende skilletegn (mente du TAB i stedet for 8 mellemrum?)manglende mÃ¥lmønsterblandede implicitte og normale reglerblandede implicitte og statiske mønsterreglerflere mÃ¥lmønstreingenikke flere filhÃ¥ndtag: kunne ikke duplikere stdin ikke flere filhÃ¥ndtag: Kunne ikke duplikere stdin ikke flere filhÃ¥ndtag: Kunne ikke duplikere stdout ikke-numerisk første argument til "word"-funktionenikke-numerisk første argument til "wordlist"-funktionenikke-numerisk andet argument til "wordlist"-funktionenkun én "else" per betingelseÃ¥bn: %s: %sder kan ikke defineres forudsætninger i kommandoerprocess_easy() fejlede ved igangsætning af proces (e=%ld) pselect job-pipelæs job-pipelæs: %s: %skommandoer begynder før første mÃ¥lfrigiv jobserver-semafor: (Fejl %ld: %s)ventende pÃ¥ semafor eller underproces: (Fejl %ld: %s)spawnvpe: miljøplads er mÃ¥ske opbrugtsys$search() mislykkedes med %d mÃ¥let "%s" passer ikke til mÃ¥lmønstretmÃ¥let "%s" optræder mere end én gang i samme regelmÃ¥lfilen "%s" har bÃ¥de :- og ::-angivelsermÃ¥lmønster indeholder ingen "%%""-%s%s"-tilvalget kræver et strengargument, der ikke er tomt"-%c"-tilvalget kræver et positivt heltalligt argument"touch arkivelement" er ikke tilgængelig pÃ¥ VMStouch: "%s" er ikke et gyldigt arkivtouch: Arkivet "%s" findes ikketouch: Forkert returkode fra ar_member_touch pÃ¥ "%s"touch: Elementet "%s" findes ikke i "%s"kan ikke Ã¥bne biblioteket "%s" for at slÃ¥ elementstatus %d opikke implementeret pÃ¥ denne platform: funktionen "%s"ukendt specifikation af fejlsøgningsniveau "%s"ukendt type "%s" af output-syncukendt signalunlink (midlertidig fil): uafsluttet kald til funktionen "%s"; manglende "%c"uafsluttet variabelreferenceadvarsel: Der blev registreret en uoverensstemmelse i urets tid. Din kompilering kan være ufuldstændig.advarsel: NUL-tegn set; resten af linjen ignoreresadvarsel: ignorerer gammel opskrift for mÃ¥let "%s"advarsel: jobserver ikke tilgængelig: bruger -j1. Tilføj "+" til ophavsmakeregel.advarsel: tilsidesætter opskrift for mÃ¥let "%s"advarsel: udefineret variabel "%.*s"windows32_openpipe(): process_init_fd() mislykkedes windows32_openpipe: DuplicateHandle(Err) mislykkedes (e=%ld) windows32_openpipe: DuplicateHandle(In) mislykkedes (e=%ld) skrivefejl: stdoutskriv jobserverskriv: %s: %smake-4.3/po/en@quot.header0000644000175000017500000000226313611136462012427 00000000000000# All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # make-4.3/po/ko.po0000644000175000017500000016622013611136531010614 00000000000000# Korean messages for GNU make. # Copyright (C) 1996, 2001, 2013 Free Software Foundation, Inc. # This file is distributed under the same license as the make package. # # Bang Jun-Young , 1996. # Changwoo Ryu , 2001, 2006, 2013-2014, 2016, 2019-2020. # # 용어 # - recipe - 명령 (makeì˜ action으로 실행할 명령어를 ë§í•¨) # - prerequisite - ì„ í–‰ ì¡°ê±´ # # 참고 # - order-only란 ì˜ì¡´í•˜ëŠ” 타겟 중ì—서 명령어 순서만 지정하고 íŒŒì¼ ìˆ˜ì • # 시ê°ì€ 무시하는 종류를 ë§í•œë‹¤. "Types of Prerequisites" 참고. # msgid "" msgstr "" "Project-Id-Version: GNU make 4.2.93\n" "Report-Msgid-Bugs-To: bug-make@gnu.org\n" "POT-Creation-Date: 2020-01-19 15:34-0500\n" "PO-Revision-Date: 2020-01-03 23:07+0900\n" "Last-Translator: Changwoo Ryu \n" "Language-Team: Korean \n" "Language: ko\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" #: src/ar.c:46 #, c-format msgid "attempt to use unsupported feature: '%s'" msgstr "ì§€ì›ë˜ì§€ 않는 ê¸°ëŠ¥ì„ ì‚¬ìš©í•˜ë ¤ê³  함: '%s'" #: src/ar.c:123 #, c-format msgid "touch archive member is not available on VMS" msgstr "ì•„ì¹´ì´ë¸Œ 멤버 touch는 VMSì—서 사용할 수 없습니다" #: src/ar.c:147 #, c-format msgid "touch: Archive '%s' does not exist" msgstr "touch: '%s' ì•„ì¹´ì´ë¸Œê°€ 없습니다" #: src/ar.c:150 #, c-format msgid "touch: '%s' is not a valid archive" msgstr "touch: '%s'ì€(는) 올바른 ì•„ì¹´ì´ë¸Œê°€ 아닙니다" #: src/ar.c:157 #, c-format msgid "touch: Member '%s' does not exist in '%s'" msgstr "touch: '%s' 멤버가 '%s' ì•ˆì— ì—†ìŠµë‹ˆë‹¤" #: src/ar.c:164 #, c-format msgid "touch: Bad return code from ar_member_touch on '%s'" msgstr "touch: '%s'ì— ëŒ€í•˜ì—¬ ar_member_touchì—서 실패 리턴 코드" #: src/arscan.c:130 #, c-format msgid "lbr$set_module() failed to extract module info, status = %d" msgstr "lbr$set_module()ì´ ëª¨ë“ˆì •ë³´ë¥¼ 추출하는 ë° ì‹¤íŒ¨, ìƒíƒœ = %d" #: src/arscan.c:236 #, c-format msgid "lbr$ini_control() failed with status = %d" msgstr "lbr$ini_control()ì´ ì‹¤íŒ¨, ìƒíƒœ = %d" #: src/arscan.c:261 #, c-format msgid "unable to open library '%s' to lookup member status %d" msgstr "멤버 ìƒíƒœ %2$dë²ˆì„ ì°¸ì¡°í•˜ë ¤ê³  '%1$s' ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ ì—´ 수 없습니다" #: src/arscan.c:944 #, c-format msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n" msgstr "멤버 '%s'%s: %ldë°”ì´íЏ, 위치 %ld (%ld).\n" # ì´ë¯¸ 잘려진 ì´ë¦„ì„ í‘œì‹œí•˜ë©´ì„œ ì´ë¦„ì´ ìž˜ë ¤ì¡Œì„ ìˆ˜ë„ ìžˆìœ¼ë‹ˆ 유ì˜í•˜ë¼ëŠ” 뜻 #: src/arscan.c:945 msgid " (name might be truncated)" msgstr " (ì´ë¦„ì´ ìž˜ë ¤ë‚˜ê°”ì„ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤)" #: src/arscan.c:947 #, c-format msgid " Date %s" msgstr " ë‚ ì§œ %s" #: src/arscan.c:948 #, c-format msgid " uid = %d, gid = %d, mode = 0%o.\n" msgstr " uid = %d, gid = %d, 모드 = 0%o.\n" #: src/commands.c:403 #, c-format msgid "Recipe has too many lines (%ud)" msgstr "ëª…ë ¹ì–´ì— ì¤„ì´ ë„ˆë¬´ 많습니다(%ud)" #: src/commands.c:504 msgid "*** Break.\n" msgstr "*** 중지.\n" #: src/commands.c:628 #, c-format msgid "*** [%s] Archive member '%s' may be bogus; not deleted" msgstr "*** [%s] ì•„ì¹´ì´ë¸Œ '%s' 멤버는 ê°€ì§œì¼ ìˆ˜ 있으므로 삭제하지 않습니다" #: src/commands.c:632 #, c-format msgid "*** Archive member '%s' may be bogus; not deleted" msgstr "*** ì•„ì¹´ì´ë¸Œ '%s' 멤버는 ê°€ì§œì¼ ìˆ˜ 있으므로 삭제하지 않습니다" #: src/commands.c:646 #, c-format msgid "*** [%s] Deleting file '%s'" msgstr "*** [%s] '%s' 파ì¼ì„ 삭제합니다" #: src/commands.c:648 #, c-format msgid "*** Deleting file '%s'" msgstr "*** '%s' 파ì¼ì„ 삭제합니다" #: src/commands.c:684 msgid "# recipe to execute" msgstr "# 실행할 명령어" #: src/commands.c:687 msgid " (built-in):" msgstr " (내장):" #: src/commands.c:689 #, c-format msgid " (from '%s', line %lu):\n" msgstr " ('%s'ì—서, %lu번째 줄):\n" #: src/dir.c:1073 msgid "" "\n" "# Directories\n" msgstr "" "\n" "# 디렉터리\n" #: src/dir.c:1085 #, c-format msgid "# %s: could not be stat'd.\n" msgstr "# %s: statì„ í•  수 없었습니다.\n" #: src/dir.c:1089 msgid "# %s (key %s, mtime %I64u): could not be opened.\n" msgstr "# %s (키 %s, ë³€ê²½ì‹œê° %I64u): ì—´ 수 없습니다.\n" #: src/dir.c:1094 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n" msgstr "# %s (장치 %d, ì•„ì´ë…¸ë“œ [%d,%d,%d]): ì—´ 수 없습니다.\n" #: src/dir.c:1099 #, c-format msgid "# %s (device %ld, inode %ld): could not be opened.\n" msgstr "# %s (장치 %ld, ì•„ì´ë…¸ë“œ %ld): ì—´ 수 없습니다.\n" #: src/dir.c:1126 msgid "# %s (key %s, mtime %I64u): " msgstr "# %s (키 %s, ë³€ê²½ì‹œê° %I64u): " #: src/dir.c:1131 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): " msgstr "# %s (장치 %d, ì•„ì´ë…¸ë“œ [%d,%d,%d]): " #: src/dir.c:1136 #, c-format msgid "# %s (device %ld, inode %ld): " msgstr "# %s (장치 %ld, ì•„ì´ë…¸ë“œ %ld): " # 여기서 No는 "No files"ë¼ê³  ì“°ì¸ë‹¤. ê¶ê·¹ì ìœ¼ë¡œ msgidê°€ ê³ ì³ì ¸ì•¼ 함 #: src/dir.c:1142 src/dir.c:1163 msgid "No" msgstr "0ê°œ" #: src/dir.c:1145 src/dir.c:1166 msgid " files, " msgstr " 파ì¼, " # 여기서 no는 "no impossibilities"ë¼ê³  ì“°ì¸ë‹¤. ê¶ê·¹ì ìœ¼ë¡œ msgidê°€ ê³ ì³ì ¸ì•¼ 함 #: src/dir.c:1147 src/dir.c:1168 msgid "no" msgstr "0ê°œ" #: src/dir.c:1150 msgid " impossibilities" msgstr " 불가능" #: src/dir.c:1154 msgid " so far." msgstr " 지금까지." #: src/dir.c:1171 #, c-format msgid " impossibilities in %lu directories.\n" msgstr " 디렉토리 %luê°œì—서 불가능.\n" #: src/expand.c:125 #, c-format msgid "Recursive variable '%s' references itself (eventually)" msgstr "재귀하는 '%s' 변수는 (ê²°êµ­) ìžê¸° ìžì‹ ì„ 참조하고 있습니다" #: src/expand.c:271 #, c-format msgid "unterminated variable reference" msgstr "변수 ì°¸ì¡°ì— ëë§ˆì¹¨ì´ ì—†ìŠµë‹ˆë‹¤" #: src/file.c:278 #, c-format msgid "Recipe was specified for file '%s' at %s:%lu," msgstr "íŒŒì¼ '%s'ì˜ %s:%luì—서 ëª…ë ¹ì„ ì§€ì •í–ˆìŠµë‹ˆë‹¤." #: src/file.c:283 #, c-format msgid "Recipe for file '%s' was found by implicit rule search," msgstr "íŒŒì¼ '%s'ì— ëŒ€í•œ ëª…ë ¹ì„ ë¬µì‹œì  ê·œì¹™ íƒìƒ‰ìœ¼ë¡œ 찾았습니다." #: src/file.c:287 #, c-format msgid "but '%s' is now considered the same file as '%s'." msgstr "하지만 '%s' 파ì¼ì€ ì´ì œ '%s'ê³¼(와) ê°™ì€ íŒŒì¼ë¡œ 간주합니다." #: src/file.c:290 #, c-format msgid "Recipe for '%s' will be ignored in favor of the one for '%s'." msgstr "'%s'ì— ëŒ€í•œ ëª…ë ¹ì€ '%s'ì— ëŒ€í•œ ëª…ë ¹ì´ ìš°ì„ í•˜ë¯€ë¡œ 무시합니다." #: src/file.c:310 #, c-format msgid "can't rename single-colon '%s' to double-colon '%s'" msgstr "ë‹¨ì¼ ì½œë¡  '%s'ì„(를) ì´ì¤‘ 콜론 '%s'(으)로 ì´ë¦„ì„ ë°”ê¿€ 수 없습니다" #: src/file.c:316 #, c-format msgid "can't rename double-colon '%s' to single-colon '%s'" msgstr "ì´ì¤‘ 콜론 '%s'ì„(를) ë‹¨ì¼ ì½œë¡  '%s'(으)로 ì´ë¦„ì„ ë°”ê¿€ 수 없습니다" #: src/file.c:408 #, c-format msgid "*** Deleting intermediate file '%s'" msgstr "*** 중간 íŒŒì¼ '%s'ì„(를) 삭제합니다" #: src/file.c:412 #, c-format msgid "Removing intermediate files...\n" msgstr "중간 파ì¼ì„ 제거합니다...\n" #: src/file.c:872 msgid "Current time" msgstr "현재 시ê°" #: src/file.c:876 #, c-format msgid "%s: Timestamp out of range; substituting %s" msgstr "%s: 타임스탬프가 범위를 벗어나므로, %sì„(를) 대체합니다" #: src/file.c:1016 msgid "# Not a target:" msgstr "# íƒ€ê²Ÿì´ ì•„ë‹˜:" #: src/file.c:1021 msgid "# Precious file (prerequisite of .PRECIOUS)." msgstr "# 프레시어스 íŒŒì¼ (.PRECIOUSì˜ ì„ í–‰ì¡°ê±´)." #: src/file.c:1023 msgid "# Phony target (prerequisite of .PHONY)." msgstr "# í¬ë‹ˆ 타겟 (.PHONYì˜ ì„ í–‰ì¡°ê±´)." #: src/file.c:1025 msgid "# Command line target." msgstr "# 명령행 타겟." #: src/file.c:1027 msgid "# A default, MAKEFILES, or -include/sinclude makefile." msgstr "" "# 기본 ë©”ì´í¬íŒŒì¼, MAKEFILES ë©”ì´í¬íŒŒì¼, ë˜ëŠ” -include/sinclude ë©”ì´í¬íŒŒì¼." #: src/file.c:1029 msgid "# Builtin rule" msgstr "# 내장 규칙" #: src/file.c:1031 msgid "# Implicit rule search has been done." msgstr "# ë¬µì‹œì  ê·œì¹™ íƒìƒ‰ì´ 완료ë˜ì—ˆìŠµë‹ˆë‹¤." #: src/file.c:1032 msgid "# Implicit rule search has not been done." msgstr "# ë¬µì‹œì  ê·œì¹™ íƒìƒ‰ì´ 완료ë˜ì§€ 않았습니다." #: src/file.c:1034 #, c-format msgid "# Implicit/static pattern stem: '%s'\n" msgstr "# 묵시ì /ê³ ì • 패턴 스템: '%s'\n" #: src/file.c:1036 msgid "# File is an intermediate prerequisite." msgstr "# 파ì¼ì´ ì¤‘ê°„ë‹¨ê³„ì˜ ì„ í–‰ì¡°ê±´ìž…ë‹ˆë‹¤." #: src/file.c:1040 msgid "# Also makes:" msgstr "# 다ìŒë„ 만듭니다:" #: src/file.c:1046 msgid "# Modification time never checked." msgstr "# 변경 시ê°ì´ ê²°ì½” 검사ë˜ì§€ 않았ìŒ." #: src/file.c:1048 msgid "# File does not exist." msgstr "# 파ì¼ì´ 없습니다." #: src/file.c:1050 msgid "# File is very old." msgstr "# 파ì¼ì´ 매우 오래ë˜ì—ˆìŠµë‹ˆë‹¤." #: src/file.c:1055 #, c-format msgid "# Last modified %s\n" msgstr "# 마지막 변경 %s\n" #: src/file.c:1058 msgid "# File has been updated." msgstr "# 파ì¼ì„ ì—…ë°ì´íŠ¸í–ˆìŠµë‹ˆë‹¤." #: src/file.c:1058 msgid "# File has not been updated." msgstr "# 파ì¼ì„ ì—…ë°ì´íŠ¸í•˜ì§€ 않았습니다." #: src/file.c:1062 msgid "# Recipe currently running (THIS IS A BUG)." msgstr "# 현재 ì‹¤í–‰ì¤‘ì¸ ëª…ë ¹(ì´ê²ƒì€ 버그입니다)." #: src/file.c:1065 msgid "# Dependencies recipe running (THIS IS A BUG)." msgstr "# 현재 ì‹¤í–‰ì¤‘ì¸ ì˜ì¡´ì„±(ì´ê²ƒì€ 버그입니다)." #: src/file.c:1074 msgid "# Successfully updated." msgstr "# 성공ì ìœ¼ë¡œ ì—…ë°ì´íЏ." #: src/file.c:1078 msgid "# Needs to be updated (-q is set)." msgstr "# ì—…ë°ì´íЏ í•„ìš”(-q 설정ë¨)." #: src/file.c:1081 msgid "# Failed to be updated." msgstr "# ì—…ë°ì´íЏ 실패." #: src/file.c:1086 msgid "# Invalid value in 'command_state' member!" msgstr "# 'command_status' ë©¤ë²„ì— ê°’ì´ ìž˜ëª»ë˜ì—ˆìŠµë‹ˆë‹¤!" #: src/file.c:1105 msgid "" "\n" "# Files" msgstr "" "\n" "# 파ì¼" #: src/file.c:1109 msgid "" "\n" "# files hash-table stats:\n" "# " msgstr "" "\n" "# íŒŒì¼ í•´ì‹œ í…Œì´ë¸” 통계:\n" "# " #: src/file.c:1119 #, c-format msgid "%s: Field '%s' not cached: %s" msgstr "%s: '%s' 필드가 ìºì‹œì— ì—†ìŒ: %s" #: src/function.c:794 msgid "non-numeric first argument to 'word' function" msgstr "'word' í•¨ìˆ˜ì˜ ì²«ë²ˆì§¸ ì¸ìžê°€ 숫ìžê°€ 아닙니다" #: src/function.c:799 #, c-format msgid "first argument to 'word' function must be greater than 0" msgstr "'word' í•¨ìˆ˜ì˜ ì²«ë²ˆì§¸ ì¸ìžëŠ” 0보다 커야 합니다" #: src/function.c:819 msgid "non-numeric first argument to 'wordlist' function" msgstr "'wordlist' í•¨ìˆ˜ì˜ ì²«ë²ˆì§¸ ì¸ìžê°€ 숫ìžê°€ 아닙니다" #: src/function.c:821 msgid "non-numeric second argument to 'wordlist' function" msgstr "'wordlist' í•¨ìˆ˜ì˜ ë‘번째 ì¸ìžê°€ 숫ìžê°€ 아닙니다" #: src/function.c:1533 #, c-format msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n" msgstr "windows32_openpipe: DuplicateHandle(In) 실패(e=%ld)\n" #: src/function.c:1557 #, c-format msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n" msgstr "windows32_openpipe: DuplicateHandle(Err) 실패(e=%ld)\n" #: src/function.c:1564 #, c-format msgid "CreatePipe() failed (e=%ld)\n" msgstr "CreatePipe() 실패(e=%ld)\n" #: src/function.c:1572 #, c-format msgid "windows32_openpipe(): process_init_fd() failed\n" msgstr "windows32_openpipe(): process_init_fd() 실패\n" #: src/function.c:1857 #, c-format msgid "Cleaning up temporary batch file %s\n" msgstr "임시 배치 íŒŒì¼ %sì„(를) ì§€ì›ë‹ˆë‹¤\n" #: src/function.c:2230 src/function.c:2255 #, c-format msgid "file: missing filename" msgstr "file: íŒŒì¼ ì´ë¦„ì´ ì—†ìŠµë‹ˆë‹¤" #: src/function.c:2234 src/function.c:2265 #, c-format msgid "open: %s: %s" msgstr "open: %s: %s" #: src/function.c:2242 #, c-format msgid "write: %s: %s" msgstr "write: %s: %s" #: src/function.c:2245 src/function.c:2282 #, c-format msgid "close: %s: %s" msgstr "close: %s: %s" #: src/function.c:2258 #, c-format msgid "file: too many arguments" msgstr "file: ì¸ìžê°€ 너무 많습니다" #: src/function.c:2277 #, c-format msgid "read: %s: %s" msgstr "read: %s: %s" #: src/function.c:2290 #, c-format msgid "file: invalid file operation: %s" msgstr "file: 올바르지 ì•Šì€ íŒŒì¼ ë™ìž‘: %s" #: src/function.c:2405 #, c-format msgid "insufficient number of arguments (%d) to function '%s'" msgstr "함수 '%2$s'ì— ì¸ìž 갯수(%1$d)ê°€ 부족합니다" #: src/function.c:2417 #, c-format msgid "unimplemented on this platform: function '%s'" msgstr "ì´ í”Œëž«í¼ì—서는 구현ë˜ì§€ 않았습니다: '%s' 함수" #: src/function.c:2483 #, c-format msgid "unterminated call to function '%s': missing '%c'" msgstr "함수 '%s'ì— ëŒ€í•´ 종료ë˜ì§€ ì•Šì€ í˜¸ì¶œ: '%c' 문ìžê°€ 빠졌ìŒ" #: src/function.c:2667 #, c-format msgid "Empty function name" msgstr "빈 함수 ì´ë¦„" #: src/function.c:2669 #, c-format msgid "Invalid function name: %s" msgstr "ìž˜ëª»ëœ í•¨ìˆ˜ ì´ë¦„: %s" #: src/function.c:2671 #, c-format msgid "Function name too long: %s" msgstr "함수 ì´ë¦„ì´ ë„ˆë¬´ ê¹ë‹ˆë‹¤: %s" #: src/function.c:2674 #, c-format msgid "Invalid minimum argument count (%u) for function %s" msgstr "함수 `%2$s'ì— ìµœì†Œ ì¸ìž 갯수(%1$u)ê°€ 잘못ë˜ì—ˆìŠµë‹ˆë‹¤" #: src/function.c:2677 #, c-format msgid "Invalid maximum argument count (%u) for function %s" msgstr "함수 `%2$s'ì— ìµœëŒ€ ì¸ìž 갯수(%1$u)ê°€ 잘못ë˜ì—ˆìŠµë‹ˆë‹¤" #: src/getopt.c:659 #, c-format msgid "%s: option '%s' is ambiguous\n" msgstr "%s: '%s' ì˜µì…˜ì€ ì• ë§¤í•œ 옵션입니다\n" #: src/getopt.c:683 #, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s: '--%s' ì˜µì…˜ì€ ì¸ìˆ˜ë¥¼ 허용하지 않습니다\n" #: src/getopt.c:688 #, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s: '%c%s' ì˜µì…˜ì€ ì¸ìˆ˜ë¥¼ 허용하지 않습니다\n" #: src/getopt.c:705 src/getopt.c:878 #, c-format msgid "%s: option '%s' requires an argument\n" msgstr "%s: '%s' ì˜µì…˜ì€ ì¸ìˆ˜ê°€ 필요합니다\n" #: src/getopt.c:734 #, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s: ì¸ì‹í•  수 없는 옵션 '--%s'\n" #: src/getopt.c:738 #, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s: ì¸ì‹í•  수 없는 옵션 '%c%s'\n" #: src/getopt.c:764 #, c-format msgid "%s: illegal option -- %c\n" msgstr "%s: ìž˜ëª»ëœ ì˜µì…˜ -- %c\n" #: src/getopt.c:767 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s: ë¶€ì ì ˆí•œ 옵션 -- %c\n" #: src/getopt.c:797 src/getopt.c:927 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: ì´ ì˜µì…˜ì€ ì¸ìˆ˜ê°€ 필요합니다 -- %c\n" #: src/getopt.c:844 #, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s: '-W %s' ì˜µì…˜ì€ ì• ë§¤í•œ 옵션입니다\n" #: src/getopt.c:862 #, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s: '-W %s' ì˜µì…˜ì€ ì¸ìˆ˜ë¥¼ 허용하지 않습니다\n" #: src/guile.c:58 #, c-format msgid "guile: Expanding '%s'\n" msgstr "guile: '%s' 확장\n" #: src/guile.c:74 #, c-format msgid "guile: Evaluating '%s'\n" msgstr "guile: '%s' í•´ì„\n" #: src/hash.c:50 #, c-format msgid "can't allocate %lu bytes for hash table: memory exhausted" msgstr "해시 í…Œì´ë¸”ì— %lu ë°”ì´íŠ¸ë¥¼ 할당할 수 없습니다: 메모리 바닥남" #: src/hash.c:280 #, c-format msgid "Load=%lu/%lu=%.0f%%, " msgstr "로드=%lu/%lu=%.0f%%, " #: src/hash.c:282 #, c-format msgid "Rehash=%u, " msgstr "다시 해시=%u, " #: src/hash.c:283 #, c-format msgid "Collisions=%lu/%lu=%.0f%%" msgstr "ì¶©ëŒ=%lu/%lu=%.0f%%" #: src/implicit.c:38 #, c-format msgid "Looking for an implicit rule for '%s'.\n" msgstr "'%s'ì— ëŒ€í•œ ë¬µì‹œì  ê·œì¹™ì„ ì°¾ê³  있습니다.\n" #: src/implicit.c:54 #, c-format msgid "Looking for archive-member implicit rule for '%s'.\n" msgstr "'%s'ì— ëŒ€í•œ ì•„ì¹´ì´ë¸Œë©¤ë²„ ë¬µì‹œì  ê·œì¹™ì„ ì°¾ê³  있습니다.\n" #: src/implicit.c:311 #, c-format msgid "Avoiding implicit rule recursion.\n" msgstr "ë¬µì‹œì  ê·œì¹™ì˜ ìž¬ê·€ë¥¼ 피함.\n" # 스템(stem)ì´ëž€ 패턴 룰ì—서 prefix/suffix를 제외한 나머지를 ë§í•œë‹¤. # 예를 들어 `%.c'ë¼ëŠ” íŒ¨í„´ì— `hello.c'ê°€ 들어 ë§žì•˜ì„ ê²½ìš° stemì€ `hello'ì´ë‹¤. #: src/implicit.c:484 #, c-format msgid "Stem too long: '%s%.*s'.\n" msgstr "ìŠ¤í…œì´ ë„ˆë¬´ ê¹ë‹ˆë‹¤: '%s%.*s'.\n" # 스템(stem)ì´ëž€ 패턴 룰ì—서 prefix/suffix를 제외한 나머지를 ë§í•œë‹¤. # 예를 들어 `%.c'ë¼ëŠ” íŒ¨í„´ì— `hello.c'ê°€ 들어 ë§žì•˜ì„ ê²½ìš° stemì€ `hello'ì´ë‹¤. #: src/implicit.c:490 #, c-format msgid "Trying pattern rule with stem '%.*s'.\n" msgstr "'%.*s' 스템ì—서 패턴 규칙 시ë„.\n" #: src/implicit.c:717 #, c-format msgid "Rejecting impossible rule prerequisite '%s'.\n" msgstr "불가능한 규칙 선행조건 '%s'ì€(는) ê±°ë¶€ë©ë‹ˆë‹¤.\n" #: src/implicit.c:718 #, c-format msgid "Rejecting impossible implicit prerequisite '%s'.\n" msgstr "불가능한 ë¬µì‹œì  ì„ í–‰ì¡°ê±´ '%s'ì€(는) ê±°ë¶€ë©ë‹ˆë‹¤.\n" #: src/implicit.c:732 #, c-format msgid "Trying rule prerequisite '%s'.\n" msgstr "규칙 선행조건 '%s'ì„(를) 시ë„합니다.\n" #: src/implicit.c:733 #, c-format msgid "Trying implicit prerequisite '%s'.\n" msgstr "ë¬µì‹œì  ì„ í–‰ì¡°ê±´ '%s'ì„(를) 시ë„합니다.\n" #: src/implicit.c:772 #, c-format msgid "Found prerequisite '%s' as VPATH '%s'\n" msgstr "VPATH '%2$s'ì—서 선행조건 '%1$s'ì„(를) 찾았습니다\n" #: src/implicit.c:786 #, c-format msgid "Looking for a rule with intermediate file '%s'.\n" msgstr "중간 íŒŒì¼ '%s'ì— ëŒ€í•œ ë¬µì‹œì  ê·œì¹™ì„ ì°¾ê³  있습니다.\n" #: src/job.c:370 msgid "Cannot create a temporary file\n" msgstr "임시 파ì¼ì„ 만들 수 없습니다\n" #: src/job.c:548 msgid " (core dumped)" msgstr " (메모리 ë¤í”„ë¨)" #: src/job.c:553 msgid " (ignored)" msgstr " (무시ë¨)" #: src/job.c:557 src/job.c:1892 msgid "" msgstr "<내장>" #: src/job.c:573 #, c-format msgid "%s[%s: %s] Error %d%s" msgstr "%s[%s: %s] 오류 %d%s" #: src/job.c:662 #, c-format msgid "*** Waiting for unfinished jobs...." msgstr "*** ë나지 ì•Šì€ ìž‘ì—…ì„ ê¸°ë‹¤ë¦¬ê³  있습니다...." #: src/job.c:704 #, c-format msgid "Live child %p (%s) PID %s %s\n" msgstr "살아있는 하위 프로세스 %p (%s) PID %s %s\n" #: src/job.c:706 src/job.c:900 src/job.c:1072 src/job.c:1644 #, c-format msgid " (remote)" msgstr " (ì›ê²©)" #: src/job.c:898 #, c-format msgid "Reaping winning child %p PID %s %s\n" msgstr "성공한 하위 프로세스 %p PID %s %sì„(를) 거둬들입니다\n" #: src/job.c:899 #, c-format msgid "Reaping losing child %p PID %s %s\n" msgstr "실패한 하위 프로세스 %p PID %s %sì„(를) 거둬들입니다\n" #: src/job.c:950 #, c-format msgid "Cleaning up temp batch file %s\n" msgstr "임시 배치 íŒŒì¼ %sì„(를) ì§€ì›ë‹ˆë‹¤\n" #: src/job.c:956 #, c-format msgid "Cleaning up temp batch file %s failed (%d)\n" msgstr "임시 배치 íŒŒì¼ %s 지우기가 실패했습니다(%d)\n" #: src/job.c:1071 #, c-format msgid "Removing child %p PID %s%s from chain.\n" msgstr "하위 프로세스 %p PID %s%sì„(를) ì²´ì¸ì—서 ì§€ì›ë‹ˆë‹¤.\n" #: src/job.c:1120 #, c-format msgid "Released token for child %p (%s).\n" msgstr "하위 프로세스 %p(%s)ì— í† í°ì„ ë‚´ì–´ ì¤ë‹ˆë‹¤.\n" #: src/job.c:1575 src/job.c:2487 #, c-format msgid "process_easy() failed to launch process (e=%ld)\n" msgstr "process_easy()ê°€ 프로세스를 시작하는 ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤(e=%ld)\n" #: src/job.c:1579 src/job.c:2491 #, c-format msgid "" "\n" "Counted %d args in failed launch\n" msgstr "" "\n" "실행 실패ì—서 ì¸ìˆ˜ %dê°œ\n" #: src/job.c:1642 #, c-format msgid "Putting child %p (%s) PID %s%s on the chain.\n" msgstr "하위 프로세스 %p(%s) PID %s%sì„(를) ì²´ì¸ì— 넣습니다.\n" #: src/job.c:1875 #, c-format msgid "Obtained token for child %p (%s).\n" msgstr "하위 프로세스 %p(%s)ì—서 토í°ì„ 받았습니다.\n" #: src/job.c:1902 #, c-format msgid "%s: target '%s' does not exist" msgstr "%s: '%s' íƒ€ê²Ÿì´ ì—†ìŠµë‹ˆë‹¤" #: src/job.c:1905 #, c-format msgid "%s: update target '%s' due to: %s" msgstr "%s: '%s' 타겟 ì—…ë°ì´íЏ, ì´ìœ : %s" #: src/job.c:2108 #, c-format msgid "cannot enforce load limits on this operating system" msgstr "ì´ ìš´ì˜ ì²´ì œì—서는 부하 ì œí•œì„ ê°•ì œí•  수 없습니다" #: src/job.c:2110 msgid "cannot enforce load limit: " msgstr "부하 ì œí•œì„ ê°•ì œí•  수 없습니다: " #: src/job.c:2200 #, c-format msgid "no more file handles: could not duplicate stdin\n" msgstr "íŒŒì¼ í•¸ë“¤ì´ ì—†ìŒ: 표준 ìž…ë ¥ì„ ë³µì‚¬í•  수 없습니다\n" #: src/job.c:2212 #, c-format msgid "no more file handles: could not duplicate stdout\n" msgstr "íŒŒì¼ í•¸ë“¤ì´ ì—†ìŒ: 표준 ì¶œë ¥ì„ ë³µì‚¬í•  수 없습니다\n" #: src/job.c:2226 #, c-format msgid "no more file handles: could not duplicate stderr\n" msgstr "íŒŒì¼ í•¸ë“¤ì´ ì—†ìŒ: 표준 오류를 복사할 수 없습니다\n" #: src/job.c:2241 #, c-format msgid "Could not restore stdin\n" msgstr "표준 ìž…ë ¥ì„ ë³µêµ¬í•  수 없습니다\n" #: src/job.c:2249 #, c-format msgid "Could not restore stdout\n" msgstr "표준 ì¶œë ¥ì„ ë³µêµ¬í•  수 없습니다\n" #: src/job.c:2257 #, c-format msgid "Could not restore stderr\n" msgstr "표준 오류를 복구할 수 없습니다\n" #: src/job.c:2520 #, c-format msgid "make reaped child pid %s, still waiting for pid %s\n" msgstr "" "하위 프로세스 PID %sì„(를) 거둬들ì´ê³ , ì•„ì§ PID %sì„(를) 기다리고 있습니다\n" #: src/job.c:2623 #, c-format msgid "spawnvpe: environment space might be exhausted" msgstr "spawnvpe: 환경 변수 ê³µê°„ì´ ë°”ë‹¥ë‚¬ì„ ìˆ˜ 있습니다" #: src/job.c:2862 #, c-format msgid "$SHELL changed (was '%s', now '%s')\n" msgstr "$SHELLì´ ë°”ë€Œì—ˆìŠµë‹ˆë‹¤(과거 '%s', 현재 '%s')\n" #: src/job.c:3300 src/job.c:3485 #, c-format msgid "Creating temporary batch file %s\n" msgstr "임시 배치 íŒŒì¼ %sì„(를) 만듭니다\n" #: src/job.c:3308 #, c-format msgid "" "Batch file contents:\n" "\t@echo off\n" msgstr "" "배치 íŒŒì¼ ë‚´ìš©:\n" "\t@echo off\n" #: src/job.c:3497 #, c-format msgid "" "Batch file contents:%s\n" "\t%s\n" msgstr "" "배치 íŒŒì¼ ë‚´ìš©:%s\n" "\t%s\n" # ??? 디버깅 메세지 #: src/job.c:3605 #, c-format msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n" msgstr "%s (%d번째 줄) ìž˜ëª»ëœ ì‰˜ 컨í…스트 (!unixy && !batch_mode_shell)\n" #: src/load.c:60 #, c-format msgid "Failed to open global symbol table: %s" msgstr "ì „ì—­ 심볼 í…Œì´ë¸”ì„ ì—¬ëŠ”ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤: %s" #: src/load.c:97 #, c-format msgid "Loaded object %s is not declared to be GPL compatible" msgstr "ì½ì–´ë“¤ì¸ %s 오브ì íŠ¸ëŠ” GPL 호환ì´ë¼ê³  선언하지 않았습니다" #: src/load.c:104 #, c-format msgid "Failed to load symbol %s from %s: %s" msgstr "%s ì‹¬ë³¼ì„ %sì—서 ì½ì–´ë“¤ì´ëŠ”ë° ì‹¤íŒ¨: %s" #: src/load.c:149 #, c-format msgid "Empty symbol name for load: %s" msgstr "ì½ì–´ë“¤ì¼ 심볼 ì´ë¦„ì´ ë¹„ì—ˆìŒ: %s" #: src/load.c:204 #, c-format msgid "Loading symbol %s from %s\n" msgstr "%s ì‹¬ë³¼ì„ %sì—서 ì½ì–´ë“¤ìž„\n" #: src/load.c:256 #, c-format msgid "The 'load' operation is not supported on this platform." msgstr "'load' ìž‘ì—…ì€ ì´ í”Œëž«í¼ì—서 ì§€ì›ë˜ì§€ 않습니다." #: src/main.c:335 msgid "Options:\n" msgstr "옵션:\n" #: src/main.c:336 msgid " -b, -m Ignored for compatibility.\n" msgstr " -b, -m 무시ë©ë‹ˆë‹¤, í˜¸í™˜ì„ ìœ„í•´ 유지.\n" #: src/main.c:338 msgid " -B, --always-make Unconditionally make all targets.\n" msgstr " -B, --always-make ì¡°ê±´ì— ê´€ê³„ ì—†ì´ ëª¨ë“  íƒ€ê²Ÿì„ ë§Œë“­ë‹ˆë‹¤.\n" #: src/main.c:340 msgid "" " -C DIRECTORY, --directory=DIRECTORY\n" " Change to DIRECTORY before doing anything.\n" msgstr "" " -C <디렉터리>, --directory=<디렉터리>\n" " 뭔가 하기 ì „ì— <디렉터리>로 ì´ë™í•©ë‹ˆë‹¤.\n" #: src/main.c:343 msgid " -d Print lots of debugging information.\n" msgstr " -d 여러 가지 디버깅 정보를 출력합니다.\n" #: src/main.c:345 msgid "" " --debug[=FLAGS] Print various types of debugging information.\n" msgstr "" " --debug[=플래그] 여러 가지 ì¢…ë¥˜ì˜ ë””ë²„ê¹… 정보를 출력합니다.\n" #: src/main.c:347 msgid "" " -e, --environment-overrides\n" " Environment variables override makefiles.\n" msgstr "" " -e, --environment-overrides\n" " 환경변수가 ë©”ì´í¬íŒŒì¼ ë‚´ìš©ì— ìš°ì„ í•©ë‹ˆë‹¤.\n" #: src/main.c:350 msgid "" " -E STRING, --eval=STRING Evaluate STRING as a makefile statement.\n" msgstr "" " -E <문ìžì—´>, --eval=<문ìžì—´>\n" " <문ìžì—´>ì„ ë©”ì´í¬íŒŒì¼ 내용으로 í•´ì„합니다.\n" #: src/main.c:352 msgid "" " -f FILE, --file=FILE, --makefile=FILE\n" " Read FILE as a makefile.\n" msgstr "" " -f <파ì¼>, --file=<파ì¼>, --makefile=<파ì¼>\n" " <파ì¼>ì„ ë©”ì´í¬íŒŒì¼ë¡œ ì½ìŠµë‹ˆë‹¤.\n" #: src/main.c:355 msgid " -h, --help Print this message and exit.\n" msgstr " -h, --help ì´ ë©”ì‹œì§€ë¥¼ 출력하고 ë냅니다.\n" #: src/main.c:357 msgid " -i, --ignore-errors Ignore errors from recipes.\n" msgstr " -i, --ignore-errors 명령ì—서 ë°œìƒí•˜ëŠ” 오류를 무시합니다.\n" #: src/main.c:359 msgid "" " -I DIRECTORY, --include-dir=DIRECTORY\n" " Search DIRECTORY for included makefiles.\n" msgstr "" " -I <디렉터리>, --include-dir=<디렉터리>\n" " í¬í•¨í•  ë©”ì´í¬íŒŒì¼ì„ <디렉터리>ì—서 찾습니다.\n" #: src/main.c:362 msgid "" " -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no " "arg.\n" msgstr "" " -j [N], --jobs[=N] ë™ì‹œì— Nê°œì˜ ìž‘ì—… 허용, ì¸ìž 없으면 무한대로 í—ˆ" "ìš©.\n" #: src/main.c:364 msgid "" " -k, --keep-going Keep going when some targets can't be made.\n" msgstr "" " -k, --keep-going ì¼ë¶€ íƒ€ê²Ÿì„ ë§Œë“¤ 수 ì—†ë”ë¼ë„ ê³„ì† ì§„í–‰í•©ë‹ˆë‹¤.\n" #: src/main.c:366 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" " 로드가 N 아래로 내려가야 ë™ì‹œ 작업 시작합니" "다.\n" #: src/main.c:369 msgid "" " -L, --check-symlink-times Use the latest mtime between symlinks and " "target.\n" msgstr "" " -L, --check-symlink-times 심볼릭 ë§í¬ì™€ 실제 중 ë” ìµœê·¼ 수정 시ê°ì„\n" " 사용합니다.\n" #: src/main.c:371 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" #: src/main.c:374 msgid "" " -o FILE, --old-file=FILE, --assume-old=FILE\n" " Consider FILE to be very old and don't remake " "it.\n" msgstr "" " -o <파ì¼>, --old-file=<파ì¼>, --assume-old=<파ì¼>\n" " <파ì¼>ì´ ì•„ì£¼ 오래 ë˜ì—ˆë‹¤ê³  ìƒê°í•˜ê³  다시 만들" "ì§€\n" " 않습니다.\n" #: src/main.c:377 msgid "" " -O[TYPE], --output-sync[=TYPE]\n" " Synchronize output of parallel jobs by TYPE.\n" msgstr "" " -O[ë°©ì‹], --output-sync[=ë°©ì‹]\n" " 병렬 ìž‘ì—…ì˜ ì¶œë ¥ì„ <ë°©ì‹>ì— ë”°ë¼ ë§žì¶¥ë‹ˆë‹¤.\n" #: src/main.c:380 msgid " -p, --print-data-base Print make's internal database.\n" msgstr " -p, --print-data-base makeì˜ ë‚´ë¶€ ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 출력합니다.\n" #: src/main.c:382 msgid "" " -q, --question Run no recipe; exit status says if up to " "date.\n" msgstr "" " -q, --question ëª…ë ¹ì„ ì‹¤í–‰í•˜ì§€ 않ìŒ. 종료 ìƒíƒœë¡œ ì—…ë°ì´íЏ\n" " 여부를 알 수 있습니다.\n" #: src/main.c:384 msgid " -r, --no-builtin-rules Disable the built-in implicit rules.\n" msgstr " -r, --no-builtin-rules 내장 ë¬µì‹œì  ê·œì¹™ì„ ì‚¬ìš©í•˜ì§€ 않습니다.\n" #: src/main.c:386 msgid " -R, --no-builtin-variables Disable the built-in variable settings.\n" msgstr " -R, --no-builtin-variables 내장 변수를 지정하지 못하게 합니다.\n" #: src/main.c:388 msgid " -s, --silent, --quiet Don't echo recipes.\n" msgstr " -s, --silent, --quiet 명령어를 출력하지 않습니다.\n" #: src/main.c:390 msgid " --no-silent Echo recipes (disable --silent mode).\n" msgstr "" " --no-silent 명령어를 출력합니다. (--silent 모드 ë„기)\n" #: src/main.c:392 msgid "" " -S, --no-keep-going, --stop\n" " Turns off -k.\n" msgstr "" " -S, --no-keep-going, --stop\n" " -k ì˜µì…˜ì„ ë•니다.\n" #: src/main.c:395 msgid " -t, --touch Touch targets instead of remaking them.\n" msgstr "" " -t, --touch íƒ€ê²Ÿì„ ë‹¤ì‹œ 만들지 않고 touchë§Œ 합니다.\n" #: src/main.c:397 msgid " --trace Print tracing information.\n" msgstr " --trace ì¶”ì  ì •ë³´ë¥¼ 표시합니다.\n" #: src/main.c:399 msgid "" " -v, --version Print the version number of make and exit.\n" msgstr " -v, --version makeì˜ ë²„ì „ 번호를 출력하고 ë냅니다.\n" #: src/main.c:401 msgid " -w, --print-directory Print the current directory.\n" msgstr " -w, --print-directory 현재 디렉터리를 출력합니다.\n" #: src/main.c:403 msgid "" " --no-print-directory Turn off -w, even if it was turned on " "implicitly.\n" msgstr " --no-print-directory 묵시ì ìœ¼ë¡œ 켜져 있ë”ë¼ë„ -w를 ë•니다.\n" #: src/main.c:405 msgid "" " -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n" " Consider FILE to be infinitely new.\n" msgstr "" " -W <파ì¼>, --what-if=<파ì¼>, --new-file=<파ì¼>, --assume-new=<파ì¼>\n" " <파ì¼>ì„ ë¬´í•œížˆ ê³„ì† ìƒˆë¡œìš´ 것으로 취급합니" "다.\n" #: src/main.c:408 msgid "" " --warn-undefined-variables Warn when an undefined variable is " "referenced.\n" msgstr "" " --warn-undefined-variables ì •ì˜ë˜ì§€ ì•Šì€ ë³€ìˆ˜ë¥¼ 참조할 때 경고를 냅니다.\n" #: src/main.c:671 #, c-format msgid "empty string invalid as file name" msgstr "빈 문ìžì—´ì€ íŒŒì¼ ì´ë¦„으로 ë¶€ì ì ˆí•©ë‹ˆë‹¤" #: src/main.c:754 #, c-format msgid "unknown debug level specification '%s'" msgstr "디버깅 단계 지정 '%s'ì´(ê°€) 잘못ë˜ì—ˆìŠµë‹ˆë‹¤" #: src/main.c:794 #, c-format msgid "unknown output-sync type '%s'" msgstr "알 수 없는 output-sync ë°©ì‹ '%s'" #: src/main.c:849 #, c-format msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n" msgstr "%s: ì¸í„°ëŸ½íЏ/예외가 발견ë˜ì—ˆìŠµë‹ˆë‹¤(코드 = 0x%lx, 주소 = 0x%p)\n" #: src/main.c:856 #, c-format msgid "" "\n" "Unhandled exception filter called from program %s\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" msgstr "" "\n" "프로그램 %sì—서 처리ë˜ì§€ ì•Šì€ ì˜ˆì™¸ê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤\n" "예외코드 = %lx\n" "예외플래그 = %lx\n" "예외주소 = 0x%p\n" #: src/main.c:864 #, c-format msgid "Access violation: write operation at address 0x%p\n" msgstr "ì ‘ê·¼ 권한 위반: 주소 0x%pì— ì“°ê¸°\n" #: src/main.c:865 #, c-format msgid "Access violation: read operation at address 0x%p\n" msgstr "ì ‘ê·¼ 권한 위반: 주소 0x%pì—서 ì½ê¸°\n" #: src/main.c:941 src/main.c:956 #, c-format msgid "find_and_set_shell() setting default_shell = %s\n" msgstr "find_and_set_shell() 설정 default_shell = %s\n" #: src/main.c:1009 #, c-format msgid "find_and_set_shell() path search set default_shell = %s\n" msgstr "find_and_set_shell() 경로 íƒìƒ‰ 설정 default_shell = %s\n" #: src/main.c:1609 #, c-format msgid "" "warning: jobserver unavailable: using -j1. Add '+' to parent make rule." msgstr "" "경고: 작업서버를 사용할 수 없습니다: -j1ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. ìƒìœ„ ë©”ì´í¬ ê·œì¹™ì— " "'+'를 추가합니다." #: src/main.c:1617 #, c-format msgid "warning: -j%d forced in submake: resetting jobserver mode." msgstr "" "경고: 파ìƒëœ ë©”ì´í¬ì—서 -j%d ì˜µì…˜ì´ ê°•ì œë˜ì—ˆìŠµë‹ˆë‹¤: 작업서버 모드를 초기화합" "니다." #: src/main.c:1781 #, c-format msgid "Makefile from standard input specified twice." msgstr "표준입력ì—서 받아들ì´ëŠ” ë©”ì´í¬íŒŒì¼ì´ ë‘ ë²ˆ ì´ìƒ 지정ë˜ì—ˆìŠµë‹ˆë‹¤." #: src/main.c:1819 src/vmsjobs.c:1248 msgid "fopen (temporary file)" msgstr "fopen(임시 파ì¼)" #: src/main.c:1825 msgid "fwrite (temporary file)" msgstr "fwrite(임시 파ì¼)" #: src/main.c:2004 #, c-format msgid "warning: -j%d forced in makefile: resetting jobserver mode." msgstr "" "경고: ë©”ì´í¬íŒŒì¼ì—서 -j%d ì˜µì…˜ì´ ê°•ì œë˜ì—ˆìŠµë‹ˆë‹¤: 작업서버 모드를 초기화합니" "다." #: src/main.c:2068 #, c-format msgid "Parallel jobs (-j) are not supported on this platform." msgstr "병렬 작업(-j)ì€ ì´ í”Œëž«í¼ì—서 ì§€ì›í•˜ì§€ 않습니다." #: src/main.c:2069 #, c-format msgid "Resetting to single job (-j1) mode." msgstr "ë‹¨ì¼ ìž‘ì—… (-j1) 모드로 ëŒì•„갑니다." #: src/main.c:2109 #, c-format msgid "Symbolic links not supported: disabling -L." msgstr "심볼릭 ë§í¬ë¥¼ ì§€ì›í•˜ì§€ 않습니다: -L ì˜µì…˜ì„ ë•니다." #: src/main.c:2190 #, c-format msgid "Updating makefiles....\n" msgstr "ë©”ì´í¬íŒŒì¼ì„ ì—…ë°ì´íŠ¸í•˜ê³  있습니다....\n" #: src/main.c:2226 #, c-format msgid "Makefile '%s' might loop; not remaking it.\n" msgstr "ë©”ì´í¬íŒŒì¼ '%s'ì€(는) 반복할 수 있으므로, 다시 만들지 않습니다.\n" #: src/main.c:2303 #, c-format msgid "Failed to remake makefile '%s'." msgstr "'%s' ë©”ì´í¬íŒŒì¼ì„ 다시 ë§Œë“œëŠ”ë° ì‹¤íŒ¨." #: src/main.c:2323 #, c-format msgid "Included makefile '%s' was not found." msgstr "í¬í•¨ëœ ë©”ì´í¬íŒŒì¼ '%s'ì„(를) 찾지 못했습니다." #: src/main.c:2328 #, c-format msgid "Makefile '%s' was not found" msgstr "ë©”ì´í¬íŒŒì¼ '%s'ì„(를) 찾지 못했습니다" #: src/main.c:2394 #, c-format msgid "Couldn't change back to original directory." msgstr "ì›ëž˜ 디렉터리로 ëŒì•„ê°ˆ 수 없습니다." #: src/main.c:2402 #, c-format msgid "Re-executing[%u]:" msgstr "재실행[%u]:" #: src/main.c:2522 msgid "unlink (temporary file): " msgstr "unlink (임시 파ì¼): " #: src/main.c:2555 #, c-format msgid ".DEFAULT_GOAL contains more than one target" msgstr ".DEFAULT_GOAL ì•ˆì— íƒ€ê²Ÿì´ ì—¬ëŸ¬ ê°œ 들어 있습니다" #: src/main.c:2579 #, c-format msgid "No targets" msgstr "타겟 ì—†ìŒ" #: src/main.c:2581 #, c-format msgid "No targets specified and no makefile found" msgstr "íƒ€ê²Ÿì´ ì§€ì •ë˜ì§€ 않았고 ë©”ì´í¬íŒŒì¼ì´ 없습니다" #: src/main.c:2586 #, c-format msgid "Updating goal targets....\n" msgstr "최종 íƒ€ê²Ÿì„ ê°±ì‹ í•©ë‹ˆë‹¤....\n" #: src/main.c:2610 #, c-format msgid "warning: Clock skew detected. Your build may be incomplete." msgstr "" "경고: 시계가 잘못ë˜ì—ˆìŒì´ 발견ë˜ì—ˆìŠµë‹ˆë‹¤. 빌드가 불완전할 수 있습니다." #: src/main.c:2804 #, c-format msgid "Usage: %s [options] [target] ...\n" msgstr "사용법: %s [옵션] [타겟] ...\n" #: src/main.c:2810 #, c-format msgid "" "\n" "This program built for %s\n" msgstr "" "\n" "ì´ í”„ë¡œê·¸ëž¨ì€ %sì—서 사용하ë„ë¡ ë¹Œë“œë˜ì—ˆìŠµë‹ˆë‹¤\n" #: src/main.c:2812 #, c-format msgid "" "\n" "This program built for %s (%s)\n" msgstr "" "\n" "ì´ í”„ë¡œê·¸ëž¨ì€ %s(%s)ì—서 사용하ë„ë¡ ë¹Œë“œë˜ì—ˆìŠµë‹ˆë‹¤\n" #: src/main.c:2815 #, c-format msgid "Report bugs to \n" msgstr "문제ì ì„ 로 알려 주십시오.\n" #: src/main.c:2901 #, c-format msgid "the '%s%s' option requires a non-empty string argument" msgstr "'%s%s' ì˜µì…˜ì€ ë¹„ì–´ 있지 ì•Šì€ ë¬¸ìžì—´ ì¸ìˆ˜ê°€ 필요합니다" #: src/main.c:2965 #, c-format msgid "the '-%c' option requires a positive integer argument" msgstr "'-%c' ì˜µì…˜ì€ 0보다 í° ì •ìˆ˜ ì¸ìˆ˜ê°€ 필요합니다" #: src/main.c:3363 #, c-format msgid "%sBuilt for %s\n" msgstr "%s%s 빌드\n" #: src/main.c:3365 #, c-format msgid "%sBuilt for %s (%s)\n" msgstr "%s%s(%s) 빌드\n" #: src/main.c:3376 #, c-format msgid "" "%sLicense GPLv3+: GNU GPL version 3 or later \n" "%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 GPL 버전 3 ë˜ëŠ” ì´í›„ \n" "%sThis is free software: you are free to change and redistribute it.\n" "%sThere is NO WARRANTY, to the extent permitted by law.\n" #: src/main.c:3397 #, c-format msgid "" "\n" "# Make data base, printed on %s" msgstr "" "\n" "# ë©”ì´í¬ ë°ì´í„°ë² ì´ìФ, %sì— í‘œì‹œ" #: src/main.c:3407 #, c-format msgid "" "\n" "# Finished Make data base on %s\n" msgstr "" "\n" "# ë©”ì´í¬ ë°ì´í„°ë² ì´ìФ 마침, %sì—서\n" #: src/misc.c:643 #, c-format msgid "%s: user %lu (real %lu), group %lu (real %lu)\n" msgstr "%s: ì‚¬ìš©ìž %lu (실제 %lu), 그룹 %lu (실제 %lu)\n" #: src/misc.c:664 msgid "Initialized access" msgstr "ì ‘ê·¼ 권한 초기화" #: src/misc.c:743 msgid "User access" msgstr "ì‚¬ìš©ìž ì ‘ê·¼" #: src/misc.c:791 msgid "Make access" msgstr "ë©”ì´í¬ ì ‘ê·¼" #: src/misc.c:825 msgid "Child access" msgstr "하위 ì ‘ê·¼" #: src/output.c:97 #, c-format msgid "%s: Entering an unknown directory\n" msgstr "%s: 알 수 없는 디렉터리 들어ê°\n" #: src/output.c:99 #, c-format msgid "%s: Leaving an unknown directory\n" msgstr "%s: 알 수 없는 디렉터리 나ê°\n" #: src/output.c:102 #, c-format msgid "%s: Entering directory '%s'\n" msgstr "%s: 디렉터리 '%s' 들어ê°\n" #: src/output.c:104 #, c-format msgid "%s: Leaving directory '%s'\n" msgstr "%s: 디렉터리 '%s' 나ê°\n" #: src/output.c:108 #, c-format msgid "%s[%u]: Entering an unknown directory\n" msgstr "%s[%u]: 알 수 없는 디렉터리 들어ê°\n" #: src/output.c:110 #, c-format msgid "%s[%u]: Leaving an unknown directory\n" msgstr "%s[%u]: 알 수 없는 디렉터리 나ê°\n" #: src/output.c:113 #, c-format msgid "%s[%u]: Entering directory '%s'\n" msgstr "%s[%u]: 디렉터리 '%s' 들어ê°\n" #: src/output.c:115 #, c-format msgid "%s[%u]: Leaving directory '%s'\n" msgstr "%s[%u]: 디렉터리 '%s' 나ê°\n" #: src/output.c:442 src/output.c:444 #, c-format msgid "write error: stdout" msgstr "쓰기 오류: 표준 출력" #: src/output.c:624 msgid ". Stop.\n" msgstr ". 멈춤.\n" #: src/output.c:658 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" #: src/output.c:667 #, c-format msgid "%s: %s" msgstr "%s: %s" #: src/output.h:62 #, c-format msgid "-O[TYPE] (--output-sync[=TYPE]) is not configured for this build." msgstr "-O[ë°©ì‹] (--output-sync[=ë°©ì‹]) ì˜µì…˜ì€ ì´ ë¹Œë“œì—서 사용하지 않습니다." #: src/posixos.c:90 msgid "creating jobs pipe" msgstr "작업 파ì´í”„ ìƒì„±" #: src/posixos.c:98 src/posixos.c:251 msgid "duping jobs pipe" msgstr "작업 파ì´í”„ dup() 수행" #: src/posixos.c:104 msgid "init jobserver pipe" msgstr "작업서버 파ì´í”„ 초기화" #: src/posixos.c:119 #, c-format msgid "internal error: invalid --jobserver-auth string '%s'" msgstr "ë‚´ë¶€ 오류: ìž˜ëª»ëœ --jobserver-auth 문ìžì—´ '%s'" #: src/posixos.c:122 #, c-format msgid "Jobserver client (fds %d,%d)\n" msgstr "작업 서버 í´ë¼ì´ì–¸íЏ(íŒŒì¼ ë””ìŠ¤í¬ë¦½í„° %d,%d)\n" #: src/posixos.c:138 msgid "jobserver pipeline" msgstr "작업서버 파ì´í”„ë¼ì¸" # ??? 디버깅 메세지 #: src/posixos.c:186 msgid "write jobserver" msgstr "작업서버 쓰기" #: src/posixos.c:300 #, c-format msgid "job server shut down" msgstr "작업 서버가 꺼졌습니다" #: src/posixos.c:303 msgid "pselect jobs pipe" msgstr "pselect 작업 파ì´í”„" #: src/posixos.c:319 src/posixos.c:433 msgid "read jobs pipe" msgstr "작업 파ì´í”„ ì½ê¸°" #: src/read.c:181 #, c-format msgid "Reading makefiles...\n" msgstr "ë©”ì´í¬íŒŒì¼ì„ ì½ê³  있습니다...\n" #: src/read.c:336 #, c-format msgid "Reading makefile '%s'" msgstr "'%s' ë©”ì´í¬íŒŒì¼ì„ ì½ê³  있습니다" #: src/read.c:338 #, c-format msgid " (no default goal)" msgstr " (최종 íƒ€ê²Ÿì´ ì—†ìŒ)" #: src/read.c:340 #, c-format msgid " (search path)" msgstr " (íƒìƒ‰ 경로)" #: src/read.c:342 #, c-format msgid " (don't care)" msgstr " (ìƒê´€ 안함)" #: src/read.c:344 #, c-format msgid " (no ~ expansion)" msgstr " (~ 확장 ì—†ìŒ)" #: src/read.c:655 #, c-format msgid "Skipping UTF-8 BOM in makefile '%s'\n" msgstr "ë©”ì´í¬íŒŒì¼ '%s'ì—서 UTF-8 BOM 무시\n" #: src/read.c:658 #, c-format msgid "Skipping UTF-8 BOM in makefile buffer\n" msgstr "ë©”ì´í¬íŒŒì¼ 버í¼ì—서 UTF-8 BOM 무시\n" #: src/read.c:787 #, c-format msgid "invalid syntax in conditional" msgstr "ì¡°ê±´ë¬¸ì— ë¶€ì ì ˆí•œ ë¬¸ë²•ì´ ì“°ìž„" #: src/read.c:960 #, c-format msgid "%s: failed to load" msgstr "%s: ì½ì–´ë“¤ì´ëŠ”ë° ì‹¤íŒ¨" #: src/read.c:986 #, c-format msgid "recipe commences before first target" msgstr "첫번째 타겟보다 앞ì—서 명령어가 시작ë˜ì—ˆìŠµë‹ˆë‹¤" #: src/read.c:1035 #, c-format msgid "missing rule before recipe" msgstr "명령 ì•žì— ê·œì¹™ì´ ë¹ ì¡ŒìŒ" #: src/read.c:1136 #, c-format msgid "missing separator (did you mean TAB instead of 8 spaces?)" msgstr "" "분리 기호가 없습니다 (빈 칸 8개가 ì•„ë‹ˆë¼ íƒ­ì„ ì“°ë ¤ê³  한 것 아니었습니까?)" #: src/read.c:1138 #, c-format msgid "missing separator" msgstr "분리 기호가 빠졌ìŒ" #: src/read.c:1283 #, c-format msgid "missing target pattern" msgstr "타겟 íŒ¨í„´ì´ ë¹ ì¡ŒìŒ" #: src/read.c:1285 #, c-format msgid "multiple target patterns" msgstr "다중 타겟 패턴" #: src/read.c:1289 #, c-format msgid "target pattern contains no '%%'" msgstr "타겟 íŒ¨í„´ì— '%%'ê°€ 없습니다." #: src/read.c:1404 #, c-format msgid "missing 'endif'" msgstr "'endif'ê°€ 빠졌ìŒ" #: src/read.c:1443 src/read.c:1488 src/variable.c:1600 #, c-format msgid "empty variable name" msgstr "빈 변수 ì´ë¦„" #: src/read.c:1478 #, c-format msgid "extraneous text after 'define' directive" msgstr "'define' ì§€ì‹œìž ë’¤ì— í•„ìš” 없는 í…스트 있ìŒ" #: src/read.c:1503 #, c-format msgid "missing 'endef', unterminated 'define'" msgstr "'endef'ê°€ 빠졌ìŒ. 'define'ì„ ë§ˆì¹˜ì§€ 않았습니다" #: src/read.c:1531 #, c-format msgid "extraneous text after 'endef' directive" msgstr "'endef' ì§€ì‹œìž ë’¤ì— í•„ìš” 없는 í…스트가 있ìŒ" #: src/read.c:1603 #, c-format msgid "extraneous text after '%s' directive" msgstr "'%s' ì§€ì‹œìž ë’¤ì— í•„ìš” 없는 í…스트가 있ìŒ" #: src/read.c:1604 #, c-format msgid "extraneous '%s'" msgstr "í•„ìš” 없는 '%s'" #: src/read.c:1632 #, c-format msgid "only one 'else' per conditional" msgstr "한 ê°œì˜ ì¡°ê±´ì—는 한 ê°œì˜ 'else'ë§Œ 있어야 합니다" #: src/read.c:1908 #, c-format msgid "Malformed target-specific variable definition" msgstr "타겟별 변수 ì •ì˜ í˜•ì‹ì´ 틀렸습니다" #: src/read.c:1968 #, c-format msgid "prerequisites cannot be defined in recipes" msgstr "명령어ì—서 ì„ í–‰ì¡°ê±´ì„ ì •ì˜í•  수 없습니다" #: src/read.c:1986 #, c-format msgid "grouped targets must provide a recipe" msgstr "그룹 íƒ€ê²Ÿì€ ëª…ë ¹ì–´ë¥¼ 제공해야 합니다" #: src/read.c:2029 #, c-format msgid "mixed implicit and static pattern rules" msgstr "ë¬µì‹œì  íŒ¨í„´ 룰과 ê³ ì •ëœ íŒ¨í„´ë£°ì´ ì„žì˜€ìŠµë‹ˆë‹¤" #: src/read.c:2052 #, c-format msgid "mixed implicit and normal rules" msgstr "í˜¼í•©ëœ ë¬µì‹œì  ê·œì¹™ê³¼ ì¼ë°˜ì  규칙" #: src/read.c:2107 #, c-format msgid "target '%s' doesn't match the target pattern" msgstr "타겟 '%s'ì€(는) 타겟 íŒ¨í„´ì— ë§žì§€ 않습니다" #: src/read.c:2122 src/read.c:2168 #, c-format msgid "target file '%s' has both : and :: entries" msgstr "타겟 íŒŒì¼ '%s'ì€(는) :와 :: í•­ëª©ì„ ë™ì‹œì— ê°–ê³  있습니다" #: src/read.c:2128 #, c-format msgid "target '%s' given more than once in the same rule" msgstr "타겟 '%s'ì´(ê°€) ê°™ì€ ê·œì¹™ì—서 여러 번 주어졌습니다" #: src/read.c:2138 #, c-format msgid "warning: overriding recipe for target '%s'" msgstr "경고: 타겟 '%s'ì— ëŒ€í•œ 명령보다 우선합니다" #: src/read.c:2141 #, c-format msgid "warning: ignoring old recipe for target '%s'" msgstr "경고: 타겟 '%s'ì— ëŒ€í•œ 과거 ëª…ë ¹ì„ ë¬´ì‹œí•©ë‹ˆë‹¤" #: src/read.c:2254 #, c-format msgid "*** mixed implicit and normal rules: deprecated syntax" msgstr "*** í˜¼í•©ëœ ë¬µì‹œì  ê·œì¹™ê³¼ ì¼ë°˜ì  규칙: 추천하지 않는 문법입니다" #: src/read.c:2271 #, c-format msgid "warning: overriding group membership for target '%s'" msgstr "경고: 타겟 '%s'ì˜ ê·¸ë£¹ 소ì†ë³´ë‹¤ 우선합니다" #: src/read.c:2636 #, c-format msgid "warning: NUL character seen; rest of line ignored" msgstr "경고: NUL 문ìžê°€ 발견ë˜ì—ˆìŠµë‹ˆë‹¤. ì¤„ì˜ ë‚˜ë¨¸ì§€ëŠ” 무시ë©ë‹ˆë‹¤" #: src/remake.c:226 #, c-format msgid "Nothing to be done for '%s'." msgstr "'%s'ì„(를) 위해 í•  ì¼ì´ 없습니다." #: src/remake.c:227 #, c-format msgid "'%s' is up to date." msgstr "'%s'ì€(는) ì´ë¯¸ ì—…ë°ì´íЏë˜ì—ˆìŠµë‹ˆë‹¤." # pruneì´ truncateì˜ ì˜ë¯¸ì¸ê°€ 지운다는 ì˜ë¯¸ì¸ê°€?? #: src/remake.c:323 #, c-format msgid "Pruning file '%s'.\n" msgstr "'%s' 파ì¼ì„ 잘ë¼ëƒ…니다.\n" #: src/remake.c:389 #, c-format msgid "%sNo rule to make target '%s', needed by '%s'%s" msgstr "%1$s'%3$s'ì—서 필요한 '%2$s' íƒ€ê²Ÿì„ ë§Œë“¤ ê·œì¹™ì´ ì—†ìŠµë‹ˆë‹¤%4$s" #: src/remake.c:399 #, c-format msgid "%sNo rule to make target '%s'%s" msgstr "%s타겟 '%s'ì„(를) 만들 ê·œì¹™ì´ ì—†ìŠµë‹ˆë‹¤%s" #: src/remake.c:425 #, c-format msgid "Considering target file '%s'.\n" msgstr "'%s' 타겟 파ì¼ì„ 고려합니다.\n" #: src/remake.c:432 #, c-format msgid "Recently tried and failed to update file '%s'.\n" msgstr "ìµœê·¼ì— '%s' íŒŒì¼ ì—…ë°ì´íŠ¸ë¥¼ 시ë„í•´ 실패했습니다.\n" #: src/remake.c:444 #, c-format msgid "File '%s' was considered already.\n" msgstr "'%s' 파ì¼ì€ ì´ë¯¸ 검토했습니다.\n" #: src/remake.c:454 #, c-format msgid "Still updating file '%s'.\n" msgstr "ì•„ì§ '%s' 파ì¼ì„ ì—…ë°ì´íŠ¸í•˜ê³  있습니다.\n" #: src/remake.c:457 #, c-format msgid "Finished updating file '%s'.\n" msgstr "'%s' 파ì¼ì˜ ì—…ë°ì´íŠ¸ë¥¼ 마쳤습니다.\n" #: src/remake.c:486 #, c-format msgid "File '%s' does not exist.\n" msgstr "'%s' 파ì¼ì´ 없습니다.\n" #: src/remake.c:494 #, c-format msgid "" "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp" msgstr "" "*** Warning: .LOW_RESOLUTION_TIME íŒŒì¼ '%s'ì— ê³ í•´ìƒë„ 타임 스탬프가 들어 있" "습니다" #: src/remake.c:507 src/remake.c:1039 #, c-format msgid "Found an implicit rule for '%s'.\n" msgstr "'%s'ì— ëŒ€í•œ ë¬µì‹œì  ê·œì¹™ì„ ì°¾ì•˜ìŠµë‹ˆë‹¤.\n" #: src/remake.c:509 src/remake.c:1041 #, c-format msgid "No implicit rule found for '%s'.\n" msgstr "'%s'ì— ëŒ€í•œ ë¬µì‹œì  ê·œì¹™ì´ ì—†ìŠµë‹ˆë‹¤.\n" #: src/remake.c:515 #, c-format msgid "Using default recipe for '%s'.\n" msgstr "'%s'ì— ëŒ€í•´ 기본 명령 사용.\n" #: src/remake.c:549 src/remake.c:1088 #, c-format msgid "Circular %s <- %s dependency dropped." msgstr "%s <- %s ìƒí˜¸ ì˜ì¡´ì„±ì€ 무시ë©ë‹ˆë‹¤." #: src/remake.c:674 #, c-format msgid "Finished prerequisites of target file '%s'.\n" msgstr "타겟 íŒŒì¼ '%s'ì˜ ì„ í–‰ì¡°ê±´ì„ ë§ˆì³¤ìŠµë‹ˆë‹¤.\n" #: src/remake.c:680 #, c-format msgid "The prerequisites of '%s' are being made.\n" msgstr "'%s'ì˜ ì„ í–‰ì¡°ê±´ì´ ë§Œë“¤ì–´ì§€ê³  있습니다.\n" #: src/remake.c:694 #, c-format msgid "Giving up on target file '%s'.\n" msgstr "타겟 íŒŒì¼ '%s'ì„(를) í¬ê¸°í•©ë‹ˆë‹¤.\n" #: src/remake.c:699 #, c-format msgid "Target '%s' not remade because of errors." msgstr "오류로 '%s' íƒ€ê²Ÿì„ ë‹¤ì‹œ 만들지 못했습니다." #: src/remake.c:751 #, c-format msgid "Prerequisite '%s' is order-only for target '%s'.\n" msgstr "'%s' ì„ í–‰ ì¡°ê±´ì€ '%s' íƒ€ê²Ÿì— ëŒ€í•´ 순서만 ì„ í–‰ 조건입니다.\n" #: src/remake.c:756 #, c-format msgid "Prerequisite '%s' of target '%s' does not exist.\n" msgstr "타겟 '%2$s'ì˜ ì„ í–‰ì¡°ê±´ %1$sì´(ê°€) 없습니다.\n" #: src/remake.c:761 #, c-format msgid "Prerequisite '%s' is newer than target '%s'.\n" msgstr "'%s' ì„ í–‰ ì¡°ê±´ì´ '%s' 타겟보다 ë‚˜ì¤‘ì— ë§Œë“¤ì–´ì¡ŒìŠµë‹ˆë‹¤.\n" #: src/remake.c:764 #, c-format msgid "Prerequisite '%s' is older than target '%s'.\n" msgstr "'%s' ì„ í–‰ ì¡°ê±´ì´ '%s' 타겟보다 먼저 만들어졌습니다.\n" #: src/remake.c:782 #, c-format msgid "Target '%s' is double-colon and has no prerequisites.\n" msgstr "'%s' íƒ€ê²Ÿì€ ì½œë¡  ë‘ ê°œê°€ 붙었고 ì„ í–‰ì¡°ê±´ì´ ì—†ìŠµë‹ˆë‹¤.\n" #: src/remake.c:789 #, c-format msgid "No recipe for '%s' and no prerequisites actually changed.\n" msgstr "'%s'ì— ëŒ€í•œ 명령어가 없고 ì–´ë–¤ ì„ í–‰ì¡°ê±´ë„ ì‹¤ì œë¡œ 바뀌지 않았습니다.\n" #: src/remake.c:794 #, c-format msgid "Making '%s' due to always-make flag.\n" msgstr "always-make 옵션 ë•Œë¬¸ì— '%s' íƒ€ê²Ÿì„ ë§Œë“­ë‹ˆë‹¤.\n" #: src/remake.c:802 #, c-format msgid "No need to remake target '%s'" msgstr "'%s' íƒ€ê²Ÿì„ ë‹¤ì‹œ 만들 필요가 없습니다" #: src/remake.c:804 #, c-format msgid "; using VPATH name '%s'" msgstr "; VPATH ì´ë¦„ '%s'ì„(를) 사용합니다" #: src/remake.c:824 #, c-format msgid "Must remake target '%s'.\n" msgstr "'%s' íƒ€ê²Ÿì„ ë‹¤ì‹œ 만들어야 합니다.\n" #: src/remake.c:830 #, c-format msgid " Ignoring VPATH name '%s'.\n" msgstr " VPATH ì´ë¦„ '%s'ì„(를) 무시합니다.\n" #: src/remake.c:839 #, c-format msgid "Recipe of '%s' is being run.\n" msgstr "'%s'ì˜ ëª…ë ¹ì´ ì‹¤í–‰ 중입니다.\n" #: src/remake.c:846 #, c-format msgid "Failed to remake target file '%s'.\n" msgstr "'%s' 타겟 파ì¼ì„ 다시 ë§Œë“œëŠ”ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤.\n" #: src/remake.c:849 #, c-format msgid "Successfully remade target file '%s'.\n" msgstr "'%s' 타겟 파ì¼ì„ 성공ì ìœ¼ë¡œ 다시 만들었습니다.\n" #: src/remake.c:852 #, c-format msgid "Target file '%s' needs to be remade under -q.\n" msgstr "'%s' 타겟 파ì¼ì„ -q 옵션으로 다시 만들어야 합니다.\n" #: src/remake.c:1047 #, c-format msgid "Using default commands for '%s'.\n" msgstr "'%s'ì— ëŒ€í•´ 기본 ëª…ë ¹ì„ ì‚¬ìš©.\n" #: src/remake.c:1422 #, c-format msgid "Warning: File '%s' has modification time %s s in the future" msgstr "경고: '%s' 파ì¼ì˜ 변경 시ê°(%s)ì´ ë¯¸ëž˜ìž…ë‹ˆë‹¤" #: src/remake.c:1662 #, c-format msgid ".LIBPATTERNS element '%s' is not a pattern" msgstr ".LIBPATTERNSì˜ ì›ì†Œ '%s'ì´(ê°€) íŒ¨í„´ì´ ì•„ë‹™ë‹ˆë‹¤" # ??? 디버깅 메세지 -- 뭔지 알기 어려움 #: src/remote-cstms.c:122 #, c-format msgid "Customs won't export: %s\n" msgstr "Customsì€ exportë˜ì§€ 않습니다: %s\n" #: src/rule.c:289 #, c-format msgid "warning: ignoring prerequisites on suffix rule definition" msgstr "" #: src/rule.c:530 msgid "" "\n" "# Implicit Rules" msgstr "" "\n" "# ë¬µì‹œì  ê·œì¹™" #: src/rule.c:545 msgid "" "\n" "# No implicit rules." msgstr "" "\n" "# ë¬µì‹œì  ê·œì¹™ ì—†ìŒ." #: src/rule.c:548 #, c-format msgid "" "\n" "# %u implicit rules, %u (%.1f%%) terminal." msgstr "" "\n" "# ë¬µì‹œì  ê·œì¹™ %uê°œ, %u (%.1f%%) 터미ë„." #: src/rule.c:557 #, c-format msgid "BUG: num_pattern_rules is wrong! %u != %u" msgstr "버그: num_pattern_rules 틀렸습니다! %u != %u" #: src/signame.c:84 msgid "unknown signal" msgstr "알 수 없는 신호" #: src/signame.c:92 msgid "Hangup" msgstr "ëŠì–´ì§" #: src/signame.c:95 msgid "Interrupt" msgstr "ì¸í„°ëŸ½íЏ" #: src/signame.c:98 msgid "Quit" msgstr "ë내기" #: src/signame.c:101 msgid "Illegal Instruction" msgstr "ìž˜ëª»ëœ ëª…ë ¹" #: src/signame.c:104 msgid "Trace/breakpoint trap" msgstr "ì¶”ì /ì¤‘ë‹¨ì  íŠ¸ëž©" #: src/signame.c:109 msgid "Aborted" msgstr "중단ë¨" #: src/signame.c:112 msgid "IOT trap" msgstr "IOT 트랩" #: src/signame.c:115 msgid "EMT trap" msgstr "EMT 트랩" #: src/signame.c:118 msgid "Floating point exception" msgstr "ë¶€ë™ ì†Œìˆ˜ì  ì˜ˆì™¸" #: src/signame.c:121 msgid "Killed" msgstr "죽었ìŒ" #: src/signame.c:124 msgid "Bus error" msgstr "버스 오류" #: src/signame.c:127 msgid "Segmentation fault" msgstr "세그멘테ì´ì…˜ 오류" #: src/signame.c:130 msgid "Bad system call" msgstr "ìž˜ëª»ëœ ì‹œìŠ¤í…œ 호출" #: src/signame.c:133 msgid "Broken pipe" msgstr "깨어진 파ì´í”„" #: src/signame.c:136 msgid "Alarm clock" msgstr "ìžëª…종 시계" #: src/signame.c:139 msgid "Terminated" msgstr "종료ë¨" #: src/signame.c:142 msgid "User defined signal 1" msgstr "ì‚¬ìš©ìž ì •ì˜ ì‹ í˜¸ 1" #: src/signame.c:145 msgid "User defined signal 2" msgstr "ì‚¬ìš©ìž ì •ì˜ ì‹ í˜¸ 2" #: src/signame.c:150 src/signame.c:153 msgid "Child exited" msgstr "하위 프로세스 ë남" #: src/signame.c:156 msgid "Power failure" msgstr "ì „ë ¥ 중단" #: src/signame.c:159 msgid "Stopped" msgstr "중지ë¨" #: src/signame.c:162 msgid "Stopped (tty input)" msgstr "중지ë¨(tty ìž…ë ¥)" #: src/signame.c:165 msgid "Stopped (tty output)" msgstr "중지ë¨(tty 출력)" #: src/signame.c:168 msgid "Stopped (signal)" msgstr "중지ë¨(시그ë„)" #: src/signame.c:171 msgid "CPU time limit exceeded" msgstr "CPU 시간 제한 초과ë¨" #: src/signame.c:174 msgid "File size limit exceeded" msgstr "íŒŒì¼ í¬ê¸° 제한 초과ë¨" #: src/signame.c:177 msgid "Virtual timer expired" msgstr "ê°€ìƒ íƒ€ì´ë¨¸ 시간 초과ë¨" #: src/signame.c:180 msgid "Profiling timer expired" msgstr "프로파ì¼ë§ 타ì´ë¨¸ 시간 초과ë¨" #: src/signame.c:186 msgid "Window changed" msgstr "ì°½ì´ ë°”ë€Œì—ˆìŒ" #: src/signame.c:189 msgid "Continued" msgstr "계ì†ë¨" #: src/signame.c:192 msgid "Urgent I/O condition" msgstr "긴급한 입출력 ìƒí™©" #: src/signame.c:199 src/signame.c:208 msgid "I/O possible" msgstr "입출력 가능" #: src/signame.c:202 msgid "SIGWIND" msgstr "SIGWIND" #: src/signame.c:205 msgid "SIGPHONE" msgstr "SIGPHONE" #: src/signame.c:211 msgid "Resource lost" msgstr "ìžì› ì†ì‹¤" #: src/signame.c:214 msgid "Danger signal" msgstr "위험 신호" #: src/signame.c:217 msgid "Information request" msgstr "ì •ë³´ 요청" #: src/signame.c:220 msgid "Floating point co-processor not available" msgstr "ë¶€ë™ì†Œìˆ˜ì  ì—°ì‚° 보조프로세서가 없습니다" #: src/strcache.c:274 #, c-format msgid "" "\n" "%s No strcache buffers\n" msgstr "" "\n" "%s strcache ë²„í¼ ì—†ìŒ\n" #: src/strcache.c:304 #, c-format msgid "" "\n" "%s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu " "B\n" msgstr "" "\n" "%s strcache 버í¼: %lu (%lu) / 문ìžì—´ = %lu / 저장 공간 = %lu B / í‰ê·  = %lu " "B\n" #: src/strcache.c:308 #, c-format msgid "" "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B\n" msgstr "%s 현재 버í¼: í¬ê¸° = %hu B / 사용 = %hu B / 개수 = %hu / í‰ê·  = %u B\n" #: src/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" #: src/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" #: src/strcache.c:326 #, c-format msgid "" "\n" "%s strcache performance: lookups = %lu / hit rate = %lu%%\n" msgstr "" "\n" "%s strcache 효율: 검색 = %lu / 히트 비율 = %lu%%\n" #: src/strcache.c:328 msgid "" "# hash-table stats:\n" "# " msgstr "" "# 해시 í…Œì´ë¸” 통계:\n" "# " #: src/variable.c:1653 msgid "automatic" msgstr "ìžë™" #: src/variable.c:1656 msgid "default" msgstr "기본값" #: src/variable.c:1659 msgid "environment" msgstr "환경" #: src/variable.c:1662 msgid "makefile" msgstr "ë©”ì´í¬íŒŒì¼" #: src/variable.c:1665 msgid "environment under -e" msgstr "-e í•˜ì˜ í™˜ê²½" #: src/variable.c:1668 msgid "command line" msgstr "명령행" #: src/variable.c:1671 msgid "'override' directive" msgstr "'override' 지시ìž" #: src/variable.c:1682 #, c-format msgid " (from '%s', line %lu)" msgstr " ('%s'ì—서, %lu번째 줄)" #: src/variable.c:1745 msgid "# variable set hash-table stats:\n" msgstr "# 변수 ëª¨ìŒ í•´ì‹œ í…Œì´ë¸” 통계:\n" #: src/variable.c:1756 msgid "" "\n" "# Variables\n" msgstr "" "\n" "# 변수\n" #: src/variable.c:1760 msgid "" "\n" "# Pattern-specific Variable Values" msgstr "" "\n" "# íŒ¨í„´ì„ ìœ„í•œ 변수 ê°’" #: src/variable.c:1774 msgid "" "\n" "# No pattern-specific variable values." msgstr "" "\n" "# íŒ¨í„´ì„ ìœ„í•œ 변수 ê°’ì´ ì—†ìŠµë‹ˆë‹¤." #: src/variable.c:1776 #, c-format msgid "" "\n" "# %u pattern-specific variable values" msgstr "" "\n" "# 특정 íŒ¨í„´ì„ ìœ„í•œ 변수 ê°’ %uê°œ" #: src/variable.h:229 #, c-format msgid "warning: undefined variable '%.*s'" msgstr "경고: ì •ì˜ë˜ì§€ ì•Šì€ ë³€ìˆ˜ '%.*s'" #: src/vmsfunctions.c:91 #, c-format msgid "sys$search() failed with %d\n" msgstr "sys$search()ê°€ %dë²ˆì„ ë¦¬í„´í•˜ë©° 실패했습니다\n" # DCL - Digital Command Language, VMSì—서만 존재하는 shell languageì˜ ì¼ì¢… #: src/vmsjobs.c:244 #, c-format msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n" msgstr "-경고, DCLì—서 CTRL-Y를 다시 사용가능하ë„ë¡ í•´ì•¼ í•  것입니다.\n" #: src/vmsjobs.c:681 #, c-format msgid "BUILTIN CD %s\n" msgstr "내장 CD %s\n" #: src/vmsjobs.c:1224 #, c-format msgid "DCL: %s\n" msgstr "DCL: %s\n" #: src/vmsjobs.c:1284 #, c-format msgid "Append output to %s\n" msgstr "ì¶œë ¥ì„ %sì— ë¶™ìž…ë‹ˆë‹¤\n" #: src/vmsjobs.c:1309 #, c-format msgid "Append %.*s and cleanup\n" msgstr "%.*sì„(를) ë¶™ì´ê³  ì§€ì›ë‹ˆë‹¤\n" #: src/vmsjobs.c:1322 #, c-format msgid "Executing %s instead\n" msgstr "대신 %sì„(를) 실행\n" #: src/vpath.c:603 msgid "" "\n" "# VPATH Search Paths\n" msgstr "" "\n" "# VPATH íƒìƒ‰ 경로\n" #: src/vpath.c:620 msgid "# No 'vpath' search paths." msgstr "# 'vpath' íƒìƒ‰ 경로가 ì—†ìŒ." #: src/vpath.c:622 #, c-format msgid "" "\n" "# %u 'vpath' search paths.\n" msgstr "" "\n" "# 'vpath' íƒìƒ‰ 경로 %uê°œ.\n" #: src/vpath.c:625 msgid "" "\n" "# No general ('VPATH' variable) search path." msgstr "" "\n" "# ì¼ë°˜ì ì¸ ('VPATH' 변수) íƒìƒ‰ 경로가 ì—†ìŒ." #: src/vpath.c:631 msgid "" "\n" "# General ('VPATH' variable) search path:\n" "# " msgstr "" "\n" "# ì¼ë°˜ì ì¸ ('VPATH' 변수) íƒìƒ‰ 경로:\n" "# " #: src/w32/w32os.c:44 #, c-format msgid "Jobserver slots limited to %d\n" msgstr "작업서버 ìŠ¬ë¡¯ì€ %d개로 제한ë©ë‹ˆë‹¤\n" #: src/w32/w32os.c:60 #, c-format msgid "creating jobserver semaphore: (Error %ld: %s)" msgstr "작업서버 세마í¬ì–´ 만들기: (오류 %ld: %s)" #: src/w32/w32os.c:79 #, c-format msgid "" "internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)" msgstr "ë‚´ë¶€ 오류: 작업 서버 세마í¬ì–´('%s')를 ì—´ 수 없습니다: (오류 %ld: %s)" #: src/w32/w32os.c:82 #, c-format msgid "Jobserver client (semaphore %s)\n" msgstr "작업 서버 í´ë¼ì´ì–¸íЏ(세마í¬ì–´ %s)\n" #: src/w32/w32os.c:123 #, c-format msgid "release jobserver semaphore: (Error %ld: %s)" msgstr "작업 서버 세마í¬ì–´ í•´ì œ: (오류 %ld: %s)" #: src/w32/w32os.c:194 #, c-format msgid "semaphore or child process wait: (Error %ld: %s)" msgstr "세마í¬ì–´ ë˜ëŠ” 하위 프로세스 대기: (오류 %ld: %s)" make-4.3/po/fi.po0000644000175000017500000016246013611136530010602 00000000000000# Finnish messages for make. # Copyright (C) 2005 Free Software Foundation, Inc. # This file is distributed under the same license as the make package. # Lauri Nurmi , 2005. # msgid "" msgstr "" "Project-Id-Version: make 4.2\n" "Report-Msgid-Bugs-To: bug-make@gnu.org\n" "POT-Creation-Date: 2020-01-19 15:34-0500\n" "PO-Revision-Date: 2016-05-26 20:40+0300\n" "Last-Translator: Lauri Nurmi \n" "Language-Team: Finnish \n" "Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "X-Generator: Poedit 1.8.7\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/ar.c:46 #, c-format msgid "attempt to use unsupported feature: '%s'" msgstr "yritettiin käyttää ominaisuutta, jolle ei ole tukea: â€%sâ€" #: src/ar.c:123 #, c-format msgid "touch archive member is not available on VMS" msgstr "arkistojäsenten kosketus ei ole mahdollista VMS:ssä" #: src/ar.c:147 #, c-format msgid "touch: Archive '%s' does not exist" msgstr "touch: Arkistoa â€%s†ei ole olemassa" #: src/ar.c:150 #, c-format msgid "touch: '%s' is not a valid archive" msgstr "touch: â€%s†ei ole kelvollinen arkisto" #: src/ar.c:157 #, c-format msgid "touch: Member '%s' does not exist in '%s'" msgstr "touch: Arkistossa â€%1$s†ei ole jäsentä â€%2$sâ€" #: src/ar.c:164 #, c-format msgid "touch: Bad return code from ar_member_touch on '%s'" msgstr "touch: ar_member_touch antoi virheellisen paluuarvon kohteesta â€%sâ€" #: src/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" #: src/arscan.c:236 #, c-format msgid "lbr$ini_control() failed with status = %d" msgstr "lbr$ini_control() epäonnistui, tila = %d" #: src/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" #: src/arscan.c:944 #, c-format msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n" msgstr "Jäsen â€%sâ€%s: %ld tavua kohdassa %ld (%ld).\n" #: src/arscan.c:945 msgid " (name might be truncated)" msgstr " (nimi voi olla typistynyt)" #: src/arscan.c:947 #, c-format msgid " Date %s" msgstr " Päiväys %s" #: src/arscan.c:948 #, c-format msgid " uid = %d, gid = %d, mode = 0%o.\n" msgstr " uid = %d, gid = %d, oikeudet = 0%o.\n" #: src/commands.c:403 #, c-format msgid "Recipe has too many lines (%ud)" msgstr "" #: src/commands.c:504 msgid "*** Break.\n" msgstr "*** Katkaisu.\n" #: src/commands.c:628 #, c-format msgid "*** [%s] Archive member '%s' may be bogus; not deleted" msgstr "*** [%s] Arkistojäsen â€%s†voi olla viallinen – ei poisteta" #: src/commands.c:632 #, c-format msgid "*** Archive member '%s' may be bogus; not deleted" msgstr "*** Arkistojäsen â€%s†voi olla viallinen – ei poisteta" #: src/commands.c:646 #, c-format msgid "*** [%s] Deleting file '%s'" msgstr "*** [%s] Poistetaan tiedosto â€%sâ€" #: src/commands.c:648 #, c-format msgid "*** Deleting file '%s'" msgstr "*** Poistetaan tiedosto â€%sâ€" #: src/commands.c:684 #, fuzzy msgid "# recipe to execute" msgstr "# käynnisetttävät komennot" #: src/commands.c:687 msgid " (built-in):" msgstr " (sisäänrakennettu):" #: src/commands.c:689 #, c-format msgid " (from '%s', line %lu):\n" msgstr " (tiedosto â€%sâ€, rivi %lu):\n" #: src/dir.c:1073 msgid "" "\n" "# Directories\n" msgstr "" "\n" "# Hakemistot\n" #: src/dir.c:1085 #, c-format msgid "# %s: could not be stat'd.\n" msgstr "# %s: tilaa ei voitu lukea.\n" #: src/dir.c:1089 #, fuzzy msgid "# %s (key %s, mtime %I64u): could not be opened.\n" msgstr "# %s (avain %s, maika %d): ei voitu avata.\n" #: src/dir.c:1094 #, 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" #: src/dir.c:1099 #, c-format msgid "# %s (device %ld, inode %ld): could not be opened.\n" msgstr "# %s (laite %ld, i-solmu %ld): ei voitu avata.\n" #: src/dir.c:1126 #, fuzzy msgid "# %s (key %s, mtime %I64u): " msgstr "# %s (avain %s, maika %d: " #: src/dir.c:1131 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): " msgstr "# %s (laite %d, i-solmu [%d,%d,%d]): " #: src/dir.c:1136 #, c-format msgid "# %s (device %ld, inode %ld): " msgstr "# %s (laite %ld, i-solmu %ld): " #: src/dir.c:1142 src/dir.c:1163 msgid "No" msgstr "Ei" # Juuri näin, muodostetaan käännöslause yksittäisistä sanoista... #: src/dir.c:1145 src/dir.c:1166 msgid " files, " msgstr " tiedostoa, " #: src/dir.c:1147 src/dir.c:1168 msgid "no" msgstr "ei" #: src/dir.c:1150 msgid " impossibilities" msgstr " mahdottomuutta" #: src/dir.c:1154 msgid " so far." msgstr " tähän mennessä." #: src/dir.c:1171 #, c-format msgid " impossibilities in %lu directories.\n" msgstr " mahdottomuutta %lu hakemistossa.\n" #: src/expand.c:125 #, c-format msgid "Recursive variable '%s' references itself (eventually)" msgstr "Rekursiivinen muuttuja â€%s†viittaa (lopulta) itseensä" #: src/expand.c:271 #, c-format msgid "unterminated variable reference" msgstr "päättämÃ¤tön muuttujaviittaus" #: src/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," #: src/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," #: src/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â€." #: src/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â€." #: src/file.c:310 #, c-format msgid "can't rename single-colon '%s' to double-colon '%s'" msgstr "" #: src/file.c:316 #, c-format msgid "can't rename double-colon '%s' to single-colon '%s'" msgstr "" #: src/file.c:408 #, c-format msgid "*** Deleting intermediate file '%s'" msgstr "*** Poistetaan aputiedosto â€%sâ€" #: src/file.c:412 #, c-format msgid "Removing intermediate files...\n" msgstr "Poistetaan aputiedostot...\n" #: src/file.c:872 msgid "Current time" msgstr "Tämänhetkinen aika" #: src/file.c:876 #, c-format msgid "%s: Timestamp out of range; substituting %s" msgstr "%s: Aikaleima ei ole sallitulla välillä, korvataan %s" #: src/file.c:1016 msgid "# Not a target:" msgstr "# Ei kohde:" #: src/file.c:1021 msgid "# Precious file (prerequisite of .PRECIOUS)." msgstr "# Arvokas tiedosto (ennakkoehto .PRECIOUS:ille)." #: src/file.c:1023 msgid "# Phony target (prerequisite of .PHONY)." msgstr "# Valekohde (ennakkoehto .PHONY:lle)." #: src/file.c:1025 msgid "# Command line target." msgstr "# Komentorivikohde." #: src/file.c:1027 msgid "# A default, MAKEFILES, or -include/sinclude makefile." msgstr "# Oletus-, MAKEFILES- tai -include/sinclude -makefile-tiedosto." #: src/file.c:1029 msgid "# Builtin rule" msgstr "# Sisäänrakennettu sääntö" #: src/file.c:1031 msgid "# Implicit rule search has been done." msgstr "# Oletussääntöhaku on suoritettu." #: src/file.c:1032 msgid "# Implicit rule search has not been done." msgstr "# Oletussääntöhakua ei ole suoritettu." #: src/file.c:1034 #, c-format msgid "# Implicit/static pattern stem: '%s'\n" msgstr "" #: src/file.c:1036 msgid "# File is an intermediate prerequisite." msgstr "# Tiedosto on välitason ennakkoehto." #: src/file.c:1040 msgid "# Also makes:" msgstr "# Tuotetaan myös:" #: src/file.c:1046 msgid "# Modification time never checked." msgstr "# Muutosaikaa ei koskaan tarkastettu." #: src/file.c:1048 msgid "# File does not exist." msgstr "# Tiedosto ei ole olemassa." #: src/file.c:1050 msgid "# File is very old." msgstr "# Tiedosto on hyvin vanha." #: src/file.c:1055 #, c-format msgid "# Last modified %s\n" msgstr "# Viimeksi muutettu %s\n" #: src/file.c:1058 msgid "# File has been updated." msgstr "# Tiedosto on päivitetty." #: src/file.c:1058 msgid "# File has not been updated." msgstr "# Tiedostoa ei ole päivitetty." #: src/file.c:1062 #, fuzzy msgid "# Recipe currently running (THIS IS A BUG)." msgstr "# Ajossa olevat komennot (TÄMÄ ON OHJELMISTOVIKA)." #: src/file.c:1065 #, fuzzy msgid "# Dependencies recipe running (THIS IS A BUG)." msgstr "# Ajossa olevat riippuvuuskomennot (TÄMÄ ON OHJELMISTOVIKA)." #: src/file.c:1074 msgid "# Successfully updated." msgstr "# Päivitetty onnistuneesti." #: src/file.c:1078 msgid "# Needs to be updated (-q is set)." msgstr "# Vaatii päivitystä (-q on asetettu)." #: src/file.c:1081 msgid "# Failed to be updated." msgstr "# Päivitys epäonnistui." #: src/file.c:1086 #, fuzzy msgid "# Invalid value in 'command_state' member!" msgstr "# Virheellinen arvo â€command_stateâ€-jäsenessä!" #: src/file.c:1105 msgid "" "\n" "# Files" msgstr "" "\n" "# Tiedostot" #: src/file.c:1109 msgid "" "\n" "# files hash-table stats:\n" "# " msgstr "" "\n" "# tilasto tiedostojen hajautustaulusta:\n" "# " #: src/file.c:1119 #, c-format msgid "%s: Field '%s' not cached: %s" msgstr "" #: src/function.c:794 msgid "non-numeric first argument to 'word' function" msgstr "ei-numeerinen ensimmäinen argumentti â€wordâ€-funktiolle" #: src/function.c:799 #, c-format msgid "first argument to 'word' function must be greater than 0" msgstr "â€wordâ€-funktion ensimmäisen argumentin on oltava suurempi kuin 0" #: src/function.c:819 msgid "non-numeric first argument to 'wordlist' function" msgstr "ei-numeerinen ensimmäinen argumentti â€wordlistâ€-funktiolle" #: src/function.c:821 msgid "non-numeric second argument to 'wordlist' function" msgstr "ei-numeerinen toinen argumentti â€wordlistâ€-funktiolle" #: src/function.c:1533 #, fuzzy, c-format msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n" msgstr "create_child_process: DuplicateHandle(In) epäonnistui (v=%d)\n" #: src/function.c:1557 #, fuzzy, c-format msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n" msgstr "create_child_process: DuplicateHandle(Err) epäonnistui (v=%d)\n" #: src/function.c:1564 #, c-format msgid "CreatePipe() failed (e=%ld)\n" msgstr "CreatePipe() epäonnistui (v=%ld)\n" #: src/function.c:1572 #, fuzzy, c-format msgid "windows32_openpipe(): process_init_fd() failed\n" msgstr "windows32_openpipe (): process_init_fd() epäonnistui\n" #: src/function.c:1857 #, c-format msgid "Cleaning up temporary batch file %s\n" msgstr "Siivotaan väliaikainen komentotiedosto %s\n" #: src/function.c:2230 src/function.c:2255 #, c-format msgid "file: missing filename" msgstr "tiedosto: tiedostonimi puuttuu" #: src/function.c:2234 src/function.c:2265 #, c-format msgid "open: %s: %s" msgstr "open: %s: %s" #: src/function.c:2242 #, c-format msgid "write: %s: %s" msgstr "write: %s: %s" #: src/function.c:2245 src/function.c:2282 #, c-format msgid "close: %s: %s" msgstr "close: %s: %s" #: src/function.c:2258 #, c-format msgid "file: too many arguments" msgstr "tiedosto: liian monta argumenttia" #: src/function.c:2277 #, c-format msgid "read: %s: %s" msgstr "read: %s: %s" #: src/function.c:2290 #, fuzzy, c-format msgid "file: invalid file operation: %s" msgstr "Virheellinen tiedostotoiminto: %s" #: src/function.c:2405 #, c-format msgid "insufficient number of arguments (%d) to function '%s'" msgstr "liian vähän (%d) argumentteja funktiolle â€%sâ€" #: src/function.c:2417 #, c-format msgid "unimplemented on this platform: function '%s'" msgstr "ei toteutettu tällä alustalla: funktio â€%sâ€" #: src/function.c:2483 #, c-format msgid "unterminated call to function '%s': missing '%c'" msgstr "päättämätön kutsu funktioon â€%sâ€: puuttuva â€%câ€" #: src/function.c:2667 #, c-format msgid "Empty function name" msgstr "Tyhjä funktionimi" #: src/function.c:2669 #, c-format msgid "Invalid function name: %s" msgstr "Virheellinen funktionimi: %s" #: src/function.c:2671 #, c-format msgid "Function name too long: %s" msgstr "Funktionimi on liian pitkä: %s" #: src/function.c:2674 #, fuzzy, c-format msgid "Invalid minimum argument count (%u) for function %s" msgstr "Virheellinen vähimmäisargumenttimäärä (%d) funktiolle %s" #: src/function.c:2677 #, fuzzy, c-format msgid "Invalid maximum argument count (%u) for function %s" msgstr "Virheellinen enimmäisargumenttimäärä (%d) funktiolle %s" #: src/getopt.c:659 #, c-format msgid "%s: option '%s' is ambiguous\n" msgstr "%s: valitsin â€%s†on moniselitteinen\n" #: src/getopt.c:683 #, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s: valitsin â€--%s†ei salli argumenttia\n" #: src/getopt.c:688 #, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s: valitsin â€%c%s†ei salli argumenttia\n" #: src/getopt.c:705 src/getopt.c:878 #, c-format msgid "%s: option '%s' requires an argument\n" msgstr "%s: valitsin â€%s†vaatii argumentin\n" #: src/getopt.c:734 #, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s: tunnistamaton valitsin â€--%sâ€\n" #: src/getopt.c:738 #, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s: tunnistamaton valitsin â€%c%sâ€\n" #: src/getopt.c:764 #, c-format msgid "%s: illegal option -- %c\n" msgstr "%s: virheellinen valitsin -- %c\n" #: src/getopt.c:767 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s: virheellinen valitsin -- %c\n" #: src/getopt.c:797 src/getopt.c:927 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: valitsin vaatii argumentin -- %c\n" #: src/getopt.c:844 #, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s: valitsin â€-W %s†on moniselitteinen\n" #: src/getopt.c:862 #, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s: valitsin â€-W %s†ei salli argumenttia\n" #: src/guile.c:58 #, c-format msgid "guile: Expanding '%s'\n" msgstr "guile: Lavennetaan â€%sâ€\n" #: src/guile.c:74 #, c-format msgid "guile: Evaluating '%s'\n" msgstr "" #: src/hash.c:50 #, fuzzy, c-format msgid "can't allocate %lu bytes for hash table: memory exhausted" msgstr "ei voida varata %ld tavua hajautustaululle: muisti lopussa" #: src/hash.c:280 #, fuzzy, c-format msgid "Load=%lu/%lu=%.0f%%, " msgstr "Kuormitus=%ld/%ld=%.0f%%, " #: src/hash.c:282 #, fuzzy, c-format msgid "Rehash=%u, " msgstr "Uudelleenhajautus=%d, " #: src/hash.c:283 #, fuzzy, c-format msgid "Collisions=%lu/%lu=%.0f%%" msgstr "Törmäykset=%ld/%ld=%.0f%%" #: src/implicit.c:38 #, c-format msgid "Looking for an implicit rule for '%s'.\n" msgstr "Etsitään oletussääntöä kohteelle â€%sâ€.\n" #: src/implicit.c:54 #, c-format msgid "Looking for archive-member implicit rule for '%s'.\n" msgstr "Etsitään arkistojäsenen oletussääntöä kohteelle â€%sâ€.\n" #: src/implicit.c:311 #, c-format msgid "Avoiding implicit rule recursion.\n" msgstr "Vältetään oletussääntörekursio.\n" #: src/implicit.c:484 #, fuzzy, c-format msgid "Stem too long: '%s%.*s'.\n" msgstr "Liian pitkä runko: â€%.*sâ€.\n" #: src/implicit.c:490 #, c-format msgid "Trying pattern rule with stem '%.*s'.\n" msgstr "Kokeillaan hahmosääntöä rungolla â€%.*sâ€.\n" #: src/implicit.c:717 #, c-format msgid "Rejecting impossible rule prerequisite '%s'.\n" msgstr "Hylätään mahdoton säännön ennakkoehto â€%sâ€.\n" #: src/implicit.c:718 #, c-format msgid "Rejecting impossible implicit prerequisite '%s'.\n" msgstr "Hylätään mahdoton oletusennakkoehto â€%sâ€.\n" #: src/implicit.c:732 #, c-format msgid "Trying rule prerequisite '%s'.\n" msgstr "Yritetään käyttää säännön ennakkoehtoa â€%sâ€.\n" #: src/implicit.c:733 #, c-format msgid "Trying implicit prerequisite '%s'.\n" msgstr "Yritetään käyttää oletusennakkoehtoa â€%sâ€.\n" #: src/implicit.c:772 #, c-format msgid "Found prerequisite '%s' as VPATH '%s'\n" msgstr "Löydettiin ennakkoehto â€%sâ€, joka on VPATH â€%sâ€\n" #: src/implicit.c:786 #, c-format msgid "Looking for a rule with intermediate file '%s'.\n" msgstr "Etsitään sääntöä aputiedostolla â€%sâ€.\n" #: src/job.c:370 msgid "Cannot create a temporary file\n" msgstr "Väliaikaistiedoston luominen ei onnistu\n" #: src/job.c:548 msgid " (core dumped)" msgstr " (muisti vedostettu)" #: src/job.c:553 msgid " (ignored)" msgstr " (ei huomioida)" #: src/job.c:557 src/job.c:1892 msgid "" msgstr "" #: src/job.c:573 #, c-format msgid "%s[%s: %s] Error %d%s" msgstr "%s[%s: %s] Virhe %d%s" #: src/job.c:662 #, c-format msgid "*** Waiting for unfinished jobs...." msgstr "*** Odotetaan keskeneräisiä töitä...." #: src/job.c:704 #, c-format msgid "Live child %p (%s) PID %s %s\n" msgstr "" #: src/job.c:706 src/job.c:900 src/job.c:1072 src/job.c:1644 #, c-format msgid " (remote)" msgstr " (etä)" #: src/job.c:898 #, c-format msgid "Reaping winning child %p PID %s %s\n" msgstr "" #: src/job.c:899 #, c-format msgid "Reaping losing child %p PID %s %s\n" msgstr "" #: src/job.c:950 #, c-format msgid "Cleaning up temp batch file %s\n" msgstr "Siivotaan väliaikainen komentotiedosto %s\n" #: src/job.c:956 #, fuzzy, c-format msgid "Cleaning up temp batch file %s failed (%d)\n" msgstr "Siivotaan väliaikainen komentotiedosto %s\n" #: src/job.c:1071 #, fuzzy, c-format msgid "Removing child %p PID %s%s from chain.\n" msgstr "Poistetaan ketjusta lapsiprosessi 0x%08lx PID %ld%s.\n" #: src/job.c:1120 #, c-format msgid "Released token for child %p (%s).\n" msgstr "" #: src/job.c:1575 src/job.c:2487 #, 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" #: src/job.c:1579 src/job.c:2491 #, c-format msgid "" "\n" "Counted %d args in failed launch\n" msgstr "" "\n" "Laskettiin %d argumenttia epäonnistuneessa käynnistyksessä\n" #: src/job.c:1642 #, 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" #: src/job.c:1875 #, c-format msgid "Obtained token for child %p (%s).\n" msgstr "" #: src/job.c:1902 #, c-format msgid "%s: target '%s' does not exist" msgstr "%s: kohde â€%s†ei ole olemassa" #: src/job.c:1905 #, 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" #: src/job.c:2108 #, c-format msgid "cannot enforce load limits on this operating system" msgstr "kuormarajoja ei voi ottaa käyttöön tässä käyttöjärjestelmässä" #: src/job.c:2110 msgid "cannot enforce load limit: " msgstr "kuormarajaa ei voi ottaa käyttöön: " #: src/job.c:2200 #, c-format msgid "no more file handles: could not duplicate stdin\n" msgstr "" "tiedostokahvoja ei ole enempää: vakiosyötteen kahdentaminen ei onnistunut\n" #: src/job.c:2212 #, c-format msgid "no more file handles: could not duplicate stdout\n" msgstr "" "tiedostokahvoja ei ole enempää: vakiotulosteen kahdentaminen epäonnistui\n" #: src/job.c:2226 #, c-format msgid "no more file handles: could not duplicate stderr\n" msgstr "" "tiedostokahvoja ei ole enempää: vakiovirhetulosteen kahdentaminen ei " "onnistunut\n" #: src/job.c:2241 #, c-format msgid "Could not restore stdin\n" msgstr "Vakiosyötettä ei voitu palauttaa\n" #: src/job.c:2249 #, c-format msgid "Could not restore stdout\n" msgstr "Vakiotulostetta ei voitu palauttaa\n" #: src/job.c:2257 #, c-format msgid "Could not restore stderr\n" msgstr "Vakiovirhetulostetta ei voitu palauttaa\n" #: src/job.c:2520 #, c-format msgid "make reaped child pid %s, still waiting for pid %s\n" msgstr "" #: src/job.c:2623 #, c-format msgid "spawnvpe: environment space might be exhausted" msgstr "spawnvpe: ympäristötila saattaa olla lopussa" #: src/job.c:2862 #, c-format msgid "$SHELL changed (was '%s', now '%s')\n" msgstr "$SHELL muuttunut (oli â€%sâ€, nyt â€%sâ€)\n" #: src/job.c:3300 src/job.c:3485 #, c-format msgid "Creating temporary batch file %s\n" msgstr "Luodaan väliaikainen komentotiedosto %s\n" #: src/job.c:3308 #, c-format msgid "" "Batch file contents:\n" "\t@echo off\n" msgstr "" "Komentojonotiedoston sisältö:\n" "\t@echo off\n" #: src/job.c:3497 #, c-format msgid "" "Batch file contents:%s\n" "\t%s\n" msgstr "" "Komentojonotiedoston sisältö:%s\n" "\t%s\n" #: src/job.c:3605 #, 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" #: src/load.c:60 #, c-format msgid "Failed to open global symbol table: %s" msgstr "" #: src/load.c:97 #, c-format msgid "Loaded object %s is not declared to be GPL compatible" msgstr "" #: src/load.c:104 #, c-format msgid "Failed to load symbol %s from %s: %s" msgstr "" #: src/load.c:149 #, c-format msgid "Empty symbol name for load: %s" msgstr "" #: src/load.c:204 #, c-format msgid "Loading symbol %s from %s\n" msgstr "" #: src/load.c:256 #, fuzzy, c-format msgid "The 'load' operation is not supported on this platform." msgstr "Rinnakkaiset työt (-j) eivät ole tuettuja tällä alustalla." #: src/main.c:335 msgid "Options:\n" msgstr "Valitsimet:\n" #: src/main.c:336 msgid " -b, -m Ignored for compatibility.\n" msgstr "" " -b, -m Yhteensopivuuden vuoksi jätetään huomiotta.\n" #: src/main.c:338 msgid " -B, --always-make Unconditionally make all targets.\n" msgstr " -B, --always-make Tuota kaikki kohteet ehdoitta.\n" #: src/main.c:340 msgid "" " -C DIRECTORY, --directory=DIRECTORY\n" " Change to DIRECTORY before doing anything.\n" msgstr "" " -C HAKEMISTO, --directory=HAKEMISTO\n" " Siirry HAKEMISTOon ennen jatkamista.\n" #: src/main.c:343 msgid " -d Print lots of debugging information.\n" msgstr " -d Näytä runsaasti vianetsintätietoja.\n" #: src/main.c:345 msgid "" " --debug[=FLAGS] Print various types of debugging information.\n" msgstr " --debug[=LIPUT] Näytä monenlaisia vianetsintätietoja.\n" #: src/main.c:347 msgid "" " -e, --environment-overrides\n" " Environment variables override makefiles.\n" msgstr "" " -e, --environment-overrides\n" " Ympäristömuuttujat kumoavat makefile-" "tiedostot.\n" #: src/main.c:350 msgid "" " -E STRING, --eval=STRING Evaluate STRING as a makefile statement.\n" msgstr "" #: src/main.c:352 msgid "" " -f FILE, --file=FILE, --makefile=FILE\n" " Read FILE as a makefile.\n" msgstr "" " -f TIEDOSTO, --file=TIEDOSTO, --makefile=TIEDOSTO\n" " Käytä TIEDOSTOa makefile-tiedostona.\n" #: src/main.c:355 msgid " -h, --help Print this message and exit.\n" msgstr " -h, --help Näytä tämä viesti ja poistu.\n" #: src/main.c:357 #, fuzzy msgid " -i, --ignore-errors Ignore errors from recipes.\n" msgstr "" " -i, --ignore-errors Älä huomioi suoritettujen komentojen " "virheitä.\n" #: src/main.c:359 msgid "" " -I DIRECTORY, --include-dir=DIRECTORY\n" " Search DIRECTORY for included makefiles.\n" msgstr "" " -I HAKEMISTO, --include-dir=HAKEMISTO\n" " Etsi sisällytettäviä makefile:ja " "HAKEMISTOsta.\n" #: src/main.c:362 msgid "" " -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no " "arg.\n" msgstr "" " -j [N], --jobs[=N] Salli N yhtäaikaista työtä; ilman N:ää " "ääretön.\n" #: src/main.c:364 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" #: src/main.c:366 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" " Älä aloita useita töitä ellei kuormitus alle " "N.\n" #: src/main.c:369 msgid "" " -L, --check-symlink-times Use the latest mtime between symlinks and " "target.\n" msgstr "" " -L, --check-symlink-times Käytä uusinta mtime-aikaa symlinkkien ja\n" " kohteen välillä.\n" #: src/main.c:371 #, fuzzy 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äytä ajettavat komennot, älä käynnistä " "niitä.\n" #: src/main.c:374 msgid "" " -o FILE, --old-file=FILE, --assume-old=FILE\n" " Consider FILE to be very old and don't remake " "it.\n" msgstr "" " -o TIEDOSTO, --old-file=TIEDOSTO, --assume-old=TIEDOSTO\n" " Käsittele TIEDOSTO vanhana, älä tuota sitä.\n" #: src/main.c:377 msgid "" " -O[TYPE], --output-sync[=TYPE]\n" " Synchronize output of parallel jobs by TYPE.\n" msgstr "" #: src/main.c:380 msgid " -p, --print-data-base Print make's internal database.\n" msgstr " -p, --print-data-base Näytä make:in sisäinen tietokanta.\n" #: src/main.c:382 #, fuzzy msgid "" " -q, --question Run no recipe; exit status says if up to " "date.\n" msgstr "" " -q, --question Älä aja komentoja; paluuarvo kertoo ajan-\n" " tasaisuuden.\n" #: src/main.c:384 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" #: src/main.c:386 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" #: src/main.c:388 #, fuzzy msgid " -s, --silent, --quiet Don't echo recipes.\n" msgstr " -s, --silent, --quiet Älä kaiuta komentoja.\n" #: src/main.c:390 #, fuzzy msgid " --no-silent Echo recipes (disable --silent mode).\n" msgstr "" " -q, --question Älä aja komentoja; paluuarvo kertoo ajan-\n" " tasaisuuden.\n" #: src/main.c:392 msgid "" " -S, --no-keep-going, --stop\n" " Turns off -k.\n" msgstr "" " -S, --no-keep-going, --stop\n" " Kumoaa valitsimen -k.\n" #: src/main.c:395 msgid " -t, --touch Touch targets instead of remaking them.\n" msgstr " -t, --touch Kosketa kohteita tuottamisen sijaan.\n" #: src/main.c:397 #, fuzzy msgid " --trace Print tracing information.\n" msgstr " -d Näytä runsaasti vianetsintätietoja.\n" #: src/main.c:399 msgid "" " -v, --version Print the version number of make and exit.\n" msgstr " -v, --version Näytä make:in versionumero ja poistu.\n" #: src/main.c:401 msgid " -w, --print-directory Print the current directory.\n" msgstr " -w, --print-directory Näytä nykyinen hakemisto.\n" #: src/main.c:403 msgid "" " --no-print-directory Turn off -w, even if it was turned on " "implicitly.\n" msgstr "" " --no-print-directory Kumoa -w, vaikka se olisi käytössä " "oletuksena.\n" #: src/main.c:405 msgid "" " -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n" " Consider FILE to be infinitely new.\n" msgstr "" " -W TIEDOSTO, --what-if=TIEDOSTO, --new-file=TIEDOSTO, --assume-" "new=TIEDOSTO\n" " Käsittele TIEDOSTO aina uutena.\n" #: src/main.c:408 msgid "" " --warn-undefined-variables Warn when an undefined variable is " "referenced.\n" msgstr "" " --warn-undefined-variables Varoita viittauksista määrittelemättömiin\n" " muuttujiin.\n" #: src/main.c:671 #, c-format msgid "empty string invalid as file name" msgstr "tyhjä merkkijono ei kelpaa tiedostonimeksi" #: src/main.c:754 #, c-format msgid "unknown debug level specification '%s'" msgstr "tuntematon vianetsintätason määritys â€%sâ€" #: src/main.c:794 #, c-format msgid "unknown output-sync type '%s'" msgstr "" #: src/main.c:849 #, c-format msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n" msgstr "%s: Keskeytys/poikkeus siepattu (koodi = 0x%lx, osoite = 0x%p)\n" #: src/main.c:856 #, fuzzy, c-format msgid "" "\n" "Unhandled exception filter called from program %s\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" msgstr "" "\n" "Ohjelmasta %s kutsuttiin käsittelemätöntä poikkeussuodinta\n" "Poikkeuskoodi = %x\n" "Poikkeusliput = %x\n" "Poikkeusosoite = %x\n" #: src/main.c:864 #, c-format msgid "Access violation: write operation at address 0x%p\n" msgstr "Suojausvirhe: kirjoitusoperaatio osoitteeseen 0x%p\n" #: src/main.c:865 #, c-format msgid "Access violation: read operation at address 0x%p\n" msgstr "Suojausvirhe: lukuoperaatio osoitteeseen 0x%p\n" #: src/main.c:941 src/main.c:956 #, fuzzy, c-format msgid "find_and_set_shell() setting default_shell = %s\n" msgstr "find_and_set_shell asettaa default_shell = %s\n" #: src/main.c:1009 #, 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" #: src/main.c:1609 #, fuzzy, c-format 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 " "tason make-sääntöön." #: src/main.c:1617 #, fuzzy, c-format msgid "warning: -j%d forced in submake: resetting jobserver mode." msgstr "varoitus: -jN pakotettu ali-make:ssa: poistetaan työpalvelin käytöstä." #: src/main.c:1781 #, c-format msgid "Makefile from standard input specified twice." msgstr "Makefile-tiedosto vakiosyötteestä määritelty kahdesti." #: src/main.c:1819 src/vmsjobs.c:1248 msgid "fopen (temporary file)" msgstr "fopen (väliaikaistiedosto)" #: src/main.c:1825 msgid "fwrite (temporary file)" msgstr "fwrite (väliaikaistiedosto)" #: src/main.c:2004 #, fuzzy, c-format msgid "warning: -j%d forced in makefile: resetting jobserver mode." msgstr "varoitus: -jN pakotettu ali-make:ssa: poistetaan työpalvelin käytöstä." #: src/main.c:2068 #, c-format msgid "Parallel jobs (-j) are not supported on this platform." msgstr "Rinnakkaiset työt (-j) eivät ole tuettuja tällä alustalla." #: src/main.c:2069 #, c-format msgid "Resetting to single job (-j1) mode." msgstr "Palataan yhden työn (-j1) tilaan." #: src/main.c:2109 #, c-format msgid "Symbolic links not supported: disabling -L." msgstr "Ei tukea symbolisille linkeille: poistetaan -L käytöstä." #: src/main.c:2190 #, c-format msgid "Updating makefiles....\n" msgstr "Päivitetään makefile-tiedostoja....\n" #: src/main.c:2226 #, c-format msgid "Makefile '%s' might loop; not remaking it.\n" msgstr "" "Ei uudelleentuoteta makefile-tiedostoa â€%s†– vältetään mahdollinen ikuinen " "silmukka.\n" #: src/main.c:2303 #, c-format msgid "Failed to remake makefile '%s'." msgstr "Makefile-tiedoston â€%s†uudelleentuottaminen epäonnistui." #: src/main.c:2323 #, c-format msgid "Included makefile '%s' was not found." msgstr "Sisällytettyä makefile-tiedostoa â€%s†ei löytynyt." #: src/main.c:2328 #, c-format msgid "Makefile '%s' was not found" msgstr "Makefile-tiedostoa â€%s†ei löytynyt" #: src/main.c:2394 #, c-format msgid "Couldn't change back to original directory." msgstr "Ei voitu siirtyä takaisin alkuperäiseen hakemistoon." #: src/main.c:2402 #, c-format msgid "Re-executing[%u]:" msgstr "Uudelleenkäynnistetään[%u]:" #: src/main.c:2522 msgid "unlink (temporary file): " msgstr "unlink (väliaikaistiedosto): " #: src/main.c:2555 #, c-format msgid ".DEFAULT_GOAL contains more than one target" msgstr ".DEFAULT_GOAL sisältää yli yhden kohteen" #: src/main.c:2579 #, c-format msgid "No targets" msgstr "Ei kohteita" #: src/main.c:2581 #, c-format msgid "No targets specified and no makefile found" msgstr "Kohteita ei ole annettu, eikä makefileä löytynyt" #: src/main.c:2586 #, c-format msgid "Updating goal targets....\n" msgstr "" #: src/main.c:2610 #, c-format msgid "warning: Clock skew detected. Your build may be incomplete." msgstr "" "varoitus: Havaittu väärä kellonaika. Käännösversio saattaa olla " "epätäydellinen." #: src/main.c:2804 #, c-format msgid "Usage: %s [options] [target] ...\n" msgstr "Käyttö: %s [valitsimet] [kohde] ...\n" #: src/main.c:2810 #, c-format msgid "" "\n" "This program built for %s\n" msgstr "" "\n" "Tämä ohjelma on käännetty järjestelmälle %s.\n" #: src/main.c:2812 #, c-format msgid "" "\n" "This program built for %s (%s)\n" msgstr "" "\n" "Tämä ohjelma on käännetty järjestelmälle %s (%s).\n" #: src/main.c:2815 #, c-format msgid "Report bugs to \n" msgstr "" "Ilmoita ohjelmistovioista (englanniksi) osoitteeseen .\n" #: src/main.c:2901 #, c-format msgid "the '%s%s' option requires a non-empty string argument" msgstr "valitsin â€%s%s†vaatii ei-tyhjän merkkijonoargumentin" #: src/main.c:2965 #, c-format msgid "the '-%c' option requires a positive integer argument" msgstr "valitsin â€-%c†vaatii positiivisen kokonaislukuargumentin" #: src/main.c:3363 #, c-format msgid "%sBuilt for %s\n" msgstr "%sTämä ohjelma on käännetty järjestelmälle %s\n" #: src/main.c:3365 #, c-format msgid "%sBuilt for %s (%s)\n" msgstr "%sTämä ohjelma on käännetty järjestelmälle %s (%s)\n" #: src/main.c:3376 #, c-format msgid "" "%sLicense GPLv3+: GNU GPL version 3 or later \n" "%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 "" #: src/main.c:3397 #, c-format msgid "" "\n" "# Make data base, printed on %s" msgstr "" "\n" "# Make-tietokanta, tulostettu %s" #: src/main.c:3407 #, c-format msgid "" "\n" "# Finished Make data base on %s\n" msgstr "" "\n" "# Make-tietokanta saatu valmiiksi %s\n" #: src/misc.c:643 #, 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" #: src/misc.c:664 msgid "Initialized access" msgstr "Alkuperäiset käyttöoikeudet" #: src/misc.c:743 msgid "User access" msgstr "Käyttäjän käyttöoikeudet" #: src/misc.c:791 msgid "Make access" msgstr "Make-prosessin käyttöoikeudet" #: src/misc.c:825 msgid "Child access" msgstr "Lapsiprosessin käyttöoikeudet" #: src/output.c:97 #, c-format msgid "%s: Entering an unknown directory\n" msgstr "%s: Siirrytään tuntemattomaan hakemistoon\n" #: src/output.c:99 #, c-format msgid "%s: Leaving an unknown directory\n" msgstr "%s: Poistutaan tuntemattomasta hakemistosta\n" #: src/output.c:102 #, c-format msgid "%s: Entering directory '%s'\n" msgstr "%s: Siirrytään hakemistoon â€%sâ€\n" #: src/output.c:104 #, c-format msgid "%s: Leaving directory '%s'\n" msgstr "%s: Poistutaan hakemistosta â€%sâ€\n" #: src/output.c:108 #, c-format msgid "%s[%u]: Entering an unknown directory\n" msgstr "%s[%u]: Siirrytään tuntemattomaan hakemistoon\n" #: src/output.c:110 #, c-format msgid "%s[%u]: Leaving an unknown directory\n" msgstr "%s[%u]: Poistutaan tuntemattomasta hakemistosta\n" #: src/output.c:113 #, c-format msgid "%s[%u]: Entering directory '%s'\n" msgstr "%s[%u]: Siirrytään hakemistoon â€%sâ€\n" #: src/output.c:115 #, c-format msgid "%s[%u]: Leaving directory '%s'\n" msgstr "%s[%u]: Poistutaan hakemistosta â€%sâ€\n" #: src/output.c:442 src/output.c:444 #, c-format msgid "write error: stdout" msgstr "kirjoitusvirhe: vakiotuloste" #: src/output.c:624 msgid ". Stop.\n" msgstr ". Seis.\n" #: src/output.c:658 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" #: src/output.c:667 #, c-format msgid "%s: %s" msgstr "%s: %s" #: src/output.h:62 #, c-format msgid "-O[TYPE] (--output-sync[=TYPE]) is not configured for this build." msgstr "" #: src/posixos.c:90 msgid "creating jobs pipe" msgstr "luodaan työputki" #: src/posixos.c:98 src/posixos.c:251 #, fuzzy msgid "duping jobs pipe" msgstr "luodaan työputki" #: src/posixos.c:104 msgid "init jobserver pipe" msgstr "alustetaan työpalvelimen putki" #: src/posixos.c:119 #, fuzzy, c-format msgid "internal error: invalid --jobserver-auth string '%s'" msgstr "sisäinen virhe: virheellinen --jobserver-fds -merkkijono â€%sâ€" #: src/posixos.c:122 #, c-format msgid "Jobserver client (fds %d,%d)\n" msgstr "" #: src/posixos.c:138 #, fuzzy msgid "jobserver pipeline" msgstr "alustetaan työpalvelimen putki" #: src/posixos.c:186 msgid "write jobserver" msgstr "työpalvelimen kirjoitus" #: src/posixos.c:300 #, c-format msgid "job server shut down" msgstr "" #: src/posixos.c:303 #, fuzzy msgid "pselect jobs pipe" msgstr "työputken luku" #: src/posixos.c:319 src/posixos.c:433 msgid "read jobs pipe" msgstr "työputken luku" #: src/read.c:181 #, c-format msgid "Reading makefiles...\n" msgstr "Luetaan makefile-tiedostoja...\n" #: src/read.c:336 #, c-format msgid "Reading makefile '%s'" msgstr "Luetaan makefile-tiedosto â€%sâ€" #: src/read.c:338 #, c-format msgid " (no default goal)" msgstr "" #: src/read.c:340 #, c-format msgid " (search path)" msgstr " (hakupolku)" #: src/read.c:342 #, c-format msgid " (don't care)" msgstr " (ei välitetä)" #: src/read.c:344 #, c-format msgid " (no ~ expansion)" msgstr " (ei ~-laajennusta)" #: src/read.c:655 #, c-format msgid "Skipping UTF-8 BOM in makefile '%s'\n" msgstr "Ohitetaan UTF-8-BOM makefile-tiedostossa â€%sâ€\n" #: src/read.c:658 #, c-format msgid "Skipping UTF-8 BOM in makefile buffer\n" msgstr "Ohitetaan UTF-8-BOM makefile-puskurissa\n" #: src/read.c:787 #, c-format msgid "invalid syntax in conditional" msgstr "virheellinen syntaksi ehtolauseessa" #: src/read.c:960 #, c-format msgid "%s: failed to load" msgstr "" #: src/read.c:986 #, fuzzy, c-format msgid "recipe commences before first target" msgstr "komennot alkavat ennen ensimmäistä kohdetta" #: src/read.c:1035 #, fuzzy, c-format msgid "missing rule before recipe" msgstr "puuttuva sääntö ennen komentoja" #: src/read.c:1136 #, fuzzy, c-format msgid "missing separator (did you mean TAB instead of 8 spaces?)" msgstr " (ehkä tarkoitit sarkainta eikä kahdeksaa välilyöntiä?)" #: src/read.c:1138 #, c-format msgid "missing separator" msgstr "puuttuva erotin" #: src/read.c:1283 #, c-format msgid "missing target pattern" msgstr "puuttuva kohdehahmo" #: src/read.c:1285 #, c-format msgid "multiple target patterns" msgstr "useita kohdehahmoja" #: src/read.c:1289 #, c-format msgid "target pattern contains no '%%'" msgstr "kohdehahmo ei sisällä â€%%â€-merkkiä" #: src/read.c:1404 #, c-format msgid "missing 'endif'" msgstr "puuttuva â€endifâ€" #: src/read.c:1443 src/read.c:1488 src/variable.c:1600 #, c-format msgid "empty variable name" msgstr "tyhjä muuttujan nimi" #: src/read.c:1478 #, c-format msgid "extraneous text after 'define' directive" msgstr "ylimääräistä tekstiä â€endefâ€-toimintaohjeen jälkeen" #: src/read.c:1503 #, c-format msgid "missing 'endef', unterminated 'define'" msgstr "puuttuva â€endefâ€, päättämätön â€defineâ€" #: src/read.c:1531 #, c-format msgid "extraneous text after 'endef' directive" msgstr "ylimääräistä tekstiä â€endefâ€-toimintaohjeen jälkeen" #: src/read.c:1603 #, c-format msgid "extraneous text after '%s' directive" msgstr "ylimääräistä tekstiä â€%sâ€-toimintaohjeen jälkeen" #: src/read.c:1604 #, c-format msgid "extraneous '%s'" msgstr "ylimääräinen â€%sâ€" #: src/read.c:1632 #, c-format msgid "only one 'else' per conditional" msgstr "vain yksi â€else†ehtolausetta kohden" #: src/read.c:1908 #, c-format msgid "Malformed target-specific variable definition" msgstr "Väärin muotoiltu kohdekohtainen muuttujamäärittely" # skripti? #: src/read.c:1968 #, fuzzy, c-format msgid "prerequisites cannot be defined in recipes" msgstr "ennakkoehtoja ei voi määritellä komentoskripteissä" #: src/read.c:1986 #, c-format msgid "grouped targets must provide a recipe" msgstr "" #: src/read.c:2029 #, c-format msgid "mixed implicit and static pattern rules" msgstr "" #: src/read.c:2052 #, c-format msgid "mixed implicit and normal rules" msgstr "" #: src/read.c:2107 #, c-format msgid "target '%s' doesn't match the target pattern" msgstr "kohde â€%s†ei täsmää kohdehahmon kanssa" #: src/read.c:2122 src/read.c:2168 #, c-format msgid "target file '%s' has both : and :: entries" msgstr "kohdetiedostolla â€%s†on sekä :- että ::-merkinnät" #: src/read.c:2128 #, c-format msgid "target '%s' given more than once in the same rule" msgstr "kohde â€%s†annettu yli yhden kerran samassa säännössä" #: src/read.c:2138 #, fuzzy, c-format msgid "warning: overriding recipe for target '%s'" msgstr "varoitus: syrjäytetään kohteen â€%s†komennot" #: src/read.c:2141 #, fuzzy, c-format msgid "warning: ignoring old recipe for target '%s'" msgstr "varoitus: ei huomioida vanhoja komentoja kohteelle â€%sâ€" #: src/read.c:2254 #, c-format msgid "*** mixed implicit and normal rules: deprecated syntax" msgstr "" #: src/read.c:2271 #, fuzzy, c-format msgid "warning: overriding group membership for target '%s'" msgstr "varoitus: syrjäytetään kohteen â€%s†komennot" #: src/read.c:2636 #, c-format msgid "warning: NUL character seen; rest of line ignored" msgstr "varoitus: havaittu NUL-merkki, rivin loppuosaa ei huomioida" #: src/remake.c:226 #, c-format msgid "Nothing to be done for '%s'." msgstr "Kohteelle â€%s†ei tarvitse tehdä mitään." #: src/remake.c:227 #, c-format msgid "'%s' is up to date." msgstr "â€%s†on ajan tasalla." #: src/remake.c:323 #, c-format msgid "Pruning file '%s'.\n" msgstr "Karsitaan tiedosto â€%sâ€.\n" #: src/remake.c:389 #, 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" #: src/remake.c:399 #, fuzzy, c-format msgid "%sNo rule to make target '%s'%s" msgstr "%sKohteen â€%s†tuottamiseen ei ole sääntöä%s" #: src/remake.c:425 #, c-format msgid "Considering target file '%s'.\n" msgstr "Tarkastellaan kohdetiedostoa â€%sâ€.\n" #: src/remake.c:432 #, c-format msgid "Recently tried and failed to update file '%s'.\n" msgstr "Tiedoston â€%s†päivitysyritys epäonnistui äskettäin.\n" #: src/remake.c:444 #, c-format msgid "File '%s' was considered already.\n" msgstr "Tiedostoa â€%s†on jo tarkasteltu.\n" #: src/remake.c:454 #, c-format msgid "Still updating file '%s'.\n" msgstr "Päivitetään edelleen tiedostoa â€%sâ€.\n" #: src/remake.c:457 #, c-format msgid "Finished updating file '%s'.\n" msgstr "Tiedoston â€%s†päivitys valmistui.\n" #: src/remake.c:486 #, c-format msgid "File '%s' does not exist.\n" msgstr "Tiedosto â€%s†ei ole olemassa.\n" #: src/remake.c:494 #, 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" #: src/remake.c:507 src/remake.c:1039 #, c-format msgid "Found an implicit rule for '%s'.\n" msgstr "Kohteelle â€%s†löytyi oletussääntö.\n" #: src/remake.c:509 src/remake.c:1041 #, c-format msgid "No implicit rule found for '%s'.\n" msgstr "Kohteelle â€%s†ei löytynyt oletussääntöä.\n" #: src/remake.c:515 #, fuzzy, c-format msgid "Using default recipe for '%s'.\n" msgstr "Käytetään oletuskomentoja kohteelle â€%sâ€.\n" #: src/remake.c:549 src/remake.c:1088 #, c-format msgid "Circular %s <- %s dependency dropped." msgstr "Kehäriippuvuus %s <- %s hylätty." #: src/remake.c:674 #, c-format msgid "Finished prerequisites of target file '%s'.\n" msgstr "Kohdetiedoston â€%s†ennakkoehdot täytetty.\n" #: src/remake.c:680 #, c-format msgid "The prerequisites of '%s' are being made.\n" msgstr "Kohteen â€%s†ennakkoehtoja täytetään.\n" #: src/remake.c:694 #, c-format msgid "Giving up on target file '%s'.\n" msgstr "Luovutaan kohdetiedostosta â€%sâ€.\n" #: src/remake.c:699 #, c-format msgid "Target '%s' not remade because of errors." msgstr "Kohdetta â€%s†ei tuotettu uudelleen virheiden vuoksi." #: src/remake.c:751 #, fuzzy, c-format msgid "Prerequisite '%s' is order-only for target '%s'.\n" msgstr "Ennakkoehto â€%s†on vanhempi kuin kohde â€%sâ€.\n" #: src/remake.c:756 #, c-format msgid "Prerequisite '%s' of target '%s' does not exist.\n" msgstr "Kohteen â€%2$s†ennakkoehto â€%1$s†ei ole olemassa.\n" #: src/remake.c:761 #, c-format msgid "Prerequisite '%s' is newer than target '%s'.\n" msgstr "Ennakkoehto â€%s†on uudempi kuin kohde â€%sâ€.\n" #: src/remake.c:764 #, c-format msgid "Prerequisite '%s' is older than target '%s'.\n" msgstr "Ennakkoehto â€%s†on vanhempi kuin kohde â€%sâ€.\n" #: src/remake.c:782 #, c-format msgid "Target '%s' is double-colon and has no prerequisites.\n" msgstr "" #: src/remake.c:789 #, c-format msgid "No recipe for '%s' and no prerequisites actually changed.\n" msgstr "" #: src/remake.c:794 #, c-format msgid "Making '%s' due to always-make flag.\n" msgstr "Tuotetaan â€%sâ€, koska always-make-lippu on käytössä.\n" #: src/remake.c:802 #, c-format msgid "No need to remake target '%s'" msgstr "Ei tarvetta uudelleentuottaa kohdetta â€%sâ€" #: src/remake.c:804 #, c-format msgid "; using VPATH name '%s'" msgstr "; käytetään VPATH-nimeä â€%sâ€" #: src/remake.c:824 #, c-format msgid "Must remake target '%s'.\n" msgstr "Kohde â€%s†on tuotettava uudelleen.\n" #: src/remake.c:830 #, c-format msgid " Ignoring VPATH name '%s'.\n" msgstr " Ei huomioida VPATH-nimeä â€%sâ€.\n" #: src/remake.c:839 #, c-format msgid "Recipe of '%s' is being run.\n" msgstr "" #: src/remake.c:846 #, c-format msgid "Failed to remake target file '%s'.\n" msgstr "Kohdetiedoston â€%s†uudelleentuottaminen epäonnistui.\n" #: src/remake.c:849 #, c-format msgid "Successfully remade target file '%s'.\n" msgstr "Kohdetiedosto â€%s†uudelleentuotettiin onnistuneesti.\n" #: src/remake.c:852 #, c-format msgid "Target file '%s' needs to be remade under -q.\n" msgstr "" #: src/remake.c:1047 #, c-format msgid "Using default commands for '%s'.\n" msgstr "Käytetään oletuskomentoja kohteelle â€%sâ€.\n" #: src/remake.c:1422 #, c-format msgid "Warning: File '%s' has modification time %s s in the future" msgstr "Varoitus: Tiedoston â€%s†muutosaika on %s sekuntia tulevaisuudessa" #: src/remake.c:1662 #, c-format msgid ".LIBPATTERNS element '%s' is not a pattern" msgstr ".LIBPATTERNS-elementti â€%s†ei ole hahmo" #: src/remote-cstms.c:122 #, c-format msgid "Customs won't export: %s\n" msgstr "" #: src/rule.c:289 #, c-format msgid "warning: ignoring prerequisites on suffix rule definition" msgstr "" #: src/rule.c:530 msgid "" "\n" "# Implicit Rules" msgstr "" "\n" "# Oletussäännöt" #: src/rule.c:545 msgid "" "\n" "# No implicit rules." msgstr "" "\n" "# Ei oletussääntöjä." #: src/rule.c:548 #, fuzzy, c-format msgid "" "\n" "# %u implicit rules, %u (%.1f%%) terminal." msgstr "" "\n" "# %u oletussääntöä, %u" #: src/rule.c:557 #, c-format msgid "BUG: num_pattern_rules is wrong! %u != %u" msgstr "VIKA: num_pattern_rules on väärä! %u != %u" #: src/signame.c:84 msgid "unknown signal" msgstr "tuntematon signaali" #: src/signame.c:92 msgid "Hangup" msgstr "Linjankatkaisu" #: src/signame.c:95 msgid "Interrupt" msgstr "Keskeytys" #: src/signame.c:98 msgid "Quit" msgstr "Lopetettu" #: src/signame.c:101 msgid "Illegal Instruction" msgstr "Virheellinen käsky" #: src/signame.c:104 msgid "Trace/breakpoint trap" msgstr "Jäljitys/katkaisupisteansa" #: src/signame.c:109 msgid "Aborted" msgstr "Keskeytetty" #: src/signame.c:112 msgid "IOT trap" msgstr "IOT-ansa" #: src/signame.c:115 msgid "EMT trap" msgstr "EMT-ansa" #: src/signame.c:118 msgid "Floating point exception" msgstr "Liukulukupoikkeus" #: src/signame.c:121 msgid "Killed" msgstr "Tapettu" #: src/signame.c:124 msgid "Bus error" msgstr "Väylävirhe" #: src/signame.c:127 msgid "Segmentation fault" msgstr "Muistialueen ylitys" #: src/signame.c:130 msgid "Bad system call" msgstr "Virheellinen järjestelmäkutsu" #: src/signame.c:133 msgid "Broken pipe" msgstr "Katkennut putki" #: src/signame.c:136 msgid "Alarm clock" msgstr "Herätyskello" #: src/signame.c:139 msgid "Terminated" msgstr "Päätetty" #: src/signame.c:142 msgid "User defined signal 1" msgstr "Käyttäjän määrittelemä signaali 1" #: src/signame.c:145 msgid "User defined signal 2" msgstr "Käyttäjän määrittelemä signaali 2" #: src/signame.c:150 src/signame.c:153 msgid "Child exited" msgstr "Lapsi lopetti" #: src/signame.c:156 msgid "Power failure" msgstr "Sähkökatko" #: src/signame.c:159 msgid "Stopped" msgstr "Pysäytetty" #: src/signame.c:162 msgid "Stopped (tty input)" msgstr "Pysäytetty (päätteen syöte)" #: src/signame.c:165 msgid "Stopped (tty output)" msgstr "Pysäytetty (päätteen tuloste)" #: src/signame.c:168 msgid "Stopped (signal)" msgstr "Pysäytetty (signaali)" #: src/signame.c:171 msgid "CPU time limit exceeded" msgstr "Suoritinaikaraja ylittynyt" #: src/signame.c:174 msgid "File size limit exceeded" msgstr "Tiedoston kokoraja ylitetty" #: src/signame.c:177 msgid "Virtual timer expired" msgstr "Virtuaaliajastin vanhentunut" #: src/signame.c:180 msgid "Profiling timer expired" msgstr "Profilointiajastin vanhentunut" #: src/signame.c:186 msgid "Window changed" msgstr "Ikkuna vaihtunut" #: src/signame.c:189 msgid "Continued" msgstr "Jatkettu" #: src/signame.c:192 msgid "Urgent I/O condition" msgstr "Kiireellinen I/O-tilanne" #: src/signame.c:199 src/signame.c:208 msgid "I/O possible" msgstr "I/O mahdollista" #: src/signame.c:202 msgid "SIGWIND" msgstr "SIGWIND" #: src/signame.c:205 msgid "SIGPHONE" msgstr "SIGPHONE" #: src/signame.c:211 msgid "Resource lost" msgstr "Resurssi menetetty" #: src/signame.c:214 msgid "Danger signal" msgstr "Vaarasignaali" #: src/signame.c:217 msgid "Information request" msgstr "Tietopyyntö" #: src/signame.c:220 msgid "Floating point co-processor not available" msgstr "Käytettävissä ei ole liukulukusuoritinta" #: src/strcache.c:274 #, c-format msgid "" "\n" "%s No strcache buffers\n" msgstr "" #: src/strcache.c:304 #, c-format msgid "" "\n" "%s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu " "B\n" msgstr "" #: src/strcache.c:308 #, c-format msgid "" "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B\n" msgstr "" #: src/strcache.c:319 #, c-format msgid "%s other used: total = %lu B / count = %lu / avg = %lu B\n" msgstr "" #: src/strcache.c:322 #, c-format msgid "" "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n" msgstr "" #: src/strcache.c:326 #, c-format msgid "" "\n" "%s strcache performance: lookups = %lu / hit rate = %lu%%\n" msgstr "" #: src/strcache.c:328 msgid "" "# hash-table stats:\n" "# " msgstr "" "# tilasto tiedostojen hajautustaulusta:\n" "# " #: src/variable.c:1653 msgid "automatic" msgstr "automaattinen" #: src/variable.c:1656 msgid "default" msgstr "oletus" #: src/variable.c:1659 msgid "environment" msgstr "ympäristö" #: src/variable.c:1662 msgid "makefile" msgstr "makefile" #: src/variable.c:1665 msgid "environment under -e" msgstr "-e:n alainen ympäristö" #: src/variable.c:1668 msgid "command line" msgstr "komentorivi" #: src/variable.c:1671 msgid "'override' directive" msgstr "â€overrideâ€-toimintaohje" #: src/variable.c:1682 #, c-format msgid " (from '%s', line %lu)" msgstr " (tiedosto â€%sâ€, rivi %lu)" #: src/variable.c:1745 msgid "# variable set hash-table stats:\n" msgstr "# muuttujajoukon hajautustaulutilastot:\n" #: src/variable.c:1756 msgid "" "\n" "# Variables\n" msgstr "" "\n" "# Muuttujat\n" #: src/variable.c:1760 msgid "" "\n" "# Pattern-specific Variable Values" msgstr "" "\n" "# Hahmokohtaisia muuttujien arvoja" #: src/variable.c:1774 msgid "" "\n" "# No pattern-specific variable values." msgstr "" "\n" "# Ei hahmokohtaisia muuttuja-arvoja." #: src/variable.c:1776 #, c-format msgid "" "\n" "# %u pattern-specific variable values" msgstr "" "\n" "# %u hahmokohtaista muuttuja-arvoa" #: src/variable.h:229 #, c-format msgid "warning: undefined variable '%.*s'" msgstr "varoitus: määrittelemätön muuttuja â€%.*sâ€" #: src/vmsfunctions.c:91 #, fuzzy, c-format msgid "sys$search() failed with %d\n" msgstr "sys$search epäonnistui, arvo %d\n" #: src/vmsjobs.c:244 #, 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" #: src/vmsjobs.c:681 #, c-format msgid "BUILTIN CD %s\n" msgstr "SISÄÄNRAKENNETTU CD %s\n" #: src/vmsjobs.c:1224 #, c-format msgid "DCL: %s\n" msgstr "DCL: %s\n" #: src/vmsjobs.c:1284 #, fuzzy, c-format msgid "Append output to %s\n" msgstr "Tuloste uudelleenohjattu kohteeseen %s\n" #: src/vmsjobs.c:1309 #, c-format msgid "Append %.*s and cleanup\n" msgstr "" #: src/vmsjobs.c:1322 #, c-format msgid "Executing %s instead\n" msgstr "Käynnistetään sen sijaan %s\n" #: src/vpath.c:603 msgid "" "\n" "# VPATH Search Paths\n" msgstr "" "\n" "# VPATH-hakupolut\n" #: src/vpath.c:620 msgid "# No 'vpath' search paths." msgstr "# Ei â€vpathâ€-hakupolkuja." #: src/vpath.c:622 #, c-format msgid "" "\n" "# %u 'vpath' search paths.\n" msgstr "" "\n" "# %u â€vpathâ€-hakupolkua.\n" #: src/vpath.c:625 msgid "" "\n" "# No general ('VPATH' variable) search path." msgstr "" "\n" "# Ei yleistä (â€VPATHâ€-muuttuja) hakupolkua." #: src/vpath.c:631 msgid "" "\n" "# General ('VPATH' variable) search path:\n" "# " msgstr "" "\n" "# Yleinen (â€VPATHâ€-muuttuja) hakupolku:\n" "# " #: src/w32/w32os.c:44 #, c-format msgid "Jobserver slots limited to %d\n" msgstr "" #: src/w32/w32os.c:60 #, c-format msgid "creating jobserver semaphore: (Error %ld: %s)" msgstr "" #: src/w32/w32os.c:79 #, c-format msgid "" "internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)" msgstr "" #: src/w32/w32os.c:82 #, c-format msgid "Jobserver client (semaphore %s)\n" msgstr "" #: src/w32/w32os.c:123 #, c-format msgid "release jobserver semaphore: (Error %ld: %s)" msgstr "" #: src/w32/w32os.c:194 #, c-format msgid "semaphore or child process wait: (Error %ld: %s)" msgstr "" #~ msgid "%s: %s: Command not found\n" #~ msgstr "%s: %s: Komentoa ei löytynyt\n" #~ msgid "%s[%u]: %s: Command not found\n" #~ msgstr "%s[%u]: %s: Komentoa ei löytynyt\n" #~ msgid "%s: Shell program not found" #~ msgstr "%s: Kuoriohjelmaa ei löytynyt" #~ msgid "%s is suspending for 30 seconds..." #~ msgstr "%s keskeytyy 30 sekunniksi..." #~ msgid "done sleep(30). Continuing.\n" #~ msgstr "sleep(30) valmis. Jatketaan.\n" #~ msgid "Unknown error %d" #~ msgstr "Tuntematon virhe %d" #~ msgid "Warning: File '%s' has modification time in the future" #~ msgstr "Varoitus: Tiedoston â€%s†muutosaika on tulevaisuudessa" #~ 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ä!" #~ msgid "*** [%s] Error 0x%x (ignored)" #~ msgstr "*** [%s] Virhe 0x%x (ei huomioida)" #~ msgid "Do not specify -j or --jobs if sh.exe is not available." #~ msgstr "Älä anna -j tai --jobs -valitsinta jos sh.exe ei ole käytettävissä." #~ msgid "Resetting make for single job mode." #~ msgstr "Palautetaan make yhden työn tilaan." #~ msgid "internal error: multiple --jobserver-fds options" #~ msgstr "sisäinen virhe: useitan --jobserver-fds -valitsimia" #~ 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" #~ "%sPARTICULAR PURPOSE.\n" #~ msgstr "" #~ "%sTämä on vapaa ohjelmisto; katso kopiointiehdot lähdekoodista.\n" #~ "%sTakuuta EI ole, ei edes KAUPALLISESTI HYVÄKSYTTÄVÄSTÄ LAADUSTA tai\n" #~ "%sSOPIVUUDESTA TIETTYYN TARKOITUKSEEN.\n" #~ msgid "virtual memory exhausted" #~ msgstr "virtuaalimuisti lopussa" #~ msgid "write error" #~ msgstr "kirjoitusvirhe" #~ msgid "extraneous `endef'" #~ msgstr "ylimääräinen â€endefâ€" #~ msgid "empty `override' directive" #~ msgstr "tyhjä â€overrideâ€-toimintaohje" #~ msgid "invalid `override' directive" #~ 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" #~ msgid "BUILTIN RM %s\n" #~ msgstr "SISÄÄNRAKENNETTU RM %s\n" #~ msgid "Syntax error, still inside 'â€'\n" #~ msgstr "Syntaksivirhe, edelleen â€:n sisällä\n" make-4.3/po/sr.gmo0000644000175000017500000014770113611136532010777 00000000000000Þ•¡$ -,à"á"&þ"%#5#!>#-`#Ž#  #-Á#ï#'$#-$Q$ h$v$”$P­$;þ$":%]% y%tš%L&P\&9­&Mç&@5'ov'oæ'PV(l§(F)J[)€¦)9'*Ca*f¥*_ +;l+:¨+Oã+J3,}~,uü,~r->ñ-M0.C~.2Â.Fõ.IY= ˜=+¢=*Î=ù= >>1#>2U> ˆ>”>­>"Â>*å>?? /?P? l? x?‚?š? º? Ç?%Ô?ú?+@$F@k@ Š@”@®@Ç@+á@ A!*A LAYAsA |AŠA“A§AÆA$ÜA&B(B#HBlB"‡BªB,ÃBðB)C8C!QC&sCšCµCÕC ÜCéCòC%D,D@D SD]D3wD3«DßD ýDE=EDE5bE˜E0³E'äE3 F @F+LFxF-”F%ÂF-èF'G>GXG![G}G:›G ÖG*áG H")H LH6VH H-›H-ÉH1÷H1)I[IsI-‡IµIºIÌIâI"øI#J/?J=oJ7­JåJK-#K6QK1ˆK-ºK"èK' L3L"SL#vL šL¨L±L¹L$ÌL&ñLM3M;MLM`M&uM+œM6ÈM)ÿM.)N XN7cN*›NÆN#ÜN&O'OGObOzO!O ±O½OÓO!éO P+P;AP}P(ŒP µP1¿P9ñP3+Q3_Q“Q3¯Q ãQ ñQþQ-R?RGR!XRzR ŽRšR¯R$¿R(äR' S 5SVSmS8†S0¿S8ðS)T@TXTpT‡T6›T4ÒTHUPUnU)U;«U3çUV&$VKV[VvV9ˆVÂVÙV'ùV!W:W1=W0oW1 W-ÒW1X22XeX …X*’X0½XîXY Y$Y,AY0nY.ŸYÎY,ëY1Z*JZuZ6•Z5ÌZ,["/["R[3u[)©[6Ó[- \&8\_\}\Œ\0¦\×\=÷\15],g]H”]*Ý]"^/+^8[^7”^Ì^à^ ð^ÿþ^1þ`G0axa—aA«aRía"@b<cbX b.ùbN(cDwc-¼cêc@dFDd‹‹d{eQ“e=åeB#fÏff…6gt¼gQ1h~ƒhUiœXi•õi†‹jkm°kYl»xlV4mq‹m”ým”’nT'oW|o¡ÔovpÊöp–Áq¹Xrhs•{sctFutn¼t^+uZŠuåu:õu.0v_v"tv—vªvÈvèv,w%-w Swtw&†w­wÁw=ÛwxL)xvx"’x(µxIÞx0(y(Yy*‚y.­y=Üy3zQNzU zEözM<{*Š{Dµ{Fú{>A|Q€|EÒ|(})A}0k}Sœ}*ð}M~/i~R™~8ì~5%[.pRŸQòSD€„˜€eƒŒ>“6Ò2 ‚S<‚?‚7ЂYƒ+bƒ,Žƒ,»ƒEèƒ..„:]„E˜„FÞ„1%…7W…)…/¹…/é…7†kQ†!½†%߆N‡GTˆaœˆþˆB‰:^‰C™‰;݉Š!9ŠV[вŠ*ÅŠAðŠ;2‹•n‹[Œ/`ŒiŒiúŒ{dàBò@5Ž2vީ޼ŽPÏŽP q0‚.³GâU*€$ 7Å2ý0‘N‘Vn‘JÅ‘#’(4’G]’G¥’ií’GW“7Ÿ“דFê“B1”Dt”P¹”1 •G<•„•3 • Ô•à•ú•( –D5–2z–O­–Tý–ZR—[­—/ ˜<9˜Rv˜OɘF™O`™0°™:á™Cš1`š@’šÓšäšøš+ ›J6›,›®›Λ4Ý›eœexœ[ÞœK:U† Ü=én'ž5–žMÌž<ŸTWŸ¬ŸpÆŸ87 gp OØ N(¡6w¡?®¡î¡Eó¡T9¢sŽ¢£U£:j£C¥£é£bø£[¤F{¤H¤V ¥Cb¥?¦¥(æ¥K¦ [¦$f¦-‹¦(¹¦Râ¦N5§m„§`ò§sS¨5Ǩ2ý¨J0©b{©PÞ©N/ªE~ªHĪ: «8H«@«!« ä«ñ«%¬I&¬Yp¬>ʬ ­#­.B­0q­I¢­Wì­]D®Q¢®cô®X¯Qg¯:¹¯3ô¯A(°Kj°H¶°*ÿ°0*±[±3w±!«±4ͱ4²>7²<v²;³²oï² _³X€³Ù³Yî³sH´r¼´r/µQ¢µƒôµ x¶†¶&¢¶Uɶ·6.·Te·,º·ç· ø·¸@1¸Dr¸C·¸:û¸46¹)k¹„•¹wºe’ºEøºE>»%„»%ª»=лT¼`c¼”ļ5Y½5½UŽ|¾q˜¾ ¿A$¿f¿7…¿'½¿yå¿(_À@ˆÀWÉÀ !ÁBÁ{GÁwÃÁy;ÂPµÂTÃV[Ã0²Ã ãÃNðÃe?Ä'¥Ä"ÍÄ ðÄ2ýÄY0ÅXŠÅJãÅB.Æ?qÆW±Æ? Ç0IÇTzÇaÏÇQ1È6ƒÈ0ºÈNëÈ8:ÉnsÉWâÉN:ÊJ‰ÊÔÊGôÊY<Ë4–Ë—ËËicÌYÍÌ­'ÍLÕÍH"ÎDkÎM°ÎLþÎ:KÏ,†Ï ³Ï†|–-Þa4Cåvi„Ù'`S’…J‚I±\ÍEXœonPÒ@TY')V 3®‹§…¬SÈ@“/ñƒ´lh Ték^t4 ×^0>†”ðG[ ÌO)êÎBc;ó[ :ˆ. þÏÜsŽŠD “fg8—º¿pr VŠ}9!îŸ;ˆšo›0M~¯¸ž‹‚Nh¾PLÛ’v /ƒöš=Ë­`ÓO‰Ÿœ–A¥ amçwj³ôÕ©•9»6ý{duEõz"« eÉIk1·s!$?+uä%"G÷¹‘.<&A_c$8â”CeÑWt{l,nZ˜¶ YúáŽ<Øè‰M &¨¦µ•žNòwJU2›Ä6ÂLæ¡~™,xßH¤½bqÊ¡Å#Á˜pÿd#Ö3ªQÐy°7üÇB¢UDÚ€ë1mi|?(øÆùÃݼí5ŒKjy_ûz}²2RRrfà£g:*ã+ÔZ‘‡>„(%XxÀ=q]7KQ]WŒ*€ bFF™ì\ï5‡—H- # %u 'vpath' search paths. # %u pattern-specific variable values # Directories # Files # Finished Make data base on %s # General ('VPATH' variable) search path: # # Implicit Rules # Make data base, printed on %s # No general ('VPATH' variable) search path. # No implicit rules. # No pattern-specific variable values. # Pattern-specific Variable Values # VPATH Search Paths # Variables # files hash-table stats: # %s No strcache buffers %s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu B %s strcache performance: lookups = %lu / hit rate = %lu%% Counted %d args in failed launch This program built for %s This program built for %s (%s) Unhandled exception filter called from program %s ExceptionCode = %lx ExceptionFlags = %lx ExceptionAddress = 0x%p --debug[=FLAGS] Print various types of debugging information. --no-print-directory Turn off -w, even if it was turned on implicitly. --trace Print tracing information. --warn-undefined-variables Warn when an undefined variable is referenced. -B, --always-make Unconditionally make all targets. -C DIRECTORY, --directory=DIRECTORY Change to DIRECTORY before doing anything. -I DIRECTORY, --include-dir=DIRECTORY Search DIRECTORY for included makefiles. -L, --check-symlink-times Use the latest mtime between symlinks and target. -O[TYPE], --output-sync[=TYPE] Synchronize output of parallel jobs by TYPE. -R, --no-builtin-variables Disable the built-in variable settings. -S, --no-keep-going, --stop Turns off -k. -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE Consider FILE to be infinitely new. -b, -m Ignored for compatibility. -d Print lots of debugging information. -e, --environment-overrides Environment variables override makefiles. -f FILE, --file=FILE, --makefile=FILE Read FILE as a makefile. -h, --help Print this message and exit. -i, --ignore-errors Ignore errors from recipes. -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no arg. -k, --keep-going Keep going when some targets can't be made. -l [N], --load-average[=N], --max-load[=N] Don't start multiple jobs unless load is below N. -n, --just-print, --dry-run, --recon Don't actually run any recipe; just print them. -o FILE, --old-file=FILE, --assume-old=FILE Consider FILE to be very old and don't remake it. -p, --print-data-base Print make's internal database. -q, --question Run no recipe; exit status says if up to date. -r, --no-builtin-rules Disable the built-in implicit rules. -s, --silent, --quiet Don't echo recipes. -t, --touch Touch targets instead of remaking them. -v, --version Print the version number of make and exit. -w, --print-directory Print the current directory. Date %s Ignoring VPATH name '%s'. uid = %d, gid = %d, mode = 0%o. (built-in): (core dumped) (don't care) (from '%s', line %lu) (from '%s', line %lu): (ignored) (name might be truncated) (no default goal) (no ~ expansion) (remote) (search path) files, impossibilities impossibilities in %lu directories. so far.# A default, MAKEFILES, or -include/sinclude makefile.# Also makes:# Builtin rule# Command line target.# Dependencies recipe running (THIS IS A BUG).# Failed to be updated.# File does not exist.# File has been updated.# File has not been updated.# File is an intermediate prerequisite.# File is very old.# Implicit rule search has been done.# Implicit rule search has not been done.# Implicit/static pattern stem: '%s' # Invalid value in 'command_state' member!# Last modified %s # Modification time never checked.# Needs to be updated (-q is set).# Phony target (prerequisite of .PHONY).# Precious file (prerequisite of .PRECIOUS).# Recipe currently running (THIS IS A BUG).# Successfully updated.# recipe to execute# %s (device %d, inode [%d,%d,%d]): # %s (device %d, inode [%d,%d,%d]): could not be opened. # %s (device %ld, inode %ld): # %s (device %ld, inode %ld): could not be opened. # %s (key %s, mtime %I64u): # %s (key %s, mtime %I64u): could not be opened. # %s: could not be stat'd. # No 'vpath' search paths.# Not a target:# hash-table stats: # # variable set hash-table stats: $SHELL changed (was '%s', now '%s') %s (line %d) Bad shell context (!unixy && !batch_mode_shell) %s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B %s other used: total = %lu B / count = %lu / avg = %lu B %s%s: %s%s: %s%s: Entering an unknown directory %s: Entering directory '%s' %s: Field '%s' not cached: %s%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p) %s: Leaving an unknown directory %s: Leaving directory '%s' %s: Timestamp out of range; substituting %s%s: failed to load%s: illegal option -- %c %s: invalid option -- %c %s: option '%c%s' doesn't allow an argument %s: option '%s' is ambiguous %s: option '%s' requires an argument %s: option '--%s' doesn't allow an argument %s: option '-W %s' doesn't allow an argument %s: option '-W %s' is ambiguous %s: option requires an argument -- %c %s: target '%s' does not exist%s: unrecognized option '%c%s' %s: unrecognized option '--%s' %s: update target '%s' due to: %s%s: user %lu (real %lu), group %lu (real %lu) %sBuilt for %s %sBuilt for %s (%s) %sLicense GPLv3+: GNU GPL version 3 or later %sThis is free software: you are free to change and redistribute it. %sThere is NO WARRANTY, to the extent permitted by law. %sNo rule to make target '%s'%s%sNo rule to make target '%s', needed by '%s'%s%s[%s: %s] Error %d%s%s[%u]: Entering an unknown directory %s[%u]: Entering directory '%s' %s[%u]: Leaving an unknown directory %s[%u]: Leaving directory '%s' '%s' is up to date.'override' directive*** Archive member '%s' may be bogus; not deleted*** Break. *** Deleting file '%s'*** Deleting intermediate file '%s'*** Waiting for unfinished jobs....*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp*** [%s] Archive member '%s' may be bogus; not deleted*** [%s] Deleting file '%s'*** mixed implicit and normal rules: deprecated syntax-O[TYPE] (--output-sync[=TYPE]) is not configured for this build.-warning, you may have to re-enable CTRL-Y handling from DCL. . Stop. .DEFAULT_GOAL contains more than one target.LIBPATTERNS element '%s' is not a pattern; using VPATH name '%s'AbortedAccess violation: read operation at address 0x%p Access violation: write operation at address 0x%p Alarm clockAppend %.*s and cleanup Append output to %s Avoiding implicit rule recursion. BUG: num_pattern_rules is wrong! %u != %uBUILTIN CD %s Bad system callBatch file contents: @echo off Batch file contents:%s %s Broken pipeBus errorCPU time limit exceededCannot create a temporary file Child accessChild exitedCircular %s <- %s dependency dropped.Cleaning up temp batch file %s Cleaning up temp batch file %s failed (%d) Cleaning up temporary batch file %s Considering target file '%s'. ContinuedCould not restore stderr Could not restore stdin Could not restore stdout Couldn't change back to original directory.CreatePipe() failed (e=%ld) Creating temporary batch file %s Current timeCustoms won't export: %s DCL: %s Danger signalEMT trapEmpty function nameEmpty symbol name for load: %sExecuting %s instead Failed to load symbol %s from %s: %sFailed to open global symbol table: %sFailed to remake makefile '%s'.Failed to remake target file '%s'. File '%s' does not exist. File '%s' was considered already. File size limit exceededFinished prerequisites of target file '%s'. Finished updating file '%s'. Floating point co-processor not availableFloating point exceptionFound an implicit rule for '%s'. Found prerequisite '%s' as VPATH '%s' Function name too long: %sGiving up on target file '%s'. HangupI/O possibleIOT trapIllegal InstructionIncluded makefile '%s' was not found.Information requestInitialized accessInterruptInvalid function name: %sInvalid maximum argument count (%u) for function %sInvalid minimum argument count (%u) for function %sJobserver client (fds %d,%d) Jobserver client (semaphore %s) Jobserver slots limited to %d KilledLive child %p (%s) PID %s %s Loaded object %s is not declared to be GPL compatibleLoading symbol %s from %s Looking for a rule with intermediate file '%s'. Looking for an implicit rule for '%s'. Looking for archive-member implicit rule for '%s'. Make accessMakefile '%s' might loop; not remaking it. Makefile '%s' was not foundMakefile from standard input specified twice.Making '%s' due to always-make flag. Malformed target-specific variable definitionMember '%s'%s: %ld bytes at %ld (%ld). Must remake target '%s'. NoNo implicit rule found for '%s'. No need to remake target '%s'No recipe for '%s' and no prerequisites actually changed. No targetsNo targets specified and no makefile foundNothing to be done for '%s'.Obtained token for child %p (%s). Options: Parallel jobs (-j) are not supported on this platform.Power failurePrerequisite '%s' is newer than target '%s'. Prerequisite '%s' is older than target '%s'. Prerequisite '%s' is order-only for target '%s'. Prerequisite '%s' of target '%s' does not exist. Profiling timer expiredPruning file '%s'. Putting child %p (%s) PID %s%s on the chain. QuitRe-executing[%u]:Reading makefile '%s'Reading makefiles... Reaping losing child %p PID %s %s Reaping winning child %p PID %s %s Recently tried and failed to update file '%s'. Recipe for '%s' will be ignored in favor of the one for '%s'.Recipe for file '%s' was found by implicit rule search,Recipe has too many lines (%ud)Recipe of '%s' is being run. Recipe was specified for file '%s' at %s:%lu,Recursive variable '%s' references itself (eventually)Rejecting impossible implicit prerequisite '%s'. Rejecting impossible rule prerequisite '%s'. Released token for child %p (%s). Removing child %p PID %s%s from chain. Removing intermediate files... Report bugs to Resetting to single job (-j1) mode.Resource lostSIGPHONESIGWINDSegmentation faultSkipping UTF-8 BOM in makefile '%s' Skipping UTF-8 BOM in makefile buffer Still updating file '%s'. StoppedStopped (signal)Stopped (tty input)Stopped (tty output)Successfully remade target file '%s'. Symbolic links not supported: disabling -L.Target '%s' is double-colon and has no prerequisites. Target '%s' not remade because of errors.Target file '%s' needs to be remade under -q. TerminatedThe 'load' operation is not supported on this platform.The prerequisites of '%s' are being made. Trace/breakpoint trapTrying implicit prerequisite '%s'. Trying pattern rule with stem '%.*s'. Trying rule prerequisite '%s'. Updating goal targets.... Updating makefiles.... Urgent I/O conditionUsage: %s [options] [target] ... User accessUser defined signal 1User defined signal 2Using default commands for '%s'. Using default recipe for '%s'. Virtual timer expiredWarning: File '%s' has modification time %s s in the futureWindow changedattempt to use unsupported feature: '%s'automaticbut '%s' is now considered the same file as '%s'.can't allocate %lu bytes for hash table: memory exhaustedcan't rename double-colon '%s' to single-colon '%s'can't rename single-colon '%s' to double-colon '%s'cannot enforce load limit: cannot enforce load limits on this operating systemclose: %s: %scommand linecreating jobs pipecreating jobserver semaphore: (Error %ld: %s)defaultduping jobs pipeempty string invalid as file nameempty variable nameenvironmentenvironment under -eextraneous '%s'extraneous text after '%s' directiveextraneous text after 'define' directiveextraneous text after 'endef' directivefile: invalid file operation: %sfile: missing filenamefile: too many argumentsfind_and_set_shell() path search set default_shell = %s find_and_set_shell() setting default_shell = %s first argument to 'word' function must be greater than 0fopen (temporary file)fwrite (temporary file)guile: Evaluating '%s' guile: Expanding '%s' init jobserver pipeinsufficient number of arguments (%d) to function '%s'internal error: invalid --jobserver-auth string '%s'internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)invalid syntax in conditionaljobserver pipelinelbr$ini_control() failed with status = %dlbr$set_module() failed to extract module info, status = %dmake reaped child pid %s, still waiting for pid %s makefilemissing 'endef', unterminated 'define'missing 'endif'missing rule before recipemissing separatormissing separator (did you mean TAB instead of 8 spaces?)missing target patternmixed implicit and normal rulesmixed implicit and static pattern rulesmultiple target patternsnono more file handles: could not duplicate stderr no more file handles: could not duplicate stdin no more file handles: could not duplicate stdout non-numeric first argument to 'word' functionnon-numeric first argument to 'wordlist' functionnon-numeric second argument to 'wordlist' functiononly one 'else' per conditionalopen: %s: %sprerequisites cannot be defined in recipesprocess_easy() failed to launch process (e=%ld) pselect jobs piperead jobs piperead: %s: %srecipe commences before first targetrelease jobserver semaphore: (Error %ld: %s)semaphore or child process wait: (Error %ld: %s)spawnvpe: environment space might be exhaustedsys$search() failed with %d target '%s' doesn't match the target patterntarget '%s' given more than once in the same ruletarget file '%s' has both : and :: entriestarget pattern contains no '%%'the '%s%s' option requires a non-empty string argumentthe '-%c' option requires a positive integer argumenttouch archive member is not available on VMStouch: '%s' is not a valid archivetouch: Archive '%s' does not existtouch: Bad return code from ar_member_touch on '%s'touch: Member '%s' does not exist in '%s'unable to open library '%s' to lookup member status %dunimplemented on this platform: function '%s'unknown debug level specification '%s'unknown output-sync type '%s'unknown signalunlink (temporary file): unterminated call to function '%s': missing '%c'unterminated variable referencewarning: Clock skew detected. Your build may be incomplete.warning: NUL character seen; rest of line ignoredwarning: ignoring old recipe for target '%s'warning: jobserver unavailable: using -j1. Add '+' to parent make rule.warning: overriding recipe for target '%s'warning: undefined variable '%.*s'windows32_openpipe(): process_init_fd() failed windows32_openpipe: DuplicateHandle(Err) failed (e=%ld) windows32_openpipe: DuplicateHandle(In) failed (e=%ld) write error: stdoutwrite jobserverwrite: %s: %sProject-Id-Version: make-4.2.1 Report-Msgid-Bugs-To: bug-make@gnu.org PO-Revision-Date: 2016-12-17 12:09+0200 Last-Translator: МироÑлав Ðиколић Language-Team: Serbian <(nothing)> Language: sr MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. 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); # %u „vpath“ путање претраге. # %u вредноÑти променљиве према шаблону # Директоријуми # Датотеке # База података мејка је завршена %s # Општа (променљиве „VPATH“) путања претраге: # # Изричита правила # База података мејка, штампана %s # Ðема опште (променљиве „VPATH“) путање претраге. # Ðема изричитих правила. # Ðема вредноÑти променљиве према шаблону. # ВредноÑти променљиве према шаблону # „VPATH“ путање претраге # Променљиве # ÑтатиÑтика хеш-табеле датотека: # %s Ðема међумеморија причуваних ниÑки %s међумеморије причуваних ниÑки: %lu (%lu) / ниÑке = %lu / Ñмештај = %lu B / проÑек = %lu B %s учинковитоÑÑ‚ причуваних ниÑки: тражења = %lu / проÑек погодака = %lu%% Избројах %d аргумента у неуÑпелом покретању Овај програм је изграђен за „%s“ Овај програм је изграђен за „%s“ (%s) Ðеобрадив филтер изузеткаје позван из програма „%s“ Код изузетка = %lx ЗаÑтавице изузетка = %lx ÐдреÑа изузетка = 0x%p --debug[=ЗÐСТÐВИЦЕ] ИÑпиÑује разне врÑте података за уклањање грешака. --no-print-directory ИÑкључује „-w“, чак и ако је изричито укључена. --trace ИÑпиÑује податке о праћењу. --warn-undefined-variables Упозорава када Ñе упућује на неодређену променљиву. -B, --always-make БезуÑловно одрађује Ñве мете. -C ДИР, --directory=ДИР Прелази у ДИРЕКТОРИЈУМ пре него што било шта уради. -I ДИР, --include-dir=ДИР Тражи у ДИРЕКТОРИЈУМУ укључене мејк_датотеке. -L, --check-symlink-times КориÑти поÑледње м-време између Ñимболичких веза и мете. -O[ВРСТÐ], --output-sync[=ВРСТÐ] УÑаглашава излаз паралелних поÑлова ВРСТОМ. -R, --no-builtin-variables ИÑкључује уграђена подешавања променљиве. -S, --no-keep-going, --stop ИÑкључује „-k“. -W ДТТКÐ, --what-if=ДТТКÐ, --new-file=ДТТКÐ, --assume-new=ДТТКРСматра да је ДÐТОТЕКРбеÑконачно нова. -b, -m Занемарено зарад ÑаглаÑноÑти. -d ИÑпиÑује доÑта података за уклањање грешака. -e, --environment-overrides Променљиве окружења превазилазе мејк_датотеке. -f ДТТКÐ, --file=ДТТКÐ, --makefile=ДТТКРЧита ДÐТОТЕКУ као мејк_датотеку. -h, --help Приказује ову помоћ и излази. -i, --ignore-errors Занемарује грешке из рецепата. -j [Бр.], --jobs[=Бр.] Допушта БРОЈ поÑла одједном; беÑконачан број поÑлова без аргумената. -k, --keep-going ÐаÑтавља и даље када неке мете не могу бити одрађене. -l [Бр.], --load-average[=Бр.], --max-load[=Бр.] Ðе започиње више поÑлова оÑим ако оптерећење није иÑпод БРОЈÐ. -n, --just-print, --dry-run, --recon Ðе покреће никакав рецепт; Ñамо их иÑпиÑује. -o ДТТКÐ, --old-file=ДТТКÐ, --assume-old=ДТТКРСматра да је ДÐТОТЕКРврло Ñтара и не одрађује је. -p, --print-data-base ИÑпиÑује унутрашњу базу података мејка. -q, --question Ðе покреће ниједан рецепт; излазно Ñтање говори да ли је оÑвежен. -r, --no-builtin-rules ИÑкључује уграђена изричита правила. -s, --silent, --quiet Ðе приказује рецепте. -t, --touch Додирује мете умеÑто да их поново одрађује. -v, --version ИÑпиÑује издање програма и излази. -w, --print-directory ИÑпиÑује тренутни директоријум. Датум %s Занемарујем „VPATH“ назив „%s“. уид = %d, гид = %d, режим = 0%o. (уграђено): (језгрени избачај) (не марим) (од „%s“, %lu. ред) (од „%s“, %lu. ред): (занемарено) (назив је можда Ñкраћен) (нема оÑновног циља) (нема ~ проширења) (удаљено) (претражујем путању) датотеке, немогућноÑти немогућноÑти у %lu директоријума. за Ñада.# ОÑновно, „MAKEFILES“, или „-include/sinclude makefile“.# Такође твори:# Правило изградње# Мета линије наредби.# Рецепт завиÑноÑти ради (ОВО ЈЕ ГРЕШКÐ).# Ðије уÑпела да Ñе оÑвежи.# Датотека не поÑтоји.# Датотека је оÑвежена.# Датотека није оÑвежена.# Датотека је прелазни предуÑлов.# Датотека је превише Ñтара.# Претрага по изричитом правилу је обављена.# Претрага по изричитом правилу није обављена.# Изричити/Ñтатички корен шаблона: '%s' # ÐеиÑправна вередноÑÑ‚ у члану „command_state“!# ПоÑледња измена „%s“ # Време измене није никада проверено.# Треба да Ñе оÑвежи („-q“ је подешено).# Лажна мета (предуÑлов од „.PHONY“).# Драгоцена датотека (предуÑлов од „.PRECIOUS“).# Рецепт тренутно ради (ОВО ЈЕ ГРЕШКÐ).# УÑпешно је оÑвежена.# рецепт за извршавање# %s (уређај %d, и-чвор [%d,%d,%d]): # %s (уређај %d, и-чвор [%d,%d,%d]): не могу да отворим. # %s (уређај %ld, и-чвор %ld): # %s (уређај %ld, и-чвор %ld): не могу да отворим. # %s (кључ „%s“, м-време %I64u): # %s (кључ „%s“, м-време %I64u): не могу да отворим. # %s: не могу да добавим податке. # Ðема „vpath“ путања претраге.# Ðије мета:# ÑтатиÑтика хеш-табеле: # # променљива подешава ÑтатиÑтику хеш табеле: „$SHELL“ је промењена (беше „%s“, Ñада је „%s“) %s (%d. ред) Лош контекÑÑ‚ шкољке (!unixy && !batch_mode_shell) %s оÑталих Ñлободних: укупно = %lu B / највише = %lu B / најмање = %lu B / проÑек = %hu B %s оÑталих коришћених: укупно = %lu B / број = %lu / проÑек = %lu B %s%s: %s%s: %s%s: Улазим у непознат директоријум %s: Улазим у директоријум „%s“ %s: Поље „%s“ није у оÑтави: %s%s: Добих прекид/изузетак (код = 0x%lx, адреÑа = 0x%p) %s: Ðапуштам непознат директоријум %s: Ðапуштам директоријум „%s“ %s: ВременÑка ознака је ван опÑега; замењујем „%s“%s: ниÑам уÑпео да учитам%s: неиÑправна опција -- %c %s: неиÑправна опција -- %c %s: опција „%c%s“ не дозвољава аргумент %s: опција „%s“ је нејаÑна %s: опција „%s“ захтева аргумент %s: опција „--%s“ не дозвољава аргумент %s: опција „-W %s“ не дозвољава аргумент %s: опција „-W %s“ је нејаÑна %s: опција захтева аргумент -- %c %s: мета „%s“ не поÑтоји%s: непозната опција „%c%s“ %s: непозната опција „--%s“ %s: оÑвежавам мету „%s“ уÑлед: %s%s: кориÑник „%lu“ (Ñтварни „%lu“), група „%lu“ (Ñтварна „%lu“) %sИзградња за „%s“ %sИзградња за „%s“(%s) %sДозвола ОЈЛи3+: Гнуова ОЈЛ 3. издање или новије %sОво је Ñлободан Ñофтвер: можете Ñлободно да га мењате и раÑподељујете. %sÐема ÐИКÐКВЕ ГÐРÐÐЦИЈЕ, у Ñкалду Ñа законом. %sÐема правила за одрађивање мете „%s“%s%sÐема правила за одрађивање мете „%s“, треба га „%s“%s%s[%s: %s] грешка %d%s%s[%u]: Улазим у непознат директоријум %s[%u]: Улазим у директоријум „%s“ %s[%u]: Ðапуштам непознат директоријум %s[%u]: Ðапуштам директоријум „%s“ „%s“ је оÑвежено.директива „override“*** Члан архиве „%s“ је можда лажан; није обриÑан*** Прекид. *** Бришем датотеку „%s“*** Бришем поÑредничку датотеку „%s“*** Чекам на недовршене поÑлове....*** Упозорење: „.LOW_RESOLUTION_TIME“ датотека „%s“ има виÑоку резолуцију временÑке ознаке*** [%s] Члан архиве „%s“ је можда лажан; није обриÑан*** [%s] Бришем датотеку „%s“*** помешана изричита и обична правила: заÑтарела ÑинтакÑа„-O[ВРСТÐ]“ (--output-sync[=ВРСТÐ]) није подешено за ову изградњу.-упозорење, мораћете поново да укључите „КТРЛ-Y“ руковање из ДЦЛ-а. . Стајем. „.DEFAULT_GOAL“ Ñадржи више од једне мете„.LIBPATTERNS“ елемент „%s“ није шаблон; кориÑтим „VPATH“ назив „%s“<уграђено>ПрекинутоПовреда приÑтупа: радња читања на адреÑи 0x%p Повреда приÑтупа: радња пиÑања на адреÑи 0x%p БудилникПридодајем „%.*s“ и чиÑтим Придодајем излаз на „%s“ Избегавам дубачење изричитог правила. ГРЕШКÐ: број_правила_шаблона је погрешан! %u != %uЦД ИЗГРÐДЊЕ „%s“ Лош ÑиÑтемÑки позивСадржај датотеке групе: @echo off Садржај датотеке групе:%s %s Оштећена ÑпојкаГрешка ÑабирницеПрекорачено је временÑко ограничење процеÑораÐе могу да направим привремену датотеку ПриÑтуп подпроцеÑÐ°ÐŸÐ¾Ñ‚Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñ˜Ðµ напуштенКружна „%s <— %s“ завиÑноÑÑ‚ је одбачена.Бришем привремену датотеку групе „%s“ ÐиÑам уÑпео да обришем привремену датотеку групе „%s“ (%d) Бришем привремену датотеку групе „%s“ Разматрам датотеку мете „%s“. ÐаÑтављенÐе могу да повратим Ñтандардну грешку Ðе могу да повратим Ñтандардни улаз Ðе могу да повратим Ñтандардни излаз Ðе могу да Ñе вратим у изворни директоријум.„CreatePipe()“ није уÑпело (e=%ld) Правим привремену датотеку групе „%s“ Тренутно времеПрилагођени неће извеÑти: %s ДЦЛ: %s ОпаÑан ÑигналЕМТ замкаПразан назив функцијеПразан назив Ñимбола за учитано: „%s“УмеÑто тога извршавам „%s“ ÐиÑам уÑпео да учитам Ñимбол „%s“ из „%s“: %sÐиÑам уÑпео да отворим општу табелу Ñимбола: %sÐиÑам уÑпео поново да одрадим мејк_датотеку „%s“.ÐиÑам уÑпео поново да одрадим датотеку мете „%s“. Датотека „%s“ не поÑтоји. Датотека „%s“ је већ разматрана. Прекорачено је ограничење величине датотекеЗавршио Ñам предуÑлове датотеке мете „%s“. Завршио Ñам оÑвежавање датотеке „%s“. Ко-процеÑор покретног зареза није доÑтупанИзузетак покретног зарезаÐађох изричито правило за „%s“. Ðађох предуÑлов „%s“ као „VPATH“ „%s“ Ðазив функције је предуг: %sОдуÑтајем над датотеком мете „%s“. ОбуÑтавиI/O је могућИОТ замкаÐеиÑправна инÑтрукцијаÐиÑам нашао укључену мејк_датотеку „%s“.Захтев за информацијамаПокренут приÑтупПрекиниÐеиÑправан назив функције: %sÐеиÑправан највећи број аргумената (%u) за функцију „%s“ÐеиÑправан најмањи број аргумената (%u) за функцију „%s“Клијент поÑлужитеља поÑла (опиÑници датотека %d,%d) Клијент поÑлужитеља поÑла (Ñемафор „%s“) Подножја поÑлужитеља поÑла Ñу ограничена на %d УбијенÐктиван Ð¿Ð¾Ð´Ð¿Ñ€Ð¾Ñ†ÐµÑ â€ž%p“ (%s) ПИД %s %s Учитани објекат „%s“ није проглашен да је ÑаглаÑан Ñа ОЈЛ-омУчитавам Ñимбол „%s“ из „%s“ Тражим правило Ñа Ñредњом датотеком „%s“. Тражим изричито правило за „%s“. Тражим изричито правило члана архиве за „%s“. ПриÑтуп мејкаМејк_датотека „%s“ Ñе можда понавља; неђу је поново одрадити. ÐиÑам нашао мејк_датотеку „%s“Мејк_датотека Ñа Ñтандардног улаза је наведена два пута.Одрађујем „%s“ због заÑтавице увек-одради. Лоша одредница променљиве Ñпецифичне метиЧлан „%s“%s: %ld бајта при %ld (%ld). Морам поново да одрадим мету „%s“. ÐеÐиÑам нашао изричито правило за „%s“. Ðема потребе за поновнм одрађивањем мете „%s“Ðема рецепта за „%s“ и никакви предуÑлови заправо ниÑу мењани. Ðема метаÐиÑу наведене мете и ниÑам нашао мејк_датотекуÐишта неће бити урађено за „%s“.Добијен прÑтен за Ð¿Ð¾Ð´Ð¿Ñ€Ð¾Ñ†ÐµÑ â€ž%p“ (%s). Опције: Паралелни поÑлови (-j) ниÑу подржани на овој платформи.ÐеуÑпех напајањаПредуÑлов „%s“ је новији од мете „%s“. ПредуÑлов „%s“ је Ñтарији од мете „%s“. ПредуÑлов „%s“ је Ñамо по поретку за мету „%s“. ПреудÑлов „%s“ мете „%s“ не поÑтоји. Одбројавач профилиÑања је иÑтекаоЧиÑтим датотеку „%s“. Стављам Ð¿Ð¾Ð´Ð¿Ñ€Ð¾Ñ†ÐµÑ â€ž%p“ (%s) ПИД %s%s у ланац. ИзађиПоново-извршавам[%u]:Читам мејк_датотеку „%s“Читам мејк_датотеке... ПочиÑтио Ñам неуÑпели Ð¿Ð¾Ð´Ð¿Ñ€Ð¾Ñ†ÐµÑ â€ž%p“ ПИД %s %s ПочиÑтио Ñам уÑпели Ð¿Ð¾Ð´Ð¿Ñ€Ð¾Ñ†ÐµÑ â€ž%p“ ПИД %s %s Ðедавно Ñам покушао и ниÑам уÑпео да оÑвежим датотеку „%s“. Рецепат за „%s“ биће замењен у кориÑÑ‚ једног за „%s“.Ðашао Ñам рецепт за датотеку „%s“ изричитом претрагом правила,Рецепт има превише редова (%ud)Рецепт од „%s“ је покренут. Рецепт је наведен за датотеку „%s“ у %s:%lu,ДубинÑка променљива „%s“ упућује на Ñебе (евентуално)Одбацујем немогућ изричити предуÑлов „%s“. Одбацујем немогућ предуÑлов правила „%s“. Отпуштен прÑтен за Ð¿Ð¾Ð´Ð¿Ñ€Ð¾Ñ†ÐµÑ â€ž%p“ (%s). Уклањам Ð¿Ð¾Ð´Ð¿Ñ€Ð¾Ñ†ÐµÑ â€ž%p“ ПИД %s%s из ланца. Уклањам поÑредничке датотеке... Грешке пријавите на Враћам на режим једног поÑла (-j1) mode.Губитак извориштаСИГФОÐСИГВИÐДГрешка ÑегментацијеПреÑкачем УТФ-8 БОМ у мејк_датотеци „%s“ ПреÑкачем УТФ-8 БОМ у међумеморији мејк_датотеке Још увек оÑвежавам датотеку „%s“. ЗауÑтављенЗауÑтављен (Ñигнал)ЗауÑтављен (улаз конзоле)ЗауÑтављен (излаз конзоле)УÑпешно Ñам одрадио датотеку мете „%s“. Симболичке везе ниÑу подржане: иÑкључујем „-L“.Мета „%s“ је двоÑтрука двотачка и нема предуÑлове. Мета „%s“ није поново одрађена због грешака.Датотека мете „%s“ треба поново да Ñе одради под „-q“. ОкончанРадња „load“ није подржана на овој платформи.ПреудÑлови од „%s“ Ñу одрађени. Замка праћења/тачке прекидаПокушавам изричити предуÑлов „%s“. Пробам правило шаблона Ñа кореном „%.*s“. Покушавам Ñа предуÑловом правила „%s“. ОÑвежавам циљне мете... ОÑвежавам мејк_датотеке... Хитни У/И уÑловУпотреба: %s [опције] [мета] ... ПриÑтуп кориÑникаКориÑнички одређени Ñигнал 1КориÑнички одређени Ñигнал 2КориÑтим оÑновне наредбе за „%s“. КориÑтим оÑновни рецепт за „%s“. Виртуелни одбројавач је иÑтекаоУпозорење: Датотека „%s“ има време измене %s Ñек. у будућноÑтиПрозор је измењенпокушавам да кориÑтим неподржану функцију: „%s“аутоматÑкиали Ñе „%s“ Ñада Ñматра иÑтом датотеком као „%s“.не могу да доделим %lu бајта за хеш табелу: меморија је потрошенане могу да преименујем две двотачке „%s“ у једну двотачку „%s“не могу да преименујем једну двотачку „%s“ у две двотачке „%s“не могу да Ñпроведем ограничење оптерећења: не могу да Ñпроведем ограничења оптерећења на овом оперативном ÑиÑтемуclose: %s: %sлинија наредбиÑтварам Ñпојку поÑлаправим Ñемафор поÑлужитеља поÑла: (грешка %ld: %s)оÑновноудвоÑтручавам Ñпојку поÑловапразна ниÑка је неиÑправна као назив датотекепразан назив променљивеокружењеокружење под „-e“Ñувишно „%s“Ñувишан текÑÑ‚ након директиве „%s“Ñувишан текÑÑ‚ након директиве „define“Ñувишан текÑÑ‚ након директиве „endef“file: неиÑправна радња датотеке: %sfile: недоÑтаје назив датотекеfile: превише аргуменатаПретрага путање „нађи_и_подеÑи_шкољку()“ подешава „оÑновну_шкољку“ = %s Функција „нађи_и_подеÑи_шкољку()“ подешава „оÑновну_шкољку“ = %s први аргумент за функцију „word“ мора бити број већи од 0отвори датотеку (привремена датотека)запиши датотеку (привремена датотека)guile: Процењујем „%s“ guile: Проширујем „%s“ почетна Ñпојка поÑлужитеља поÑланедовољан број аргумената (%d) за функцију „%s“унутрашња грешка: неиÑправна „--jobserver-auth“ ниÑка „%s“унутрашња грешка: не могу да отворим Ñемафор поÑлужитеља поÑла „%s“: (грешка %ld: %s)неиÑправна ÑинтакÑа у уÑловуÑпојни ред поÑлужитеља поÑлаФункција „lbr$ini_control()“ није уÑпела Ñа Ñтањем = %dФункција „lbr$set_module()“ није уÑпела да извуче податке модула, Ñтање = %dмејк је почиÑтио Ð¿Ð¾Ð´Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñа пид-ом %s, још увек чекам на пид %s мејк_датотеканедоÑтаје „endef“, неокончано „define“недоÑтаје „endif“недоÑтаје правило пре рецептанедоÑтаје раздвојникнедоÑтаје раздвајач (да ли Ñте миÑлили ТÐБУЛÐТОР умеÑто 8 размака?)недоÑтаје шаблон метепомешана изричита и обична правилапомешана правила изричитог и Ñтатичког шаблонавише шаблона метененема више ручки датотеке: не могу да удвоÑтручим Ñтандардну грешку нема више ручки датотеке: не могу да удвоÑтручим Ñтандардни улаз нема више ручки датотеке: не могу да удвоÑтручим Ñтандардни излаз не-бројевни први аргумент за функцију „word“не-бројевни први аргумент за функцију „wordlist“не-бројевни други аргумент за функцију „wordlist“Ñамо једно „else“ по уÑловуopen: %s: %sпредуÑлови Ñе не могу одредити у рецептимаФункција „process_easy()“ није уÑпела да покрене Ð¿Ñ€Ð¾Ñ†ÐµÑ (e=%ld) п-бира Ñпојку поÑловачитам Ñпојку поÑлаread: %s: %sрецепт долази пре прве метеотпуштам Ñемафор поÑлужитеља поÑла: (грешка %ld: %s)Ñемафор или Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð¿Ð¾Ð´Ð¿Ñ€Ð¾Ñ†ÐµÑа чека: (грешка %ld: %s)spawnvpe: можда је потрошен проÑтор окружењаФункција „sys$search()“ није уÑпела Ñа %d мета „%s“ не одговара шаблону метемета „%s“ је дата више од једном у иÑтом правилудатотека мете „%s“ има и : и :: уноÑешаблон мете не Ñадржи „%%“Опција „%s%s“ захтева аргумент не-празне ниÑкеОпција „-%c“ захтева аргумент позитивног целог бројачлан архиве додирника није доÑтупан на ВМС-уtouch: „%s“ није иÑправна архиваtouch: Ðрхива „%s“ не поÑтојиtouch: Лош повратни код из „ar_member_touch“ на „%s“touch: Члан „%s“ не поÑтоји у „%s“не могу да отворим библиотеку „%s“ да потражим Ñтање члана %dније примењено на овој платформи: функција „%s“непозната одредба нивоа прочишћавања „%s“непозната врÑта уÑклађивања излаза „%s“непознати Ñигналпоништавам везу (привремена датотека): недовршен позив за функцију „%s“: недоÑтаје „%c“недовршена упута променљивеупозорење: Откривен је проблем Ñа чаÑовником. Ваша изградња може бити недовршена.упозорење: видех ÐИШТÐÐ’ÐРзнак; оÑтатак реда је занемаренупозорење: занемарујем Ñтари рецепт за мету „%s“упозорење: поÑлужитељ поÑла није доÑтупан: кориÑтим „-j1“. Додајте + да родитељ одреди правило.упозорење: препиÑујем рецепт за мету „%s“упозорење: неодређена променљива „%.*s“windows32_openpipe(): „process_init_fd()“ није уÑпело windows32_openpipe: „DuplicateHandle(Err)“ није уÑпело (e=%ld) windows32_openpipe: „DuplicateHandle(In)“ није уÑпело (e=%ld) грешка пиÑања: Ñтандардни излазпишем поÑлужитеља поÑлаwrite: %s: %smake-4.3/po/it.gmo0000644000175000017500000013075013611136532010763 00000000000000Þ•­„ Aìð#ñ#+$&:$a$q$!z$-œ$Ê$ Ü$-ý$+%'A%#i%% ¤%²%Ð%Pé%;:&"v&™& µ&tÖ&LK'P˜'Dé'9.(Mh(@¶(o÷(Gg)o¯)P*lp*FÝ*J$+€o+9ð+C*,fn,_Õ,;5-:q-O¬-Jü-}G.uÅ.~;/>º/Mù/CG02‹0F¾0I1;O1 ‹1•1"²1 Õ1â1 ñ1ÿ12 /2:2U2h2 z2„2“2œ2%­2Ó27Ü23#333/K3{3”3¬3Æ3(ä3 4&"4*I4&t4+›4Ç4#Ü4#5)$5-N5,|5©5Â5$×59ü5663U6‰61¦6Ø6ô677!67$X7=}7G»7G89K8…8Ž8"•8¸8Õ8;ó8!/9Q9+m9™9¬9Æ9,à9 :%+:,Q:-~: ¬:&Í:ô:;3;!S;.u;¤;´;ÍÉ;—</·<ç<&ý< $=%E=k=‹=Ÿ=1´= æ=ò=# >#->LQ>6ž>Õ>6ñ>A(?>j? ©?+³?*ß? @ "@,@14@2f@ ™@¥@¾@"Ó@*ö@!A0A @AaA }A ‰A“A«A ËA ØA%åA B++B$WB|B–B µB¿BÙBòB+ C8C!UC wC„CžC §CµC¾CÒCñC$D&,DSD#sD—D"²DÕD,îDE)9EcE!|E&žEÅEàEF FFF%1FWFkF ~FˆF3¢F3ÖF G (GIGhGoGG5£GÙG0ôG'%H3MH H+H¹H-ÕH%I-)I'WII™I!œI¾I:ÜI J*"JMJ"jJ J6—J ÎJ-ÜJ- K18K1jKœK´K-ÈKöKûK L#L"9L#\L/€L=°L7îL&MFM-dM6’M ÉM1ÕM-N"5N'XN€N" N#ÃN çNõNþNO$O&>OeO€OˆO™O­O&ÂO+éO6P)LP.vP ¥P7°P*èPQ#)Q&MQtQ”Q¯QÇQ!ÜQ þQ R R!6RXRxR;ŽRÊR(ÙR S1 S9>S3xS3¬SàS3üS 0T >TKT-^TŒT”T!¥TÇT ÛTçTüT$ U(1U'ZU ‚U£UºU8ÓU0 V8=VvVV%¥VËVãVúV6W4EWHzWÃWáWöW) X;3X3oX£X&¬XÓXãXþX9YJYaY'Y©YÂY1ÅY0÷Y1(Z-ZZ1ˆZ2ºZíZ [*[0E[v[ˆ[ —[$¤[,É[0ö[.'\V\,s\1 \*Ò\ý\6]5T],Š]"·]"Ú]3ý])1^6[^-’^&À^ç^__0.___=_;½_:ù_14`,f`H“`4Ü`*a"‡&f‡8‡&Ƈí‡&ˆ .ˆ+9ˆ+eˆ,‘ˆ/¾ˆ"îˆ'‰ 9‰0F‰w‰€‰ ”‰¡‰-»‰é‰1Š;6Š.rŠ6¡ŠØŠ(ôŠ%‹2C‹)v‹. ‹Ï‹)ë‹1Œ$GŒ%lŒ’Œ›Œ ªŒ·Œ0ËŒüŒ )"6CY;!Ù#û!ŽAŽ+HŽtŽFŒŽ!ÓŽ5õŽ,+FX ŸS¬'@(6i@ 'á+ ‘5‘-8‘/f‘S–‘ê‘6û‘*2’/]’ ’D—’#Ü’F“HG“7“9È“””Q9”‹”¢”´”Д;é”;%•Aa•O£•bó•*V–6–F¸–;ÿ– ;—5G—8}—1¶—Jè— 3˜%T˜7z˜ ²˜À˜ɘј&é˜&™47™l™ƒ™‹™Ÿ™0´™?å™F%š=lšJªš õš>ÿš1>›p›5Š›<À›8ý›"6œYœyœ"“œ¶œÅœäœ(2,_Axº;Î ž9žCOž[“ž[ïž0KŸI|ŸÆŸן!çŸ6   @ L 1j œ · À Ú -ð 1¡0P¡(¡ª¡¾¡MÕ¡5#¢CY¢¢µ¢>΢ £+£5H£?~£<¾£Uû£"Q¤t¤†¤0™¤Oʤ^¥y¥,‚¥¯¥+Â¥î¥9¦ <¦ ]¦-~¦ ¬¦ͦHЦH§Ib§3¬§7à§9¨!R¨t¨@…¨;ƨ©"©B©5R©5ˆ©5¾©:ô©!/ªIQªI›ª3åª3«:M«7ˆ«3À«'ô«#¬;@¬,|¬L©¬7ö¬/.­E^­¤­¸­<Ó­(®P9®OŠ®OÚ®R*¯I}¯dǯM,°Gz°+°5î°?$±=d±¢±¾±Ö±’‘¬uš ÙeŠœ´gcÓ<'6݉#ˆ“þDAf–)ª$­ É }‘à k©µŒ8|jè1e,Rƒ&vr•Ü`N¡HŸ!š¨€ ¥0tD§ôz|&-X« Ïÿê>U¶40 lO¾u…IõJ†سöºwVP ]sr•9 {C3‚A±ÂMT…+[Y/™˰p:§ó ›U71ÌqGÛl˜;9øò¿2B¡{Œ/æibO¸~¯g5²‰—ç'+Áa-Z*@†}~yÊ™bEYä=n›")\€,˜íÑkðQ =¢‹Kd`ã_8Ð÷åZÍ“#¨?%ÎfmLÃs©_ÕC\SŽ®ùSR„^6Ò Š ^jEKž¬Vh5$¤.cwžŸWúƒM4Q¢]xtëLª­Ö»q*Åâ>W[즹‡Ô·—ÇF:!3PJd”y‚ÆoF¥ ;¤¼£H”Žp‡éĈ"ß×GÚ‹’zÀn(ÞmTXaœ7£@ý«io2(ïN–IhȦ„x½.ñîü%áBûv<? # %u 'vpath' search paths. # %u implicit rules, %u (%.1f%%) terminal. # %u pattern-specific variable values # Directories # Files # Finished Make data base on %s # General ('VPATH' variable) search path: # # Implicit Rules # Make data base, printed on %s # No general ('VPATH' variable) search path. # No implicit rules. # No pattern-specific variable values. # Pattern-specific Variable Values # VPATH Search Paths # Variables # files hash-table stats: # %s No strcache buffers %s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu B %s strcache performance: lookups = %lu / hit rate = %lu%% Counted %d args in failed launch This program built for %s This program built for %s (%s) Unhandled exception filter called from program %s ExceptionCode = %lx ExceptionFlags = %lx ExceptionAddress = 0x%p --debug[=FLAGS] Print various types of debugging information. --no-print-directory Turn off -w, even if it was turned on implicitly. --no-silent Echo recipes (disable --silent mode). --trace Print tracing information. --warn-undefined-variables Warn when an undefined variable is referenced. -B, --always-make Unconditionally make all targets. -C DIRECTORY, --directory=DIRECTORY Change to DIRECTORY before doing anything. -E STRING, --eval=STRING Evaluate STRING as a makefile statement. -I DIRECTORY, --include-dir=DIRECTORY Search DIRECTORY for included makefiles. -L, --check-symlink-times Use the latest mtime between symlinks and target. -O[TYPE], --output-sync[=TYPE] Synchronize output of parallel jobs by TYPE. -R, --no-builtin-variables Disable the built-in variable settings. -S, --no-keep-going, --stop Turns off -k. -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE Consider FILE to be infinitely new. -b, -m Ignored for compatibility. -d Print lots of debugging information. -e, --environment-overrides Environment variables override makefiles. -f FILE, --file=FILE, --makefile=FILE Read FILE as a makefile. -h, --help Print this message and exit. -i, --ignore-errors Ignore errors from recipes. -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no arg. -k, --keep-going Keep going when some targets can't be made. -l [N], --load-average[=N], --max-load[=N] Don't start multiple jobs unless load is below N. -n, --just-print, --dry-run, --recon Don't actually run any recipe; just print them. -o FILE, --old-file=FILE, --assume-old=FILE Consider FILE to be very old and don't remake it. -p, --print-data-base Print make's internal database. -q, --question Run no recipe; exit status says if up to date. -r, --no-builtin-rules Disable the built-in implicit rules. -s, --silent, --quiet Don't echo recipes. -t, --touch Touch targets instead of remaking them. -v, --version Print the version number of make and exit. -w, --print-directory Print the current directory. Date %s Ignoring VPATH name '%s'. uid = %d, gid = %d, mode = 0%o. (built-in): (core dumped) (don't care) (from '%s', line %lu) (from '%s', line %lu): (ignored) (name might be truncated) (no default goal) (no ~ expansion) (remote) (search path) files, impossibilities impossibilities in %lu directories. so far.# A default, MAKEFILES, or -include/sinclude makefile.# Also makes:# Builtin rule# Command line target.# Dependencies recipe running (THIS IS A BUG).# Failed to be updated.# File does not exist.# File has been updated.# File has not been updated.# File is an intermediate prerequisite.# File is very old.# Implicit rule search has been done.# Implicit rule search has not been done.# Implicit/static pattern stem: '%s' # Invalid value in 'command_state' member!# Last modified %s # Modification time never checked.# Needs to be updated (-q is set).# Phony target (prerequisite of .PHONY).# Precious file (prerequisite of .PRECIOUS).# Recipe currently running (THIS IS A BUG).# Successfully updated.# recipe to execute# %s (device %d, inode [%d,%d,%d]): # %s (device %d, inode [%d,%d,%d]): could not be opened. # %s (device %ld, inode %ld): # %s (device %ld, inode %ld): could not be opened. # %s (key %s, mtime %I64u): # %s (key %s, mtime %I64u): could not be opened. # %s: could not be stat'd. # No 'vpath' search paths.# Not a target:# hash-table stats: # # variable set hash-table stats: $SHELL changed (was '%s', now '%s') %s (line %d) Bad shell context (!unixy && !batch_mode_shell) %s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B %s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B %s other used: total = %lu B / count = %lu / avg = %lu B %s%s: %s%s: %s%s: Entering an unknown directory %s: Entering directory '%s' %s: Field '%s' not cached: %s%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p) %s: Leaving an unknown directory %s: Leaving directory '%s' %s: Timestamp out of range; substituting %s%s: failed to load%s: illegal option -- %c %s: invalid option -- %c %s: option '%c%s' doesn't allow an argument %s: option '%s' is ambiguous %s: option '%s' requires an argument %s: option '--%s' doesn't allow an argument %s: option '-W %s' doesn't allow an argument %s: option '-W %s' is ambiguous %s: option requires an argument -- %c %s: target '%s' does not exist%s: unrecognized option '%c%s' %s: unrecognized option '--%s' %s: update target '%s' due to: %s%s: user %lu (real %lu), group %lu (real %lu) %sBuilt for %s %sBuilt for %s (%s) %sLicense GPLv3+: GNU GPL version 3 or later %sThis is free software: you are free to change and redistribute it. %sThere is NO WARRANTY, to the extent permitted by law. %sNo rule to make target '%s'%s%sNo rule to make target '%s', needed by '%s'%s%s[%s: %s] Error %d%s%s[%u]: Entering an unknown directory %s[%u]: Entering directory '%s' %s[%u]: Leaving an unknown directory %s[%u]: Leaving directory '%s' '%s' is up to date.'override' directive*** Archive member '%s' may be bogus; not deleted*** Break. *** Deleting file '%s'*** Deleting intermediate file '%s'*** Waiting for unfinished jobs....*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp*** [%s] Archive member '%s' may be bogus; not deleted*** [%s] Deleting file '%s'*** mixed implicit and normal rules: deprecated syntax-O[TYPE] (--output-sync[=TYPE]) is not configured for this build.-warning, you may have to re-enable CTRL-Y handling from DCL. . Stop. .DEFAULT_GOAL contains more than one target.LIBPATTERNS element '%s' is not a pattern; using VPATH name '%s'AbortedAccess violation: read operation at address 0x%p Access violation: write operation at address 0x%p Alarm clockAppend %.*s and cleanup Append output to %s Avoiding implicit rule recursion. BUG: num_pattern_rules is wrong! %u != %uBUILTIN CD %s Bad system callBatch file contents: @echo off Batch file contents:%s %s Broken pipeBus errorCPU time limit exceededCannot create a temporary file Child accessChild exitedCircular %s <- %s dependency dropped.Cleaning up temp batch file %s Cleaning up temp batch file %s failed (%d) Cleaning up temporary batch file %s Collisions=%lu/%lu=%.0f%%Considering target file '%s'. ContinuedCould not restore stderr Could not restore stdin Could not restore stdout Couldn't change back to original directory.CreatePipe() failed (e=%ld) Creating temporary batch file %s Current timeCustoms won't export: %s DCL: %s Danger signalEMT trapEmpty function nameEmpty symbol name for load: %sExecuting %s instead Failed to load symbol %s from %s: %sFailed to open global symbol table: %sFailed to remake makefile '%s'.Failed to remake target file '%s'. File '%s' does not exist. File '%s' was considered already. File size limit exceededFinished prerequisites of target file '%s'. Finished updating file '%s'. Floating point co-processor not availableFloating point exceptionFound an implicit rule for '%s'. Found prerequisite '%s' as VPATH '%s' Function name too long: %sGiving up on target file '%s'. HangupI/O possibleIOT trapIllegal InstructionIncluded makefile '%s' was not found.Information requestInitialized accessInterruptInvalid function name: %sInvalid maximum argument count (%u) for function %sInvalid minimum argument count (%u) for function %sJobserver client (fds %d,%d) Jobserver client (semaphore %s) Jobserver slots limited to %d KilledLive child %p (%s) PID %s %s Load=%lu/%lu=%.0f%%, Loaded object %s is not declared to be GPL compatibleLoading symbol %s from %s Looking for a rule with intermediate file '%s'. Looking for an implicit rule for '%s'. Looking for archive-member implicit rule for '%s'. Make accessMakefile '%s' might loop; not remaking it. Makefile '%s' was not foundMakefile from standard input specified twice.Making '%s' due to always-make flag. Malformed target-specific variable definitionMember '%s'%s: %ld bytes at %ld (%ld). Must remake target '%s'. NoNo implicit rule found for '%s'. No need to remake target '%s'No recipe for '%s' and no prerequisites actually changed. No targetsNo targets specified and no makefile foundNothing to be done for '%s'.Obtained token for child %p (%s). Options: Parallel jobs (-j) are not supported on this platform.Power failurePrerequisite '%s' is newer than target '%s'. Prerequisite '%s' is older than target '%s'. Prerequisite '%s' is order-only for target '%s'. Prerequisite '%s' of target '%s' does not exist. Profiling timer expiredPruning file '%s'. Putting child %p (%s) PID %s%s on the chain. QuitRe-executing[%u]:Reading makefile '%s'Reading makefiles... Reaping losing child %p PID %s %s Reaping winning child %p PID %s %s Recently tried and failed to update file '%s'. Recipe for '%s' will be ignored in favor of the one for '%s'.Recipe for file '%s' was found by implicit rule search,Recipe has too many lines (%ud)Recipe of '%s' is being run. Recipe was specified for file '%s' at %s:%lu,Recursive variable '%s' references itself (eventually)Rehash=%u, Rejecting impossible implicit prerequisite '%s'. Rejecting impossible rule prerequisite '%s'. Released token for child %p (%s). Removing child %p PID %s%s from chain. Removing intermediate files... Report bugs to Resetting to single job (-j1) mode.Resource lostSIGPHONESIGWINDSegmentation faultSkipping UTF-8 BOM in makefile '%s' Skipping UTF-8 BOM in makefile buffer Still updating file '%s'. StoppedStopped (signal)Stopped (tty input)Stopped (tty output)Successfully remade target file '%s'. Symbolic links not supported: disabling -L.Target '%s' is double-colon and has no prerequisites. Target '%s' not remade because of errors.Target file '%s' needs to be remade under -q. TerminatedThe 'load' operation is not supported on this platform.The prerequisites of '%s' are being made. Trace/breakpoint trapTrying implicit prerequisite '%s'. Trying pattern rule with stem '%.*s'. Trying rule prerequisite '%s'. Updating goal targets.... Updating makefiles.... Urgent I/O conditionUsage: %s [options] [target] ... User accessUser defined signal 1User defined signal 2Using default commands for '%s'. Using default recipe for '%s'. Virtual timer expiredWarning: File '%s' has modification time %s s in the futureWindow changedattempt to use unsupported feature: '%s'automaticbut '%s' is now considered the same file as '%s'.can't allocate %lu bytes for hash table: memory exhaustedcan't rename double-colon '%s' to single-colon '%s'can't rename single-colon '%s' to double-colon '%s'cannot enforce load limit: cannot enforce load limits on this operating systemclose: %s: %scommand linecreating jobs pipecreating jobserver semaphore: (Error %ld: %s)defaultduping jobs pipeempty string invalid as file nameempty variable nameenvironmentenvironment under -eextraneous '%s'extraneous text after '%s' directiveextraneous text after 'define' directiveextraneous text after 'endef' directivefile: invalid file operation: %sfile: missing filenamefile: too many argumentsfind_and_set_shell() path search set default_shell = %s find_and_set_shell() setting default_shell = %s first argument to 'word' function must be greater than 0fopen (temporary file)fwrite (temporary file)grouped targets must provide a recipeguile: Evaluating '%s' guile: Expanding '%s' init jobserver pipeinsufficient number of arguments (%d) to function '%s'internal error: invalid --jobserver-auth string '%s'internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)invalid syntax in conditionaljob server shut downjobserver pipelinelbr$ini_control() failed with status = %dlbr$set_module() failed to extract module info, status = %dmake reaped child pid %s, still waiting for pid %s makefilemissing 'endef', unterminated 'define'missing 'endif'missing rule before recipemissing separatormissing separator (did you mean TAB instead of 8 spaces?)missing target patternmixed implicit and normal rulesmixed implicit and static pattern rulesmultiple target patternsnono more file handles: could not duplicate stderr no more file handles: could not duplicate stdin no more file handles: could not duplicate stdout non-numeric first argument to 'word' functionnon-numeric first argument to 'wordlist' functionnon-numeric second argument to 'wordlist' functiononly one 'else' per conditionalopen: %s: %sprerequisites cannot be defined in recipesprocess_easy() failed to launch process (e=%ld) pselect jobs piperead jobs piperead: %s: %srecipe commences before first targetrelease jobserver semaphore: (Error %ld: %s)semaphore or child process wait: (Error %ld: %s)spawnvpe: environment space might be exhaustedsys$search() failed with %d target '%s' doesn't match the target patterntarget '%s' given more than once in the same ruletarget file '%s' has both : and :: entriestarget pattern contains no '%%'the '%s%s' option requires a non-empty string argumentthe '-%c' option requires a positive integer argumenttouch archive member is not available on VMStouch: '%s' is not a valid archivetouch: Archive '%s' does not existtouch: Bad return code from ar_member_touch on '%s'touch: Member '%s' does not exist in '%s'unable to open library '%s' to lookup member status %dunimplemented on this platform: function '%s'unknown debug level specification '%s'unknown output-sync type '%s'unknown signalunlink (temporary file): unterminated call to function '%s': missing '%c'unterminated variable referencewarning: Clock skew detected. Your build may be incomplete.warning: -j%d forced in makefile: resetting jobserver mode.warning: -j%d forced in submake: resetting jobserver mode.warning: NUL character seen; rest of line ignoredwarning: ignoring old recipe for target '%s'warning: jobserver unavailable: using -j1. Add '+' to parent make rule.warning: overriding group membership for target '%s'warning: overriding recipe for target '%s'warning: undefined variable '%.*s'windows32_openpipe(): process_init_fd() failed windows32_openpipe: DuplicateHandle(Err) failed (e=%ld) windows32_openpipe: DuplicateHandle(In) failed (e=%ld) write error: stdoutwrite jobserverwrite: %s: %sProject-Id-Version: make 4.2.91 Report-Msgid-Bugs-To: bug-make@gnu.org PO-Revision-Date: 2019-11-13 10:20+0100 Last-Translator: Francesco Groccia Language-Team: Italian Language: it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. X-Editor: Vim with po plugin # percorsi di ricerca 'vpath' %u. # %u regole implicite, %u (%.1f%%) terminale. # %u valori di variabile specifici per il modello # Directory # File # Generazione del database completata il %s # Percorso di ricerca generale (variabile «VPATH»): # # Regole implicite # Generazione del database delle informazioni, creato il %s # Percorso di ricerca non generale (variabile «VPATH»). # Regole non implicite. # Nessun valore per la variabile "pattern-specific". # Valori di variabile non specifici per il modello # Percorsi di ricerca VPATH # Variabili # statistiche tabella hash dei file: # %s buffer strcache assenti %s buffer strcache: %lu (%lu) / stringhe = %lu / memorizzazione = %lu B / media = %lu B %s prestazioni strcache: lookups = %lu / hit rate = %lu%% Contati %d argomenti nell'avvio fallito Questo programma è stato compilato per %s Questo programma è stato compilato per %s (%s) Filtro eccezione non gestita chiamata dal programma %s ExceptionCode = %lx ExceptionFlags = %lx ExceptionAddress = 0x%p --debug[=FLAGS] Mostra diversi tipi di informazioni di debug. --no-print-directory Disattiva l'opzione -w, anche se era stata attivata implicitamente. --no-silent Visualizza il set di istruzioni (Disabilita la modalità --silent). --trace Stampa informazioni di tracciamento. --warn-undefined-variables Avvisa quando viene referenziata una variabile non definita. -B, --always-make Genera tutti gli obiettivi incondizionatamente. -C DIRECTORY, --directory=DIRECTORY Cambia DIRECTORY prima di fare qualunque cosa. -E STRINGA, --eval=TESTO Analizza STRINGA come estratta dal makefile. -I DIRECTORY, --include-dir=DIRECTORY Cerca nella DIRECTORY per i makefile inclusi. -L, --check-symlink-times Usa il più recente mtime tra i collegamenti simbolici e l'obiettivo. -O[TIPO], --output-sync[=TIPO] Sincronizza l'output dei processi paralleli dal TIPO. -R, --no-builtin-variables Disabilita le impostazioni delle variabili interne. -S, --no-keep-going, --stop Disattiva l'opzione -k. -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE Considera il FILE come nuovo di zecca. -b, -m Ignorato per compatibilità. -d Mostra molte informazioni di debug. -e, --environment-overrides Le variabili ambiente sovrascrivono i makefile. -f FILE, --file=FILE, --makefile=FILE Legge FILE come un makefile. -h, --help Mostra questo messaggio ed esce. -i, --ignore-errors Ignora gli errori dai set di istruzioni. -j [N], --jobs[=N] Permette N processi alla volta; infiniti se non viene specificato l'argomento. -k, --keep-going Continua l'esecuzione quando non è possibile creare alcuni obiettivi. -l [N], --load-average[=N], --max-load[=N] Non avvia processi multipli a meno che il carico di lavoro non sia sotto N. -n, --just-print, --dry-run, --recon Non esegue alcun set di istruzioni; lo stampa solamente. -o FILE, --old-file=FILE, --assume-old=FILE Considera il FILE come molto vecchio e non riesegue make. -p, --print-data-base Stampa il database interno di make. -q, --question Non avvia alcun set di istruzioni; lo stato di uscita indica se è aggiornato. -r, --no-builtin-rules Disabilita le regole implicite interne. -s, --silent, --quiet Non visualizza i set di istruzioni. -t, --touch Esegue il touch degli obiettivi invece di ricrearli. -v, --version Stampa il numero di versione di make ed esce. -w, --print-directory Stampa la directory corrente. Data %s Nome VPATH «%s» ignorato. uid = %d, gid = %d, modo = 0%o. (comando interno): (creato dump del core) (ignora) (da «%s», riga %lu) (da «%s» riga %lu): (ignorato) (il nome potrebbe essere troncato) (nessun obiettivo predefinito) (nessuna espansione per «~») (remoto) (percorso di ricerca) file, impossibilità impossibilità nelle directory %lu. finora.# Un makefile predefinito, da MAKEFILES, o da -include/sinclude.# Inoltre, genera:# Regola incorporata# Obiettivo a riga di comando.# Dipendenze del set di istruzioni in esecuzione (QUESTO È UN BUG).# Aggiornamento non riuscito.# Il file non esiste.# Il file è stato aggiornato.# Il file non è stato aggiornato.# Il file è un prerequisito intermedio.# Il file è molto vecchio.# Regola di ricerca implicita completata.# Regola di ricerca implicita non completata.# Stem implicito/statico del modello: «%s» # Valore illecito nel membro "command_state"!# Ultima modifica %s # Ora di modifica mai controllata.# Richiede di essere aggiornato (-q è impostato).# Obiettivo "phony" (prerequisito di .PHONY).# File "precious" (prerequisito di .PRECIOUS).# Set di istruzioni attualmente in esecuzione (QUESTO È UN BUG).# Aggiornato con successo.# set di istruzioni da eseguire# %s (device %d, inode [%d,%d,%d]): # %s (device %d, inode [%d,%d,%d]) non può essere aperto. # %s (device %ld, inode %ld): # %s (device %ld, inode %ld) non può essere aperto. # %s (key %s, mtime %I64u): # %s (key %s, mtime %I64u) non può essere aperto. # %s: impossibile eseguire stat. # Non ci sono percorsi di ricerca 'vpath'.# Non è un obiettivo:# statistiche della tabella hash: # # statistiche tabella di hash del set di variabili: $SHELL cambiata (era «%s», adesso è «%s») %s (riga %d) contesto della shell errato (!unixy && !batch_mode_shell) %s buffer corrente: dimensione = %hu B / usato = %hu B / numero = %hu / media = %u B %s altra libera: totale = %lu B / max = %lu B / min = %lu B / media = %hu B %s altra usata: totale = %lu B / count = %lu / media = %lu B %s%s: %s%s: %s%s: ingresso in una directory sconosciuta %s: ingresso nella directory «%s» %s: Campo «%s» non memorizzato: %s%s: catturata una interruzione/eccezione (codice = 0x%lx, indirizzo = 0x%p) %s: uscita dalla directory sconosciuta %s: uscita dalla directory «%s» %s: intervallo errato per la marcatura temporale; sostituzione di %s%s: caricamento non riuscito%s: opzione illecita -- %c %s: opzione illecita -- %c %s: l'opzione «%c%s» non ammette argomenti %s: l'opzione «%s» è ambigua %s: l'opzione «%s» richiede un argomento %s: l'opzione «--%s» non ammette argomenti %s: l'opzione «-W %s» non ammette argomenti %s: l'opzione «-W %s» è ambigua %s: l'opzione richiede un argomento -- %c %s: l'obbiettivo «%s» non esiste%s: opzione «%c%s» sconosciuta %s: opzione «--%s» sconosciuta %s: aggiorna l'obbiettivo «%s» a causa di: %s%s: utente %lu (reale %lu), gruppo %lu (reale %lu) %sCompilato per %s %sCompilato per %s (%s) %s Licenza GPLv3+: GNU GPL versione 3 o successiva . %s Questo programma è software libero: siete liberi di modificarlo e ridistribuirlo. %s Non c'è ALCUNA GARANZIA, per quanto consentito dalle vigenti normative. %s Nessuna regola per generare l'obiettivo «%s»%s%s Nessuna regola per generare l'obiettivo «%s», necessario per «%s»%s%s[%s: %s] Errore %d%s%s[%u]: ingresso in una directory sconosciuta %s[%u]: ingresso nella directory «%s» %s[%u]: uscita dalla directory sconosciuta %s[%u]: uscita dalla directory «%s» «%s» è aggiornato.direttiva "override"*** Il membro di archivio «%s» potrebbe essere inesistente; non eliminato*** Interruzione. *** Eliminazione del file «%s»*** Eliminazione del file intermedio «%s»*** Attesa per i processi non terminati....*** Attenzione: il file .LOW_RESOLUTION_TIME «%s» ha una marcatura temporale ad alta risoluzione*** [%s] Il membro di archivio «%s» potrebbe essere inesistente; non eliminato*** [%s] Eliminazione del file «%s»*** regole implicite e normali miste: sintassi deprecata-O[TIPO] (--output-sync[=TIPO]) non è configurato per questa versione.-attenzione, potrebbe essere necessario riabilitare la gestione di CTRL+Y da DCL. . Arresto. .DEFAULT_GOAL contiene più di un obiettivol'elemento .LIBPATTERNS «%s» non è un modello; uso del nome VPATH «%s»AnnullatoViolazione accesso: operazione di lettura all'indirizzo 0x%p Violazione accesso: operazione di scrittura all'indirizzo 0x%p SvegliaAccoda %.*s e pulisce Accoda output a %s Evitata la ricorsione della regola implicita. BUG: num_pattern_rules è errato! %u != %uCD INTERNO %s Chiamata di sistema errataContenuti del file batch: @echo off Contenuti del file batch:%s %s Pipe interrottaErrore di busLimite di tempo CPU superatoImpossibile creare un file temporaneo Accesso processo figlioProcesso figlio uscitoDipendenza circolare %s <- %s scartata.Pulitura del file batch temporaneo %s Pulitura del file batch temporaneo %s non riuscita (%d) Pulitura del file batch temporaneo %s Collisioni=%lu/%lu=%.0f%%Considerato il file obiettivo «%s». ContinuatoImpossibile ripristinare lo standard error Impossibile ripristinare lo standard input Impossibile ripristinare lo standard output Impossibile ritornare alla directory originale.CreatePipe() non riuscita (e=%ld) Creazione del file batch temporaneo %s Ora correnteLe personalizzazioni non verranno esportate: %s DCL: %s Segnale di pericoloRilevato EMTNome della funzione vuotoNome del simbolo vuoto per il caricamento: %sVerrà invece eseguito %s Caricamento del simbolo %s da %s non riuscito: %sApertura della tabella dei simboli globale non riuscita: %sRiesecuzione del makefile «%s» non riuscita.Rigenerazione del file obiettivo «%s» non riuscita. Il file «%s» non esiste. Il file «%s» è già stato esaminato. Superato il limite di dimensione filePrerequisiti del file obiettivo «%s» terminati. Aggiornamento del file «%s» terminato. Co-processore a virgola mobile non disponibileEccezione in virgola mobileTrovata una regola implicita per «%s». Trovato il prerequisito «%s» come VPATH «%s» Nome della funzione troppo lungo: %sAbbandono sul file obiettivo «%s». ChiusuraI/O consentitoRilevato IOTIstruzione illecitaIl makefile «%s» incluso non è stato trovato.Richiesta informazioniAccesso inizializzatoInterruzioneNome della funzione non valido: %sNumero massimo di argomenti non sufficienti (%u) per la funzione %sNumero di argomenti non sufficienti (%u) per la funzione %sClient del jobserver (fds %d,%d) Client del jobserver (semaforo %s) Slot del jobserver limitati a %d UccisoProcesso figlio vivo %p (%s) con PID %s %s Carico=%lu/%lu=%.0f%%, L'oggetto caricato %s non è dichiarato compatibile con la licenza GPLCaricamento del simbolo %s da %s Ricerca di una regola con il file intermedio «%s». Ricerca di una regola implicita per «%s». Ricerca di una regola implicita per il membro di archivio per «%s». Accesso makeIl makefile «%s» potrebbe entrare in un ciclo all'infinito; make non rieseguito. Il makefile «%s» non è stato trovatoIl Makefile dallo standard input è stato specificato due volte.Generazione di «%s» a causa del flag "always-make". Definizione malformata della variabile specifica per l'obiettivoMembro «%s»%s: %ld byte a %ld (%ld). L'obiettivo «%s» deve essere rigenerato. NoNessuna regola implicita trovata per «%s». Non è necessario rigenerare l'obiettivo «%s»Nessun set di istruzioni per «%s» e nessun prerequisito effettivamente cambiato. Nessun obiettivoNessun obiettivo specificato e nessun makefile trovatoNessuna operazione da eseguire per «%s».Token ottenuto per il processo figlio %p (%s). Opzioni: I processi paralleli (-j) non sono supportati su questa piattaforma.Mancanza di alimentazione elettricaIl prerequisito «%s» è più nuovo di quello dell'obiettivo «%s». Il prerequisito «%s» è più vecchio di quello dell'obiettivo «%s». Il prerequisito «%s» è solo per l'obiettivo «%s». Il prerequisito «%s» dell'obiettivo «%s» non esiste. Timer di profiling terminatoPulizia del file «%s». Inserimento del processo figlio %p (%s) con PID %s%s nella catena di esecuzione. Uscita (con core dump)Riesecuzione[%u]:Lettura del makefile «%s»Lettura dei makefile... Interruzione del processo figlio perdente %p con PID %s %s Interruzione del processo figlio vincente %p con PID %s %s Tentativo recente di aggiornamento del file «%s» non riuscito. Il set di istruzioni per «%s» verrà ignorato in favore di quello per «%s».È stato trovato un set di istruzioni per il file «%s» mediante una regola di ricerca implicita,Il set di istruzioni ha troppe righe (%ud)Esecuzione del set di istruzioni per «%s» in corso. È stato specificato un set di istruzioni per il file «%s» a %s:%lu,La variabile ricorsiva «%s» si autoreferenzia (alla fine)Rehash=%u, Prerequisito implicito impossibile «%s» rifiutato. Prerequisito impossibile «%s» della regola rifiutato. Token rilasciato per il processo figlio %p (%s). Rimozione del processo figlio %p con PID %s%s dalla catena di esecuzione. Rimozione dei file intermedi... Segnalare i bug a Reimpostazione alla modalità a singolo processo (-j1).Risorsa persaSIGPHONESIGWINDErrore di segmentazioneUTF-8 BOM nel makefile «%s» saltato UTF-8 BOM nel makefile buffer saltato L'aggiornamento del file «%s» è ancora in corso. Fermato (da terminale)FermatoFermato (input tty)Fermato (output tty)File obiettivo «%s» rigenerato correttamente. Collegamenti simbolici non supportati: opzione -L disabilitata.L'obiettivo «%s» è "doppio due punti" e non ha alcun prerequisito. L'obiettivo «%s» non è stato rigenerato a causa di errori.Il file obiettivo «%s» necessita di essere rigenerato con l'opzione -q. TerminatoL'operazione «load» non è supportata su questa piattaforma.Generazione dei prerequisiti di «%s» in corso. Rilevato trace/breakpointTentativo di usare il prerequisito implicito «%s». Tentativo di usare la regola del modello con stem «%.*s». Tentativo di usare il prerequisito della regola «%s». Aggiornamento degli obiettivi.... Aggiornamento dei makefile.... Condizioni di I/O urgenteUso: %s [opzioni] [obiettivo] ... Accesso utenteSegnale 1 definito dall'utenteSegnale 2 definito dall'utenteUso dei comandi predefiniti per «%s». Uso del set di istruzioni predefinito per «%s». Timer virtuale terminatoAttenzione: il file «%s» ha un orario di modifica %s nel futuroFinestra modificatatentativo di usare una funzionalità non supportata: «%s»automaticoma ora «%s» viene considerato lo stesso file di «%s».impossibile allocare %lu byte per la tabella hash: memoria esauritaimpossibile rinominare la regola "doppio due punti" «%s» con la regola "due punti" «%s»impossibile rinominare la regola "due punti" «%s» con la regola "doppio due punti" «%s»impossibile far rispettare il limite di carico: impossibile far rispettare i limiti di carico su questo sistema operativochiusura: %s: %sriga di comandocreazione della pipe dei processicreazione del semaforo del jobserver: (Errore %ld: %s)predefinitobeffa della pipe dei processiuna stringa vuota non è valida come nome di filenome vuoto della variabileambienteambiente con l'opzione -e«%s» non pertinentetesto non pertinente dopo la direttiva «%s»testo non pertinente dopo la direttiva «define»testo non pertinente dopo la direttiva «endef»file: operazione sui file non valida: %sfile: file mancantefile: troppi argomentifind_and_set_shell() impostazione del percorso di ricerca default_shell = %s find_and_set_shell() impostazione default_shell = %s il primo argomento per la funzione "word" deve essere maggiore di 0fopen (file temporaneo)fwrite (file temporaneo)gli obbiettivi raggruppati devono fornire un set di istruzioniguile: Valutazione di «%s» guile: Espansione di «%s» inizializzazione nella pipe della modalità jobservernumero di argomenti non sufficienti (%d) per la funzione «%s»errore interno: stringa illecita per --jobserver-auth «%s»errore interno: impossibile aprire il semaforo del jobserver «%s»: (Errore %ld: %s)sintassi illecita nel condizionalejob server spentojobserver pipelinelbr$ini_control() non riuscita con lo stato = %dlbr$set_module() non è riuscita a estrarre informazioni sul modulo, stato = %dmake ha interrotto il processo figlio con pid %s, è ancora in attesa del processo con pid %s makefile«endef» mancante, «define» non terminato«endif» mancanteregola mancante prima del set di istruzioniseparatore mancanteseparatore mancante (si intendeva TAB invece di 8 spazi?)modello mancante per l'obiettivoregole implicite e normali misteregole del modello implicite e statiche mistemodelli multipli per l'obiettivononessun'altra gestione del file: impossibile duplicare lo standard error nessun'altra gestione del file: impossibile duplicare lo standard input nessun'altra gestione del file: impossibile duplicare lo standard output primo argomento non numerico per la funzione "word"primo argomento non numerico per la funzione "wordlist"secondo argomento non numerico per la funzione "wordlist"un solo «else» per condizionaleapertura: %s: %si prerequisiti non possono essere definiti nei set di istruzioniprocess_easy() non riuscita all'avvio del processo (e=%ld) pselect della pipe dei processilettura della pipe dei processilettura: %s: %sil set di istruzioni inizia prima del primo obiettivorilascio del semaforo del jobserver: (Errore %ld: %s)attendere semaforo o processo figlio (Errore %ld: %s)spawnvpe: lo spazio dell'ambiente potrebbe essere esauritosys$search() non riuscita con %d il «%s» dell'obiettivo non corrisponde al modello dell'obiettivo stessol'obiettivo «%s» è stato fornito più di una volta nella stessa regolail file dell'obiettivo «%s» contiene sia : che ::il modello dell'obiettivo non contiene alcun «%%»l'opzione «%s%s» richiede un argomento stringa non vuotol'opzione «-%c» richiede un argomento intero positivotouch del membro di archivio non disponibile su VMStouch: «%s» non è un archivio validotouch: l'archivio «%s» non esistetouch: codice di uscita errato da ar_member_touch su «%s»touch: il membro «%s» non esiste in «%s»impossibile aprire la libreria «%s» per cercare lo stato del membro «%d»non implementata su questa piattaforma: funzione «%s»livello di debug specificato sconosciuto «%s»tipo di output-sync (sincronizzazione dell'output) sconosciuto «%s»segnale sconosciutounlink (file temporaneo): chiamata non terminata alla funzione «%s»: «%c» mancanteriferimento alla variabile non terminatoattenzione: rilevato un tempo alterato. La creazione potrebbe essere incompleta.attenzione: -j%d forzata nel submake: disattivazione della modalità jobserver.attenzione: -j%d forzata nel submake: disattivazione della modalità jobserver.attenzione: è stato rilevato il carattere NUL; il resto della riga viene ignoratoattenzione: ignorato il set di istruzioni obsoleto per l'obiettivo «%s»attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla regola make superiore.attenzione: sovrascrittura dell'appartenente al gruppo per l'obiettivo «%s»attenzione: sovrascrittura del set di istruzioni per l'obiettivo «%s»attenzione: variabile «%.*s» non definitawindows32_openpipe(): process_init_fd() non riuscita windows32_open_pipe: DuplicateHandle(Err) non riuscita (e=%ld) windows32_openpipe: DuplicateHandle(In) non riuscita (e=%ld) errore in scrittura: stdoutscrittura del jobserverscrittura: %s: %smake-4.3/po/vi.po0000644000175000017500000017666313611136531010635 00000000000000# Vietnamese translation for Make. # 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 , 2006-2010. # Nguyá»…n Thái Ngá»c Duy , 2012. # Trần Ngá»c Quân , 2012-2014, 2016, 2020. # msgid "" msgstr "" "Project-Id-Version: make 4.2.93\n" "Report-Msgid-Bugs-To: bug-make@gnu.org\n" "POT-Creation-Date: 2020-01-19 15:34-0500\n" "PO-Revision-Date: 2020-01-04 15:04+0700\n" "Last-Translator: Trần Ngá»c Quân \n" "Language-Team: Vietnamese \n" "Language: vi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Language-Team-Website: \n" "X-Generator: Poedit 2.2.4\n" "X-Poedit-SourceCharset: UTF-8\n" #: src/ar.c:46 #, c-format msgid "attempt to use unsupported feature: '%s'" msgstr "đã dùng tính năng chưa được há»— trợ: “%sâ€" #: src/ar.c:123 #, c-format msgid "touch archive member is not available on VMS" msgstr "“touch†thành viên kho không có trên VMS" #: src/ar.c:147 #, c-format msgid "touch: Archive '%s' does not exist" msgstr "touch: Kho “%s†không tồn tại" #: src/ar.c:150 #, c-format msgid "touch: '%s' is not a valid archive" msgstr "touch: “%s†không phải là kho hợp lệ" #: src/ar.c:157 #, c-format msgid "touch: Member '%s' does not exist in '%s'" msgstr "touch: Thành viên “%s†không tồn tại trong “%sâ€" #: src/ar.c:164 #, c-format 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â€" #: src/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" #: src/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" #: src/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 “%dâ€" #: src/arscan.c:944 #, 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" #: src/arscan.c:945 msgid " (name might be truncated)" msgstr " (có lẽ tên đã bị cắt ngắn)" #: src/arscan.c:947 #, c-format msgid " Date %s" msgstr " Ngày %s" #: src/arscan.c:948 #, c-format msgid " uid = %d, gid = %d, mode = 0%o.\n" msgstr " uid = %d, gid = %d, chế độ = 0%o.\n" #: src/commands.c:403 #, c-format msgid "Recipe has too many lines (%ud)" msgstr "Công thức có quá nhiá»u dòng (%ud)" #: src/commands.c:504 msgid "*** Break.\n" msgstr "*** Ngắt.\n" #: src/commands.c:628 #, 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á»" #: src/commands.c:632 #, 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á»" #: src/commands.c:646 #, c-format msgid "*** [%s] Deleting file '%s'" msgstr "*** [%s] Äang xóa tập tin “%sâ€" #: src/commands.c:648 #, c-format msgid "*** Deleting file '%s'" msgstr "*** Äang xóa tập tin “%sâ€" #: src/commands.c:684 msgid "# recipe to execute" msgstr "# công thức cần thá»±c hiện" #: src/commands.c:687 msgid " (built-in):" msgstr " (dá»±ng-sẵn):" #: src/commands.c:689 #, c-format msgid " (from '%s', line %lu):\n" msgstr " (từ “%sâ€, dòng %lu):\n" #: src/dir.c:1073 msgid "" "\n" "# Directories\n" msgstr "" "\n" "# Thư mục\n" #: src/dir.c:1085 #, c-format msgid "# %s: could not be stat'd.\n" msgstr "# %s: không thể lấy thống kê.\n" #: src/dir.c:1089 msgid "# %s (key %s, mtime %I64u): could not be opened.\n" msgstr "# %s (khóa %s, mtime %I64u): không thể mở.\n" #: src/dir.c:1094 #, 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" #: src/dir.c:1099 #, 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" #: src/dir.c:1126 msgid "# %s (key %s, mtime %I64u): " msgstr "# %s (khóa %s, mtime %I64u): " #: src/dir.c:1131 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): " msgstr "# %s (thiết bị %d, inode [%d,%d,%d]): " #: src/dir.c:1136 #, c-format msgid "# %s (device %ld, inode %ld): " msgstr "# %s (thiết bị %ld, inode %ld): " #: src/dir.c:1142 src/dir.c:1163 msgid "No" msgstr "Không" #: src/dir.c:1145 src/dir.c:1166 msgid " files, " msgstr " tập tin, " #: src/dir.c:1147 src/dir.c:1168 msgid "no" msgstr "không" #: src/dir.c:1150 msgid " impossibilities" msgstr " việc không thể làm được" #: src/dir.c:1154 msgid " so far." msgstr " cho đến giá»." #: src/dir.c:1171 #, c-format msgid " impossibilities in %lu directories.\n" msgstr " việc không thể làm được trong %lu thư mục.\n" #: src/expand.c:125 #, c-format 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ó" #: src/expand.c:271 #, c-format msgid "unterminated variable reference" msgstr "tham chiếu biến chưa chấm dứt" #: src/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," #: src/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," #: src/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â€." #: src/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â€." #: src/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" #: src/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" #: src/file.c:408 #, c-format msgid "*** Deleting intermediate file '%s'" msgstr "*** Äang xóa tập tin trung gian “%sâ€" #: src/file.c:412 #, c-format msgid "Removing intermediate files...\n" msgstr "Xóa các tập tin trung gian…\n" #: src/file.c:872 msgid "Current time" msgstr "Giá» hiện tại" #: src/file.c:876 #, 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" #: src/file.c:1016 msgid "# Not a target:" msgstr "# Không phải là đích:" #: src/file.c:1021 msgid "# Precious file (prerequisite of .PRECIOUS)." msgstr "# Tập tin giá trị (Ä‘iá»u kiện tiên quyết cá»§a .PRECIOUS)." #: src/file.c:1023 msgid "# Phony target (prerequisite of .PHONY)." msgstr "# Äích giả (Ä‘iá»u kiện tiên quyết cá»§a .PHONY)." #: src/file.c:1025 msgid "# Command line target." msgstr "# Äích dòng lệnh." #: src/file.c:1027 msgid "# A default, MAKEFILES, or -include/sinclude makefile." msgstr "# Mặc định, MAKEFILES, hoặc makefile kiểu -include/sinclude." #: src/file.c:1029 msgid "# Builtin rule" msgstr "# Quy tắc dá»±ng sẵn" #: src/file.c:1031 msgid "# Implicit rule search has been done." msgstr "# Hoàn tất tìm quy tắc ngầm." #: src/file.c:1032 msgid "# Implicit rule search has not been done." msgstr "# Chưa hoàn tất tìm quy tắc ngầm." #: src/file.c:1034 #, c-format msgid "# Implicit/static pattern stem: '%s'\n" msgstr "# Cuống mẫu ngầm/tÄ©nh: “%sâ€\n" #: src/file.c:1036 msgid "# File is an intermediate prerequisite." msgstr "# Tập tin là má»™t Ä‘iá»u kiện tiên quyết trung gian." #: src/file.c:1040 msgid "# Also makes:" msgstr "# CÅ©ng tạo:" #: src/file.c:1046 msgid "# Modification time never checked." msgstr "# Chưa kiểm tra giá» sá»­a đổi." #: src/file.c:1048 msgid "# File does not exist." msgstr "# Tập tin không tồn tại." #: src/file.c:1050 msgid "# File is very old." msgstr "# Tập tin rất cÅ©." #: src/file.c:1055 #, c-format msgid "# Last modified %s\n" msgstr "# Lần sá»­a cuối cùng %s\n" #: src/file.c:1058 msgid "# File has been updated." msgstr "# Tập tin đã được cập nhật." #: src/file.c:1058 msgid "# File has not been updated." msgstr "# Tập tin chưa được cập nhật." #: src/file.c:1062 msgid "# Recipe currently running (THIS IS A BUG)." msgstr "# Công thức Ä‘ang chạy (ÄÂY LÀ MỘT Lá»–I)." #: src/file.c:1065 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)." #: src/file.c:1074 msgid "# Successfully updated." msgstr "# Cập nhật thành công." #: src/file.c:1078 msgid "# Needs to be updated (-q is set)." msgstr "# Cần được cập nhật (-q được đặt)." #: src/file.c:1081 msgid "# Failed to be updated." msgstr "# Gặp lá»—i khi cập nhật." #: src/file.c:1086 msgid "# Invalid value in 'command_state' member!" msgstr "# Gặp giá trị sai trong thành viên “command_stateâ€!" #: src/file.c:1105 msgid "" "\n" "# Files" msgstr "" "\n" "# Tập tin" #: src/file.c:1109 msgid "" "\n" "# files hash-table stats:\n" "# " msgstr "" "\n" "# thống kê bảng băm tập tin:\n" "# " #: src/file.c:1119 #, c-format msgid "%s: Field '%s' not cached: %s" msgstr "%s: Trưá»ng “%s†chưa được nhá»› đệm: %s" #: src/function.c:794 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â€" #: src/function.c:799 #, c-format 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" #: src/function.c:819 msgid "non-numeric first argument to 'wordlist' function" msgstr "đối số thứ nhất không phải số cho hàm “wordlistâ€" #: src/function.c:821 msgid "non-numeric second argument to 'wordlist' function" msgstr "đối số thứ hai không phải số cho hàm “wordlistâ€" #: src/function.c:1533 #, c-format msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n" msgstr "windows32_openpipe: DuplicateHandle(In) gặp lá»—i (e=%ld)\n" #: src/function.c:1557 #, c-format msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n" msgstr "windows32_openpipe: DuplicateHandle(Err) gặp lá»—i (e=%ld)\n" #: src/function.c:1564 #, c-format msgid "CreatePipe() failed (e=%ld)\n" msgstr "CreatePipe() bị lá»—i (e=%ld)\n" #: src/function.c:1572 #, c-format msgid "windows32_openpipe(): process_init_fd() failed\n" msgstr "windows32_openpipe(): process_init_fd() gặp lá»—i\n" #: src/function.c:1857 #, c-format msgid "Cleaning up temporary batch file %s\n" msgstr "Dá»n dẹp tập tin bó tạm %s\n" #: src/function.c:2230 src/function.c:2255 #, c-format msgid "file: missing filename" msgstr "file: thiết tên tập tin" # Variable: do not translate/ biến: đừng dịch #: src/function.c:2234 src/function.c:2265 #, c-format msgid "open: %s: %s" msgstr "mở: %s: %s" #: src/function.c:2242 #, c-format msgid "write: %s: %s" msgstr "ghi: %s: %s" # Variable: do not translate/ biến: đừng dịch #: src/function.c:2245 src/function.c:2282 #, c-format msgid "close: %s: %s" msgstr "đóng: %s: %s" #: src/function.c:2258 #, c-format msgid "file: too many arguments" msgstr "file: quá ít đối số" #: src/function.c:2277 #, c-format msgid "read: %s: %s" msgstr "read: %s: %s" #: src/function.c:2290 #, c-format msgid "file: invalid file operation: %s" msgstr "tập tin: Thao tác tập tin không hợp lệ: %s" #: src/function.c:2405 #, c-format msgid "insufficient number of arguments (%d) to function '%s'" msgstr "không đủ số đối số (%d) cho hàm “%sâ€" #: src/function.c:2417 #, 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â€" #: src/function.c:2483 #, 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â€" #: src/function.c:2667 #, c-format msgid "Empty function name" msgstr "Tên hàm trống rá»—ng" #: src/function.c:2669 #, c-format msgid "Invalid function name: %s" msgstr "Tên hàm không hợp lệ: %s" #: src/function.c:2671 #, c-format msgid "Function name too long: %s" msgstr "Tên hàm quá dài: %s" #: src/function.c:2674 #, c-format msgid "Invalid minimum argument count (%u) for function %s" msgstr "Số lượng đối số tối thiểu (%u) là không hợp lệ cho hàm “%sâ€" #: src/function.c:2677 #, c-format msgid "Invalid maximum argument count (%u) for function %s" msgstr "Số lượng đối số tối Ä‘a (%u) là không hợp lệ cho hàm “%sâ€" #: src/getopt.c:659 #, c-format msgid "%s: option '%s' is ambiguous\n" msgstr "%s: tùy chá»n “%s†chưa rõ ràng\n" #: src/getopt.c:683 #, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s: tùy chá»n “--%s†không nhận đối số\n" #: src/getopt.c:688 #, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s: tùy chá»n “%c%s†không nhận đối số\n" #: src/getopt.c:705 src/getopt.c:878 #, c-format msgid "%s: option '%s' requires an argument\n" msgstr "%s: tùy chá»n “%s†cần má»™t đối số\n" #: src/getopt.c:734 #, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s: không nhận ra tùy chá»n “--%sâ€\n" #: src/getopt.c:738 #, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s: không nhận ra tùy chá»n “%c%sâ€\n" #: src/getopt.c:764 #, c-format msgid "%s: illegal option -- %c\n" msgstr "%s: tùy chá»n không hợp lệ -- %c\n" #: src/getopt.c:767 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s: tùy chá»n không hợp lệ -- %c\n" #: src/getopt.c:797 src/getopt.c:927 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: tùy chá»n cần má»™t đối số -- %c\n" #: src/getopt.c:844 #, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s: tùy chá»n “-W %s†chưa rõ ràng\n" #: src/getopt.c:862 #, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s: tùy chá»n “-W %s†không nhận má»™t đối số\n" #: src/guile.c:58 #, c-format msgid "guile: Expanding '%s'\n" msgstr "guile: Äang khai triển “%sâ€\n" #: src/guile.c:74 #, c-format msgid "guile: Evaluating '%s'\n" msgstr "guile: Äang định giá “%sâ€\n" #: src/hash.c:50 #, c-format msgid "can't allocate %lu bytes for hash table: memory exhausted" msgstr "không thể cấp phát %lu byte cho bảng băm: hết bá»™ nhá»›" #: src/hash.c:280 #, c-format msgid "Load=%lu/%lu=%.0f%%, " msgstr "Tải =%lu/%lu=%.0f%%, " #: src/hash.c:282 #, c-format msgid "Rehash=%u, " msgstr "Băm lại=%u, " #: src/hash.c:283 #, c-format msgid "Collisions=%lu/%lu=%.0f%%" msgstr "Xung đột =%lu/%lu=%.0f%%" #: src/implicit.c:38 #, c-format msgid "Looking for an implicit rule for '%s'.\n" msgstr "Tìm quy tắc ngầm cho “%sâ€.\n" #: src/implicit.c:54 #, c-format 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" #: src/implicit.c:311 #, c-format msgid "Avoiding implicit rule recursion.\n" msgstr "Tránh quy tắc ngầm đệ quy.\n" #: src/implicit.c:484 #, c-format msgid "Stem too long: '%s%.*s'.\n" msgstr "Stem quá dài: “%s%.*sâ€.\n" #: src/implicit.c:490 #, c-format msgid "Trying pattern rule with stem '%.*s'.\n" msgstr "Thá»­ quy tắc mẫu vá»›i cuống “%.*sâ€.\n" #: src/implicit.c:717 #, c-format msgid "Rejecting impossible rule prerequisite '%s'.\n" msgstr "Từ chối Ä‘iá»u kiện tiên quyết không thể thá»a “%sâ€.\n" #: src/implicit.c:718 #, c-format msgid "Rejecting impossible implicit prerequisite '%s'.\n" msgstr "Từ chối Ä‘iá»u kiện tiên quyết ngầm không thể “%sâ€.\n" #: src/implicit.c:732 #, c-format msgid "Trying rule prerequisite '%s'.\n" msgstr "Thá»­ Ä‘iá»u kiện tiên quyết quy tắc “%sâ€.\n" #: src/implicit.c:733 #, c-format msgid "Trying implicit prerequisite '%s'.\n" msgstr "Thá»­ Ä‘iá»u kiện tiên quyết ngầm “%sâ€.\n" #: src/implicit.c:772 #, c-format msgid "Found prerequisite '%s' as VPATH '%s'\n" msgstr "Tìm thấy Ä‘iá»u kiện tiên quyết “%s†làm VPATH “%sâ€\n" #: src/implicit.c:786 #, c-format msgid "Looking for a rule with intermediate file '%s'.\n" msgstr "Tìm quy tắc có tập tin trung gian “%sâ€.\n" #: src/job.c:370 msgid "Cannot create a temporary file\n" msgstr "Không thể tạo tập tin tạm\n" #: src/job.c:548 msgid " (core dumped)" msgstr " (đổ lõi)" #: src/job.c:553 msgid " (ignored)" msgstr " (bá» qua)" #: src/job.c:557 src/job.c:1892 msgid "" msgstr "" #: src/job.c:573 #, c-format msgid "%s[%s: %s] Error %d%s" msgstr "%s[%s: %s] Lá»—i %d%s" #: src/job.c:662 #, c-format msgid "*** Waiting for unfinished jobs...." msgstr "*** Äang đợi những công việc chưa hoàn tất…" #: src/job.c:704 #, 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" #: src/job.c:706 src/job.c:900 src/job.c:1072 src/job.c:1644 #, c-format msgid " (remote)" msgstr " (máy chá»§)" #: src/job.c:898 #, 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" #: src/job.c:899 #, 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" #: src/job.c:950 #, c-format msgid "Cleaning up temp batch file %s\n" msgstr "Dá»n dẹp tập tin bó tạm %s\n" #: src/job.c:956 #, 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" #: src/job.c:1071 #, 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" #: src/job.c:1120 #, 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" #: src/job.c:1575 src/job.c:2487 #, 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" #: src/job.c:1579 src/job.c:2491 #, c-format msgid "" "\n" "Counted %d args in failed launch\n" msgstr "" "\n" "Äếm được %d đối số trong lần khởi chạy bị lá»—i\n" #: src/job.c:1642 #, 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" #: src/job.c:1875 #, c-format msgid "Obtained token for child %p (%s).\n" msgstr "Äã lấy thẻ bài cho Ä‘iá»u con %p (%s).\n" #: src/job.c:1902 #, c-format msgid "%s: target '%s' does not exist" msgstr "%s: đích “%s†không tồn tại" #: src/job.c:1905 #, c-format msgid "%s: update target '%s' due to: %s" msgstr "%s: cập nhật đích “%sâ€, cần bởi: %s" #: src/job.c:2108 #, c-format 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" #: src/job.c:2110 msgid "cannot enforce load limit: " msgstr "không thể buá»™c giá»›i hạn tải: " #: src/job.c:2200 #, c-format 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" #: src/job.c:2212 #, c-format 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" #: src/job.c:2226 #, c-format 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" #: src/job.c:2241 #, c-format msgid "Could not restore stdin\n" msgstr "Không thể phục hồi đầu vào chuẩn\n" #: src/job.c:2249 #, c-format msgid "Could not restore stdout\n" msgstr "Không thể phục hồi đầu ra chuẩn\n" #: src/job.c:2257 #, c-format msgid "Could not restore stderr\n" msgstr "Không thể phục hồi đầu ra lá»—i tiêu chuẩn\n" #: src/job.c:2520 #, 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" #: src/job.c:2623 #, c-format msgid "spawnvpe: environment space might be exhausted" msgstr "spawnvpe: cạn không gian dành cho biến môi trưá»ng" #: src/job.c:2862 #, c-format msgid "$SHELL changed (was '%s', now '%s')\n" msgstr "$SHELL thay đổi (trước là “%sâ€, giá» là “%sâ€)\n" #: src/job.c:3300 src/job.c:3485 #, c-format msgid "Creating temporary batch file %s\n" msgstr "Tạo tập tin bó lệnh tạm: %s\n" #: src/job.c:3308 #, c-format msgid "" "Batch file contents:\n" "\t@echo off\n" msgstr "" "Ná»™i dung tập tin bó lệnh:\n" "\t@echo off\n" #: src/job.c:3497 #, c-format msgid "" "Batch file contents:%s\n" "\t%s\n" msgstr "" "Ná»™i dung tập tin bó lệnh:%s\n" "\t%s\n" #: src/job.c:3605 #, 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" #: src/load.c:60 #, c-format msgid "Failed to open global symbol table: %s" msgstr "Gặp lá»—i khi mở bảng ký hiệu toàn cục: %s" #: src/load.c:97 #, c-format msgid "Loaded object %s is not declared to be GPL compatible" msgstr "Äối tượng %s đã được tải không được công bố là tương thích GPL" #: src/load.c:104 #, c-format msgid "Failed to load symbol %s from %s: %s" msgstr "Gặp lá»—i khi tải ký hiệu %s từ %s: %s" #: src/load.c:149 #, c-format msgid "Empty symbol name for load: %s" msgstr "Tên ký hiệu là trống rá»—ng cho việc tải: %s" #: src/load.c:204 #, c-format msgid "Loading symbol %s from %s\n" msgstr "Äang tải ký hiệu %s từ %s\n" #: src/load.c:256 #, c-format 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." #: src/main.c:335 msgid "Options:\n" msgstr "Tùy chá»n:\n" #: src/main.c:336 msgid " -b, -m Ignored for compatibility.\n" msgstr " -b, -m Bá» qua để tương thích.\n" #: src/main.c:338 msgid " -B, --always-make Unconditionally make all targets.\n" msgstr " -B, --always-make Tạo má»i đích vô Ä‘iá»u kiện.\n" #: src/main.c:340 msgid "" " -C DIRECTORY, --directory=DIRECTORY\n" " Change to DIRECTORY before doing anything.\n" msgstr "" " -C THƯ_MỤC, --directory=THƯ_MỤC\n" " Chuyển sang THƯ MỤC này trước khi làm.\n" #: src/main.c:343 msgid " -d Print lots of debugging information.\n" msgstr " -d In rất nhiá»u thông tin gỡ rối.\n" #: src/main.c:345 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" #: src/main.c:347 msgid "" " -e, --environment-overrides\n" " Environment variables override makefiles.\n" msgstr "" " -e, --environment-overrides\n" " Biến môi trưá»ng đè tập tin makefile.\n" #: src/main.c:350 msgid "" " -E STRING, --eval=STRING Evaluate STRING as a makefile statement.\n" msgstr "" " -E STRING, --eval=CHUá»–I Äịnh lượng CHUá»–I như má»™t lệnh makefile.\n" #: src/main.c:352 msgid "" " -f FILE, --file=FILE, --makefile=FILE\n" " Read FILE as a makefile.\n" msgstr "" " -f TẬP-TIN, --file=TẬP-TIN, --makefile=TẬP-TIN\n" " Äá»c TẬP-TIN dạng makefile.\n" #: src/main.c:355 msgid " -h, --help Print this message and exit.\n" msgstr " -h, --help Hiển thị trợ giúp này và thoát.\n" #: src/main.c:357 msgid " -i, --ignore-errors Ignore errors from recipes.\n" msgstr " -i, --ignore-errors Bá» qua lá»—i từ công thức.\n" #: src/main.c:359 msgid "" " -I DIRECTORY, --include-dir=DIRECTORY\n" " Search DIRECTORY for included makefiles.\n" msgstr "" " -I THƯ_MỤC, --include-dir=THƯ_MỤC\n" " Quét THƯ-MỤC này tìm makefile con.\n" #: src/main.c:362 msgid "" " -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no " "arg.\n" 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" #: src/main.c:364 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" #: src/main.c:366 msgid "" " -l [N], --load-average[=N], --max-load[=N]\n" " Don't start multiple jobs unless load is below " "N.\n" 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" #: src/main.c:369 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" #: src/main.c:371 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" " Không chạy công thức; chỉ in chúng ra.\n" #: src/main.c:374 msgid "" " -o FILE, --old-file=FILE, --assume-old=FILE\n" " Consider FILE to be very old and don't remake " "it.\n" 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" #: src/main.c:377 msgid "" " -O[TYPE], --output-sync[=TYPE]\n" " Synchronize output of parallel jobs by TYPE.\n" msgstr "" " -O[KIỂU], --output-sync[=KIỂU]\n" " Äồng bá»™ hóa kết xuất công việc song song theo " "KIỂU.\n" #: src/main.c:380 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" #: src/main.c:382 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" #: src/main.c:384 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" #: src/main.c:386 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" #: src/main.c:388 msgid " -s, --silent, --quiet Don't echo recipes.\n" msgstr " -s, --silent, --quiet Không in lại công thức.\n" #: src/main.c:390 msgid " --no-silent Echo recipes (disable --silent mode).\n" msgstr " --no-silent In ra công thức (tắt chế độ --silent).\n" #: src/main.c:392 msgid "" " -S, --no-keep-going, --stop\n" " Turns off -k.\n" msgstr "" " -S, --no-keep-going, --stop\n" " Tắt -k.\n" #: src/main.c:395 msgid " -t, --touch Touch targets instead of remaking them.\n" msgstr " -t, --touch Chạm đích thay vì tạo lại.\n" #: src/main.c:397 msgid " --trace Print tracing information.\n" msgstr " --trace Hiển thị thông tin dấu vết.\n" #: src/main.c:399 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" #: src/main.c:401 msgid " -w, --print-directory Print the current directory.\n" msgstr " -w, --print-directory Hiển thị thư mục hiện thá»i.\n" #: src/main.c:403 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" #: src/main.c:405 msgid "" " -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n" " Consider FILE to be infinitely new.\n" 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" #: src/main.c:408 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" #: src/main.c:671 #, c-format msgid "empty string invalid as file name" msgstr "chuá»—i rá»—ng không hợp lệ làm tên tập tin" #: src/main.c:754 #, c-format msgid "unknown debug level specification '%s'" msgstr "không hiểu đặc tả cấp gỡ rối “%sâ€" #: src/main.c:794 #, c-format msgid "unknown output-sync type '%s'" msgstr "không hiểu kiểu output-sync “%sâ€" #: src/main.c:849 #, 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" #: src/main.c:856 #, c-format msgid "" "\n" "Unhandled exception filter called from program %s\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" msgstr "" "\n" "Bá»™ lá»c ngoại lệ không quản lý được gá»i từ chương trình %s\n" "ExceptionCode (mã ngoại lệ) = %lx\n" "ExceptionFlags (các cá» ngoại lệ) = %lx\n" "ExceptionAddress (địa chỉ ngoại lệ) = 0x%p\n" #: src/main.c:864 #, 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" #: src/main.c:865 #, 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" #: src/main.c:941 src/main.c:956 #, c-format msgid "find_and_set_shell() setting default_shell = %s\n" msgstr "find_and_set_shell() Ä‘ang đặt default_shell = %s\n" #: src/main.c:1009 #, 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" #: src/main.c:1609 #, c-format 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." #: src/main.c:1617 #, c-format msgid "warning: -j%d forced in submake: resetting jobserver mode." msgstr "" "cảnh báo: -j%d bị ép buá»™c trong make con: Ä‘ang đặt lại chế độ jobserver." #: src/main.c:1781 #, c-format msgid "Makefile from standard input specified twice." msgstr "Tập tin makefile từ đầu vào chuẩn được ghi hai lần." #: src/main.c:1819 src/vmsjobs.c:1248 msgid "fopen (temporary file)" msgstr "fopen (tập tin tạm)" #: src/main.c:1825 msgid "fwrite (temporary file)" msgstr "fwrite (tập tin tạm)" #: src/main.c:2004 #, c-format msgid "warning: -j%d forced in makefile: resetting jobserver mode." msgstr "" "cảnh báo: -j%d bị ép buá»™c trong make con: Ä‘ang đặt lại chế độ jobserver." #: src/main.c:2068 #, c-format 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." #: src/main.c:2069 #, c-format msgid "Resetting to single job (-j1) mode." msgstr "Äặt lại thành chế độ công việc đơn (-j1)." #: src/main.c:2109 #, c-format msgid "Symbolic links not supported: disabling -L." msgstr "Không há»— trợ liên kết má»m: tắt -L." #: src/main.c:2190 #, c-format msgid "Updating makefiles....\n" msgstr "Cập nhật makefile…\n" #: src/main.c:2226 #, 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" #: src/main.c:2303 #, c-format msgid "Failed to remake makefile '%s'." msgstr "Gặp lá»—i khi làm lại makefile “%sâ€." #: src/main.c:2323 #, c-format msgid "Included makefile '%s' was not found." msgstr "Không tìm thấy makefile bao gồm “%sâ€." #: src/main.c:2328 #, c-format msgid "Makefile '%s' was not found" msgstr "Không tìm thấy makefile “%sâ€" #: src/main.c:2394 #, c-format msgid "Couldn't change back to original directory." msgstr "Không thể chuyển vá» thư mục gốc." #: src/main.c:2402 #, c-format msgid "Re-executing[%u]:" msgstr "Thá»±c hiện lại[%u]:" #: src/main.c:2522 msgid "unlink (temporary file): " msgstr "unlink (bá» liên kết tập tin tạm): " #: src/main.c:2555 #, c-format msgid ".DEFAULT_GOAL contains more than one target" msgstr ".DEFAULT_GOAL chứa nhiá»u đích" #: src/main.c:2579 #, c-format msgid "No targets" msgstr "Không có đích" #: src/main.c:2581 #, c-format msgid "No targets specified and no makefile found" msgstr "Chưa chỉ định đích, và không tìm thấy makefile" #: src/main.c:2586 #, c-format msgid "Updating goal targets....\n" msgstr "Äang cập nhật đích mong muốn…\n" #: src/main.c:2610 #, c-format 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." #: src/main.c:2804 #, c-format msgid "Usage: %s [options] [target] ...\n" msgstr "Cách dùng: %s [các_tùy_chá»n] [đích] …\n" #: src/main.c:2810 #, c-format msgid "" "\n" "This program built for %s\n" msgstr "" "\n" "Chương trình này đã được dịch cho %s\n" #: src/main.c:2812 #, c-format msgid "" "\n" "This program built for %s (%s)\n" msgstr "" "\n" "Chương trình này đã được dịch cho %s (%s)\n" #: src/main.c:2815 #, c-format msgid "Report bugs to \n" msgstr "" "Hãy thông báo lá»—i cho \n" "Hãy thông báo lá»—i dịch cho .\n" #: src/main.c:2901 #, 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" #: src/main.c:2965 #, 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" #: src/main.c:3363 #, c-format msgid "%sBuilt for %s\n" msgstr "%sÄÆ°á»£c biên dịch cho %s\n" #: src/main.c:3365 #, c-format msgid "%sBuilt for %s (%s)\n" msgstr "%sÄÆ°á»£c biên dịch cho %s (%s)\n" #: src/main.c:3376 #, c-format msgid "" "%sLicense GPLv3+: GNU GPL version 3 or later \n" "%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 "" "%sGiấy phép GPL pb3+: Giấy phép Công cá»™ng GNU phiên bản 3 hay sau \n" "%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" #: src/main.c:3397 #, c-format msgid "" "\n" "# Make data base, printed on %s" msgstr "" "\n" "# CÆ¡ sở dữ liệu Make, in lúc %s" #: src/main.c:3407 #, c-format msgid "" "\n" "# Finished Make data base on %s\n" msgstr "" "\n" "# Hoàn tất cÆ¡ sở dữ liệu Make lúc %s\n" #: src/misc.c:643 #, 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" #: src/misc.c:664 msgid "Initialized access" msgstr "Truy cập đã được khởi tạo" #: src/misc.c:743 msgid "User access" msgstr "Truy cập ngưá»i dùng" #: src/misc.c:791 msgid "Make access" msgstr "Truy cập Make" #: src/misc.c:825 msgid "Child access" msgstr "Truy cập con" #: src/output.c:97 #, c-format msgid "%s: Entering an unknown directory\n" msgstr "%s: Vào thư mục lạ\n" #: src/output.c:99 #, c-format msgid "%s: Leaving an unknown directory\n" msgstr "%s: Rá»i khá»i thư mục lạ\n" #: src/output.c:102 #, c-format msgid "%s: Entering directory '%s'\n" msgstr "%s: Vào thư mục “%sâ€\n" #: src/output.c:104 #, c-format msgid "%s: Leaving directory '%s'\n" msgstr "%s: Rá»i thư mục “%sâ€\n" #: src/output.c:108 #, c-format msgid "%s[%u]: Entering an unknown directory\n" msgstr "%s[%u]: Vào thư mục chưa biết\n" #: src/output.c:110 #, c-format msgid "%s[%u]: Leaving an unknown directory\n" msgstr "%s[%u]: Rá»i khá»i thư mục lạ\n" #: src/output.c:113 #, c-format msgid "%s[%u]: Entering directory '%s'\n" msgstr "%s[%u]: Vào thư mục “%sâ€\n" #: src/output.c:115 #, c-format msgid "%s[%u]: Leaving directory '%s'\n" msgstr "%s[%u]: Rá»i khá»i thư mục “%sâ€\n" #: src/output.c:442 src/output.c:444 #, c-format msgid "write error: stdout" msgstr "lá»—i ghi: đầu ra tiêu chuẩn" #: src/output.c:624 msgid ". Stop.\n" msgstr ". Dừng.\n" # Variable: don't translate / Biến: đừng dịch #: src/output.c:658 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" # Variable: do not translate/ biến: đừng dịch #: src/output.c:667 #, c-format msgid "%s: %s" msgstr "%s: %s" #: src/output.h:62 #, c-format msgid "-O[TYPE] (--output-sync[=TYPE]) is not configured for this build." msgstr "-O[KIỂU] (--output-sync[=KIỂU]) chưa được cấu hình cho lần dịch này." #: src/posixos.c:90 msgid "creating jobs pipe" msgstr "tạo ống dẫn công việc" #: src/posixos.c:98 src/posixos.c:251 msgid "duping jobs pipe" msgstr "nhân bản ống dẫn công việc" #: src/posixos.c:104 msgid "init jobserver pipe" msgstr "khởi tạo đưá»ng ống “jobserverâ€" #: src/posixos.c:119 #, 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ệ" #: src/posixos.c:122 #, c-format msgid "Jobserver client (fds %d,%d)\n" msgstr "Ứng dụng khách jobserver (fds %d,%d)\n" #: src/posixos.c:138 msgid "jobserver pipeline" msgstr "đưá»ng ống “jobserverâ€" #: src/posixos.c:186 msgid "write jobserver" msgstr "ghi lại trình phục vụ công việc" #: src/posixos.c:300 #, c-format msgid "job server shut down" msgstr "tắt máy phục vụ công việc" #: src/posixos.c:303 msgid "pselect jobs pipe" msgstr "pselect (chá»n tiến trình?) ống dẫn công việc" #: src/posixos.c:319 src/posixos.c:433 msgid "read jobs pipe" msgstr "Ä‘á»c ống dẫn công việc" #: src/read.c:181 #, c-format msgid "Reading makefiles...\n" msgstr "Äang Ä‘á»c makefile…\n" #: src/read.c:336 #, c-format msgid "Reading makefile '%s'" msgstr "Äang Ä‘á»c makefile “%sâ€" #: src/read.c:338 #, c-format msgid " (no default goal)" msgstr " (không có mục đích mặc định)" #: src/read.c:340 #, c-format msgid " (search path)" msgstr " (đưá»ng dẫn tìm kiếm)" #: src/read.c:342 #, c-format msgid " (don't care)" msgstr " (không quan tâm)" #: src/read.c:344 #, c-format msgid " (no ~ expansion)" msgstr " (không nối thêm ~)" #: src/read.c:655 #, c-format msgid "Skipping UTF-8 BOM in makefile '%s'\n" msgstr "Bá» qua “UTF-8 BOM†trong makefile “%sâ€\n" #: src/read.c:658 #, c-format msgid "Skipping UTF-8 BOM in makefile buffer\n" msgstr "Bá» qua “UTF-8 BOM†trong bá»™ đệm cá»§a tập tin makefile\n" #: src/read.c:787 #, c-format msgid "invalid syntax in conditional" msgstr "cú pháp không hợp lệ trong biểu thức Ä‘iá»u kiện" #: src/read.c:960 #, c-format msgid "%s: failed to load" msgstr "%s: gặp lá»—i khi tải" #: src/read.c:986 #, c-format msgid "recipe commences before first target" msgstr "công thức bắt đầu trước đích thứ nhất" #: src/read.c:1035 #, c-format msgid "missing rule before recipe" msgstr "thiếu quy tắc trước công thức" #: src/read.c:1136 #, c-format msgid "missing separator (did you mean TAB instead of 8 spaces?)" 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?)" #: src/read.c:1138 #, c-format msgid "missing separator" msgstr "thiếu dấu phân cách" #: src/read.c:1283 #, c-format msgid "missing target pattern" msgstr "thiếu mẫu đích" #: src/read.c:1285 #, c-format msgid "multiple target patterns" msgstr "nhiá»u mẫu đích" #: src/read.c:1289 #, c-format msgid "target pattern contains no '%%'" msgstr "mẫu đích không chứa “%%â€" #: src/read.c:1404 #, c-format msgid "missing 'endif'" msgstr "thiếu chỉ thị “endifâ€" #: src/read.c:1443 src/read.c:1488 src/variable.c:1600 #, c-format msgid "empty variable name" msgstr "tên biến rá»—ng" #: src/read.c:1478 #, c-format msgid "extraneous text after 'define' directive" msgstr "gặp các ký tá»± thừa đằng sau chỉ thị “defineâ€" #: src/read.c:1503 #, c-format msgid "missing 'endef', unterminated 'define'" msgstr "thiếu “endefâ€, chỉ thị “define†chưa hoàn thiện" #: src/read.c:1531 #, c-format msgid "extraneous text after 'endef' directive" msgstr "gặp các ký tá»± thừa đằng sau chỉ thị “endefâ€" #: src/read.c:1603 #, c-format msgid "extraneous text after '%s' directive" msgstr "gặp các ký tá»± thừa đằng sau chỉ thị “%sâ€" #: src/read.c:1604 #, c-format msgid "extraneous '%s'" msgstr "gặp “%s†thừa" #: src/read.c:1632 #, c-format 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" #: src/read.c:1908 #, c-format msgid "Malformed target-specific variable definition" msgstr "Äịnh nghÄ©a biến đích riêng biệt bị há»ng" #: src/read.c:1968 #, c-format 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" #: src/read.c:1986 #, c-format msgid "grouped targets must provide a recipe" msgstr "các đích đã nhóm phải cung cấp má»™t công thức" #: src/read.c:2029 #, c-format msgid "mixed implicit and static pattern rules" msgstr "trá»™n lẫn quy tắc ngầm và mẫu tÄ©nh" #: src/read.c:2052 #, c-format msgid "mixed implicit and normal rules" msgstr "trá»™n quy tắc ngầm và thưá»ng" #: src/read.c:2107 #, c-format msgid "target '%s' doesn't match the target pattern" msgstr "đích “%s†không tương ứng vá»›i mẫu đích" #: src/read.c:2122 src/read.c:2168 #, c-format msgid "target file '%s' has both : and :: entries" msgstr "tập tin đích “%s†có cả hai hạng mục : và ::" #: src/read.c:2128 #, 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" #: src/read.c:2138 #, c-format msgid "warning: overriding recipe for target '%s'" msgstr "cảnh báo: đè công thức cho đích “%sâ€" #: src/read.c:2141 #, 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â€" #: src/read.c:2254 #, c-format msgid "*** mixed implicit and normal rules: deprecated syntax" msgstr "*** trá»™n quy tắc ngầm và thưá»ng: cú pháp này đã lạc hậu" #: src/read.c:2271 #, c-format msgid "warning: overriding group membership for target '%s'" msgstr "cảnh báo: đè thành viên nhóm cho đích “%sâ€" #: src/read.c:2636 #, c-format 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" #: src/remake.c:226 #, c-format msgid "Nothing to be done for '%s'." msgstr "Không cần làm gì cho “%sâ€." #: src/remake.c:227 #, c-format msgid "'%s' is up to date." msgstr "“%s†đã cập nhật rồi." #: src/remake.c:323 #, c-format msgid "Pruning file '%s'.\n" msgstr "Xén bá»›t tập tin “%sâ€.\n" #: src/remake.c:389 #, 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" #: src/remake.c:399 #, c-format msgid "%sNo rule to make target '%s'%s" msgstr "%sKhông có quy tắc để tạo đích “%sâ€%s" #: src/remake.c:425 #, c-format msgid "Considering target file '%s'.\n" msgstr "Coi tập tin đích “%sâ€.\n" #: src/remake.c:432 #, 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" #: src/remake.c:444 #, c-format msgid "File '%s' was considered already.\n" msgstr "Coi tập tin “%s†là đã sẵn có rồi.\n" #: src/remake.c:454 #, c-format msgid "Still updating file '%s'.\n" msgstr "Vẫn Ä‘ang cập nhật tập tin “%sâ€.\n" #: src/remake.c:457 #, c-format msgid "Finished updating file '%s'.\n" msgstr "Hoàn tất cập nhật tập tin “%sâ€.\n" #: src/remake.c:486 #, c-format msgid "File '%s' does not exist.\n" msgstr "Tập tin “%s†không tồn tại.\n" #: src/remake.c:494 #, c-format msgid "" "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp" msgstr "" "*** Cảnh báo: tập tin .LOW_RESOLUTION_TIME “%s†có nhãn thá»i gian độ phân " "giải cao" #: src/remake.c:507 src/remake.c:1039 #, c-format msgid "Found an implicit rule for '%s'.\n" msgstr "Tìm thấy quy tắc ngầm cho “%sâ€.\n" #: src/remake.c:509 src/remake.c:1041 #, 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" #: src/remake.c:515 #, c-format msgid "Using default recipe for '%s'.\n" msgstr "Dùng công thức mặc định cho “%sâ€.\n" #: src/remake.c:549 src/remake.c:1088 #, c-format msgid "Circular %s <- %s dependency dropped." msgstr "Bá» phụ thuá»™c vòng tròn %s <- %s." #: src/remake.c:674 #, 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" #: src/remake.c:680 #, 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" #: src/remake.c:694 #, c-format msgid "Giving up on target file '%s'.\n" msgstr "Chịu thua tập tin đích “%sâ€.\n" #: src/remake.c:699 #, c-format msgid "Target '%s' not remade because of errors." msgstr "Äích “%s†không được tạo lại do lá»—i." #: src/remake.c:751 #, 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" #: src/remake.c:756 #, 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" #: src/remake.c:761 #, 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" #: src/remake.c:764 #, 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" #: src/remake.c:782 #, 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" #: src/remake.c:789 #, 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" #: src/remake.c:794 #, c-format msgid "Making '%s' due to always-make flag.\n" msgstr "Tạo “%s†do cỠ“always-makeâ€.\n" #: src/remake.c:802 #, c-format msgid "No need to remake target '%s'" msgstr "Không cần tạo lại đích “%sâ€." #: src/remake.c:804 #, c-format msgid "; using VPATH name '%s'" msgstr "; dùng tên VPATH “%sâ€" #: src/remake.c:824 #, c-format msgid "Must remake target '%s'.\n" msgstr "Phải tạo lại đích “%sâ€.\n" #: src/remake.c:830 #, c-format msgid " Ignoring VPATH name '%s'.\n" msgstr " Bá» qua tên VPATH “%sâ€.\n" #: src/remake.c:839 #, c-format msgid "Recipe of '%s' is being run.\n" msgstr "Äang chạy công thức cá»§a “%sâ€.\n" #: src/remake.c:846 #, 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" #: src/remake.c:849 #, c-format msgid "Successfully remade target file '%s'.\n" msgstr "Tạo lại thành công tập tin đích “%sâ€.\n" #: src/remake.c:852 #, 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" #: src/remake.c:1047 #, c-format msgid "Using default commands for '%s'.\n" msgstr "Dùng lệnh mặc định cho “%sâ€.\n" #: src/remake.c:1422 #, 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" #: src/remake.c:1662 #, 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" #: src/remote-cstms.c:122 #, c-format msgid "Customs won't export: %s\n" msgstr "Phần tùy chỉnh không xuất được: %s\n" #: src/rule.c:289 #, c-format msgid "warning: ignoring prerequisites on suffix rule definition" msgstr "" #: src/rule.c:530 msgid "" "\n" "# Implicit Rules" msgstr "" "\n" "# Quy tắc ngầm" #: src/rule.c:545 msgid "" "\n" "# No implicit rules." msgstr "" "\n" "# Không có quy tắc ngầm." #: src/rule.c:548 #, c-format msgid "" "\n" "# %u implicit rules, %u (%.1f%%) terminal." msgstr "" "\n" "# %u quy tắc ngầm, %u (%.1f%%) đầu cuối." #: src/rule.c:557 #, c-format msgid "BUG: num_pattern_rules is wrong! %u != %u" msgstr "Lá»–I: num_pattern_rules không đúng! %u != %u" #: src/signame.c:84 msgid "unknown signal" msgstr "tín hiệu lạ" #: src/signame.c:92 msgid "Hangup" msgstr "Treo" #: src/signame.c:95 msgid "Interrupt" msgstr "Ngắt" #: src/signame.c:98 msgid "Quit" msgstr "Thoát" #: src/signame.c:101 msgid "Illegal Instruction" msgstr "Chỉ lệnh không hợp lệ" #: src/signame.c:104 msgid "Trace/breakpoint trap" msgstr "Bẫy vết/Ä‘iểm ngắt" #: src/signame.c:109 msgid "Aborted" msgstr "Bị há»§y bá»" #: src/signame.c:112 msgid "IOT trap" msgstr "Bẫy IOT" #: src/signame.c:115 msgid "EMT trap" msgstr "Bẫy EMT" #: src/signame.c:118 msgid "Floating point exception" msgstr "Ngoại lệ dấu chấm động" #: src/signame.c:121 msgid "Killed" msgstr "Bị buá»™c kết thúc" #: src/signame.c:124 msgid "Bus error" msgstr "Lá»—i bus" #: src/signame.c:127 msgid "Segmentation fault" msgstr "Lá»—i phân Ä‘oạn" #: src/signame.c:130 msgid "Bad system call" msgstr "Lệnh gá»i hệ thống sai" #: src/signame.c:133 msgid "Broken pipe" msgstr "á»ng dẫn há»ng" #: src/signame.c:136 msgid "Alarm clock" msgstr "Äồng hồ báo động" #: src/signame.c:139 msgid "Terminated" msgstr "Äã chấm dứt" #: src/signame.c:142 msgid "User defined signal 1" msgstr "Tín hiệu tá»± định nghÄ©a 1" #: src/signame.c:145 msgid "User defined signal 2" msgstr "Tín hiệu tá»± định nghÄ©a 2" #: src/signame.c:150 src/signame.c:153 msgid "Child exited" msgstr "Tiến trình con đã thoát" #: src/signame.c:156 msgid "Power failure" msgstr "Mất Ä‘iện đột ngá»™t" #: src/signame.c:159 msgid "Stopped" msgstr "Bị ngừng" #: src/signame.c:162 msgid "Stopped (tty input)" msgstr "Bị ngừng (đầu vào tty)" #: src/signame.c:165 msgid "Stopped (tty output)" msgstr "Bị ngừng (đầu ra tty)" #: src/signame.c:168 msgid "Stopped (signal)" msgstr "Bị ngừng (tín hiệu)" #: src/signame.c:171 msgid "CPU time limit exceeded" msgstr "Vượt giá»›i hạn thá»i gian CPU" #: src/signame.c:174 msgid "File size limit exceeded" msgstr "Vượt giá»›i hạn kích cỡ tập tin" #: src/signame.c:177 msgid "Virtual timer expired" msgstr "Bá»™ đếm thá»i gian ảo đã hết hạn" #: src/signame.c:180 msgid "Profiling timer expired" msgstr "Hết hạn đếm thá»i gian khi theo dõi cách sá»­ dụng tiá»m năng hệ thống" #: src/signame.c:186 msgid "Window changed" msgstr "Cá»­a sổ bị thay đổi" #: src/signame.c:189 msgid "Continued" msgstr "Äã tiếp tục" #: src/signame.c:192 msgid "Urgent I/O condition" msgstr "Äiá»u kiện I/O khẩn cấp" #: src/signame.c:199 src/signame.c:208 msgid "I/O possible" msgstr "I/O có thể" # Literal: don't translate / NghÄ©a chữ: đừng dịch #: src/signame.c:202 msgid "SIGWIND" msgstr "SIGWIND" # Literal: don't translate / NghÄ©a chữ: đừng dịch #: src/signame.c:205 msgid "SIGPHONE" msgstr "SIGPHONE" #: src/signame.c:211 msgid "Resource lost" msgstr "Tài nguyên bị mất" #: src/signame.c:214 msgid "Danger signal" msgstr "Tín hiệu nguy hiểm" #: src/signame.c:217 msgid "Information request" msgstr "Yêu cầu thông tin" #: src/signame.c:220 msgid "Floating point co-processor not available" msgstr "Không có bá»™ đồng xá»­ lý số thá»±c dấu chấm động" #: src/strcache.c:274 #, c-format msgid "" "\n" "%s No strcache buffers\n" msgstr "" "\n" "%s Không có bá»™ đệm strcache\n" #: src/strcache.c:304 #, c-format msgid "" "\n" "%s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu " "B\n" msgstr "" "\n" "%s bá»™ đệm strcache: %lu (%lu) / chuá»—i = %lu / lưu = %lu B / t.bình = " "%lu B\n" #: src/strcache.c:308 #, c-format msgid "" "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B\n" msgstr "" "%s đệm hiện tại: kcỡ = %hu B / đã dùng = %hu B / slượng = %hu / tbình = %u " "B\n" #: src/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" #: src/strcache.c:322 #, c-format msgid "" "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n" 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" #: src/strcache.c:326 #, c-format msgid "" "\n" "%s strcache performance: lookups = %lu / hit rate = %lu%%\n" msgstr "" "\n" "%s hiệu năng strcache: tra cứu = %lu / tá»· lệ trúng = %lu%%\n" #: src/strcache.c:328 msgid "" "# hash-table stats:\n" "# " msgstr "" "# thống kê bảng băm tập tin:\n" "# " #: src/variable.c:1653 msgid "automatic" msgstr "tá»± động" #: src/variable.c:1656 msgid "default" msgstr "mặc định" #: src/variable.c:1659 msgid "environment" msgstr "môi trưá»ng" #: src/variable.c:1662 msgid "makefile" msgstr "makefile" #: src/variable.c:1665 msgid "environment under -e" msgstr "môi trưá»ng vá»›i -e" #: src/variable.c:1668 msgid "command line" msgstr "dòng lệnh" #: src/variable.c:1671 msgid "'override' directive" msgstr "chỉ thị “overrideâ€" #: src/variable.c:1682 #, c-format msgid " (from '%s', line %lu)" msgstr " (từ “%sâ€, dòng %lu)" #: src/variable.c:1745 msgid "# variable set hash-table stats:\n" msgstr "# thống kê bảng băm biến được đặt:\n" #: src/variable.c:1756 msgid "" "\n" "# Variables\n" msgstr "" "\n" "# Biến\n" #: src/variable.c:1760 msgid "" "\n" "# Pattern-specific Variable Values" msgstr "" "\n" "# Giá trị biến đặc tả cho mẫu" #: src/variable.c:1774 msgid "" "\n" "# No pattern-specific variable values." msgstr "" "\n" "# Không có giá trị biến đặc tả cho mẫu." #: src/variable.c:1776 #, c-format msgid "" "\n" "# %u pattern-specific variable values" msgstr "" "\n" "# %u giá trị biến đặc tả cho mẫu" #: src/variable.h:229 #, c-format msgid "warning: undefined variable '%.*s'" msgstr "cảnh báo: biến “%.*s†chưa được định nghÄ©a" #: src/vmsfunctions.c:91 #, c-format msgid "sys$search() failed with %d\n" msgstr "sys$search() gặp lá»—i vá»›i %d\n" #: src/vmsjobs.c:244 #, 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" #: src/vmsjobs.c:681 #, c-format msgid "BUILTIN CD %s\n" msgstr "BUILTIN CD %s\n" #: src/vmsjobs.c:1224 #, c-format msgid "DCL: %s\n" msgstr "DCL: %s\n" #: src/vmsjobs.c:1284 #, c-format msgid "Append output to %s\n" msgstr "Nối thêm đầu ra vào %s\n" #: src/vmsjobs.c:1309 #, c-format msgid "Append %.*s and cleanup\n" msgstr "Nối thêm %.*s và dá»n dẹp\n" #: src/vmsjobs.c:1322 #, c-format msgid "Executing %s instead\n" msgstr "Thá»±c hiện %s để thay thế\n" #: src/vpath.c:603 msgid "" "\n" "# VPATH Search Paths\n" msgstr "" "\n" "# ÄÆ°á»ng dẫn tìm kiếm VPATH\n" #: src/vpath.c:620 msgid "# No 'vpath' search paths." msgstr "# Không có đưá»ng dẫn tìm kiếm “vpathâ€." #: src/vpath.c:622 #, c-format msgid "" "\n" "# %u 'vpath' search paths.\n" msgstr "" "\n" "# %u đưá»ng dẫn tìm kiếm “vpathâ€.\n" #: src/vpath.c:625 msgid "" "\n" "# No general ('VPATH' variable) search path." msgstr "" "\n" "# Không có đưá»ng dẫn tìm kiếm chung (biến “VPATHâ€)." #: src/vpath.c:631 msgid "" "\n" "# General ('VPATH' variable) search path:\n" "# " msgstr "" "\n" "# ÄÆ°á»ng dẫn tìm kiếm chung (biến “VPATHâ€):\n" "# " #: src/w32/w32os.c:44 #, c-format msgid "Jobserver slots limited to %d\n" msgstr "Khe jobserver bị giá»›i hạn thành %d\n" #: src/w32/w32os.c:60 #, c-format msgid "creating jobserver semaphore: (Error %ld: %s)" msgstr "Ä‘ang tạo tín hiệu jobserver: (Lá»—i %ld: %s)" #: src/w32/w32os.c:79 #, 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)" #: src/w32/w32os.c:82 #, c-format msgid "Jobserver client (semaphore %s)\n" msgstr "Ứng dụng khách jobserver (cá» hiệu %s)\n" #: src/w32/w32os.c:123 #, c-format msgid "release jobserver semaphore: (Error %ld: %s)" msgstr "giải phóng tín hiệu jobserver: (Lá»—i %ld: %s)" #: src/w32/w32os.c:194 #, 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: %s: Command not found\n" #~ msgstr "%s: %s: Không tìm thấy lệnh\n" #~ msgid "%s[%u]: %s: Command not found\n" #~ msgstr "%s[%u]: %s: Không tìm thấy lệnh\n" #~ msgid "%s: Shell program not found" #~ msgstr "%s: Không tìm thấy chương trình hệ vá»" #~ msgid "%s is suspending for 30 seconds..." #~ msgstr "%s Ä‘ang ngưng trong 30 giây…" #~ msgid "done sleep(30). Continuing.\n" #~ msgstr "đã ngá»§(30). Tiếp tục.\n" #~ msgid "Unknown error %d" #~ msgstr "Lá»—i chưa biết %d" #~ 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." #~ msgid " terminal." #~ msgstr " thiết bị cuối." #~ 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" #~ msgid "internal error: multiple --jobserver-fds options" #~ msgstr "lá»—i ná»™i bá»™: có nhiá»u tùy chá»n --jobserver-fds" #~ msgid "virtual memory exhausted" #~ msgstr "hết bá»™ nhá»› ảo" #~ msgid "write error" #~ msgstr "lá»—i ghi" #~ msgid "BUILTIN RM %s\n" #~ msgstr "BUILTIN RM %s\n" #~ msgid "# Invalid value in 'update_status' member!" #~ msgstr "# Gặp giá trị sai trong thành phần “update_statusâ€!" #~ msgid "unknown trace mode '%s'" #~ msgstr "không hiểu chế độ theo vết “%sâ€" #~ msgid "*** [%s] Error 0x%x (ignored)" #~ msgstr "*** [%s] Lá»—i 0x%x (bá» qua)" #~ msgid "Invoking recipe from %s:%lu to update target `%s'.\n" #~ msgstr "Gá»i công thức từ %s:%lu để cập nhật đích “%sâ€.\n" #~ msgid "Invoking builtin recipe to update target `%s'.\n" #~ msgstr "Gá»i công thức dá»±ng sẵn để cập nhật đích “%sâ€.\n" #~ msgid "%s # of strcache buffers: %d (* %d B/buffer = %d B)\n" #~ msgstr "%s # vùng đệm strcache: %d (* %d B/buffer = %d B)\n" #~ msgid "" #~ "\n" #~ "# strcache hash-table stats:\n" #~ "# " #~ msgstr "" #~ "\n" #~ "# thống kê bảng băm strcache:\n" #~ "# " #~ msgid "process_easy() failed failed to launch process (e=%ld)\n" #~ msgstr "" #~ "Việc process_easy() (tiến trình dá»…) bị lá»—i khi cố khởi chạy tiến trình (e=" #~ "%ld)\n" #~ 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" #~ "%sPARTICULAR PURPOSE.\n" #~ msgstr "" #~ "%sPhần má»m này tá»± do; hãy xem mã nguồn để tìm thấy Ä‘iá»u kiện sao chép.\n" #~ "%sKhông bảo đảm gì cả, dù khả năng bán hay khả năng làm việc dứt khoát.\n" #~ "%s\n" #~ msgid "extraneous `endef'" #~ msgstr "gặp “endef†bắt nguồn ở ngoài" #~ msgid "empty `override' directive" #~ msgstr "chỉ thị “override†(đè) rá»—ng" #~ msgid "invalid `override' directive" #~ 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" #~ msgid "Do not specify -j or --jobs if sh.exe is not available." #~ msgstr "Äừng ghi rõ “-j†hay “--jobs†nếu không sẵn sàng." #~ msgid "Resetting make for single job mode." #~ msgstr "Äang đặt lại trình make cho chế độ công việc đơn." make-4.3/po/da.po0000644000175000017500000016673513611136530010601 00000000000000# Danish messages for make # Copyright (C) 2001, 2016 Free Software Foundation, Inc. # This file is distributed under the same license as the make package. # # Byrial Ole Jensen , 2001 # Ask Hjorth Larsen , 2010, 2016. # # Ordliste # -------- # # archive -> arkiv # member (i arkiv) -> element # library -> bibliotek # recipe -> opskrift? # pipe -> pipe # msgid "" msgstr "" "Project-Id-Version: make-4.2.1\n" "Report-Msgid-Bugs-To: bug-make@gnu.org\n" "POT-Creation-Date: 2020-01-19 15:34-0500\n" "PO-Revision-Date: 2016-12-04 18:52+0100\n" "Last-Translator: Ask Hjorth Larsen \n" "Language-Team: Danish \n" "Language: da\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" #: src/ar.c:46 #, c-format msgid "attempt to use unsupported feature: '%s'" msgstr "forsøg pÃ¥ at bruge funktion som ikke understøttes: \"%s\"" #: src/ar.c:123 #, c-format msgid "touch archive member is not available on VMS" msgstr "\"touch arkivelement\" er ikke tilgængelig pÃ¥ VMS" #: src/ar.c:147 #, c-format msgid "touch: Archive '%s' does not exist" msgstr "touch: Arkivet \"%s\" findes ikke" #: src/ar.c:150 #, c-format msgid "touch: '%s' is not a valid archive" msgstr "touch: \"%s\" er ikke et gyldigt arkiv" #: src/ar.c:157 #, c-format msgid "touch: Member '%s' does not exist in '%s'" msgstr "touch: Elementet \"%s\" findes ikke i \"%s\"" #: src/ar.c:164 #, c-format msgid "touch: Bad return code from ar_member_touch on '%s'" msgstr "touch: Forkert returkode fra ar_member_touch pÃ¥ \"%s\"" #: src/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" #: src/arscan.c:236 #, c-format msgid "lbr$ini_control() failed with status = %d" msgstr "lbr$ini_control() fejlede med status = %d" #: src/arscan.c:261 #, c-format msgid "unable to open library '%s' to lookup member status %d" msgstr "kan ikke Ã¥bne biblioteket \"%s\" for at slÃ¥ elementstatus %d op" #: src/arscan.c:944 #, c-format msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n" msgstr "Medlem \"%s\"%s: %ld byte ved %ld (%ld).\n" #: src/arscan.c:945 msgid " (name might be truncated)" msgstr " (navnet kan være forkortet)" #: src/arscan.c:947 #, c-format msgid " Date %s" msgstr " Tidsstempel %s" #: src/arscan.c:948 #, c-format msgid " uid = %d, gid = %d, mode = 0%o.\n" msgstr " uid = %d, gid = %d, modus = 0%o.\n" #: src/commands.c:403 #, c-format msgid "Recipe has too many lines (%ud)" msgstr "Opskriften har for mange linjer (%ud)" #: src/commands.c:504 msgid "*** Break.\n" msgstr "*** Afbrydelse.\n" #: src/commands.c:628 #, c-format msgid "*** [%s] Archive member '%s' may be bogus; not deleted" msgstr "*** [%s] Arkivmedlemmet \"%s\" er mÃ¥ske falsk; ikke slettet" #: src/commands.c:632 #, c-format msgid "*** Archive member '%s' may be bogus; not deleted" msgstr "*** Arkivmedlemmet \"%s\" er mÃ¥ske falsk; ikke slettet" #: src/commands.c:646 #, c-format msgid "*** [%s] Deleting file '%s'" msgstr "*** [%s] Sletter filen \"%s\"" #: src/commands.c:648 #, c-format msgid "*** Deleting file '%s'" msgstr "*** Sletter filen \"%s\"" #: src/commands.c:684 msgid "# recipe to execute" msgstr "# kommandoer der skal køres" #: src/commands.c:687 msgid " (built-in):" msgstr " (indbyggede):" #: src/commands.c:689 #, c-format msgid " (from '%s', line %lu):\n" msgstr " (fra \"%s\", linje %lu):\n" #: src/dir.c:1073 msgid "" "\n" "# Directories\n" msgstr "" "\n" "# Filkataloger\n" #: src/dir.c:1085 #, c-format msgid "# %s: could not be stat'd.\n" msgstr "# %s: kunne ikke undersøges med stat.\n" #: src/dir.c:1089 msgid "# %s (key %s, mtime %I64u): could not be opened.\n" msgstr "# %s (nøgle %s, mtime %I64u): kunne ikke Ã¥bnes.\n" #: src/dir.c:1094 #, 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" #: src/dir.c:1099 #, c-format msgid "# %s (device %ld, inode %ld): could not be opened.\n" msgstr "# %s (enhed %ld, inode %ld): kunne ikke Ã¥bnes.\n" #: src/dir.c:1126 msgid "# %s (key %s, mtime %I64u): " msgstr "# %s (nøgle %s, mtime %I64u): " #: src/dir.c:1131 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): " msgstr "# %s (enhed %d, inode [%d,%d,%d]): " #: src/dir.c:1136 #, c-format msgid "# %s (device %ld, inode %ld): " msgstr "# %s (enhed %ld, inode %ld): " #: src/dir.c:1142 src/dir.c:1163 msgid "No" msgstr "Ingen" #: src/dir.c:1145 src/dir.c:1166 msgid " files, " msgstr " filer, " #: src/dir.c:1147 src/dir.c:1168 msgid "no" msgstr "ingen" #: src/dir.c:1150 msgid " impossibilities" msgstr " umuligheder" #: src/dir.c:1154 msgid " so far." msgstr " indtil videre." #: src/dir.c:1171 #, c-format msgid " impossibilities in %lu directories.\n" msgstr " umuligheder i %lu kataloger.\n" #: src/expand.c:125 #, c-format msgid "Recursive variable '%s' references itself (eventually)" msgstr "Rekursiv variabel \"%s\" refererer (i sidste ende) til sig selv" #: src/expand.c:271 #, c-format msgid "unterminated variable reference" msgstr "uafsluttet variabelreference" #: src/file.c:278 #, c-format msgid "Recipe was specified for file '%s' at %s:%lu," msgstr "Opskrift blev angivet for filen \"%s\" i %s:%lu," #: src/file.c:283 #, c-format msgid "Recipe for file '%s' was found by implicit rule search," msgstr "Opskrift for filen \"%s\" blev fundet ved implicit regelsøgning," #: src/file.c:287 #, c-format msgid "but '%s' is now considered the same file as '%s'." msgstr "men \"%s\" bliver nu anset som samme fil som \"%s\"." #: src/file.c:290 #, c-format msgid "Recipe for '%s' will be ignored in favor of the one for '%s'." msgstr "" "Opskriften for \"%s\" vil blive ignoreret til fordel for den for \"%s\"." #: src/file.c:310 #, c-format msgid "can't rename single-colon '%s' to double-colon '%s'" msgstr "kan ikke ændre enkelt-kolon \"%s\" til dobbelt-kolon \"%s\"" #: src/file.c:316 #, c-format msgid "can't rename double-colon '%s' to single-colon '%s'" msgstr "kan ikke ændre dobbelt-kolon \"%s\" til enkelt-kolon \"%s\"" #: src/file.c:408 #, c-format msgid "*** Deleting intermediate file '%s'" msgstr "*** Sletter mellemfil \"%s\"" #: src/file.c:412 #, c-format msgid "Removing intermediate files...\n" msgstr "Sletter mellemfiler ...\n" #: src/file.c:872 msgid "Current time" msgstr "Aktuel tid" #: src/file.c:876 #, c-format msgid "%s: Timestamp out of range; substituting %s" msgstr "%s: Tidsstempel i forkert omrÃ¥de; bruger %s" #: src/file.c:1016 msgid "# Not a target:" msgstr "# Ikke et mÃ¥l:" #: src/file.c:1021 msgid "# Precious file (prerequisite of .PRECIOUS)." msgstr "# Værdifuld fil (forudsætning for .PRECIOUS)." #: src/file.c:1023 msgid "# Phony target (prerequisite of .PHONY)." msgstr "# Falsk mÃ¥l (forudsætning for .PHONY)." #: src/file.c:1025 msgid "# Command line target." msgstr "# KommandolinjemÃ¥l." #: src/file.c:1027 msgid "# A default, MAKEFILES, or -include/sinclude makefile." msgstr "# Et forvalg, MAKEFILES, eller -include/sinclude makefile." #: src/file.c:1029 msgid "# Builtin rule" msgstr "# Indbygget regel" #: src/file.c:1031 msgid "# Implicit rule search has been done." msgstr "# Der er udført implicit regelsøgning." #: src/file.c:1032 msgid "# Implicit rule search has not been done." msgstr "# Der er ikke udført implicit regelsøgning." #: src/file.c:1034 #, c-format msgid "# Implicit/static pattern stem: '%s'\n" msgstr "# Implicit/statisk mønsterstamme: \"%s\"\n" #: src/file.c:1036 msgid "# File is an intermediate prerequisite." msgstr "# Filen er en mellemfil." #: src/file.c:1040 msgid "# Also makes:" msgstr "# Skaber ogsÃ¥:" #: src/file.c:1046 msgid "# Modification time never checked." msgstr "# Ændringstid ikke tjekket." #: src/file.c:1048 msgid "# File does not exist." msgstr "# Filen findes ikke." #: src/file.c:1050 msgid "# File is very old." msgstr "# Filen er meget gammel." #: src/file.c:1055 #, c-format msgid "# Last modified %s\n" msgstr "# Sidst ændret %s\n" #: src/file.c:1058 msgid "# File has been updated." msgstr "# Filen er blevet opdateret." #: src/file.c:1058 msgid "# File has not been updated." msgstr "# Filen er ikke blevet opdateret." #: src/file.c:1062 msgid "# Recipe currently running (THIS IS A BUG)." msgstr "# Der køres kommandoer nu (DETTE ER EN FEJL)." #: src/file.c:1065 msgid "# Dependencies recipe running (THIS IS A BUG)." msgstr "# Kommandoer for afhængigheder køres nu (DETTE ER EN FEJL)." #: src/file.c:1074 msgid "# Successfully updated." msgstr "# Opdateret med godt resultat." #: src/file.c:1078 msgid "# Needs to be updated (-q is set)." msgstr "# Behøver opdatering (-q er sat)." #: src/file.c:1081 msgid "# Failed to be updated." msgstr "# Opdatering mislykkedes." #: src/file.c:1086 msgid "# Invalid value in 'command_state' member!" msgstr "# Ugyldig værdi i \"command_state\"-felt!" #: src/file.c:1105 msgid "" "\n" "# Files" msgstr "" "\n" "# Filer" #: src/file.c:1109 msgid "" "\n" "# files hash-table stats:\n" "# " msgstr "" "\n" "# Statistik for fil-hash-spande:\n" "# " #: src/file.c:1119 #, c-format msgid "%s: Field '%s' not cached: %s" msgstr "%s: Feltet \"%s\" er ikke i cache: %s" #: src/function.c:794 msgid "non-numeric first argument to 'word' function" msgstr "ikke-numerisk første argument til \"word\"-funktionen" #: src/function.c:799 #, c-format msgid "first argument to 'word' function must be greater than 0" msgstr "første argument til \"word\"-funktionen skal være større end 0" #: src/function.c:819 msgid "non-numeric first argument to 'wordlist' function" msgstr "ikke-numerisk første argument til \"wordlist\"-funktionen" #: src/function.c:821 msgid "non-numeric second argument to 'wordlist' function" msgstr "ikke-numerisk andet argument til \"wordlist\"-funktionen" #: src/function.c:1533 #, c-format msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n" msgstr "windows32_openpipe: DuplicateHandle(In) mislykkedes (e=%ld)\n" #: src/function.c:1557 #, c-format msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n" msgstr "windows32_openpipe: DuplicateHandle(Err) mislykkedes (e=%ld)\n" #: src/function.c:1564 #, c-format msgid "CreatePipe() failed (e=%ld)\n" msgstr "CreatePipe() mislykkedes (e=%ld)\n" #: src/function.c:1572 #, c-format msgid "windows32_openpipe(): process_init_fd() failed\n" msgstr "windows32_openpipe(): process_init_fd() mislykkedes\n" #: src/function.c:1857 #, c-format msgid "Cleaning up temporary batch file %s\n" msgstr "Afrydder midlertidig batchfil %s\n" #: src/function.c:2230 src/function.c:2255 #, c-format msgid "file: missing filename" msgstr "fil: mangler filnavn" #: src/function.c:2234 src/function.c:2265 #, c-format msgid "open: %s: %s" msgstr "Ã¥bn: %s: %s" #: src/function.c:2242 #, c-format msgid "write: %s: %s" msgstr "skriv: %s: %s" #: src/function.c:2245 src/function.c:2282 #, c-format msgid "close: %s: %s" msgstr "luk: %s: %s" #: src/function.c:2258 #, c-format msgid "file: too many arguments" msgstr "fil: for mange argumenter" #: src/function.c:2277 #, c-format msgid "read: %s: %s" msgstr "læs: %s: %s" #: src/function.c:2290 #, c-format msgid "file: invalid file operation: %s" msgstr "fil: ugyldig filoperation: %s" #: src/function.c:2405 #, c-format msgid "insufficient number of arguments (%d) to function '%s'" msgstr "utilstrækkeligt antal argumenter (%d) til funktionen \"%s\"" #: src/function.c:2417 #, c-format msgid "unimplemented on this platform: function '%s'" msgstr "ikke implementeret pÃ¥ denne platform: funktionen \"%s\"" #: src/function.c:2483 #, c-format msgid "unterminated call to function '%s': missing '%c'" msgstr "uafsluttet kald til funktionen \"%s\"; manglende \"%c\"" #: src/function.c:2667 #, c-format msgid "Empty function name" msgstr "Tomt funktionsnavn" #: src/function.c:2669 #, c-format msgid "Invalid function name: %s" msgstr "Ugyldigt funktionsnavn: %s" #: src/function.c:2671 #, c-format msgid "Function name too long: %s" msgstr "Funktionsnavn er for langt: %s" #: src/function.c:2674 #, c-format msgid "Invalid minimum argument count (%u) for function %s" msgstr "utilstrækkeligt antal argumenter (%u) til funktionen \"%s\"" #: src/function.c:2677 #, c-format msgid "Invalid maximum argument count (%u) for function %s" msgstr "Utilstrækkeligt antal argumenter (%u) til funktionen \"%s\"" #: src/getopt.c:659 #, c-format msgid "%s: option '%s' is ambiguous\n" msgstr "%s: tilvalget \"%s\" er flertydigt\n" #: src/getopt.c:683 #, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s: tilvalget \"--%s\" tillader ikke et argument\n" #: src/getopt.c:688 #, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s: tilvalget \"%c%s\" tillader ikke et argument\n" #: src/getopt.c:705 src/getopt.c:878 #, c-format msgid "%s: option '%s' requires an argument\n" msgstr "%s tilvalget \"%s\" kræver et argument\n" #: src/getopt.c:734 #, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s: ukendt tilvalg \"--%s\"\n" #: src/getopt.c:738 #, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s: ukendt tilvalg \"%c%s\"\n" #: src/getopt.c:764 #, c-format msgid "%s: illegal option -- %c\n" msgstr "%s: ulovligt tilvalg -- %c\n" #: src/getopt.c:767 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s: ugyldigt tilvalg -- %c\n" #: src/getopt.c:797 src/getopt.c:927 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: tilvalg kræver et argument -- %c\n" #: src/getopt.c:844 #, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s: tilvalget \"-W %s\" er flertydigt\n" #: src/getopt.c:862 #, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s: tilvalget \"-W %s\" tillader ikke et argument\n" # expand er normalt at skrive noget ud frem for at forkorte det. F.eks. %s -> "hello" #: src/guile.c:58 #, c-format msgid "guile: Expanding '%s'\n" msgstr "guile: Udskriver \"%s\"\n" #: src/guile.c:74 #, c-format msgid "guile: Evaluating '%s'\n" msgstr "guile: Evaluerer \"%s\"\n" #: src/hash.c:50 #, c-format msgid "can't allocate %lu bytes for hash table: memory exhausted" msgstr "kan ikke tildele %lu byte til hashtabel: hukommelsen opbrugt" #: src/hash.c:280 #, fuzzy, c-format msgid "Load=%lu/%lu=%.0f%%, " msgstr "Fyldning=%ld/%ld=%.0f%%, " #: src/hash.c:282 #, fuzzy, c-format msgid "Rehash=%u, " msgstr "Omgrupperinger=%d, " #: src/hash.c:283 #, fuzzy, c-format msgid "Collisions=%lu/%lu=%.0f%%" msgstr "Sammenstød=%ld/%ld=%.0f%%" #: src/implicit.c:38 #, c-format msgid "Looking for an implicit rule for '%s'.\n" msgstr "Kigger efter en implicit regel for \"%s\".\n" #: src/implicit.c:54 #, c-format msgid "Looking for archive-member implicit rule for '%s'.\n" msgstr "Kigger efter en implicit arkivmedlemsregel for \"%s\".\n" #: src/implicit.c:311 #, c-format msgid "Avoiding implicit rule recursion.\n" msgstr "UndgÃ¥r rekursion i implicitte regler.\n" #: src/implicit.c:484 #, fuzzy, c-format msgid "Stem too long: '%s%.*s'.\n" msgstr "Stamme for lang: \"%.*s\"\n" #: src/implicit.c:490 #, c-format msgid "Trying pattern rule with stem '%.*s'.\n" msgstr "Prøver mønsterregel med stammen \"%.*s\".\n" #: src/implicit.c:717 #, c-format msgid "Rejecting impossible rule prerequisite '%s'.\n" msgstr "Afviser umulig regelforudsætning \"%s\".\n" #: src/implicit.c:718 #, c-format msgid "Rejecting impossible implicit prerequisite '%s'.\n" msgstr "Afviser umulig implicit forudsætning \"%s\".\n" #: src/implicit.c:732 #, c-format msgid "Trying rule prerequisite '%s'.\n" msgstr "Prøver regelforudsætning \"%s\".\n" #: src/implicit.c:733 #, c-format msgid "Trying implicit prerequisite '%s'.\n" msgstr "Prøver implicit forudsætning \"%s\".\n" #: src/implicit.c:772 #, c-format msgid "Found prerequisite '%s' as VPATH '%s'\n" msgstr "Fandt forudsætning \"%s\" som VPATH \"%s\"\n" #: src/implicit.c:786 #, c-format msgid "Looking for a rule with intermediate file '%s'.\n" msgstr "Kigger efter en regel med mellemfil \"%s\".\n" #: src/job.c:370 msgid "Cannot create a temporary file\n" msgstr "Kan ikke oprette midlertidig fil\n" #: src/job.c:548 msgid " (core dumped)" msgstr " (core-fil efterladt)" #: src/job.c:553 msgid " (ignored)" msgstr "(ignoreret)" #: src/job.c:557 src/job.c:1892 msgid "" msgstr "" #: src/job.c:573 #, c-format msgid "%s[%s: %s] Error %d%s" msgstr "%s[%s: %s] Fejl %d%s" #: src/job.c:662 #, c-format msgid "*** Waiting for unfinished jobs...." msgstr "*** Venter pÃ¥ uafsluttede job...." #: src/job.c:704 #, c-format msgid "Live child %p (%s) PID %s %s\n" msgstr "Levende underproces %p (%s) PID %s %s\n" #: src/job.c:706 src/job.c:900 src/job.c:1072 src/job.c:1644 #, c-format msgid " (remote)" msgstr " (eksternt)" #: src/job.c:898 #, c-format msgid "Reaping winning child %p PID %s %s\n" msgstr "Høster vindende underproces %p PID %s %s\n" #: src/job.c:899 #, c-format msgid "Reaping losing child %p PID %s %s\n" msgstr "Høster tabende underproces %p PID %s %s\n" #: src/job.c:950 #, c-format msgid "Cleaning up temp batch file %s\n" msgstr "Rydder midlertidig batchfil %s\n" #: src/job.c:956 #, c-format msgid "Cleaning up temp batch file %s failed (%d)\n" msgstr "Oprydning af midlertidig batchfil %s mislykkedes (%d)\n" #: src/job.c:1071 #, c-format msgid "Removing child %p PID %s%s from chain.\n" msgstr "Fjerner underproces %p PID %s%s fra kæde.\n" #: src/job.c:1120 #, c-format msgid "Released token for child %p (%s).\n" msgstr "Frigav symbol for underproces %p (%s).\n" #: src/job.c:1575 src/job.c:2487 #, c-format msgid "process_easy() failed to launch process (e=%ld)\n" msgstr "process_easy() fejlede ved igangsætning af proces (e=%ld)\n" #: src/job.c:1579 src/job.c:2491 #, c-format msgid "" "\n" "Counted %d args in failed launch\n" msgstr "" "\n" "Talte %d argumenter i fejlet igangsætning\n" #: src/job.c:1642 #, 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" #: src/job.c:1875 #, c-format msgid "Obtained token for child %p (%s).\n" msgstr "Fik symbol for underproces %p (%s).\n" #: src/job.c:1902 #, c-format msgid "%s: target '%s' does not exist" msgstr "%s: mÃ¥let \"%s\" findes ikke" #: src/job.c:1905 #, c-format msgid "%s: update target '%s' due to: %s" msgstr "%s: opdatér mÃ¥let \"%s\" pÃ¥ grund af: %s" #: src/job.c:2108 #, c-format msgid "cannot enforce load limits on this operating system" msgstr "kan ikke gennemtvinge belastningsgrænser pÃ¥ dette styrestystem" #: src/job.c:2110 msgid "cannot enforce load limit: " msgstr "kan ikke gennemtvinge belastningsgrænse: " #: src/job.c:2200 #, c-format msgid "no more file handles: could not duplicate stdin\n" msgstr "ikke flere filhÃ¥ndtag: Kunne ikke duplikere stdin\n" #: src/job.c:2212 #, c-format msgid "no more file handles: could not duplicate stdout\n" msgstr "ikke flere filhÃ¥ndtag: Kunne ikke duplikere stdout\n" #: src/job.c:2226 #, c-format msgid "no more file handles: could not duplicate stderr\n" msgstr "ikke flere filhÃ¥ndtag: kunne ikke duplikere stdin\n" #: src/job.c:2241 #, c-format msgid "Could not restore stdin\n" msgstr "Kunne ikke gendanne stdin\n" #: src/job.c:2249 #, c-format msgid "Could not restore stdout\n" msgstr "Kunne ikke gendanne stdout\n" #: src/job.c:2257 #, c-format msgid "Could not restore stderr\n" msgstr "Kunne ikke gendanne stdin\n" #: src/job.c:2520 #, 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" #: src/job.c:2623 #, c-format msgid "spawnvpe: environment space might be exhausted" msgstr "spawnvpe: miljøplads er mÃ¥ske opbrugt" #: src/job.c:2862 #, c-format msgid "$SHELL changed (was '%s', now '%s')\n" msgstr "$SHELL ændret (var \"%s\", nu \"%s\")\n" #: src/job.c:3300 src/job.c:3485 #, c-format msgid "Creating temporary batch file %s\n" msgstr "Opretter midlertidig batchfil %s\n" #: src/job.c:3308 #, c-format msgid "" "Batch file contents:\n" "\t@echo off\n" msgstr "" "Indhold af batchfil:\n" "\t@echo off\n" #: src/job.c:3497 #, c-format msgid "" "Batch file contents:%s\n" "\t%s\n" msgstr "" "Indhold af batchfil:%s\n" "\t%s\n" #: src/job.c:3605 #, 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" #: src/load.c:60 #, c-format msgid "Failed to open global symbol table: %s" msgstr "Kunne ikke Ã¥bne global symboltabel: %s" #: src/load.c:97 #, c-format msgid "Loaded object %s is not declared to be GPL compatible" msgstr "Det indlæste objekt %s er ikke erklæret som GPL-kompatibelt" #: src/load.c:104 #, c-format msgid "Failed to load symbol %s from %s: %s" msgstr "Kunne ikke indlæse symbolet %s fra %s: %s" #: src/load.c:149 #, c-format msgid "Empty symbol name for load: %s" msgstr "Tomt symbolnavn ved indlæsning: %s" #: src/load.c:204 #, c-format msgid "Loading symbol %s from %s\n" msgstr "Indlæser symbol %s fra %s\n" #: src/load.c:256 #, c-format msgid "The 'load' operation is not supported on this platform." msgstr "Operationen indlæs ('load') understøttes ikke pÃ¥ denne platform." #: src/main.c:335 msgid "Options:\n" msgstr "Tilvalg:\n" #: src/main.c:336 msgid " -b, -m Ignored for compatibility.\n" msgstr " -b, -m Ignoreret af hensyn til kompabilitet.\n" #: src/main.c:338 msgid " -B, --always-make Unconditionally make all targets.\n" msgstr " -B, --always-make Skab alle mÃ¥l betingelsesløst.\n" #: src/main.c:340 msgid "" " -C DIRECTORY, --directory=DIRECTORY\n" " Change to DIRECTORY before doing anything.\n" msgstr "" " -C KATALOG, --directory=KATALOG\n" " Skift allerførst til KATALOG.\n" #: src/main.c:343 msgid " -d Print lots of debugging information.\n" msgstr "" " -d Udskriv en masse fejlsøgningsinformation.\n" #: src/main.c:345 msgid "" " --debug[=FLAGS] Print various types of debugging information.\n" msgstr "" " --debug[=FLAG] Udskriv forskellige slags " "fejlsøgningsinformation.\n" #: src/main.c:347 msgid "" " -e, --environment-overrides\n" " Environment variables override makefiles.\n" msgstr "" " -e, --environment-overrides\n" " Miljøvariable har forrang for makefiler.\n" #: src/main.c:350 #, fuzzy msgid "" " -E STRING, --eval=STRING Evaluate STRING as a makefile statement.\n" msgstr "" " --eval=STRENG Evaluér STRENG som en makefil-erklæring.\n" #: src/main.c:352 msgid "" " -f FILE, --file=FILE, --makefile=FILE\n" " Read FILE as a makefile.\n" msgstr "" " -f FIL, --file=FIL, --makefile=FIL\n" " Læs FIL som en makefil.\n" #: src/main.c:355 msgid " -h, --help Print this message and exit.\n" msgstr " -h, --help Udskriv denne besked og afslut.\n" #: src/main.c:357 msgid " -i, --ignore-errors Ignore errors from recipes.\n" msgstr " -i, --ignore-errors Ignorér fejl fra kommandoer.\n" #: src/main.c:359 msgid "" " -I DIRECTORY, --include-dir=DIRECTORY\n" " Search DIRECTORY for included makefiles.\n" msgstr "" " -I KATALOG, --include-dir=KATALOG\n" " Søg i KATALOG efter inkluderede makefiler.\n" #: src/main.c:362 msgid "" " -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no " "arg.\n" msgstr "" " -j [N], --jobs[=N] Tillad N samtidige job; uendelig mange job " "uden argument.\n" #: src/main.c:364 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" #: src/main.c:366 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" " Start ikke flere job medmindre belastningen er " "under N.\n" #: src/main.c:369 msgid "" " -L, --check-symlink-times Use the latest mtime between symlinks and " "target.\n" msgstr "" " -L, --check-symlink-times Brug sidste mtime mellem symbolske lænker og " "mÃ¥l.\n" #: src/main.c:371 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" " Udfør ikke nogen kommandoer; udskriv dem " "bare.\n" #: src/main.c:374 msgid "" " -o FILE, --old-file=FILE, --assume-old=FILE\n" " Consider FILE to be very old and don't remake " "it.\n" msgstr "" " -o FIL, --old-file=FIL, --assume-old=FIL\n" " Anse FIL som værende meget gammel og genskab " "den ikke.\n" #: src/main.c:377 msgid "" " -O[TYPE], --output-sync[=TYPE]\n" " Synchronize output of parallel jobs by TYPE.\n" msgstr "" " -O[TYPE], --output-sync[=TYPE]\n" " Synkronisér udskrift af parallelle job efter " "TYPE\n" #: src/main.c:380 msgid " -p, --print-data-base Print make's internal database.\n" msgstr " -p, --print-data-base Udskriv makes interne database.\n" #: src/main.c:382 msgid "" " -q, --question Run no recipe; exit status says if up to " "date.\n" msgstr "" " -q, --question Udfør ingen kommandoer; afslutningskoden " "angiver\n" " om mÃ¥let er tidssvarende.\n" #: src/main.c:384 msgid " -r, --no-builtin-rules Disable the built-in implicit rules.\n" msgstr "" " -r, --no-builtin-rules SlÃ¥ de indbyggede implicitte regler fra.\n" #: src/main.c:386 msgid " -R, --no-builtin-variables Disable the built-in variable settings.\n" msgstr " -R, --no-builtin-variables SlÃ¥ de indbyggede variabelværdier fra.\n" #: src/main.c:388 msgid " -s, --silent, --quiet Don't echo recipes.\n" msgstr " -s, --silent, --quiet Udskriv ikke kommandoer.\n" #: src/main.c:390 #, fuzzy msgid " --no-silent Echo recipes (disable --silent mode).\n" msgstr "" " -q, --question Udfør ingen kommandoer; afslutningskoden " "angiver\n" " om mÃ¥let er tidssvarende.\n" #: src/main.c:392 msgid "" " -S, --no-keep-going, --stop\n" " Turns off -k.\n" msgstr "" " -S, --no-keep-going, --stop\n" " SlÃ¥r -k fra.\n" #: src/main.c:395 msgid " -t, --touch Touch targets instead of remaking them.\n" msgstr "" " -t, --touch Berør mÃ¥l i stedet for at genskabe dem.\n" #: src/main.c:397 msgid " --trace Print tracing information.\n" msgstr " --trace Udskriv trace-information.\n" #: src/main.c:399 msgid "" " -v, --version Print the version number of make and exit.\n" msgstr " -v, --version Udskriv makes versionnummer og afslut.\n" #: src/main.c:401 msgid " -w, --print-directory Print the current directory.\n" msgstr " -w, --print-directory Udskriv det aktuelle katalog.\n" #: src/main.c:403 msgid "" " --no-print-directory Turn off -w, even if it was turned on " "implicitly.\n" msgstr "" " --no-print-directory SlÃ¥ -w fra, selv hvis det var slÃ¥et til " "automatisk.\n" #: src/main.c:405 msgid "" " -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n" " Consider FILE to be infinitely new.\n" msgstr "" " -W FIL, --what-if=FIL, --new-file=FIL, --assume-new=FIL\n" " Anse FIL som værende nyskabt.\n" #: src/main.c:408 msgid "" " --warn-undefined-variables Warn when an undefined variable is " "referenced.\n" msgstr "" " --warn-undefined-variables Advar nÃ¥r en udefineret variabel bruges.\n" #: src/main.c:671 #, c-format msgid "empty string invalid as file name" msgstr "en tom streng er ugyldig som filnavn" #: src/main.c:754 #, c-format msgid "unknown debug level specification '%s'" msgstr "ukendt specifikation af fejlsøgningsniveau \"%s\"" #: src/main.c:794 #, c-format msgid "unknown output-sync type '%s'" msgstr "ukendt type \"%s\" af output-sync" #: src/main.c:849 #, 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" #: src/main.c:856 #, c-format msgid "" "\n" "Unhandled exception filter called from program %s\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" msgstr "" "\n" "UhÃ¥ndteret undtagelsesfilter kaldt fra program %s\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" #: src/main.c:864 #, c-format msgid "Access violation: write operation at address 0x%p\n" msgstr "Adgangskrænkelse: skriveoperation pÃ¥ adresse 0x%p\n" #: src/main.c:865 #, c-format msgid "Access violation: read operation at address 0x%p\n" msgstr "Adgangskrænkelse: læseoperation pÃ¥ adresse 0x%p\n" #: src/main.c:941 src/main.c:956 #, c-format msgid "find_and_set_shell() setting default_shell = %s\n" msgstr "find_and_set_shell() sætter default_shell = %s\n" #: src/main.c:1009 #, 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" #: src/main.c:1609 #, c-format msgid "" "warning: jobserver unavailable: using -j1. Add '+' to parent make rule." msgstr "" "advarsel: jobserver ikke tilgængelig: bruger -j1. Tilføj \"+\" til " "ophavsmakeregel." #: src/main.c:1617 #, fuzzy, c-format msgid "warning: -j%d forced in submake: resetting jobserver mode." msgstr "advarsel: tvunget -jN i undermake: slÃ¥r jobserver tilstand fra." #: src/main.c:1781 #, c-format msgid "Makefile from standard input specified twice." msgstr "Makefil fra standard-ind er angivet to gange." #: src/main.c:1819 src/vmsjobs.c:1248 msgid "fopen (temporary file)" msgstr "fopen (midlertidig fil)" #: src/main.c:1825 msgid "fwrite (temporary file)" msgstr "fwrite (midlertidig fil)" #: src/main.c:2004 #, fuzzy, c-format msgid "warning: -j%d forced in makefile: resetting jobserver mode." msgstr "advarsel: tvunget -jN i undermake: slÃ¥r jobserver tilstand fra." #: src/main.c:2068 #, c-format msgid "Parallel jobs (-j) are not supported on this platform." msgstr "Parallelle job (-j) er ikke understøttet pÃ¥ denne platform." #: src/main.c:2069 #, c-format msgid "Resetting to single job (-j1) mode." msgstr "Sætter tilbage til enkelt job-tilstand (-j1)." #: src/main.c:2109 #, c-format msgid "Symbolic links not supported: disabling -L." msgstr "Symbolske lænker understøttes ikke: Deaktiverer -L." #: src/main.c:2190 #, c-format msgid "Updating makefiles....\n" msgstr "Opdaterer makefiler....\n" #: src/main.c:2226 #, c-format msgid "Makefile '%s' might loop; not remaking it.\n" msgstr "" "Makefilen \"%s\" fÃ¥r mÃ¥ske make til at køre i ring; genskaber den ikke.\n" #: src/main.c:2303 #, c-format msgid "Failed to remake makefile '%s'." msgstr "Genskabelse af makefilen \"%s\" mislykkedes." #: src/main.c:2323 #, c-format msgid "Included makefile '%s' was not found." msgstr "Inkluderet makefil \"%s\" blev ikke fundet." #: src/main.c:2328 #, c-format msgid "Makefile '%s' was not found" msgstr "Makefilen \"%s\" blev ikke fundet" #: src/main.c:2394 #, c-format msgid "Couldn't change back to original directory." msgstr "Kunne ikke skifte tilbage til det originale katalog." #: src/main.c:2402 #, c-format msgid "Re-executing[%u]:" msgstr "Udfører igen[%u]:" #: src/main.c:2522 msgid "unlink (temporary file): " msgstr "unlink (midlertidig fil): " #: src/main.c:2555 #, c-format msgid ".DEFAULT_GOAL contains more than one target" msgstr ".DEFAULT_GOAL indeholder mere end et mÃ¥l" #: src/main.c:2579 #, c-format msgid "No targets" msgstr "Ingen mÃ¥l" #: src/main.c:2581 #, c-format msgid "No targets specified and no makefile found" msgstr "Ingen angivne mÃ¥l og ingen makefil fundet" #: src/main.c:2586 #, c-format msgid "Updating goal targets....\n" msgstr "Opdaterer endemÃ¥l....\n" # build? #: src/main.c:2610 #, c-format msgid "warning: Clock skew detected. Your build may be incomplete." msgstr "" "advarsel: Der blev registreret en uoverensstemmelse i urets tid. Din " "kompilering kan være ufuldstændig." #: src/main.c:2804 #, c-format msgid "Usage: %s [options] [target] ...\n" msgstr "Brug: %s [tilvalg] [mÃ¥l] ...\n" #: src/main.c:2810 #, c-format msgid "" "\n" "This program built for %s\n" msgstr "" "\n" "Dette program er bygget til %s\n" #: src/main.c:2812 #, c-format msgid "" "\n" "This program built for %s (%s)\n" msgstr "" "\n" "Dette program er bygget til %s (%s)\n" #: src/main.c:2815 #, c-format msgid "Report bugs to \n" msgstr "Send fejlmeldinger (pÃ¥ engelsk) til .\n" #: src/main.c:2901 #, 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" #: src/main.c:2965 #, c-format msgid "the '-%c' option requires a positive integer argument" msgstr "\"-%c\"-tilvalget kræver et positivt heltalligt argument" #: src/main.c:3363 #, c-format msgid "%sBuilt for %s\n" msgstr "%sBygget til %s\n" #: src/main.c:3365 #, c-format msgid "%sBuilt for %s (%s)\n" msgstr "%sBygget til %s (%s)\n" #: src/main.c:3376 #, c-format msgid "" "%sLicense GPLv3+: GNU GPL version 3 or later \n" "%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 "" "%sLicens GPLv3+: GNU GPL v3 eller nyere \n" "%sDette er frit programmel: Du kan frit ændre og videredistribuere det.\n" "%sDer gives INGEN GARANTI i den grad, som dette tillades af loven.\n" # %s giver dato og klokkeslæt #: src/main.c:3397 #, c-format msgid "" "\n" "# Make data base, printed on %s" msgstr "" "\n" "# Makedatabase, udskrevet %s" # %s giver dato og klokkeslæt #: src/main.c:3407 #, c-format msgid "" "\n" "# Finished Make data base on %s\n" msgstr "" "\n" "# Afsluttet makedatabase %s\n" #: src/misc.c:643 #, c-format msgid "%s: user %lu (real %lu), group %lu (real %lu)\n" msgstr "%s: bruger %lu (reelt %lu), gruppe %lu (reelt %lu)\n" #: src/misc.c:664 msgid "Initialized access" msgstr "Indledende adgang" #: src/misc.c:743 msgid "User access" msgstr "Brugeradgang" #: src/misc.c:791 msgid "Make access" msgstr "Make-adgang" #: src/misc.c:825 msgid "Child access" msgstr "Barneadgang" #: src/output.c:97 #, c-format msgid "%s: Entering an unknown directory\n" msgstr "%s: GÃ¥r til et ukendt katalog\n" #: src/output.c:99 #, c-format msgid "%s: Leaving an unknown directory\n" msgstr "%s: Forlader et ukendt katalog\n" #: src/output.c:102 #, c-format msgid "%s: Entering directory '%s'\n" msgstr "%s: GÃ¥r til katalog \"%s\"\n" #: src/output.c:104 #, c-format msgid "%s: Leaving directory '%s'\n" msgstr "%s: Forlader katalog \"%s\"\n" #: src/output.c:108 #, c-format msgid "%s[%u]: Entering an unknown directory\n" msgstr "%s[%u]: GÃ¥r til et ukendt katalog\n" #: src/output.c:110 #, c-format msgid "%s[%u]: Leaving an unknown directory\n" msgstr "%s[%u]: Forlader et ukendt katalog\n" #: src/output.c:113 #, c-format msgid "%s[%u]: Entering directory '%s'\n" msgstr "%s[%u]: GÃ¥r til katalog \"%s\"\n" #: src/output.c:115 #, c-format msgid "%s[%u]: Leaving directory '%s'\n" msgstr "%s[%u]: Forlader katalog \"%s\"\n" #: src/output.c:442 src/output.c:444 #, c-format msgid "write error: stdout" msgstr "skrivefejl: stdout" #: src/output.c:624 msgid ". Stop.\n" msgstr ". Stop.\n" #: src/output.c:658 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" #: src/output.c:667 #, c-format msgid "%s: %s" msgstr "%s: %s" # build? #: src/output.h:62 #, c-format msgid "-O[TYPE] (--output-sync[=TYPE]) is not configured for this build." msgstr "" "-O[TYPE] (--output-sync[=TYPE]) er ikke konfigureret til denne kompilering." #: src/posixos.c:90 msgid "creating jobs pipe" msgstr "opretter job-pipe" #: src/posixos.c:98 src/posixos.c:251 msgid "duping jobs pipe" msgstr "kopierer job-pipe" #: src/posixos.c:104 msgid "init jobserver pipe" msgstr "klargøring af jobserver-pipe" #: src/posixos.c:119 #, c-format msgid "internal error: invalid --jobserver-auth string '%s'" msgstr "intern fejl: ugyldig \"--jobserver-auth\"-streng \"%s\"" # fd = fildeskriptor #: src/posixos.c:122 #, c-format msgid "Jobserver client (fds %d,%d)\n" msgstr "Jobserverklient (fd'er %d,%d)\n" #: src/posixos.c:138 msgid "jobserver pipeline" msgstr "jobserver-pipe" # ? #: src/posixos.c:186 msgid "write jobserver" msgstr "skriv jobserver" #: src/posixos.c:300 #, c-format msgid "job server shut down" msgstr "" #: src/posixos.c:303 msgid "pselect jobs pipe" msgstr "pselect job-pipe" # ? #: src/posixos.c:319 src/posixos.c:433 msgid "read jobs pipe" msgstr "læs job-pipe" #: src/read.c:181 #, c-format msgid "Reading makefiles...\n" msgstr "Læser makefiler...\n" #: src/read.c:336 #, c-format msgid "Reading makefile '%s'" msgstr "Læser makefilen \"%s\"" #: src/read.c:338 #, c-format msgid " (no default goal)" msgstr " (ingen standard-endemÃ¥l)" #: src/read.c:340 #, c-format msgid " (search path)" msgstr " (søgesti)" #: src/read.c:342 #, c-format msgid " (don't care)" msgstr " (ikke nødvendig)" #: src/read.c:344 #, c-format msgid " (no ~ expansion)" msgstr " (ingen ~-udfoldning)" #: src/read.c:655 #, c-format msgid "Skipping UTF-8 BOM in makefile '%s'\n" msgstr "Springer UTF-8-BOM over i makefilen \"%s\"\n" #: src/read.c:658 #, c-format msgid "Skipping UTF-8 BOM in makefile buffer\n" msgstr "Springer UTF-8-BOM over i makefilbuffer\n" #: src/read.c:787 #, c-format msgid "invalid syntax in conditional" msgstr "ugyldig syntaks i betingelse" #: src/read.c:960 #, c-format msgid "%s: failed to load" msgstr "%s: kunne ikke indlæse" #: src/read.c:986 #, c-format msgid "recipe commences before first target" msgstr "kommandoer begynder før første mÃ¥l" #: src/read.c:1035 #, c-format msgid "missing rule before recipe" msgstr "manglende regel før kommandoer" #: src/read.c:1136 #, c-format msgid "missing separator (did you mean TAB instead of 8 spaces?)" msgstr "manglende skilletegn (mente du TAB i stedet for 8 mellemrum?)" #: src/read.c:1138 #, c-format msgid "missing separator" msgstr "manglende skilletegn" #: src/read.c:1283 #, c-format msgid "missing target pattern" msgstr "manglende mÃ¥lmønster" #: src/read.c:1285 #, c-format msgid "multiple target patterns" msgstr "flere mÃ¥lmønstre" #: src/read.c:1289 #, c-format msgid "target pattern contains no '%%'" msgstr "mÃ¥lmønster indeholder ingen \"%%\"" #: src/read.c:1404 #, c-format msgid "missing 'endif'" msgstr "mangler \"endif\"" #: src/read.c:1443 src/read.c:1488 src/variable.c:1600 #, c-format msgid "empty variable name" msgstr "tomt variabelnavn" #: src/read.c:1478 #, c-format msgid "extraneous text after 'define' directive" msgstr "overskydende tekst efter \"define\"-direktiv" #: src/read.c:1503 #, c-format msgid "missing 'endef', unterminated 'define'" msgstr "manglende \"endef\", uafsluttet \"define\"" #: src/read.c:1531 #, c-format msgid "extraneous text after 'endef' directive" msgstr "overskydende tekst efter \"endef\"-direktiv" #: src/read.c:1603 #, c-format msgid "extraneous text after '%s' directive" msgstr "overskydende tekst efter \"%s\"-direktiv" #: src/read.c:1604 #, c-format msgid "extraneous '%s'" msgstr "overskydende \"%s\"" #: src/read.c:1632 #, c-format msgid "only one 'else' per conditional" msgstr "kun én \"else\" per betingelse" #: src/read.c:1908 #, c-format msgid "Malformed target-specific variable definition" msgstr "Misdannet mÃ¥lspecifik variabeldefinition" #: src/read.c:1968 #, c-format msgid "prerequisites cannot be defined in recipes" msgstr "der kan ikke defineres forudsætninger i kommandoer" #: src/read.c:1986 #, c-format msgid "grouped targets must provide a recipe" msgstr "" #: src/read.c:2029 #, c-format msgid "mixed implicit and static pattern rules" msgstr "blandede implicitte og statiske mønsterregler" #: src/read.c:2052 #, c-format msgid "mixed implicit and normal rules" msgstr "blandede implicitte og normale regler" #: src/read.c:2107 #, c-format msgid "target '%s' doesn't match the target pattern" msgstr "mÃ¥let \"%s\" passer ikke til mÃ¥lmønstret" #: src/read.c:2122 src/read.c:2168 #, c-format msgid "target file '%s' has both : and :: entries" msgstr "mÃ¥lfilen \"%s\" har bÃ¥de :- og ::-angivelser" #: src/read.c:2128 #, c-format msgid "target '%s' given more than once in the same rule" msgstr "mÃ¥let \"%s\" optræder mere end én gang i samme regel" #: src/read.c:2138 #, c-format msgid "warning: overriding recipe for target '%s'" msgstr "advarsel: tilsidesætter opskrift for mÃ¥let \"%s\"" #: src/read.c:2141 #, c-format msgid "warning: ignoring old recipe for target '%s'" msgstr "advarsel: ignorerer gammel opskrift for mÃ¥let \"%s\"" #: src/read.c:2254 #, c-format msgid "*** mixed implicit and normal rules: deprecated syntax" msgstr "*** blandede implicitte og normale regler: forældet syntaks" #: src/read.c:2271 #, fuzzy, c-format msgid "warning: overriding group membership for target '%s'" msgstr "advarsel: tilsidesætter opskrift for mÃ¥let \"%s\"" #: src/read.c:2636 #, c-format msgid "warning: NUL character seen; rest of line ignored" msgstr "advarsel: NUL-tegn set; resten af linjen ignoreres" #: src/remake.c:226 #, c-format msgid "Nothing to be done for '%s'." msgstr "Ingenting at gøre for \"%s\"." #: src/remake.c:227 #, c-format msgid "'%s' is up to date." msgstr "\"%s\" er tidssvarende." #: src/remake.c:323 #, c-format msgid "Pruning file '%s'.\n" msgstr "Beskærer fil \"%s\".\n" #: src/remake.c:389 #, c-format msgid "%sNo rule to make target '%s', needed by '%s'%s" msgstr "%sIngen regel til at skabe mÃ¥let \"%s\" som behøves af \"%s\"%s" #: src/remake.c:399 #, c-format msgid "%sNo rule to make target '%s'%s" msgstr "%sIngen regel til at skabe mÃ¥let \"%s\"%s" #: src/remake.c:425 #, c-format msgid "Considering target file '%s'.\n" msgstr "Overvejer mÃ¥lfilen \"%s\".\n" #: src/remake.c:432 #, 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" #: src/remake.c:444 #, c-format msgid "File '%s' was considered already.\n" msgstr "Filen \"%s\" er allerede overvejet.\n" #: src/remake.c:454 #, c-format msgid "Still updating file '%s'.\n" msgstr "Opdaterer stadig fil \"%s\".\n" #: src/remake.c:457 #, c-format msgid "Finished updating file '%s'.\n" msgstr "Opdatering af fil \"%s\" afsluttet.\n" #: src/remake.c:486 #, c-format msgid "File '%s' does not exist.\n" msgstr "Filen \"%s\" findes ikke.\n" #: src/remake.c:494 #, c-format msgid "" "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp" msgstr "" "*** Advarsel: .LOW_RESOLUTION_TIME-fil \"%s\" har et tidsstempel med høj " "opløsning" #: src/remake.c:507 src/remake.c:1039 #, c-format msgid "Found an implicit rule for '%s'.\n" msgstr "Fandt en implicit regel for \"%s\".\n" #: src/remake.c:509 src/remake.c:1041 #, c-format msgid "No implicit rule found for '%s'.\n" msgstr "Ingen implicit regel for \"%s\" fundet.\n" #: src/remake.c:515 #, c-format msgid "Using default recipe for '%s'.\n" msgstr "Bruger standardopskrift for \"%s\".\n" #: src/remake.c:549 src/remake.c:1088 #, c-format msgid "Circular %s <- %s dependency dropped." msgstr "Cirkulær %s <- %s afhængighed opgivet." #: src/remake.c:674 #, c-format msgid "Finished prerequisites of target file '%s'.\n" msgstr "Afsluttede forudsætningerne for mÃ¥lfilen \"%s\".\n" #: src/remake.c:680 #, c-format msgid "The prerequisites of '%s' are being made.\n" msgstr "Forudsætningerne for \"%s\" er ved at blive skabt.\n" #: src/remake.c:694 #, c-format msgid "Giving up on target file '%s'.\n" msgstr "Opgiver mÃ¥lfil \"%s\".\n" #: src/remake.c:699 #, c-format msgid "Target '%s' not remade because of errors." msgstr "MÃ¥let \"%s\" ikke genskabt pÃ¥ grund af fejl." #: src/remake.c:751 #, 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" #: src/remake.c:756 #, c-format msgid "Prerequisite '%s' of target '%s' does not exist.\n" msgstr "Forudsætningen \"%s\" for mÃ¥let \"%s\" findes ikke.\n" #: src/remake.c:761 #, c-format msgid "Prerequisite '%s' is newer than target '%s'.\n" msgstr "Forudsætningen \"%s\" er nyere end mÃ¥let \"%s\".\n" #: src/remake.c:764 #, c-format msgid "Prerequisite '%s' is older than target '%s'.\n" msgstr "Forudsætningen \"%s\" er ældre end mÃ¥let \"%s\".\n" #: src/remake.c:782 #, 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" #: src/remake.c:789 #, c-format msgid "No recipe for '%s' and no prerequisites actually changed.\n" msgstr "Ingen opskrift til \"%s\", og ingen forudsætninger har ændret sig.\n" #: src/remake.c:794 #, c-format msgid "Making '%s' due to always-make flag.\n" msgstr "Skaber \"%s\" pga. \"always-make\"-flag.\n" #: src/remake.c:802 #, c-format msgid "No need to remake target '%s'" msgstr "Ingen grund til at genskabe mÃ¥let \"%s\"" #: src/remake.c:804 #, c-format msgid "; using VPATH name '%s'" msgstr "; bruger VPATH-navnet \"%s\"" #: src/remake.c:824 #, c-format msgid "Must remake target '%s'.\n" msgstr "Skal genskabe mÃ¥let \"%s\".\n" #: src/remake.c:830 #, c-format msgid " Ignoring VPATH name '%s'.\n" msgstr " Ignorerer VPATH-navnet \"%s\".\n" #: src/remake.c:839 #, c-format msgid "Recipe of '%s' is being run.\n" msgstr "Opskriften for \"%s\" er ved at blive kørt.\n" #: src/remake.c:846 #, c-format msgid "Failed to remake target file '%s'.\n" msgstr "Genskabelse af mÃ¥lfilen \"%s\" mislykkedes.\n" #: src/remake.c:849 #, c-format msgid "Successfully remade target file '%s'.\n" msgstr "MÃ¥lfilen \"%s\" genskabt.\n" #: src/remake.c:852 #, c-format msgid "Target file '%s' needs to be remade under -q.\n" msgstr "Det er nødvendigt at genskabe mÃ¥lfilen \"%s\" med -q.\n" #: src/remake.c:1047 #, c-format msgid "Using default commands for '%s'.\n" msgstr "Bruger standardkommandoer for \"%s\".\n" #: src/remake.c:1422 #, c-format msgid "Warning: File '%s' has modification time %s s in the future" msgstr "Advarsel: Filen \"%s\" har modifikationstidspunkt %s s i fremtiden" #: src/remake.c:1662 #, c-format msgid ".LIBPATTERNS element '%s' is not a pattern" msgstr ".LIBPATTERNS-elementet \"%s\" er ikke et mønster" # "remote job exportation interface to the Customs daemon": jeg aner ikke # hvad der er tale om. I øvrigt ser remote-cstms.c forældet/ubrugt ud, og # koden er ikke understøttet af GNU... #: src/remote-cstms.c:122 #, c-format msgid "Customs won't export: %s\n" msgstr "Customs kan ikke eksporteres: %s\n" #: src/rule.c:289 #, c-format msgid "warning: ignoring prerequisites on suffix rule definition" msgstr "" #: src/rule.c:530 msgid "" "\n" "# Implicit Rules" msgstr "" "\n" "# Implicitte regler" #: src/rule.c:545 msgid "" "\n" "# No implicit rules." msgstr "" "\n" "# Ingen implicitte regler." #: src/rule.c:548 #, fuzzy, c-format msgid "" "\n" "# %u implicit rules, %u (%.1f%%) terminal." msgstr "" "\n" "# %u implicitte regler, %u" #: src/rule.c:557 #, c-format msgid "BUG: num_pattern_rules is wrong! %u != %u" msgstr "FEJL: forkert num_pattern_rules! %u != %u" #: src/signame.c:84 msgid "unknown signal" msgstr "ukendt signal" # De fleste af signalnavnene fra signame.c er kopieret fra libc.da.po, # kun ganske enkelte findes ikke der. #: src/signame.c:92 msgid "Hangup" msgstr "Læg pÃ¥" #: src/signame.c:95 msgid "Interrupt" msgstr "Afbrudt" #: src/signame.c:98 msgid "Quit" msgstr "Afslut" #: src/signame.c:101 msgid "Illegal Instruction" msgstr "Ulovlig instruktion" #: src/signame.c:104 msgid "Trace/breakpoint trap" msgstr "Sporings-/stoppunkts-fælde" #: src/signame.c:109 msgid "Aborted" msgstr "Afbrudt" #: src/signame.c:112 msgid "IOT trap" msgstr "IOT_fælde" #: src/signame.c:115 msgid "EMT trap" msgstr "Emulatorfælde" #: src/signame.c:118 msgid "Floating point exception" msgstr "Undtagelsestilfælde ved flydendetals-operation" #: src/signame.c:121 msgid "Killed" msgstr "Dræbt" #: src/signame.c:124 msgid "Bus error" msgstr "Busfejl" #: src/signame.c:127 msgid "Segmentation fault" msgstr "Lagersegmentfejl" #: src/signame.c:130 msgid "Bad system call" msgstr "Ugyldigt systemkald" #: src/signame.c:133 msgid "Broken pipe" msgstr "Pipe blev brudt" #: src/signame.c:136 msgid "Alarm clock" msgstr "Alarmen gik" #: src/signame.c:139 msgid "Terminated" msgstr "Termineret" #: src/signame.c:142 msgid "User defined signal 1" msgstr "Brugerdefineret signal 1" #: src/signame.c:145 msgid "User defined signal 2" msgstr "Brugerdefineret signal 2" #: src/signame.c:150 src/signame.c:153 msgid "Child exited" msgstr "Barnet afsluttet" #: src/signame.c:156 msgid "Power failure" msgstr "Strømmen gik" #: src/signame.c:159 msgid "Stopped" msgstr "Stoppet" #: src/signame.c:162 msgid "Stopped (tty input)" msgstr "Stoppet (ville læse fra tty)" #: src/signame.c:165 msgid "Stopped (tty output)" msgstr "Stoppet (ville skrive til tty)" #: src/signame.c:168 msgid "Stopped (signal)" msgstr "Stoppet (signal)" #: src/signame.c:171 msgid "CPU time limit exceeded" msgstr "Begrænsning af CPU-tid overskredet" #: src/signame.c:174 msgid "File size limit exceeded" msgstr "Grænse for filstørrelse overskredet" #: src/signame.c:177 msgid "Virtual timer expired" msgstr "Virtuel tidsgrænse overskredet" #: src/signame.c:180 msgid "Profiling timer expired" msgstr "Profileringstiden udløb" #: src/signame.c:186 msgid "Window changed" msgstr "Vinduet blev ændret" #: src/signame.c:189 msgid "Continued" msgstr "Fortsættes" #: src/signame.c:192 msgid "Urgent I/O condition" msgstr "Kritisk I/O-tilstand" #: src/signame.c:199 src/signame.c:208 msgid "I/O possible" msgstr "I/O mulig" #: src/signame.c:202 msgid "SIGWIND" msgstr "SIGWIND" #: src/signame.c:205 msgid "SIGPHONE" msgstr "SIGPHONE" #: src/signame.c:211 msgid "Resource lost" msgstr "Resurse tabt" #: src/signame.c:214 msgid "Danger signal" msgstr "Faresignal" #: src/signame.c:217 msgid "Information request" msgstr "Informationsforespørgsel" #: src/signame.c:220 msgid "Floating point co-processor not available" msgstr "Flydendetalshjælpeprocessor ikke tilgængelig" #: src/strcache.c:274 #, c-format msgid "" "\n" "%s No strcache buffers\n" msgstr "" "\n" "%s Ingen strcache-buffere\n" #: src/strcache.c:304 #, c-format msgid "" "\n" "%s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu " "B\n" msgstr "" "\n" "%s strcache-buffere: %lu (%lu) / strenge = %lu / lager = %lu B / middel = " "%lu B\n" #: src/strcache.c:308 #, fuzzy, c-format msgid "" "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B\n" msgstr "" "%s nuværende buf: størrelse = %hu B / brugt = %hu B / antal = %hu / middel = " "%hu B\n" # Ikke sikker pÃ¥ hvad %s er #: src/strcache.c:319 #, c-format msgid "%s other used: total = %lu B / count = %lu / avg = %lu B\n" msgstr "%s øvrigt brugt: i alt = %lu B / antal = %lu / middel = %lu B\n" #: src/strcache.c:322 #, c-format msgid "" "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n" msgstr "" "%s øvrigt frit: i alt = %lu B / maks = %lu B / min = %lu B / middel = %hu B\n" #: src/strcache.c:326 #, c-format msgid "" "\n" "%s strcache performance: lookups = %lu / hit rate = %lu%%\n" msgstr "" "\n" "%s strcache-ydelse: opslag = %lu / træffere = %lu%%\n" #: src/strcache.c:328 msgid "" "# hash-table stats:\n" "# " msgstr "" "# statistik for hashtabel:\n" "# " #: src/variable.c:1653 msgid "automatic" msgstr "automatisk" #: src/variable.c:1656 msgid "default" msgstr "forvalgt" #: src/variable.c:1659 msgid "environment" msgstr "miljø" #: src/variable.c:1662 msgid "makefile" msgstr "makefil" #: src/variable.c:1665 msgid "environment under -e" msgstr "miljø med -e" #: src/variable.c:1668 msgid "command line" msgstr "kommandolinje" #: src/variable.c:1671 msgid "'override' directive" msgstr "\"override\"-direktiv" #: src/variable.c:1682 #, c-format msgid " (from '%s', line %lu)" msgstr " (fra \"%s\", linje %lu)" #: src/variable.c:1745 msgid "# variable set hash-table stats:\n" msgstr "# Statistik for variabelsæt-hash-spande:\n" #: src/variable.c:1756 msgid "" "\n" "# Variables\n" msgstr "" "\n" "# Variabler\n" #: src/variable.c:1760 msgid "" "\n" "# Pattern-specific Variable Values" msgstr "" "\n" "# Mønsterspecifikke variabelværdier" #: src/variable.c:1774 msgid "" "\n" "# No pattern-specific variable values." msgstr "" "\n" "# Ingen mønsterspecifikke variabelværdier." #: src/variable.c:1776 #, c-format msgid "" "\n" "# %u pattern-specific variable values" msgstr "" "\n" "# %u mønsterspecifikke variabelværdier" #: src/variable.h:229 #, c-format msgid "warning: undefined variable '%.*s'" msgstr "advarsel: udefineret variabel \"%.*s\"" #: src/vmsfunctions.c:91 #, c-format msgid "sys$search() failed with %d\n" msgstr "sys$search() mislykkedes med %d\n" #: src/vmsjobs.c:244 #, 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" #: src/vmsjobs.c:681 #, c-format msgid "BUILTIN CD %s\n" msgstr "BUILTIN CD %s\n" #: src/vmsjobs.c:1224 #, c-format msgid "DCL: %s\n" msgstr "DCL: %s\n" #: src/vmsjobs.c:1284 #, c-format msgid "Append output to %s\n" msgstr "Tilføj uddata til slutningen af %s\n" #: src/vmsjobs.c:1309 #, c-format msgid "Append %.*s and cleanup\n" msgstr "Tilføj %.*s og ryd op\n" #: src/vmsjobs.c:1322 #, c-format msgid "Executing %s instead\n" msgstr "Udfører i stedet %s\n" #: src/vpath.c:603 msgid "" "\n" "# VPATH Search Paths\n" msgstr "" "\n" "# VPATH-søgestier\n" #: src/vpath.c:620 msgid "# No 'vpath' search paths." msgstr "# Ingen \"vpath\"-søgestier." #: src/vpath.c:622 #, c-format msgid "" "\n" "# %u 'vpath' search paths.\n" msgstr "" "\n" "# %u \"vpath\"-søgestier.\n" #: src/vpath.c:625 msgid "" "\n" "# No general ('VPATH' variable) search path." msgstr "" "\n" "# Ingen generel (\"VPATH\"-variabel) søgesti." #: src/vpath.c:631 msgid "" "\n" "# General ('VPATH' variable) search path:\n" "# " msgstr "" "\n" "# Generel (\"VPATH\"-variabel) søgesti:\n" "# " #: src/w32/w32os.c:44 #, c-format msgid "Jobserver slots limited to %d\n" msgstr "Jobserverpladser begrænset til %d\n" #: src/w32/w32os.c:60 #, c-format msgid "creating jobserver semaphore: (Error %ld: %s)" msgstr "opretter jobserver-semafor: (Fejl %ld: %s)" #: src/w32/w32os.c:79 #, c-format msgid "" "internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)" msgstr "intern fejl: kan ikke Ã¥bne jobserver-semafor \"%s\": (Fejl %ld: %s)" #: src/w32/w32os.c:82 #, c-format msgid "Jobserver client (semaphore %s)\n" msgstr "Jobserverklient (semafor %s)\n" #: src/w32/w32os.c:123 #, c-format msgid "release jobserver semaphore: (Error %ld: %s)" msgstr "frigiv jobserver-semafor: (Fejl %ld: %s)" #: src/w32/w32os.c:194 #, c-format msgid "semaphore or child process wait: (Error %ld: %s)" msgstr "ventende pÃ¥ semafor eller underproces: (Fejl %ld: %s)" #~ msgid "%s: %s: Command not found\n" #~ msgstr "%s: %s: Kommando ikke fundet\n" #~ msgid "%s[%u]: %s: Command not found\n" #~ msgstr "%s[%u]: %s: Kommando ikke fundet\n" #~ msgid "%s: Shell program not found" #~ msgstr "%s; Skalprogram ikke fundet" #~ msgid "%s is suspending for 30 seconds..." #~ msgstr "%s er standset i 30 sekunder..." #~ msgid "done sleep(30). Continuing.\n" #~ msgstr "udført sleep(30). Fortsætter.\n" #~ msgid "Unknown error %d" #~ msgstr "Ukendt fejl %d" # "modifikationstid" her fordi ændringstid er 'change time' som er noget andet! #~ msgid "Warning: File '%s' has modification time in the future" #~ msgstr "Advarsel: Modifikationstiden for filen \"%s\" er i fremtiden" #~ msgid " terminal." #~ msgstr " terminale." #~ 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" #~ msgid "Invoking builtin recipe to update target `%s'.\n" #~ msgstr "Kører indbyggede kommandoer for at opdatere mÃ¥let '%s'.\n" #~ 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" #~ msgid "write error" #~ msgstr "skrivefejl" #~ msgid "%s # of strcache buffers: %d (* %d B/buffer = %d B)\n" #~ msgstr "%s # strcache-buffere: %d (* %d B/buffer = %d B)\n" #~ msgid "" #~ "\n" #~ "# strcache hash-table stats:\n" #~ "# " #~ msgstr "" #~ "\n" #~ "# 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" #~ msgid "Got a SIGCHLD; %u unreaped children.\n" #~ msgstr "Fik et SIGCHLD; %u uhøstede børn.\n" #~ msgid "-warning, CTRL-Y will leave sub-process(es) around.\n" #~ msgstr "-advarsel, CTRL-Y vil efterlade underproces(ser).\n" #~ msgid "Do not specify -j or --jobs if sh.exe is not available." #~ msgstr "Angiv ikke -j eller --jobs hvis sh.exe ikke er tilgængelig." #~ msgid "Resetting make for single job mode." #~ msgstr "Sætter make tilbage til enkelt job-tilstand." #~ 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" #~ "%sPARTICULAR PURPOSE.\n" #~ msgstr "" #~ "%sDette er frit programmel; se kildeteksten for kopieringsbetingelser.\n" #~ "%sDer er INGEN garanti; end ikke for SALGBARHED eller EGNETHED TIL NOGET\n" #~ "%sBESTEMT FORMÃ…L.\n" #~ msgid "extraneous `endef'" #~ msgstr "fremmed 'endef'" #~ msgid "empty `override' directive" #~ msgstr "tomt 'override'-direktiv" #~ msgid "invalid `override' directive" #~ msgstr "ugyldigt 'override'-direktiv" #~ msgid "no file name for `%sinclude'" #~ msgstr "intet filnavn for '%sinclude'" #~ msgid "target `%s' leaves prerequisite pattern empty" #~ msgstr "mÃ¥l '%s' efterlader forudsætningsmønstret tomt" #~ msgid "" #~ "\n" #~ "# No files." #~ msgstr "" #~ "\n" #~ "# Ingen filer." #~ msgid "" #~ "\n" #~ "# %u files in %u hash buckets.\n" #~ msgstr "" #~ "\n" #~ "# %u filer i %u hash-spande .\n" #~ msgid "# average %.3f files per bucket, max %u files in one bucket.\n" #~ msgstr "# %.3f filer per spand i gennemsnit, maks. %u filer i en spand.\n" #~ msgid "Suspend process to allow a debugger to attach" #~ msgstr "Stands proces for at tillade et fejlsøgningsprogram at hænge sig pÃ¥" #~ msgid "# No variables." #~ msgstr "# Ingen variabler." #~ msgid "# average of %.1f variables per bucket, max %u in one bucket.\n" #~ msgstr "# %.1f variabler per spand i gennemsnit, maks. %u i en spand.\n" #~ msgid "# average of %d.%d variables per bucket, max %u in one bucket.\n" #~ msgstr "# %d.%d variabler per spand i gennemsnit, maks. %u i en spand.\n" make-4.3/po/pt.po0000644000175000017500000015702113611136531010625 00000000000000# Portuguese (Portugal) translation for the "make" package. # Copyright (C) 2018 Free Software Foundation, Inc. # This file is distributed under the same license as the make package. # Pedro Albuquerque , 2018, 2019, 2020. # msgid "" msgstr "" "Project-Id-Version: GNU make 4.2.93\n" "Report-Msgid-Bugs-To: bug-make@gnu.org\n" "POT-Creation-Date: 2020-01-19 15:34-0500\n" "PO-Revision-Date: 2020-01-04 07:21+0000\n" "Last-Translator: Pedro Albuquerque \n" "Language-Team: Portuguese \n" "Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Gtranslator 2.91.7\n" #: src/ar.c:46 #, c-format msgid "attempt to use unsupported feature: '%s'" msgstr "tentativa de usar funcionalidade não suportada: \"%s\"" #: src/ar.c:123 #, c-format msgid "touch archive member is not available on VMS" msgstr "membro de touch arquivo indisponível em VMS" #: src/ar.c:147 #, c-format msgid "touch: Archive '%s' does not exist" msgstr "touch: arquivo \"%s\" não existe" #: src/ar.c:150 #, c-format msgid "touch: '%s' is not a valid archive" msgstr "touch: \"%s\" não é um arquivo válido" #: src/ar.c:157 #, c-format msgid "touch: Member '%s' does not exist in '%s'" msgstr "touch: membro \"%s\" não existe em \"%s\"" #: src/ar.c:164 #, c-format msgid "touch: Bad return code from ar_member_touch on '%s'" msgstr "touch: mau código de retorno de ar_member_touch em \"%s\"" #: src/arscan.c:130 #, c-format msgid "lbr$set_module() failed to extract module info, status = %d" msgstr "lbr$set_module() falhou ao extrair informação do módulo, estado = %d" #: src/arscan.c:236 #, c-format msgid "lbr$ini_control() failed with status = %d" msgstr "lbr$ini_control() falhou com estado = %d" #: src/arscan.c:261 #, c-format msgid "unable to open library '%s' to lookup member status %d" msgstr "" "impossível abrir biblioteca \"%s\" para procurar estado do membro \"%d\"" #: src/arscan.c:944 #, c-format msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n" msgstr "Membro \"%s\"%s: %ld bytes em %ld (%ld).\n" #: src/arscan.c:945 msgid " (name might be truncated)" msgstr " (nome pode estar truncado)" #: src/arscan.c:947 #, c-format msgid " Date %s" msgstr " Data %s" #: src/arscan.c:948 #, c-format msgid " uid = %d, gid = %d, mode = 0%o.\n" msgstr " uid = %d, gid = %d, modo = 0%o.\n" #: src/commands.c:403 #, c-format msgid "Recipe has too many lines (%ud)" msgstr "Receita com demasiadas linhas (%ud)" #: src/commands.c:504 msgid "*** Break.\n" msgstr "*** Break.\n" #: src/commands.c:628 #, c-format msgid "*** [%s] Archive member '%s' may be bogus; not deleted" msgstr "*** [%s] membro do arquivo \"%s\" pode ser fictício; não eliminado" #: src/commands.c:632 #, c-format msgid "*** Archive member '%s' may be bogus; not deleted" msgstr "*** membro do arquivo \"%s\" pode ser fictício; não eliminado" #: src/commands.c:646 #, c-format msgid "*** [%s] Deleting file '%s'" msgstr "*** [%s] a eliminar ficheiro \"%s\"" #: src/commands.c:648 #, c-format msgid "*** Deleting file '%s'" msgstr "*** a eliminar ficheiro \"%s\"" #: src/commands.c:684 msgid "# recipe to execute" msgstr "# receita a executar" #: src/commands.c:687 msgid " (built-in):" msgstr " (interno):" #: src/commands.c:689 #, c-format msgid " (from '%s', line %lu):\n" msgstr " (de \"%s\", linha %lu):\n" #: src/dir.c:1073 msgid "" "\n" "# Directories\n" msgstr "" "\n" "# Pastas\n" #: src/dir.c:1085 #, c-format msgid "# %s: could not be stat'd.\n" msgstr "# %s: impossível obter estatísticas.\n" #: src/dir.c:1089 msgid "# %s (key %s, mtime %I64u): could not be opened.\n" msgstr "# %s (chave %s, mtime %I64u): impossível abrir.\n" #: src/dir.c:1094 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n" msgstr "# %s (dispositivo %d, inode [%d,%d,%d]): impossível abrir.\n" #: src/dir.c:1099 #, c-format msgid "# %s (device %ld, inode %ld): could not be opened.\n" msgstr "# %s (dispositivo %ld, inode %ld): impossível abrir.\n" #: src/dir.c:1126 msgid "# %s (key %s, mtime %I64u): " msgstr "# %s (chave %s, mtime %I64u): " #: src/dir.c:1131 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): " msgstr "# %s (dispositivo %d, inode [%d,%d,%d]): " #: src/dir.c:1136 #, c-format msgid "# %s (device %ld, inode %ld): " msgstr "# %s (dispositivo %ld, inode %ld): " #: src/dir.c:1142 src/dir.c:1163 msgid "No" msgstr "Não" #: src/dir.c:1145 src/dir.c:1166 msgid " files, " msgstr " ficheiros, " #: src/dir.c:1147 src/dir.c:1168 msgid "no" msgstr "não" #: src/dir.c:1150 msgid " impossibilities" msgstr " impossibilidades" #: src/dir.c:1154 msgid " so far." msgstr " até agora." #: src/dir.c:1171 #, c-format msgid " impossibilities in %lu directories.\n" msgstr " impossibilidades em %lu pastas.\n" #: src/expand.c:125 #, c-format msgid "Recursive variable '%s' references itself (eventually)" msgstr "Variável recursiva \"%s\" referencia-se a si própria (eventualmente)" #: src/expand.c:271 #, c-format msgid "unterminated variable reference" msgstr "referencia de variável não terminada" #: src/file.c:278 #, c-format msgid "Recipe was specified for file '%s' at %s:%lu," msgstr "Receita especificada para ficheiro \"%s\" em %s:%lu," #: src/file.c:283 #, c-format msgid "Recipe for file '%s' was found by implicit rule search," msgstr "" "Receita para ficheiro \"%s\" foi encontrada por procura com regra implícita," #: src/file.c:287 #, c-format msgid "but '%s' is now considered the same file as '%s'." msgstr "mas \"%s\" é agora considerado o mesmo ficheiro que \"%s\"." #: src/file.c:290 #, c-format msgid "Recipe for '%s' will be ignored in favor of the one for '%s'." msgstr "Receita para \"%s\" será ignorada em favor da receita para \"%s\"." #: src/file.c:310 #, c-format msgid "can't rename single-colon '%s' to double-colon '%s'" msgstr "impossível renomear dois-pontos \"%s\" para dois-pontos duplos \"%s\"" #: src/file.c:316 #, c-format msgid "can't rename double-colon '%s' to single-colon '%s'" msgstr "impossível renomear dois-pontos duplos \"%s\" para dois-pontos \"%s\"" #: src/file.c:408 #, c-format msgid "*** Deleting intermediate file '%s'" msgstr "*** A eliminar ficheiro intermédio \"%s\"" #: src/file.c:412 #, c-format msgid "Removing intermediate files...\n" msgstr "A remover ficheiros intermédios...\n" #: src/file.c:872 msgid "Current time" msgstr "Hora actual" #: src/file.c:876 #, c-format msgid "%s: Timestamp out of range; substituting %s" msgstr "%s: datação fora do intervalo; a substituir %s" #: src/file.c:1016 msgid "# Not a target:" msgstr "# Não é um alvo:" #: src/file.c:1021 msgid "# Precious file (prerequisite of .PRECIOUS)." msgstr "# Ficheiro precioso (pré-requisito de .PRECIOUS)." #: src/file.c:1023 msgid "# Phony target (prerequisite of .PHONY)." msgstr "# Alvo falso (pré-requisito de .PHONY)." #: src/file.c:1025 msgid "# Command line target." msgstr "# Alvo da linha de comandos." #: src/file.c:1027 msgid "# A default, MAKEFILES, or -include/sinclude makefile." msgstr "# A predefinição, MAKEFILES, ou -include/sinclude makefile." #: src/file.c:1029 msgid "# Builtin rule" msgstr "# Regra interna" #: src/file.c:1031 msgid "# Implicit rule search has been done." msgstr "# Foi feita uma procura com regra implícita." #: src/file.c:1032 msgid "# Implicit rule search has not been done." msgstr "# Não foi feita uma procura com regra implícita." #: src/file.c:1034 #, c-format msgid "# Implicit/static pattern stem: '%s'\n" msgstr "# Haste de padrão implícito/estático: \"%s\"\n" #: src/file.c:1036 msgid "# File is an intermediate prerequisite." msgstr "# O ficheiro é um pré-requisito imediato." #: src/file.c:1040 msgid "# Also makes:" msgstr "# Também faz:" #: src/file.c:1046 msgid "# Modification time never checked." msgstr "# Hora de modificação nunca verificada." #: src/file.c:1048 msgid "# File does not exist." msgstr "# O ficheiro não existe." #: src/file.c:1050 msgid "# File is very old." msgstr "# O ficheiro é muito antigo." #: src/file.c:1055 #, c-format msgid "# Last modified %s\n" msgstr "# Última modificação %s\n" #: src/file.c:1058 msgid "# File has been updated." msgstr "# O ficheiro foi actualizado." #: src/file.c:1058 msgid "# File has not been updated." msgstr "# O ficheiro não foi actualizado." #: src/file.c:1062 msgid "# Recipe currently running (THIS IS A BUG)." msgstr "# Receita actualmente em execução (ISTO É UM ERRO)." #: src/file.c:1065 msgid "# Dependencies recipe running (THIS IS A BUG)." msgstr "# Receita de dependências em execução (ISTO É UM ERRO)." #: src/file.c:1074 msgid "# Successfully updated." msgstr "# Actualizado com sucesso." #: src/file.c:1078 msgid "# Needs to be updated (-q is set)." msgstr "# Precisa de actualização (-q está definido)." #: src/file.c:1081 msgid "# Failed to be updated." msgstr "# Falha ao actualizar." #: src/file.c:1086 msgid "# Invalid value in 'command_state' member!" msgstr "# Valor inválido no membro \"command_state\"!" #: src/file.c:1105 msgid "" "\n" "# Files" msgstr "" "\n" "# Ficheiros" #: src/file.c:1109 msgid "" "\n" "# files hash-table stats:\n" "# " msgstr "" "\n" "# estatísticas da hash-table dos ficheiros:\n" "# " #: src/file.c:1119 #, c-format msgid "%s: Field '%s' not cached: %s" msgstr "%s: campo \"%s\" não armazenado em cache: %s" #: src/function.c:794 msgid "non-numeric first argument to 'word' function" msgstr "primeiro argumento de função \"word\" não-numérico" #: src/function.c:799 #, c-format msgid "first argument to 'word' function must be greater than 0" msgstr "o primeiro argumento de função \"word\" tem de ser maior que 0" #: src/function.c:819 msgid "non-numeric first argument to 'wordlist' function" msgstr "primeiro argumento de função \"wordlist\" não-numérico" #: src/function.c:821 msgid "non-numeric second argument to 'wordlist' function" msgstr "segundo argumento de função \"wordlist\" não-numérico" #: src/function.c:1533 #, c-format msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n" msgstr "windows32_openpipe: DuplicateHandle(In) falhou (e=%ld)\n" #: src/function.c:1557 #, c-format msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n" msgstr "windows32_openpipe: DuplicateHandle(Err) falhou (e=%ld)\n" #: src/function.c:1564 #, c-format msgid "CreatePipe() failed (e=%ld)\n" msgstr "CreatePipe() falhou (e=%ld)\n" #: src/function.c:1572 #, c-format msgid "windows32_openpipe(): process_init_fd() failed\n" msgstr "windows32_openpipe(): process_init_fd() falhou\n" #: src/function.c:1857 #, c-format msgid "Cleaning up temporary batch file %s\n" msgstr "A limpar ficheiro batch temporário %s\n" #: src/function.c:2230 src/function.c:2255 #, c-format msgid "file: missing filename" msgstr "ficheiro: nome em falta" #: src/function.c:2234 src/function.c:2265 #, c-format msgid "open: %s: %s" msgstr "abrir: %s: %s" #: src/function.c:2242 #, c-format msgid "write: %s: %s" msgstr "escrever: %s: %s" #: src/function.c:2245 src/function.c:2282 #, c-format msgid "close: %s: %s" msgstr "fechar: %s: %s" #: src/function.c:2258 #, c-format msgid "file: too many arguments" msgstr "ficheiro: demasiados argumentos" #: src/function.c:2277 #, c-format msgid "read: %s: %s" msgstr "ler: %s: %s" #: src/function.c:2290 #, c-format msgid "file: invalid file operation: %s" msgstr "ficheiro: operação inválida: %s" #: src/function.c:2405 #, c-format msgid "insufficient number of arguments (%d) to function '%s'" msgstr "número insuficiente de argumentos (%d) para a função \"%s\"" #: src/function.c:2417 #, c-format msgid "unimplemented on this platform: function '%s'" msgstr "não implementada nesta plataforma: função \"%s\"" #: src/function.c:2483 #, c-format msgid "unterminated call to function '%s': missing '%c'" msgstr "chamada não terminada à função \"%s\": \"%c\" em falta" #: src/function.c:2667 #, c-format msgid "Empty function name" msgstr "Nome de função vazio" #: src/function.c:2669 #, c-format msgid "Invalid function name: %s" msgstr "Nome de função inválido: %s" #: src/function.c:2671 #, c-format msgid "Function name too long: %s" msgstr "Nome de função muito longo: %s" #: src/function.c:2674 #, c-format msgid "Invalid minimum argument count (%u) for function %s" msgstr "Número mínimo de argumentos (%u) inválido para a função %s" #: src/function.c:2677 #, c-format msgid "Invalid maximum argument count (%u) for function %s" msgstr "Número máximo de argumentos (%u) inválido para a função %s" #: src/getopt.c:659 #, c-format msgid "%s: option '%s' is ambiguous\n" msgstr "%s: a opção \"%s\" é ambígua\n" #: src/getopt.c:683 #, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s: a opção \"--%s\" não permite um argumento\n" #: src/getopt.c:688 #, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s: a opção \"%c%s\" não permite um argumento\n" #: src/getopt.c:705 src/getopt.c:878 #, c-format msgid "%s: option '%s' requires an argument\n" msgstr "%s: a opção \"%s\" requer um argumento\n" #: src/getopt.c:734 #, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s: opção não reconhecida \"--%s\"\n" #: src/getopt.c:738 #, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s: opção não reconhecida \"%c%s\"\n" #: src/getopt.c:764 #, c-format msgid "%s: illegal option -- %c\n" msgstr "%s: opção ilegal -- %c\n" #: src/getopt.c:767 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s: opção inválida -- %c\n" #: src/getopt.c:797 src/getopt.c:927 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: a opção requer um argumento -- %c\n" #: src/getopt.c:844 #, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s: a opção \"-W %s\" é ambígua\n" #: src/getopt.c:862 #, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s: a opção \"-W %s\" não permite argumentos\n" #: src/guile.c:58 #, c-format msgid "guile: Expanding '%s'\n" msgstr "guile: a expandir \"%s\"\n" #: src/guile.c:74 #, c-format msgid "guile: Evaluating '%s'\n" msgstr "guile: a avaliar \"%s\"\n" #: src/hash.c:50 #, c-format msgid "can't allocate %lu bytes for hash table: memory exhausted" msgstr "impossível alocar %lu bytes para a tabela de hash: memória esgotada" #: src/hash.c:280 #, c-format msgid "Load=%lu/%lu=%.0f%%, " msgstr "Load=%lu/%lu=%.0f%%, " #: src/hash.c:282 #, c-format msgid "Rehash=%u, " msgstr "Rehash=%u, " #: src/hash.c:283 #, c-format msgid "Collisions=%lu/%lu=%.0f%%" msgstr "Collisions=%lu/%lu=%.0f%%" #: src/implicit.c:38 #, c-format msgid "Looking for an implicit rule for '%s'.\n" msgstr "A procurar regra implícita para \"%s\".\n" #: src/implicit.c:54 #, c-format msgid "Looking for archive-member implicit rule for '%s'.\n" msgstr "A procurar regra implícita de membro de arquivo para \"%s\".\n" #: src/implicit.c:311 #, c-format msgid "Avoiding implicit rule recursion.\n" msgstr "A evitar recursividade de regra implícita.\n" #: src/implicit.c:484 #, c-format msgid "Stem too long: '%s%.*s'.\n" msgstr "Haste muito longa: \"%s%.*s\".\n" #: src/implicit.c:490 #, c-format msgid "Trying pattern rule with stem '%.*s'.\n" msgstr "A tentar regra padrão com haste \"%.*s\".\n" #: src/implicit.c:717 #, c-format msgid "Rejecting impossible rule prerequisite '%s'.\n" msgstr "A rejeitar pré-requisito de regra \"%s\" impossível.\n" #: src/implicit.c:718 #, c-format msgid "Rejecting impossible implicit prerequisite '%s'.\n" msgstr "A rejeitar pré-requisito implícito \"%s\" impossível.\n" #: src/implicit.c:732 #, c-format msgid "Trying rule prerequisite '%s'.\n" msgstr "A tentar pré-requisito de regra \"%s\".\n" #: src/implicit.c:733 #, c-format msgid "Trying implicit prerequisite '%s'.\n" msgstr "A tentar pré-requisito implícito \"%s\".\n" #: src/implicit.c:772 #, c-format msgid "Found prerequisite '%s' as VPATH '%s'\n" msgstr "Encontrado pré-requisito \"%s\" como VPATH \"%s\"\n" #: src/implicit.c:786 #, c-format msgid "Looking for a rule with intermediate file '%s'.\n" msgstr "A procurar regra com ficheiro intermédio \"%s\".\n" #: src/job.c:370 msgid "Cannot create a temporary file\n" msgstr "Impossível criar ficheiro temporário\n" #: src/job.c:548 msgid " (core dumped)" msgstr " (núcleo despejado)" #: src/job.c:553 msgid " (ignored)" msgstr " (ignorado)" #: src/job.c:557 src/job.c:1892 msgid "" msgstr "" #: src/job.c:573 #, c-format msgid "%s[%s: %s] Error %d%s" msgstr "%s[%s: %s] Erro %d%s" #: src/job.c:662 #, c-format msgid "*** Waiting for unfinished jobs...." msgstr "*** A aguardar por trabalhos não terminados...." #: src/job.c:704 #, c-format msgid "Live child %p (%s) PID %s %s\n" msgstr "Filho vivo %p (%s) PID %s %s\n" #: src/job.c:706 src/job.c:900 src/job.c:1072 src/job.c:1644 #, c-format msgid " (remote)" msgstr " (remoto)" #: src/job.c:898 #, c-format msgid "Reaping winning child %p PID %s %s\n" msgstr "A recolher filho ganhador %p PID %s %s\n" #: src/job.c:899 #, c-format msgid "Reaping losing child %p PID %s %s\n" msgstr "A recolher filho perdedor %p PID %s %s\n" #: src/job.c:950 #, c-format msgid "Cleaning up temp batch file %s\n" msgstr "A limpar ficheiro batch temporário %s\n" #: src/job.c:956 #, c-format msgid "Cleaning up temp batch file %s failed (%d)\n" msgstr "A limpar ficheiro batch temporário %s falhou (%d)\n" #: src/job.c:1071 #, c-format msgid "Removing child %p PID %s%s from chain.\n" msgstr "A remover filho %p PID %s%s da cadeia.\n" #: src/job.c:1120 #, c-format msgid "Released token for child %p (%s).\n" msgstr "Símbolo lançado para filho %p (%s).\n" #: src/job.c:1575 src/job.c:2487 #, c-format msgid "process_easy() failed to launch process (e=%ld)\n" msgstr "process_easy() falhou ao lançar processo (e=%ld)\n" #: src/job.c:1579 src/job.c:2491 #, c-format msgid "" "\n" "Counted %d args in failed launch\n" msgstr "" "\n" "Contados %d argumentos no lançamento falhado\n" #: src/job.c:1642 #, c-format msgid "Putting child %p (%s) PID %s%s on the chain.\n" msgstr "A pôr filho %p (%s) PID %s%s na cadeia.\n" #: src/job.c:1875 #, c-format msgid "Obtained token for child %p (%s).\n" msgstr "Obtido símbolo para filho %p (%s).\n" #: src/job.c:1902 #, c-format msgid "%s: target '%s' does not exist" msgstr "%s: alvo \"%s\" não existe" #: src/job.c:1905 #, c-format msgid "%s: update target '%s' due to: %s" msgstr "%s: alvo actualizado \"%s\" devido a: %s" #: src/job.c:2108 #, c-format msgid "cannot enforce load limits on this operating system" msgstr "Impossível forçar limites de carga neste sistema operativo" #: src/job.c:2110 msgid "cannot enforce load limit: " msgstr "Impossível forçar limite de carga: " #: src/job.c:2200 #, c-format msgid "no more file handles: could not duplicate stdin\n" msgstr "não há mais gestão de ficheiros: impossível duplicar stdin\n" #: src/job.c:2212 #, c-format msgid "no more file handles: could not duplicate stdout\n" msgstr "não há mais gestão de ficheiros: impossível duplicar stdout\n" #: src/job.c:2226 #, c-format msgid "no more file handles: could not duplicate stderr\n" msgstr "não há mais gestão de ficheiros: impossível duplicar stderr\n" #: src/job.c:2241 #, c-format msgid "Could not restore stdin\n" msgstr "impossível restaurar stdin\n" #: src/job.c:2249 #, c-format msgid "Could not restore stdout\n" msgstr "impossível restaurar stdout\n" #: src/job.c:2257 #, c-format msgid "Could not restore stderr\n" msgstr "impossível restaurar stderr\n" #: src/job.c:2520 #, c-format msgid "make reaped child pid %s, still waiting for pid %s\n" msgstr "fazer pid %s de filho recolhido, ainda à espera por pid %s\n" #: src/job.c:2623 #, c-format msgid "spawnvpe: environment space might be exhausted" msgstr "spawnvpe: o espaço de ambiente pode estar esgotado" #: src/job.c:2862 #, c-format msgid "$SHELL changed (was '%s', now '%s')\n" msgstr "$SHELL alterada (era \"%s\", é agora \"%s\")\n" #: src/job.c:3300 src/job.c:3485 #, c-format msgid "Creating temporary batch file %s\n" msgstr "A criar ficheiro batch temporaÅ•io %s\n" #: src/job.c:3308 #, c-format msgid "" "Batch file contents:\n" "\t@echo off\n" msgstr "" "Conteúdo do ficheiro batch:\n" "\t@echo off\n" #: src/job.c:3497 #, c-format msgid "" "Batch file contents:%s\n" "\t%s\n" msgstr "" "Conteúdo do ficheiro batch:%s\n" "\t%s\n" #: src/job.c:3605 #, c-format msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n" msgstr "%s (linha %d) Mau contexto de shell (!unixy && !batch_mode_shell)\n" #: src/load.c:60 #, c-format msgid "Failed to open global symbol table: %s" msgstr "Falha ao abrir a tabela global de símbolos: %s" #: src/load.c:97 #, c-format msgid "Loaded object %s is not declared to be GPL compatible" msgstr "Objecto carregado %s não está declarado como compatível GPL" #: src/load.c:104 #, c-format msgid "Failed to load symbol %s from %s: %s" msgstr "Falha ao carregar símbolo %s de %s: %s" #: src/load.c:149 #, c-format msgid "Empty symbol name for load: %s" msgstr "Nome de símbolo vazio para carga: %s" #: src/load.c:204 #, c-format msgid "Loading symbol %s from %s\n" msgstr "A carregar símbolo %s de %s\n" #: src/load.c:256 #, c-format msgid "The 'load' operation is not supported on this platform." msgstr "A operação \"load\" não é suportada nesta plataforma." #: src/main.c:335 msgid "Options:\n" msgstr "Opções:\n" #: src/main.c:336 msgid " -b, -m Ignored for compatibility.\n" msgstr " -b, -m ignora para compatibilidade.\n" #: src/main.c:338 msgid " -B, --always-make Unconditionally make all targets.\n" msgstr " -B, --always-make faz todos os alvos incondicionalmente.\n" #: src/main.c:340 msgid "" " -C DIRECTORY, --directory=DIRECTORY\n" " Change to DIRECTORY before doing anything.\n" msgstr "" " -C PASTA, --directory=PASTA\n" " muda para PASTA antes de qualquer outra " "coisa.\n" #: src/main.c:343 msgid " -d Print lots of debugging information.\n" msgstr " -d imprime muita informação de depuração.\n" #: src/main.c:345 msgid "" " --debug[=FLAGS] Print various types of debugging information.\n" msgstr "" " --debug[=BANDEIRAS] imprime vários tipos de informação de " "depuração.\n" #: src/main.c:347 msgid "" " -e, --environment-overrides\n" " Environment variables override makefiles.\n" msgstr "" " -e, --environment-overrides\n" " substitui as variáveis de ambiente com os " "makefiles.\n" #: src/main.c:350 msgid "" " -E STRING, --eval=STRING Evaluate STRING as a makefile statement.\n" msgstr "" " -E CADEIA, --eval=CADEIA Avalia CADEIA como declaração makefile.\n" #: src/main.c:352 msgid "" " -f FILE, --file=FILE, --makefile=FILE\n" " Read FILE as a makefile.\n" msgstr "" " -f FICHEIRO, --file=FICHEIRO, --makefile=FICHEIRO\n" " lê FICHEIRO como makefile.\n" #: src/main.c:355 msgid " -h, --help Print this message and exit.\n" msgstr " -h, --help mostra esta mensagem e sai.\n" #: src/main.c:357 msgid " -i, --ignore-errors Ignore errors from recipes.\n" msgstr " -i, --ignore-errors ignora erros das receitas.\n" #: src/main.c:359 msgid "" " -I DIRECTORY, --include-dir=DIRECTORY\n" " Search DIRECTORY for included makefiles.\n" msgstr "" " -I PASTA, --include-dir=PASTA\n" " procura em PASTA por makefiles incluídos.\n" #: src/main.c:362 msgid "" " -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no " "arg.\n" msgstr "" " -j [N], --jobs[=N] permite N tarefas de uma só vez; tarefas " "infinitas sem argumento.\n" #: src/main.c:364 msgid "" " -k, --keep-going Keep going when some targets can't be made.\n" msgstr "" " -k, --keep-going continua quando alguns alvos não podem ser " "feitos.\n" #: src/main.c:366 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" " não começa múltiplas tarefas a não ser que a " "carga seja menor que N.\n" #: src/main.c:369 msgid "" " -L, --check-symlink-times Use the latest mtime between symlinks and " "target.\n" msgstr "" " -L, --check-symlink-times usa a última mtime entre ligações simbólicas e " "alvo.\n" #: src/main.c:371 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ão executa realmente nenhuma receita; só as " "imprime.\n" #: src/main.c:374 msgid "" " -o FILE, --old-file=FILE, --assume-old=FILE\n" " Consider FILE to be very old and don't remake " "it.\n" msgstr "" " -o FICHEIRO, --old-file=FICHEIRO, --assume-old=FICHEIRO\n" " Considera FICHEIRO muito antigo e não o " "refaz.\n" #: src/main.c:377 msgid "" " -O[TYPE], --output-sync[=TYPE]\n" " Synchronize output of parallel jobs by TYPE.\n" msgstr "" " -O[TIPO], --output-sync[=TIPO]\n" " sincroniza saída de tarefas paralelas por " "TIPO.\n" #: src/main.c:380 msgid " -p, --print-data-base Print make's internal database.\n" msgstr "" " -p, --print-data-base imprime a base de dados interna do make.\n" #: src/main.c:382 msgid "" " -q, --question Run no recipe; exit status says if up to " "date.\n" msgstr "" " -q, --question não executa receitas; estado de saída mostra " "actualização.\n" #: src/main.c:384 msgid " -r, --no-builtin-rules Disable the built-in implicit rules.\n" msgstr "" " -r, --no-builtin-rules desactiva as regras implícitas internas.\n" #: src/main.c:386 msgid " -R, --no-builtin-variables Disable the built-in variable settings.\n" msgstr "" " -R, --no-builtin-variables desactiva as definições de variáveis " "internas.\n" #: src/main.c:388 msgid " -s, --silent, --quiet Don't echo recipes.\n" msgstr " -s, --silent, --quiet não fazer eco das receitas.\n" #: src/main.c:390 msgid " --no-silent Echo recipes (disable --silent mode).\n" msgstr "" " --no-silent Ecoa receitas (desactiva o modo --silent).\n" #: src/main.c:392 msgid "" " -S, --no-keep-going, --stop\n" " Turns off -k.\n" msgstr "" " -S, --no-keep-going, --stop\n" " desliga -k.\n" #: src/main.c:395 msgid " -t, --touch Touch targets instead of remaking them.\n" msgstr " -t, --touch tocar nos alvos em vez de os refazer.\n" #: src/main.c:397 msgid " --trace Print tracing information.\n" msgstr " --trace imprime informação de rastreio.\n" #: src/main.c:399 msgid "" " -v, --version Print the version number of make and exit.\n" msgstr " -v, --version mostra informação da versão e sai.\n" #: src/main.c:401 msgid " -w, --print-directory Print the current directory.\n" msgstr " -w, --print-directory imprime a pasta actual.\n" #: src/main.c:403 msgid "" " --no-print-directory Turn off -w, even if it was turned on " "implicitly.\n" msgstr "" " --no-print-directory desliga -w, mesmo que estivesse implicitamente " "ligado.\n" #: src/main.c:405 msgid "" " -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n" " Consider FILE to be infinitely new.\n" msgstr "" " -W FICHEIRO, --what-if=FICHEIRO, --new-file=FICHEIRO, --assume-" "new=FICHEIRO\n" " considea FICHEIRO infinitamente novo.\n" #: src/main.c:408 msgid "" " --warn-undefined-variables Warn when an undefined variable is " "referenced.\n" msgstr "" " --warn-undefined-variables avisa quando uma variável indefinida é " "referenciada.\n" #: src/main.c:671 #, c-format msgid "empty string invalid as file name" msgstr "cadeia vazia inválida como nome de ficheiro" #: src/main.c:754 #, c-format msgid "unknown debug level specification '%s'" msgstr "especificação de nível de depuração \"%s\" desconhecida" #: src/main.c:794 #, c-format msgid "unknown output-sync type '%s'" msgstr "tipo de output-sync \"%s\" desconhecido" #: src/main.c:849 #, c-format msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n" msgstr "%s: apanhado Interrupção/Excepção (código = 0x%lx, endereço = 0x%p)\n" #: src/main.c:856 #, c-format msgid "" "\n" "Unhandled exception filter called from program %s\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" msgstr "" "\n" "Filtro de excepção não gerido chamado do programa %s\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" #: src/main.c:864 #, 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" #: src/main.c:865 #, 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" #: src/main.c:941 src/main.c:956 #, c-format msgid "find_and_set_shell() setting default_shell = %s\n" msgstr "find_and_set_shell() a definir default_shell = %s\n" #: src/main.c:1009 #, c-format msgid "find_and_set_shell() path search set default_shell = %s\n" msgstr "caminho de procura find_and_set_shell() define default_shell = %s\n" #: src/main.c:1609 #, c-format msgid "" "warning: jobserver unavailable: using -j1. Add '+' to parent make rule." msgstr "" "aviso: jobserver indisponível: a usar -j1. Adicionar \"+\" à regra-mãe make." #: src/main.c:1617 #, c-format msgid "warning: -j%d forced in submake: resetting jobserver mode." msgstr "aviso: -j%d forçado em submake: a repor modo jobserver." #: src/main.c:1781 #, c-format msgid "Makefile from standard input specified twice." msgstr "Makefile da entrada padrão especificado duas vezes." #: src/main.c:1819 src/vmsjobs.c:1248 msgid "fopen (temporary file)" msgstr "fopen (ficheiro temporário)" #: src/main.c:1825 msgid "fwrite (temporary file)" msgstr "fwrite (ficheiro temporário)" #: src/main.c:2004 #, c-format msgid "warning: -j%d forced in makefile: resetting jobserver mode." msgstr "aviso: -j%d forçado em makefile: a repor modo jobserver." #: src/main.c:2068 #, c-format msgid "Parallel jobs (-j) are not supported on this platform." msgstr "Não são suportadas tarefas paralelas (-j) nesta platforma." #: src/main.c:2069 #, c-format msgid "Resetting to single job (-j1) mode." msgstr "A repor modo de tarefa única (-j1)." #: src/main.c:2109 #, c-format msgid "Symbolic links not supported: disabling -L." msgstr "Não são suportadas ligações simbólicas: a desactivar -L" #: src/main.c:2190 #, c-format msgid "Updating makefiles....\n" msgstr "A actualizar makefiles....\n" #: src/main.c:2226 #, c-format msgid "Makefile '%s' might loop; not remaking it.\n" msgstr "Makefile \"%s\" pode entrar em ciclo; não será refeito.\n" #: src/main.c:2303 #, c-format msgid "Failed to remake makefile '%s'." msgstr "Falha ao refazer makefile \"%s\"." #: src/main.c:2323 #, c-format msgid "Included makefile '%s' was not found." msgstr "makefile \"%s\" incluído não encontrado." #: src/main.c:2328 #, c-format msgid "Makefile '%s' was not found" msgstr "Makefile \"%s\" não encontrado" #: src/main.c:2394 #, c-format msgid "Couldn't change back to original directory." msgstr "Impossível voltar à pasta original." #: src/main.c:2402 #, c-format msgid "Re-executing[%u]:" msgstr "A re-executar[%u]:" #: src/main.c:2522 msgid "unlink (temporary file): " msgstr "desligar (ficheiro temporário): " #: src/main.c:2555 #, c-format msgid ".DEFAULT_GOAL contains more than one target" msgstr ".DEFAULT_GOAL contém mais de um alvo" #: src/main.c:2579 #, c-format msgid "No targets" msgstr "Sem alvos" #: src/main.c:2581 #, c-format msgid "No targets specified and no makefile found" msgstr "Sem alvos especificados e sem makefile" #: src/main.c:2586 #, c-format msgid "Updating goal targets....\n" msgstr "A actualizar alvos objectivo...\n" #: src/main.c:2610 #, c-format msgid "warning: Clock skew detected. Your build may be incomplete." msgstr "aviso: detectado desvio do relógio. A build pode estar incompleta." #: src/main.c:2804 #, c-format msgid "Usage: %s [options] [target] ...\n" msgstr "Uso: %s [OPÇÕES] [ALVO] ...\n" #: src/main.c:2810 #, c-format msgid "" "\n" "This program built for %s\n" msgstr "" "\n" "Este programa construído para %s\n" #: src/main.c:2812 #, c-format msgid "" "\n" "This program built for %s (%s)\n" msgstr "" "\n" "Este programa construído para %s (%s)\n" #: src/main.c:2815 #, c-format msgid "Report bugs to \n" msgstr "Reportar erros em \n" #: src/main.c:2901 #, c-format msgid "the '%s%s' option requires a non-empty string argument" msgstr "a opção \"%s%s\" requer um argumento de cadeia não-vazia" #: src/main.c:2965 #, c-format msgid "the '-%c' option requires a positive integer argument" msgstr "a opção \"-%c\" requer um argumento inteiro positivo" #: src/main.c:3363 #, c-format msgid "%sBuilt for %s\n" msgstr "%sConstruído para %s\n" #: src/main.c:3365 #, c-format msgid "%sBuilt for %s (%s)\n" msgstr "%sConstruído para %s (%s)\n" #: src/main.c:3376 #, c-format msgid "" "%sLicense GPLv3+: GNU GPL version 3 or later \n" "%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 "" "%sLicença GPLv3+: GNU GPL versão 3 ou posterior \n" "%sIsto é um programa grátis: pode alterá-lo e redistribuí-lo.\n" "%sNÃO Hà QUALQUER GARANTIA, até ao limite da Lei.\n" #: src/main.c:3397 #, c-format msgid "" "\n" "# Make data base, printed on %s" msgstr "" "\n" "# Base de dados make, impressa em %s" #: src/main.c:3407 #, c-format msgid "" "\n" "# Finished Make data base on %s\n" msgstr "" "\n" "# Base de dados make terminada em %s\n" #: src/misc.c:643 #, c-format msgid "%s: user %lu (real %lu), group %lu (real %lu)\n" msgstr "%s: utilizador %lu (real %lu), grupo %lu (real %lu)\n" #: src/misc.c:664 msgid "Initialized access" msgstr "Acesso inicializado" #: src/misc.c:743 msgid "User access" msgstr "Acesso de utilizador" #: src/misc.c:791 msgid "Make access" msgstr "Acesso make" #: src/misc.c:825 msgid "Child access" msgstr "Acesso filho" #: src/output.c:97 #, c-format msgid "%s: Entering an unknown directory\n" msgstr "%s: a entrar em pasta desconhecida\n" #: src/output.c:99 #, c-format msgid "%s: Leaving an unknown directory\n" msgstr "%s: a sair duma pasta desconhecida\n" #: src/output.c:102 #, c-format msgid "%s: Entering directory '%s'\n" msgstr "%s: a entrar na pasta \"%s\"\n" #: src/output.c:104 #, c-format msgid "%s: Leaving directory '%s'\n" msgstr "%s: a sair da pasta \"%s\"\n" #: src/output.c:108 #, c-format msgid "%s[%u]: Entering an unknown directory\n" msgstr "%s[%u]: a entrar em pasta desconhecida\n" #: src/output.c:110 #, c-format msgid "%s[%u]: Leaving an unknown directory\n" msgstr "%s[%u]: a sair duma pasta desconhecida\n" #: src/output.c:113 #, c-format msgid "%s[%u]: Entering directory '%s'\n" msgstr "%s[%u]: a entrar na pasta \"%s\"\n" #: src/output.c:115 #, c-format msgid "%s[%u]: Leaving directory '%s'\n" msgstr "%s[%u]: a sair da pasta \"%s\"\n" #: src/output.c:442 src/output.c:444 #, c-format msgid "write error: stdout" msgstr "erro de escrita: stdout" #: src/output.c:624 msgid ". Stop.\n" msgstr ". Parar.\n" #: src/output.c:658 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" #: src/output.c:667 #, c-format msgid "%s: %s" msgstr "%s: %s" #: src/output.h:62 #, c-format msgid "-O[TYPE] (--output-sync[=TYPE]) is not configured for this build." msgstr "-O[TIPO] (--output-sync[=TIPO]) não está configurado para esta versão." #: src/posixos.c:90 msgid "creating jobs pipe" msgstr "a criar túnel de tarefas" #: src/posixos.c:98 src/posixos.c:251 msgid "duping jobs pipe" msgstr "a enganar túnel de tarefas" #: src/posixos.c:104 msgid "init jobserver pipe" msgstr "a iniciar túnel de jobserver" #: src/posixos.c:119 #, c-format msgid "internal error: invalid --jobserver-auth string '%s'" msgstr "erro interno: cadeia --jobserver-auth \"%s\" inválida" #: src/posixos.c:122 #, c-format msgid "Jobserver client (fds %d,%d)\n" msgstr "Cliente jobserver (fds %d,%d)\n" #: src/posixos.c:138 msgid "jobserver pipeline" msgstr "Túnel jobserver" #: src/posixos.c:186 msgid "write jobserver" msgstr "escrever jobserver" #: src/posixos.c:300 #, c-format msgid "job server shut down" msgstr "encerramento de jobserver" #: src/posixos.c:303 msgid "pselect jobs pipe" msgstr "pselect túnel de tarefas" #: src/posixos.c:319 src/posixos.c:433 msgid "read jobs pipe" msgstr "ler túnel de tarefas" #: src/read.c:181 #, c-format msgid "Reading makefiles...\n" msgstr "A ler makefiles...\n" #: src/read.c:336 #, c-format msgid "Reading makefile '%s'" msgstr "A ler makefile \"%s\"" #: src/read.c:338 #, c-format msgid " (no default goal)" msgstr " (sem objectivo predefinido)" #: src/read.c:340 #, c-format msgid " (search path)" msgstr " (caminho de procura)" #: src/read.c:342 #, c-format msgid " (don't care)" msgstr " (não importa)" #: src/read.c:344 #, c-format msgid " (no ~ expansion)" msgstr " (sem expansão ~)" #: src/read.c:655 #, c-format msgid "Skipping UTF-8 BOM in makefile '%s'\n" msgstr "A slatar UTF-8 BOM em makefile \"%s\"\n" #: src/read.c:658 #, c-format msgid "Skipping UTF-8 BOM in makefile buffer\n" msgstr "A saltar UTF-8 BOM no buffer makefile\n" #: src/read.c:787 #, c-format msgid "invalid syntax in conditional" msgstr "sintaxe inválida em condicional" #: src/read.c:960 #, c-format msgid "%s: failed to load" msgstr "%s: falha ao carregar" #: src/read.c:986 #, c-format msgid "recipe commences before first target" msgstr "a receita começa antes do primeiro alvo" #: src/read.c:1035 #, c-format msgid "missing rule before recipe" msgstr "regra em falta antes da receita" #: src/read.c:1136 #, c-format msgid "missing separator (did you mean TAB instead of 8 spaces?)" msgstr "separador em falta (queria usar TAB em vez de 8 espaços?)" #: src/read.c:1138 #, c-format msgid "missing separator" msgstr "separador em falta" #: src/read.c:1283 #, c-format msgid "missing target pattern" msgstr "padrão de alvo em falta" #: src/read.c:1285 #, c-format msgid "multiple target patterns" msgstr "múltiplos padrões de alvo" #: src/read.c:1289 #, c-format msgid "target pattern contains no '%%'" msgstr "o padrão de alvo não contém \"%%\"" #: src/read.c:1404 #, c-format msgid "missing 'endif'" msgstr "\"endif\" em falta" #: src/read.c:1443 src/read.c:1488 src/variable.c:1600 #, c-format msgid "empty variable name" msgstr "nome de variável vazio" #: src/read.c:1478 #, c-format msgid "extraneous text after 'define' directive" msgstr "texto estranho após directiva \"define\"" #: src/read.c:1503 #, c-format msgid "missing 'endef', unterminated 'define'" msgstr "\"endef\" em falta, \"define\" não terminado" #: src/read.c:1531 #, c-format msgid "extraneous text after 'endef' directive" msgstr "texto estranho após directiva \"endef\"" #: src/read.c:1603 #, c-format msgid "extraneous text after '%s' directive" msgstr "texto estranho após directiva \"%s\"" #: src/read.c:1604 #, c-format msgid "extraneous '%s'" msgstr "\"%s\" estranho" #: src/read.c:1632 #, c-format msgid "only one 'else' per conditional" msgstr "só um \"else\" por condicional" #: src/read.c:1908 #, c-format msgid "Malformed target-specific variable definition" msgstr "Definição de variável específica do alvo mal formada" #: src/read.c:1968 #, c-format msgid "prerequisites cannot be defined in recipes" msgstr "os pré-requisitos não podem ser definidos em receitas" #: src/read.c:1986 #, c-format msgid "grouped targets must provide a recipe" msgstr "alvos agrupados têm de fornecer uma receita" #: src/read.c:2029 #, c-format msgid "mixed implicit and static pattern rules" msgstr "regras de padrão implícitas e estáticas misturadas" #: src/read.c:2052 #, c-format msgid "mixed implicit and normal rules" msgstr "regras de padrão implícitas e normais misturadas" #: src/read.c:2107 #, c-format msgid "target '%s' doesn't match the target pattern" msgstr "alvo \"%s\" não corresponde ao alvo padrão" #: src/read.c:2122 src/read.c:2168 #, c-format msgid "target file '%s' has both : and :: entries" msgstr "ficheiro alvo \"%s\" tem ambas as entradas : e ::" #: src/read.c:2128 #, c-format msgid "target '%s' given more than once in the same rule" msgstr "alvo \"%s\" dado mais de uma vez na mesma regra" #: src/read.c:2138 #, c-format msgid "warning: overriding recipe for target '%s'" msgstr "aviso: a sobrepor receita para o alvo \"%s\"" #: src/read.c:2141 #, c-format msgid "warning: ignoring old recipe for target '%s'" msgstr "aviso: a ignorar receita antiga para o alvo \"%s\"" #: src/read.c:2254 #, c-format msgid "*** mixed implicit and normal rules: deprecated syntax" msgstr "*** regras implícitas e normais misturadas: sintaxe obsoleta" #: src/read.c:2271 #, c-format msgid "warning: overriding group membership for target '%s'" msgstr "aviso: a sobrepor participação no grupo para o alvo \"%s\"" #: src/read.c:2636 #, c-format msgid "warning: NUL character seen; rest of line ignored" msgstr "aviso: visto carácter NUL; resto da linha ignorado" #: src/remake.c:226 #, c-format msgid "Nothing to be done for '%s'." msgstr "Nada a fazer para \"%s\"." #: src/remake.c:227 #, c-format msgid "'%s' is up to date." msgstr "\"%s\" está actualizado." #: src/remake.c:323 #, c-format msgid "Pruning file '%s'.\n" msgstr "A podar ficheiro \"%s\".\n" #: src/remake.c:389 #, c-format msgid "%sNo rule to make target '%s', needed by '%s'%s" msgstr "%sSem regra para fazer o alvo \"%s\", necessária a \"%s\"%s" #: src/remake.c:399 #, c-format msgid "%sNo rule to make target '%s'%s" msgstr "%sSem regra para fazer o alvo \"%s\"%s" #: src/remake.c:425 #, c-format msgid "Considering target file '%s'.\n" msgstr "A considerar o ficheiro alvo \"%s\"\n" #: src/remake.c:432 #, c-format msgid "Recently tried and failed to update file '%s'.\n" msgstr "Tentativa recente falhada de actualizar o ficheiro \"%s\".\n" #: src/remake.c:444 #, c-format msgid "File '%s' was considered already.\n" msgstr "Ficheiro \"%s\" já considerado.\n" #: src/remake.c:454 #, c-format msgid "Still updating file '%s'.\n" msgstr "Ainda a actualizar o ficheiro \"%s\".\n" #: src/remake.c:457 #, c-format msgid "Finished updating file '%s'.\n" msgstr "Terminou a actualização do ficheiro \"%s\".\n" #: src/remake.c:486 #, c-format msgid "File '%s' does not exist.\n" msgstr "O ficheiro \"%s\" não existe.\n" #: src/remake.c:494 #, c-format msgid "" "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp" msgstr "" "*** Aviso: o ficheiro \"%s\" .LOW_RESOLUTION_TIME tem um carimbo de alta " "resolução" #: src/remake.c:507 src/remake.c:1039 #, c-format msgid "Found an implicit rule for '%s'.\n" msgstr "Encontrada uma regra implícita para \"%s\".\n" #: src/remake.c:509 src/remake.c:1041 #, c-format msgid "No implicit rule found for '%s'.\n" msgstr "Sem regra implícita para \"%s\".\n" #: src/remake.c:515 #, c-format msgid "Using default recipe for '%s'.\n" msgstr "A usar receita predefinida para \"%s\".\n" #: src/remake.c:549 src/remake.c:1088 #, c-format msgid "Circular %s <- %s dependency dropped." msgstr "Dependência %s <- %s circular abandonada." #: src/remake.c:674 #, c-format msgid "Finished prerequisites of target file '%s'.\n" msgstr "Terminados os pré-requisitos do ficheiro alvo \"%s\",\n" #: src/remake.c:680 #, c-format msgid "The prerequisites of '%s' are being made.\n" msgstr "Estão-se a fazer os pré-requisitos de \"%s\".\n" #: src/remake.c:694 #, c-format msgid "Giving up on target file '%s'.\n" msgstr "A desistir do ficheiro alvo \"%s\".\n" #: src/remake.c:699 #, c-format msgid "Target '%s' not remade because of errors." msgstr "Alvo \"%s\" não refeito devido a erros." #: src/remake.c:751 #, c-format msgid "Prerequisite '%s' is order-only for target '%s'.\n" msgstr "Pré-requisito \"%s\" é order-only para o alvo \"%s\".\n" #: src/remake.c:756 #, c-format msgid "Prerequisite '%s' of target '%s' does not exist.\n" msgstr "Pré-requisito \"%s\" do alvo \"%s\" não existe.\n" #: src/remake.c:761 #, c-format msgid "Prerequisite '%s' is newer than target '%s'.\n" msgstr "Pré-requisito \"%s\" é mais novo que o alvo \"%s\".\n" #: src/remake.c:764 #, c-format msgid "Prerequisite '%s' is older than target '%s'.\n" msgstr "Pré-requisito \"%s\" é mais velho que o alvo \"%s\".\n" #: src/remake.c:782 #, c-format msgid "Target '%s' is double-colon and has no prerequisites.\n" msgstr "O alvo \"%s\" é dois-pontos duplo e não tem pré-requisitos.\n" #: src/remake.c:789 #, c-format msgid "No recipe for '%s' and no prerequisites actually changed.\n" msgstr "Sem receita para \"%s\" e sem pré-requisitos realmente alterados.\n" #: src/remake.c:794 #, c-format msgid "Making '%s' due to always-make flag.\n" msgstr "A fazer \"%s\" devido a bandeira always-make.\n" #: src/remake.c:802 #, c-format msgid "No need to remake target '%s'" msgstr "Sem necessidade de refazer o alvo \"%s\"" #: src/remake.c:804 #, c-format msgid "; using VPATH name '%s'" msgstr "; a usar nome VPATH \"%s\"" #: src/remake.c:824 #, c-format msgid "Must remake target '%s'.\n" msgstr "Necessário refazer o alvo \"%s\".\n" #: src/remake.c:830 #, c-format msgid " Ignoring VPATH name '%s'.\n" msgstr " A ignorar nome VPATH \"%s\".\n" #: src/remake.c:839 #, c-format msgid "Recipe of '%s' is being run.\n" msgstr "Receita de \"%s\" em execução.\n" #: src/remake.c:846 #, c-format msgid "Failed to remake target file '%s'.\n" msgstr "Falha ao refazer ficheiro alvo \"%s\".\n" #: src/remake.c:849 #, c-format msgid "Successfully remade target file '%s'.\n" msgstr "Ficheiro alvo \"%s\" refeito com sucesso.\n" #: src/remake.c:852 #, c-format msgid "Target file '%s' needs to be remade under -q.\n" msgstr "O ficheiro alvo \"%s\" tem de ser refeito sob -q.\n" #: src/remake.c:1047 #, c-format msgid "Using default commands for '%s'.\n" msgstr "A usar comandos predefinidos para \"%s\".\n" #: src/remake.c:1422 #, c-format msgid "Warning: File '%s' has modification time %s s in the future" msgstr "Aviso: o ficheiro \"%s\" tem a hora de modificação %s s no futuro" #: src/remake.c:1662 #, c-format msgid ".LIBPATTERNS element '%s' is not a pattern" msgstr "elemento .LIBPATTERNS \"%s\" não é um padrão" #: src/remote-cstms.c:122 #, c-format msgid "Customs won't export: %s\n" msgstr "A alfândega não exportará: %s\n" #: src/rule.c:289 #, c-format msgid "warning: ignoring prerequisites on suffix rule definition" msgstr "" #: src/rule.c:530 msgid "" "\n" "# Implicit Rules" msgstr "" "\n" "# Regras implícitas" #: src/rule.c:545 msgid "" "\n" "# No implicit rules." msgstr "" "\n" "# Sem regras implícitas." #: src/rule.c:548 #, c-format msgid "" "\n" "# %u implicit rules, %u (%.1f%%) terminal." msgstr "" "\n" "# %u regras implícitas, %u (%.1f%%) terminal." #: src/rule.c:557 #, c-format msgid "BUG: num_pattern_rules is wrong! %u != %u" msgstr "ERRO: num_pattern_rules está errado! %u != %u" #: src/signame.c:84 msgid "unknown signal" msgstr "sinal desconhecido" #: src/signame.c:92 msgid "Hangup" msgstr "Desligar" #: src/signame.c:95 msgid "Interrupt" msgstr "Interromper" #: src/signame.c:98 msgid "Quit" msgstr "Sair" #: src/signame.c:101 msgid "Illegal Instruction" msgstr "Instrução ilegal" #: src/signame.c:104 msgid "Trace/breakpoint trap" msgstr "Armadilha de rastreio/ponto de quebra" #: src/signame.c:109 msgid "Aborted" msgstr "Abortado" #: src/signame.c:112 msgid "IOT trap" msgstr "Armadilha IOT" #: src/signame.c:115 msgid "EMT trap" msgstr "Armadilha EMT" #: src/signame.c:118 msgid "Floating point exception" msgstr "Excepção de vírgula flutuante" #: src/signame.c:121 msgid "Killed" msgstr "Morto" #: src/signame.c:124 msgid "Bus error" msgstr "Erro de bus" #: src/signame.c:127 msgid "Segmentation fault" msgstr "Falta de segmentação" #: src/signame.c:130 msgid "Bad system call" msgstr "Má chamada de sistema" #: src/signame.c:133 msgid "Broken pipe" msgstr "Túnel quebrado" #: src/signame.c:136 msgid "Alarm clock" msgstr "Alarme" #: src/signame.c:139 msgid "Terminated" msgstr "Terminado" #: src/signame.c:142 msgid "User defined signal 1" msgstr "Sinal 1 definido pelo utilizador" #: src/signame.c:145 msgid "User defined signal 2" msgstr "Sinal 2 definido pelo utilizador" #: src/signame.c:150 src/signame.c:153 msgid "Child exited" msgstr "Filho saiu" #: src/signame.c:156 msgid "Power failure" msgstr "Falha de energia" #: src/signame.c:159 msgid "Stopped" msgstr "Parado" #: src/signame.c:162 msgid "Stopped (tty input)" msgstr "Parado (entrada tty)" #: src/signame.c:165 msgid "Stopped (tty output)" msgstr "Parado (saída tty)" #: src/signame.c:168 msgid "Stopped (signal)" msgstr "Parado (sinal)" #: src/signame.c:171 msgid "CPU time limit exceeded" msgstr "Excedido limite de tempo da CPU" #: src/signame.c:174 msgid "File size limit exceeded" msgstr "Excedido limite de tamanho do ficheiro" #: src/signame.c:177 msgid "Virtual timer expired" msgstr "Temporizador virtual expirado" #: src/signame.c:180 msgid "Profiling timer expired" msgstr "Temporizador de perfil expirado" #: src/signame.c:186 msgid "Window changed" msgstr "Janela alterada" #: src/signame.c:189 msgid "Continued" msgstr "Continuado" #: src/signame.c:192 msgid "Urgent I/O condition" msgstr "Condição I/O urgente" #: src/signame.c:199 src/signame.c:208 msgid "I/O possible" msgstr "Possível I/O" #: src/signame.c:202 msgid "SIGWIND" msgstr "SIGWIND" #: src/signame.c:205 msgid "SIGPHONE" msgstr "SIGPHONE" #: src/signame.c:211 msgid "Resource lost" msgstr "Recurso perdido" #: src/signame.c:214 msgid "Danger signal" msgstr "Sinal de perigo" #: src/signame.c:217 msgid "Information request" msgstr "Pedido de informação" #: src/signame.c:220 msgid "Floating point co-processor not available" msgstr "Co-processador de vírgula flutuante não disponível" #: src/strcache.c:274 #, c-format msgid "" "\n" "%s No strcache buffers\n" msgstr "" "\n" "%s Sem buffers strcache\n" #: src/strcache.c:304 #, c-format msgid "" "\n" "%s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu " "B\n" msgstr "" "\n" "%s buffers strcache: %lu (%lu) / cadeias = %lu / capacidade = %lu B / média " "= %lu B\n" #: src/strcache.c:308 #, c-format msgid "" "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B\n" msgstr "" "%s buffer actual: tamanho = %hu B / usado = %hu B / total = %hu / média = %u " "B\n" #: src/strcache.c:319 #, c-format msgid "%s other used: total = %lu B / count = %lu / avg = %lu B\n" msgstr "%s outro usado: tamanho = %lu B / total = %lu / média = %lu B\n" #: src/strcache.c:322 #, c-format msgid "" "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n" msgstr "" "%s outro livre: tamanho = %lu B / máximo = %lu B / mínimo = %lu B / média = " "%hu B\n" #: src/strcache.c:326 #, c-format msgid "" "\n" "%s strcache performance: lookups = %lu / hit rate = %lu%%\n" msgstr "" "\n" "%s desempenho strcache: procuras = %lu / taxa de sucesso = %lu%%\n" #: src/strcache.c:328 msgid "" "# hash-table stats:\n" "# " msgstr "" "# estatísticas da hash-table:\n" "# " #: src/variable.c:1653 msgid "automatic" msgstr "automático" #: src/variable.c:1656 msgid "default" msgstr "predefinido" #: src/variable.c:1659 msgid "environment" msgstr "ambiente" #: src/variable.c:1662 msgid "makefile" msgstr "makefile" #: src/variable.c:1665 msgid "environment under -e" msgstr "ambiente sob -e" #: src/variable.c:1668 msgid "command line" msgstr "linha de comandos" #: src/variable.c:1671 msgid "'override' directive" msgstr "directiva \"override\"" #: src/variable.c:1682 #, c-format msgid " (from '%s', line %lu)" msgstr " (de \"%s\", linha %lu)" #: src/variable.c:1745 msgid "# variable set hash-table stats:\n" msgstr "# conjunto de variáveis de estatísticas hash-table:\n" #: src/variable.c:1756 msgid "" "\n" "# Variables\n" msgstr "" "\n" "# Variáveis\n" #: src/variable.c:1760 msgid "" "\n" "# Pattern-specific Variable Values" msgstr "" "\n" "# Valores de variáveis específicas de padrão" #: src/variable.c:1774 msgid "" "\n" "# No pattern-specific variable values." msgstr "" "\n" "# Sem valores de variáveis específicas de padrão" #: src/variable.c:1776 #, c-format msgid "" "\n" "# %u pattern-specific variable values" msgstr "" "\n" "# %u valores de variáveis específicas de padrão" #: src/variable.h:229 #, c-format msgid "warning: undefined variable '%.*s'" msgstr "aviso: variável \"%.*s\" indefinida" #: src/vmsfunctions.c:91 #, c-format msgid "sys$search() failed with %d\n" msgstr "sys$search() falhou com %d\n" #: src/vmsjobs.c:244 #, c-format msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n" msgstr "-aviso, poderá ter de reactivar a gestão CTRL-Y a partir de DCL.\n" #: src/vmsjobs.c:681 #, c-format msgid "BUILTIN CD %s\n" msgstr "CD INTERNO %s\n" #: src/vmsjobs.c:1224 #, c-format msgid "DCL: %s\n" msgstr "DCL: %s\n" #: src/vmsjobs.c:1284 #, c-format msgid "Append output to %s\n" msgstr "Anexar saída a %s\n" #: src/vmsjobs.c:1309 #, c-format msgid "Append %.*s and cleanup\n" msgstr "Anexar %.*s e limpar\n" #: src/vmsjobs.c:1322 #, c-format msgid "Executing %s instead\n" msgstr "A executar antes %s\n" #: src/vpath.c:603 msgid "" "\n" "# VPATH Search Paths\n" msgstr "" "\n" "# Caminhos de procura VPATH\n" #: src/vpath.c:620 msgid "# No 'vpath' search paths." msgstr "# Sem caminhos de procura \"vpath\"." #: src/vpath.c:622 #, c-format msgid "" "\n" "# %u 'vpath' search paths.\n" msgstr "" "\n" "# Caminhos de procura %u \"vpath\".\n" #: src/vpath.c:625 msgid "" "\n" "# No general ('VPATH' variable) search path." msgstr "" "\n" "# Sem caminho de procura geral (variável \"VPATH\")." #: src/vpath.c:631 msgid "" "\n" "# General ('VPATH' variable) search path:\n" "# " msgstr "" "\n" "# Caminho de procura geral (variável \"VPATH\")." #: src/w32/w32os.c:44 #, c-format msgid "Jobserver slots limited to %d\n" msgstr "Ranhuras jobserver limitadas a %d\n" #: src/w32/w32os.c:60 #, c-format msgid "creating jobserver semaphore: (Error %ld: %s)" msgstr "a criar semáforo jobserver: (erro %ld: %s)" #: src/w32/w32os.c:79 #, c-format msgid "" "internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)" msgstr "erro interno: impossível abrir semáforo jobserver '%s': (erro %ld: %s)" #: src/w32/w32os.c:82 #, c-format msgid "Jobserver client (semaphore %s)\n" msgstr "Cliente jobserver (semáforo %s)\n" #: src/w32/w32os.c:123 #, c-format msgid "release jobserver semaphore: (Error %ld: %s)" msgstr "libertar semáforo jobserver: (erro %ld: %s)" #: src/w32/w32os.c:194 #, c-format msgid "semaphore or child process wait: (Error %ld: %s)" msgstr "espera de semáforo ou processo filho: (erro %ld: %s)" #~ msgid "%s: %s: Command not found\n" #~ msgstr "%s: %s: comando não encontrado\n" #~ msgid "%s[%u]: %s: Command not found\n" #~ msgstr "%s[%u]: %s: comando não encontrado\n" #~ msgid "%s: Shell program not found" #~ msgstr "%s: programa de shell não encontrado" #~ msgid "%s is suspending for 30 seconds..." #~ msgstr "%s vai suspender por 30 segundos..." #~ msgid "done sleep(30). Continuing.\n" #~ msgstr "feito sleep(30). A continuar.\n" #~ msgid "Unknown error %d" #~ msgstr "Erro desconhecido %d" #~ msgid "Warning: File '%s' has modification time in the future" #~ msgstr "Aviso: o ficheiro \"%s\" tem a hora de modificação no futuro" #~ msgid " terminal." #~ msgstr " terminal." make-4.3/po/sv.gmo0000644000175000017500000012473013611136532011000 00000000000000Þ•®Œ Aü$$+$&J$q$$!Š$-¬$Ú$ ì$- %;%'Q%#y%% ´%Â%à%Pù%;J&"†&©& Å&tæ&L['P¨'Dù'9>(Mx(@Æ(o)Gw)o¿)P/*l€*Fí*J4+€+9,C:,f~,_å,;E-:-O¼-J .}W.uÕ.~K/>Ê/M 0CW02›0FÎ0I1;_1 ›1¥1"Â1 å1ò1 22&2 ?2J2e2x2 Š2”2£2¬2%½2ã27ì2$333C3/[3‹3¤3¼3Ö3(ô34&24*Y4&„4+«4×4#ì4#5)45-^5,Œ5¹5Ò5$ç59 6F63e6™61¶6è677/7!F7$h7=7GË7G89[8•8ž8"¥8È8å8;9!?9a9+}9©9¼9Ö9,ð9:%;:,a:-Ž: ¼:&Ý:;#;C;!c;.…;´;Ä;ÍÙ;§</Ç<÷<& = 4=%U={=›=¯=1Ä= ö=>#>#=>La>6®>å>6?A8?>z? ¹?+Ã?*ï?@ 2@<@1D@2v@ ©@µ@Î@"ã@*A1A@A PAqA A ™A£A»A ÛA èA%õAB+;B$gBŒB¦B ÅBÏBéBC+CHC!eC ‡C”C®C ·CÅCÎCâCD$D&_0X_‰_=©_;ç_:#`1^`,`H½`4a*;a"fa/‰a8¹a7òa*b>b Nb{\bØc.÷c'&d Nd\d#ed6‰dÀdÔd9òd,e*Fe$qe–e «e#¹eÝe_úeGZf0¢fÓf$óf~gN—gQægH8h;hP½h<imKiG¹iqjbsj“ÖjOjkJºk{lAlJÃlem\tmEÑm9n_QnM±nÿnqoño>spV²pI q3SqP‡qIØq8"r [r'fr%Žr ´r Àr ÎrÚrõr ss;sQs fs ps|s…s ”s µsRÀst%t6t,Ktxt—t¬tÆt'åt u*)u/Tu+„u3°uäu)úu)$v)Nv/xv,¨vÕvðv"w6)w`w0}w®w2Íwxx–i–2z–.­–-Ü– —"—;—%Q—w—‰—›—+­—(Ù—˜<˜Y˜;j˜ ¦˜2±˜7ä˜H™He™*®™AÙ™š *š6š'Fšnšuš'‰š±šÚÊšÛš+òš/›.N›}›œ›±›<Ì›, œK6œ‚œ—œ1­œßœúœ%;<6xH¯øž0ž2EžMxž:ÆžŸ* Ÿ4ŸGŸaŸArŸ´Ÿ,ÈŸ5õŸ+ > 8C 7| 7´ :ì >'¡<f¡!£¡Å¡&Ô¡4û¡0¢A¢ Z¢"g¢'Š¢4²¢(ç¢!£,2£1_£0‘£(£@ë£:,¤5g¤-¤"ˤ;î¤/*¥GZ¥9¢¥)Ü¥/¦ 6¦D¦2^¦‘¦M¬¦Dú¦D?§<„§6Á§Xø§;Q¨2¨(À¨5é¨>©=^©œ©²© Ê©’’ž­u› ÙfŠœ´hcÓ='6݉#‰€“þEAf—)«$­¡É ~‘à k©µŒ9|jè2e-S„&vs•Ü`N¡H !š¨' ¦1uD§ô{}&.Y« Ïÿê?V¶50 mO¾v…JõK‡سöºxWQ ]tr–9 {C4ƒB±ÂMT†,\Z0š˰q:¨ó œU71ÌrHÛl™<:øò¿3B¢|/æjcP¸¯g5²Š—ç(+Áb-[+@†}~ŽzÊ™bFYä>n›"*]€,˜íÑlðQ =£‹Ldaã`8Ð÷åZÍ”#©@%ÎgnMÃsª_ÕD\S®ùTR„^7‚Ò ‹ _kEKž¬Vh6$¤/dwŸŸXúƒN4R¢^xtëLª®Ö»‘q*Åâ>W[ì§¹‡Ô·˜ÇF;!3PJe•y‚ÆoG¥ ;¥¼£I”ŽpˆéĈ"ß×GÚŒ“zÀo)ÞmUXa8¤Aý¬ip2(ïO–IiȦ…y½.ñîü%áCûw<? # %u 'vpath' search paths. # %u implicit rules, %u (%.1f%%) terminal. # %u pattern-specific variable values # Directories # Files # Finished Make data base on %s # General ('VPATH' variable) search path: # # Implicit Rules # Make data base, printed on %s # No general ('VPATH' variable) search path. # No implicit rules. # No pattern-specific variable values. # Pattern-specific Variable Values # VPATH Search Paths # Variables # files hash-table stats: # %s No strcache buffers %s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu B %s strcache performance: lookups = %lu / hit rate = %lu%% Counted %d args in failed launch This program built for %s This program built for %s (%s) Unhandled exception filter called from program %s ExceptionCode = %lx ExceptionFlags = %lx ExceptionAddress = 0x%p --debug[=FLAGS] Print various types of debugging information. --no-print-directory Turn off -w, even if it was turned on implicitly. --no-silent Echo recipes (disable --silent mode). --trace Print tracing information. --warn-undefined-variables Warn when an undefined variable is referenced. -B, --always-make Unconditionally make all targets. -C DIRECTORY, --directory=DIRECTORY Change to DIRECTORY before doing anything. -E STRING, --eval=STRING Evaluate STRING as a makefile statement. -I DIRECTORY, --include-dir=DIRECTORY Search DIRECTORY for included makefiles. -L, --check-symlink-times Use the latest mtime between symlinks and target. -O[TYPE], --output-sync[=TYPE] Synchronize output of parallel jobs by TYPE. -R, --no-builtin-variables Disable the built-in variable settings. -S, --no-keep-going, --stop Turns off -k. -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE Consider FILE to be infinitely new. -b, -m Ignored for compatibility. -d Print lots of debugging information. -e, --environment-overrides Environment variables override makefiles. -f FILE, --file=FILE, --makefile=FILE Read FILE as a makefile. -h, --help Print this message and exit. -i, --ignore-errors Ignore errors from recipes. -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no arg. -k, --keep-going Keep going when some targets can't be made. -l [N], --load-average[=N], --max-load[=N] Don't start multiple jobs unless load is below N. -n, --just-print, --dry-run, --recon Don't actually run any recipe; just print them. -o FILE, --old-file=FILE, --assume-old=FILE Consider FILE to be very old and don't remake it. -p, --print-data-base Print make's internal database. -q, --question Run no recipe; exit status says if up to date. -r, --no-builtin-rules Disable the built-in implicit rules. -s, --silent, --quiet Don't echo recipes. -t, --touch Touch targets instead of remaking them. -v, --version Print the version number of make and exit. -w, --print-directory Print the current directory. Date %s Ignoring VPATH name '%s'. uid = %d, gid = %d, mode = 0%o. (built-in): (core dumped) (don't care) (from '%s', line %lu) (from '%s', line %lu): (ignored) (name might be truncated) (no default goal) (no ~ expansion) (remote) (search path) files, impossibilities impossibilities in %lu directories. so far.# A default, MAKEFILES, or -include/sinclude makefile.# Also makes:# Builtin rule# Command line target.# Dependencies recipe running (THIS IS A BUG).# Failed to be updated.# File does not exist.# File has been updated.# File has not been updated.# File is an intermediate prerequisite.# File is very old.# Implicit rule search has been done.# Implicit rule search has not been done.# Implicit/static pattern stem: '%s' # Invalid value in 'command_state' member!# Last modified %s # Modification time never checked.# Needs to be updated (-q is set).# Phony target (prerequisite of .PHONY).# Precious file (prerequisite of .PRECIOUS).# Recipe currently running (THIS IS A BUG).# Successfully updated.# recipe to execute# %s (device %d, inode [%d,%d,%d]): # %s (device %d, inode [%d,%d,%d]): could not be opened. # %s (device %ld, inode %ld): # %s (device %ld, inode %ld): could not be opened. # %s (key %s, mtime %I64u): # %s (key %s, mtime %I64u): could not be opened. # %s: could not be stat'd. # No 'vpath' search paths.# Not a target:# hash-table stats: # # variable set hash-table stats: $SHELL changed (was '%s', now '%s') %s (line %d) Bad shell context (!unixy && !batch_mode_shell) %s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B %s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B %s other used: total = %lu B / count = %lu / avg = %lu B %s%s: %s%s: %s%s: Entering an unknown directory %s: Entering directory '%s' %s: Field '%s' not cached: %s%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p) %s: Leaving an unknown directory %s: Leaving directory '%s' %s: Timestamp out of range; substituting %s%s: failed to load%s: illegal option -- %c %s: invalid option -- %c %s: option '%c%s' doesn't allow an argument %s: option '%s' is ambiguous %s: option '%s' requires an argument %s: option '--%s' doesn't allow an argument %s: option '-W %s' doesn't allow an argument %s: option '-W %s' is ambiguous %s: option requires an argument -- %c %s: target '%s' does not exist%s: unrecognized option '%c%s' %s: unrecognized option '--%s' %s: update target '%s' due to: %s%s: user %lu (real %lu), group %lu (real %lu) %sBuilt for %s %sBuilt for %s (%s) %sLicense GPLv3+: GNU GPL version 3 or later %sThis is free software: you are free to change and redistribute it. %sThere is NO WARRANTY, to the extent permitted by law. %sNo rule to make target '%s'%s%sNo rule to make target '%s', needed by '%s'%s%s[%s: %s] Error %d%s%s[%u]: Entering an unknown directory %s[%u]: Entering directory '%s' %s[%u]: Leaving an unknown directory %s[%u]: Leaving directory '%s' '%s' is up to date.'override' directive*** Archive member '%s' may be bogus; not deleted*** Break. *** Deleting file '%s'*** Deleting intermediate file '%s'*** Waiting for unfinished jobs....*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp*** [%s] Archive member '%s' may be bogus; not deleted*** [%s] Deleting file '%s'*** mixed implicit and normal rules: deprecated syntax-O[TYPE] (--output-sync[=TYPE]) is not configured for this build.-warning, you may have to re-enable CTRL-Y handling from DCL. . Stop. .DEFAULT_GOAL contains more than one target.LIBPATTERNS element '%s' is not a pattern; using VPATH name '%s'AbortedAccess violation: read operation at address 0x%p Access violation: write operation at address 0x%p Alarm clockAppend %.*s and cleanup Append output to %s Avoiding implicit rule recursion. BUG: num_pattern_rules is wrong! %u != %uBUILTIN CD %s Bad system callBatch file contents: @echo off Batch file contents:%s %s Broken pipeBus errorCPU time limit exceededCannot create a temporary file Child accessChild exitedCircular %s <- %s dependency dropped.Cleaning up temp batch file %s Cleaning up temp batch file %s failed (%d) Cleaning up temporary batch file %s Collisions=%lu/%lu=%.0f%%Considering target file '%s'. ContinuedCould not restore stderr Could not restore stdin Could not restore stdout Couldn't change back to original directory.CreatePipe() failed (e=%ld) Creating temporary batch file %s Current timeCustoms won't export: %s DCL: %s Danger signalEMT trapEmpty function nameEmpty symbol name for load: %sExecuting %s instead Failed to load symbol %s from %s: %sFailed to open global symbol table: %sFailed to remake makefile '%s'.Failed to remake target file '%s'. File '%s' does not exist. File '%s' was considered already. File size limit exceededFinished prerequisites of target file '%s'. Finished updating file '%s'. Floating point co-processor not availableFloating point exceptionFound an implicit rule for '%s'. Found prerequisite '%s' as VPATH '%s' Function name too long: %sGiving up on target file '%s'. HangupI/O possibleIOT trapIllegal InstructionIncluded makefile '%s' was not found.Information requestInitialized accessInterruptInvalid function name: %sInvalid maximum argument count (%u) for function %sInvalid minimum argument count (%u) for function %sJobserver client (fds %d,%d) Jobserver client (semaphore %s) Jobserver slots limited to %d KilledLive child %p (%s) PID %s %s Load=%lu/%lu=%.0f%%, Loaded object %s is not declared to be GPL compatibleLoading symbol %s from %s Looking for a rule with intermediate file '%s'. Looking for an implicit rule for '%s'. Looking for archive-member implicit rule for '%s'. Make accessMakefile '%s' might loop; not remaking it. Makefile '%s' was not foundMakefile from standard input specified twice.Making '%s' due to always-make flag. Malformed target-specific variable definitionMember '%s'%s: %ld bytes at %ld (%ld). Must remake target '%s'. NoNo implicit rule found for '%s'. No need to remake target '%s'No recipe for '%s' and no prerequisites actually changed. No targetsNo targets specified and no makefile foundNothing to be done for '%s'.Obtained token for child %p (%s). Options: Parallel jobs (-j) are not supported on this platform.Power failurePrerequisite '%s' is newer than target '%s'. Prerequisite '%s' is older than target '%s'. Prerequisite '%s' is order-only for target '%s'. Prerequisite '%s' of target '%s' does not exist. Profiling timer expiredPruning file '%s'. Putting child %p (%s) PID %s%s on the chain. QuitRe-executing[%u]:Reading makefile '%s'Reading makefiles... Reaping losing child %p PID %s %s Reaping winning child %p PID %s %s Recently tried and failed to update file '%s'. Recipe for '%s' will be ignored in favor of the one for '%s'.Recipe for file '%s' was found by implicit rule search,Recipe has too many lines (%ud)Recipe of '%s' is being run. Recipe was specified for file '%s' at %s:%lu,Recursive variable '%s' references itself (eventually)Rehash=%u, Rejecting impossible implicit prerequisite '%s'. Rejecting impossible rule prerequisite '%s'. Released token for child %p (%s). Removing child %p PID %s%s from chain. Removing intermediate files... Report bugs to Resetting to single job (-j1) mode.Resource lostSIGPHONESIGWINDSegmentation faultSkipping UTF-8 BOM in makefile '%s' Skipping UTF-8 BOM in makefile buffer Stem too long: '%s%.*s'. Still updating file '%s'. StoppedStopped (signal)Stopped (tty input)Stopped (tty output)Successfully remade target file '%s'. Symbolic links not supported: disabling -L.Target '%s' is double-colon and has no prerequisites. Target '%s' not remade because of errors.Target file '%s' needs to be remade under -q. TerminatedThe 'load' operation is not supported on this platform.The prerequisites of '%s' are being made. Trace/breakpoint trapTrying implicit prerequisite '%s'. Trying pattern rule with stem '%.*s'. Trying rule prerequisite '%s'. Updating goal targets.... Updating makefiles.... Urgent I/O conditionUsage: %s [options] [target] ... User accessUser defined signal 1User defined signal 2Using default commands for '%s'. Using default recipe for '%s'. Virtual timer expiredWarning: File '%s' has modification time %s s in the futureWindow changedattempt to use unsupported feature: '%s'automaticbut '%s' is now considered the same file as '%s'.can't allocate %lu bytes for hash table: memory exhaustedcan't rename double-colon '%s' to single-colon '%s'can't rename single-colon '%s' to double-colon '%s'cannot enforce load limit: cannot enforce load limits on this operating systemclose: %s: %scommand linecreating jobs pipecreating jobserver semaphore: (Error %ld: %s)defaultduping jobs pipeempty string invalid as file nameempty variable nameenvironmentenvironment under -eextraneous '%s'extraneous text after '%s' directiveextraneous text after 'define' directiveextraneous text after 'endef' directivefile: invalid file operation: %sfile: missing filenamefile: too many argumentsfind_and_set_shell() path search set default_shell = %s find_and_set_shell() setting default_shell = %s first argument to 'word' function must be greater than 0fopen (temporary file)fwrite (temporary file)grouped targets must provide a recipeguile: Evaluating '%s' guile: Expanding '%s' init jobserver pipeinsufficient number of arguments (%d) to function '%s'internal error: invalid --jobserver-auth string '%s'internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)invalid syntax in conditionaljob server shut downjobserver pipelinelbr$ini_control() failed with status = %dlbr$set_module() failed to extract module info, status = %dmake reaped child pid %s, still waiting for pid %s makefilemissing 'endef', unterminated 'define'missing 'endif'missing rule before recipemissing separatormissing separator (did you mean TAB instead of 8 spaces?)missing target patternmixed implicit and normal rulesmixed implicit and static pattern rulesmultiple target patternsnono more file handles: could not duplicate stderr no more file handles: could not duplicate stdin no more file handles: could not duplicate stdout non-numeric first argument to 'word' functionnon-numeric first argument to 'wordlist' functionnon-numeric second argument to 'wordlist' functiononly one 'else' per conditionalopen: %s: %sprerequisites cannot be defined in recipesprocess_easy() failed to launch process (e=%ld) pselect jobs piperead jobs piperead: %s: %srecipe commences before first targetrelease jobserver semaphore: (Error %ld: %s)semaphore or child process wait: (Error %ld: %s)spawnvpe: environment space might be exhaustedsys$search() failed with %d target '%s' doesn't match the target patterntarget '%s' given more than once in the same ruletarget file '%s' has both : and :: entriestarget pattern contains no '%%'the '%s%s' option requires a non-empty string argumentthe '-%c' option requires a positive integer argumenttouch archive member is not available on VMStouch: '%s' is not a valid archivetouch: Archive '%s' does not existtouch: Bad return code from ar_member_touch on '%s'touch: Member '%s' does not exist in '%s'unable to open library '%s' to lookup member status %dunimplemented on this platform: function '%s'unknown debug level specification '%s'unknown output-sync type '%s'unknown signalunlink (temporary file): unterminated call to function '%s': missing '%c'unterminated variable referencewarning: Clock skew detected. Your build may be incomplete.warning: -j%d forced in makefile: resetting jobserver mode.warning: -j%d forced in submake: resetting jobserver mode.warning: NUL character seen; rest of line ignoredwarning: ignoring old recipe for target '%s'warning: jobserver unavailable: using -j1. Add '+' to parent make rule.warning: overriding group membership for target '%s'warning: overriding recipe for target '%s'warning: undefined variable '%.*s'windows32_openpipe(): process_init_fd() failed windows32_openpipe: DuplicateHandle(Err) failed (e=%ld) windows32_openpipe: DuplicateHandle(In) failed (e=%ld) write error: stdoutwrite jobserverwrite: %s: %sProject-Id-Version: make 4.2.93 Report-Msgid-Bugs-To: bug-make@gnu.org PO-Revision-Date: 2020-01-06 16:19+0100 Last-Translator: Göran Uddeborg Language-Team: Swedish Language: sv MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. # %u â€vpathâ€-sökvägar. # %u implicita regler, %u (%.1f %%) slutliga. # %u mönsterspecifika variabelvärden # Kataloger # Filer # Färdigställde Make-databas %s # Allmän sökväg (enligt â€VPATHâ€-variabeln): # # Implicita regler # Make-databas, utskriven %s # Ingen allmän sökväg (enligt â€VPATHâ€-variabeln). # Inga implicita regler. # Inga mönsterspecifika variabelvärden. # Mönsterspecifika variabelvärden # VPATH-sökvägar # Variabler # statistik för filhashtabell: # %s Inga strcache-buffertar %s strcache-buffertar: totalt = %lu (%lu) / strängar = %lu / lagring = %lu B / snitt = %lu B %s strcache-prestanda: uppslagningar = %lu / träffsäkerhet = %lu %% Räknade till %d argument vid misslyckad start Detta program byggdes för %s Detta program byggdes för %s (%s) Ett ohanterat undantagsfilter anropades frÃ¥n programmet %s Undantagskod = %lx Undantagsflaggor = %lx Undantagsadress = 0x%p --debug[=FLAGGOR] Skriv ut olika sorters felsökningsinformation. --no-print-directory Stäng av -w, även om det är implicit pÃ¥slaget. --no-silent Skriv recept (avaktivera --silent-läge). --trace Skriv spÃ¥rningsinformation. --warn-undefined-variables Varna vid användning av en odefinierad variabel. -B, --always-make Bygg ovillkorligen alla mÃ¥l. -C KATALOG, --directory=KATALOG Byt katalog till KATALOG innan nÃ¥got görs. -E STRÄNG, --eval=STRÄNG Evaluera STRÄNG som en makefile-sats. -I KATALOG, --include-dir=KATALOG Genomsök KATALOG efter inkluderade makefiler. -L, --check-symlink-times Använd den senaste av mtiderna för symboliska länkar eller mÃ¥l. -O[TYP], --output-sync[=TYP] Synkronisera utmatningen av parallella jobb enligt TYP. -R, --no-builtin-variables Inaktivera de inbyggda variabelinställningarna. -S, --no-keep-going, --stop Stäng av -k. -W FIL, --what-if=FIL, --new-file=FIL, --assume-new=FIL Betrakta FIL som hur ny som helst. -b, -m Ignoreras av kompatibilitetsskäl. -d Skriv ut massor av felsökningsinformation. -e, --environment-overrides Miljövariabler Ã¥sidosätter makefiler. -f FIL, --file=FIL, --makefile=FIL Använd FIL som makefil. -h, --help Skriv ut detta meddelande och avsluta. -i, --ignore-errors Ignorera fel frÃ¥n recept. -j [N], --jobs[=N] TillÃ¥t N samtidiga jobb; oändligt mÃ¥nga om inget antal anges. -k, --keep-going Fortsätt även om vissa mÃ¥l inte kan skapas. -l [N], --load-average[=N], --max-load[=N] PÃ¥börja fler jobb endast om lasten understiger N. -n, --just-print, --dry-run, --recon Kör inte nÃ¥got recept, skriv bara ut dem. -o FIL, --old-file=FIL, --assume-old=FIL Betrakta FIL som mycket gammal och Ã¥terskapa den inte. -p, --print-data-base Skriv ut makes interna databas. -q, --question Kör inga recept; slutstatus visar om det är aktuellt. -r, --no-builtin-rules Inaktivera de inbyggda implicita reglerna. -s, --silent, --quiet Ã…terge inte recept. -t, --touch Nydatera mÃ¥l i stället för att Ã¥terskapa dem. -v, --version Skriv ut makes versionsnummer och avsluta. -w, --print-directory Skriv ut aktuell katalog. Datum %s Bortser frÃ¥n VPATH-namnet â€%sâ€. uid = %d, gid = %d, flaggor = 0%o. (inbyggd): (minnesdump) (oviktigt) (frÃ¥n â€%sâ€, rad %lu) (frÃ¥n â€%sâ€, rad %lu): (ignoreras) (namnet kan vara avkortat) (inget standardmÃ¥l) (ingen ~-expansion) (fjärr) (sökväg) filer, omöjligheter omöjligheter i %lu kataloger. hittills.# En standardmakefil, eller enligt MAKEFILES, eller en -include/sinclude-makefil.# Skapar ocksÃ¥:# Inbyggd regel# KommandoradsmÃ¥l.# Beroenderecept körs (DETTA ÄR ETT FEL).# Uppdateringen misslyckades.# Filen finns inte.# Filen har uppdaterats.# Filen har inte uppdaterats.# Filen är ett övergÃ¥ende beroende.# Filen är mycket gammal.# Implicit regelsökning har genomförts.# Implicit regelsökning har inte genomförts.# Implicit/statisk mönsterstam: â€%s†# Ogiltigt värde i medlemmen â€command_stateâ€!# Senast ändrad %s # Ändringstiden har inte kontrollerats.# Behöver uppdateras (-q har angivits).# LÃ¥tsasmÃ¥l (nödvändig för .PHONY).# Värdefull fil (nödvändig för .PRECIOUS).# Recept körs just nu (DETTA ÄR ETT FEL).# Uppdateringen lyckades.# recept att utföra# %s (enhet %d, inod [%d,%d,%d]): # %s (enhet %d, inod [%d,%d,%d]): kunde inte öppnas. # %s (enhet %ld, inod %ld): # %s (enhet %ld, inod %ld): kunde inte öppnas. # %s (nyckel %s, mtid %I64u): # %s (nyckel %s, mtid %I64u): kunde inte öppnas. # %s: kunde inte ta status. # Inga â€vpathâ€-sökvägar.# Inte ett mÃ¥l:# statistik för hashtabell: # # statistik för variabelmängd-hashtabell: $SHELL ändrades (var â€%sâ€, är nu â€%sâ€) %s (rad %d) Felaktigt skalsammanhang (!unixy && !batch_mode_shell) %s aktuell buf: storlek = %hu B / använt = %hu B / antal = %hu / snitt = %u B %s annat ledigt: totalt = %lu B / max = %lu B / min = %lu B / snitt = %hu B %s annat använt: totalt = %lu B / antal = %lu / snitt = %lu B %s%s: %s%s: %s%s: GÃ¥r till en okänd katalog %s: GÃ¥r till katalogen â€%s†%s: Fältet â€%s†cachas inte: %s%s: Avbrott/Undantag fÃ¥ngat (kod = 0x%lx, adress = 0x%p) %s: Lämnar en okänd katalog %s: Lämnar katalogen â€%s†%s: Tidsvärde utanför gränser; ersätter med %s%s: misslyckades att ladda%s: otillÃ¥ten flagga -- %c %s: ogiltig flagga -- %c %s: flaggan â€%c%s†tar inget argument %s: flaggan â€%s†är tvetydig %s: flaggan â€%s†kräver ett argument %s: flaggan â€--%s†tar inget argument %s: flaggan â€-W %s†tar inget argument %s: flaggan â€-W %s†är tvetydig %s: flaggan kräver ett argument -- %c %s: mÃ¥let â€%s†finns inte%s: okänd flagga â€%c%s†%s: okänd flagga â€--%s†%s: uppdatera mÃ¥let â€%s†pÃ¥ grund av: %s%s: användare %lu (verklig %lu), grupp %lu (verklig %lu) %sByggt för %s %sByggt för %s (%s) %sLicens GPLv3+: GNU GPL version 3 eller senare %sDetta är fri programvara. du fÃ¥r lov att ändra och vidaredistribuera den. %sDet finns INGEN GARANTI, sÃ¥ lÃ¥ngt lagen tillÃ¥ter. %sIngen regel för att skapa mÃ¥let â€%sâ€%s%sIngen regel för att skapa mÃ¥let â€%sâ€, som behövs av â€%sâ€%s%s[%s: %s] Fel %d%s%s[%u]: GÃ¥r till en okänd katalog %s[%u]: GÃ¥r till katalogen â€%s†%s[%u]: Lämnar en okänd katalog %s[%u]: Lämnar katalogen â€%s†â€%s†är aktuell.â€overrideâ€-direktiv*** Arkivmedlemmen â€%s†kan vara felaktig; ej borttagen*** Avbrott. *** Tar bort filen â€%sâ€*** Tar bort mellanfilen â€%sâ€*** Inväntar oavslutade jobb...*** Varning: .LOW_RESOLUTION_TIME-filen â€%s†har en högupplöst tidsstämpel*** [%s] Arkivmedlemmen â€%s†kan vara felaktig; ej borttagen*** [%s] Tar bort filen â€%sâ€*** blandade implicita regler och normala regler: förÃ¥ldrad syntax-O[TYP] (--output-sync[=TYP]) är inte konfigurerat för detta bygge.-varning, CTRL-Y-hantering kanske behöver Ã¥terställas frÃ¥n DCL. . Stannar. .DEFAULT_GOAL innehÃ¥ller fler än ett mÃ¥l.LIBPATTERNS-elementet â€%s†är inte ett mönster; använder VPATH-namnet â€%sâ€AvbrutenÃ…tkomstförseelse: läsinstruktion pÃ¥ adressen 0x%p Ã…tkomstförseelse: skrivinstruktion pÃ¥ adressen 0x%p AlarmklockaLägg till %.*s och rensa upp Lägg till utdata till %s Undviker rekursion orsakad av implicit regel. FEL: num_pattern_rules är felaktigt! %u != %uINBYGGT CD %s Felaktigt systemanropSatsfilinnehÃ¥ll: @echo off SatsfilinnehÃ¥ll:%s %s LedningsbrottBussfelCPU-tidsgräns överskredsKan inte skapa en temporärfil BarnÃ¥tkomstBarn avslutadesDet cirkulära beroendet %s <- %s släpptes.Städar bort tillfällig satsfil %s Bortstädning av tillfällig satsfil %s misslyckades (%d) Städar bort tillfällig satsfil %s Kollisioner=%lu/%lu=%.0f %%Överväger mÃ¥lfilen â€%sâ€. FortsatteKunde inte Ã¥terställa standard fel Kunde inte Ã¥terställa standard in Kunde inte Ã¥terställa standard ut Kunde inte Ã¥tergÃ¥ till ursprungskatalogen.CreatePipe() misslyckades (e=%ld) Skapar tillfällig satsfil %s Nuvarande tidCustoms kommer inte att exportera %s DCL: %s FarosignalEmulatorfällaTomt funktionsnamnTomt symbolnamn för laddning: %sUtför %s i stället Misslyckades att ladda symbolen %s frÃ¥n %s: %sMisslyckades att öppna den globala symboltabellen: %sMisslyckades med att Ã¥terskapa makefilen â€%sâ€.Misslyckades med att Ã¥terskapa mÃ¥lfilen â€%sâ€. Filen â€%s†finns inte. Filen â€%s†har redan övervägts. Filstorleksgräns överskredsAvslutade förutsättningarna för mÃ¥lfilen â€%sâ€. Slutförde uppdaterandet av filen â€%sâ€. Flyttalsprocessor inte tillgängligFlyttalsundantagHittade en implicit regel för â€%sâ€. Hittade förutsättningen â€%s†som VPATH â€%s†Funktionsnamnet är för lÃ¥ngt: %sGer upp med mÃ¥lfilen â€%sâ€. AvringdI/O-tillfälleIO-fällaOtillÃ¥ten instruktionDen inkluderade makefilen â€%s†fanns inte.InformationsbegäranÃ…tkomst inleddAvbrottFelaktigt funktionsnamn: %sFelaktigt största antal argument (%u) till funktionen â€%sâ€Felaktigt minsta antal argument (%u) till funktionen â€%sâ€Jobbserverklient (fb %d,%d) Jobbserverklient (semafor %s) Jobbserverfack begränsat till %d DödadLevande barnprocess %p (%s) PID %s %s Fyllnadsgrad=%lu/%lu=%.0f %%, Laddat objekt %s är inte deklarerat att vara GPL-kompatibeltLaddar symbol %s frÃ¥n %s Letar efter en regel med mellanfilen â€%sâ€. Letar efter en implicit regel för â€%sâ€. Letar efter en implicit regel för arkivmedlemmen â€%sâ€. Make-Ã¥tkomstMakefilen â€%s†kan loopa; Ã¥terskapas inte. Makefilen â€%s†fanns inteMakefil frÃ¥n standard in angavs dubbelt.Skapar â€%s†pÃ¥ grund av flaggan always-make. Felformad mÃ¥lberoende variabeldefinitionMedlem â€%sâ€%s: %ld byte vid %ld (%ld). MÃ¥ste Ã¥terskapa mÃ¥let â€%sâ€. IngaHittade ingen implicit regel för â€%sâ€. Inget behov att Ã¥terskapa mÃ¥let â€%sâ€Inget recept för â€%s†och inga förutsättningar har förändrats. Inga mÃ¥lInga mÃ¥l angavs och ingen makefil hittadesInget behöver göras för â€%sâ€.Erhöll symbol för barnprocessen %p (%s). Flaggor: Parallella jobb (-j) stöds inte pÃ¥ denna plattform.StrömavbrottFörutsättningen â€%s†är nyare än mÃ¥let â€%sâ€. Förutsättningen â€%s†är äldre än mÃ¥let â€%sâ€. Förutsättningen â€%s†för mÃ¥let â€%s†är endast ordning. Förutsättningen â€%s†för mÃ¥let â€%s†finns inte. Profileringstidur löpte utBeskär filen â€%sâ€. För upp barnprocessen %p (%s) PID %s%s pÃ¥ kedjan. AvslutadUtför pÃ¥ nytt[%u]:Läser makefilen â€%sâ€Läser makefiler... Inhöstar misslyckad barnprocess: %p PID %s %s Inhöstar lyckad barnprocess: %p PID %s %s Misslyckades nyligen med att uppdatera filen â€%sâ€. Kommer att bortse frÃ¥n recept för â€%s†till förmÃ¥n för det som gäller â€%sâ€.Recept för filen â€%s†hittades genom sökning efter implicit regel,Receptet har för mÃ¥nga rader (%ud)Receptet för â€%s†körs. Recept angavs för filen â€%s†pÃ¥ %s:%lu,Den rekursiva variabeln â€%s†hänvisar till sig själv (sÃ¥ smÃ¥ningom)Omhash=%u, Avvisar den omöjliga implicita förutsättningen â€%sâ€. Avvisar den omöjliga regelförutsättningen â€%sâ€. Frigjorde symbol för barnprocessen %p (%s). Tar bort barnprocessen %p PID %s%s frÃ¥n kedjan. Tar bort mellanfiler … Anmäl fel till . Skicka synpunkter pÃ¥ översättningen till . Ã…terställer till enkeljobbsläge (-j1).Miste resursSIGPHONESIGWINDSegmenteringsfelHoppar över UTF-8-BOM i makefilen â€%s†Hoppar över UTF-8-BOM i makefile-buffert Stammen är för lÃ¥ng: â€%s%.*sâ€. Uppdaterar fortfarande filen â€%sâ€. StoppadesStoppades (signal)Stoppades (tty-läsning)Stoppades (tty-utskrift)Ã…terskapade mÃ¥lfilen â€%sâ€. Symboliska länkar stöds inte: inaktiverar -L.MÃ¥let â€%s†är dubbelkolon och har inga förutsättningar. MÃ¥let â€%s†återskapades inte pÃ¥ grund av fel.MÃ¥lfilen â€%s†behöver Ã¥terskapas med -q. AvslutadOperationen â€load†stödjs inte pÃ¥ denna plattform.Förutsättningarna för â€%s†skapas. SpÃ¥rningsfällaPrövar den implicita förutsättningen â€%sâ€. Prövar mönsterregel med stammen â€%.*sâ€. Prövar det regelförutsättningen â€%sâ€. Uppdaterar slutmÃ¥l... Uppdaterar makefiler... BrÃ¥dskande I/O-lägeAnvändning: %s [flaggor] [mÃ¥l] ... AnvändarÃ¥tkomstAnvändarsignal 1Användarsignal 2Använder standardkommandon för â€%sâ€. Använder standardrecept för â€%sâ€. Virtuellt tidur löpte utVarning: Filen â€%s†har en ändringstid %s s i framtidenFönster ändratförsök att använda en funktion som inte stöds: â€%sâ€automatiskmen â€%s†anses nu vara samma fil som â€%sâ€.kan inte allokera %lu byte för hashtabell: minnet slutkan inte ändra namn frÃ¥n dubbelkolon â€%s†till enkelkolon â€%sâ€kan inte ändra namn frÃ¥n enkelkolon â€%s†till dubbelkolon â€%sâ€kan inte upprätthÃ¥lla lastbegränsning: kan inte upprätthÃ¥lla lastbegränsningar i detta operativsystemstäng: %s: %skommandoradskapar jobbrörskapar jobbserversemafor: (Fel %ld: %s)normalduplicerar jobbrören tom sträng är ett ogiltigt filnamntomt variabelnamnmiljömiljö enligt -eöverflödigt â€%sâ€Ã¶verflödig text efter direktivet â€%sâ€Ã¶verflödig text efter direktivet â€defineâ€Ã¶verflödig text efter direktivet â€endefâ€file: felaktig filÃ¥tgärd: %sfile: filnamn saknasfile: för mÃ¥nga argumentsökvägen för find_and_set_shell() gav default_shell = %s find_and_set_shell() ger default_shell = %s det första argumentet till funktionen â€word†mÃ¥ste vara större än 0fopen (temporärfil)fwrite (temporärfil)grupperade mÃ¥l mÃ¥ste tillhandahÃ¥lla ett receptguile: Evaluerar â€%s†guile: Expanderar â€%s†iordningställer rör till jobbserverotillräckligt antal argument (%d) till funktionen â€%sâ€internt fel: ogiltig sträng --jobserver-auth â€%sâ€Internt fel: kan inte öppna jobbserversemaforen â€%sâ€: (Fel %ld: %s)ogiltig syntax i villkorssatsjobbservern stängdes nerrör till jobbserverlbr$ini_control() misslyckades och gav status = %dlbr$set_module() misslyckades med att extrahera modulinformation, status = %dmake inhöstade barn-pid %s, inväntar fortfarande pid %s makefilâ€endef†saknas, oavslutad â€defineâ€â€endif†saknasregel saknas före receptseparator saknasseparator saknas (var avsikten TAB i stället för 8 mellanslag?)mÃ¥lmönster saknasblandade implicita regler och normala reglerblandade implicita regler och statiska mönsterreglerflera mÃ¥lmönsteringainga fler filhandtag: kunde inte duplicera standard fel inga fler filhandtag: kunde inte duplicera standard in inga fler filhandtag: kunde inte duplicera standard ut icke-numeriskt första argument till funktionen â€wordâ€icke-numeriskt första argument till funktionen â€wordlistâ€icke-numeriskt andra argument till funktionen â€wordlistâ€endast ett â€else†per villkoröppna: %s: %sberoenden kan inte definieras i receptprocess_easy() misslyckades med processtart (e=%ld) pselect jobbrörläser frÃ¥n jobbledningläs: %s: %srecept inleds före första mÃ¥letsläpp jobbserversemafor: (Fel %ld: %s)väntan pÃ¥ semafor eller barnprocess: (Fel %ld: %s)spawnvpe: miljöutrymmet kanske är slutsys$search() misslyckades med %d mÃ¥let â€%s†motsvarar inte mÃ¥lmönstretmÃ¥let â€%s†anges flera gÃ¥nger i samma regelmÃ¥lfilen â€%s†har bÃ¥de poster med : och ::mÃ¥lmönstret innehÃ¥ller inget â€%%â€flaggan â€%s%s†kräver ett strängargument som inte är tomtflaggan â€-%c†kräver ett positivt heltal som argumentatt nudda en arkivmedlem är inte tillgängligt i VMSnudda: â€%s†är inte nÃ¥got giltigt arkivnudda: Arkivet â€%s†finns intenudda: Felaktig returkod frÃ¥n ar_member_touch pÃ¥ â€%sâ€nudda: medlemmen â€%s†finns inte i â€%sâ€kan inte öppna biblioteket â€%s†för att slÃ¥ upp medlemsstatus %dej implementerat pÃ¥ denna plattform: funktionen â€%sâ€okänd felsökningsnivÃ¥ â€%s†angivenokänd typ av utmatningssynkronisering â€%sâ€okänd signalavlänka (temporärfil): oavslutat funktionsanrop â€%sâ€: â€%c†saknasoavslutad variabelreferensvarning: Klockförskjutning upptäckt. Bygget kan ha blivit ofullständigt.varning: -j%d framtvingat i makefile: Ã¥terställer jobbserverläge.varning: -j%d framtvingat i del-make: Ã¥terställer jobbserverläge.varning: NUL-tecken upptäckt, bortser frÃ¥n resten av radenvarning: ignorerar gammalt recept för mÃ¥let â€%sâ€varning: jobbserver otillgänglig: använder -j1. Lägg till â€+†i föräldraregeln.varning: Ã¥sidosätter gruppmedlemskap för mÃ¥let â€%sâ€varning: Ã¥sidosätter recept för mÃ¥let â€%sâ€varning: odefinierad variabel â€%.*sâ€windows32_openpipe(): process_init_fd() misslyckades windows32_openpipe: DuplicateHandle(Fel) misslyckades (e=%ld) windows32_openpipe: DuplicateHandle(In) misslyckades (e=%ld) skrivfel: standard utskriver till jobbserverskriv: %s: %smake-4.3/po/it.po0000644000175000017500000016147413611136531010625 00000000000000# Italian messages for GNU make. # Copyright (C) 2009 Free Software Foundation, Inc. # This file is distributed under the same license as the make package. # Francesco Groccia , 2010. # msgid "" msgstr "" "Project-Id-Version: make 4.2.91\n" "Report-Msgid-Bugs-To: bug-make@gnu.org\n" "POT-Creation-Date: 2020-01-19 15:34-0500\n" "PO-Revision-Date: 2019-11-13 10:20+0100\n" "Last-Translator: Francesco Groccia \n" "Language-Team: Italian \n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "X-Editor: Vim with po plugin\n" #: src/ar.c:46 #, c-format msgid "attempt to use unsupported feature: '%s'" msgstr "tentativo di usare una funzionalità non supportata: «%s»" #: src/ar.c:123 #, c-format msgid "touch archive member is not available on VMS" msgstr "touch del membro di archivio non disponibile su VMS" #: src/ar.c:147 #, c-format msgid "touch: Archive '%s' does not exist" msgstr "touch: l'archivio «%s» non esiste" #: src/ar.c:150 #, c-format msgid "touch: '%s' is not a valid archive" msgstr "touch: «%s» non è un archivio valido" #: src/ar.c:157 #, c-format msgid "touch: Member '%s' does not exist in '%s'" msgstr "touch: il membro «%s» non esiste in «%s»" #: src/ar.c:164 #, c-format msgid "touch: Bad return code from ar_member_touch on '%s'" msgstr "touch: codice di uscita errato da ar_member_touch su «%s»" #: src/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" #: src/arscan.c:236 #, c-format msgid "lbr$ini_control() failed with status = %d" msgstr "lbr$ini_control() non riuscita con lo stato = %d" #: src/arscan.c:261 #, c-format msgid "unable to open library '%s' to lookup member status %d" msgstr "" "impossibile aprire la libreria «%s» per cercare lo stato del membro «%d»" #: src/arscan.c:944 #, c-format msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n" msgstr "Membro «%s»%s: %ld byte a %ld (%ld).\n" #: src/arscan.c:945 msgid " (name might be truncated)" msgstr " (il nome potrebbe essere troncato)" #: src/arscan.c:947 #, c-format msgid " Date %s" msgstr " Data %s" #: src/arscan.c:948 #, c-format msgid " uid = %d, gid = %d, mode = 0%o.\n" msgstr " uid = %d, gid = %d, modo = 0%o.\n" #: src/commands.c:403 #, c-format msgid "Recipe has too many lines (%ud)" msgstr "Il set di istruzioni ha troppe righe (%ud)" #: src/commands.c:504 msgid "*** Break.\n" msgstr "*** Interruzione.\n" #: src/commands.c:628 #, c-format msgid "*** [%s] Archive member '%s' may be bogus; not deleted" msgstr "" "*** [%s] Il membro di archivio «%s» potrebbe essere inesistente; non " "eliminato" #: src/commands.c:632 #, c-format msgid "*** Archive member '%s' may be bogus; not deleted" msgstr "" "*** Il membro di archivio «%s» potrebbe essere inesistente; non eliminato" #: src/commands.c:646 #, c-format msgid "*** [%s] Deleting file '%s'" msgstr "*** [%s] Eliminazione del file «%s»" #: src/commands.c:648 #, c-format msgid "*** Deleting file '%s'" msgstr "*** Eliminazione del file «%s»" #: src/commands.c:684 msgid "# recipe to execute" msgstr "# set di istruzioni da eseguire" #: src/commands.c:687 msgid " (built-in):" msgstr " (comando interno):" #: src/commands.c:689 #, c-format msgid " (from '%s', line %lu):\n" msgstr " (da «%s» riga %lu):\n" #: src/dir.c:1073 msgid "" "\n" "# Directories\n" msgstr "" "\n" "# Directory\n" #: src/dir.c:1085 #, c-format msgid "# %s: could not be stat'd.\n" msgstr "# %s: impossibile eseguire stat.\n" #: src/dir.c:1089 msgid "# %s (key %s, mtime %I64u): could not be opened.\n" msgstr "# %s (key %s, mtime %I64u) non può essere aperto.\n" #: src/dir.c:1094 #, 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" #: src/dir.c:1099 #, c-format msgid "# %s (device %ld, inode %ld): could not be opened.\n" msgstr "# %s (device %ld, inode %ld) non può essere aperto.\n" #: src/dir.c:1126 msgid "# %s (key %s, mtime %I64u): " msgstr "# %s (key %s, mtime %I64u): " #: src/dir.c:1131 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): " msgstr "# %s (device %d, inode [%d,%d,%d]): " #: src/dir.c:1136 #, c-format msgid "# %s (device %ld, inode %ld): " msgstr "# %s (device %ld, inode %ld): " #: src/dir.c:1142 src/dir.c:1163 msgid "No" msgstr "No" #: src/dir.c:1145 src/dir.c:1166 msgid " files, " msgstr " file, " #: src/dir.c:1147 src/dir.c:1168 msgid "no" msgstr "no" #: src/dir.c:1150 msgid " impossibilities" msgstr " impossibilità" #: src/dir.c:1154 msgid " so far." msgstr " finora." #: src/dir.c:1171 #, c-format msgid " impossibilities in %lu directories.\n" msgstr " impossibilità nelle directory %lu.\n" #: src/expand.c:125 #, c-format msgid "Recursive variable '%s' references itself (eventually)" msgstr "La variabile ricorsiva «%s» si autoreferenzia (alla fine)" #: src/expand.c:271 #, c-format msgid "unterminated variable reference" msgstr "riferimento alla variabile non terminato" #: src/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," #: src/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," #: src/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»." #: src/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»." #: src/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»" #: src/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»" #: src/file.c:408 #, c-format msgid "*** Deleting intermediate file '%s'" msgstr "*** Eliminazione del file intermedio «%s»" #: src/file.c:412 #, c-format msgid "Removing intermediate files...\n" msgstr "Rimozione dei file intermedi...\n" #: src/file.c:872 msgid "Current time" msgstr "Ora corrente" #: src/file.c:876 #, c-format msgid "%s: Timestamp out of range; substituting %s" msgstr "%s: intervallo errato per la marcatura temporale; sostituzione di %s" #: src/file.c:1016 msgid "# Not a target:" msgstr "# Non è un obiettivo:" #: src/file.c:1021 msgid "# Precious file (prerequisite of .PRECIOUS)." msgstr "# File \"precious\" (prerequisito di .PRECIOUS)." #: src/file.c:1023 msgid "# Phony target (prerequisite of .PHONY)." msgstr "# Obiettivo \"phony\" (prerequisito di .PHONY)." #: src/file.c:1025 msgid "# Command line target." msgstr "# Obiettivo a riga di comando." #: src/file.c:1027 msgid "# A default, MAKEFILES, or -include/sinclude makefile." msgstr "# Un makefile predefinito, da MAKEFILES, o da -include/sinclude." #: src/file.c:1029 msgid "# Builtin rule" msgstr "# Regola incorporata" #: src/file.c:1031 msgid "# Implicit rule search has been done." msgstr "# Regola di ricerca implicita completata." #: src/file.c:1032 msgid "# Implicit rule search has not been done." msgstr "# Regola di ricerca implicita non completata." #: src/file.c:1034 #, c-format msgid "# Implicit/static pattern stem: '%s'\n" msgstr "# Stem implicito/statico del modello: «%s»\n" #: src/file.c:1036 msgid "# File is an intermediate prerequisite." msgstr "# Il file è un prerequisito intermedio." #: src/file.c:1040 msgid "# Also makes:" msgstr "# Inoltre, genera:" #: src/file.c:1046 msgid "# Modification time never checked." msgstr "# Ora di modifica mai controllata." #: src/file.c:1048 msgid "# File does not exist." msgstr "# Il file non esiste." #: src/file.c:1050 msgid "# File is very old." msgstr "# Il file è molto vecchio." #: src/file.c:1055 #, c-format msgid "# Last modified %s\n" msgstr "# Ultima modifica %s\n" #: src/file.c:1058 msgid "# File has been updated." msgstr "# Il file è stato aggiornato." #: src/file.c:1058 msgid "# File has not been updated." msgstr "# Il file non è stato aggiornato." #: src/file.c:1062 msgid "# Recipe currently running (THIS IS A BUG)." msgstr "# Set di istruzioni attualmente in esecuzione (QUESTO È UN BUG)." #: src/file.c:1065 msgid "# Dependencies recipe running (THIS IS A BUG)." msgstr "# Dipendenze del set di istruzioni in esecuzione (QUESTO È UN BUG)." #: src/file.c:1074 msgid "# Successfully updated." msgstr "# Aggiornato con successo." #: src/file.c:1078 msgid "# Needs to be updated (-q is set)." msgstr "# Richiede di essere aggiornato (-q è impostato)." #: src/file.c:1081 msgid "# Failed to be updated." msgstr "# Aggiornamento non riuscito." #: src/file.c:1086 msgid "# Invalid value in 'command_state' member!" msgstr "# Valore illecito nel membro \"command_state\"!" #: src/file.c:1105 msgid "" "\n" "# Files" msgstr "" "\n" "# File" #: src/file.c:1109 msgid "" "\n" "# files hash-table stats:\n" "# " msgstr "" "\n" "# statistiche tabella hash dei file:\n" "# " #: src/file.c:1119 #, c-format msgid "%s: Field '%s' not cached: %s" msgstr "%s: Campo «%s» non memorizzato: %s" #: src/function.c:794 msgid "non-numeric first argument to 'word' function" msgstr "primo argomento non numerico per la funzione \"word\"" #: src/function.c:799 #, c-format msgid "first argument to 'word' function must be greater than 0" msgstr "il primo argomento per la funzione \"word\" deve essere maggiore di 0" #: src/function.c:819 msgid "non-numeric first argument to 'wordlist' function" msgstr "primo argomento non numerico per la funzione \"wordlist\"" #: src/function.c:821 msgid "non-numeric second argument to 'wordlist' function" msgstr "secondo argomento non numerico per la funzione \"wordlist\"" #: src/function.c:1533 #, c-format msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n" msgstr "windows32_openpipe: DuplicateHandle(In) non riuscita (e=%ld)\n" #: src/function.c:1557 #, c-format msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n" msgstr "windows32_open_pipe: DuplicateHandle(Err) non riuscita (e=%ld)\n" #: src/function.c:1564 #, c-format msgid "CreatePipe() failed (e=%ld)\n" msgstr "CreatePipe() non riuscita (e=%ld)\n" #: src/function.c:1572 #, c-format msgid "windows32_openpipe(): process_init_fd() failed\n" msgstr "windows32_openpipe(): process_init_fd() non riuscita\n" #: src/function.c:1857 #, c-format msgid "Cleaning up temporary batch file %s\n" msgstr "Pulitura del file batch temporaneo %s\n" #: src/function.c:2230 src/function.c:2255 #, c-format msgid "file: missing filename" msgstr "file: file mancante" #: src/function.c:2234 src/function.c:2265 #, c-format msgid "open: %s: %s" msgstr "apertura: %s: %s" #: src/function.c:2242 #, c-format msgid "write: %s: %s" msgstr "scrittura: %s: %s" #: src/function.c:2245 src/function.c:2282 #, c-format msgid "close: %s: %s" msgstr "chiusura: %s: %s" #: src/function.c:2258 #, c-format msgid "file: too many arguments" msgstr "file: troppi argomenti" #: src/function.c:2277 #, c-format msgid "read: %s: %s" msgstr "lettura: %s: %s" #: src/function.c:2290 #, c-format msgid "file: invalid file operation: %s" msgstr "file: operazione sui file non valida: %s" #: src/function.c:2405 #, c-format msgid "insufficient number of arguments (%d) to function '%s'" msgstr "numero di argomenti non sufficienti (%d) per la funzione «%s»" #: src/function.c:2417 #, c-format msgid "unimplemented on this platform: function '%s'" msgstr "non implementata su questa piattaforma: funzione «%s»" #: src/function.c:2483 #, c-format msgid "unterminated call to function '%s': missing '%c'" msgstr "chiamata non terminata alla funzione «%s»: «%c» mancante" #: src/function.c:2667 #, c-format msgid "Empty function name" msgstr "Nome della funzione vuoto" #: src/function.c:2669 #, c-format msgid "Invalid function name: %s" msgstr "Nome della funzione non valido: %s" #: src/function.c:2671 #, c-format msgid "Function name too long: %s" msgstr "Nome della funzione troppo lungo: %s" #: src/function.c:2674 #, c-format msgid "Invalid minimum argument count (%u) for function %s" msgstr "Numero di argomenti non sufficienti (%u) per la funzione %s" #: src/function.c:2677 #, c-format msgid "Invalid maximum argument count (%u) for function %s" msgstr "Numero massimo di argomenti non sufficienti (%u) per la funzione %s" #: src/getopt.c:659 #, c-format msgid "%s: option '%s' is ambiguous\n" msgstr "%s: l'opzione «%s» è ambigua\n" #: src/getopt.c:683 #, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s: l'opzione «--%s» non ammette argomenti\n" #: src/getopt.c:688 #, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s: l'opzione «%c%s» non ammette argomenti\n" #: src/getopt.c:705 src/getopt.c:878 #, c-format msgid "%s: option '%s' requires an argument\n" msgstr "%s: l'opzione «%s» richiede un argomento\n" #: src/getopt.c:734 #, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s: opzione «--%s» sconosciuta\n" #: src/getopt.c:738 #, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s: opzione «%c%s» sconosciuta\n" #: src/getopt.c:764 #, c-format msgid "%s: illegal option -- %c\n" msgstr "%s: opzione illecita -- %c\n" #: src/getopt.c:767 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s: opzione illecita -- %c\n" #: src/getopt.c:797 src/getopt.c:927 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: l'opzione richiede un argomento -- %c\n" #: src/getopt.c:844 #, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s: l'opzione «-W %s» è ambigua\n" #: src/getopt.c:862 #, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s: l'opzione «-W %s» non ammette argomenti\n" #: src/guile.c:58 #, c-format msgid "guile: Expanding '%s'\n" msgstr "guile: Espansione di «%s»\n" #: src/guile.c:74 #, c-format msgid "guile: Evaluating '%s'\n" msgstr "guile: Valutazione di «%s»\n" #: src/hash.c:50 #, c-format msgid "can't allocate %lu bytes for hash table: memory exhausted" msgstr "impossibile allocare %lu byte per la tabella hash: memoria esaurita" #: src/hash.c:280 #, c-format msgid "Load=%lu/%lu=%.0f%%, " msgstr "Carico=%lu/%lu=%.0f%%, " #: src/hash.c:282 #, c-format msgid "Rehash=%u, " msgstr "Rehash=%u, " #: src/hash.c:283 #, c-format msgid "Collisions=%lu/%lu=%.0f%%" msgstr "Collisioni=%lu/%lu=%.0f%%" #: src/implicit.c:38 #, c-format msgid "Looking for an implicit rule for '%s'.\n" msgstr "Ricerca di una regola implicita per «%s».\n" #: src/implicit.c:54 #, c-format msgid "Looking for archive-member implicit rule for '%s'.\n" msgstr "Ricerca di una regola implicita per il membro di archivio per «%s».\n" #: src/implicit.c:311 #, c-format msgid "Avoiding implicit rule recursion.\n" msgstr "Evitata la ricorsione della regola implicita.\n" #: src/implicit.c:484 #, fuzzy, c-format msgid "Stem too long: '%s%.*s'.\n" msgstr "Stem troppo lungo: «%.*s».\n" #: src/implicit.c:490 #, c-format msgid "Trying pattern rule with stem '%.*s'.\n" msgstr "Tentativo di usare la regola del modello con stem «%.*s».\n" #: src/implicit.c:717 #, c-format msgid "Rejecting impossible rule prerequisite '%s'.\n" msgstr "Prerequisito impossibile «%s» della regola rifiutato.\n" #: src/implicit.c:718 #, c-format msgid "Rejecting impossible implicit prerequisite '%s'.\n" msgstr "Prerequisito implicito impossibile «%s» rifiutato.\n" #: src/implicit.c:732 #, c-format msgid "Trying rule prerequisite '%s'.\n" msgstr "Tentativo di usare il prerequisito della regola «%s».\n" #: src/implicit.c:733 #, c-format msgid "Trying implicit prerequisite '%s'.\n" msgstr "Tentativo di usare il prerequisito implicito «%s».\n" #: src/implicit.c:772 #, c-format msgid "Found prerequisite '%s' as VPATH '%s'\n" msgstr "Trovato il prerequisito «%s» come VPATH «%s»\n" #: src/implicit.c:786 #, c-format msgid "Looking for a rule with intermediate file '%s'.\n" msgstr "Ricerca di una regola con il file intermedio «%s».\n" #: src/job.c:370 msgid "Cannot create a temporary file\n" msgstr "Impossibile creare un file temporaneo\n" #: src/job.c:548 msgid " (core dumped)" msgstr " (creato dump del core)" #: src/job.c:553 msgid " (ignored)" msgstr " (ignorato)" #: src/job.c:557 src/job.c:1892 msgid "" msgstr "" #: src/job.c:573 #, c-format msgid "%s[%s: %s] Error %d%s" msgstr "%s[%s: %s] Errore %d%s" #: src/job.c:662 #, c-format msgid "*** Waiting for unfinished jobs...." msgstr "*** Attesa per i processi non terminati...." #: src/job.c:704 #, c-format msgid "Live child %p (%s) PID %s %s\n" msgstr "Processo figlio vivo %p (%s) con PID %s %s\n" #: src/job.c:706 src/job.c:900 src/job.c:1072 src/job.c:1644 #, c-format msgid " (remote)" msgstr " (remoto)" #: src/job.c:898 #, c-format msgid "Reaping winning child %p PID %s %s\n" msgstr "Interruzione del processo figlio vincente %p con PID %s %s\n" #: src/job.c:899 #, c-format msgid "Reaping losing child %p PID %s %s\n" msgstr "Interruzione del processo figlio perdente %p con PID %s %s\n" #: src/job.c:950 #, c-format msgid "Cleaning up temp batch file %s\n" msgstr "Pulitura del file batch temporaneo %s\n" #: src/job.c:956 #, c-format msgid "Cleaning up temp batch file %s failed (%d)\n" msgstr "Pulitura del file batch temporaneo %s non riuscita (%d)\n" #: src/job.c:1071 #, 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" #: src/job.c:1120 #, c-format msgid "Released token for child %p (%s).\n" msgstr "Token rilasciato per il processo figlio %p (%s).\n" #: src/job.c:1575 src/job.c:2487 #, c-format msgid "process_easy() failed to launch process (e=%ld)\n" msgstr "process_easy() non riuscita all'avvio del processo (e=%ld)\n" #: src/job.c:1579 src/job.c:2491 #, c-format msgid "" "\n" "Counted %d args in failed launch\n" msgstr "" "\n" "Contati %d argomenti nell'avvio fallito\n" #: src/job.c:1642 #, 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" #: src/job.c:1875 #, c-format msgid "Obtained token for child %p (%s).\n" msgstr "Token ottenuto per il processo figlio %p (%s).\n" #: src/job.c:1902 #, c-format msgid "%s: target '%s' does not exist" msgstr "%s: l'obbiettivo «%s» non esiste" #: src/job.c:1905 #, c-format msgid "%s: update target '%s' due to: %s" msgstr "%s: aggiorna l'obbiettivo «%s» a causa di: %s" #: src/job.c:2108 #, c-format msgid "cannot enforce load limits on this operating system" msgstr "" "impossibile far rispettare i limiti di carico su questo sistema operativo" #: src/job.c:2110 msgid "cannot enforce load limit: " msgstr "impossibile far rispettare il limite di carico: " #: src/job.c:2200 #, c-format msgid "no more file handles: could not duplicate stdin\n" msgstr "" "nessun'altra gestione del file: impossibile duplicare lo standard input\n" #: src/job.c:2212 #, c-format msgid "no more file handles: could not duplicate stdout\n" msgstr "" "nessun'altra gestione del file: impossibile duplicare lo standard output\n" #: src/job.c:2226 #, c-format msgid "no more file handles: could not duplicate stderr\n" msgstr "" "nessun'altra gestione del file: impossibile duplicare lo standard error\n" #: src/job.c:2241 #, c-format msgid "Could not restore stdin\n" msgstr "Impossibile ripristinare lo standard input\n" #: src/job.c:2249 #, c-format msgid "Could not restore stdout\n" msgstr "Impossibile ripristinare lo standard output\n" #: src/job.c:2257 #, c-format msgid "Could not restore stderr\n" msgstr "Impossibile ripristinare lo standard error\n" #: src/job.c:2520 #, 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" #: src/job.c:2623 #, c-format msgid "spawnvpe: environment space might be exhausted" msgstr "spawnvpe: lo spazio dell'ambiente potrebbe essere esaurito" #: src/job.c:2862 #, c-format msgid "$SHELL changed (was '%s', now '%s')\n" msgstr "$SHELL cambiata (era «%s», adesso è «%s»)\n" #: src/job.c:3300 src/job.c:3485 #, c-format msgid "Creating temporary batch file %s\n" msgstr "Creazione del file batch temporaneo %s\n" #: src/job.c:3308 #, c-format msgid "" "Batch file contents:\n" "\t@echo off\n" msgstr "" "Contenuti del file batch:\n" "\t@echo off\n" #: src/job.c:3497 #, c-format msgid "" "Batch file contents:%s\n" "\t%s\n" msgstr "" "Contenuti del file batch:%s\n" "\t%s\n" #: src/job.c:3605 #, c-format msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n" msgstr "" "%s (riga %d) contesto della shell errato (!unixy && !batch_mode_shell)\n" #: src/load.c:60 #, c-format msgid "Failed to open global symbol table: %s" msgstr "Apertura della tabella dei simboli globale non riuscita: %s" #: src/load.c:97 #, c-format msgid "Loaded object %s is not declared to be GPL compatible" msgstr "L'oggetto caricato %s non è dichiarato compatibile con la licenza GPL" #: src/load.c:104 #, c-format msgid "Failed to load symbol %s from %s: %s" msgstr "Caricamento del simbolo %s da %s non riuscito: %s" #: src/load.c:149 #, c-format msgid "Empty symbol name for load: %s" msgstr "Nome del simbolo vuoto per il caricamento: %s" #: src/load.c:204 #, c-format msgid "Loading symbol %s from %s\n" msgstr "Caricamento del simbolo %s da %s\n" #: src/load.c:256 #, c-format msgid "The 'load' operation is not supported on this platform." msgstr "L'operazione «load» non è supportata su questa piattaforma." #: src/main.c:335 msgid "Options:\n" msgstr "Opzioni:\n" #: src/main.c:336 msgid " -b, -m Ignored for compatibility.\n" msgstr " -b, -m Ignorato per compatibilità.\n" #: src/main.c:338 msgid " -B, --always-make Unconditionally make all targets.\n" msgstr "" " -B, --always-make Genera tutti gli obiettivi " "incondizionatamente.\n" #: src/main.c:340 msgid "" " -C DIRECTORY, --directory=DIRECTORY\n" " Change to DIRECTORY before doing anything.\n" msgstr "" " -C DIRECTORY, --directory=DIRECTORY\n" " Cambia DIRECTORY prima di fare qualunque " "cosa.\n" #: src/main.c:343 msgid " -d Print lots of debugging information.\n" msgstr " -d Mostra molte informazioni di debug.\n" #: src/main.c:345 msgid "" " --debug[=FLAGS] Print various types of debugging information.\n" msgstr "" " --debug[=FLAGS] Mostra diversi tipi di informazioni di debug.\n" #: src/main.c:347 msgid "" " -e, --environment-overrides\n" " Environment variables override makefiles.\n" msgstr "" " -e, --environment-overrides\n" " Le variabili ambiente sovrascrivono i " "makefile.\n" #: src/main.c:350 msgid "" " -E STRING, --eval=STRING Evaluate STRING as a makefile statement.\n" msgstr "" " -E STRINGA, --eval=TESTO Analizza STRINGA come estratta dal " "makefile.\n" #: src/main.c:352 msgid "" " -f FILE, --file=FILE, --makefile=FILE\n" " Read FILE as a makefile.\n" msgstr "" " -f FILE, --file=FILE, --makefile=FILE\n" " Legge FILE come un makefile.\n" #: src/main.c:355 msgid " -h, --help Print this message and exit.\n" msgstr " -h, --help Mostra questo messaggio ed esce.\n" #: src/main.c:357 msgid " -i, --ignore-errors Ignore errors from recipes.\n" msgstr "" " -i, --ignore-errors Ignora gli errori dai set di istruzioni.\n" #: src/main.c:359 msgid "" " -I DIRECTORY, --include-dir=DIRECTORY\n" " Search DIRECTORY for included makefiles.\n" msgstr "" " -I DIRECTORY, --include-dir=DIRECTORY\n" " Cerca nella DIRECTORY per i makefile inclusi.\n" #: src/main.c:362 msgid "" " -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no " "arg.\n" msgstr "" " -j [N], --jobs[=N] Permette N processi alla volta; infiniti se " "non viene specificato l'argomento.\n" #: src/main.c:364 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" #: src/main.c:366 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" " Non avvia processi multipli a meno che il " "carico di lavoro non sia sotto N.\n" #: src/main.c:369 msgid "" " -L, --check-symlink-times Use the latest mtime between symlinks and " "target.\n" msgstr "" " -L, --check-symlink-times Usa il più recente mtime tra i collegamenti " "simbolici e l'obiettivo.\n" #: src/main.c:371 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" " Non esegue alcun set di istruzioni; lo stampa " "solamente.\n" #: src/main.c:374 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" " Considera il FILE come molto vecchio e non " "riesegue make.\n" #: src/main.c:377 msgid "" " -O[TYPE], --output-sync[=TYPE]\n" " Synchronize output of parallel jobs by TYPE.\n" msgstr "" " -O[TIPO], --output-sync[=TIPO]\n" " Sincronizza l'output dei processi paralleli " "dal TIPO.\n" #: src/main.c:380 msgid " -p, --print-data-base Print make's internal database.\n" msgstr " -p, --print-data-base Stampa il database interno di make.\n" #: src/main.c:382 msgid "" " -q, --question Run no recipe; exit status says if up to " "date.\n" msgstr "" " -q, --question Non avvia alcun set di istruzioni; lo stato di " "uscita indica se è aggiornato.\n" #: src/main.c:384 msgid " -r, --no-builtin-rules Disable the built-in implicit rules.\n" msgstr "" " -r, --no-builtin-rules Disabilita le regole implicite interne.\n" #: src/main.c:386 msgid " -R, --no-builtin-variables Disable the built-in variable settings.\n" msgstr "" " -R, --no-builtin-variables Disabilita le impostazioni delle variabili " "interne.\n" #: src/main.c:388 msgid " -s, --silent, --quiet Don't echo recipes.\n" msgstr " -s, --silent, --quiet Non visualizza i set di istruzioni.\n" #: src/main.c:390 msgid " --no-silent Echo recipes (disable --silent mode).\n" msgstr "" " --no-silent Visualizza il set di istruzioni (Disabilita la " "modalità --silent).\n" #: src/main.c:392 msgid "" " -S, --no-keep-going, --stop\n" " Turns off -k.\n" msgstr "" " -S, --no-keep-going, --stop\n" " Disattiva l'opzione -k.\n" # ## touch = in questo contesto è simile alla funzione del comando 'touch' #: src/main.c:395 msgid " -t, --touch Touch targets instead of remaking them.\n" msgstr "" " -t, --touch Esegue il touch degli obiettivi invece di " "ricrearli.\n" #: src/main.c:397 msgid " --trace Print tracing information.\n" msgstr " --trace Stampa informazioni di tracciamento.\n" #: src/main.c:399 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" #: src/main.c:401 msgid " -w, --print-directory Print the current directory.\n" msgstr " -w, --print-directory Stampa la directory corrente.\n" #: src/main.c:403 msgid "" " --no-print-directory Turn off -w, even if it was turned on " "implicitly.\n" msgstr "" " --no-print-directory Disattiva l'opzione -w, anche se era stata " "attivata implicitamente.\n" #: src/main.c:405 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" " Considera il FILE come nuovo di zecca.\n" #: src/main.c:408 msgid "" " --warn-undefined-variables Warn when an undefined variable is " "referenced.\n" msgstr "" " --warn-undefined-variables Avvisa quando viene referenziata una variabile " "non definita.\n" #: src/main.c:671 #, c-format msgid "empty string invalid as file name" msgstr "una stringa vuota non è valida come nome di file" #: src/main.c:754 #, c-format msgid "unknown debug level specification '%s'" msgstr "livello di debug specificato sconosciuto «%s»" #: src/main.c:794 #, c-format msgid "unknown output-sync type '%s'" msgstr "tipo di output-sync (sincronizzazione dell'output) sconosciuto «%s»" #: src/main.c:849 #, 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" #: src/main.c:856 #, c-format msgid "" "\n" "Unhandled exception filter called from program %s\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" msgstr "" "\n" "Filtro eccezione non gestita chiamata dal programma %s\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" #: src/main.c:864 #, c-format msgid "Access violation: write operation at address 0x%p\n" msgstr "Violazione accesso: operazione di scrittura all'indirizzo 0x%p\n" #: src/main.c:865 #, c-format msgid "Access violation: read operation at address 0x%p\n" msgstr "Violazione accesso: operazione di lettura all'indirizzo 0x%p\n" #: src/main.c:941 src/main.c:956 #, c-format msgid "find_and_set_shell() setting default_shell = %s\n" msgstr "find_and_set_shell() impostazione default_shell = %s\n" #: src/main.c:1009 #, 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" #: src/main.c:1609 #, c-format msgid "" "warning: jobserver unavailable: using -j1. Add '+' to parent make rule." msgstr "" "attenzione: jobserver non disponibile, viene usato -j1. Aggiungere «+» alla " "regola make superiore." #: src/main.c:1617 #, c-format msgid "warning: -j%d forced in submake: resetting jobserver mode." msgstr "" "attenzione: -j%d forzata nel submake: disattivazione della modalità " "jobserver." #: src/main.c:1781 #, c-format msgid "Makefile from standard input specified twice." msgstr "Il Makefile dallo standard input è stato specificato due volte." #: src/main.c:1819 src/vmsjobs.c:1248 msgid "fopen (temporary file)" msgstr "fopen (file temporaneo)" #: src/main.c:1825 msgid "fwrite (temporary file)" msgstr "fwrite (file temporaneo)" #: src/main.c:2004 #, c-format msgid "warning: -j%d forced in makefile: resetting jobserver mode." msgstr "" "attenzione: -j%d forzata nel submake: disattivazione della modalità " "jobserver." #: src/main.c:2068 #, c-format msgid "Parallel jobs (-j) are not supported on this platform." msgstr "I processi paralleli (-j) non sono supportati su questa piattaforma." #: src/main.c:2069 #, c-format msgid "Resetting to single job (-j1) mode." msgstr "Reimpostazione alla modalità a singolo processo (-j1)." #: src/main.c:2109 #, c-format msgid "Symbolic links not supported: disabling -L." msgstr "Collegamenti simbolici non supportati: opzione -L disabilitata." #: src/main.c:2190 #, c-format msgid "Updating makefiles....\n" msgstr "Aggiornamento dei makefile....\n" #: src/main.c:2226 #, 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" #: src/main.c:2303 #, c-format msgid "Failed to remake makefile '%s'." msgstr "Riesecuzione del makefile «%s» non riuscita." #: src/main.c:2323 #, c-format msgid "Included makefile '%s' was not found." msgstr "Il makefile «%s» incluso non è stato trovato." #: src/main.c:2328 #, c-format msgid "Makefile '%s' was not found" msgstr "Il makefile «%s» non è stato trovato" #: src/main.c:2394 #, c-format msgid "Couldn't change back to original directory." msgstr "Impossibile ritornare alla directory originale." #: src/main.c:2402 #, c-format msgid "Re-executing[%u]:" msgstr "Riesecuzione[%u]:" #: src/main.c:2522 msgid "unlink (temporary file): " msgstr "unlink (file temporaneo): " #: src/main.c:2555 #, c-format msgid ".DEFAULT_GOAL contains more than one target" msgstr ".DEFAULT_GOAL contiene più di un obiettivo" #: src/main.c:2579 #, c-format msgid "No targets" msgstr "Nessun obiettivo" #: src/main.c:2581 #, c-format msgid "No targets specified and no makefile found" msgstr "Nessun obiettivo specificato e nessun makefile trovato" #: src/main.c:2586 #, c-format msgid "Updating goal targets....\n" msgstr "Aggiornamento degli obiettivi....\n" #: src/main.c:2610 #, c-format msgid "warning: Clock skew detected. Your build may be incomplete." msgstr "" "attenzione: rilevato un tempo alterato. La creazione potrebbe essere " "incompleta." #: src/main.c:2804 #, c-format msgid "Usage: %s [options] [target] ...\n" msgstr "Uso: %s [opzioni] [obiettivo] ...\n" #: src/main.c:2810 #, c-format msgid "" "\n" "This program built for %s\n" msgstr "" "\n" "Questo programma è stato compilato per %s\n" #: src/main.c:2812 #, c-format msgid "" "\n" "This program built for %s (%s)\n" msgstr "" "\n" "Questo programma è stato compilato per %s (%s)\n" #: src/main.c:2815 #, c-format msgid "Report bugs to \n" msgstr "Segnalare i bug a \n" #: src/main.c:2901 #, c-format msgid "the '%s%s' option requires a non-empty string argument" msgstr "l'opzione «%s%s» richiede un argomento stringa non vuoto" #: src/main.c:2965 #, c-format msgid "the '-%c' option requires a positive integer argument" msgstr "l'opzione «-%c» richiede un argomento intero positivo" #: src/main.c:3363 #, c-format msgid "%sBuilt for %s\n" msgstr "%sCompilato per %s\n" #: src/main.c:3365 #, c-format msgid "%sBuilt for %s (%s)\n" msgstr "%sCompilato per %s (%s)\n" #: src/main.c:3376 #, c-format msgid "" "%sLicense GPLv3+: GNU GPL version 3 or later \n" "%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 Licenza GPLv3+: GNU GPL versione 3 o successiva .\n" "%s Questo programma è software libero: siete liberi di modificarlo e " "ridistribuirlo.\n" "%s Non c'è ALCUNA GARANZIA, per quanto consentito dalle vigenti normative.\n" #: src/main.c:3397 #, c-format msgid "" "\n" "# Make data base, printed on %s" msgstr "" "\n" "# Generazione del database delle informazioni, creato il %s" #: src/main.c:3407 #, c-format msgid "" "\n" "# Finished Make data base on %s\n" msgstr "" "\n" "# Generazione del database completata il %s\n" #: src/misc.c:643 #, c-format msgid "%s: user %lu (real %lu), group %lu (real %lu)\n" msgstr "%s: utente %lu (reale %lu), gruppo %lu (reale %lu)\n" #: src/misc.c:664 msgid "Initialized access" msgstr "Accesso inizializzato" #: src/misc.c:743 msgid "User access" msgstr "Accesso utente" #: src/misc.c:791 msgid "Make access" msgstr "Accesso make" #: src/misc.c:825 msgid "Child access" msgstr "Accesso processo figlio" #: src/output.c:97 #, c-format msgid "%s: Entering an unknown directory\n" msgstr "%s: ingresso in una directory sconosciuta\n" #: src/output.c:99 #, c-format msgid "%s: Leaving an unknown directory\n" msgstr "%s: uscita dalla directory sconosciuta\n" #: src/output.c:102 #, c-format msgid "%s: Entering directory '%s'\n" msgstr "%s: ingresso nella directory «%s»\n" #: src/output.c:104 #, c-format msgid "%s: Leaving directory '%s'\n" msgstr "%s: uscita dalla directory «%s»\n" #: src/output.c:108 #, c-format msgid "%s[%u]: Entering an unknown directory\n" msgstr "%s[%u]: ingresso in una directory sconosciuta\n" #: src/output.c:110 #, c-format msgid "%s[%u]: Leaving an unknown directory\n" msgstr "%s[%u]: uscita dalla directory sconosciuta\n" #: src/output.c:113 #, c-format msgid "%s[%u]: Entering directory '%s'\n" msgstr "%s[%u]: ingresso nella directory «%s»\n" #: src/output.c:115 #, c-format msgid "%s[%u]: Leaving directory '%s'\n" msgstr "%s[%u]: uscita dalla directory «%s»\n" #: src/output.c:442 src/output.c:444 #, c-format msgid "write error: stdout" msgstr "errore in scrittura: stdout" #: src/output.c:624 msgid ". Stop.\n" msgstr ". Arresto.\n" #: src/output.c:658 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" #: src/output.c:667 #, c-format msgid "%s: %s" msgstr "%s: %s" #: src/output.h:62 #, c-format msgid "-O[TYPE] (--output-sync[=TYPE]) is not configured for this build." msgstr "-O[TIPO] (--output-sync[=TIPO]) non è configurato per questa versione." #: src/posixos.c:90 msgid "creating jobs pipe" msgstr "creazione della pipe dei processi" #: src/posixos.c:98 src/posixos.c:251 msgid "duping jobs pipe" msgstr "beffa della pipe dei processi" #: src/posixos.c:104 msgid "init jobserver pipe" msgstr "inizializzazione nella pipe della modalità jobserver" #: src/posixos.c:119 #, c-format msgid "internal error: invalid --jobserver-auth string '%s'" msgstr "errore interno: stringa illecita per --jobserver-auth «%s»" #: src/posixos.c:122 #, c-format msgid "Jobserver client (fds %d,%d)\n" msgstr "Client del jobserver (fds %d,%d)\n" #: src/posixos.c:138 msgid "jobserver pipeline" msgstr "jobserver pipeline" #: src/posixos.c:186 msgid "write jobserver" msgstr "scrittura del jobserver" #: src/posixos.c:300 #, c-format msgid "job server shut down" msgstr "job server spento" #: src/posixos.c:303 msgid "pselect jobs pipe" msgstr "pselect della pipe dei processi" #: src/posixos.c:319 src/posixos.c:433 msgid "read jobs pipe" msgstr "lettura della pipe dei processi" #: src/read.c:181 #, c-format msgid "Reading makefiles...\n" msgstr "Lettura dei makefile...\n" #: src/read.c:336 #, c-format msgid "Reading makefile '%s'" msgstr "Lettura del makefile «%s»" #: src/read.c:338 #, c-format msgid " (no default goal)" msgstr " (nessun obiettivo predefinito)" #: src/read.c:340 #, c-format msgid " (search path)" msgstr " (percorso di ricerca)" #: src/read.c:342 #, c-format msgid " (don't care)" msgstr " (ignora)" #: src/read.c:344 #, c-format msgid " (no ~ expansion)" msgstr " (nessuna espansione per «~»)" #: src/read.c:655 #, c-format msgid "Skipping UTF-8 BOM in makefile '%s'\n" msgstr "UTF-8 BOM nel makefile «%s» saltato\n" #: src/read.c:658 #, c-format msgid "Skipping UTF-8 BOM in makefile buffer\n" msgstr "UTF-8 BOM nel makefile buffer saltato\n" #: src/read.c:787 #, c-format msgid "invalid syntax in conditional" msgstr "sintassi illecita nel condizionale" #: src/read.c:960 #, c-format msgid "%s: failed to load" msgstr "%s: caricamento non riuscito" #: src/read.c:986 #, c-format msgid "recipe commences before first target" msgstr "il set di istruzioni inizia prima del primo obiettivo" #: src/read.c:1035 #, c-format msgid "missing rule before recipe" msgstr "regola mancante prima del set di istruzioni" #: src/read.c:1136 #, c-format msgid "missing separator (did you mean TAB instead of 8 spaces?)" msgstr "separatore mancante (si intendeva TAB invece di 8 spazi?)" #: src/read.c:1138 #, c-format msgid "missing separator" msgstr "separatore mancante" #: src/read.c:1283 #, c-format msgid "missing target pattern" msgstr "modello mancante per l'obiettivo" #: src/read.c:1285 #, c-format msgid "multiple target patterns" msgstr "modelli multipli per l'obiettivo" #: src/read.c:1289 #, c-format msgid "target pattern contains no '%%'" msgstr "il modello dell'obiettivo non contiene alcun «%%»" #: src/read.c:1404 #, c-format msgid "missing 'endif'" msgstr "«endif» mancante" #: src/read.c:1443 src/read.c:1488 src/variable.c:1600 #, c-format msgid "empty variable name" msgstr "nome vuoto della variabile" #: src/read.c:1478 #, c-format msgid "extraneous text after 'define' directive" msgstr "testo non pertinente dopo la direttiva «define»" #: src/read.c:1503 #, c-format msgid "missing 'endef', unterminated 'define'" msgstr "«endef» mancante, «define» non terminato" #: src/read.c:1531 #, c-format msgid "extraneous text after 'endef' directive" msgstr "testo non pertinente dopo la direttiva «endef»" #: src/read.c:1603 #, c-format msgid "extraneous text after '%s' directive" msgstr "testo non pertinente dopo la direttiva «%s»" #: src/read.c:1604 #, c-format msgid "extraneous '%s'" msgstr "«%s» non pertinente" #: src/read.c:1632 #, c-format msgid "only one 'else' per conditional" msgstr "un solo «else» per condizionale" #: src/read.c:1908 #, c-format msgid "Malformed target-specific variable definition" msgstr "Definizione malformata della variabile specifica per l'obiettivo" #: src/read.c:1968 #, c-format msgid "prerequisites cannot be defined in recipes" msgstr "i prerequisiti non possono essere definiti nei set di istruzioni" #: src/read.c:1986 #, c-format msgid "grouped targets must provide a recipe" msgstr "gli obbiettivi raggruppati devono fornire un set di istruzioni" #: src/read.c:2029 #, c-format msgid "mixed implicit and static pattern rules" msgstr "regole del modello implicite e statiche miste" #: src/read.c:2052 #, c-format msgid "mixed implicit and normal rules" msgstr "regole implicite e normali miste" #: src/read.c:2107 #, c-format msgid "target '%s' doesn't match the target pattern" msgstr "" "il «%s» dell'obiettivo non corrisponde al modello dell'obiettivo stesso" #: src/read.c:2122 src/read.c:2168 #, c-format msgid "target file '%s' has both : and :: entries" msgstr "il file dell'obiettivo «%s» contiene sia : che ::" #: src/read.c:2128 #, 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" #: src/read.c:2138 #, c-format msgid "warning: overriding recipe for target '%s'" msgstr "attenzione: sovrascrittura del set di istruzioni per l'obiettivo «%s»" #: src/read.c:2141 #, c-format msgid "warning: ignoring old recipe for target '%s'" msgstr "" "attenzione: ignorato il set di istruzioni obsoleto per l'obiettivo «%s»" #: src/read.c:2254 #, c-format msgid "*** mixed implicit and normal rules: deprecated syntax" msgstr "*** regole implicite e normali miste: sintassi deprecata" #: src/read.c:2271 #, c-format msgid "warning: overriding group membership for target '%s'" msgstr "" "attenzione: sovrascrittura dell'appartenente al gruppo per l'obiettivo «%s»" #: src/read.c:2636 #, c-format msgid "warning: NUL character seen; rest of line ignored" msgstr "" "attenzione: è stato rilevato il carattere NUL; il resto della riga viene " "ignorato" #: src/remake.c:226 #, c-format msgid "Nothing to be done for '%s'." msgstr "Nessuna operazione da eseguire per «%s»." #: src/remake.c:227 #, c-format msgid "'%s' is up to date." msgstr "«%s» è aggiornato." #: src/remake.c:323 #, c-format msgid "Pruning file '%s'.\n" msgstr "Pulizia del file «%s».\n" #: src/remake.c:389 #, 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" #: src/remake.c:399 #, c-format msgid "%sNo rule to make target '%s'%s" msgstr "%s Nessuna regola per generare l'obiettivo «%s»%s" #: src/remake.c:425 #, c-format msgid "Considering target file '%s'.\n" msgstr "Considerato il file obiettivo «%s».\n" #: src/remake.c:432 #, c-format msgid "Recently tried and failed to update file '%s'.\n" msgstr "Tentativo recente di aggiornamento del file «%s» non riuscito.\n" #: src/remake.c:444 #, c-format msgid "File '%s' was considered already.\n" msgstr "Il file «%s» è già stato esaminato.\n" #: src/remake.c:454 #, c-format msgid "Still updating file '%s'.\n" msgstr "L'aggiornamento del file «%s» è ancora in corso.\n" #: src/remake.c:457 #, c-format msgid "Finished updating file '%s'.\n" msgstr "Aggiornamento del file «%s» terminato.\n" #: src/remake.c:486 #, c-format msgid "File '%s' does not exist.\n" msgstr "Il file «%s» non esiste.\n" #: src/remake.c:494 #, c-format msgid "" "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp" msgstr "" "*** Attenzione: il file .LOW_RESOLUTION_TIME «%s» ha una marcatura temporale " "ad alta risoluzione" #: src/remake.c:507 src/remake.c:1039 #, c-format msgid "Found an implicit rule for '%s'.\n" msgstr "Trovata una regola implicita per «%s».\n" #: src/remake.c:509 src/remake.c:1041 #, c-format msgid "No implicit rule found for '%s'.\n" msgstr "Nessuna regola implicita trovata per «%s».\n" #: src/remake.c:515 #, c-format msgid "Using default recipe for '%s'.\n" msgstr "Uso del set di istruzioni predefinito per «%s».\n" #: src/remake.c:549 src/remake.c:1088 #, c-format msgid "Circular %s <- %s dependency dropped." msgstr "Dipendenza circolare %s <- %s scartata." #: src/remake.c:674 #, c-format msgid "Finished prerequisites of target file '%s'.\n" msgstr "Prerequisiti del file obiettivo «%s» terminati.\n" #: src/remake.c:680 #, c-format msgid "The prerequisites of '%s' are being made.\n" msgstr "Generazione dei prerequisiti di «%s» in corso.\n" #: src/remake.c:694 #, c-format msgid "Giving up on target file '%s'.\n" msgstr "Abbandono sul file obiettivo «%s».\n" #: src/remake.c:699 #, c-format msgid "Target '%s' not remade because of errors." msgstr "L'obiettivo «%s» non è stato rigenerato a causa di errori." #: src/remake.c:751 #, c-format msgid "Prerequisite '%s' is order-only for target '%s'.\n" msgstr "Il prerequisito «%s» è solo per l'obiettivo «%s».\n" #: src/remake.c:756 #, c-format msgid "Prerequisite '%s' of target '%s' does not exist.\n" msgstr "Il prerequisito «%s» dell'obiettivo «%s» non esiste.\n" #: src/remake.c:761 #, c-format msgid "Prerequisite '%s' is newer than target '%s'.\n" msgstr "Il prerequisito «%s» è più nuovo di quello dell'obiettivo «%s».\n" #: src/remake.c:764 #, c-format msgid "Prerequisite '%s' is older than target '%s'.\n" msgstr "Il prerequisito «%s» è più vecchio di quello dell'obiettivo «%s».\n" #: src/remake.c:782 #, 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" #: src/remake.c:789 #, 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" #: src/remake.c:794 #, c-format msgid "Making '%s' due to always-make flag.\n" msgstr "Generazione di «%s» a causa del flag \"always-make\".\n" #: src/remake.c:802 #, c-format msgid "No need to remake target '%s'" msgstr "Non è necessario rigenerare l'obiettivo «%s»" #: src/remake.c:804 #, c-format msgid "; using VPATH name '%s'" msgstr "; uso del nome VPATH «%s»" #: src/remake.c:824 #, c-format msgid "Must remake target '%s'.\n" msgstr "L'obiettivo «%s» deve essere rigenerato.\n" #: src/remake.c:830 #, c-format msgid " Ignoring VPATH name '%s'.\n" msgstr " Nome VPATH «%s» ignorato.\n" #: src/remake.c:839 #, c-format msgid "Recipe of '%s' is being run.\n" msgstr "Esecuzione del set di istruzioni per «%s» in corso.\n" #: src/remake.c:846 #, c-format msgid "Failed to remake target file '%s'.\n" msgstr "Rigenerazione del file obiettivo «%s» non riuscita.\n" #: src/remake.c:849 #, c-format msgid "Successfully remade target file '%s'.\n" msgstr "File obiettivo «%s» rigenerato correttamente.\n" #: src/remake.c:852 #, 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" #: src/remake.c:1047 #, c-format msgid "Using default commands for '%s'.\n" msgstr "Uso dei comandi predefiniti per «%s».\n" #: src/remake.c:1422 #, 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" #: src/remake.c:1662 #, c-format msgid ".LIBPATTERNS element '%s' is not a pattern" msgstr "l'elemento .LIBPATTERNS «%s» non è un modello" #: src/remote-cstms.c:122 #, c-format msgid "Customs won't export: %s\n" msgstr "Le personalizzazioni non verranno esportate: %s\n" #: src/rule.c:289 #, c-format msgid "warning: ignoring prerequisites on suffix rule definition" msgstr "" #: src/rule.c:530 msgid "" "\n" "# Implicit Rules" msgstr "" "\n" "# Regole implicite" #: src/rule.c:545 msgid "" "\n" "# No implicit rules." msgstr "" "\n" "# Regole non implicite." #: src/rule.c:548 #, c-format msgid "" "\n" "# %u implicit rules, %u (%.1f%%) terminal." msgstr "" "\n" "# %u regole implicite, %u (%.1f%%) terminale." #: src/rule.c:557 #, c-format msgid "BUG: num_pattern_rules is wrong! %u != %u" msgstr "BUG: num_pattern_rules è errato! %u != %u" #: src/signame.c:84 msgid "unknown signal" msgstr "segnale sconosciuto" #: src/signame.c:92 msgid "Hangup" msgstr "Chiusura" #: src/signame.c:95 msgid "Interrupt" msgstr "Interruzione" #: src/signame.c:98 msgid "Quit" msgstr "Uscita (con core dump)" #: src/signame.c:101 msgid "Illegal Instruction" msgstr "Istruzione illecita" #: src/signame.c:104 msgid "Trace/breakpoint trap" msgstr "Rilevato trace/breakpoint" #: src/signame.c:109 msgid "Aborted" msgstr "Annullato" #: src/signame.c:112 msgid "IOT trap" msgstr "Rilevato IOT" #: src/signame.c:115 msgid "EMT trap" msgstr "Rilevato EMT" #: src/signame.c:118 msgid "Floating point exception" msgstr "Eccezione in virgola mobile" #: src/signame.c:121 msgid "Killed" msgstr "Ucciso" #: src/signame.c:124 msgid "Bus error" msgstr "Errore di bus" #: src/signame.c:127 msgid "Segmentation fault" msgstr "Errore di segmentazione" #: src/signame.c:130 msgid "Bad system call" msgstr "Chiamata di sistema errata" #: src/signame.c:133 msgid "Broken pipe" msgstr "Pipe interrotta" #: src/signame.c:136 msgid "Alarm clock" msgstr "Sveglia" #: src/signame.c:139 msgid "Terminated" msgstr "Terminato" #: src/signame.c:142 msgid "User defined signal 1" msgstr "Segnale 1 definito dall'utente" #: src/signame.c:145 msgid "User defined signal 2" msgstr "Segnale 2 definito dall'utente" #: src/signame.c:150 src/signame.c:153 msgid "Child exited" msgstr "Processo figlio uscito" #: src/signame.c:156 msgid "Power failure" msgstr "Mancanza di alimentazione elettrica" #: src/signame.c:159 msgid "Stopped" msgstr "Fermato (da terminale)" #: src/signame.c:162 msgid "Stopped (tty input)" msgstr "Fermato (input tty)" #: src/signame.c:165 msgid "Stopped (tty output)" msgstr "Fermato (output tty)" #: src/signame.c:168 msgid "Stopped (signal)" msgstr "Fermato" #: src/signame.c:171 msgid "CPU time limit exceeded" msgstr "Limite di tempo CPU superato" #: src/signame.c:174 msgid "File size limit exceeded" msgstr "Superato il limite di dimensione file" #: src/signame.c:177 msgid "Virtual timer expired" msgstr "Timer virtuale terminato" #: src/signame.c:180 msgid "Profiling timer expired" msgstr "Timer di profiling terminato" #: src/signame.c:186 msgid "Window changed" msgstr "Finestra modificata" #: src/signame.c:189 msgid "Continued" msgstr "Continuato" #: src/signame.c:192 msgid "Urgent I/O condition" msgstr "Condizioni di I/O urgente" #: src/signame.c:199 src/signame.c:208 msgid "I/O possible" msgstr "I/O consentito" #: src/signame.c:202 msgid "SIGWIND" msgstr "SIGWIND" #: src/signame.c:205 msgid "SIGPHONE" msgstr "SIGPHONE" #: src/signame.c:211 msgid "Resource lost" msgstr "Risorsa persa" #: src/signame.c:214 msgid "Danger signal" msgstr "Segnale di pericolo" #: src/signame.c:217 msgid "Information request" msgstr "Richiesta informazioni" #: src/signame.c:220 msgid "Floating point co-processor not available" msgstr "Co-processore a virgola mobile non disponibile" #: src/strcache.c:274 #, c-format msgid "" "\n" "%s No strcache buffers\n" msgstr "" "\n" "%s buffer strcache assenti\n" #: src/strcache.c:304 #, c-format msgid "" "\n" "%s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu " "B\n" msgstr "" "\n" "%s buffer strcache: %lu (%lu) / stringhe = %lu / memorizzazione = %lu B / " "media = %lu B\n" #: src/strcache.c:308 #, c-format msgid "" "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B\n" msgstr "" "%s buffer corrente: dimensione = %hu B / usato = %hu B / numero = %hu / " "media = %u B\n" #: src/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" #: src/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" #: src/strcache.c:326 #, c-format msgid "" "\n" "%s strcache performance: lookups = %lu / hit rate = %lu%%\n" msgstr "" "\n" "%s prestazioni strcache: lookups = %lu / hit rate = %lu%%\n" #: src/strcache.c:328 msgid "" "# hash-table stats:\n" "# " msgstr "" "# statistiche della tabella hash:\n" "# " #: src/variable.c:1653 msgid "automatic" msgstr "automatico" #: src/variable.c:1656 msgid "default" msgstr "predefinito" #: src/variable.c:1659 msgid "environment" msgstr "ambiente" #: src/variable.c:1662 msgid "makefile" msgstr "makefile" #: src/variable.c:1665 msgid "environment under -e" msgstr "ambiente con l'opzione -e" #: src/variable.c:1668 msgid "command line" msgstr "riga di comando" #: src/variable.c:1671 msgid "'override' directive" msgstr "direttiva \"override\"" #: src/variable.c:1682 #, c-format msgid " (from '%s', line %lu)" msgstr " (da «%s», riga %lu)" #: src/variable.c:1745 msgid "# variable set hash-table stats:\n" msgstr "# statistiche tabella di hash del set di variabili:\n" #: src/variable.c:1756 msgid "" "\n" "# Variables\n" msgstr "" "\n" "# Variabili\n" #: src/variable.c:1760 msgid "" "\n" "# Pattern-specific Variable Values" msgstr "" "\n" "# Valori di variabile non specifici per il modello" #: src/variable.c:1774 msgid "" "\n" "# No pattern-specific variable values." msgstr "" "\n" "# Nessun valore per la variabile \"pattern-specific\"." #: src/variable.c:1776 #, c-format msgid "" "\n" "# %u pattern-specific variable values" msgstr "" "\n" "# %u valori di variabile specifici per il modello" #: src/variable.h:229 #, c-format msgid "warning: undefined variable '%.*s'" msgstr "attenzione: variabile «%.*s» non definita" #: src/vmsfunctions.c:91 #, c-format msgid "sys$search() failed with %d\n" msgstr "sys$search() non riuscita con %d\n" #: src/vmsjobs.c:244 #, 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" #: src/vmsjobs.c:681 #, c-format msgid "BUILTIN CD %s\n" msgstr "CD INTERNO %s\n" #: src/vmsjobs.c:1224 #, c-format msgid "DCL: %s\n" msgstr "DCL: %s\n" #: src/vmsjobs.c:1284 #, c-format msgid "Append output to %s\n" msgstr "Accoda output a %s\n" #: src/vmsjobs.c:1309 #, c-format msgid "Append %.*s and cleanup\n" msgstr "Accoda %.*s e pulisce\n" #: src/vmsjobs.c:1322 #, c-format msgid "Executing %s instead\n" msgstr "Verrà invece eseguito %s\n" #: src/vpath.c:603 msgid "" "\n" "# VPATH Search Paths\n" msgstr "" "\n" "# Percorsi di ricerca VPATH\n" #: src/vpath.c:620 msgid "# No 'vpath' search paths." msgstr "# Non ci sono percorsi di ricerca 'vpath'." #: src/vpath.c:622 #, c-format msgid "" "\n" "# %u 'vpath' search paths.\n" msgstr "" "\n" "# percorsi di ricerca 'vpath' %u.\n" #: src/vpath.c:625 msgid "" "\n" "# No general ('VPATH' variable) search path." msgstr "" "\n" "# Percorso di ricerca non generale (variabile «VPATH»)." #: src/vpath.c:631 msgid "" "\n" "# General ('VPATH' variable) search path:\n" "# " msgstr "" "\n" "# Percorso di ricerca generale (variabile «VPATH»):\n" "# " #: src/w32/w32os.c:44 #, c-format msgid "Jobserver slots limited to %d\n" msgstr "Slot del jobserver limitati a %d\n" #: src/w32/w32os.c:60 #, c-format msgid "creating jobserver semaphore: (Error %ld: %s)" msgstr "creazione del semaforo del jobserver: (Errore %ld: %s)" #: src/w32/w32os.c:79 #, 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)" #: src/w32/w32os.c:82 #, c-format msgid "Jobserver client (semaphore %s)\n" msgstr "Client del jobserver (semaforo %s)\n" #: src/w32/w32os.c:123 #, c-format msgid "release jobserver semaphore: (Error %ld: %s)" msgstr "rilascio del semaforo del jobserver: (Errore %ld: %s)" #: src/w32/w32os.c:194 #, c-format msgid "semaphore or child process wait: (Error %ld: %s)" msgstr "attendere semaforo o processo figlio (Errore %ld: %s)" make-4.3/po/ru.gmo0000644000175000017500000015654113611136532011003 00000000000000Þ•®Œ Aü$$+$&J$q$$!Š$-¬$Ú$ ì$- %;%'Q%#y%% ´%Â%à%Pù%;J&"†&©& Å&tæ&L['P¨'Dù'9>(Mx(@Æ(o)Gw)o¿)P/*l€*Fí*J4+€+9,C:,f~,_å,;E-:-O¼-J .}W.uÕ.~K/>Ê/M 0CW02›0FÎ0I1;_1 ›1¥1"Â1 å1ò1 22&2 ?2J2e2x2 Š2”2£2¬2%½2ã27ì2$333C3/[3‹3¤3¼3Ö3(ô34&24*Y4&„4+«4×4#ì4#5)45-^5,Œ5¹5Ò5$ç59 6F63e6™61¶6è677/7!F7$h7=7GË7G89[8•8ž8"¥8È8å8;9!?9a9+}9©9¼9Ö9,ð9:%;:,a:-Ž: ¼:&Ý:;#;C;!c;.…;´;Ä;ÍÙ;§</Ç<÷<& = 4=%U={=›=¯=1Ä= ö=>#>#=>La>6®>å>6?A8?>z? ¹?+Ã?*ï?@ 2@<@1D@2v@ ©@µ@Î@"ã@*A1A@A PAqA A ™A£A»A ÛA èA%õAB+;B$gBŒB¦B ÅBÏBéBC+CHC!eC ‡C”C®C ·CÅCÎCâCD$D&_0X_‰_=©_;ç_:#`1^`,`H½`4a*;a"fa/‰a8¹a7òa*b>b Nbü\b-YdI‡dPÑd"e 7eAEeH‡e Ðe6ñe](f&†fU­fMgQgqg<Šg#ÇgjëgaVhU¸h4i9Ci»}i{9jqµjl'kb”k¶÷k^®l£ mr±m—$nʼnˇoŸSpZópNqZìqcGr«r’ª‰,é‰rŠ*‰Š,´Š$áŠZ‹.a‹:‹ZË‹[&Œ0‚Œ3³Œ-çŒ--C6qy¨5"Ž:XŽu“Ž= _G§:Ä*ÿB*‘0m‘0ž‘Ï‘gï‘W’&l’C“’;×’«“l¿“+,”kX”WÄ”–•³•=Ç•I–.O–~–•–S¦–Xú– S—*t—9Ÿ—ZÙ—K4˜€˜6œ˜LÓ˜G ™h™3€™G´™?ü™<š,XšJ…šAКs›=†›'Ä›7ì›$œ4?œ3tœ4¨œSÝœ81Cj®9Èž ž+ž"Iž>lž:«žBæž[)Ÿc…ŸEéŸ+/ 2[ 7Ž xÆ ;?¡N{¡@Ê¡< ¢LH¢7•¢IÍ¢.£$F£k£-|£<ª£!ç£' ¤1¤2F¤sy¤qí¤7_¥?—¥X×¥0¦<G¦#„¦c¨¦/ §M<§:ЧXŧ¨m0¨&ž¨LŨ[©Rn©CÁ©=ªCªCJªJŽªhÙªB«=T«F’«9Ù« ¬p ¬‘¬B«¬Dî¬Y3­I­6×­&®W5®'®,µ®#â®"¯`)¯[Нn毈U°_Þ°<>±M{±Bɱv ²'ƒ²Z«²Z³?a³C¡³<å³L"´No´¾´Ú´ã´:ë´3&µ9Zµ:”µEϵ¶$¶0B¶1s¶D¥¶lê¶uW·LÍ·[¸v¸]‹¸né¸;X¹R”¹Qç¹R9º8Œº+ź=ñº;/»%k»B‘»BÔ»O¼Qg¼0¹¼wê¼b½e|½â½]ÿ½s]¾ˆÑ¾ˆZ¿Kã¿/À±À7ÊÀ,ÁW/Á‡Á7ŸÁZ×Á(2Â"[Â~—Â@¯ÂDðÂC5ÃGyÃ2ÁÃ8ôÃ]-ÄC‹ÄaÏÄ#1Å$UÅ]zÅ%ØÅ%þÅE$ÆSjÆ`¾Æ‘ÇJ±Ç,üÇ.)È8XÈi‘ÈhûÈ dÉGrÉ ºÉAÛÉ'ÊuEÊ(»Ê>äÊo#Ë,“ËÀËuÇËt=Ìu²ÌJ(ÍNsÍNÂÍVÎhÎOÎKÑÎ(Ï(FÏoÏS„Ï_ØÏ`8ÐW™Ð3ñÐI%ÑUoÑNÅÑ4ÒhIÒx²Òy+Ó[¥ÓcÔ—eÔqýÔ„oÕSôÕFHÖ0Ö#ÀÖ$äÖV ×A`×}¢×‹ Ø’¬Øv?Ùg¶Ù¸Úq×ÚbIÛX¬ÛPÜTVÜS«Ü!ÿÜ*!ÝLÝ’’ž­u› ÙfŠœ´hcÓ='6݉#‰€“þEAf—)«$­¡É ~‘à k©µŒ9|jè2e-S„&vs•Ü`N¡H !š¨' ¦1uD§ô{}&.Y« Ïÿê?V¶50 mO¾v…JõK‡سöºxWQ ]tr–9 {C4ƒB±ÂMT†,\Z0š˰q:¨ó œU71ÌrHÛl™<:øò¿3B¢|/æjcP¸¯g5²Š—ç(+Áb-[+@†}~ŽzÊ™bFYä>n›"*]€,˜íÑlðQ =£‹Ldaã`8Ð÷åZÍ”#©@%ÎgnMÃsª_ÕD\S®ùTR„^7‚Ò ‹ _kEKž¬Vh6$¤/dwŸŸXúƒN4R¢^xtëLª®Ö»‘q*Åâ>W[ì§¹‡Ô·˜ÇF;!3PJe•y‚ÆoG¥ ;¥¼£I”ŽpˆéĈ"ß×GÚŒ“zÀo)ÞmUXa8¤Aý¬ip2(ïO–IiȦ…y½.ñîü%áCûw<? # %u 'vpath' search paths. # %u implicit rules, %u (%.1f%%) terminal. # %u pattern-specific variable values # Directories # Files # Finished Make data base on %s # General ('VPATH' variable) search path: # # Implicit Rules # Make data base, printed on %s # No general ('VPATH' variable) search path. # No implicit rules. # No pattern-specific variable values. # Pattern-specific Variable Values # VPATH Search Paths # Variables # files hash-table stats: # %s No strcache buffers %s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu B %s strcache performance: lookups = %lu / hit rate = %lu%% Counted %d args in failed launch This program built for %s This program built for %s (%s) Unhandled exception filter called from program %s ExceptionCode = %lx ExceptionFlags = %lx ExceptionAddress = 0x%p --debug[=FLAGS] Print various types of debugging information. --no-print-directory Turn off -w, even if it was turned on implicitly. --no-silent Echo recipes (disable --silent mode). --trace Print tracing information. --warn-undefined-variables Warn when an undefined variable is referenced. -B, --always-make Unconditionally make all targets. -C DIRECTORY, --directory=DIRECTORY Change to DIRECTORY before doing anything. -E STRING, --eval=STRING Evaluate STRING as a makefile statement. -I DIRECTORY, --include-dir=DIRECTORY Search DIRECTORY for included makefiles. -L, --check-symlink-times Use the latest mtime between symlinks and target. -O[TYPE], --output-sync[=TYPE] Synchronize output of parallel jobs by TYPE. -R, --no-builtin-variables Disable the built-in variable settings. -S, --no-keep-going, --stop Turns off -k. -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE Consider FILE to be infinitely new. -b, -m Ignored for compatibility. -d Print lots of debugging information. -e, --environment-overrides Environment variables override makefiles. -f FILE, --file=FILE, --makefile=FILE Read FILE as a makefile. -h, --help Print this message and exit. -i, --ignore-errors Ignore errors from recipes. -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no arg. -k, --keep-going Keep going when some targets can't be made. -l [N], --load-average[=N], --max-load[=N] Don't start multiple jobs unless load is below N. -n, --just-print, --dry-run, --recon Don't actually run any recipe; just print them. -o FILE, --old-file=FILE, --assume-old=FILE Consider FILE to be very old and don't remake it. -p, --print-data-base Print make's internal database. -q, --question Run no recipe; exit status says if up to date. -r, --no-builtin-rules Disable the built-in implicit rules. -s, --silent, --quiet Don't echo recipes. -t, --touch Touch targets instead of remaking them. -v, --version Print the version number of make and exit. -w, --print-directory Print the current directory. Date %s Ignoring VPATH name '%s'. uid = %d, gid = %d, mode = 0%o. (built-in): (core dumped) (don't care) (from '%s', line %lu) (from '%s', line %lu): (ignored) (name might be truncated) (no default goal) (no ~ expansion) (remote) (search path) files, impossibilities impossibilities in %lu directories. so far.# A default, MAKEFILES, or -include/sinclude makefile.# Also makes:# Builtin rule# Command line target.# Dependencies recipe running (THIS IS A BUG).# Failed to be updated.# File does not exist.# File has been updated.# File has not been updated.# File is an intermediate prerequisite.# File is very old.# Implicit rule search has been done.# Implicit rule search has not been done.# Implicit/static pattern stem: '%s' # Invalid value in 'command_state' member!# Last modified %s # Modification time never checked.# Needs to be updated (-q is set).# Phony target (prerequisite of .PHONY).# Precious file (prerequisite of .PRECIOUS).# Recipe currently running (THIS IS A BUG).# Successfully updated.# recipe to execute# %s (device %d, inode [%d,%d,%d]): # %s (device %d, inode [%d,%d,%d]): could not be opened. # %s (device %ld, inode %ld): # %s (device %ld, inode %ld): could not be opened. # %s (key %s, mtime %I64u): # %s (key %s, mtime %I64u): could not be opened. # %s: could not be stat'd. # No 'vpath' search paths.# Not a target:# hash-table stats: # # variable set hash-table stats: $SHELL changed (was '%s', now '%s') %s (line %d) Bad shell context (!unixy && !batch_mode_shell) %s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B %s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B %s other used: total = %lu B / count = %lu / avg = %lu B %s%s: %s%s: %s%s: Entering an unknown directory %s: Entering directory '%s' %s: Field '%s' not cached: %s%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p) %s: Leaving an unknown directory %s: Leaving directory '%s' %s: Timestamp out of range; substituting %s%s: failed to load%s: illegal option -- %c %s: invalid option -- %c %s: option '%c%s' doesn't allow an argument %s: option '%s' is ambiguous %s: option '%s' requires an argument %s: option '--%s' doesn't allow an argument %s: option '-W %s' doesn't allow an argument %s: option '-W %s' is ambiguous %s: option requires an argument -- %c %s: target '%s' does not exist%s: unrecognized option '%c%s' %s: unrecognized option '--%s' %s: update target '%s' due to: %s%s: user %lu (real %lu), group %lu (real %lu) %sBuilt for %s %sBuilt for %s (%s) %sLicense GPLv3+: GNU GPL version 3 or later %sThis is free software: you are free to change and redistribute it. %sThere is NO WARRANTY, to the extent permitted by law. %sNo rule to make target '%s'%s%sNo rule to make target '%s', needed by '%s'%s%s[%s: %s] Error %d%s%s[%u]: Entering an unknown directory %s[%u]: Entering directory '%s' %s[%u]: Leaving an unknown directory %s[%u]: Leaving directory '%s' '%s' is up to date.'override' directive*** Archive member '%s' may be bogus; not deleted*** Break. *** Deleting file '%s'*** Deleting intermediate file '%s'*** Waiting for unfinished jobs....*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp*** [%s] Archive member '%s' may be bogus; not deleted*** [%s] Deleting file '%s'*** mixed implicit and normal rules: deprecated syntax-O[TYPE] (--output-sync[=TYPE]) is not configured for this build.-warning, you may have to re-enable CTRL-Y handling from DCL. . Stop. .DEFAULT_GOAL contains more than one target.LIBPATTERNS element '%s' is not a pattern; using VPATH name '%s'AbortedAccess violation: read operation at address 0x%p Access violation: write operation at address 0x%p Alarm clockAppend %.*s and cleanup Append output to %s Avoiding implicit rule recursion. BUG: num_pattern_rules is wrong! %u != %uBUILTIN CD %s Bad system callBatch file contents: @echo off Batch file contents:%s %s Broken pipeBus errorCPU time limit exceededCannot create a temporary file Child accessChild exitedCircular %s <- %s dependency dropped.Cleaning up temp batch file %s Cleaning up temp batch file %s failed (%d) Cleaning up temporary batch file %s Collisions=%lu/%lu=%.0f%%Considering target file '%s'. ContinuedCould not restore stderr Could not restore stdin Could not restore stdout Couldn't change back to original directory.CreatePipe() failed (e=%ld) Creating temporary batch file %s Current timeCustoms won't export: %s DCL: %s Danger signalEMT trapEmpty function nameEmpty symbol name for load: %sExecuting %s instead Failed to load symbol %s from %s: %sFailed to open global symbol table: %sFailed to remake makefile '%s'.Failed to remake target file '%s'. File '%s' does not exist. File '%s' was considered already. File size limit exceededFinished prerequisites of target file '%s'. Finished updating file '%s'. Floating point co-processor not availableFloating point exceptionFound an implicit rule for '%s'. Found prerequisite '%s' as VPATH '%s' Function name too long: %sGiving up on target file '%s'. HangupI/O possibleIOT trapIllegal InstructionIncluded makefile '%s' was not found.Information requestInitialized accessInterruptInvalid function name: %sInvalid maximum argument count (%u) for function %sInvalid minimum argument count (%u) for function %sJobserver client (fds %d,%d) Jobserver client (semaphore %s) Jobserver slots limited to %d KilledLive child %p (%s) PID %s %s Load=%lu/%lu=%.0f%%, Loaded object %s is not declared to be GPL compatibleLoading symbol %s from %s Looking for a rule with intermediate file '%s'. Looking for an implicit rule for '%s'. Looking for archive-member implicit rule for '%s'. Make accessMakefile '%s' might loop; not remaking it. Makefile '%s' was not foundMakefile from standard input specified twice.Making '%s' due to always-make flag. Malformed target-specific variable definitionMember '%s'%s: %ld bytes at %ld (%ld). Must remake target '%s'. NoNo implicit rule found for '%s'. No need to remake target '%s'No recipe for '%s' and no prerequisites actually changed. No targetsNo targets specified and no makefile foundNothing to be done for '%s'.Obtained token for child %p (%s). Options: Parallel jobs (-j) are not supported on this platform.Power failurePrerequisite '%s' is newer than target '%s'. Prerequisite '%s' is older than target '%s'. Prerequisite '%s' is order-only for target '%s'. Prerequisite '%s' of target '%s' does not exist. Profiling timer expiredPruning file '%s'. Putting child %p (%s) PID %s%s on the chain. QuitRe-executing[%u]:Reading makefile '%s'Reading makefiles... Reaping losing child %p PID %s %s Reaping winning child %p PID %s %s Recently tried and failed to update file '%s'. Recipe for '%s' will be ignored in favor of the one for '%s'.Recipe for file '%s' was found by implicit rule search,Recipe has too many lines (%ud)Recipe of '%s' is being run. Recipe was specified for file '%s' at %s:%lu,Recursive variable '%s' references itself (eventually)Rehash=%u, Rejecting impossible implicit prerequisite '%s'. Rejecting impossible rule prerequisite '%s'. Released token for child %p (%s). Removing child %p PID %s%s from chain. Removing intermediate files... Report bugs to Resetting to single job (-j1) mode.Resource lostSIGPHONESIGWINDSegmentation faultSkipping UTF-8 BOM in makefile '%s' Skipping UTF-8 BOM in makefile buffer Stem too long: '%s%.*s'. Still updating file '%s'. StoppedStopped (signal)Stopped (tty input)Stopped (tty output)Successfully remade target file '%s'. Symbolic links not supported: disabling -L.Target '%s' is double-colon and has no prerequisites. Target '%s' not remade because of errors.Target file '%s' needs to be remade under -q. TerminatedThe 'load' operation is not supported on this platform.The prerequisites of '%s' are being made. Trace/breakpoint trapTrying implicit prerequisite '%s'. Trying pattern rule with stem '%.*s'. Trying rule prerequisite '%s'. Updating goal targets.... Updating makefiles.... Urgent I/O conditionUsage: %s [options] [target] ... User accessUser defined signal 1User defined signal 2Using default commands for '%s'. Using default recipe for '%s'. Virtual timer expiredWarning: File '%s' has modification time %s s in the futureWindow changedattempt to use unsupported feature: '%s'automaticbut '%s' is now considered the same file as '%s'.can't allocate %lu bytes for hash table: memory exhaustedcan't rename double-colon '%s' to single-colon '%s'can't rename single-colon '%s' to double-colon '%s'cannot enforce load limit: cannot enforce load limits on this operating systemclose: %s: %scommand linecreating jobs pipecreating jobserver semaphore: (Error %ld: %s)defaultduping jobs pipeempty string invalid as file nameempty variable nameenvironmentenvironment under -eextraneous '%s'extraneous text after '%s' directiveextraneous text after 'define' directiveextraneous text after 'endef' directivefile: invalid file operation: %sfile: missing filenamefile: too many argumentsfind_and_set_shell() path search set default_shell = %s find_and_set_shell() setting default_shell = %s first argument to 'word' function must be greater than 0fopen (temporary file)fwrite (temporary file)grouped targets must provide a recipeguile: Evaluating '%s' guile: Expanding '%s' init jobserver pipeinsufficient number of arguments (%d) to function '%s'internal error: invalid --jobserver-auth string '%s'internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)invalid syntax in conditionaljob server shut downjobserver pipelinelbr$ini_control() failed with status = %dlbr$set_module() failed to extract module info, status = %dmake reaped child pid %s, still waiting for pid %s makefilemissing 'endef', unterminated 'define'missing 'endif'missing rule before recipemissing separatormissing separator (did you mean TAB instead of 8 spaces?)missing target patternmixed implicit and normal rulesmixed implicit and static pattern rulesmultiple target patternsnono more file handles: could not duplicate stderr no more file handles: could not duplicate stdin no more file handles: could not duplicate stdout non-numeric first argument to 'word' functionnon-numeric first argument to 'wordlist' functionnon-numeric second argument to 'wordlist' functiononly one 'else' per conditionalopen: %s: %sprerequisites cannot be defined in recipesprocess_easy() failed to launch process (e=%ld) pselect jobs piperead jobs piperead: %s: %srecipe commences before first targetrelease jobserver semaphore: (Error %ld: %s)semaphore or child process wait: (Error %ld: %s)spawnvpe: environment space might be exhaustedsys$search() failed with %d target '%s' doesn't match the target patterntarget '%s' given more than once in the same ruletarget file '%s' has both : and :: entriestarget pattern contains no '%%'the '%s%s' option requires a non-empty string argumentthe '-%c' option requires a positive integer argumenttouch archive member is not available on VMStouch: '%s' is not a valid archivetouch: Archive '%s' does not existtouch: Bad return code from ar_member_touch on '%s'touch: Member '%s' does not exist in '%s'unable to open library '%s' to lookup member status %dunimplemented on this platform: function '%s'unknown debug level specification '%s'unknown output-sync type '%s'unknown signalunlink (temporary file): unterminated call to function '%s': missing '%c'unterminated variable referencewarning: Clock skew detected. Your build may be incomplete.warning: -j%d forced in makefile: resetting jobserver mode.warning: -j%d forced in submake: resetting jobserver mode.warning: NUL character seen; rest of line ignoredwarning: ignoring old recipe for target '%s'warning: jobserver unavailable: using -j1. Add '+' to parent make rule.warning: overriding group membership for target '%s'warning: overriding recipe for target '%s'warning: undefined variable '%.*s'windows32_openpipe(): process_init_fd() failed windows32_openpipe: DuplicateHandle(Err) failed (e=%ld) windows32_openpipe: DuplicateHandle(In) failed (e=%ld) write error: stdoutwrite jobserverwrite: %s: %sProject-Id-Version: make 4.2.93 Report-Msgid-Bugs-To: bug-make@gnu.org PO-Revision-Date: 2020-01-03 22:09+0300 Last-Translator: Yuri Kozlov Language-Team: Russian Language: ru MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. X-Generator: Lokalize 2.0 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); # %u путей поиÑка по «vpath» # ÐеÑвных правил: %u, терминальных: %u (%.1f%%) # %u значений переменных оÑобенных Ð´Ð»Ñ Ð¼Ð°Ñки # Каталоги # Файлы # Печать базы данных Make завершена %s # Общий (Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Â«VPATH») путь поиÑка: # # ÐеÑвные правила # База данных Make, напечатана %s # Ðе определён общий (Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Â«VPATH») путь поиÑка. # ÐеÑвных правил нет. # Ðет значений переменных оÑобенных Ð´Ð»Ñ Ð¼Ð°Ñки. # Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ñ‹Ñ… оÑобенные Ð´Ð»Ñ Ð¼Ð°Ñки # Пути поиÑка VPATH # Переменные # ÑоÑтоÑние файлов хеш-таблицы: # %s без буферов strcache %s буферы strcache: %lu (%lu) / Ñтрок = %lu / хранилище = %lu Б / Ñред = %lu Б %s производительноÑть strcache: поиÑков = %lu / найдено = %lu%% При неудачном запуÑке ÑоÑчитано %d аргументов Эта программа Ñобрана Ð´Ð»Ñ %s Эта программа Ñобрана Ð´Ð»Ñ %s (%s) Ðеобработанное иÑключение в программе %s Код иÑÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ = %lx Флаги иÑÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ = %lx ÐÐ´Ñ€ÐµÑ Ð¸ÑÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ = 0x%p --debug[=ФЛÐГИ] Выводить различные типы отладочной информации. --no-print-directory Отменить ключ -w, даже еÑли он был Ñвно указан. --no-silent Показывать ÑпоÑобы (отключает режим --silent). --trace Выводить траÑÑировочную информацию. --warn-undefined-variables Выдавать предупреждение при ÑÑылке на неопределённую переменную. -B, --always-make Без уÑловий отрабатывать вÑе цели. -C КÐТÐЛОГ, --directory=КÐТÐЛОГ Перейти в КÐТÐЛОГ перед выполнением дейÑтвий. -E СТРОКÐ, --eval=СТРОКРВычиÑлить СТРОКУ как предложение makefile. -I КÐТÐЛОГ, --include-dir=КÐТÐЛОГ ИÑкать включаемые make-файлы в КÐТÐЛОГЕ. -L, --check-symlink-times ИÑпользовать поÑледнее mtime при выборе между ÑимволичеÑкими ÑÑылками и целью. -O[ТИП], --output-sync[=ТИП] Синхронизировать вывод параллельных заданий Ñ Ñ‚Ð¸Ð¿Ð¾Ð¼ ТИП. -R, --no-builtin-variables Выключить уÑтановку вÑтроенных значений переменных. -S, --no-keep-going, --stop Отменить ключ -k. -W ФÐЙЛ, --what-if=ФÐЙЛ, --new-file=ФÐЙЛ, --assume-new=ФÐЙЛ Считать ФÐЙЛ вÑегда новым. -b, -m ИгнорируетÑÑ Ð´Ð»Ñ ÑовмеÑтимоÑти. -d Выводить маÑÑу отладочных Ñообщений. -e, --environment-overrides Переменные Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ Ð·Ð°Ð¼ÐµÐ½ÑÑŽÑ‚ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ makefile. -f ФÐЙЛ, --file=ФÐЙЛ, --makefile=ФÐЙЛ ИÑпользовать ФÐЙЛ в качеÑтве makefile. -h, --help Показать Ñту Ñправку и выйти. -i, --ignore-errors Игнорировать ошибки ÑпоÑобов. -j [N], --jobs[=N] ЗапуÑкать одновременно до N заданий; еÑли N не указано, чиÑло заданий неограничено. -k, --keep-going Продолжать работу, даже еÑли некоторые цели не могут быть доÑтигнуты. -l [N], --load-average[=N], --max-load[=N] Ðе запуÑкать неÑколько заданий, еÑли загрузка больше N. -n, --just-print, --dry-run, --recon Ðе применÑть ÑпоÑоб на Ñамом деле; проÑто напечатать его. -o ФÐЙЛ, --old-file=ФÐЙЛ, --assume-old=ФÐЙЛ Считать ФÐЙЛ очень Ñтарым и не переделывать его. -p, --print-data-base Ðапечатать внутреннюю базу данных make. -q, --question Ðе применÑть ÑпоÑоб; код Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð¿Ð¾ÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚, вÑÑ‘ ли уже Ñделано. -r, --no-builtin-rules Ðе иÑпользовать вÑтроенные неÑвные правила. -s, --silent, --quiet Ðе показывать Ñами ÑпоÑобы. -t, --touch УÑтановить Ð²Ñ€ÐµÐ¼Ñ Ð´Ð¾Ñтупа целей в текущее, а не переÑобирать их. -v, --version Показать информацию о верÑии и выйти. -w, --print-directory Ðапечатать текущий каталог. Дата %s ИгнорируетÑÑ VPATH-Ð¸Ð¼Ñ Â«%s». uid = %d, gid = %d, mode = 0%o. (вÑтроенные): (Ñделан дамп памÑти) (игнорировать ошибки) (из «%s», Ñтрока %lu) (из «%s», Ñтрока %lu): (игнорирование) (Ð¸Ð¼Ñ Ð¼Ð¾Ð¶ÐµÑ‚ быть уÑечено) (нет цели по умолчанию) (не раÑкрывать Ñимвол `~') (удалённый) (путь поиÑка) файлов, недоÑтижимых целей недоÑтижимых целей в %lu каталогах. на текущий момент.# По умолчанию, MAKEFILES, или -include/sinclude makefile.# Собирает также:# Ð’Ñтроенное правило# Цель, Ð²Ñ‹Ð·Ñ‹Ð²Ð°ÐµÐ¼Ð°Ñ Ð¸Ð· командной Ñтроки.# Ð’ данный момент уже применÑетÑÑ Ð½ÐµÐºÐ¸Ð¹ ÑпоÑоб по завиÑимоÑÑ‚Ñм (ЭТО ОШИБКÐ).# Попытка Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð±ÐµÐ·ÑƒÑпешна.# Файл не ÑущеÑтвует.# Файл был обновлён.# Файл не был обновлён.# Файл — Ð¿Ñ€Ð¾Ð¼ÐµÐ¶ÑƒÑ‚Ð¾Ñ‡Ð½Ð°Ñ Ð·Ð°Ð²Ð¸ÑимоÑть.# Файл очень Ñтарый.# ПроизводилÑÑ Ð¿Ð¾Ð¸Ñк неÑвных правил.# ПоиÑк неÑвных правил не производилÑÑ.# ОÑнова неÑвного или ÑтатичеÑкого образца: «%s» # Ðеверное значение члена «command_state»!# Ð’Ñ€ÐµÐ¼Ñ Ð¿Ð¾Ñледнего Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ %s # Ð’Ñ€ÐµÐ¼Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½Ð¸ разу не проверÑлоÑÑŒ.# Должно быть обновлено (задан ключ -q).# ПÑевдоцель (завиÑимоÑть от .PHONY).# Ценный файл (завиÑимоÑть .PRECIOUS).# Ð’ данный момент уже применÑетÑÑ Ð½ÐµÐºÐ¸Ð¹ ÑпоÑоб (ЭТО ОШИБКÐ).# УÑпешно обновлено.# ÑпоÑоб, который Ñледует применить# %s (уÑтройÑтво %d, inode [%d,%d,%d]): # %s (уÑтройÑтво %d, inode [%d,%d,%d]): невозможно открыть. # %s (уÑтройÑтво %ld, inode %ld): # %s (уÑтройÑтво %ld, inode %ld): невозможно открыть. # %s (ключ %s, mtime %l64u): # %s (ключ %s, mtime %l64u): невозможно открыть. # %s: невозможно получить ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð²Ñ‹Ð·Ð¾Ð²Ð¾Ð¼ stat. # Ðе определён путь поиÑка «vpath».# Ðе ÑвлÑетÑÑ Ñ†ÐµÐ»ÑŒÑŽ:# ÑоÑтоÑние хеш-таблицы: # # ÑоÑтоÑние переменных в хеш-таблице: ÐŸÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ $SHELL изменилаÑÑŒ (было «%s», теперь «%s») %s (Ñтрока %d) Плохой контекÑÑ‚ командного процеÑÑора (!unixy && !batch_mode_shell) %s текущий buf: размер = %hu Б / иÑпользуетÑÑ = %hu Б / кол-во = %hu / Ñред = %u Б %s Ð´Ð»Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð³Ð¾ Ñвободно: вÑего = %lu Б / макÑ. = %lu Б / мин. = %lu Б / Ñред. = %hu Б %s Ð´Ð»Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð³Ð¾ иÑпользуетÑÑ: вÑего = %lu Б / кол-во = %lu / Ñред = %lu Б %s%s: %s%s: %s%s: Вход в неизвеÑтный каталог %s: вход в каталог «%s» %s: Поле «%s» не кешировано: %s%s: поймано прерывание или иÑключение (код = 0x%lx, Ð°Ð´Ñ€ÐµÑ = 0x%p) %s: Выход из неизвеÑтного каталога %s: выход из каталога «%s» %s: Временной штамп выходит за пределы диапазона; подÑтавлÑем %s%s: не удалоÑÑŒ загрузить%s: недопуÑтимый ключ -- %c %s: неверный ключ -- %c %s: ключ «%c%s» должен иÑпользоватьÑÑ Ð±ÐµÐ· аргумента %s: ключ «%s» не однозначен %s: ключу «%s» требуетÑÑ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚ %s: ключ «--%s» должен иÑпользоватьÑÑ Ð±ÐµÐ· аргумента %s: ключ «-W %s» должен иÑпользоватьÑÑ Ð±ÐµÐ· аргумента %s: ключ «-W %s» неоднозначен %s: ключ требует аргумент -- %c %s: цель «%s» не ÑущеÑтвует%s: неизвеÑтный ключ «%c%s» %s: неизвеÑтный ключ «--%s» %s: обновление цели «%s» из-за: %s%s: пользователь %lu (дейÑтвительный %lu), группа %lu (дейÑÑ‚Ð²Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ %lu) %sЭта программа Ñобрана Ð´Ð»Ñ %s %sЭта программа Ñобрана Ð´Ð»Ñ %s (%s) %sÐ›Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ GPLv3+: GNU GPL верÑии 3 или новее %sЭто Ñвободное программное обеÑпечение: вы можете Ñвободно изменÑть его и %sраÑпроÑтранÑть. ÐЕТ ÐИКÐКИХ ГÐРÐÐТИЙ вне пределов, допуÑтимых законом. %sÐет правила Ð´Ð»Ñ Ñборки цели «%s»%s%sÐет правила Ð´Ð»Ñ Ñборки цели «%s», требуемой Ð´Ð»Ñ Â«%s»%s%s[%s: %s] Ошибка %d%s%s[%u]: вход в неизвеÑтный каталог %s[%u]: вход в каталог «%s» %s[%u]: выход из неизвеÑтного каталога %s[%u]: выход из каталога «%s» «%s» не требует обновлениÑ.Директива «override»*** Элемент архива «%s», кажетÑÑ, недейÑтвителен; не удалён*** ОÑтанов. *** УдалÑетÑÑ Ñ„Ð°Ð¹Ð» «%s»*** Удаление промежуточного файла «%s»*** Ожидание Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð·Ð°Ð´Ð°Ð½Ð¸Ð¹â€¦*** Предупреждение: у файла «%s» параметр LOW_RESOLUTION_TIME Ñодержит метку времени Ñ Ð²Ñ‹Ñокой точноÑтью*** [%s] Элемент архива «%s», кажетÑÑ, недейÑтвителен; не удалён*** [%s] УдалÑетÑÑ Ñ„Ð°Ð¹Ð» «%s»*** Ñмешаны неÑвные и обычные правила: уÑтаревший ÑинтакÑиÑ-O[ТИП] (--output-sync[=ТИП]) не наÑтроен в данной Ñборке.-предупреждение, возможно вам потребуетÑÑ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ разрешить обработку CTRL-Y из DCL. . ОÑтанов. .DEFAULT_GOAL Ñодержит более одной целиЭлемент .LIBPATTERNS «%s» не ÑвлÑетÑÑ Ð¾Ð±Ñ€Ð°Ð·Ñ†Ð¾Ð¼; иÑпользуетÑÑ VPATH-Ð¸Ð¼Ñ Â«%s»<вÑтроенное>ПрерваноÐарушение доÑтупа: Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð°Ð´Ñ€ÐµÑа 0x%p Ðарушение доÑтупа: Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñи по адреÑу 0x%p Сигнал по таймеруДобавить %.*s и очиÑтить Стандартный вывод добавлен в %s Избежание рекурÑивного вызова неÑвного правила. ОШИБКÐ: неверное значение num_pattern_rules! %u != %uВСТРОЕÐÐЫЙ CD %s Ðеправильный ÑиÑтемный вызовСодержимое файла пакетных заданий: @echo off Содержимое файла пакетных заданий:%s %s Обрыв каналаÐеверное обращение к памÑтиПревышен предел процеÑÑорного времениÐе удалоÑÑŒ Ñоздать временный файл ДоÑтуп потомкаПотомок завершил работуЦикличеÑÐºÐ°Ñ Ð·Ð°Ð²Ð¸ÑимоÑть %s <- %s пропущена.Подчищаю временный пакетный файл %s ОчиÑтка временного пакетного файла %s завершилаÑÑŒ Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹ (%d) Очищаю временный пакетный файл %s Противоречий=%lu/%lu=%.0f%%Обработка целевого файла «%s». ВозобновлениеÐе удалоÑÑŒ воÑÑтановить stderr Ðе удалоÑÑŒ воÑÑтановить stdin Ðе удалоÑÑŒ воÑÑтановить stdout Ðевозможно перейти в первоначальный каталог.CreatePipe() вернула код ошибки (e=%ld) СоздаётÑÑ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ñ‹Ð¹ пакетный файл %s Текущее времÑÐе ÑкÑпортируемые наÑтройки: %s DCL: %s Сигнал опаÑноÑтиОшибка ÑмулÑцииПуÑтое Ð¸Ð¼Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ÐŸÑƒÑтое Ð¸Ð¼Ñ Ñимвола Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸: %sВмеÑто заданного выполнÑетÑÑ %s Ðе удалоÑÑŒ загрузить Ñимвол %s из %s: %sÐе удалоÑÑŒ открыть глобальную таблицу Ñимволов: %sПопытка переÑобрать make-файл «%s» завершилаÑÑŒ неудачно.Ðе удалоÑÑŒ переÑоздать файл цели «%s». Файл «%s» не ÑущеÑтвует. Файл «%s» уже был обработан. Превышен предел размера файлаОбновление целей, от которых завиÑит целевой файл «%s», завершено. Обновление файла «%s» завершено. СопроцеÑÑор Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ точкой недоÑтупенОшибка операции Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ точкойÐайдено неÑвное правило Ð´Ð»Ñ Â«%s». Обнаружена завиÑимоÑть «%s» в виде VPATH «%s» Слишком длинное Ð¸Ð¼Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸: %sÐварийный оÑтанов на целевом файле «%s». Обрыв терминальной линииВозможен ввод/выводОшибка IOTÐедопуÑÑ‚Ð¸Ð¼Ð°Ñ Ð¸Ð½ÑтрукциÑВключаемый make-файл «%s» не найден.Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸Ð”Ð¾Ñтуп инициализацииПрерываниеÐекорректное Ð¸Ð¼Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸: %sÐекорректное макÑимальное чиÑло аргументов (вÑего %u) функции %sÐекорректное минимальное чиÑло аргументов (вÑего %u) функции %sКлиент Ñервера заданий (fds %d,%d) Клиент Ñервера заданий (Ñемафор %s) КоличеÑтво Ñлотов Ñервера заданий ограничено %d УничтожениеÐезавершённый потомок %p (%s) PID %s %s Загружено=%lu/%lu=%.0f%%, Загруженный объект %s не объÑвлено как ÑовмеÑтимый Ñ GPLЗагружаетÑÑ Ñимвол %s из %s ПоиÑк правила Ñ Ð¿Ñ€Ð¾Ð¼ÐµÐ¶ÑƒÑ‚Ð¾Ñ‡Ð½Ñ‹Ð¼ файлом «%s». ПоиÑк неÑвного правила Ð´Ð»Ñ Â«%s». ПоиÑк неÑвного правила Ð´Ð»Ñ Ñлемента архива «%s». ДоÑтуп makeMake-файл «%s», возможно, зациклен, он не будет переÑобиратьÑÑ. Make-файл «%s» не найденMakefile из Ñтандартного ввода указан дважды.ПереÑборка «%s» из-за уÑтановленного флага always-make. Ðеправильный формат Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¹ целиЭлемент «%s»%s: %ld байт по адреÑу %ld (%ld). Ðеобходимо переÑобрать цель «%s». ÐетÐе найдено неÑвного правила Ð´Ð»Ñ Â«%s». Ðет необходимоÑти переÑобирать цель «%s»СпоÑоб Ð´Ð»Ñ Â«%s» не задан, и начальные уÑÐ»Ð¾Ð²Ð¸Ñ Ð½Ðµ изменены. Ðет целейÐе заданы цели и не найден make-файлЦель «%s» не требует Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´.Получен токен Ð´Ð»Ñ Ð¿Ð¾Ñ‚Ð¾Ð¼ÐºÐ° %p (%s). Ключи: Параллельные Ð·Ð°Ð´Ð°Ð½Ð¸Ñ (-j) не поддерживаютÑÑ Ð½Ð° Ñтой платформе.Отказ питаниÑЗавиÑимоÑть «%s» новее, чем цель «%s». ЗавиÑимоÑть «%s» Ñтарее, чем цель «%s». ЗавиÑимоÑть «%s» Ð´Ð»Ñ Ñ†ÐµÐ»Ð¸ «%s» завиÑит от порÑдка. ЗавиÑимоÑть «%s» цели «%s» не ÑущеÑтвует. Ð’Ñ€ÐµÐ¼Ñ Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ÑтеклоОбрезаетÑÑ Ñ„Ð°Ð¹Ð» «%s». Помещение потомка %p (%s) PID %s%s в цепочку потомков. Ðварийное прерываниеПовторное выполнение[%u]:Чтение make-файла «%s»Чтение make-файлов... ПодбираетÑÑ Ð½ÐµÑƒÐ´Ð°Ñ‡Ð½Ð¾ завершившийÑÑ Ð¿Ð¾Ñ‚Ð¾Ð¼Ð¾Ðº %p PID %s %s ПодбираетÑÑ ÑƒÐ´Ð°Ñ‡Ð½Ð¾ завершившийÑÑ Ð¿Ð¾Ñ‚Ð¾Ð¼Ð¾Ðº %p PID %s %s ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° обновить файл «%s» завершилаÑÑŒ неудачно. СпоÑоб Ð´Ð»Ñ Â«%s» игнорируетÑÑ, вмеÑто него будет иÑпользован ÑпоÑоб Ð´Ð»Ñ Â«%s».СпоÑоб Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð° «%s» был найден из неÑвного правила,Ð’ ÑпоÑобе Ñлишком много Ñтрок (%ud)Ð’ наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÑетÑÑ ÑпоÑоб «%s». СпоÑоб Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð° «%s» был задан в %s:%lu,РекурÑÐ¸Ð²Ð½Ð°Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Â«%s» ÑÑылаетÑÑ Ñама на ÑÐµÐ±Ñ (в результате)Переформулировано=%u, Отвержение невозможной неÑвной завиÑимоÑти «%s». Отвержение невозможной завиÑимоÑти правила «%s». ОÑвобождён токен Ð´Ð»Ñ Ð¿Ð¾Ñ‚Ð¾Ð¼ÐºÐ° %p (%s). УдалÑетÑÑ Ð¿Ð¾Ñ‚Ð¾Ð¼Ð¾Ðº %p PID %s%s из цепочки. Удаление промежуточных файлов... Сообщайте об ошибках по адреÑу ВозвращаетÑÑ Ñ€ÐµÐ¶Ð¸Ð¼ одиночного Ð·Ð°Ð´Ð°Ð½Ð¸Ñ (-j1).РеÑÑƒÑ€Ñ Ð¿Ð¾Ñ‚ÐµÑ€ÑнSIGPHONESIGWINDÐарушение прав доÑтупа к памÑтиПропуÑк UTF-8 BOM в make-файле «%s» ПропуÑк UTF-8 BOM в буфере make-файла Слишком длинный образец: «%s%.*s». Файл «%s» обновлÑетÑÑ Ð² данный момент. ОÑтановОÑтанов (Ñигнал)ОÑтанов (ввод Ñ Ñ‚ÐµÑ€Ð¼Ð¸Ð½Ð°Ð»Ð°) ОÑтанов (вывод на терминал)Целевой файл «%s» уÑпешно переÑоздан. СимволичеÑкие ÑÑылки не поддерживаютÑÑ: отменÑетÑÑ ÐºÐ»ÑŽÑ‡ -L.Цель «%s» объÑвлена Ñ Ð´Ð²ÑƒÐ¼Ñ Ð´Ð²Ð¾ÐµÑ‚Ð¾Ñ‡Ð¸Ñми и не имеет завиÑимоÑтей. Цель «%s» не была переÑобрана из-за ошибок.Целевой файл «%s» требует переÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñ ÐºÐ»ÑŽÑ‡Ð¾Ð¼ -q. Ð—Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸ÐµÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ñ Â«load» не поддерживаетÑÑ Ð½Ð° Ñтой платформе.Цели, от которых завиÑит «%s», в наÑтоÑщий момент ÑобираютÑÑ. Прерывание на контрольной точкеПопытка Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½ÐµÑвной завиÑимоÑти «%s». Попытка Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð°Ð²Ð¸Ð»Ð° Ñ Ð¾Ð±Ñ€Ð°Ð·Ñ†Ð¾Ð¼ «%.*s». Попытка Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð°Ð²Ð¸Ð»Ð° завиÑимоÑти «%s». Обновление целей результата... Обновление make-файлов.... УÑÐ»Ð¾Ð²Ð¸Ñ ÑкÑтренного ввода/выводаИÑпользование: %s [КЛЮЧ]... [ЦЕЛЬ]... ДоÑтуп пользователÑОпределÑемый пользователем Ñигнал 1ОпределÑемый пользователем Ñигнал 2ИÑпользование команд по умолчанию Ð´Ð»Ñ Â«%s». ИÑпользование ÑпоÑоба по умолчанию Ð´Ð»Ñ Â«%s». Виртуальное Ð²Ñ€ÐµÐ¼Ñ Ð¸ÑтеклоПредупреждение: Ð²Ñ€ÐµÐ¼Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° «%s» находитÑÑ Ð² будущем (%s)Окно измененопопытка иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ð³Ð¾ ÑредÑтва: «%s»автоматичеÑкаÑно «%s» и «%s» теперь ÑчитаютÑÑ Ð¾Ð´Ð½Ð¸Ð¼ и тем же файлом.не удалоÑÑŒ выделить %lu байт Ð´Ð»Ñ Ñ…ÐµÑˆ-таблицы: закончилаÑÑŒ памÑтьневозможно переименовать «%s» Ñ Ð´Ð²ÑƒÐ¼Ñ Ð´Ð²Ð¾ÐµÑ‚Ð¾Ñ‡Ð¸Ñми в «%s» Ñ Ð¾Ð´Ð½Ð¸Ð¼ двоеточиемневозможно переименовать «%s» Ñ Ð¾Ð´Ð½Ð¸Ð¼ двоеточием в «%s» Ñ Ð´Ð²ÑƒÐ¼Ñ Ð´Ð²Ð¾ÐµÑ‚Ð¾Ñ‡Ð¸Ñминевозможно уÑтановить пределы загрузки: Ñта Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð°Ñ ÑиÑтема не позволÑет уÑтанавливать пределы загрузкизакрытие: %s: %sопределена в командной ÑтрокеÑоздаётÑÑ ÐºÐ°Ð½Ð°Ð» заданийÑоздание Ñемафора Ñервера заданий: (ошибка %ld: %s)по умолчаниюделаетÑÑ ÐºÐ¾Ð¿Ð¸Ñ ÐºÐ°Ð½Ð°Ð»Ð° заданийпуÑÑ‚Ð°Ñ Ñтрока недопуÑтима в качеÑтве имени файлапуÑтое Ð¸Ð¼Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¹Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð° в Ñредеокружение Ñ -eизлишнÑÑ Â«%s»Излишний текÑÑ‚ поÑле директивы «%s»излишний текÑÑ‚ поÑле директивы «define»излишний текÑÑ‚ поÑле директивы «endef»файл: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð¼: %sфайл: отÑутÑтвует Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°Ñ„Ð°Ð¹Ð»: Ñлишком много аргументовfind_and_set_shell(): поиÑк в путÑÑ… уÑтанавливает default_shell = %s find_and_set_shell() уÑтанавливает default_shell = %s первый аргумент функции «word» должен быть больше нулÑfopen (временный файл)fwrite (временный файл)Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð¾Ð²Ñ‹Ñ… целей должен предоÑтавлÑтьÑÑ ÑпоÑобguile: вычиÑлÑетÑÑ Â«%s» guile: раÑширÑетÑÑ Â«%s» Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ ÐºÐ°Ð½Ð°Ð»Ð° Ñервера заданийнедоÑтаточно аргументов (вÑего %d) функции «%s»внутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ Ñтрока --jobserver-auth «%s»внутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°: не удалоÑÑŒ открыть Ñемафор Ñервера заданий «%s»: (ошибка %ld: %s)неверный ÑинтакÑÐ¸Ñ Ð² уÑловном выраженииÑервер заданий выключенконвейер Ñервера заданийlbr$init_control() вернула код ошибки %dlbr$set_module() не Ñмогла извлечь информацию о модуле, ÑÑ‚Ð°Ñ‚ÑƒÑ = %dmake нашла завершившегоÑÑ Ð¿Ð¾Ñ‚Ð¾Ð¼ÐºÐ° pid %s, вÑÑ‘ ещё ожидает pid %s make-файлотÑутÑтвует «endif», Ð½ÐµÐ·Ð°Ð²ÐµÑ€ÑˆÑ‘Ð½Ð½Ð°Ñ Â«define»отÑутÑтвует «endif»перед ÑпоÑобом отÑутÑтвует правилопропущен разделительпропущен разделитель (возможно нужен TAB вмеÑто воÑьми пробелов?)пропущен образец целиÑмешаны неÑвные и обычные правилаÑмешаны неÑвные правила и правила Ñо ÑтатичеÑкими образцаминеÑколько образцов целинетзакончилиÑÑŒ файловые деÑкрипторы: не удалоÑÑŒ Ñделать копию stderr закончилиÑÑŒ файловые деÑкрипторы: не удалоÑÑŒ Ñделать копию stdin закончилиÑÑŒ файловые деÑкрипторы: не удалоÑÑŒ Ñделать копию stdout нечиÑловой первый аргумент функции «word»нечиÑловой первый аргумент функции «wordlist»нечиÑловой второй аргумент функции «wordlist»в уÑловном выражении возможна только одна «else»открытие: %s: %sв ÑпоÑобах не могут задаватьÑÑ Ð·Ð°Ð²Ð¸ÑимоÑтиprocess_easy() не Ñмогла запуÑтить процеÑÑ (e=%ld) pselect из канала заданийчтение канала заданийчтение: %s: %sобнаружен ÑпоÑоб до первого Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ†ÐµÐ»Ð¸Ð¾Ñвобождение Ñемафора Ñервера заданий: (ошибка %ld: %s)ожидание Ñемафора или процеÑÑа-потомка: (ошибка %ld: %s)spawnvpe: вероÑтно, закончилоÑÑŒ меÑто под окружениеsys$search() вернула код ошибки %d цель «%s» не ÑоответÑтвует образцу целейцель «%s» указана неÑколько раз в одном правилецелевой файл «%s» имеет Ð²Ñ…Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¸ Ñ :, и Ñ ::образец цели не Ñодержит «%%»длÑ ключа «%s%s» нужно указать аргументом непуÑтую Ñтрокуключ «-%c» должен иÑпользоватьÑÑ Ñ Ñ†ÐµÐ»Ñ‹Ð¼ положительным аргументомобновление времени Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ‡Ð»ÐµÐ½Ð° архива невозможно в ÑиÑтеме VMSобновление времени изменениÑ: Ðеверный архив: «%s»обновление времени изменениÑ: Ðрхив «%s» не ÑущеÑтвуетобновление времени изменениÑ: Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ ar_member_touch вернула ошибочное значение Ð´Ð»Ñ Â«%s»обновление времени изменениÑ: Элемент «%s» не ÑодержитÑÑ Ð² «%s»невозможно открыть библиотеку «%s» Ð´Ð»Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑоÑтоÑÐ½Ð¸Ñ Ñлемента %dне реализовано на Ñтой платформе: Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Â«%s»задан неизвеÑтный уровень отладки «%s»неизвеÑтный тип output-sync «%s»неизвеÑтный Ñигналunlink (временный файл)незавершённый вызов функции «%s»: пропущено «%cÂ»Ð½ÐµÐ·Ð°Ð²ÐµÑ€ÑˆÑ‘Ð½Ð½Ð°Ñ ÑÑылка на переменнуюпредупреждение: Ðеправильный ход чаÑов. Сборка может быть неполной.предупреждение: в makefile принудительно задан -j%d; ÑÐ±Ñ€Ð¾Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° Ñервера заданийпредупреждение: в Ñуб-Makefile принудительно задан -j%d; ÑÐ±Ñ€Ð¾Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° Ñервера заданийпредупреждение: вÑтречен Ñимвол NUL; игнорируетÑÑ Ð´Ð¾ конца Ñтрокипредупреждение: Ñтарый ÑпоÑоб Ð´Ð»Ñ Ñ†ÐµÐ»Ð¸ «%s» игнорируютÑÑпредупреждение: Ñервер заданий недоÑтупен: иÑпользуетÑÑ -j1. Добавьте «+» к правилу в родительÑком make.предупреждение: переопределение членÑтва группы Ð´Ð»Ñ Ñ†ÐµÐ»Ð¸ «%s»предупреждение: переопределение ÑпоÑоба Ð´Ð»Ñ Ñ†ÐµÐ»Ð¸ «%s»предупреждение: Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð°Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Â«%.*s»windows32_openpipe(): process_init_fd() завершилаÑÑŒ неудачно windows32_openpipe: DuplicateHandle(Err) вернула код ошибки (e=%ld) windows32_openpipe: DuplicateHandle(In) вернула код ошибки (e=%ld) ошибка запиÑи: stdoutзапиÑÑŒ Ñервера заданийзапиÑÑŒ: %s: %smake-4.3/po/gl.po0000644000175000017500000020043413611136531010601 00000000000000# Galician translation of GNU make. # This file is distributed under the same license as the make package. # Copyright (C) 2000, 2002 Free Software Foundation, Inc. # Copyright (C) 2012 Leandro Regueiro. # # Jacobo Tarrio , 2000, 2002. # Leandro Regueiro , 2012. # # Proxecto Trasno - Adaptación do software libre á lingua galega: Se desexas # colaborar connosco, podes atopar máis información en http://www.trasno.net # msgid "" msgstr "" "Project-Id-Version: make 3.82\n" "Report-Msgid-Bugs-To: bug-make@gnu.org\n" "POT-Creation-Date: 2020-01-19 15:34-0500\n" "PO-Revision-Date: 2012-11-12 16:40+0100\n" "Last-Translator: Leandro Regueiro \n" "Language-Team: Galician \n" "Language: gl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/ar.c:46 #, fuzzy, c-format msgid "attempt to use unsupported feature: '%s'" msgstr "tentouse usar unha característica non admitida: «%s»" #: src/ar.c:123 #, c-format msgid "touch archive member is not available on VMS" msgstr "a operación de tocar un membro do arquivo non está dispoñíbel en VMS" #: src/ar.c:147 #, fuzzy, c-format msgid "touch: Archive '%s' does not exist" msgstr "touch: O arquivo «%s» non existe" #: src/ar.c:150 #, fuzzy, c-format msgid "touch: '%s' is not a valid archive" msgstr "touch: «%s» non é un arquivo válido" #: src/ar.c:157 #, fuzzy, c-format msgid "touch: Member '%s' does not exist in '%s'" msgstr "touch: O membro «%s» non existe en «%s»" #: src/ar.c:164 #, fuzzy, c-format msgid "touch: Bad return code from ar_member_touch on '%s'" msgstr "touch: Código de retorno incorrecto de ar_member_touch en «%s»" #: src/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" #: src/arscan.c:236 #, c-format msgid "lbr$ini_control() failed with status = %d" msgstr "a chamada a lbr$ini_control() fallou con estado = %d" #: src/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»" #: src/arscan.c:944 #, fuzzy, c-format msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n" msgstr "Membro «%s»%s: %ld bytes en %ld (%ld).\n" #: src/arscan.c:945 msgid " (name might be truncated)" msgstr " (o nome pode quedar truncado)" #: src/arscan.c:947 #, c-format msgid " Date %s" msgstr " Data %s" #: src/arscan.c:948 #, c-format msgid " uid = %d, gid = %d, mode = 0%o.\n" msgstr " uid = %d, gid = %d, modo = 0%o.\n" #: src/commands.c:403 #, c-format msgid "Recipe has too many lines (%ud)" msgstr "" #: src/commands.c:504 msgid "*** Break.\n" msgstr "*** Interrompido.\n" #: src/commands.c:628 #, 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" #: src/commands.c:632 #, fuzzy, c-format msgid "*** Archive member '%s' may be bogus; not deleted" msgstr "*** O membro do arquivo «%s» pode non ser correcto; non eliminado" #: src/commands.c:646 #, fuzzy, c-format msgid "*** [%s] Deleting file '%s'" msgstr "*** [%s] Eliminando o ficheiro «%s»" #: src/commands.c:648 #, fuzzy, c-format msgid "*** Deleting file '%s'" msgstr "*** Eliminando o ficheiro «%s»" #: src/commands.c:684 msgid "# recipe to execute" msgstr "" #: src/commands.c:687 msgid " (built-in):" msgstr " (incorporadas):" #: src/commands.c:689 #, fuzzy, c-format msgid " (from '%s', line %lu):\n" msgstr " (desde «%s», liña %lu):\n" #: src/dir.c:1073 msgid "" "\n" "# Directories\n" msgstr "" "\n" "# Directorios\n" #: src/dir.c:1085 #, c-format msgid "# %s: could not be stat'd.\n" msgstr "# %s: non foi posíbel facer a operación de stat.\n" #: src/dir.c:1089 #, fuzzy msgid "# %s (key %s, mtime %I64u): could not be opened.\n" msgstr "# %s (clave %s, mtime %d): non foi posíbel abrir.\n" #: src/dir.c:1094 #, 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" #: src/dir.c:1099 #, 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" #: src/dir.c:1126 #, fuzzy msgid "# %s (key %s, mtime %I64u): " msgstr "# %s (clave %s, mtime %d): " #: src/dir.c:1131 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): " msgstr "# %s (dispositivo %d, inodo [%d,%d,%d]): " #: src/dir.c:1136 #, c-format msgid "# %s (device %ld, inode %ld): " msgstr "# %s (dispositivo %ld, inodo %ld): " #: src/dir.c:1142 src/dir.c:1163 msgid "No" msgstr "Non" #: src/dir.c:1145 src/dir.c:1166 msgid " files, " msgstr " ficheiros, " #: src/dir.c:1147 src/dir.c:1168 msgid "no" msgstr "non" #: src/dir.c:1150 msgid " impossibilities" msgstr " imposíbeis" #: src/dir.c:1154 msgid " so far." msgstr " ata aquí." #: src/dir.c:1171 #, c-format msgid " impossibilities in %lu directories.\n" msgstr " imposíbeis en %lu directorios.\n" #: src/expand.c:125 #, fuzzy, c-format msgid "Recursive variable '%s' references itself (eventually)" msgstr "A variábel recursiva «%s» fai referencia a si mesma (ao final)" #: src/expand.c:271 #, c-format msgid "unterminated variable reference" msgstr "referencia a variábel non rematada" #: src/file.c:278 #, c-format msgid "Recipe was specified for file '%s' at %s:%lu," msgstr "" #: src/file.c:283 #, c-format msgid "Recipe for file '%s' was found by implicit rule search," msgstr "" #: src/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»." #: src/file.c:290 #, c-format msgid "Recipe for '%s' will be ignored in favor of the one for '%s'." msgstr "" #: src/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" #: src/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" #: src/file.c:408 #, fuzzy, c-format msgid "*** Deleting intermediate file '%s'" msgstr "*** Eliminando o ficheiro intermedio «%s»" #: src/file.c:412 #, c-format msgid "Removing intermediate files...\n" msgstr "Retirando os ficheiros intermedios...\n" #: src/file.c:872 msgid "Current time" msgstr "Hora actual" #: src/file.c:876 #, c-format msgid "%s: Timestamp out of range; substituting %s" msgstr "%s: Marca de tempo fóra de rango; substituíndo %s" #: src/file.c:1016 msgid "# Not a target:" msgstr "# Non é un obxectivo:" #: src/file.c:1021 msgid "# Precious file (prerequisite of .PRECIOUS)." msgstr "# Ficheiro precioso (prerrequisito de .PRECIOUS)." #: src/file.c:1023 msgid "# Phony target (prerequisite of .PHONY)." msgstr "# Obxectivo falso (prerrequisito de .PHONY)." #: src/file.c:1025 msgid "# Command line target." msgstr "# Obxectivo da liña de ordes." #: src/file.c:1027 msgid "# A default, MAKEFILES, or -include/sinclude makefile." msgstr "# Un ficheiro de make por defecto, MAKEFILES, ou -include/sinclude." #: src/file.c:1029 #, fuzzy msgid "# Builtin rule" msgstr "" "\n" "# Non hai regras implícitas." #: src/file.c:1031 msgid "# Implicit rule search has been done." msgstr "# Fíxose a busca de regras implícitas." #: src/file.c:1032 msgid "# Implicit rule search has not been done." msgstr "# Non se fixo a busca de regras implícitas." #: src/file.c:1034 #, fuzzy, c-format msgid "# Implicit/static pattern stem: '%s'\n" msgstr "# Raíz do patrón implícito/estático: «%s»\n" #: src/file.c:1036 msgid "# File is an intermediate prerequisite." msgstr "# O ficheiro é un prerrequisito intermedio." #: src/file.c:1040 msgid "# Also makes:" msgstr "# Tamén se fai:" #: src/file.c:1046 msgid "# Modification time never checked." msgstr "# Nunca se comprobou o tempo de modificación." #: src/file.c:1048 msgid "# File does not exist." msgstr "# O ficheiro non existe." #: src/file.c:1050 msgid "# File is very old." msgstr "# O ficheiro é moi antigo." #: src/file.c:1055 #, c-format msgid "# Last modified %s\n" msgstr "# Última modificación: %s\n" #: src/file.c:1058 msgid "# File has been updated." msgstr "# O ficheiro foi actualizado." #: src/file.c:1058 msgid "# File has not been updated." msgstr "# O ficheiro non foi actualizado." #: src/file.c:1062 msgid "# Recipe currently running (THIS IS A BUG)." msgstr "" #: src/file.c:1065 msgid "# Dependencies recipe running (THIS IS A BUG)." msgstr "" #: src/file.c:1074 msgid "# Successfully updated." msgstr "# Actualizado con éxito." #: src/file.c:1078 msgid "# Needs to be updated (-q is set)." msgstr "# Ten que ser actualizado (-q está definido)." #: src/file.c:1081 msgid "# Failed to be updated." msgstr "# Produciuse un erro ao actualizar." #: src/file.c:1086 #, fuzzy msgid "# Invalid value in 'command_state' member!" msgstr "# Valor non válido no membro «command_state»!" #: src/file.c:1105 msgid "" "\n" "# Files" msgstr "" "\n" "# Ficheiros" #: src/file.c:1109 msgid "" "\n" "# files hash-table stats:\n" "# " msgstr "" "\n" "# estatísticas da táboa hash de ficheiros:\n" "# " #: src/file.c:1119 #, c-format msgid "%s: Field '%s' not cached: %s" msgstr "" #: src/function.c:794 #, fuzzy msgid "non-numeric first argument to 'word' function" msgstr "primeiro argumento da función «word» non numérico" #: src/function.c:799 #, fuzzy, c-format msgid "first argument to 'word' function must be greater than 0" msgstr "o primeiro argumento da función «word» debe ser maior que 0" #: src/function.c:819 #, fuzzy msgid "non-numeric first argument to 'wordlist' function" msgstr "primeiro argumento da función «wordlist» non numérico" #: src/function.c:821 #, fuzzy msgid "non-numeric second argument to 'wordlist' function" msgstr "segundo argumento da función «wordlist» non numérico" #: src/function.c:1533 #, fuzzy, c-format msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n" msgstr "windows32_openpipe(): a chamada a DuplicateHandle(In) fallou (e=%ld)\n" #: src/function.c:1557 #, 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" #: src/function.c:1564 #, c-format msgid "CreatePipe() failed (e=%ld)\n" msgstr "A chamada a CreatePipe() fallou (e=%ld)\n" #: src/function.c:1572 #, c-format msgid "windows32_openpipe(): process_init_fd() failed\n" msgstr "windows32_openpipe(): a chamada a process_init_fd() fallou\n" #: src/function.c:1857 #, c-format msgid "Cleaning up temporary batch file %s\n" msgstr "Limpando o ficheiro de lotes temporal %s\n" #: src/function.c:2230 src/function.c:2255 #, c-format msgid "file: missing filename" msgstr "" #: src/function.c:2234 src/function.c:2265 #, fuzzy, c-format msgid "open: %s: %s" msgstr "%s: %s" #: src/function.c:2242 #, fuzzy, c-format msgid "write: %s: %s" msgstr "erro de escritura: %s" #: src/function.c:2245 src/function.c:2282 #, fuzzy, c-format msgid "close: %s: %s" msgstr "%s%s: %s" #: src/function.c:2258 #, c-format msgid "file: too many arguments" msgstr "" #: src/function.c:2277 #, fuzzy, c-format msgid "read: %s: %s" msgstr "%s: %s" #: src/function.c:2290 #, fuzzy, c-format msgid "file: invalid file operation: %s" msgstr "%s: opción incorrecta -- %c\n" #: src/function.c:2405 #, fuzzy, c-format msgid "insufficient number of arguments (%d) to function '%s'" msgstr "número de argumentos insuficiente (%d) na chamada á función «%s»" #: src/function.c:2417 #, fuzzy, c-format msgid "unimplemented on this platform: function '%s'" msgstr "non implementada nesta plataforma: función «%s»" #: src/function.c:2483 #, fuzzy, c-format msgid "unterminated call to function '%s': missing '%c'" msgstr "chamada á función «%s» non rematada: falta «%c»" #: src/function.c:2667 #, c-format msgid "Empty function name" msgstr "" #: src/function.c:2669 #, c-format msgid "Invalid function name: %s" msgstr "" #: src/function.c:2671 #, c-format msgid "Function name too long: %s" msgstr "" #: src/function.c:2674 #, fuzzy, c-format msgid "Invalid minimum argument count (%u) for function %s" msgstr "número de argumentos insuficiente (%d) na chamada á función «%s»" #: src/function.c:2677 #, fuzzy, c-format msgid "Invalid maximum argument count (%u) for function %s" msgstr "número de argumentos insuficiente (%d) na chamada á función «%s»" #: src/getopt.c:659 #, fuzzy, c-format msgid "%s: option '%s' is ambiguous\n" msgstr "%s: a opción «%s» é ambigua\n" #: src/getopt.c:683 #, fuzzy, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s: a opción «--%s» non permite ningún argumento\n" #: src/getopt.c:688 #, fuzzy, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s: a opción «%c%s» non permite ningún argumento\n" #: src/getopt.c:705 src/getopt.c:878 #, fuzzy, c-format msgid "%s: option '%s' requires an argument\n" msgstr "%s: a opción «%s» require un argumento\n" #: src/getopt.c:734 #, fuzzy, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s: opción «--%s» non recoñecida\n" #: src/getopt.c:738 #, fuzzy, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s: opción «%c%s» non recoñecida\n" #: src/getopt.c:764 #, c-format msgid "%s: illegal option -- %c\n" msgstr "%s: opción inaceptábel -- %c\n" #: src/getopt.c:767 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s: opción incorrecta -- %c\n" #: src/getopt.c:797 src/getopt.c:927 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: a opción require un argumento -- %c\n" #: src/getopt.c:844 #, fuzzy, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s: a opción «-W %s» é ambigua\n" #: src/getopt.c:862 #, fuzzy, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s: a opción «-W %s» non permite ningún argumento\n" #: src/guile.c:58 #, c-format msgid "guile: Expanding '%s'\n" msgstr "" #: src/guile.c:74 #, c-format msgid "guile: Evaluating '%s'\n" msgstr "" #: src/hash.c:50 #, c-format msgid "can't allocate %lu bytes for hash table: memory exhausted" msgstr "non se poden reservar %lu bytes para a táboa hash: memoria esgotada" #: src/hash.c:280 #, fuzzy, c-format msgid "Load=%lu/%lu=%.0f%%, " msgstr "Carga=%ld/%ld=%.0f%%, " #: src/hash.c:282 #, fuzzy, c-format msgid "Rehash=%u, " msgstr "Rehash=%d, " #: src/hash.c:283 #, fuzzy, c-format msgid "Collisions=%lu/%lu=%.0f%%" msgstr "Colisións=%ld/%ld=%.0f%%" #: src/implicit.c:38 #, fuzzy, c-format msgid "Looking for an implicit rule for '%s'.\n" msgstr "Buscando unha regra implícita para «%s».\n" #: src/implicit.c:54 #, fuzzy, c-format msgid "Looking for archive-member implicit rule for '%s'.\n" msgstr "Buscando unha regra implícita membro do arquivo para «%s».\n" #: src/implicit.c:311 #, c-format msgid "Avoiding implicit rule recursion.\n" msgstr "Evitando a recursión de regras implícitas.\n" #: src/implicit.c:484 #, c-format msgid "Stem too long: '%s%.*s'.\n" msgstr "" #: src/implicit.c:490 #, fuzzy, c-format msgid "Trying pattern rule with stem '%.*s'.\n" msgstr "Probando a regra de patrón con raíz «%.*s».\n" #: src/implicit.c:717 #, fuzzy, c-format msgid "Rejecting impossible rule prerequisite '%s'.\n" msgstr "Rexeitando o prerrequisito imposíbel «%s».\n" #: src/implicit.c:718 #, fuzzy, c-format msgid "Rejecting impossible implicit prerequisite '%s'.\n" msgstr "Rexeitando o prerrequisito implícito imposíbel «%s».\n" #: src/implicit.c:732 #, fuzzy, c-format msgid "Trying rule prerequisite '%s'.\n" msgstr "Probando o prerrequisito «%s».\n" #: src/implicit.c:733 #, fuzzy, c-format msgid "Trying implicit prerequisite '%s'.\n" msgstr "Probando o prerrequisito implícito «%s».\n" #: src/implicit.c:772 #, fuzzy, c-format msgid "Found prerequisite '%s' as VPATH '%s'\n" msgstr "Atopouse a o prerrequisito «%s» como VPATH «%s»\n" #: src/implicit.c:786 #, fuzzy, c-format msgid "Looking for a rule with intermediate file '%s'.\n" msgstr "Buscando unha regra co ficheiro intermedio «%s».\n" #: src/job.c:370 msgid "Cannot create a temporary file\n" msgstr "Non foi posíbel crear un ficheiro temporal\n" #: src/job.c:548 msgid " (core dumped)" msgstr " (memoria envorcada)" #: src/job.c:553 msgid " (ignored)" msgstr " (ignorado)" #: src/job.c:557 src/job.c:1892 #, fuzzy msgid "" msgstr " (incorporadas):" #: src/job.c:573 #, fuzzy, c-format msgid "%s[%s: %s] Error %d%s" msgstr "*** [%s] Erro %d" #: src/job.c:662 #, c-format msgid "*** Waiting for unfinished jobs...." msgstr "*** Agardando por traballos non rematados...." #: src/job.c:704 #, c-format msgid "Live child %p (%s) PID %s %s\n" msgstr "Proceso fillo vivo %p (%s) PID %s %s\n" #: src/job.c:706 src/job.c:900 src/job.c:1072 src/job.c:1644 #, c-format msgid " (remote)" msgstr " (remoto)" #: src/job.c:898 #, c-format msgid "Reaping winning child %p PID %s %s\n" msgstr "Colleitando o proceso fillo gañador %p PID %s %s\n" #: src/job.c:899 #, c-format msgid "Reaping losing child %p PID %s %s\n" msgstr "Colleitando o proceso fillo perdedor %p PID %s %s\n" #: src/job.c:950 #, c-format msgid "Cleaning up temp batch file %s\n" msgstr "Limpando o ficheiro de lotes temporal %s\n" #: src/job.c:956 #, fuzzy, c-format msgid "Cleaning up temp batch file %s failed (%d)\n" msgstr "Limpando o ficheiro de lotes temporal %s\n" #: src/job.c:1071 #, c-format msgid "Removing child %p PID %s%s from chain.\n" msgstr "Retirando o proceso fillo %p PID %s%s da cadea.\n" #: src/job.c:1120 #, c-format msgid "Released token for child %p (%s).\n" msgstr "Liberouse un elemento para o proceso fillo %p (%s).\n" #: src/job.c:1575 src/job.c:2487 #, 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" #: src/job.c:1579 src/job.c:2491 #, c-format msgid "" "\n" "Counted %d args in failed launch\n" msgstr "" "\n" "Contáronse %d argumentos no inicio que fallou\n" #: src/job.c:1642 #, 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" #: src/job.c:1875 #, c-format msgid "Obtained token for child %p (%s).\n" msgstr "Obtívose un elemento para o proceso fillo %p (%s).\n" #: src/job.c:1902 #, fuzzy, c-format msgid "%s: target '%s' does not exist" msgstr "touch: O arquivo «%s» non existe" #: src/job.c:1905 #, 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" #: src/job.c:2108 #, c-format msgid "cannot enforce load limits on this operating system" msgstr "non é posíbel impoñer límites de carga neste sistema operativo" #: src/job.c:2110 msgid "cannot enforce load limit: " msgstr "non é posíbel impoñer un límite de carga: " #: src/job.c:2200 #, c-format msgid "no more file handles: could not duplicate stdin\n" msgstr "" #: src/job.c:2212 #, c-format msgid "no more file handles: could not duplicate stdout\n" msgstr "" #: src/job.c:2226 #, c-format msgid "no more file handles: could not duplicate stderr\n" msgstr "" #: src/job.c:2241 #, c-format msgid "Could not restore stdin\n" msgstr "" #: src/job.c:2249 #, c-format msgid "Could not restore stdout\n" msgstr "" #: src/job.c:2257 #, c-format msgid "Could not restore stderr\n" msgstr "" #: src/job.c:2520 #, 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" #: src/job.c:2623 #, c-format msgid "spawnvpe: environment space might be exhausted" msgstr "" #: src/job.c:2862 #, fuzzy, c-format msgid "$SHELL changed (was '%s', now '%s')\n" msgstr "O valor de $SHELL cambiou (antes era «%s», agora é «%s»)\n" #: src/job.c:3300 src/job.c:3485 #, c-format msgid "Creating temporary batch file %s\n" msgstr "Creando un ficheiro por lotes temporal %s\n" #: src/job.c:3308 #, c-format msgid "" "Batch file contents:\n" "\t@echo off\n" msgstr "" #: src/job.c:3497 #, c-format msgid "" "Batch file contents:%s\n" "\t%s\n" msgstr "" #: src/job.c:3605 #, c-format msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n" msgstr "" "%s (liña %d) Contexto do intérprete de ordes incorrecto (!unixy && !" "batch_mode_shell)\n" #: src/load.c:60 #, c-format msgid "Failed to open global symbol table: %s" msgstr "" #: src/load.c:97 #, c-format msgid "Loaded object %s is not declared to be GPL compatible" msgstr "" #: src/load.c:104 #, c-format msgid "Failed to load symbol %s from %s: %s" msgstr "" #: src/load.c:149 #, c-format msgid "Empty symbol name for load: %s" msgstr "" #: src/load.c:204 #, c-format msgid "Loading symbol %s from %s\n" msgstr "" #: src/load.c:256 #, fuzzy, c-format msgid "The 'load' operation is not supported on this platform." msgstr "Non se admiten os traballos en paralelo (-j) nesta plataforma." #: src/main.c:335 msgid "Options:\n" msgstr "Opcións:\n" #: src/main.c:336 msgid " -b, -m Ignored for compatibility.\n" msgstr " -b, -m Ignorado por compatibilidade.\n" #: src/main.c:338 msgid " -B, --always-make Unconditionally make all targets.\n" msgstr "" " -B, --always-make Facer todos os obxectivos incondicionalmente.\n" #: src/main.c:340 msgid "" " -C DIRECTORY, --directory=DIRECTORY\n" " Change to DIRECTORY before doing anything.\n" msgstr "" " -C DIRECTORIO, --directory=DIRECTORIO\n" " Cambiar ao DIRECTORIO antes de facer nada.\n" #: src/main.c:343 msgid " -d Print lots of debugging information.\n" msgstr "" " -d Mostrar moita información de depuración.\n" #: src/main.c:345 msgid "" " --debug[=FLAGS] Print various types of debugging information.\n" msgstr "" " --debug[=MODIFICADORES] Mostrar varios tipos de información de " "depuración.\n" #: src/main.c:347 msgid "" " -e, --environment-overrides\n" " Environment variables override makefiles.\n" msgstr "" " -e, --environment-overrides\n" " As variábei de ambiente substitúen aos " "makefiles.\n" #: src/main.c:350 msgid "" " -E STRING, --eval=STRING Evaluate STRING as a makefile statement.\n" msgstr "" #: src/main.c:352 msgid "" " -f FILE, --file=FILE, --makefile=FILE\n" " Read FILE as a makefile.\n" msgstr "" " -f FICHEIRO, --file=FICHEIRO, --makefile=FICHEIRO\n" " Ler o FICHEIRO como makefile.\n" #: src/main.c:355 msgid " -h, --help Print this message and exit.\n" msgstr " -h, --help Mostrar esta mensaxe e saír.\n" #: src/main.c:357 msgid " -i, --ignore-errors Ignore errors from recipes.\n" msgstr "" #: src/main.c:359 msgid "" " -I DIRECTORY, --include-dir=DIRECTORY\n" " Search DIRECTORY for included makefiles.\n" msgstr "" " -I DIRECTORIO, --include-dir=DIRECTORIO\n" " Buscar os makefiles incluídos\n" " no DIRECTORIO.\n" #: src/main.c:362 msgid "" " -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no " "arg.\n" msgstr "" " -j [N], --jobs[=N] Permitir N traballos á vez; infinitos sen\n" " un argumento.\n" #: src/main.c:364 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" #: src/main.c:366 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" " Non iniciar varios traballos con carga\n" " superior a N.\n" #: src/main.c:369 msgid "" " -L, --check-symlink-times Use the latest mtime between symlinks and " "target.\n" msgstr "" #: src/main.c:371 #, fuzzy 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" " Non executar ningún comando; só amosalos.\n" #: src/main.c:374 msgid "" " -o FILE, --old-file=FILE, --assume-old=FILE\n" " Consider FILE to be very old and don't remake " "it.\n" msgstr "" " -o FICHEIRO, --old-file=FICHEIRO, --assume-old=FICHEIRO\n" " Tratar o FICHEIRO como moi antigo e non " "refacelo.\n" #: src/main.c:377 msgid "" " -O[TYPE], --output-sync[=TYPE]\n" " Synchronize output of parallel jobs by TYPE.\n" msgstr "" #: src/main.c:380 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" #: src/main.c:382 msgid "" " -q, --question Run no recipe; exit status says if up to " "date.\n" msgstr "" #: src/main.c:384 msgid " -r, --no-builtin-rules Disable the built-in implicit rules.\n" msgstr "" " -r, --no-builtin-rules Desactivar as regras implícitas incorporadas.\n" #: src/main.c:386 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" #: src/main.c:388 msgid " -s, --silent, --quiet Don't echo recipes.\n" msgstr "" #: src/main.c:390 msgid " --no-silent Echo recipes (disable --silent mode).\n" msgstr "" #: src/main.c:392 msgid "" " -S, --no-keep-going, --stop\n" " Turns off -k.\n" msgstr "" " -S, --no-keep-going, --stop\n" " Desactiva -k.\n" #: src/main.c:395 msgid " -t, --touch Touch targets instead of remaking them.\n" msgstr "" " -t, --touch Tocar os obxectivos no canto de os refacer.\n" #: src/main.c:397 #, fuzzy msgid " --trace Print tracing information.\n" msgstr "" " -d Mostrar moita información de depuración.\n" #: src/main.c:399 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" #: src/main.c:401 msgid " -w, --print-directory Print the current directory.\n" msgstr " -w, --print-directory Mostrar o directorio actual.\n" #: src/main.c:403 msgid "" " --no-print-directory Turn off -w, even if it was turned on " "implicitly.\n" msgstr "" " --no-print-directory Desactivar -w, incluso se se activou\n" " implicitamente.\n" #: src/main.c:405 msgid "" " -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n" " Consider FILE to be infinitely new.\n" msgstr "" " -W FICHEIRO, --what-if=FICHEIRO, --new-file=FICHEIRO, --assume-" "new=FICHEIRO\n" " Tratar o FICHEIRO como infinitamente novo.\n" #: src/main.c:408 msgid "" " --warn-undefined-variables Warn when an undefined variable is " "referenced.\n" msgstr "" " --warn-undefined-variables Avisar cando se faga referencia a\n" " unha variábel non definida.\n" #: src/main.c:671 #, c-format msgid "empty string invalid as file name" msgstr "a cadea baleira non é válida como nome de ficheiro" #: src/main.c:754 #, fuzzy, c-format msgid "unknown debug level specification '%s'" msgstr "especificación de nivel de depuración descoñecido «%s»" #: src/main.c:794 #, c-format msgid "unknown output-sync type '%s'" msgstr "" #: src/main.c:849 #, 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" #: src/main.c:856 #, c-format msgid "" "\n" "Unhandled exception filter called from program %s\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" msgstr "" "\n" "Filtro de excepcións non manexadas chamado desde o programa %s\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" #: src/main.c:864 #, 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" #: src/main.c:865 #, 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" #: src/main.c:941 src/main.c:956 #, c-format msgid "find_and_set_shell() setting default_shell = %s\n" msgstr "find_and_set_shell() definindo default_shell = %s\n" #: src/main.c:1009 #, 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" #: src/main.c:1609 #, fuzzy, c-format msgid "" "warning: jobserver unavailable: using -j1. Add '+' to parent make rule." msgstr "" "aviso: o servidor de traballos non está dispoñíbel: usando -j1. Engada «+» á " "regra do make pai." #: src/main.c:1617 #, fuzzy, c-format msgid "warning: -j%d forced in submake: resetting jobserver mode." msgstr "" "aviso: -jN forzado no submake: desactivando o modo de servidor de traballos." #: src/main.c:1781 #, c-format msgid "Makefile from standard input specified twice." msgstr "O ficheiro de make da entrada estándar especificouse dúas veces." #: src/main.c:1819 src/vmsjobs.c:1248 msgid "fopen (temporary file)" msgstr "fopen (ficheiro temporal)" #: src/main.c:1825 msgid "fwrite (temporary file)" msgstr "fwrite (ficheiro temporal)" #: src/main.c:2004 #, fuzzy, c-format msgid "warning: -j%d forced in makefile: resetting jobserver mode." msgstr "" "aviso: -jN forzado no submake: desactivando o modo de servidor de traballos." #: src/main.c:2068 #, c-format msgid "Parallel jobs (-j) are not supported on this platform." msgstr "Non se admiten os traballos en paralelo (-j) nesta plataforma." #: src/main.c:2069 #, c-format msgid "Resetting to single job (-j1) mode." msgstr "Reiniciando para entrar no modo de traballo único (-j1)." #: src/main.c:2109 #, c-format msgid "Symbolic links not supported: disabling -L." msgstr "" #: src/main.c:2190 #, c-format msgid "Updating makefiles....\n" msgstr "Actualizando os ficheiros de make....\n" #: src/main.c:2226 #, 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" #: src/main.c:2303 #, fuzzy, c-format msgid "Failed to remake makefile '%s'." msgstr "Produciuse un erro ao refacer o ficheiro de make «%s»." #: src/main.c:2323 #, fuzzy, c-format msgid "Included makefile '%s' was not found." msgstr "Non se atopou o ficheiro de make incluído «%s»." #: src/main.c:2328 #, fuzzy, c-format msgid "Makefile '%s' was not found" msgstr "Non se atopou o ficheiro de make «%s»" #: src/main.c:2394 #, c-format msgid "Couldn't change back to original directory." msgstr "Non foi posíbel volver ao directorio orixinal." #: src/main.c:2402 #, c-format msgid "Re-executing[%u]:" msgstr "Re-executando[%u]:" #: src/main.c:2522 msgid "unlink (temporary file): " msgstr "unlink (ficheiro temporal)" #: src/main.c:2555 #, c-format msgid ".DEFAULT_GOAL contains more than one target" msgstr "" #: src/main.c:2579 #, c-format msgid "No targets" msgstr "Non hai obxectivos" #: src/main.c:2581 #, c-format msgid "No targets specified and no makefile found" msgstr "Non se especificaron obxectivos e non se atopou un ficheiro de make" #: src/main.c:2586 #, c-format msgid "Updating goal targets....\n" msgstr "Actualizando os obxectivos meta....\n" #: src/main.c:2610 #, c-format msgid "warning: Clock skew detected. Your build may be incomplete." msgstr "" "aviso: Detectáronse inconsistencias de reloxo. A operación pode quedar " "incompleta." #: src/main.c:2804 #, c-format msgid "Usage: %s [options] [target] ...\n" msgstr "Uso: %s [opcións] [obxectivo] ...\n" #: src/main.c:2810 #, c-format msgid "" "\n" "This program built for %s\n" msgstr "" "\n" "Este programa compilou para %s\n" #: src/main.c:2812 #, c-format msgid "" "\n" "This program built for %s (%s)\n" msgstr "" "\n" "Este programa compilou para %s (%s)\n" #: src/main.c:2815 #, c-format msgid "Report bugs to \n" msgstr "" "Envíe informes de fallo no programa a .\n" "Envíe informes de fallo na tradución a .\n" #: src/main.c:2901 #, 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" #: src/main.c:2965 #, fuzzy, c-format msgid "the '-%c' option requires a positive integer argument" msgstr "a opción «-%c» require un argumento integral positivo" #: src/main.c:3363 #, c-format msgid "%sBuilt for %s\n" msgstr "%sCompilado para %s\n" #: src/main.c:3365 #, c-format msgid "%sBuilt for %s (%s)\n" msgstr "%sCompilado para %s (%s)\n" #: src/main.c:3376 #, c-format msgid "" "%sLicense GPLv3+: GNU GPL version 3 or later \n" "%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 "" "%sLicenza GPLv3+: GNU GPL versión 3 ou posterior \n" "%sIsto é software libre: pode modificalo e redistribuílo.\n" "%sNon hai NINGUNHA GARANTÃA, ata onde o permita a lei.\n" #: src/main.c:3397 #, c-format msgid "" "\n" "# Make data base, printed on %s" msgstr "" "\n" "# Base de datos de Make, imprimida en %s" #: src/main.c:3407 #, c-format msgid "" "\n" "# Finished Make data base on %s\n" msgstr "" "\n" "# Base de datos de Make rematada en %s\n" #: src/misc.c:643 #, c-format msgid "%s: user %lu (real %lu), group %lu (real %lu)\n" msgstr "%s: usuario %lu (real %lu), grupo %lu (real %lu)\n" #: src/misc.c:664 msgid "Initialized access" msgstr "Acceso inicializado" #: src/misc.c:743 msgid "User access" msgstr "Acceso de usuario" #: src/misc.c:791 msgid "Make access" msgstr "Acceso de make" #: src/misc.c:825 msgid "Child access" msgstr "Acceso de fillo" #: src/output.c:97 #, c-format msgid "%s: Entering an unknown directory\n" msgstr "%s: Entrando nun directorio descoñecido\n" #: src/output.c:99 #, c-format msgid "%s: Leaving an unknown directory\n" msgstr "%s: Saíndo dun directorio descoñecido\n" #: src/output.c:102 #, fuzzy, c-format msgid "%s: Entering directory '%s'\n" msgstr "%s: Entrando no directorio «%s»\n" #: src/output.c:104 #, fuzzy, c-format msgid "%s: Leaving directory '%s'\n" msgstr "%s: Saíndo do directorio «%s»\n" #: src/output.c:108 #, c-format msgid "%s[%u]: Entering an unknown directory\n" msgstr "%s[%u]: Entrando nun directorio descoñecido\n" #: src/output.c:110 #, c-format msgid "%s[%u]: Leaving an unknown directory\n" msgstr "%s[%u]: Saíndo dun directorio descoñecido\n" #: src/output.c:113 #, fuzzy, c-format msgid "%s[%u]: Entering directory '%s'\n" msgstr "%s[%u]: Entrando no directorio «%s»\n" #: src/output.c:115 #, fuzzy, c-format msgid "%s[%u]: Leaving directory '%s'\n" msgstr "%s[%u]: Saíndo do directorio «%s»\n" #: src/output.c:442 src/output.c:444 #, fuzzy, c-format msgid "write error: stdout" msgstr "erro de escritura: %s" #: src/output.c:624 msgid ". Stop.\n" msgstr ". Detido.\n" #: src/output.c:658 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" #: src/output.c:667 #, c-format msgid "%s: %s" msgstr "%s: %s" #: src/output.h:62 #, c-format msgid "-O[TYPE] (--output-sync[=TYPE]) is not configured for this build." msgstr "" #: src/posixos.c:90 msgid "creating jobs pipe" msgstr "creando a canalización de traballos" #: src/posixos.c:98 src/posixos.c:251 #, fuzzy msgid "duping jobs pipe" msgstr "creando a canalización de traballos" #: src/posixos.c:104 msgid "init jobserver pipe" msgstr "inicializar a canalización do servidor de traballos" #: src/posixos.c:119 #, fuzzy, c-format msgid "internal error: invalid --jobserver-auth string '%s'" msgstr "erro interno: cadea --jobserver-fds non válida «%s»" #: src/posixos.c:122 #, c-format msgid "Jobserver client (fds %d,%d)\n" msgstr "" #: src/posixos.c:138 #, fuzzy msgid "jobserver pipeline" msgstr "inicializar a canalización do servidor de traballos" #: src/posixos.c:186 msgid "write jobserver" msgstr "" #: src/posixos.c:300 #, c-format msgid "job server shut down" msgstr "" #: src/posixos.c:303 #, fuzzy msgid "pselect jobs pipe" msgstr "lectura da canalización de traballos" #: src/posixos.c:319 src/posixos.c:433 msgid "read jobs pipe" msgstr "lectura da canalización de traballos" #: src/read.c:181 #, c-format msgid "Reading makefiles...\n" msgstr "Lendo os ficheiros de make...\n" #: src/read.c:336 #, fuzzy, c-format msgid "Reading makefile '%s'" msgstr "Lendo o ficheiro de make «%s»" #: src/read.c:338 #, c-format msgid " (no default goal)" msgstr " (non hai unha meta por defecto)" #: src/read.c:340 #, c-format msgid " (search path)" msgstr " (ruta de busca)" #: src/read.c:342 #, c-format msgid " (don't care)" msgstr " (non importa)" #: src/read.c:344 #, c-format msgid " (no ~ expansion)" msgstr " (non hai expansión de ~)" #: src/read.c:655 #, c-format msgid "Skipping UTF-8 BOM in makefile '%s'\n" msgstr "" #: src/read.c:658 #, c-format msgid "Skipping UTF-8 BOM in makefile buffer\n" msgstr "" #: src/read.c:787 #, c-format msgid "invalid syntax in conditional" msgstr "sintaxe non válida no condicional" #: src/read.c:960 #, c-format msgid "%s: failed to load" msgstr "" #: src/read.c:986 #, c-format msgid "recipe commences before first target" msgstr "" #: src/read.c:1035 #, c-format msgid "missing rule before recipe" msgstr "" #: src/read.c:1136 #, fuzzy, c-format msgid "missing separator (did you mean TAB instead of 8 spaces?)" msgstr " (quixo dicir TAB no canto de 8 espazos?)" #: src/read.c:1138 #, fuzzy, c-format msgid "missing separator" msgstr "falta un separador%s" #: src/read.c:1283 #, c-format msgid "missing target pattern" msgstr "falta un patrón obxectivo" #: src/read.c:1285 #, c-format msgid "multiple target patterns" msgstr "patróns de obxectivo múltiples" #: src/read.c:1289 #, fuzzy, c-format msgid "target pattern contains no '%%'" msgstr "o patrón obxectivo non contén «%%»" #: src/read.c:1404 #, fuzzy, c-format msgid "missing 'endif'" msgstr "falta «endif»" #: src/read.c:1443 src/read.c:1488 src/variable.c:1600 #, c-format msgid "empty variable name" msgstr "nome de variábel baleiro" #: src/read.c:1478 #, fuzzy, c-format msgid "extraneous text after 'define' directive" msgstr "texto superfluo trala directiva «define»" #: src/read.c:1503 #, fuzzy, c-format msgid "missing 'endef', unterminated 'define'" msgstr "falta «endef», «define» sen rematar" #: src/read.c:1531 #, fuzzy, c-format msgid "extraneous text after 'endef' directive" msgstr "Texto superfluo trala directiva «endef»" #: src/read.c:1603 #, fuzzy, c-format msgid "extraneous text after '%s' directive" msgstr "Texto superfluo trala directiva «%s»" #: src/read.c:1604 #, fuzzy, c-format msgid "extraneous '%s'" msgstr "«%s» superfluo" #: src/read.c:1632 #, fuzzy, c-format msgid "only one 'else' per conditional" msgstr "só un «else» por condicional" #: src/read.c:1908 #, c-format msgid "Malformed target-specific variable definition" msgstr "Definición dunha variábel por obxectivo mal formada" #: src/read.c:1968 #, c-format msgid "prerequisites cannot be defined in recipes" msgstr "" #: src/read.c:1986 #, c-format msgid "grouped targets must provide a recipe" msgstr "" #: src/read.c:2029 #, c-format msgid "mixed implicit and static pattern rules" msgstr "regras de patrón implícitas e estáticas mesturadas" #: src/read.c:2052 #, c-format msgid "mixed implicit and normal rules" msgstr "regras implícitas e normais mesturadas" #: src/read.c:2107 #, fuzzy, c-format msgid "target '%s' doesn't match the target pattern" msgstr "o obxectivo «%s» non coincide co patrón do obxectivo" #: src/read.c:2122 src/read.c:2168 #, fuzzy, c-format msgid "target file '%s' has both : and :: entries" msgstr "o ficheiro obxectivo «%s» ten entradas : e ::" #: src/read.c:2128 #, 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." #: src/read.c:2138 #, c-format msgid "warning: overriding recipe for target '%s'" msgstr "" #: src/read.c:2141 #, c-format msgid "warning: ignoring old recipe for target '%s'" msgstr "" #: src/read.c:2254 #, fuzzy, c-format msgid "*** mixed implicit and normal rules: deprecated syntax" msgstr "regras implícitas e normais mesturadas" #: src/read.c:2271 #, c-format msgid "warning: overriding group membership for target '%s'" msgstr "" #: src/read.c:2636 #, c-format msgid "warning: NUL character seen; rest of line ignored" msgstr "aviso: viuse un carácter NUL; ignórase o resto da liña" #: src/remake.c:226 #, fuzzy, c-format msgid "Nothing to be done for '%s'." msgstr "Non hai nada que facer para «%s»" #: src/remake.c:227 #, fuzzy, c-format msgid "'%s' is up to date." msgstr "«%s» está actualizado." #: src/remake.c:323 #, fuzzy, c-format msgid "Pruning file '%s'.\n" msgstr "Podando o ficheiro «%s».\n" #: src/remake.c:389 #, 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" #: src/remake.c:399 #, fuzzy, c-format msgid "%sNo rule to make target '%s'%s" msgstr "%sNon hai unha regra para facer o obxectivo «%s»%s" #: src/remake.c:425 #, fuzzy, c-format msgid "Considering target file '%s'.\n" msgstr "Considerando o ficheiro obxectivo «%s».\n" #: src/remake.c:432 #, 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" #: src/remake.c:444 #, fuzzy, c-format msgid "File '%s' was considered already.\n" msgstr "O ficheiro «%s» xa fora considerado.\n" #: src/remake.c:454 #, fuzzy, c-format msgid "Still updating file '%s'.\n" msgstr "Aínda se está actualizando o ficheiro «%s».\n" #: src/remake.c:457 #, fuzzy, c-format msgid "Finished updating file '%s'.\n" msgstr "Rematouse de actualizar o ficheiro «%s».\n" #: src/remake.c:486 #, fuzzy, c-format msgid "File '%s' does not exist.\n" msgstr "O ficheiro «%s» non existe.\n" #: src/remake.c:494 #, fuzzy, c-format msgid "" "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp" msgstr "" "*** Aviso: o ficheiro «%s» de .LOW_RESOLUTION_TIME ten unha marca de tempo " "de alta resolución" #: src/remake.c:507 src/remake.c:1039 #, fuzzy, c-format msgid "Found an implicit rule for '%s'.\n" msgstr "Atopouse unha regra implícita de «%s».\n" #: src/remake.c:509 src/remake.c:1041 #, fuzzy, c-format msgid "No implicit rule found for '%s'.\n" msgstr "Non se atopou unha regra implícita para «%s».\n" #: src/remake.c:515 #, fuzzy, c-format msgid "Using default recipe for '%s'.\n" msgstr "Usando as ordes por defecto para «%s».\n" #: src/remake.c:549 src/remake.c:1088 #, c-format msgid "Circular %s <- %s dependency dropped." msgstr "A dependencia circular %s <- %s foi eliminada." #: src/remake.c:674 #, fuzzy, c-format msgid "Finished prerequisites of target file '%s'.\n" msgstr "Rematáronse os prerrequisitos do ficheiro obxectivo «%s».\n" #: src/remake.c:680 #, fuzzy, c-format msgid "The prerequisites of '%s' are being made.\n" msgstr "Están a se facer os prerrequisitos de «%s».\n" #: src/remake.c:694 #, fuzzy, c-format msgid "Giving up on target file '%s'.\n" msgstr "Abandonando no ficheiro obxectivo «%s».\n" #: src/remake.c:699 #, fuzzy, c-format msgid "Target '%s' not remade because of errors." msgstr "Non se refai o obxectivo «%s» a causa dos erros." #: src/remake.c:751 #, fuzzy, c-format msgid "Prerequisite '%s' is order-only for target '%s'.\n" msgstr "O prerrequisito «%s» é só-orde para o obxectivo «%s».\n" #: src/remake.c:756 #, fuzzy, c-format msgid "Prerequisite '%s' of target '%s' does not exist.\n" msgstr "O prerrequisito «%s» do obxectivo «%s» non existe.\n" #: src/remake.c:761 #, fuzzy, c-format msgid "Prerequisite '%s' is newer than target '%s'.\n" msgstr "O prerrequisito «%s» é máis novo que o obxectivo «%s».\n" #: src/remake.c:764 #, fuzzy, c-format msgid "Prerequisite '%s' is older than target '%s'.\n" msgstr "O prerrequisito «%s» é máis vello que o obxectivo «%s».\n" #: src/remake.c:782 #, 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" #: src/remake.c:789 #, c-format msgid "No recipe for '%s' and no prerequisites actually changed.\n" msgstr "" #: src/remake.c:794 #, fuzzy, c-format msgid "Making '%s' due to always-make flag.\n" msgstr "Facendo «%s» debido á marca de sempre-facer.\n" #: src/remake.c:802 #, fuzzy, c-format msgid "No need to remake target '%s'" msgstr "Non é preciso refacer o obxectivo «%s»" #: src/remake.c:804 #, fuzzy, c-format msgid "; using VPATH name '%s'" msgstr "; usando o nome de VPATH «%s»" #: src/remake.c:824 #, fuzzy, c-format msgid "Must remake target '%s'.\n" msgstr "Debe refacerse o obxectivo «%s».\n" #: src/remake.c:830 #, fuzzy, c-format msgid " Ignoring VPATH name '%s'.\n" msgstr " Ignorando o nome VPATH «%s».\n" #: src/remake.c:839 #, c-format msgid "Recipe of '%s' is being run.\n" msgstr "" #: src/remake.c:846 #, fuzzy, c-format msgid "Failed to remake target file '%s'.\n" msgstr "Produciuse un erro ao refacer o ficheiro obxectivo «%s».\n" #: src/remake.c:849 #, fuzzy, c-format msgid "Successfully remade target file '%s'.\n" msgstr "O ficheiro obxectivo «%s» foi feito de novo con éxito.\n" #: src/remake.c:852 #, fuzzy, c-format msgid "Target file '%s' needs to be remade under -q.\n" msgstr "O ficheiro obxectivo «%s» precisa refacerse con -q.\n" #: src/remake.c:1047 #, fuzzy, c-format msgid "Using default commands for '%s'.\n" msgstr "Usando as ordes por defecto para «%s».\n" #: src/remake.c:1422 #, 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" #: src/remake.c:1662 #, fuzzy, c-format msgid ".LIBPATTERNS element '%s' is not a pattern" msgstr "O elemento de .LIBPATTERNS «%s» non é un patrón" #: src/remote-cstms.c:122 #, c-format msgid "Customs won't export: %s\n" msgstr "A Aduana non exporta: %s\n" #: src/rule.c:289 #, c-format msgid "warning: ignoring prerequisites on suffix rule definition" msgstr "" #: src/rule.c:530 msgid "" "\n" "# Implicit Rules" msgstr "" "\n" "# Regras implícitas" #: src/rule.c:545 msgid "" "\n" "# No implicit rules." msgstr "" "\n" "# Non hai regras implícitas." #: src/rule.c:548 #, fuzzy, c-format msgid "" "\n" "# %u implicit rules, %u (%.1f%%) terminal." msgstr "" "\n" "# %u regras implícitas, %u" #: src/rule.c:557 #, c-format msgid "BUG: num_pattern_rules is wrong! %u != %u" msgstr "FALLO: num_pattern_rules é incorrecto! %u != %u" #: src/signame.c:84 msgid "unknown signal" msgstr "sinal descoñecido" #: src/signame.c:92 msgid "Hangup" msgstr "Colgar" #: src/signame.c:95 msgid "Interrupt" msgstr "Interrompido" #: src/signame.c:98 msgid "Quit" msgstr "Saír" #: src/signame.c:101 msgid "Illegal Instruction" msgstr "Instrución inaceptábel" #: src/signame.c:104 msgid "Trace/breakpoint trap" msgstr "Trampa de trazado/punto de detención" #: src/signame.c:109 msgid "Aborted" msgstr "Abortado" #: src/signame.c:112 msgid "IOT trap" msgstr "Trampa de IOT" #: src/signame.c:115 msgid "EMT trap" msgstr "Trampa EMT" #: src/signame.c:118 msgid "Floating point exception" msgstr "Excepción de coma flotante" #: src/signame.c:121 msgid "Killed" msgstr "Matado" #: src/signame.c:124 msgid "Bus error" msgstr "Erro do bus" #: src/signame.c:127 msgid "Segmentation fault" msgstr "Fallo de segmento" #: src/signame.c:130 msgid "Bad system call" msgstr "Chamada ao sistema incorrecta" #: src/signame.c:133 msgid "Broken pipe" msgstr "Canalización rota" #: src/signame.c:136 msgid "Alarm clock" msgstr "Temporizador" #: src/signame.c:139 msgid "Terminated" msgstr "Terminado" #: src/signame.c:142 msgid "User defined signal 1" msgstr "Sinal definido polo usuario 1" #: src/signame.c:145 msgid "User defined signal 2" msgstr "Sinal definido polo usuario 2" #: src/signame.c:150 src/signame.c:153 msgid "Child exited" msgstr "O proceso fillo saíu" #: src/signame.c:156 msgid "Power failure" msgstr "Fallo de subministración eléctrica" #: src/signame.c:159 msgid "Stopped" msgstr "Detido" #: src/signame.c:162 msgid "Stopped (tty input)" msgstr "Detido (entrada de consola)" #: src/signame.c:165 msgid "Stopped (tty output)" msgstr "Detido (saída de consola)" #: src/signame.c:168 msgid "Stopped (signal)" msgstr "Detido (sinal)" #: src/signame.c:171 msgid "CPU time limit exceeded" msgstr "Excedeuse o límite de tempo de CPU" #: src/signame.c:174 msgid "File size limit exceeded" msgstr "Excedeuse o límite de tamaño do ficheiro" #: src/signame.c:177 msgid "Virtual timer expired" msgstr "Temporizador virtual esgotado" #: src/signame.c:180 msgid "Profiling timer expired" msgstr "" #: src/signame.c:186 msgid "Window changed" msgstr "A xanela cambiou" #: src/signame.c:189 msgid "Continued" msgstr "Continuado" #: src/signame.c:192 msgid "Urgent I/O condition" msgstr "Condición de E/S urxente" #: src/signame.c:199 src/signame.c:208 msgid "I/O possible" msgstr "A E/S é posíbel" #: src/signame.c:202 msgid "SIGWIND" msgstr "SIGWIND" #: src/signame.c:205 msgid "SIGPHONE" msgstr "SIGPHONE" #: src/signame.c:211 msgid "Resource lost" msgstr "Recurso perdido" #: src/signame.c:214 msgid "Danger signal" msgstr "Sinal de perigo" #: src/signame.c:217 msgid "Information request" msgstr "Petición de información" #: src/signame.c:220 msgid "Floating point co-processor not available" msgstr "O coprocesador de coma flotante non está dispoñíbel" #: src/strcache.c:274 #, c-format msgid "" "\n" "%s No strcache buffers\n" msgstr "" #: src/strcache.c:304 #, c-format msgid "" "\n" "%s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu " "B\n" msgstr "" #: src/strcache.c:308 #, c-format msgid "" "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B\n" msgstr "" #: src/strcache.c:319 #, c-format msgid "%s other used: total = %lu B / count = %lu / avg = %lu B\n" msgstr "" #: src/strcache.c:322 #, c-format msgid "" "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n" msgstr "" #: src/strcache.c:326 #, c-format msgid "" "\n" "%s strcache performance: lookups = %lu / hit rate = %lu%%\n" msgstr "" #: src/strcache.c:328 #, fuzzy msgid "" "# hash-table stats:\n" "# " msgstr "" "\n" "# estatísticas da táboa hash de ficheiros:\n" "# " #: src/variable.c:1653 msgid "automatic" msgstr "automático" #: src/variable.c:1656 msgid "default" msgstr "por defecto" #: src/variable.c:1659 msgid "environment" msgstr "ambiente" #: src/variable.c:1662 msgid "makefile" msgstr "ficheiro de make" #: src/variable.c:1665 msgid "environment under -e" msgstr "ambiente baixo -e" #: src/variable.c:1668 msgid "command line" msgstr "liña de ordes" #: src/variable.c:1671 #, fuzzy msgid "'override' directive" msgstr "directiva «override»" #: src/variable.c:1682 #, fuzzy, c-format msgid " (from '%s', line %lu)" msgstr " (desde «%s», liña %lu)" #: src/variable.c:1745 msgid "# variable set hash-table stats:\n" msgstr "# estatísticas da táboa hash de conxunto de variábeis:\n" #: src/variable.c:1756 msgid "" "\n" "# Variables\n" msgstr "" "\n" "# Variábeis\n" #: src/variable.c:1760 msgid "" "\n" "# Pattern-specific Variable Values" msgstr "" "\n" "# Valores de variábeis específicas do patrón" #: src/variable.c:1774 msgid "" "\n" "# No pattern-specific variable values." msgstr "" "\n" "# Non hai valores específicos do patrón." #: src/variable.c:1776 #, c-format msgid "" "\n" "# %u pattern-specific variable values" msgstr "" "\n" "# %u valores de variábeis específicos do patrón" #: src/variable.h:229 #, fuzzy, c-format msgid "warning: undefined variable '%.*s'" msgstr "aviso: variábel non definida «%.*s»" #: src/vmsfunctions.c:91 #, c-format msgid "sys$search() failed with %d\n" msgstr "a chamada a sys$search() fallou con %d\n" #: src/vmsjobs.c:244 #, 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" #: src/vmsjobs.c:681 #, c-format msgid "BUILTIN CD %s\n" msgstr "BUILTIN CD %s\n" #: src/vmsjobs.c:1224 #, c-format msgid "DCL: %s\n" msgstr "" #: src/vmsjobs.c:1284 #, c-format msgid "Append output to %s\n" msgstr "" #: src/vmsjobs.c:1309 #, c-format msgid "Append %.*s and cleanup\n" msgstr "" #: src/vmsjobs.c:1322 #, c-format msgid "Executing %s instead\n" msgstr "Executando %s no canto\n" #: src/vpath.c:603 msgid "" "\n" "# VPATH Search Paths\n" msgstr "" "\n" "# Rutas de busca VPATH\n" #: src/vpath.c:620 #, fuzzy msgid "# No 'vpath' search paths." msgstr "# Non hai rutas de busca «vpath»" #: src/vpath.c:622 #, fuzzy, c-format msgid "" "\n" "# %u 'vpath' search paths.\n" msgstr "" "\n" "# %u rutas de busca «vpath».\n" #: src/vpath.c:625 #, fuzzy msgid "" "\n" "# No general ('VPATH' variable) search path." msgstr "" "\n" "# Non hai unha ruta de busca xeral (variábel «VPATH»)." #: src/vpath.c:631 #, fuzzy msgid "" "\n" "# General ('VPATH' variable) search path:\n" "# " msgstr "" "\n" "# Ruta de busca xeral (variábel «VPATH»):\n" "# " #: src/w32/w32os.c:44 #, c-format msgid "Jobserver slots limited to %d\n" msgstr "" #: src/w32/w32os.c:60 #, c-format msgid "creating jobserver semaphore: (Error %ld: %s)" msgstr "" #: src/w32/w32os.c:79 #, c-format msgid "" "internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)" msgstr "" #: src/w32/w32os.c:82 #, c-format msgid "Jobserver client (semaphore %s)\n" msgstr "" #: src/w32/w32os.c:123 #, c-format msgid "release jobserver semaphore: (Error %ld: %s)" msgstr "" #: src/w32/w32os.c:194 #, 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 "%s: Command not found" #~ msgstr "%s: Orde non atopada" #~ msgid "%s: Shell program not found" #~ msgstr "%s: Programa para o intérprete de ordes non atopado" #~ msgid "%s is suspending for 30 seconds..." #~ msgstr "%s está suspendido durante 30 segundos..." #~ msgid "done sleep(30). Continuing.\n" #~ msgstr "rematouse sleep(30). Continuando.\n" #~ msgid "internal error: multiple --jobserver-fds options" #~ msgstr "erro interno: opcións --jobserver-fds múltiples" #~ msgid "dup jobserver" #~ msgstr "dup jobserver" #~ msgid "Unknown error %d" #~ msgstr "Erro %d descoñecido" #~ msgid "virtual memory exhausted" #~ msgstr "memoria virtual esgotada" #~ msgid "write error" #~ msgstr "erro de escritura" #~ msgid "Warning: File `%s' has modification time in the future" #~ msgstr "Aviso: O ficheiro «%s» ten un tempo de modificación no futuro" #~ msgid " terminal." #~ msgstr " terminal." #~ msgid "" #~ "\n" #~ "# strcache hash-table stats:\n" #~ "# " #~ msgstr "" #~ "\n" #~ "# 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" #~ msgid "create_child_process: DuplicateHandle(Err) failed (e=%d)\n" #~ msgstr "" #~ "create_child_process: a chamada a DuplicateHandle(Err) fallou (e=%d)\n" #~ msgid "Syntax error, still inside '\"'\n" #~ msgstr "Erro de sintaxe, ainda dentro de '\"'\n" #~ msgid "Got a SIGCHLD; %u unreaped children.\n" #~ msgstr "Recibiuse un sinal SIGCHLD; %u procesos fillos non colleitados.\n" #~ msgid "-warning, CTRL-Y will leave sub-process(es) around.\n" #~ msgstr "-aviso, CTRL-Y deixará subprocesos ceibos.\n" #~ msgid "Do not specify -j or --jobs if sh.exe is not available." #~ msgstr "Non especifique -j ou --jobs se sh.exe non está dispoñible." #~ msgid "Resetting make for single job mode." #~ msgstr "Reiniciando make para entrar no modo de un traballo." #~ 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" #~ "%sPARTICULAR PURPOSE.\n" #~ msgstr "" #~ "%sIsto é software libre; vexa o código fonte polas condicións de copia.\n" #~ "%sNON hai garantía; nin sequera de COMERCIABILIDADE ou APTITUDE PARA\n" #~ "%sUN FIN DETERMINADO.\n" #~ msgid "extraneous `endef'" #~ msgstr "`endef' superfluo" #~ msgid "empty `override' directive" #~ msgstr "directiva `override' baleira" #~ msgid "invalid `override' directive" #~ msgstr "directiva `override' non válida" #~ msgid "no file name for `%sinclude'" #~ msgstr "non hai un home de ficheiro en `%sinclude'" #~ msgid "target `%s' leaves prerequisite pattern empty" #~ msgstr "o obxectivo `%s' deixa o patrón prerrequisito baleiro" #~ msgid "" #~ "\n" #~ "# No files." #~ msgstr "" #~ "\n" #~ "# Non hai ficheiros." #~ msgid "" #~ "\n" #~ "# %u files in %u hash buckets.\n" #~ msgstr "" #~ "\n" #~ "# %u ficheiros en %u baldes hash.\n" #~ msgid "# average %.3f files per bucket, max %u files in one bucket.\n" #~ msgstr "" #~ "# %.3f ficheiros de media por balde, máximo de %u ficheiros nun balde.\n" #~ msgid "DIRECTORY" #~ msgstr "DIRECTORIO" #~ msgid "Change to DIRECTORY before doing anything" #~ msgstr "Entrar no DIRECTORIO antes de facer nada" #~ msgid "FLAGS" #~ msgstr "MODIFICADORES" #~ msgid "Suspend process to allow a debugger to attach" #~ msgstr "Suspende-lo proceso para poder conectar un depurador" #~ msgid "Environment variables override makefiles" #~ msgstr "" #~ "As variables de ambiente teñen prioridade sobre os ficheiros de make" #~ msgid "FILE" #~ msgstr "FICHEIRO" #~ msgid "Read FILE as a makefile" #~ msgstr "Le-lo FICHEIRO coma un ficheiro de make" #~ msgid "Search DIRECTORY for included makefiles" #~ msgstr "Busca-los ficheiros de make incluidos no DIRECTORIO" #~ msgid "Don't start multiple jobs unless load is below N" #~ msgstr "Non comezar traballos múltiples se a carga non é inferior a N" #~ msgid "Don't actually run any commands; just print them" #~ msgstr "Non executar ningún comando; só amosalos" #~ msgid "Consider FILE to be very old and don't remake it" #~ msgstr "Considerar que o FICHEIRO é moi vello, e non o refacer" #~ msgid "Don't echo commands" #~ msgstr "Non amosa-los comandos" #~ msgid "Turns off -k" #~ msgstr "Desactiva -k" #~ msgid "Consider FILE to be infinitely new" #~ msgstr "Considerar que o FICHEIRO é infinitamente novo" #~ msgid "Entering" #~ msgstr "Entrando" #~ msgid "Leaving" #~ msgstr "Saindo" #~ msgid "# No variables." #~ msgstr "# Non hai variables." #~ msgid "# average of %.1f variables per bucket, max %u in one bucket.\n" #~ msgstr "# %.1f variables de media por balde, máximo de %u nun balde.\n" #~ msgid "# average of %d.%d variables per bucket, max %u in one bucket.\n" #~ msgstr "# %d.%d variables de media por balde, máximo de %u nun balde.\n" #~ msgid "the `word' function takes a positive index argument" #~ msgstr "a función `word' toma un argumento índice positivo" #~ msgid " not" #~ msgstr " non" #~ msgid " remote" #~ msgstr " remoto" #~ msgid " with arg %s" #~ msgstr " co argumento %s" #~ msgid "%s finished." #~ msgstr "%s rematou." #~ msgid "%s: unknown signal" #~ msgstr "%s: sinal descoñecido" #~ msgid "%sGNU Make version %s" #~ msgstr "%sGNU Make versión %s" #~ msgid "1-minute: %f " #~ msgstr "1 minuto: %f " #~ msgid "15-minute: %f " #~ msgstr "15 minutos: %f " #~ msgid "5-minute: %f " #~ msgstr "5 minutos: %f " #~ msgid "?? getopt returned character code 0%o ??\n" #~ msgstr "?? getopt devolveu o código do carácter 0%o ??\n" #~ msgid "Child" #~ msgstr "Fillo" #~ msgid "Dependency `%s' does not exist.\n" #~ msgstr "A dependencia `%s' non existe.\n" #~ msgid "Error %ld" #~ msgstr "Erro %ld" #~ msgid "Error getting load average" #~ msgstr "Erro ao obte-la carga media" #~ msgid "Error mallocing for FAB\n" #~ msgstr "Erro ao reservar memoria para FAB\n" #~ msgid "Error mallocing for NAM\n" #~ msgstr "Erro ao reservar memoria para NAM\n" #~ msgid "Error mallocing for direct\n" #~ msgstr "Erro ao reservar memoria para direct\n" #~ msgid "Error mallocing for searchspec\n" #~ msgstr "Erro ao reservar memoria para searchspec\n" #~ msgid "ExceptionAddress = %x\\r\n" #~ msgstr "ExceptionAddress = %x\\r\n" #~ msgid "ExceptionCode = %x\\r\n" #~ msgstr "ExceptionCode = %s\\r\n" #~ msgid "ExceptionFlags = %x\\r\n" #~ msgstr "ExceptionFlags = %x\\r\n" #~ msgid "Job exported to %s ID %u\n" #~ msgstr "Traballo exportado a %s ID %u\n" #~ msgid "MyExecute: Cannot allocate space for calling a command" #~ msgstr "MyExecute: Non se pode reservar espacio para chamar un comando" #~ msgid "Trying %s dependency `%s'.\n" #~ msgstr "Probando a dependencia %s `%s'.\n" #~ msgid "Unknown error 12345678901234567890" #~ msgstr "Erro 12345678901234567890 descoñecido" #~ msgid "Unknown%s job %d" #~ msgstr "Traballo%s %d descoñecido" #~ msgid "User" #~ msgstr "Usuario" #~ msgid "arg with white space or doublequotes: %s\n" #~ msgstr "argumento con espacios en branco ou comiñas dobres: %s\n" #~ msgid "digits occur in two different argv-elements.\n" #~ msgstr "aparecen díxitos en dous elementos de argv distintos.\n" #~ msgid "empty string arg: %s\n" #~ msgstr "argumento de cadea baleiro: %s\n" #~ msgid "environment override" #~ msgstr "supli-lo ambiente" #~ msgid "execve: " #~ msgstr "execve: " #~ msgid "execvp: " #~ msgstr "execvp: " #~ msgid "expand_function: unable to launch process (e=%d)\n" #~ msgstr "expand_function: non se puido lanza-lo proceso (e=%d)\n" #~ msgid "exporting: " #~ msgstr "exportando: " #~ msgid "exporting: %s" #~ msgstr "exportando: %s" #~ msgid "exporting: Couldn't create return socket." #~ msgstr "exportando: Non se puido crea-lo socket de retorno." #~ msgid "getcwd: " #~ msgstr "getcwd: " #~ msgid "getwd: %s" #~ msgstr "getwd: %s" #~ msgid "implicit" #~ msgstr "implícita" #~ msgid "intermediate" #~ msgstr "intermedia" #~ msgid "losing" #~ msgstr "que perde" #~ msgid "never" #~ msgstr "nunca" #~ msgid "newer" #~ msgstr "máis novo" #~ msgid "non-option ARGV-elements: " #~ msgstr "elementos ARGV que non son opcións: " #~ msgid "older" #~ msgstr "máis vello" #~ msgid "option %c\n" #~ msgstr "opción %c\n" #~ msgid "option %s" #~ msgstr "opción %s" #~ msgid "option a\n" #~ msgstr "opción a\n" #~ msgid "option b\n" #~ msgstr "opción b\n" #~ msgid "option c with value `%s'\n" #~ msgstr "opción c co valor `%s'\n" #~ msgid "option d with value `%s'\n" #~ msgstr "opción d co valor `%s'\n" #~ msgid "original arg: %s\n" #~ msgstr "argumento orixinal: %s\n" #~ msgid "override" #~ msgstr "suplir" #~ msgid "plain arg: %s\n" #~ msgstr "argumento simple: %s\n" #~ msgid "process_begin: CreateProcess(%s, %s, ...) failed.\n" #~ msgstr "process_begin: a chamada a CreateProcess(%s, %s, ...) fallou.\n" #~ msgid "process_easy: DuplicateHandle(Out) failed (e=%d)\n" #~ msgstr "process_easy: a chamada a DuplicateHandle(Out) fallou (e=%d)\n" #~ msgid "read" #~ msgstr "lectura" #~ msgid "rule" #~ msgstr "regra" #~ msgid "touch %s" #~ msgstr "tocar %s" #~ msgid "undefined" #~ msgstr "non definido" #~ msgid "unlink: " #~ msgstr "unlink: " #~ msgid "winning" #~ msgstr "que gaña" #~ msgid "write" #~ msgstr "escritura" make-4.3/po/ga.gmo0000644000175000017500000012474213611136532010742 00000000000000Þ•¡$ -,à"á"&þ"%#5#!>#-`#Ž#  #-Á#ï#'$#-$Q$ h$v$”$P­$;þ$":%]% y%tš%L&P\&9­&Mç&@5'ov'oæ'PV(l§(F)J[)€¦)9'*Ca*f¥*_ +;l+:¨+Oã+J3,}~,uü,~r->ñ-M0.C~.2Â.Fõ.IY= ˜=+¢=*Î=ù= >>1#>2U> ˆ>”>­>"Â>*å>?? /?P? l? x?‚?š? º? Ç?%Ô?ú?+@$F@k@ Š@”@®@Ç@+á@ A!*A LAYAsA |AŠA“A§AÆA$ÜA&B(B#HBlB"‡BªB,ÃBðB)C8C!QC&sCšCµCÕC ÜCéCòC%D,D@D SD]D3wD3«DßD ýDE=EDE5bE˜E0³E'äE3 F @F+LFxF-”F%ÂF-èF'G>GXG![G}G:›G ÖG*áG H")H LH6VH H-›H-ÉH1÷H1)I[IsI-‡IµIºIÌIâI"øI#J/?J=oJ7­JåJK-#K6QK1ˆK-ºK"èK' L3L"SL#vL šL¨L±L¹L$ÌL&ñLM3M;MLM`M&uM+œM6ÈM)ÿM.)N XN7cN*›NÆN#ÜN&O'OGObOzO!O ±O½OÓO!éO P+P;AP}P(ŒP µP1¿P9ñP3+Q3_Q“Q3¯Q ãQ ñQþQ-R?RGR!XRzR ŽRšR¯R$¿R(äR' S 5SVSmS8†S0¿S8ðS)T@TXTpT‡T6›T4ÒTHUPUnU)U;«U3çUV&$VKV[VvV9ˆVÂVÙV'ùV!W:W1=W0oW1 W-ÒW1X22XeX …X*’X0½XîXY Y$Y,AY0nY.ŸYÎY,ëY1Z*JZuZ6•Z5ÌZ,["/["R[3u[)©[6Ó[- \&8\_\}\Œ\0¦\×\=÷\15],g]H”]*Ý]"^/+^8[^7”^Ì^à^ ð^þ^!Ž`1°`â` ò`5ý`73aka,aB®aña8b-Gbub ’b ŸbÀbUÛbD1cvc%•c*»cŽæcUudSËdEe`eeFÆet fx‚fûf…‹gBhFTh˜›hA4iGvil¾ih+jE”jGÚjW"kTzkŽÏkz^l‹ÙlJeme°mKn=bnQ nHòn@;o |o-‡o"µo Øo äo òoýop+pFp$fp‹p Ÿp«p ÀpÊp,äp qFqfqqq0¯qàq#ûqr"(u gu?ˆu"Èu*ëuv!'v#Iv5mvH£vKìvA8wzwƒw+Šw&¶w#ÝwDx)Fx$px/•xÅx Ûxüx8y"Sy3vy8ªy9ãy%z4Czxz‘z­z,Éz8öz&/{+V{î‚{/q|H¡|ê|/}*3}-^}(Œ}µ}Ð}6â}~(~*E~0p~F¡~;è~!$WFBžKá -€47€)l€%–€ ¼€ Æ€:Ñ€< IWv8‘-Êø‚) ‚$J‚ o‚ }‚‰‚(¤‚ ͂ڂ,ò‚'ƒ<Gƒ'„ƒ ¬ƒ̓'Ôƒ&üƒ'#„7K„ƒ„'¢„ ʄ؄ø„… ……,8…e…1z…A¬….î…7†U†*l†—†=¶†ô†.‡@‡,X‡/…‡ µ‡"Ö‡ ù‡ ˆ ˆˆ04ˆeˆwˆ Šˆ$˜ˆ3½ˆ4ñˆ#&‰*J‰,u‰¢‰«‰6Ɖý‰,Š*IŠ;tŠ °Š8¾Š÷Š8‹8N‹K‡‹%Ó‹)ù‹#Œ6(Œ%_ŒO…ŒÕŒ=éŒ&'1N €<‹È7Û6ŽAJŽ0ŒŽ½ŽÑŽ,ìŽ2J%f&ŒR³cGj"²!Õ5÷D-‘@r‘>³‘0ò‘'#’$K’3p’/¤’Ô’å’î’ö’&“)-“ W“x“€“”“ª“5¿“:õ“H0”:y”8´”í”5õ”++•W•4l•3¡•2Õ•–'–G–$^–ƒ–˜–±–@Ê–> —J—B]— —9¸— ò—2˜K3˜J˜Jʘ+™KA™™™±™=Ï™ š š7?šwš ššš ­š%¹š)ßš( ›.2› a›‚›D ›6å›Aœ^œwœ‘œ«œ$Äœ%éœBgR'ºâ(ÿM(ž6vž­ž-¶žäž!øžŸB3ŸvŸ:‘Ÿ=ÌŸ   G" Fj G± 3ù 7-¡6e¡Fœ¡ã¡0ó¡;$¢`¢z¢“¢,¢¢>Ï¢>£=M£$‹£7°£Cè£1,¤ ^¤G¤GǤ<¥%L¥!r¥=”¥,Ò¥Tÿ¥+T¦'€¦.¨¦צë¦6§!>§A`§T¢§F÷§[>¨2š¨(ͨ1ö¨;(©9d©ž©¸©Ñ©†|–-Þa4Cåvi„Ù'`S’…J‚I±\ÍEXœonPÒ@TY')V 3®‹§…¬SÈ@“/ñƒ´lh Ték^t4 ×^0>†”ðG[ ÌO)êÎBc;ó[ :ˆ. þÏÜsŽŠD “fg8—º¿pr VŠ}9!îŸ;ˆšo›0M~¯¸ž‹‚Nh¾PLÛ’v /ƒöš=Ë­`ÓO‰Ÿœ–A¥ amçwj³ôÕ©•9»6ý{duEõz"« eÉIk1·s!$?+uä%"G÷¹‘.<&A_c$8â”CeÑWt{l,nZ˜¶ YúáŽ<Øè‰M &¨¦µ•žNòwJU2›Ä6ÂLæ¡~™,xßH¤½bqÊ¡Å#Á˜pÿd#Ö3ªQÐy°7üÇB¢UDÚ€ë1mi|?(øÆùÃݼí5ŒKjy_ûz}²2RRrfà£g:*ã+ÔZ‘‡>„(%XxÀ=q]7KQ]WŒ*€ bFF™ì\ï5‡—H- # %u 'vpath' search paths. # %u pattern-specific variable values # Directories # Files # Finished Make data base on %s # General ('VPATH' variable) search path: # # Implicit Rules # Make data base, printed on %s # No general ('VPATH' variable) search path. # No implicit rules. # No pattern-specific variable values. # Pattern-specific Variable Values # VPATH Search Paths # Variables # files hash-table stats: # %s No strcache buffers %s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu B %s strcache performance: lookups = %lu / hit rate = %lu%% Counted %d args in failed launch This program built for %s This program built for %s (%s) Unhandled exception filter called from program %s ExceptionCode = %lx ExceptionFlags = %lx ExceptionAddress = 0x%p --debug[=FLAGS] Print various types of debugging information. --no-print-directory Turn off -w, even if it was turned on implicitly. --trace Print tracing information. --warn-undefined-variables Warn when an undefined variable is referenced. -B, --always-make Unconditionally make all targets. -C DIRECTORY, --directory=DIRECTORY Change to DIRECTORY before doing anything. -I DIRECTORY, --include-dir=DIRECTORY Search DIRECTORY for included makefiles. -L, --check-symlink-times Use the latest mtime between symlinks and target. -O[TYPE], --output-sync[=TYPE] Synchronize output of parallel jobs by TYPE. -R, --no-builtin-variables Disable the built-in variable settings. -S, --no-keep-going, --stop Turns off -k. -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE Consider FILE to be infinitely new. -b, -m Ignored for compatibility. -d Print lots of debugging information. -e, --environment-overrides Environment variables override makefiles. -f FILE, --file=FILE, --makefile=FILE Read FILE as a makefile. -h, --help Print this message and exit. -i, --ignore-errors Ignore errors from recipes. -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no arg. -k, --keep-going Keep going when some targets can't be made. -l [N], --load-average[=N], --max-load[=N] Don't start multiple jobs unless load is below N. -n, --just-print, --dry-run, --recon Don't actually run any recipe; just print them. -o FILE, --old-file=FILE, --assume-old=FILE Consider FILE to be very old and don't remake it. -p, --print-data-base Print make's internal database. -q, --question Run no recipe; exit status says if up to date. -r, --no-builtin-rules Disable the built-in implicit rules. -s, --silent, --quiet Don't echo recipes. -t, --touch Touch targets instead of remaking them. -v, --version Print the version number of make and exit. -w, --print-directory Print the current directory. Date %s Ignoring VPATH name '%s'. uid = %d, gid = %d, mode = 0%o. (built-in): (core dumped) (don't care) (from '%s', line %lu) (from '%s', line %lu): (ignored) (name might be truncated) (no default goal) (no ~ expansion) (remote) (search path) files, impossibilities impossibilities in %lu directories. so far.# A default, MAKEFILES, or -include/sinclude makefile.# Also makes:# Builtin rule# Command line target.# Dependencies recipe running (THIS IS A BUG).# Failed to be updated.# File does not exist.# File has been updated.# File has not been updated.# File is an intermediate prerequisite.# File is very old.# Implicit rule search has been done.# Implicit rule search has not been done.# Implicit/static pattern stem: '%s' # Invalid value in 'command_state' member!# Last modified %s # Modification time never checked.# Needs to be updated (-q is set).# Phony target (prerequisite of .PHONY).# Precious file (prerequisite of .PRECIOUS).# Recipe currently running (THIS IS A BUG).# Successfully updated.# recipe to execute# %s (device %d, inode [%d,%d,%d]): # %s (device %d, inode [%d,%d,%d]): could not be opened. # %s (device %ld, inode %ld): # %s (device %ld, inode %ld): could not be opened. # %s (key %s, mtime %I64u): # %s (key %s, mtime %I64u): could not be opened. # %s: could not be stat'd. # No 'vpath' search paths.# Not a target:# hash-table stats: # # variable set hash-table stats: $SHELL changed (was '%s', now '%s') %s (line %d) Bad shell context (!unixy && !batch_mode_shell) %s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B %s other used: total = %lu B / count = %lu / avg = %lu B %s%s: %s%s: %s%s: Entering an unknown directory %s: Entering directory '%s' %s: Field '%s' not cached: %s%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p) %s: Leaving an unknown directory %s: Leaving directory '%s' %s: Timestamp out of range; substituting %s%s: failed to load%s: illegal option -- %c %s: invalid option -- %c %s: option '%c%s' doesn't allow an argument %s: option '%s' is ambiguous %s: option '%s' requires an argument %s: option '--%s' doesn't allow an argument %s: option '-W %s' doesn't allow an argument %s: option '-W %s' is ambiguous %s: option requires an argument -- %c %s: target '%s' does not exist%s: unrecognized option '%c%s' %s: unrecognized option '--%s' %s: update target '%s' due to: %s%s: user %lu (real %lu), group %lu (real %lu) %sBuilt for %s %sBuilt for %s (%s) %sLicense GPLv3+: GNU GPL version 3 or later %sThis is free software: you are free to change and redistribute it. %sThere is NO WARRANTY, to the extent permitted by law. %sNo rule to make target '%s'%s%sNo rule to make target '%s', needed by '%s'%s%s[%s: %s] Error %d%s%s[%u]: Entering an unknown directory %s[%u]: Entering directory '%s' %s[%u]: Leaving an unknown directory %s[%u]: Leaving directory '%s' '%s' is up to date.'override' directive*** Archive member '%s' may be bogus; not deleted*** Break. *** Deleting file '%s'*** Deleting intermediate file '%s'*** Waiting for unfinished jobs....*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp*** [%s] Archive member '%s' may be bogus; not deleted*** [%s] Deleting file '%s'*** mixed implicit and normal rules: deprecated syntax-O[TYPE] (--output-sync[=TYPE]) is not configured for this build.-warning, you may have to re-enable CTRL-Y handling from DCL. . Stop. .DEFAULT_GOAL contains more than one target.LIBPATTERNS element '%s' is not a pattern; using VPATH name '%s'AbortedAccess violation: read operation at address 0x%p Access violation: write operation at address 0x%p Alarm clockAppend %.*s and cleanup Append output to %s Avoiding implicit rule recursion. BUG: num_pattern_rules is wrong! %u != %uBUILTIN CD %s Bad system callBatch file contents: @echo off Batch file contents:%s %s Broken pipeBus errorCPU time limit exceededCannot create a temporary file Child accessChild exitedCircular %s <- %s dependency dropped.Cleaning up temp batch file %s Cleaning up temp batch file %s failed (%d) Cleaning up temporary batch file %s Considering target file '%s'. ContinuedCould not restore stderr Could not restore stdin Could not restore stdout Couldn't change back to original directory.CreatePipe() failed (e=%ld) Creating temporary batch file %s Current timeCustoms won't export: %s DCL: %s Danger signalEMT trapEmpty function nameEmpty symbol name for load: %sExecuting %s instead Failed to load symbol %s from %s: %sFailed to open global symbol table: %sFailed to remake makefile '%s'.Failed to remake target file '%s'. File '%s' does not exist. File '%s' was considered already. File size limit exceededFinished prerequisites of target file '%s'. Finished updating file '%s'. Floating point co-processor not availableFloating point exceptionFound an implicit rule for '%s'. Found prerequisite '%s' as VPATH '%s' Function name too long: %sGiving up on target file '%s'. HangupI/O possibleIOT trapIllegal InstructionIncluded makefile '%s' was not found.Information requestInitialized accessInterruptInvalid function name: %sInvalid maximum argument count (%u) for function %sInvalid minimum argument count (%u) for function %sJobserver client (fds %d,%d) Jobserver client (semaphore %s) Jobserver slots limited to %d KilledLive child %p (%s) PID %s %s Loaded object %s is not declared to be GPL compatibleLoading symbol %s from %s Looking for a rule with intermediate file '%s'. Looking for an implicit rule for '%s'. Looking for archive-member implicit rule for '%s'. Make accessMakefile '%s' might loop; not remaking it. Makefile '%s' was not foundMakefile from standard input specified twice.Making '%s' due to always-make flag. Malformed target-specific variable definitionMember '%s'%s: %ld bytes at %ld (%ld). Must remake target '%s'. NoNo implicit rule found for '%s'. No need to remake target '%s'No recipe for '%s' and no prerequisites actually changed. No targetsNo targets specified and no makefile foundNothing to be done for '%s'.Obtained token for child %p (%s). Options: Parallel jobs (-j) are not supported on this platform.Power failurePrerequisite '%s' is newer than target '%s'. Prerequisite '%s' is older than target '%s'. Prerequisite '%s' is order-only for target '%s'. Prerequisite '%s' of target '%s' does not exist. Profiling timer expiredPruning file '%s'. Putting child %p (%s) PID %s%s on the chain. QuitRe-executing[%u]:Reading makefile '%s'Reading makefiles... Reaping losing child %p PID %s %s Reaping winning child %p PID %s %s Recently tried and failed to update file '%s'. Recipe for '%s' will be ignored in favor of the one for '%s'.Recipe for file '%s' was found by implicit rule search,Recipe has too many lines (%ud)Recipe of '%s' is being run. Recipe was specified for file '%s' at %s:%lu,Recursive variable '%s' references itself (eventually)Rejecting impossible implicit prerequisite '%s'. Rejecting impossible rule prerequisite '%s'. Released token for child %p (%s). Removing child %p PID %s%s from chain. Removing intermediate files... Report bugs to Resetting to single job (-j1) mode.Resource lostSIGPHONESIGWINDSegmentation faultSkipping UTF-8 BOM in makefile '%s' Skipping UTF-8 BOM in makefile buffer Still updating file '%s'. StoppedStopped (signal)Stopped (tty input)Stopped (tty output)Successfully remade target file '%s'. Symbolic links not supported: disabling -L.Target '%s' is double-colon and has no prerequisites. Target '%s' not remade because of errors.Target file '%s' needs to be remade under -q. TerminatedThe 'load' operation is not supported on this platform.The prerequisites of '%s' are being made. Trace/breakpoint trapTrying implicit prerequisite '%s'. Trying pattern rule with stem '%.*s'. Trying rule prerequisite '%s'. Updating goal targets.... Updating makefiles.... Urgent I/O conditionUsage: %s [options] [target] ... User accessUser defined signal 1User defined signal 2Using default commands for '%s'. Using default recipe for '%s'. Virtual timer expiredWarning: File '%s' has modification time %s s in the futureWindow changedattempt to use unsupported feature: '%s'automaticbut '%s' is now considered the same file as '%s'.can't allocate %lu bytes for hash table: memory exhaustedcan't rename double-colon '%s' to single-colon '%s'can't rename single-colon '%s' to double-colon '%s'cannot enforce load limit: cannot enforce load limits on this operating systemclose: %s: %scommand linecreating jobs pipecreating jobserver semaphore: (Error %ld: %s)defaultduping jobs pipeempty string invalid as file nameempty variable nameenvironmentenvironment under -eextraneous '%s'extraneous text after '%s' directiveextraneous text after 'define' directiveextraneous text after 'endef' directivefile: invalid file operation: %sfile: missing filenamefile: too many argumentsfind_and_set_shell() path search set default_shell = %s find_and_set_shell() setting default_shell = %s first argument to 'word' function must be greater than 0fopen (temporary file)fwrite (temporary file)guile: Evaluating '%s' guile: Expanding '%s' init jobserver pipeinsufficient number of arguments (%d) to function '%s'internal error: invalid --jobserver-auth string '%s'internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)invalid syntax in conditionaljobserver pipelinelbr$ini_control() failed with status = %dlbr$set_module() failed to extract module info, status = %dmake reaped child pid %s, still waiting for pid %s makefilemissing 'endef', unterminated 'define'missing 'endif'missing rule before recipemissing separatormissing separator (did you mean TAB instead of 8 spaces?)missing target patternmixed implicit and normal rulesmixed implicit and static pattern rulesmultiple target patternsnono more file handles: could not duplicate stderr no more file handles: could not duplicate stdin no more file handles: could not duplicate stdout non-numeric first argument to 'word' functionnon-numeric first argument to 'wordlist' functionnon-numeric second argument to 'wordlist' functiononly one 'else' per conditionalopen: %s: %sprerequisites cannot be defined in recipesprocess_easy() failed to launch process (e=%ld) pselect jobs piperead jobs piperead: %s: %srecipe commences before first targetrelease jobserver semaphore: (Error %ld: %s)semaphore or child process wait: (Error %ld: %s)spawnvpe: environment space might be exhaustedsys$search() failed with %d target '%s' doesn't match the target patterntarget '%s' given more than once in the same ruletarget file '%s' has both : and :: entriestarget pattern contains no '%%'the '%s%s' option requires a non-empty string argumentthe '-%c' option requires a positive integer argumenttouch archive member is not available on VMStouch: '%s' is not a valid archivetouch: Archive '%s' does not existtouch: Bad return code from ar_member_touch on '%s'touch: Member '%s' does not exist in '%s'unable to open library '%s' to lookup member status %dunimplemented on this platform: function '%s'unknown debug level specification '%s'unknown output-sync type '%s'unknown signalunlink (temporary file): unterminated call to function '%s': missing '%c'unterminated variable referencewarning: Clock skew detected. Your build may be incomplete.warning: NUL character seen; rest of line ignoredwarning: ignoring old recipe for target '%s'warning: jobserver unavailable: using -j1. Add '+' to parent make rule.warning: overriding recipe for target '%s'warning: undefined variable '%.*s'windows32_openpipe(): process_init_fd() failed windows32_openpipe: DuplicateHandle(Err) failed (e=%ld) windows32_openpipe: DuplicateHandle(In) failed (e=%ld) write error: stdoutwrite jobserverwrite: %s: %sProject-Id-Version: make 4.2.1 Report-Msgid-Bugs-To: bug-make@gnu.org PO-Revision-Date: 2017-01-09 16:02-0500 Last-Translator: Kevin Patrick Scannell Language-Team: Irish Language: ga MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. # %u conair chuardaigh 'vpath'. # %u luach athróige atá sainiúil don phatrún # Comhadlanna # Comhaid # Críochnaíodh an bunachar sonraí Make seo ar %s # Conair ghinearálta chuardaigh (athróg 'VPATH'): # # Rialacha Intuigthe # Bunachar sonraí Make, priontáilte ar %s # Níl aon chonair ghinearálta chuardaigh (athróg 'VPATH') ann. # Níl aon riail intuigthe. # Níl aon luach athróige atá sainiúil don phatrún. # Luachanna Athróige sainiúil don phatrún # VPATH Conairí Cuardaigh # Athróga # comhaid hais-tábla stait: # %s Gan maoláin strcache %s maolán strcache: %lu (%lu) / teaghráin = %lu / stóras = %lu B / meán = %lu B %s feidhmíocht strcache: cuardaigh = %lu / ráta aimsithe = %lu%% %d argóint sa tosú teipthe Tógadh an clár seo le haghaidh %s Tógadh an clár seo le haghaidh %s (%s) Cuireadh glaoch ar scagaire eisceachta gan láimhseáil ón chlár %s CódEisceachta = %lx BratachaEisceachta = %lx SeoladhEisceachta = 0x%p --debug[=BRATACHA] Taispeáin eolas fabhtaithe de chineálacha éagsúla. --no-print-directory Múch -w, fiú má tá sé i bhfeidhm go hintuigthe. --trace Taispeáin faisnéis dífhabhtaithe. --warn-undefined-variables Tabhair rabhadh má dhéantar tagairt d'athróg gan sainmhíniú. -B, --always-make Déan gach sprioc, gan choinníollacha. -C COMHADLANN, --directory=COMHADLANN Téigh go COMHADLANN roimh dhéanamh aon rud. -I COMHADLANN, --include-dir=COMHADLANN Cuardaigh i gCOMHADLANN ar makefileanna breise. -L, --check-symlink-times Úsáid an t-am modhnaithe is déanaí, ar an nasc siombalach nó ar an sprioc. -O[CINEÃL], --output-sync[=CINEÃL] Sioncronaigh aschur ó jabanna comhthreomhara de réir CINEÃL. -R, --no-builtin-variables Díchumasaigh na hathróga insuite. -S, --no-keep-going, --stop Múch -k. -W COMHAD, --what-if=COMHAD, --new-file=COMHAD, --assume-new=COMHAD Caith le COMHAD mar cheann úrnua (go héigríoch). -b, -m Déan neamhshuim (comhoiriúnacht) -d Taispeáin go leor eolas dífhabhtaithe. -e, --environment-overrides Sáraíonn athróga timpeallachta makefileanna. -f COMHAD, --file=COMHAD, --makefile=COMHAD Léigh COMHAD mar makefile. -h, --help Taispeáin an chabhair seo agus scoir. -i, --ignore-errors Déan neamhshuim ar earráidí ó oidis. -j [N], --jobs[=N] Ceadaigh N jab le chéile; éigríoch mura gceaptar arg. -k, --keep-going Lean ar aghaidh fiú nach féidir sprioc a dhéanamh. -l [N], --load-average[=N], --max-load[=N] Ná tosaigh jabanna iomadúla mura bhfuil an lód níos lú ná N. -n, --just-print, --dry-run, --recon Ná rith aon oideas; taispeáin na orduithe amháin. -o COMHAD, --old-file=COMHAD, --assume-old=COMHAD Caith le COMHAD mar cheann cianaosta; ná hathdhéan é. -p, --print-data-base Taispeáin an bunachar sonraí inmheánach. -q, --question Ná rith aon oideas; stádas scortha = 0 má tá sé cothrom le dáta. -r, --no-builtin-rules Díchumasaigh na rialacha intuigthe insuite. -s, --silent, --quiet Ná déan macalla ar orduithe. -t, --touch Teagmhaigh spriocanna in ionad iad a athdhéanamh. -v, --version Taispeáin eolas faoin leagan agus scoir. -w, --print-directory Taispeáin an chomhadlann reatha. Dáta %s Ag déanamh neamhshuim ar ainm VPATH '%s'. uid = %d, gid = %d, mód = 0%o. (insuite): (córdhumpa) (is cuma) (ó '%s', líne %lu) (ó '%s', líne %lu): (rinneadh neamhshuim air) (seans go dteascfar an t-ainm) (gan ceann sprice réamhshocraithe) (ná leathnaigh ~) (i gcéin) (conair chuardaigh) comhad, rudaí neamhfhéideartha rudaí neamhfhéideartha i %lu comhadlann. go dtí seo.# Makefile réamhshocraithe, nó ó MAKEFILES, nó -include/sinclude.# Déanann sé freisin:# Riail insuite# Sprioc líne na n-orduithe.# Oideas spleáchais á rith (IS FABHT É SEO).# Theip ar an nuashonrú.# Níl a leithéid de chomhad ann.# Nuashonraíodh an comhad.# Níor nuashonraíodh an comhad.# Tá an comhad ina réamhriachtanas idirmheánach.# Tá an comhad an-aosta.# Rinneadh cuardach ar rialacha intuigthe.# Ní dhearnadh cuardach ar rialacha intuigthe.# Stoc patrúin intuigthe/statach: '%s' # Luach neamhbhailí sa bhall 'command_state'!# Athraithe %s # Níor seiceáladh an t-am mionathraithe riamh.# Tá gá le nuashonrú (-q sainithe).# Sprioc bhréige (réamhriachtanas de .PHONY).# Comhad luachmhar (réamhriachtanas de .PRECIOUS).# Oideas á rith faoi láthair (IS FABHT É SEO).# D'éirigh leis an nuashonrú.# oideas le rith# %s (gléas %d, i-nód [%d,%d,%d]): # %s (gléas %d, i-nód [%d,%d,%d]): níorbh fhéidir é a oscailt. # %s (gléas %ld, i-nód %ld): # %s (gléas %ld, i-nód %ld): níorbh fhéidir é a oscailt. # %s (eochair %s, mtime %I64u): # %s (eochair %s, mtime %I64u): níorbh fhéidir é a oscailt. # %s: níorbh fhéidir é a stat. # Níl aon chonair chuardaigh 'vpath' ann.# Ní sprioc é:# staitisticí an hais-tábla: # # athróg tacar hais-tábla stait: Athraíodh $SHELL (ba '%s' é, ach is '%s' é anois) %s (líne %d) Droch-chomhthéacs blaoisce (!unixy && !batch_mode_shell) %s eile saor: iomlán = %lu B / uas = %lu B / íos = %lu B / meán = %hu B %s eile úsáidte: iomlán = %lu B / líon = %lu / meán = %lu B %s%s: %s%s: %s%s: Ag dul isteach i gcomhadlann anaithnid %s: Ag dul isteach i gcomhadlann '%s' %s: Níl réimse '%s' i dtaisce: %s%s: Fuarthas idirbhriseadh/eisceacht (cód = 0x%lx, seoladh = 0x%p) %s: Ag dul amach as comhadlann anaithnid %s: Ag dul amach as comhadlann '%s' %s: Stampa ama as raon; %s á úsáid ina ionad%s: theip ar lódáil%s: rogha neamhcheadaithe -- %c %s: rogha neamhbhailí -- %c %s: ní cheadaítear argóint i ndiaidh na rogha '%c%s' %s: Tá an rogha '%s' débhríoch %s: tá argóint de dhíth i ndiaidh na rogha '%s' %s: ní cheadaítear argóint i ndiaidh na rogha '--%s' %s: ní cheadaítear argóint i ndiaidh na rogha '-W %s' %s: Tá an rogha '-W %s' débhríoch %s: tá argóint de dhíth i ndiaidh na rogha -- %c %s: níl sprioc '%s' ann%s: rogha anaithnid '%c%s' %s: rogha anaithnid '--%s' %s: nuashonrú sprioc '%s' mar gheall ar: %s%s: úsáideoir %lu (fíor %lu), grúpa %lu (fíor %lu) %sTógadh an clár seo le haghaidh %s %sTógadh an clár seo le haghaidh %s (%s) %sCeadúnas GPLv3+: GNU GPL leagan 3 nó níos déanaí %sIs saorbhogearra é seo: ceadaítear duit é a athrú agus a athdháileadh. %sNíl baránta AR BITH ann, an oiread atá ceadaithe de réir dlí. %sNíl aon riail chun sprioc '%s' a dhéanamh%s%sNíl aon riail chun sprioc '%s' a dhéanamh, rud a theastaíonn '%s'%s%s[%s: %s] Earráid %d%s%s[%u]: Ag dul isteach i gcomhadlann anaithnid %s[%u]: Ag dul isteach i gcomhadlann '%s' %s[%u]: Ag dul amach as comhadlann anaithnid %s[%u]: Ag dul amach as comhadlann '%s' Tá '%s' cothrom le dáta.treoir 'override'*** Seans gur ball bréige é '%s'; níor scriosadh é*** Briseadh. *** Comhad '%s' á scriosadh*** Comhad idirmheánach '%s' á scriosadh*** Ag fanacht le jabanna neamhchríochnaithe...*** Rabhadh: Stampa ama ardtaifidh ar comhad .LOW_RESOLUTION_TIME `%s'*** [%s] Seans gur ball bréige é '%s'; níor scriosadh é*** [%s] Comhad '%s' á scriosadh*** rialacha intuigthe agus gnáthrialacha measctha le chéile: comhréir dulta i léigníl -O[CINEÃL] (--output-sync[=CINEÃL]) ar fáil sa leagan seo.-rabhadh, is féidir gur gá duit ionramháil CTRL-Y a athchumasú ó DCL. . Stop. tá níos mó ná aon sprioc amháin i .DEFAULT_GOALNí patrún é eilimint .LIBPATTERNS '%s'; ag baint úsáid as ainm VPATH '%s'TobscorthaSárú cearta rochtana: oibríocht léimh ag seoladh 0x%p Sárú cearta rochtana: oibríocht scríofa ag seoladh 0x%p Clog aláraimIarcheangal %.*s agus glanadh Iarcheangail aschur le %s Athchúrsáil de bharr rialacha intuigthe á seachaint. FABHT: num_pattern_rules mícheart! %u != %uCD INSUITE %s Drochghlao ar an gcórasInneachar an bhaisc-chomhaid: @echo off Inneachar an bhaisc-chomhaid:%s %s Píopa bristeBusearráidTeorainn ama LAP sáraitheNí féidir comhad sealadach a chruthú Rochtain micScoir an mhacphróiseasTréigeadh an spleáchas ciorclach %s <- %s.Baisc-chomhad sealadach %s á ghlanadh Níorbh fhéidir baisc-chomhad sealadach %s a ghlanadh (%d) Baisc-chomhad sealadach %s á ghlanadh Comhad sprice '%s' á scrúdú. LeantaNíorbh fhéidir stderr a athchóiriú Níorbh fhéidir stdin a athchóiriú Níorbh fhéidir stdout a athchóiriú Níorbh fhéidir filleadh ar an gcomhadlann roimhe seo.Theip ar CreatePipe() (e=%ld) Baisc-chomhad sealadach %s á chruthú An t-am anoisNí easpórtálfar Customs: %s DCL: %s Comhartha guaiseGaiste EMTTá ainm na feidhme folamhTá ainm na siombaile le lódáil folamh: %s%s á rith ina áit Níorbh fhéidir siombail %s a lódáil ó %s: %sNíorbh fhéidir an tábla siombailí comhchoiteann a oscailt: %sNíorbh fhéidir makefile '%s' a athdhéanamh.Níorbh fhéidir an comhad sprice '%s' a athdhéanamh. Níl comhad '%s' ann. Rinneadh scrúdú ar chomhad '%s' cheana. Uasmhéid na gcomhad sáraitheCríochnaíodh na réamhriachtanais den chomhad sprice `%s'. Nuashonraíodh comhad '%s'. Níl comhphróiseálaí snámhphointe ar fáilEisceacht snámhphointeAimsíodh riail intuigthe le haghaidh '%s'. Aimsíodh réamhriachtanas '%s' mar VPATH '%s' Tá ainm na feidhme rófhada: %sComhad sprice '%s' á thréigean. Croch suasA/I indéantaGaiste IOTTreoir NeamhcheadaitheNíor aimsíodh makefile '%s' atá san áireamh.Iarratas ar eolasRochtain túsaitheIdirbhriseadhTá ainm na feidhme neamhbhailí: %sUasmhéid argóintí neamhbhailí (%u) d'fheidhm %sÃosmhéid argóintí neamhbhailí (%u) d'fheidhm %sCliant jabfhreastalaí (fds %d,%d) Cliant an jabfhreastalaí (séamafór %s) Sliotáin an jabfhreastalaí teoranta do %d MaraitheMac beo %p (%s) PID %s %s Níl an réad lódáilte %s comhoiriúnach leis an GPLSiombail %s á lódáil ó %s Ag lorg riail le comhad idirmheánach '%s'. Ag lorg riail intuigthe le haghaidh '%s'. Ag lorg riail intuigthe le haghaidh bhall cartlainne '%s'. Rochtain makeSeans go lúbfar an Makefile '%s'; ní athdhéanfar é. Níor aimsíodh makefile '%s'Sonraíodh Makefile ón ionchur caighdeánach faoi dhó.'%s' á dhéanamh mar gheall ar bhratach --always-make. Is míchumtha é an sainmhíniú athróige (le haghaidh aon sprioc amháin)Ball '%s'%s: %ld beart ag %ld (%ld). Caithfidh an sprioc '%s' a athdhéanamh. NílNíor aimsíodh aon riail intuigthe le haghaidh '%s'. Ní gá an sprioc '%s' a athdhéanamhNíl aon oideas ann le haghaidh '%s' agus níor athraigh aon réamhriachtanas. Níl aon sprioc annNíor sonraíodh aon sprioc agus níor aimsíodh aon makefileNíl faic le déanamh i gcomhair '%s'.Fuarthas ceadchomhartha le haghaidh mac %p (%s). Roghanna: Níl jabanna parailéalacha (-j) ar fáil ar an gcóras seo.Cliseadh cumhachtaTá réamhriachtanas '%s' níos nuaí ná sprioc '%s'. Tá réamhriachtanas '%s' níos sine ná sprioc '%s'. Is réamhriachtanas ord-amháin é '%s' le haghaidh sprice '%s'. Níl réamhriachtanas '%s' den sprioc '%s' ann. Am próifíle caiteComhad '%s' á bhearradh. Mac %p (%s) PID %s%s á chur ar an slabhra. Scoirà rith arís[%u]:Makefile '%s' á léamhMakefile-anna á léamh... Mac a chaill á bhaint: %p PID %s %s Mac a bhuaigh á bhaint: %p PID %s %s Rinneadh iarracht comhad '%s' a nuashonrú le déanaí, ach theip ar an iarracht. Déanfar neamhshuim ar an oideas le haghaidh '%s'; úsáidfear an ceann le haghaidh '%s' ina ionad.Aimsíodh oideas le haghaidh '%s' trí chuardach ar rialacha intuigthe,An iomarca línte san oideas (%ud)Oideas le haghaidh '%s' á rith. Sonraíodh oideas le haghaidh comhaid '%s' ag %s:%lu,Déanann an athróg athchúrsach '%s' tagairt di féin (ar deireadh)Réamhriachtanas intuigthe neamhfhéideartha '%s' á dhiúltú. Réamhriachtanas neamhfhéideartha rialach '%s' á dhiúltú. Saoradh ceadchomhartha le haghaidh mac %p (%s). Mac %p PID %s%s á bhaint ón slabhra. Comhaid idirmheánacha á mbaint... Seol tuairiscí fabhtanna chuig à athshocrú le haghaidh jabanna aonair (-j1).Acmhainn caillteSIGPHONESIGWINDFabht deighilteAg dul thar BOM UTF-8 i Makefile '%s' Ag dul thar BOM UTF-8 i maolán Makefile Comhad '%s' á nuashonrú fós. StopthaStoptha (comhartha)Stoptha (ionchur tty)Stoptha (aschur tty)D'éirigh linn an comhad sprice '%s' a athdhéanamh. ní thacaítear le naisc shiombalacha: -L á dhíchumasú.Is sprioc le dhá idirstad é '%s' agus níl aon réamhriachtanas aice. Ní dhearna an sprioc '%s' arís mar gheall ar earráidí.Ní mór comhad sprice '%s' a athdhéanamh le rogha -q. ScorthaNíl an oibríocht 'load' ar fáil ar an gcóras seo.Réamhriachtanais '%s' á ndéanamh anois. Rianaigh/brisphointeAg baint triail as réamhriachtanas intuigthe '%s'. Ag baint triail as riail phatrúin le stoc '%.*s'. Ag baint triail as réamhriachtanas rialach '%s'. Cinn sprice á nuashonrú.... Makefileanna á nuashonrú.... Staid phráinneach A/IÚsáid: %s [roghanna] [sprioc] ... Rochtain úsáideoraComhartha saincheaptha 1Comhartha saincheaptha 2Ag baint úsáid as orduithe réamhshocraithe le haghaidh '%s'. Ag baint úsáid as oideas réamhshocraithe le haghaidh '%s'. Am fíorúil caiteRabhadh: Tá am athraithe an chomhaid '%s' %s soicind sa todhchaíAthraíodh an fhuinneogrinneadh iarracht ar ghné gan tacaíocht a úsáid: '%s'uathoibríochach anois is ionann iad na comhaid '%s' agus '%s'.ní féidir %lu beart a dháileadh le haghaidh hais-tábla: cuimhne ídithení féidir idirstad dúbailte '%s' a athainmniú le hidirstad aonair '%s'ní féidir idirstad aonair '%s' a athainmnigh le hidirstad dúbailte '%s'ní féidir srian lóid a chur i bhfeidhm: ní féidir srianta lóid a chur i bhfeidhm ar an chóras oibriúcháin seodúnadh: %s: %slíne na n-orduithepíopa na jabanna á chruthúséamafór an jabfhreastalaí á chruthú: (Earráid %ld: %s)réamhshocraithepíopa na jabanna á chóipeáilní féidir teaghrán folamh a úsáid mar ainm comhaidainm folamh athróigetimpeallachttimpeallacht le -e'%s' breisetéacs breise i ndiaidh treorach '%s'téacs breise i ndiaidh treorach 'define'téacs breise i ndiaidh treorach 'endef'comhad: oibríocht neamhbhailí ar chomhad: %scomhad: ainm comhaid ar iarraidhcomhad: an iomarca argóintíshocraigh find_and_set_shell() conair chuardaigh default_shell = %s tá find_and_set_shell() ag socrú default_shell = %s caithfidh an chéad argóint le feidhm 'word' a bheith deimhneachfopen (comhad sealadach)fwrite (comhad sealadach)guile: '%s' á luacháil guile: '%s' á leathnú píopa an jabfhreastalaí á thúsúeaspa argóintí (%d) ar fheidhm '%s'earráid inmheánach: teaghrán neamhbhailí --jobserver-auth '%s'earráid inmheánach: níorbh fhéidir séamafór an jabfhreastalaí '%s' a oscailt: (Earráid %ld: %s)comhréir neamhbhailí i gcoinníollachpíblíne an jabfhreastalaítheip ar lbr$ini_control le stádas = %dníorbh fhéidir le lbr$set_module eolas faoin mhodúl a fháil, stádas = %dbhain make mac le PID %s, ag feitheamh le PID %s fós makefile'endef' ar iarraidh, 'define' gan chríochnú'endif' ar iarraidhriail ar iarraidh roimh an oideasdeighilteoir ar iarraidhdeighilteoir ar iarraidh (ar mhian leat TÃB in ionad ocht spás?)patrún sprice ar iarraidhrialacha intuigthe agus gnáthrialacha measctha le chéilerialacha intuigthe agus rialacha statacha measctha le chéileilphatrúin spricenílníl aon hanla comhaid le fáil: níorbh fhéidir stderr a chóipeáil níl aon hanla comhaid le fáil: níorbh fhéidir stdin a chóipeáil níl aon hanla comhaid le fáil: níorbh fhéidir stdout a chóipeáil neamhuimhriúil an chéad argóint le feidhm 'word'neamhuimhriúil an chéad argóint le feidhm 'wordlist'neamhuimhriúil an dara hargóint le feidhm 'wordlist'ní cheadaítear ach aon 'else' amháin le gach ráiteas coinníollachoscailt: %s: %sní féidir réamhriachtanais a shonrú in oidistheip ar process_easy(); níor tosaíodh próiseas (e=%ld) pselect píopa na jabannaléadh píopa na jabannaléamh: %s: %stosaíonn an t-oideas roimh an chéad spriocséamafór an jabfhreastalaí a fhuascailt: (Earráid %ld: %s)séamafóir nó feitheamh le macphróiseas: (Earráid %ld: %s)spawnvpe: seans nach bhfuil aon spás fágtha sa timpeallachtTheip ar sys$search() le stádas %d níl sprioc '%s' comhoiriúnach leis an bpatrún spricetá an sprioc '%s' ann níos mó ná uair amháin sa riail chéannatá iontrálacha : agus :: sa chomhad sprice '%s'níl aon '%%' sa phatrún spricecaithfidh tú teaghrán neamhfholamh a thabhairt mar argóint le '%s%s'caithfidh tú slánuimhir dheimhneach a thabhairt mar argóint le '-%c'ní féidir 'touch' a dhéanamh ar bhall de chartlann ar VMStouch: Níl '%s' ina cartlann bhailítouch: Níl an chartlann '%s' anntouch: Tháinig droch-chód ar ais ó ar_member_touch ar '%s'touch: Níl a leithéid de bhall '%s' i '%s'ní féidir leabharlann '%s' a oscailt chun cuardach a dhéanamh ar stádas baill %dníl feidhm '%s' ar fáil ar an chóras seoleibhéal dífhabhtaithe anaithnid '%s'cineál anaithnid '%s' le haghaidh output-synccomhartha anaithnidunlink (comhad sealadach): glao ar fheidhm '%s' gan chríochnú: '%c' ar iarraidhtagairt d'athróg gan chríochnúrabhadh: Clog ar sceabha. Seans nár chríochnaigh an tógáil.rabhadh: chonacthas carachtar NUL; ag déanamh neamhshuim ar an chuid eile den línerabhadh: ag déanamh neamhshuim ar sheanoideas le haghaidh sprioc '%s'rabhadh: níl an jabfhreastalaí ar fáil: ag úsáid -j1. Cuir '+' leis an máthair-riail.rabhadh: oideas le haghaidh sprioc '%s' á shárúrabhadh: athróg gan sainmhíniú '%.*s'windows32_openpipe(): theip ar process_init_fd() windows32_openpipe: theip ar DuplicateHandle(Earr) (e=%ld) windows32_openpipe: theip ar DuplicateHandle(In) (e=%ld) earráid scríofa: stdoutscríobh jabfhreastalaíscríobh: %s: %smake-4.3/po/vi.gmo0000644000175000017500000013443413611136532010770 00000000000000Þ•®Œ Aü$$+$&J$q$$!Š$-¬$Ú$ ì$- %;%'Q%#y%% ´%Â%à%Pù%;J&"†&©& Å&tæ&L['P¨'Dù'9>(Mx(@Æ(o)Gw)o¿)P/*l€*Fí*J4+€+9,C:,f~,_å,;E-:-O¼-J .}W.uÕ.~K/>Ê/M 0CW02›0FÎ0I1;_1 ›1¥1"Â1 å1ò1 22&2 ?2J2e2x2 Š2”2£2¬2%½2ã27ì2$333C3/[3‹3¤3¼3Ö3(ô34&24*Y4&„4+«4×4#ì4#5)45-^5,Œ5¹5Ò5$ç59 6F63e6™61¶6è677/7!F7$h7=7GË7G89[8•8ž8"¥8È8å8;9!?9a9+}9©9¼9Ö9,ð9:%;:,a:-Ž: ¼:&Ý:;#;C;!c;.…;´;Ä;ÍÙ;§</Ç<÷<& = 4=%U={=›=¯=1Ä= ö=>#>#=>La>6®>å>6?A8?>z? ¹?+Ã?*ï?@ 2@<@1D@2v@ ©@µ@Î@"ã@*A1A@A PAqA A ™A£A»A ÛA èA%õAB+;B$gBŒB¦B ÅBÏBéBC+CHC!eC ‡C”C®C ·CÅCÎCâCD$D&_0X_‰_=©_;ç_:#`1^`,`H½`4a*;a"fa/‰a8¹a7òa*b>b Nb9\b/–d2Æd-ùd'e 6e1Ce=ue³e(ÇeEðe6f6Vf*f%¸f Þf(éf$g\7gH”gEÝg2#h7VhÛŽhVjiQÁiOjCcjY§jEkwGkV¿kqlVˆl†ßl@fmF§mîm=ŒnFÊnkow}oHõo@>pnpOîp‡>quÆq•2E•)x•^¢•–;–#O–0s– ¤–F²–ù–G—A]—]Ÿ—Pý—XN˜§˜5ǘý˜™™<™+V™3‚™8¶™eï™SUš)©š*ÓšHþšMG›•›G¥›Gí›=5œ0sœ"¤œ~Çœ9F€˜¡©1½Dï4ž-Sž žŽž©žÈž4åž.ŸRIŸ5œŸSÒŸ& ?8 9x ² 4Í 0¡73¡)k¡•¡¯¡0Ï¡¢!¢!<¢)^¢/ˆ¢-¸¢Væ¢=£:Y£ ”£T¡£Cö£S:¤Sޤ(â¤D ¥P¥ _¥l¥2‹¥ ¾¥$Ì¥4ñ¥&¦9¦H¦`¦;v¦?²¦>ò¦41§f§ƒ§Ož§5î§@$¨e¨}¨;–¨#Ò¨#ö¨,©4G©K|©hÈ©>1ª#pª”ª5´ªUêªC@«„«A«Ï«'﫬c1¬•¬%ª¬-Ьþ¬­c­_~­]Þ­F<®Cƒ®@Ç®G¯ P¯I]¯<§¯8䯰 =°6J°4°8¶°;ï°"+±7N±B†±<ɱ#²G*²Br²1µ²0ç²&³D?³>„³KóJ´3Z´)Ž´¸´+É´Lõ´&Bµ`iµ[ʵ[&¶H‚¶:˶c·8j·2£·<Ö·4¸=H¸<†¸"ø)æ¸ ¹’’ž­u› ÙfŠœ´hcÓ='6݉#‰€“þEAf—)«$­¡É ~‘à k©µŒ9|jè2e-S„&vs•Ü`N¡H !š¨' ¦1uD§ô{}&.Y« Ïÿê?V¶50 mO¾v…JõK‡سöºxWQ ]tr–9 {C4ƒB±ÂMT†,\Z0š˰q:¨ó œU71ÌrHÛl™<:øò¿3B¢|/æjcP¸¯g5²Š—ç(+Áb-[+@†}~ŽzÊ™bFYä>n›"*]€,˜íÑlðQ =£‹Ldaã`8Ð÷åZÍ”#©@%ÎgnMÃsª_ÕD\S®ùTR„^7‚Ò ‹ _kEKž¬Vh6$¤/dwŸŸXúƒN4R¢^xtëLª®Ö»‘q*Åâ>W[ì§¹‡Ô·˜ÇF;!3PJe•y‚ÆoG¥ ;¥¼£I”ŽpˆéĈ"ß×GÚŒ“zÀo)ÞmUXa8¤Aý¬ip2(ïO–IiȦ…y½.ñîü%áCûw<? # %u 'vpath' search paths. # %u implicit rules, %u (%.1f%%) terminal. # %u pattern-specific variable values # Directories # Files # Finished Make data base on %s # General ('VPATH' variable) search path: # # Implicit Rules # Make data base, printed on %s # No general ('VPATH' variable) search path. # No implicit rules. # No pattern-specific variable values. # Pattern-specific Variable Values # VPATH Search Paths # Variables # files hash-table stats: # %s No strcache buffers %s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu B %s strcache performance: lookups = %lu / hit rate = %lu%% Counted %d args in failed launch This program built for %s This program built for %s (%s) Unhandled exception filter called from program %s ExceptionCode = %lx ExceptionFlags = %lx ExceptionAddress = 0x%p --debug[=FLAGS] Print various types of debugging information. --no-print-directory Turn off -w, even if it was turned on implicitly. --no-silent Echo recipes (disable --silent mode). --trace Print tracing information. --warn-undefined-variables Warn when an undefined variable is referenced. -B, --always-make Unconditionally make all targets. -C DIRECTORY, --directory=DIRECTORY Change to DIRECTORY before doing anything. -E STRING, --eval=STRING Evaluate STRING as a makefile statement. -I DIRECTORY, --include-dir=DIRECTORY Search DIRECTORY for included makefiles. -L, --check-symlink-times Use the latest mtime between symlinks and target. -O[TYPE], --output-sync[=TYPE] Synchronize output of parallel jobs by TYPE. -R, --no-builtin-variables Disable the built-in variable settings. -S, --no-keep-going, --stop Turns off -k. -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE Consider FILE to be infinitely new. -b, -m Ignored for compatibility. -d Print lots of debugging information. -e, --environment-overrides Environment variables override makefiles. -f FILE, --file=FILE, --makefile=FILE Read FILE as a makefile. -h, --help Print this message and exit. -i, --ignore-errors Ignore errors from recipes. -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no arg. -k, --keep-going Keep going when some targets can't be made. -l [N], --load-average[=N], --max-load[=N] Don't start multiple jobs unless load is below N. -n, --just-print, --dry-run, --recon Don't actually run any recipe; just print them. -o FILE, --old-file=FILE, --assume-old=FILE Consider FILE to be very old and don't remake it. -p, --print-data-base Print make's internal database. -q, --question Run no recipe; exit status says if up to date. -r, --no-builtin-rules Disable the built-in implicit rules. -s, --silent, --quiet Don't echo recipes. -t, --touch Touch targets instead of remaking them. -v, --version Print the version number of make and exit. -w, --print-directory Print the current directory. Date %s Ignoring VPATH name '%s'. uid = %d, gid = %d, mode = 0%o. (built-in): (core dumped) (don't care) (from '%s', line %lu) (from '%s', line %lu): (ignored) (name might be truncated) (no default goal) (no ~ expansion) (remote) (search path) files, impossibilities impossibilities in %lu directories. so far.# A default, MAKEFILES, or -include/sinclude makefile.# Also makes:# Builtin rule# Command line target.# Dependencies recipe running (THIS IS A BUG).# Failed to be updated.# File does not exist.# File has been updated.# File has not been updated.# File is an intermediate prerequisite.# File is very old.# Implicit rule search has been done.# Implicit rule search has not been done.# Implicit/static pattern stem: '%s' # Invalid value in 'command_state' member!# Last modified %s # Modification time never checked.# Needs to be updated (-q is set).# Phony target (prerequisite of .PHONY).# Precious file (prerequisite of .PRECIOUS).# Recipe currently running (THIS IS A BUG).# Successfully updated.# recipe to execute# %s (device %d, inode [%d,%d,%d]): # %s (device %d, inode [%d,%d,%d]): could not be opened. # %s (device %ld, inode %ld): # %s (device %ld, inode %ld): could not be opened. # %s (key %s, mtime %I64u): # %s (key %s, mtime %I64u): could not be opened. # %s: could not be stat'd. # No 'vpath' search paths.# Not a target:# hash-table stats: # # variable set hash-table stats: $SHELL changed (was '%s', now '%s') %s (line %d) Bad shell context (!unixy && !batch_mode_shell) %s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B %s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B %s other used: total = %lu B / count = %lu / avg = %lu B %s%s: %s%s: %s%s: Entering an unknown directory %s: Entering directory '%s' %s: Field '%s' not cached: %s%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p) %s: Leaving an unknown directory %s: Leaving directory '%s' %s: Timestamp out of range; substituting %s%s: failed to load%s: illegal option -- %c %s: invalid option -- %c %s: option '%c%s' doesn't allow an argument %s: option '%s' is ambiguous %s: option '%s' requires an argument %s: option '--%s' doesn't allow an argument %s: option '-W %s' doesn't allow an argument %s: option '-W %s' is ambiguous %s: option requires an argument -- %c %s: target '%s' does not exist%s: unrecognized option '%c%s' %s: unrecognized option '--%s' %s: update target '%s' due to: %s%s: user %lu (real %lu), group %lu (real %lu) %sBuilt for %s %sBuilt for %s (%s) %sLicense GPLv3+: GNU GPL version 3 or later %sThis is free software: you are free to change and redistribute it. %sThere is NO WARRANTY, to the extent permitted by law. %sNo rule to make target '%s'%s%sNo rule to make target '%s', needed by '%s'%s%s[%s: %s] Error %d%s%s[%u]: Entering an unknown directory %s[%u]: Entering directory '%s' %s[%u]: Leaving an unknown directory %s[%u]: Leaving directory '%s' '%s' is up to date.'override' directive*** Archive member '%s' may be bogus; not deleted*** Break. *** Deleting file '%s'*** Deleting intermediate file '%s'*** Waiting for unfinished jobs....*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp*** [%s] Archive member '%s' may be bogus; not deleted*** [%s] Deleting file '%s'*** mixed implicit and normal rules: deprecated syntax-O[TYPE] (--output-sync[=TYPE]) is not configured for this build.-warning, you may have to re-enable CTRL-Y handling from DCL. . Stop. .DEFAULT_GOAL contains more than one target.LIBPATTERNS element '%s' is not a pattern; using VPATH name '%s'AbortedAccess violation: read operation at address 0x%p Access violation: write operation at address 0x%p Alarm clockAppend %.*s and cleanup Append output to %s Avoiding implicit rule recursion. BUG: num_pattern_rules is wrong! %u != %uBUILTIN CD %s Bad system callBatch file contents: @echo off Batch file contents:%s %s Broken pipeBus errorCPU time limit exceededCannot create a temporary file Child accessChild exitedCircular %s <- %s dependency dropped.Cleaning up temp batch file %s Cleaning up temp batch file %s failed (%d) Cleaning up temporary batch file %s Collisions=%lu/%lu=%.0f%%Considering target file '%s'. ContinuedCould not restore stderr Could not restore stdin Could not restore stdout Couldn't change back to original directory.CreatePipe() failed (e=%ld) Creating temporary batch file %s Current timeCustoms won't export: %s DCL: %s Danger signalEMT trapEmpty function nameEmpty symbol name for load: %sExecuting %s instead Failed to load symbol %s from %s: %sFailed to open global symbol table: %sFailed to remake makefile '%s'.Failed to remake target file '%s'. File '%s' does not exist. File '%s' was considered already. File size limit exceededFinished prerequisites of target file '%s'. Finished updating file '%s'. Floating point co-processor not availableFloating point exceptionFound an implicit rule for '%s'. Found prerequisite '%s' as VPATH '%s' Function name too long: %sGiving up on target file '%s'. HangupI/O possibleIOT trapIllegal InstructionIncluded makefile '%s' was not found.Information requestInitialized accessInterruptInvalid function name: %sInvalid maximum argument count (%u) for function %sInvalid minimum argument count (%u) for function %sJobserver client (fds %d,%d) Jobserver client (semaphore %s) Jobserver slots limited to %d KilledLive child %p (%s) PID %s %s Load=%lu/%lu=%.0f%%, Loaded object %s is not declared to be GPL compatibleLoading symbol %s from %s Looking for a rule with intermediate file '%s'. Looking for an implicit rule for '%s'. Looking for archive-member implicit rule for '%s'. Make accessMakefile '%s' might loop; not remaking it. Makefile '%s' was not foundMakefile from standard input specified twice.Making '%s' due to always-make flag. Malformed target-specific variable definitionMember '%s'%s: %ld bytes at %ld (%ld). Must remake target '%s'. NoNo implicit rule found for '%s'. No need to remake target '%s'No recipe for '%s' and no prerequisites actually changed. No targetsNo targets specified and no makefile foundNothing to be done for '%s'.Obtained token for child %p (%s). Options: Parallel jobs (-j) are not supported on this platform.Power failurePrerequisite '%s' is newer than target '%s'. Prerequisite '%s' is older than target '%s'. Prerequisite '%s' is order-only for target '%s'. Prerequisite '%s' of target '%s' does not exist. Profiling timer expiredPruning file '%s'. Putting child %p (%s) PID %s%s on the chain. QuitRe-executing[%u]:Reading makefile '%s'Reading makefiles... Reaping losing child %p PID %s %s Reaping winning child %p PID %s %s Recently tried and failed to update file '%s'. Recipe for '%s' will be ignored in favor of the one for '%s'.Recipe for file '%s' was found by implicit rule search,Recipe has too many lines (%ud)Recipe of '%s' is being run. Recipe was specified for file '%s' at %s:%lu,Recursive variable '%s' references itself (eventually)Rehash=%u, Rejecting impossible implicit prerequisite '%s'. Rejecting impossible rule prerequisite '%s'. Released token for child %p (%s). Removing child %p PID %s%s from chain. Removing intermediate files... Report bugs to Resetting to single job (-j1) mode.Resource lostSIGPHONESIGWINDSegmentation faultSkipping UTF-8 BOM in makefile '%s' Skipping UTF-8 BOM in makefile buffer Stem too long: '%s%.*s'. Still updating file '%s'. StoppedStopped (signal)Stopped (tty input)Stopped (tty output)Successfully remade target file '%s'. Symbolic links not supported: disabling -L.Target '%s' is double-colon and has no prerequisites. Target '%s' not remade because of errors.Target file '%s' needs to be remade under -q. TerminatedThe 'load' operation is not supported on this platform.The prerequisites of '%s' are being made. Trace/breakpoint trapTrying implicit prerequisite '%s'. Trying pattern rule with stem '%.*s'. Trying rule prerequisite '%s'. Updating goal targets.... Updating makefiles.... Urgent I/O conditionUsage: %s [options] [target] ... User accessUser defined signal 1User defined signal 2Using default commands for '%s'. Using default recipe for '%s'. Virtual timer expiredWarning: File '%s' has modification time %s s in the futureWindow changedattempt to use unsupported feature: '%s'automaticbut '%s' is now considered the same file as '%s'.can't allocate %lu bytes for hash table: memory exhaustedcan't rename double-colon '%s' to single-colon '%s'can't rename single-colon '%s' to double-colon '%s'cannot enforce load limit: cannot enforce load limits on this operating systemclose: %s: %scommand linecreating jobs pipecreating jobserver semaphore: (Error %ld: %s)defaultduping jobs pipeempty string invalid as file nameempty variable nameenvironmentenvironment under -eextraneous '%s'extraneous text after '%s' directiveextraneous text after 'define' directiveextraneous text after 'endef' directivefile: invalid file operation: %sfile: missing filenamefile: too many argumentsfind_and_set_shell() path search set default_shell = %s find_and_set_shell() setting default_shell = %s first argument to 'word' function must be greater than 0fopen (temporary file)fwrite (temporary file)grouped targets must provide a recipeguile: Evaluating '%s' guile: Expanding '%s' init jobserver pipeinsufficient number of arguments (%d) to function '%s'internal error: invalid --jobserver-auth string '%s'internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)invalid syntax in conditionaljob server shut downjobserver pipelinelbr$ini_control() failed with status = %dlbr$set_module() failed to extract module info, status = %dmake reaped child pid %s, still waiting for pid %s makefilemissing 'endef', unterminated 'define'missing 'endif'missing rule before recipemissing separatormissing separator (did you mean TAB instead of 8 spaces?)missing target patternmixed implicit and normal rulesmixed implicit and static pattern rulesmultiple target patternsnono more file handles: could not duplicate stderr no more file handles: could not duplicate stdin no more file handles: could not duplicate stdout non-numeric first argument to 'word' functionnon-numeric first argument to 'wordlist' functionnon-numeric second argument to 'wordlist' functiononly one 'else' per conditionalopen: %s: %sprerequisites cannot be defined in recipesprocess_easy() failed to launch process (e=%ld) pselect jobs piperead jobs piperead: %s: %srecipe commences before first targetrelease jobserver semaphore: (Error %ld: %s)semaphore or child process wait: (Error %ld: %s)spawnvpe: environment space might be exhaustedsys$search() failed with %d target '%s' doesn't match the target patterntarget '%s' given more than once in the same ruletarget file '%s' has both : and :: entriestarget pattern contains no '%%'the '%s%s' option requires a non-empty string argumentthe '-%c' option requires a positive integer argumenttouch archive member is not available on VMStouch: '%s' is not a valid archivetouch: Archive '%s' does not existtouch: Bad return code from ar_member_touch on '%s'touch: Member '%s' does not exist in '%s'unable to open library '%s' to lookup member status %dunimplemented on this platform: function '%s'unknown debug level specification '%s'unknown output-sync type '%s'unknown signalunlink (temporary file): unterminated call to function '%s': missing '%c'unterminated variable referencewarning: Clock skew detected. Your build may be incomplete.warning: -j%d forced in makefile: resetting jobserver mode.warning: -j%d forced in submake: resetting jobserver mode.warning: NUL character seen; rest of line ignoredwarning: ignoring old recipe for target '%s'warning: jobserver unavailable: using -j1. Add '+' to parent make rule.warning: overriding group membership for target '%s'warning: overriding recipe for target '%s'warning: undefined variable '%.*s'windows32_openpipe(): process_init_fd() failed windows32_openpipe: DuplicateHandle(Err) failed (e=%ld) windows32_openpipe: DuplicateHandle(In) failed (e=%ld) write error: stdoutwrite jobserverwrite: %s: %sProject-Id-Version: make 4.2.93 Report-Msgid-Bugs-To: bug-make@gnu.org PO-Revision-Date: 2020-01-04 15:04+0700 Last-Translator: Trần Ngá»c Quân Language-Team: Vietnamese Language: vi MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. Plural-Forms: nplurals=1; plural=0; X-Language-Team-Website: X-Generator: Poedit 2.2.4 X-Poedit-SourceCharset: UTF-8 # %u đưá»ng dẫn tìm kiếm “vpathâ€. # %u quy tắc ngầm, %u (%.1f%%) đầu cuối. # %u giá trị biến đặc tả cho mẫu # Thư mục # Tập tin # Hoàn tất cÆ¡ sở dữ liệu Make lúc %s # ÄÆ°á»ng dẫn tìm kiếm chung (biến “VPATHâ€): # # Quy tắc ngầm # CÆ¡ sở dữ liệu Make, in lúc %s # Không có đưá»ng dẫn tìm kiếm chung (biến “VPATHâ€). # Không có quy tắc ngầm. # Không có giá trị biến đặc tả cho mẫu. # Giá trị biến đặc tả cho mẫu # ÄÆ°á»ng dẫn tìm kiếm VPATH # Biến # thống kê bảng băm tập tin: # %s Không có bá»™ đệm strcache %s bá»™ đệm strcache: %lu (%lu) / chuá»—i = %lu / lưu = %lu B / t.bình = %lu B %s hiệu năng strcache: tra cứu = %lu / tá»· lệ trúng = %lu%% Äếm được %d đối số trong lần khởi chạy bị lá»—i Chương trình này đã được dịch cho %s Chương trình này đã được dịch cho %s (%s) Bá»™ lá»c ngoại lệ không quản lý được gá»i từ chương trình %s ExceptionCode (mã ngoại lệ) = %lx ExceptionFlags (các cá» ngoại lệ) = %lx ExceptionAddress (địa chỉ ngoại lệ) = 0x%p --debug[=CỜ…] In nhiá»u loại thông tin gỡ rối khác nhau. --no-print-directory Tắt -w, thậm chí nếu được bật ngầm. --no-silent In ra công thức (tắt chế độ --silent). --trace Hiển thị thông tin dấu vết. --warn-undefined-variables Cảnh báo tham chiếu đến biến chưa xác định. -B, --always-make Tạo má»i đích vô Ä‘iá»u kiện. -C THƯ_MỤC, --directory=THƯ_MỤC Chuyển sang THƯ MỤC này trước khi làm. -E STRING, --eval=CHUá»–I Äịnh lượng CHUá»–I như má»™t lệnh makefile. -I THƯ_MỤC, --include-dir=THƯ_MỤC Quét THƯ-MỤC này tìm makefile con. -L, --check-symlink-times Dùng mtime má»›i nhất giữa liên kết và đích. -O[KIỂU], --output-sync[=KIỂU] Äồng bá»™ hóa kết xuất công việc song song theo KIỂU. -R, --no-builtin-variables Tắt đặt biến dá»±ng sẵn. -S, --no-keep-going, --stop Tắt -k. -W TẬP-TIN, --what-if=TẬP-TIN, --new-file=TẬP-TIN, --assume-new=TẬP-TIN Giả định TẬP-TIN là má»›i vô hạn. -b, -m Bá» qua để tương thích. -d In rất nhiá»u thông tin gỡ rối. -e, --environment-overrides Biến môi trưá»ng đè tập tin makefile. -f TẬP-TIN, --file=TẬP-TIN, --makefile=TẬP-TIN Äá»c TẬP-TIN dạng makefile. -h, --help Hiển thị trợ giúp này và thoát. -i, --ignore-errors Bá» qua lá»—i từ công thức. -j [N], --jobs[=N] Cho phép N công việc đồng thá»i; không có đối số thì vô hạn. -k, --keep-going Cứ tiếp tục khi không thể tạo đích. -l [Sá»], --load-average[=N], --max-load[=N] Chỉ chạy nhiá»u công việc nếu tải dưới N. -n, --just-print, --dry-run, --recon Không chạy công thức; chỉ in chúng ra. -o TẬP-TIN, --old-file=TẬP-TIN, --assume-old=TẬP-TIN Coi TẬP-TIN là rất cÅ© và không tạo lại. -p, --print-data-base In cÆ¡ sở dữ liệu ná»™i bá»™ cá»§a make. -q, --question Không chạy; mã thoát là "đã cập nhật". -r, --no-builtin-rules Tắt quy tắc ngầm dá»±ng sẵn. -s, --silent, --quiet Không in lại công thức. -t, --touch Chạm đích thay vì tạo lại. -v, --version Hiển thị phiên bản make rồi thoát. -w, --print-directory Hiển thị thư mục hiện thá»i. Ngày %s Bá» qua tên VPATH “%sâ€. uid = %d, gid = %d, chế độ = 0%o. (dá»±ng-sẵn): (đổ lõi) (không quan tâm) (từ “%sâ€, dòng %lu) (từ “%sâ€, dòng %lu): (bá» qua) (có lẽ tên đã bị cắt ngắn) (không có mục đích mặc định) (không nối thêm ~) (máy chá»§) (đưá»ng dẫn tìm kiếm) tập tin, việc không thể làm được việc không thể làm được trong %lu thư mục. cho đến giá».# Mặc định, MAKEFILES, hoặc makefile kiểu -include/sinclude.# CÅ©ng tạo:# Quy tắc dá»±ng sẵn# Äích dòng lệnh.# Công thức phụ thuá»™c Ä‘ang chạy (ÄÂY LÀ MỘT Lá»–I).# Gặp lá»—i khi cập nhật.# Tập tin không tồn tại.# Tập tin đã được cập nhật.# Tập tin chưa được cập nhật.# Tập tin là má»™t Ä‘iá»u kiện tiên quyết trung gian.# Tập tin rất cÅ©.# Hoàn tất tìm quy tắc ngầm.# Chưa hoàn tất tìm quy tắc ngầm.# Cuống mẫu ngầm/tÄ©nh: “%s†# Gặp giá trị sai trong thành viên “command_stateâ€!# Lần sá»­a cuối cùng %s # Chưa kiểm tra giá» sá»­a đổi.# Cần được cập nhật (-q được đặt).# Äích giả (Ä‘iá»u kiện tiên quyết cá»§a .PHONY).# Tập tin giá trị (Ä‘iá»u kiện tiên quyết cá»§a .PRECIOUS).# Công thức Ä‘ang chạy (ÄÂY LÀ MỘT Lá»–I).# Cập nhật thành công.# công thức cần thá»±c hiện# %s (thiết bị %d, inode [%d,%d,%d]): # %s (thiết bị %d, nút thông tin [%d,%d,%d]): không thể mở. # %s (thiết bị %ld, inode %ld): # %s (thiết bị %ld, nút thông tin %ld): không thể mở. # %s (khóa %s, mtime %I64u): # %s (khóa %s, mtime %I64u): không thể mở. # %s: không thể lấy thống kê. # Không có đưá»ng dẫn tìm kiếm “vpathâ€.# Không phải là đích:# thống kê bảng băm tập tin: # # thống kê bảng băm biến được đặt: $SHELL thay đổi (trước là “%sâ€, giá» là “%sâ€) %s (dòng %d) Ngữ cảnh shell sai (!unixy && !batch_mode_shell) %s đệm hiện tại: kcỡ = %hu B / đã dùng = %hu B / slượng = %hu / tbình = %u B %s trống khác: tổng = %lu B / tÄ‘a = %lu B / t.thiểu = %lu B / t.bình = %hu B %s được dùng khác: tổng = %lu B / s.lượng = %lu / t.bình = %lu B %s%s: %s%s: %s%s: Vào thư mục lạ %s: Vào thư mục “%s†%s: Trưá»ng “%s†chưa được nhá»› đệm: %s%s: Bắt được ngắt/ngoại lệ (mã = 0x%lx, địa chỉ = 0x%p) %s: Rá»i khá»i thư mục lạ %s: Rá»i thư mục “%s†%s: Thá»i gian cá»§a tập tin ở ngoài phạm vi nên thay thế bằng %s%s: gặp lá»—i khi tải%s: tùy chá»n không hợp lệ -- %c %s: tùy chá»n không hợp lệ -- %c %s: tùy chá»n “%c%s†không nhận đối số %s: tùy chá»n “%s†chưa rõ ràng %s: tùy chá»n “%s†cần má»™t đối số %s: tùy chá»n “--%s†không nhận đối số %s: tùy chá»n “-W %s†không nhận má»™t đối số %s: tùy chá»n “-W %s†chưa rõ ràng %s: tùy chá»n cần má»™t đối số -- %c %s: đích “%s†không tồn tại%s: không nhận ra tùy chá»n “%c%s†%s: không nhận ra tùy chá»n “--%s†%s: cập nhật đích “%sâ€, cần bởi: %s%s: ngưá»i dùng %lu (thật %lu), nhóm %lu (thật %lu) %sÄÆ°á»£c biên dịch cho %s %sÄÆ°á»£c biên dịch cho %s (%s) %sGiấy phép GPL pb3+: Giấy phép Công cá»™ng GNU phiên bản 3 hay sau %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ó. %sKHÔNG CÓ BẢO HÀNH GÃŒ CẢ, vá»›i Ä‘iá»u kiện được pháp luật cho phép. %sKhông có quy tắc để tạo đích “%sâ€%s%sKhông có quy tắc để tạo đích “%sâ€, cần bởi “%sâ€%s%s[%s: %s] Lá»—i %d%s%s[%u]: Vào thư mục chưa biết %s[%u]: Vào thư mục “%s†%s[%u]: Rá»i khá»i thư mục lạ %s[%u]: Rá»i khá»i thư mục “%s†“%s†đã cập nhật rồi.chỉ thị “overrideâ€*** Thành viên kho “%s†có thể là giả; chưa bị xóa bá»*** Ngắt. *** Äang xóa tập tin “%sâ€*** Äang xóa tập tin trung gian “%sâ€*** Äang đợi những công việc chưa hoàn tất…*** Cảnh báo: tập tin .LOW_RESOLUTION_TIME “%s†có nhãn thá»i gian độ phân giải cao*** [%s] Thành phần kho “%s†có thể là giả; chưa bị xóa bá»*** [%s] Äang xóa tập tin “%sâ€*** trá»™n quy tắc ngầm và thưá»ng: cú pháp này đã lạc hậu-O[KIỂU] (--output-sync[=KIỂU]) chưa được cấu hình cho lần dịch này.-warning, có lẽ bạn cần phải bật lại xá»­ lý CTRL-Y từ DCL. . Dừng. .DEFAULT_GOAL chứa nhiá»u đíchPhần tá»­ .LIBPATTERNS “%s†không phải là má»™t mẫu; dùng tên VPATH “%sâ€Bị há»§y bá»Vi phạm truy cập: thao tác Ä‘á»c tại địa chỉ 0x%p Vi phạm truy cập: thao tác ghi tại địa chỉ 0x%p Äồng hồ báo độngNối thêm %.*s và dá»n dẹp Nối thêm đầu ra vào %s Tránh quy tắc ngầm đệ quy. Lá»–I: num_pattern_rules không đúng! %u != %uBUILTIN CD %s Lệnh gá»i hệ thống saiNá»™i dung tập tin bó lệnh: @echo off Ná»™i dung tập tin bó lệnh:%s %s á»ng dẫn há»ngLá»—i busVượt giá»›i hạn thá»i gian CPUKhông thể tạo tập tin tạm Truy cập conTiến trình con đã thoátBá» phụ thuá»™c vòng tròn %s <- %s.Dá»n dẹp tập tin bó tạm %s Dá»n dẹp tập tin bó tạm %s gặp lá»—i (%d) Dá»n dẹp tập tin bó tạm %s Xung đột =%lu/%lu=%.0f%%Coi tập tin đích “%sâ€. Äã tiếp tụcKhông thể phục hồi đầu ra lá»—i tiêu chuẩn Không thể phục hồi đầu vào chuẩn Không thể phục hồi đầu ra chuẩn Không thể chuyển vá» thư mục gốc.CreatePipe() bị lá»—i (e=%ld) Tạo tập tin bó lệnh tạm: %s Giá» hiện tạiPhần tùy chỉnh không xuất được: %s DCL: %s Tín hiệu nguy hiểmBẫy EMTTên hàm trống rá»—ngTên ký hiệu là trống rá»—ng cho việc tải: %sThá»±c hiện %s để thay thế Gặp lá»—i khi tải ký hiệu %s từ %s: %sGặp lá»—i khi mở bảng ký hiệu toàn cục: %sGặp lá»—i khi làm lại makefile “%sâ€.Gặp lá»—i khi tạo lại được tập tin đích “%sâ€. Tập tin “%s†không tồn tại. Coi tập tin “%s†là đã sẵn có rồi. Vượt giá»›i hạn kích cỡ tập tinHoàn tất Ä‘iá»u kiện tiên quyết cá»§a tập tin đích “%sâ€. Hoàn tất cập nhật tập tin “%sâ€. Không có bá»™ đồng xá»­ lý số thá»±c dấu chấm độngNgoại lệ dấu chấm độngTìm thấy quy tắc ngầm cho “%sâ€. Tìm thấy Ä‘iá»u kiện tiên quyết “%s†làm VPATH “%s†Tên hàm quá dài: %sChịu thua tập tin đích “%sâ€. TreoI/O có thểBẫy IOTChỉ lệnh không hợp lệKhông tìm thấy makefile bao gồm “%sâ€.Yêu cầu thông tinTruy cập đã được khởi tạoNgắtTên hàm không hợp lệ: %sSố lượng đối số tối Ä‘a (%u) là không hợp lệ cho hàm “%sâ€Số lượng đối số tối thiểu (%u) là không hợp lệ cho hàm “%sâ€á»¨ng dụng khách jobserver (fds %d,%d) Ứng dụng khách jobserver (cá» hiệu %s) Khe jobserver bị giá»›i hạn thành %d Bị buá»™c kết thúcTiến trình con còn sống %p (%s) PID %s %s Tải =%lu/%lu=%.0f%%, Äối tượng %s đã được tải không được công bố là tương thích GPLÄang tải ký hiệu %s từ %s Tìm quy tắc có tập tin trung gian “%sâ€. Tìm quy tắc ngầm cho “%sâ€. Tìm quy tắc ngầm vá» thành phần kho cho “%sâ€. Truy cập MakeMakefile “%s†bị lặp; không tạo lại nó. Không tìm thấy makefile “%sâ€Tập tin makefile từ đầu vào chuẩn được ghi hai lần.Tạo “%s†do cỠ“always-makeâ€. Äịnh nghÄ©a biến đích riêng biệt bị há»ngThành viên “%sâ€%s: %ld byte tại %ld (%ld). Phải tạo lại đích “%sâ€. KhôngKhông tìm thấy quy tắc ngầm cho “%sâ€. Không cần tạo lại đích “%sâ€.Không có công thức cho “%s†và chưa thay đổi Ä‘iá»u kiện tiên quyết nào. Không có đíchChưa chỉ định đích, và không tìm thấy makefileKhông cần làm gì cho “%sâ€.Äã lấy thẻ bài cho Ä‘iá»u con %p (%s). Tùy chá»n: Không há»— trợ công việc song song (-j) trên hệ thống này.Mất Ä‘iện đột ngá»™tÄiá»u kiện tiên quyết “%s†là má»›i hÆ¡n đích “%s†. Äiá»u kiện tiên quyết “%s†cÅ© hÆ¡n đích “%s†. Äiá»u kiện tiên quyết “%s†là order-only (chỉ thứ tá»±) cho đích “%sâ€. Äiá»u kiện tiên quyết “%s†cá»§a đích “%s†không tồn tại. Hết hạn đếm thá»i gian khi theo dõi cách sá»­ dụng tiá»m năng hệ thốngXén bá»›t tập tin “%sâ€. Äặt tiến trình con %p (%s) PID %s%s vào xâu. ThoátThá»±c hiện lại[%u]:Äang Ä‘á»c makefile “%sâ€Äang Ä‘á»c makefile… Äang mất tiến trình con %p PID %s %s Äang thắng lại tiến trình con %p PID %s %s Vừa thá»­ và thất bại khi cập nhật “%sâ€. Công thức cho “%s†sẽ bị bá» qua trong sá»± chấp thuận cá»§a má»™t cái cho “%sâ€.Tìm thấy công thức cho tập tin “%s†nhá» quy tắc tìm kiếm ngầm,Công thức có quá nhiá»u dòng (%ud)Äang chạy công thức cá»§a “%sâ€. Công thức được chỉ định cho tập tin “%s†tại %s:%lu,Biến đệ quy “%s†(cuối cùng) lại tham chiếu đến chính nóBăm lại=%u, Từ chối Ä‘iá»u kiện tiên quyết ngầm không thể “%sâ€. Từ chối Ä‘iá»u kiện tiên quyết không thể thá»a “%sâ€. Äã giải phóng thẻ bài cho tiến trình con %p (%s). Bá» tiến trình con %p PID %s%s khá»i xâu. Xóa các tập tin trung gian… Hãy thông báo lá»—i cho Hãy thông báo lá»—i dịch cho . Äặt lại thành chế độ công việc đơn (-j1).Tài nguyên bị mấtSIGPHONESIGWINDLá»—i phân Ä‘oạnBá» qua “UTF-8 BOM†trong makefile “%s†Bá» qua “UTF-8 BOM†trong bá»™ đệm cá»§a tập tin makefile Stem quá dài: “%s%.*sâ€. Vẫn Ä‘ang cập nhật tập tin “%sâ€. Bị ngừngBị ngừng (tín hiệu)Bị ngừng (đầu vào tty)Bị ngừng (đầu ra tty)Tạo lại thành công tập tin đích “%sâ€. Không há»— trợ liên kết má»m: tắt -L.Äích “%s†là hai chấm đôi và không có Ä‘iá»u kiện tiên quyết. Äích “%s†không được tạo lại do lá»—i.Tập tin đích “%s†cần được tạo lại dưới tùy chá»n “-qâ€. Äã chấm dứtKhông há»— trợ thao tác “load†trên hệ thống này.Äang tạo Ä‘iá»u kiện tiên quyết cá»§a “%sâ€. Bẫy vết/Ä‘iểm ngắtThá»­ Ä‘iá»u kiện tiên quyết ngầm “%sâ€. Thá»­ quy tắc mẫu vá»›i cuống “%.*sâ€. Thá»­ Ä‘iá»u kiện tiên quyết quy tắc “%sâ€. Äang cập nhật đích mong muốn… Cập nhật makefile… Äiá»u kiện I/O khẩn cấpCách dùng: %s [các_tùy_chá»n] [đích] … Truy cập ngưá»i dùngTín hiệu tá»± định nghÄ©a 1Tín hiệu tá»± định nghÄ©a 2Dùng lệnh mặc định cho “%sâ€. Dùng công thức mặc định cho “%sâ€. Bá»™ đếm thá»i gian ảo đã hết hạnCảnh báo: Tập tin “%s†có giá» sá»­a đổi %s giây trong thì tương laiCá»­a sổ bị thay đổiđã dùng tính năng chưa được há»— trợ: “%sâ€tá»± độngnhưng “%s†bây giỠđược cÅ©ng được xem là cùng tập tin “%sâ€.không thể cấp phát %lu byte cho bảng băm: hết bá»™ nhá»›không thể đổi tên “%s†hai chấm đôi thành “%s†hai chấm đơnkhông thể đổi tên “%s†hai chấm đơn thành “%s†hai chấm đôikhông thể buá»™c giá»›i hạn tải: không thể buá»™c giá»›i hạn tải trên hệ Ä‘iá»u hành nàyđóng: %s: %sdòng lệnhtạo ống dẫn công việcÄ‘ang tạo tín hiệu jobserver: (Lá»—i %ld: %s)mặc địnhnhân bản ống dẫn công việcchuá»—i rá»—ng không hợp lệ làm tên tập tintên biến rá»—ngmôi trưá»ngmôi trưá»ng vá»›i -egặp “%s†thừagặp các ký tá»± thừa đằng sau chỉ thị “%sâ€gặp các ký tá»± thừa đằng sau chỉ thị “defineâ€gặp các ký tá»± thừa đằng sau chỉ thị “endefâ€tập tin: Thao tác tập tin không hợp lệ: %sfile: thiết tên tập tinfile: quá ít đối sốfind_and_set_shell() đã quét đưá»ng dẫn thì đặt default_shell = %s find_and_set_shell() Ä‘ang đặt default_shell = %s đối số thứ nhất cho hàm “word†phải lá»›n hÆ¡n 0fopen (tập tin tạm)fwrite (tập tin tạm)các đích đã nhóm phải cung cấp má»™t công thứcguile: Äang định giá “%s†guile: Äang khai triển “%s†khởi tạo đưá»ng ống “jobserverâ€không đủ số đối số (%d) cho hàm “%sâ€lá»—i ná»™i bá»™: gặp chuá»—i --jobserver-auth “%s†không hợp lệ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)cú pháp không hợp lệ trong biểu thức Ä‘iá»u kiệntắt máy phục vụ công việcđưá»ng ống “jobserverâ€lbr$ini_control() bị lá»—i vá»›i trạng thái = %dlbr$set_module() đã không giải nén thông tin vá» mô-Ä‘un, trạng thái = %dđặt Ä‘iá»u con đã bắt là PID %s, vẫn còn đợi PID %s makefilethiếu “endefâ€, chỉ thị “define†chưa hoàn thiệnthiếu chỉ thị “endifâ€thiếu quy tắc trước công thứcthiếu dấu phân cáchthiếu dấu phân cách (bạn đã định dùng TAB thay vì 8 khoảng trắng phải không?)thiếu mẫu đíchtrá»™n quy tắc ngầm và thưá»ngtrá»™n lẫn quy tắc ngầm và mẫu tÄ©nhnhiá»u mẫu đíchkhôngkhô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 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 không thể xá»­ lý thêm tập tin nào nữa: không thể nhân đôi đầu ra chuẩn đối số thứ nhất không phải dạng số cho hàm “wordâ€Ä‘ối số thứ nhất không phải số cho hàm “wordlistâ€Ä‘ối số thứ hai không phải số cho hàm “wordlistâ€chỉ cho phép má»™t “else†cho má»—i biểu thức Ä‘iá»u kiệnmở: %s: %skhông thể định nghÄ©a Ä‘iá»u kiện tiên quyết cho công thứcprocess_easy() gặp lá»—i khi chạy tiến trình (e=%ld) pselect (chá»n tiến trình?) ống dẫn công việcÄ‘á»c ống dẫn công việcread: %s: %scông thức bắt đầu trước đích thứ nhấtgiải phóng tín hiệu jobserver: (Lá»—i %ld: %s)chá» tín hiệu hay tiến trình con: (Lá»—i %ld: %s)spawnvpe: cạn không gian dành cho biến môi trưá»ngsys$search() gặp lá»—i vá»›i %d đích “%s†không tương ứng vá»›i mẫu đíchđích “%s†có nhiá»u hÆ¡n má»™t trong cùng má»™t quy tắctập tin đích “%s†có cả hai hạng mục : và ::mẫu đích không chứa “%%â€tùy chá»n “%s%s†cần má»™t đối số là chuá»—i khác rá»—ngtùy chá»n “-%c†cần má»™t đối số số nguyên dương“touch†thành viên kho không có trên VMStouch: “%s†không phải là kho hợp lệtouch: Kho “%s†không tồn tạitouch: Gặp mã trả lại sai từ ar_member_touch trên “%sâ€touch: Thành viên “%s†không tồn tại trong “%sâ€không thể mở thư viện “%s†để tra tìm thành viên “%dâ€chưa được viết mã thi hành trên hệ thống này: hàm “%sâ€không hiểu đặc tả cấp gỡ rối “%sâ€không hiểu kiểu output-sync “%sâ€tín hiệu lạunlink (bá» liên kết tập tin tạm): cuá»™c gá»i chưa được chấm dứt cho hàm “%sâ€: thiếu “%câ€tham chiếu biến chưa chấm dứtcả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.cảnh báo: -j%d bị ép buá»™c trong make con: Ä‘ang đặt lại chế độ jobserver.cảnh báo: -j%d bị ép buá»™c trong make con: Ä‘ang đặt lại chế độ jobserver.cảnh báo: thấy ký tá»± NUL; bá» qua phần còn lại cá»§a dòngcảnh báo: bá» qua công thức cÅ© cho đích “%sâ€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.cảnh báo: đè thành viên nhóm cho đích “%sâ€cảnh báo: đè công thức cho đích “%sâ€cảnh báo: biến “%.*s†chưa được định nghÄ©awindows32_openpipe(): process_init_fd() gặp lá»—i windows32_openpipe: DuplicateHandle(Err) gặp lá»—i (e=%ld) windows32_openpipe: DuplicateHandle(In) gặp lá»—i (e=%ld) lá»—i ghi: đầu ra tiêu chuẩnghi lại trình phục vụ công việcghi: %s: %smake-4.3/po/bg.po0000644000175000017500000021420213611136530010564 00000000000000# Bulgarian translation of make po-file. # Copyright (C) 2019, 2020 Free Software Foundation, Inc. # This file is distributed under the same license as the make package. # Alexander Shopov , 2019, 2020. # msgid "" msgstr "" "Project-Id-Version: make 4.2.93\n" "Report-Msgid-Bugs-To: bug-make@gnu.org\n" "POT-Creation-Date: 2020-01-19 15:34-0500\n" "PO-Revision-Date: 2020-01-04 12:41+0100\n" "Last-Translator: Alexander Shopov \n" "Language-Team: Bulgarian \n" "Language: bg\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" #: src/ar.c:46 #, c-format msgid "attempt to use unsupported feature: '%s'" msgstr "опит за ползване на „%s“, което не Ñе поддържа" #: src/ar.c:123 #, c-format msgid "touch archive member is not available on VMS" msgstr "" "обновÑването на информациÑта чрез „touch“ на член на архив не Ñе поддържа " "под VMS" #: src/ar.c:147 #, c-format msgid "touch: Archive '%s' does not exist" msgstr "„touch“: архивът „%s“ не ÑъщеÑтвува" #: src/ar.c:150 #, c-format msgid "touch: '%s' is not a valid archive" msgstr "„touch“: „%s“ не е поддържан архив" #: src/ar.c:157 #, c-format msgid "touch: Member '%s' does not exist in '%s'" msgstr "„touch“: в „%2$s“ нÑма член „%1$s“" #: src/ar.c:164 #, c-format msgid "touch: Bad return code from ar_member_touch on '%s'" msgstr "„touch“: неправилен изходен код от „ar_member_touch“ върху „%s“" #: src/arscan.c:130 #, c-format msgid "lbr$set_module() failed to extract module info, status = %d" msgstr "„lbr$set_module()“ не може да получи Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° модула, код = %d" #: src/arscan.c:236 #, c-format msgid "lbr$ini_control() failed with status = %d" msgstr "„lbr$ini_control()“ завърши неуÑпешно Ñ ÐºÐ¾Ð´ = %d" #: src/arscan.c:261 #, c-format msgid "unable to open library '%s' to lookup member status %d" msgstr "библиотеката „%s“ не може да Ñе отвори за проверката на член, код = %d" #: src/arscan.c:944 #, c-format msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n" msgstr "Член „%s“%s: %ld байта при %ld (%ld).\n" #: src/arscan.c:945 msgid " (name might be truncated)" msgstr " (името може да е отÑечено)" #: src/arscan.c:947 #, c-format msgid " Date %s" msgstr " Дата %s" #: src/arscan.c:948 #, c-format msgid " uid = %d, gid = %d, mode = 0%o.\n" msgstr " ИД_П = %d, ИД_ГР = %d, режим = 0%o.\n" #: src/commands.c:403 #, c-format msgid "Recipe has too many lines (%ud)" msgstr "Прекалено много редове в рецептата (%ud)" #: src/commands.c:504 msgid "*** Break.\n" msgstr "••• ПрекъÑване.\n" #: src/commands.c:628 #, c-format msgid "*** [%s] Archive member '%s' may be bogus; not deleted" msgstr "••• [%s] „%s“ може да е фалшива чаÑÑ‚ от архив — нÑма да бъде изтрита" #: src/commands.c:632 #, c-format msgid "*** Archive member '%s' may be bogus; not deleted" msgstr "••• „%s“ може да е фалшива чаÑÑ‚ от архив — нÑма да бъде изтрита" #: src/commands.c:646 #, c-format msgid "*** [%s] Deleting file '%s'" msgstr "••• [%s] Изтриване на файл „%s“" #: src/commands.c:648 #, c-format msgid "*** Deleting file '%s'" msgstr "••• Изтриване на файл „%s“" #: src/commands.c:684 msgid "# recipe to execute" msgstr "# рецепта за изпълнение" #: src/commands.c:687 msgid " (built-in):" msgstr " (вградено):" #: src/commands.c:689 #, c-format msgid " (from '%s', line %lu):\n" msgstr " (от „%s“, ред %lu)\n" #: src/dir.c:1073 msgid "" "\n" "# Directories\n" msgstr "" "\n" "# Директории\n" #: src/dir.c:1085 #, c-format msgid "# %s: could not be stat'd.\n" msgstr "# „%s“: не може да Ñе получи Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ñ‡Ñ€ÐµÐ· „stat“.\n" #: src/dir.c:1089 msgid "# %s (key %s, mtime %I64u): could not be opened.\n" msgstr "# %s (ключ %s, време на промÑна %I64u): не може да Ñе отвори.\n" #: src/dir.c:1094 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n" msgstr "# %s (уÑтройÑтво %d, i-възел [%d,%d,%d]): не може да Ñе отвори.\n" #: src/dir.c:1099 #, c-format msgid "# %s (device %ld, inode %ld): could not be opened.\n" msgstr "# %s (уÑтройÑтво %ld, i-възел %ld): не може да Ñе отвори.\n" #: src/dir.c:1126 msgid "# %s (key %s, mtime %I64u): " msgstr "# %s (ключ %s, време на промÑна %I64u): " #: src/dir.c:1131 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): " msgstr "# %s (уÑтройÑтво %d, i-възел [%d,%d,%d]): " #: src/dir.c:1136 #, c-format msgid "# %s (device %ld, inode %ld): " msgstr "# %s (уÑтройÑтво %ld, i-възел %ld): " #: src/dir.c:1142 src/dir.c:1163 msgid "No" msgstr "ÐÑма" #: src/dir.c:1145 src/dir.c:1166 msgid " files, " msgstr " файлове, " #: src/dir.c:1147 src/dir.c:1168 msgid "no" msgstr "нÑма" #: src/dir.c:1150 msgid " impossibilities" msgstr " пречки" #: src/dir.c:1154 msgid " so far." msgstr " заÑега." #: src/dir.c:1171 #, c-format msgid " impossibilities in %lu directories.\n" msgstr " пречки в %lu директории.\n" #: src/expand.c:125 #, c-format msgid "Recursive variable '%s' references itself (eventually)" msgstr "РекурÑивната променлива „%s“ Ñочи Ñебе Ñи (в нÑкой момент)" #: src/expand.c:271 #, c-format msgid "unterminated variable reference" msgstr "незавършен указател към променлива" #: src/file.c:278 #, c-format msgid "Recipe was specified for file '%s' at %s:%lu," msgstr "Рецептата е указана за файл „%s“ при %s:%lu," #: src/file.c:283 #, c-format msgid "Recipe for file '%s' was found by implicit rule search," msgstr "Рецептата за файла „%s“ бе открита при търÑене на вградените правила." #: src/file.c:287 #, c-format msgid "but '%s' is now considered the same file as '%s'." msgstr "но Ñега „%s“ Ñе Ñчита за ÑÑŠÑ‰Ð¸Ñ Ñ„Ð°Ð¹Ð» като „%s“." #: src/file.c:290 #, c-format msgid "Recipe for '%s' will be ignored in favor of the one for '%s'." msgstr "Рецептата за „%s“ Ñе преÑкача, а Ñе ползва тази за „%s“." #: src/file.c:310 #, c-format msgid "can't rename single-colon '%s' to double-colon '%s'" msgstr "" "единичното двоеточие „%s“ не може да Ñе преименува на двойно двоеточие „%s“" #: src/file.c:316 #, c-format msgid "can't rename double-colon '%s' to single-colon '%s'" msgstr "" "двойното двоеточие „%s“ не може да Ñе преименува на единично двоеточие „%s“" #: src/file.c:408 #, c-format msgid "*** Deleting intermediate file '%s'" msgstr "••• Изтриване на Ð¼ÐµÐ¶Ð´Ð¸Ð½Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð» „%s“" #: src/file.c:412 #, c-format msgid "Removing intermediate files...\n" msgstr "Изтриване на междинните файлове…\n" #: src/file.c:872 msgid "Current time" msgstr "Текущо време" #: src/file.c:876 #, c-format msgid "%s: Timestamp out of range; substituting %s" msgstr "%s: времевото клеймо е извън диапазона, замеÑтва Ñе Ñ â€ž%s“" #: src/file.c:1016 msgid "# Not a target:" msgstr "# Ðе е цел:" #: src/file.c:1021 msgid "# Precious file (prerequisite of .PRECIOUS)." msgstr "# Ценен файл (изиÑкване на „.PRECIOUS“)." #: src/file.c:1023 msgid "# Phony target (prerequisite of .PHONY)." msgstr "# Фалшива цел (изиÑкване на „.PHONY“)." #: src/file.c:1025 msgid "# Command line target." msgstr "# Цел на ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¸Ñ Ñ€ÐµÐ´." #: src/file.c:1027 msgid "# A default, MAKEFILES, or -include/sinclude makefile." msgstr "# Стандартен, MAKEFILES или -include/sinclude makefile." #: src/file.c:1029 msgid "# Builtin rule" msgstr "# Вградено правило" #: src/file.c:1031 msgid "# Implicit rule search has been done." msgstr "# ТърÑенето във вградените правила е извършено." #: src/file.c:1032 msgid "# Implicit rule search has not been done." msgstr "# ТърÑенето във вградените правила не е извършено." #: src/file.c:1034 #, c-format msgid "# Implicit/static pattern stem: '%s'\n" msgstr "# Вградена/Ñтатична оÑнова на шаблон: „%s“\n" #: src/file.c:1036 msgid "# File is an intermediate prerequisite." msgstr "# Файлът е междинно изиÑкване." #: src/file.c:1040 msgid "# Also makes:" msgstr "# Също изгражда:" #: src/file.c:1046 msgid "# Modification time never checked." msgstr "# Времето на промÑна не е проверено." #: src/file.c:1048 msgid "# File does not exist." msgstr "# Файлът не ÑъщеÑтвува." #: src/file.c:1050 msgid "# File is very old." msgstr "# Файлът е много Ñтар." #: src/file.c:1055 #, c-format msgid "# Last modified %s\n" msgstr "# ПоÑледна промÑна на „%s“\n" #: src/file.c:1058 msgid "# File has been updated." msgstr "# Файлът е обновен." #: src/file.c:1058 msgid "# File has not been updated." msgstr "# Файлът не е обновен." #: src/file.c:1062 msgid "# Recipe currently running (THIS IS A BUG)." msgstr "# Рецептата в момента Ñе изпълнÑва (това е ГРЕШКÐ)." #: src/file.c:1065 msgid "# Dependencies recipe running (THIS IS A BUG)." msgstr "# Рецептата за завиÑимоÑтите в момента Ñе изпълнÑва (това е ГРЕШКÐ)" #: src/file.c:1074 msgid "# Successfully updated." msgstr "# УÑпешно обновено." #: src/file.c:1078 msgid "# Needs to be updated (-q is set)." msgstr "# ТрÑбва да бъде обновено („-q“ е зададена)." #: src/file.c:1081 msgid "# Failed to be updated." msgstr "# ÐеуÑпешно обновÑване." #: src/file.c:1086 msgid "# Invalid value in 'command_state' member!" msgstr "# Ðеправилна ÑтойноÑÑ‚ в член на „command_state“!" #: src/file.c:1105 msgid "" "\n" "# Files" msgstr "" "\n" "# Файлове" #: src/file.c:1109 msgid "" "\n" "# files hash-table stats:\n" "# " msgstr "" "\n" "# ÑтатиÑтика за речника за файлове:\n" "# " #: src/file.c:1119 #, c-format msgid "%s: Field '%s' not cached: %s" msgstr "%s: полето „%s“ не е кеширано: %s" #: src/function.c:794 msgid "non-numeric first argument to 'word' function" msgstr "нечиÑлов първи аргумент към функциÑта „word“" #: src/function.c:799 #, c-format msgid "first argument to 'word' function must be greater than 0" msgstr "първиÑÑ‚ аргумент към функциÑта „word“ трÑбва да е положително чиÑло" #: src/function.c:819 msgid "non-numeric first argument to 'wordlist' function" msgstr "нечиÑлов първи аргумент за функциÑта „wordlist“" #: src/function.c:821 msgid "non-numeric second argument to 'wordlist' function" msgstr "нечиÑлов втори аргумент за функциÑта „wordlist“" #: src/function.c:1533 #, c-format msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n" msgstr "" "„windows32_openpipe“: неуÑпешно извикване на „DuplicateHandle(In)“ (e=%ld)\n" #: src/function.c:1557 #, c-format msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n" msgstr "" "„windows32_openpipe“: неуÑпешно извикване на „DuplicateHandle(Out)“ (e=%ld)\n" #: src/function.c:1564 #, c-format msgid "CreatePipe() failed (e=%ld)\n" msgstr "неуÑпешно извикване на „CreatePipe()“ failed (e=%ld)\n" #: src/function.c:1572 #, c-format msgid "windows32_openpipe(): process_init_fd() failed\n" msgstr "„windows32_openpipe()“: неуÑпешно извикване на „process_init_fd()“\n" #: src/function.c:1857 #, c-format msgid "Cleaning up temporary batch file %s\n" msgstr "ИзчиÑтване на временен файл за пакетна обработка „%s“\n" #: src/function.c:2230 src/function.c:2255 #, c-format msgid "file: missing filename" msgstr "файл: липÑва име на файл" #: src/function.c:2234 src/function.c:2265 #, c-format msgid "open: %s: %s" msgstr "отварÑне: %s: %s" #: src/function.c:2242 #, c-format msgid "write: %s: %s" msgstr "запазване: %s: %s" #: src/function.c:2245 src/function.c:2282 #, c-format msgid "close: %s: %s" msgstr "затварÑне: %s: %s" #: src/function.c:2258 #, c-format msgid "file: too many arguments" msgstr "файл: прекалено много аргументи" #: src/function.c:2277 #, c-format msgid "read: %s: %s" msgstr "четене: %s: %s" #: src/function.c:2290 #, c-format msgid "file: invalid file operation: %s" msgstr "файл: неправилно дейÑтвие върху файл: %s" #: src/function.c:2405 #, c-format msgid "insufficient number of arguments (%d) to function '%s'" msgstr "недоÑтатъчен брой аргументи (%d) към функциÑта „%s“" #: src/function.c:2417 #, c-format msgid "unimplemented on this platform: function '%s'" msgstr "без Ñ€ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½Ð° тази платформа: Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ â€ž%s“" #: src/function.c:2483 #, c-format msgid "unterminated call to function '%s': missing '%c'" msgstr "незавършено извикване на функциÑта „%s“: липÑва „%c“" #: src/function.c:2667 #, c-format msgid "Empty function name" msgstr "Празно име на функциÑ" #: src/function.c:2669 #, c-format msgid "Invalid function name: %s" msgstr "Грешно име на функциÑ: „%s“" #: src/function.c:2671 #, c-format msgid "Function name too long: %s" msgstr "Името на функциÑта е твърде дълго: „%s“" #: src/function.c:2674 #, c-format msgid "Invalid minimum argument count (%u) for function %s" msgstr "Ðеправилен минимален брой аргументи (%u) за функциÑта „%s“" #: src/function.c:2677 #, c-format msgid "Invalid maximum argument count (%u) for function %s" msgstr "Ðеправилен макÑимален брой аргументи (%u) за функциÑта „%s“" #: src/getopt.c:659 #, c-format msgid "%s: option '%s' is ambiguous\n" msgstr "%s: опциÑта „%s“ не е еднозначна\n" #: src/getopt.c:683 #, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s: опциÑта „--%s“ не приема аргумент\n" #: src/getopt.c:688 #, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s: опциÑта „%c%s“ не приема аргумент\n" #: src/getopt.c:705 src/getopt.c:878 #, c-format msgid "%s: option '%s' requires an argument\n" msgstr "%s: опциÑта „%s“ изиÑква аргумент\n" #: src/getopt.c:734 #, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s: непозната Ð¾Ð¿Ñ†Ð¸Ñ â€ž--%s“\n" #: src/getopt.c:738 #, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s: непозната Ð¾Ð¿Ñ†Ð¸Ñ â€ž%c%s“\n" #: src/getopt.c:764 #, c-format msgid "%s: illegal option -- %c\n" msgstr "%s: непозволена Ð¾Ð¿Ñ†Ð¸Ñ â€” %c\n" #: src/getopt.c:767 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s: неправилна Ð¾Ð¿Ñ†Ð¸Ñ â€” „%c“\n" #: src/getopt.c:797 src/getopt.c:927 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: опциÑта изиÑква аргумент — %c\n" #: src/getopt.c:844 #, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s: опциÑта „-W %s“ не е еднозначна\n" #: src/getopt.c:862 #, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s: опциÑта „-W %s“ не приема аргумент\n" #: src/guile.c:58 #, c-format msgid "guile: Expanding '%s'\n" msgstr "guile: замеÑтване на „%s“\n" #: src/guile.c:74 #, c-format msgid "guile: Evaluating '%s'\n" msgstr "guile: изчиÑлÑване на „%s“\n" #: src/hash.c:50 #, c-format msgid "can't allocate %lu bytes for hash table: memory exhausted" msgstr "не могат да Ñе заделÑÑ‚ %lu байта за речник — паметта е изчерпана" #: src/hash.c:280 #, c-format msgid "Load=%lu/%lu=%.0f%%, " msgstr "Ðатоварване=%lu/%lu=%.0f%%, " #: src/hash.c:282 #, c-format msgid "Rehash=%u, " msgstr "Преизграждане на речник=%u, " #: src/hash.c:283 #, c-format msgid "Collisions=%lu/%lu=%.0f%%" msgstr "СъвпадениÑ=%lu/%lu=%.0f%%" #: src/implicit.c:38 #, c-format msgid "Looking for an implicit rule for '%s'.\n" msgstr "ТърÑене на вградено правило за „%s“.\n" #: src/implicit.c:54 #, c-format msgid "Looking for archive-member implicit rule for '%s'.\n" msgstr "ТърÑене на вградено правило по член на архив за „%s“.\n" #: src/implicit.c:311 #, c-format msgid "Avoiding implicit rule recursion.\n" msgstr "ИзбÑгване на рекурÑÐ¸Ñ Ð²ÑŠÐ² вградените правила.\n" #: src/implicit.c:484 #, c-format msgid "Stem too long: '%s%.*s'.\n" msgstr "Твърде дълга оÑнова: „%s%.*s“.\n" #: src/implicit.c:490 #, c-format msgid "Trying pattern rule with stem '%.*s'.\n" msgstr "Опит за шаблонно правило Ñ Ð¾Ñнова „%.*s“.\n" #: src/implicit.c:717 #, c-format msgid "Rejecting impossible rule prerequisite '%s'.\n" msgstr "ОтхвърлÑне на невъзможно изиÑкване „%s“.\n" #: src/implicit.c:718 #, c-format msgid "Rejecting impossible implicit prerequisite '%s'.\n" msgstr "ОтхвърлÑне на невъзможно вградено изиÑкване „%s“.\n" #: src/implicit.c:732 #, c-format msgid "Trying rule prerequisite '%s'.\n" msgstr "Опитване на изиÑкването „%s“.\n" #: src/implicit.c:733 #, c-format msgid "Trying implicit prerequisite '%s'.\n" msgstr "Опитване на вграденото изиÑкване „%s“.\n" #: src/implicit.c:772 #, c-format msgid "Found prerequisite '%s' as VPATH '%s'\n" msgstr "ИзиÑканото „%s“ е открито чрез „VPATH“ като „%s“\n" #: src/implicit.c:786 #, c-format msgid "Looking for a rule with intermediate file '%s'.\n" msgstr "ТърÑене на правило Ñ Ð¼ÐµÐ¶Ð´Ð¸Ð½ÐµÐ½ файл „%s“.\n" #: src/job.c:370 msgid "Cannot create a temporary file\n" msgstr "Ðе може да Ñе Ñъздаде временен файл\n" #: src/job.c:548 msgid " (core dumped)" msgstr " (паметта е разтоварена)" #: src/job.c:553 msgid " (ignored)" msgstr " (преÑкачане)" #: src/job.c:557 src/job.c:1892 msgid "" msgstr "<вградено>" #: src/job.c:573 #, c-format msgid "%s[%s: %s] Error %d%s" msgstr "%s[%s: %s] Грешка %d%s" #: src/job.c:662 #, c-format msgid "*** Waiting for unfinished jobs...." msgstr "••• Изчакване на незавършени задачи…" #: src/job.c:704 #, c-format msgid "Live child %p (%s) PID %s %s\n" msgstr "Ðезавършил дъщерен Ð¿Ñ€Ð¾Ñ†ÐµÑ %p (%s) ИД_ПР %s %s\n" #: src/job.c:706 src/job.c:900 src/job.c:1072 src/job.c:1644 #, c-format msgid " (remote)" msgstr " (отдалечено)" #: src/job.c:898 #, c-format msgid "Reaping winning child %p PID %s %s\n" msgstr "Приключване на ÑÐ¿ÐµÑ‡ÐµÐ»ÐµÐ»Ð¸Ñ Ð´ÑŠÑ‰ÐµÑ€ÐµÐ½ Ð¿Ñ€Ð¾Ñ†ÐµÑ %p ИД_ПР %s %s\n" #: src/job.c:899 #, c-format msgid "Reaping losing child %p PID %s %s\n" msgstr "Приключване на Ð¸Ð·Ð³ÑƒÐ±Ð¸Ð»Ð¸Ñ Ð´ÑŠÑ‰ÐµÑ€ÐµÐ½ Ð¿Ñ€Ð¾Ñ†ÐµÑ %p ИД_ПР %s %s\n" #: src/job.c:950 #, c-format msgid "Cleaning up temp batch file %s\n" msgstr "ИзчиÑтване на временен файл за пакетна обработка „%s“\n" #: src/job.c:956 #, c-format msgid "Cleaning up temp batch file %s failed (%d)\n" msgstr "ÐеуÑпешно изчиÑтване на временен файл за пакетна обработка „%s“: %d\n" #: src/job.c:1071 #, c-format msgid "Removing child %p PID %s%s from chain.\n" msgstr "ИзчиÑтване на Ð´ÑŠÑ‰ÐµÑ€Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑ %p PID %s%s от веригата.\n" #: src/job.c:1120 #, c-format msgid "Released token for child %p (%s).\n" msgstr "ОÑвобождаване на жетона за дъщерен Ð¿Ñ€Ð¾Ñ†ÐµÑ %p (%s).\n" #: src/job.c:1575 src/job.c:2487 #, c-format msgid "process_easy() failed to launch process (e=%ld)\n" msgstr "„process_easy()“ не уÑÐ¿Ñ Ð´Ð° Ñтартира Ð¿Ñ€Ð¾Ñ†ÐµÑ (e=%ld)\n" #: src/job.c:1579 src/job.c:2491 #, c-format msgid "" "\n" "Counted %d args in failed launch\n" msgstr "" "\n" "При неуÑпешно Ñтартиране Ñа изброени %d аргумента\n" #: src/job.c:1642 #, c-format msgid "Putting child %p (%s) PID %s%s on the chain.\n" msgstr "ПоÑтавÑне на Ð´ÑŠÑ‰ÐµÑ€Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑ %p (%s) PID %s%s във веригата.\n" #: src/job.c:1875 #, c-format msgid "Obtained token for child %p (%s).\n" msgstr "Получен е жетон за дъщерен Ð¿Ñ€Ð¾Ñ†ÐµÑ %p (%s).\n" #: src/job.c:1902 #, c-format msgid "%s: target '%s' does not exist" msgstr "%s: целта „%s“ не ÑъщеÑтвува" #: src/job.c:1905 #, c-format msgid "%s: update target '%s' due to: %s" msgstr "%s: обновÑване на целта „%s“ заради: %s" #: src/job.c:2108 #, c-format msgid "cannot enforce load limits on this operating system" msgstr "" "на тази операционна ÑиÑтема не могат да Ñе налагат Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð·Ð° " "натоварването" #: src/job.c:2110 msgid "cannot enforce load limit: " msgstr "ограничението не може да бъде наложено: " #: src/job.c:2200 #, c-format msgid "no more file handles: could not duplicate stdin\n" msgstr "" "нÑма реÑÑƒÑ€Ñ Ð·Ð° отварÑне на повече файлове: ÑтандартниÑÑ‚ вход не може да Ñе " "дублира\n" #: src/job.c:2212 #, c-format msgid "no more file handles: could not duplicate stdout\n" msgstr "" "нÑма реÑÑƒÑ€Ñ Ð·Ð° отварÑне на повече файлове: ÑтандартниÑÑ‚ изход не може да Ñе " "дублира\n" #: src/job.c:2226 #, c-format msgid "no more file handles: could not duplicate stderr\n" msgstr "" "нÑма реÑÑƒÑ€Ñ Ð·Ð° отварÑне на повече файлове: Ñтандартната грешка не може да Ñе " "дублира\n" #: src/job.c:2241 #, c-format msgid "Could not restore stdin\n" msgstr "СтандартниÑÑ‚ вход не може да Ñе възÑтанови\n" #: src/job.c:2249 #, c-format msgid "Could not restore stdout\n" msgstr "СтандартниÑÑ‚ изход не може да Ñе възÑтанови\n" #: src/job.c:2257 #, c-format msgid "Could not restore stderr\n" msgstr "Стандартната грешка не може да Ñе възÑтанови\n" #: src/job.c:2520 #, c-format msgid "make reaped child pid %s, still waiting for pid %s\n" msgstr "" "„make“ приключи дъщерен Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€ %s, вÑе още Ñе чака за %s\n" #: src/job.c:2623 #, c-format msgid "spawnvpe: environment space might be exhausted" msgstr "spawnvpe: проÑтранÑтвото на Ñредата може да е изчерпано" #: src/job.c:2862 #, c-format msgid "$SHELL changed (was '%s', now '%s')\n" msgstr "Променливата „SHELL“ е променена (бе „%s“, а Ñега е „%s“)\n" #: src/job.c:3300 src/job.c:3485 #, c-format msgid "Creating temporary batch file %s\n" msgstr "Ðе може да Ñе Ñъздаде временен файл за пакетна обработка в „%s“\n" #: src/job.c:3308 #, c-format msgid "" "Batch file contents:\n" "\t@echo off\n" msgstr "" "Съдържание на файл за пакетна обработка:\n" "\t@echo off\n" #: src/job.c:3497 #, c-format msgid "" "Batch file contents:%s\n" "\t%s\n" msgstr "" "Съдържание на файла за пакетна обработка:%s\n" "\t%s\n" #: src/job.c:3605 #, c-format msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n" msgstr "" "%s (ред %d) неправилен контекÑÑ‚ на обвивката (!unixy && !batch_mode_shell)\n" #: src/load.c:60 #, c-format msgid "Failed to open global symbol table: %s" msgstr "ÐеуÑпешно отварÑне на глобалната таблица ÑÑŠÑ Ñимволи: %s" #: src/load.c:97 #, c-format msgid "Loaded object %s is not declared to be GPL compatible" msgstr "ЗаредениÑÑ‚ обект „%s“ не е обÑвен като ÑъвмеÑтим Ñ ÐžÐŸÐ› (GPL)" #: src/load.c:104 #, c-format msgid "Failed to load symbol %s from %s: %s" msgstr "ÐеуÑпешно зареждане на Ñимвола „%s“ от „%s“: %s" #: src/load.c:149 #, c-format msgid "Empty symbol name for load: %s" msgstr "Празно име на Ñимвол за зареждане: „%s“" #: src/load.c:204 #, c-format msgid "Loading symbol %s from %s\n" msgstr "Зареждане на Ñимвола „%s“ от „%s“\n" #: src/load.c:256 #, c-format msgid "The 'load' operation is not supported on this platform." msgstr "ОперациÑта за зареждане („load“) не Ñе поддържа на тази платформа" #: src/main.c:335 msgid "Options:\n" msgstr "Опции:\n" #: src/main.c:336 msgid " -b, -m Ignored for compatibility.\n" msgstr " -b, -m преÑкача Ñе, за ÑъвмеÑтимоÑÑ‚\n" #: src/main.c:338 msgid " -B, --always-make Unconditionally make all targets.\n" msgstr " -B, --always-make безуÑловно изграждане на вÑички цели\n" #: src/main.c:340 msgid "" " -C DIRECTORY, --directory=DIRECTORY\n" " Change to DIRECTORY before doing anything.\n" msgstr "" " -C ДИРЕКТОРИЯ, --directory=ДИРЕКТОРИЯ\n" " преминаване към тази ДИРЕКТОРИЯ, преди да Ñе\n" " прави каквото и да е\n" #: src/main.c:343 msgid " -d Print lots of debugging information.\n" msgstr " -d Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° изчиÑтване на грешки\n" #: src/main.c:345 msgid "" " --debug[=FLAGS] Print various types of debugging information.\n" msgstr " --debug[=ФЛÐГОВЕ] вид Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° изчиÑтване на грешки\n" #: src/main.c:347 msgid "" " -e, --environment-overrides\n" " Environment variables override makefiles.\n" msgstr "" " -e, --environment-overrides\n" " променливите от Ñредата да Ñа Ñ Ð¿Ñ€ÐµÐ²ÐµÑ Ð½Ð°Ð´\n" " указаното във файловете управлÑващи " "изграждането\n" " (makefile)\n" #: src/main.c:350 msgid "" " -E STRING, --eval=STRING Evaluate STRING as a makefile statement.\n" msgstr "" " --eval=ÐИЗ, --eval=ÐИЗ изчиÑлÑване на ÐИЗа като израз във файловете\n" " управлÑващи изграждането (makefile)\n" #: src/main.c:352 msgid "" " -f FILE, --file=FILE, --makefile=FILE\n" " Read FILE as a makefile.\n" msgstr "" " -f ФÐЙЛ, --file=ФÐЙЛ, --makefile=ФÐЙЛ\n" " ползване на този ФÐЙЛ да управлÑва " "изграждането\n" " (makefile)\n" #: src/main.c:355 msgid " -h, --help Print this message and exit.\n" msgstr " -h, --help извеждане на тази помощ и изход\n" #: src/main.c:357 msgid " -i, --ignore-errors Ignore errors from recipes.\n" msgstr " -i, --ignore-errors незачитане на грешките от рецептите\n" #: src/main.c:359 msgid "" " -I DIRECTORY, --include-dir=DIRECTORY\n" " Search DIRECTORY for included makefiles.\n" msgstr "" " -I ДИРЕКТОРИЯ, --include-dir=ДИРЕКТОРИЯ\n" " търÑене на вмъкнатите файлове в ДИРЕКТОРИЯта\n" #: src/main.c:362 msgid "" " -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no " "arg.\n" msgstr "" " -j [БРОЙ], --jobs[=БРОЙ] ограничаване на задачите до макÑимум този " "БРОЙ,\n" " без аргумент — без ограничениÑ\n" #: src/main.c:364 msgid "" " -k, --keep-going Keep going when some targets can't be made.\n" msgstr "" " -k, --keep-going продължаване дори и нÑкои от целите не могат\n" " да Ñе изградÑÑ‚\n" #: src/main.c:366 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" " множеÑтво задачи Ñе Ñтартират, Ñамо ако\n" " натоварването е ≤N\n" #: src/main.c:369 msgid "" " -L, --check-symlink-times Use the latest mtime between symlinks and " "target.\n" msgstr "" " -L, --check-symlink-times използване на минималното време на промÑна\n" " измежду Ñимволна връзка и целта ѝ\n" #: src/main.c:371 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" #: src/main.c:374 msgid "" " -o FILE, --old-file=FILE, --assume-old=FILE\n" " Consider FILE to be very old and don't remake " "it.\n" msgstr "" " -o ФÐЙЛ, --old-file=ФÐЙЛ, --assume-old=ФÐЙЛ\n" " без преизграждане на ФÐЙЛа, който да Ñе\n" " Ñчита за много Ñтар\n" #: src/main.c:377 msgid "" " -O[TYPE], --output-sync[=TYPE]\n" " Synchronize output of parallel jobs by TYPE.\n" msgstr "" " -O[ВИД], --output-sync[=ВИД]\n" " ВИД ÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½Ð° изхода от паралелните " "задачи\n" #: src/main.c:380 msgid " -p, --print-data-base Print make's internal database.\n" msgstr "" " -p, --print-data-base извеждане на вътрешната база от данни на " "„make“\n" #: src/main.c:382 msgid "" " -q, --question Run no recipe; exit status says if up to " "date.\n" msgstr "" " -q, --question без изпълнение на цели, Ñамо изходниÑÑ‚ код\n" " да указва дали те Ñа актуални\n" #: src/main.c:384 msgid " -r, --no-builtin-rules Disable the built-in implicit rules.\n" msgstr " -r, --no-builtin-rules изключване на вградените правила\n" #: src/main.c:386 msgid " -R, --no-builtin-variables Disable the built-in variable settings.\n" msgstr "" " -R, --no-builtin-variables изключване на вграденото задаване на " "променливи\n" #: src/main.c:388 msgid " -s, --silent, --quiet Don't echo recipes.\n" msgstr " -s, --silent, --quiet без извеждане на рецептите\n" #: src/main.c:390 msgid " --no-silent Echo recipes (disable --silent mode).\n" msgstr "" " --no-silent извеждане на рецептите (изключване на „--" "silent“)\n" #: src/main.c:392 msgid "" " -S, --no-keep-going, --stop\n" " Turns off -k.\n" msgstr "" " -S, --no-keep-going, --stop\n" " Изключване на „-k“\n" #: src/main.c:395 msgid " -t, --touch Touch targets instead of remaking them.\n" msgstr "" " -t, --touch обновÑване на информациÑта чрез „touch“ " "вмеÑто\n" " ново изграждане\n" #: src/main.c:397 msgid " --trace Print tracing information.\n" msgstr "" " --trace извеждане на Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° изчиÑтване на " "грешки\n" #: src/main.c:399 msgid "" " -v, --version Print the version number of make and exit.\n" msgstr " -v, --version извеждане на верÑиÑта и изход\n" #: src/main.c:401 msgid " -w, --print-directory Print the current directory.\n" msgstr " -w, --print-directory извеждане на текущата директориÑ\n" #: src/main.c:403 msgid "" " --no-print-directory Turn off -w, even if it was turned on " "implicitly.\n" msgstr "" " --no-print-directory изключване на „-w“, дори ако вградената\n" " функционалноÑÑ‚ Ñ Ðµ включила\n" #: src/main.c:405 msgid "" " -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n" " Consider FILE to be infinitely new.\n" msgstr "" " -W ФÐЙЛ, --what-if=ФÐЙЛ, --new-file=ФÐЙЛ, --assume-new=ФÐЙЛ\n" " Ñчитане на ФÐЙЛа за абÑолютно нов\n" #: src/main.c:408 msgid "" " --warn-undefined-variables Warn when an undefined variable is " "referenced.\n" msgstr "" " --warn-undefined-variables предупреждаване при използването\n" " на незададена променлива\n" #: src/main.c:671 #, c-format msgid "empty string invalid as file name" msgstr "задаването на празен низ за име на файл е грешка" #: src/main.c:754 #, c-format msgid "unknown debug level specification '%s'" msgstr "неправилно ниво за изчиÑтване на грешки „%s“" #: src/main.c:794 #, c-format msgid "unknown output-sync type '%s'" msgstr "непознат вид ÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ â€ž%s“ към опциÑта „--output-sync“" #: src/main.c:849 #, c-format msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n" msgstr "%s: прихванато прекъÑване/изключение (код = 0x%lx, Ð°Ð´Ñ€ÐµÑ = 0x%p)\n" #: src/main.c:856 #, c-format msgid "" "\n" "Unhandled exception filter called from program %s\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" msgstr "" "\n" "Филтърът за необработени Ð¸Ð·ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðµ извикан от програмата „%s“\n" "Код на изключение = %lx\n" "Флагове на изключение = %lx\n" "ÐÐ´Ñ€ÐµÑ Ð½Ð° изключение = 0x%p\n" #: src/main.c:864 #, c-format msgid "Access violation: write operation at address 0x%p\n" msgstr "Ðарушение на доÑтъпа: Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð·Ð° Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° Ð°Ð´Ñ€ÐµÑ 0x%p\n" #: src/main.c:865 #, c-format msgid "Access violation: read operation at address 0x%p\n" msgstr "Ðарушение на доÑтъпа: Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð·Ð° четене на Ð°Ð´Ñ€ÐµÑ 0x%p\n" #: src/main.c:941 src/main.c:956 #, c-format msgid "find_and_set_shell() setting default_shell = %s\n" msgstr "„find_and_set_shell()“ задава Ñтандартна обвивка = %s\n" #: src/main.c:1009 #, c-format msgid "find_and_set_shell() path search set default_shell = %s\n" msgstr "" "„find_and_set_shell()“ — търÑенето в Ð¿ÑŠÑ‚Ñ Ð·Ð°Ð´Ð°Ð²Ð° Ñтандартна обвивка = %s\n" #: src/main.c:1609 #, c-format msgid "" "warning: jobserver unavailable: using -j1. Add '+' to parent make rule." msgstr "" "ПРЕДУПРЕЖДЕÐИЕ: Ñървърът за задачи не е наличен, ползва Ñе „-j1“. Добавете " "„+“ към родителÑкото правило на „make“." #: src/main.c:1617 #, c-format msgid "warning: -j%d forced in submake: resetting jobserver mode." msgstr "" "ПРЕДУПРЕЖДЕÐИЕ: в подизграждане е зададено „-j%d“. Режимът на Ñървър за " "задачи Ñе изключва." #: src/main.c:1781 #, c-format msgid "Makefile from standard input specified twice." msgstr "" "Файлът управлÑващ изграждането е зададен двукратно на ÑÑ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð¸Ñ Ð²Ñ…Ð¾Ð´." #: src/main.c:1819 src/vmsjobs.c:1248 msgid "fopen (temporary file)" msgstr "отварÑне („fopen“ на временен файл)" #: src/main.c:1825 msgid "fwrite (temporary file)" msgstr "Ð·Ð°Ð¿Ð¸Ñ („fwrite“ на временен файл)" #: src/main.c:2004 #, c-format msgid "warning: -j%d forced in makefile: resetting jobserver mode." msgstr "" "ПРЕДУПРЕЖДЕÐИЕ: в подизграждане е зададено „-j%d“. Режимът на Ñървър за " "задачи Ñе изключва." #: src/main.c:2068 #, c-format msgid "Parallel jobs (-j) are not supported on this platform." msgstr "Тази ÑиÑтема не поддържа паралелни задачи („-j“)." #: src/main.c:2069 #, c-format msgid "Resetting to single job (-j1) mode." msgstr "Преминаване към еднозадачен режим (-j1)." #: src/main.c:2109 #, c-format msgid "Symbolic links not supported: disabling -L." msgstr "Ðе Ñе поддържат Ñимволни връзки: „-L“ Ñе изключва." #: src/main.c:2190 #, c-format msgid "Updating makefiles....\n" msgstr "ОбновÑване на управлÑващите изграждането файлове (makefile)…\n" #: src/main.c:2226 #, c-format msgid "Makefile '%s' might loop; not remaking it.\n" msgstr "" "УправлÑващиÑÑ‚ изграждането файл „%s“ може да зацикли, затова не Ñе " "преÑъздава.\n" #: src/main.c:2303 #, c-format msgid "Failed to remake makefile '%s'." msgstr "ÐеуÑпешно преÑъздаване на управлÑÐ²Ð°Ñ‰Ð¸Ñ Ð¸Ð·Ð³Ñ€Ð°Ð¶Ð´Ð°Ð½ÐµÑ‚Ð¾ файл „%s“" #: src/main.c:2323 #, c-format msgid "Included makefile '%s' was not found." msgstr "ВмъкнатиÑÑ‚ управлÑващ изграждането файл „%s“ липÑва" #: src/main.c:2328 #, c-format msgid "Makefile '%s' was not found" msgstr "УправлÑващиÑÑ‚ изграждането файл „%s“ липÑва" #: src/main.c:2394 #, c-format msgid "Couldn't change back to original directory." msgstr "Ðевъзможно връщане към първоначалната директориÑ" #: src/main.c:2402 #, c-format msgid "Re-executing[%u]:" msgstr "Изпълнение наново[%u]:" #: src/main.c:2522 msgid "unlink (temporary file): " msgstr "изтриване („unlink“ на временен файл): " #: src/main.c:2555 #, c-format msgid ".DEFAULT_GOAL contains more than one target" msgstr "Стандартната цел „.DEFAULT_GOAL“ Ñъдържа повече от една цел" #: src/main.c:2579 #, c-format msgid "No targets" msgstr "ÐÑма цели" #: src/main.c:2581 #, c-format msgid "No targets specified and no makefile found" msgstr "Ðе е зададена цел, а и липÑва управлÑващ изграждането файл" #: src/main.c:2586 #, c-format msgid "Updating goal targets....\n" msgstr "ОбновÑване на целите…\n" #: src/main.c:2610 #, c-format msgid "warning: Clock skew detected. Your build may be incomplete." msgstr "" "ПРЕДУПРЕЖДЕÐИЕ: проблем ÑÑŠÑ ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ Ñ‡Ð°Ñовник — изграждането може да е " "непълно." #: src/main.c:2804 #, c-format msgid "Usage: %s [options] [target] ...\n" msgstr "Употреба: %s [ОПЦИЯ]… [ФÐЙЛ]…\n" #: src/main.c:2810 #, c-format msgid "" "\n" "This program built for %s\n" msgstr "" "\n" "Тази програма е изградена за %s\n" #: src/main.c:2812 #, c-format msgid "" "\n" "This program built for %s (%s)\n" msgstr "" "\n" "Тази програма е изградена за %s (%s)\n" #: src/main.c:2815 #, c-format msgid "Report bugs to \n" msgstr "" "Съобщавайте за програмни грешки на .\n" "За грешки в българÑÐºÐ¸Ñ Ð¿Ñ€ÐµÐ²Ð¾Ð´ на .\n" #: src/main.c:2901 #, c-format msgid "the '%s%s' option requires a non-empty string argument" msgstr "опциÑта „%s%s“ изиÑква непразен аргумент-низ" #: src/main.c:2965 #, c-format msgid "the '-%c' option requires a positive integer argument" msgstr "опциÑта „%c“ изиÑква положителен, целочиÑлен аргумент" #: src/main.c:3363 #, c-format msgid "%sBuilt for %s\n" msgstr "%sИзградена за %s\n" #: src/main.c:3365 #, c-format msgid "%sBuilt for %s (%s)\n" msgstr "%sИзградена за %s (%s)\n" #: src/main.c:3376 #, c-format msgid "" "%sLicense GPLv3+: GNU GPL version 3 or later \n" "%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Лиценз — Общ публичен лиценз на GNU (GNU GPL), както е публикуван от " "ФондациÑта\n" "за Ñвободен Ñофтуер — верÑÐ¸Ñ 3 на лиценза или (по ваше решение) по-къÑна " "верÑиÑ.\n" "\n" "%sТази програма е Ñвободен Ñофтуер. Можете да Ñ Ñ€Ð°Ð·Ð¿Ñ€Ð¾ÑтранÑвате и/или " "променÑте.\n" "%sÐ¢Ñ Ñе разпроÑтранÑва БЕЗ ÐИКÐКВИ ГÐРÐÐЦИИ доколкото е позволено от " "закона.\n" #: src/main.c:3397 #, c-format msgid "" "\n" "# Make data base, printed on %s" msgstr "" "\n" "# Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° „make“, отпечатана на %s" #: src/main.c:3407 #, c-format msgid "" "\n" "# Finished Make data base on %s\n" msgstr "" "\n" "# Край на информациÑта за „make“, отпечатана на %s\n" #: src/misc.c:643 #, c-format msgid "%s: user %lu (real %lu), group %lu (real %lu)\n" msgstr "%s: потр. %lu (реално %lu), група %lu (реално %lu)\n" #: src/misc.c:664 msgid "Initialized access" msgstr "Инициализиран доÑтъп" #: src/misc.c:743 msgid "User access" msgstr "ПотребителÑки доÑтъп" #: src/misc.c:791 msgid "Make access" msgstr "Задаване на доÑтъп" #: src/misc.c:825 msgid "Child access" msgstr "Дъщерен процеÑ" #: src/output.c:97 #, c-format msgid "%s: Entering an unknown directory\n" msgstr "%s: влизане в непозната директориÑ\n" #: src/output.c:99 #, c-format msgid "%s: Leaving an unknown directory\n" msgstr "%s: излизане от непозната директориÑ\n" #: src/output.c:102 #, c-format msgid "%s: Entering directory '%s'\n" msgstr "%s: влизане в Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ â€ž%s“\n" #: src/output.c:104 #, c-format msgid "%s: Leaving directory '%s'\n" msgstr "%s: излизане от Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ â€ž%s“\n" #: src/output.c:108 #, c-format msgid "%s[%u]: Entering an unknown directory\n" msgstr "%s[%u]: влизане в непозната директориÑ\n" #: src/output.c:110 #, c-format msgid "%s[%u]: Leaving an unknown directory\n" msgstr "%s[%u]: излизане от непозната директориÑ\n" #: src/output.c:113 #, c-format msgid "%s[%u]: Entering directory '%s'\n" msgstr "%s[%u]: влизане в Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ â€ž%s“\n" #: src/output.c:115 #, c-format msgid "%s[%u]: Leaving directory '%s'\n" msgstr "%s[%u]: излизане от Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ â€ž%s“\n" #: src/output.c:442 src/output.c:444 #, c-format msgid "write error: stdout" msgstr "грешка при запиÑ: Ñтандартна грешка" #: src/output.c:624 msgid ". Stop.\n" msgstr ". Край.\n" #: src/output.c:658 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" #: src/output.c:667 #, c-format msgid "%s: %s" msgstr "%s: %s" #: src/output.h:62 #, c-format msgid "-O[TYPE] (--output-sync[=TYPE]) is not configured for this build." msgstr "" "опциÑта „-O[ВИД]“/„--output-sync[=ВИД]“ не е зададена за това изграждане" #: src/posixos.c:90 msgid "creating jobs pipe" msgstr "Ñъздаване на програмен канал ÑÑŠÑ Ð·Ð°Ð´Ð°Ñ‡Ð¸" #: src/posixos.c:98 src/posixos.c:251 msgid "duping jobs pipe" msgstr "дублиране на програмен канал ÑÑŠÑ Ð·Ð°Ð´Ð°Ñ‡Ð¸" #: src/posixos.c:104 msgid "init jobserver pipe" msgstr "Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½Ð° канал за Ñървър за задачи" #: src/posixos.c:119 #, c-format msgid "internal error: invalid --jobserver-auth string '%s'" msgstr "ВЪТРЕШÐРГРЕШКÐ: неправилен низ към „--jobserver-auth“: „%s“" #: src/posixos.c:122 #, c-format msgid "Jobserver client (fds %d,%d)\n" msgstr "Клиент за Ñървър за задачи (fds %d,%d)\n" #: src/posixos.c:138 msgid "jobserver pipeline" msgstr "програмен канал на Ñървър за задачи" #: src/posixos.c:186 msgid "write jobserver" msgstr "Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° Ñървър за задачи" #: src/posixos.c:300 #, c-format msgid "job server shut down" msgstr "Ñпиране на Ñървъра за задачи" #: src/posixos.c:303 msgid "pselect jobs pipe" msgstr "грешка в „pselect“ в канала за задачи" #: src/posixos.c:319 src/posixos.c:433 msgid "read jobs pipe" msgstr "грешка при четене в канала за задачи" #: src/read.c:181 #, c-format msgid "Reading makefiles...\n" msgstr "Изчитане на файловете управлÑващи изграждането…\n" #: src/read.c:336 #, c-format msgid "Reading makefile '%s'" msgstr "Изчитане на файла управлÑващ изграждането „%s“" #: src/read.c:338 #, c-format msgid " (no default goal)" msgstr " (нÑма Ñтандартна цел)" #: src/read.c:340 #, c-format msgid " (search path)" msgstr " (търÑене в път)" #: src/read.c:342 #, c-format msgid " (don't care)" msgstr " (без значение)" #: src/read.c:344 #, c-format msgid " (no ~ expansion)" msgstr " (без замеÑтване на „~“)" #: src/read.c:655 #, c-format msgid "Skipping UTF-8 BOM in makefile '%s'\n" msgstr "" "ПреÑкачанe на знака за подредба на байтовете за UTF-8 (BOM) във файла „%s“\n" #: src/read.c:658 #, c-format msgid "Skipping UTF-8 BOM in makefile buffer\n" msgstr "" "ПреÑкачанe на знака за подредба на байтовете за UTF-8 (BOM) в буфера на " "файла управлÑващ изграждането\n" #: src/read.c:787 #, c-format msgid "invalid syntax in conditional" msgstr "неправилен ÑинтакÑÐ¸Ñ Ð½Ð° уÑловен израз" #: src/read.c:960 #, c-format msgid "%s: failed to load" msgstr "%s: не може да Ñе зареди" #: src/read.c:986 #, c-format msgid "recipe commences before first target" msgstr "рецепта почва преди първата цел" #: src/read.c:1035 #, c-format msgid "missing rule before recipe" msgstr "липÑващо правило преди рецепта" #: src/read.c:1136 #, c-format msgid "missing separator (did you mean TAB instead of 8 spaces?)" msgstr "" "липÑва разделител (дали не трÑбва да замените 8 интервала Ñ Ñ‚Ð°Ð±ÑƒÐ»Ð°Ñ‚Ð¾Ñ€?)" #: src/read.c:1138 #, c-format msgid "missing separator" msgstr "липÑва разделител" #: src/read.c:1283 #, c-format msgid "missing target pattern" msgstr "липÑва целеви шаблон" #: src/read.c:1285 #, c-format msgid "multiple target patterns" msgstr "множеÑтво целеви шаблони" #: src/read.c:1289 #, c-format msgid "target pattern contains no '%%'" msgstr "целевиÑÑ‚ шаблон не Ñъдържа „%%“" #: src/read.c:1404 #, c-format msgid "missing 'endif'" msgstr "липÑващ „endif“" #: src/read.c:1443 src/read.c:1488 src/variable.c:1600 #, c-format msgid "empty variable name" msgstr "празно име на променлива" #: src/read.c:1478 #, c-format msgid "extraneous text after 'define' directive" msgstr "излишен текÑÑ‚ Ñлед директива „define“" #: src/read.c:1503 #, c-format msgid "missing 'endef', unterminated 'define'" msgstr "„endef“ липÑва — нÑÐºÐ¾Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð° „define“ не е завършена" #: src/read.c:1531 #, c-format msgid "extraneous text after 'endef' directive" msgstr "излишен текÑÑ‚ Ñлед директива „endef“" #: src/read.c:1603 #, c-format msgid "extraneous text after '%s' directive" msgstr "излишен текÑÑ‚ Ñлед директива „%s“" #: src/read.c:1604 #, c-format msgid "extraneous '%s'" msgstr "излишен „%s“" #: src/read.c:1632 #, c-format msgid "only one 'else' per conditional" msgstr "може да има макÑимално една директива „else“ за уÑловен израз" #: src/read.c:1908 #, c-format msgid "Malformed target-specific variable definition" msgstr "Ðеправилна Ð´ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ Ð½Ð° променлива, завиÑеща от целта" #: src/read.c:1968 #, c-format msgid "prerequisites cannot be defined in recipes" msgstr "изиÑкваниÑта не могат да Ñе дефинират в рецептите" #: src/read.c:1986 #, c-format msgid "grouped targets must provide a recipe" msgstr "целите в група трÑбва да предоÑтавÑÑ‚ рецепта" #: src/read.c:2029 #, c-format msgid "mixed implicit and static pattern rules" msgstr "вградените и правилата ÑÑŠÑ Ñтатични шаблони Ñа ÑмеÑени" #: src/read.c:2052 #, c-format msgid "mixed implicit and normal rules" msgstr "вградените и изричните правила Ñа ÑмеÑени" #: src/read.c:2107 #, c-format msgid "target '%s' doesn't match the target pattern" msgstr "целта „%s“ не Ñъвпада Ñ Ñ†ÐµÐ»Ñ‚Ð° на шаблона" #: src/read.c:2122 src/read.c:2168 #, c-format msgid "target file '%s' has both : and :: entries" msgstr "целевиÑÑ‚ файл „%s“ Ñъдържа запиÑи и Ñ â€ž:“, и Ñ â€ž::“" #: src/read.c:2128 #, c-format msgid "target '%s' given more than once in the same rule" msgstr "целта „%s“ е дадена повече от веднъж в едно правило" #: src/read.c:2138 #, c-format msgid "warning: overriding recipe for target '%s'" msgstr "ПРЕДУПРЕЖДЕÐИЕ: замеÑтване на рецептата за целта „%s“" #: src/read.c:2141 #, c-format msgid "warning: ignoring old recipe for target '%s'" msgstr "ПРЕДУПРЕЖДЕÐИЕ: Ñтарата рецепта за „%s“ Ñе преÑкача" #: src/read.c:2254 #, c-format msgid "*** mixed implicit and normal rules: deprecated syntax" msgstr "••• ÑмеÑване на вградени и обикновени правила: оÑтарÑл ÑинтакÑиÑ" #: src/read.c:2271 #, c-format msgid "warning: overriding group membership for target '%s'" msgstr "ПРЕДУПРЕЖДЕÐИЕ: замеÑтване на групата на целта „%s“" #: src/read.c:2636 #, c-format msgid "warning: NUL character seen; rest of line ignored" msgstr "ПРЕДУПРЕЖДЕÐИЕ: нулев знак NUL, оÑтаналата чаÑÑ‚ на реда Ñе преÑкача" #: src/remake.c:226 #, c-format msgid "Nothing to be done for '%s'." msgstr "ÐÑма нищо за правене за „%s“." #: src/remake.c:227 #, c-format msgid "'%s' is up to date." msgstr "„%s“ нÑма нужда да Ñе обновÑва." #: src/remake.c:323 #, c-format msgid "Pruning file '%s'.\n" msgstr "ОкаÑтрÑне на файл „%s“\n" #: src/remake.c:389 #, c-format msgid "%sNo rule to make target '%s', needed by '%s'%s" msgstr "" "%sÐÑма правило за изграждане на целта „%s“, коÑто е необходима на „%s“%s" #: src/remake.c:399 #, c-format msgid "%sNo rule to make target '%s'%s" msgstr "%sÐÑма правило за изграждане на целта „%s“%s" #: src/remake.c:425 #, c-format msgid "Considering target file '%s'.\n" msgstr "Разглеждане на Ñ†ÐµÐ»ÐµÐ²Ð¸Ñ Ñ„Ð°Ð¹Ð» „%s“\n" #: src/remake.c:432 #, c-format msgid "Recently tried and failed to update file '%s'.\n" msgstr "Скорошен неуÑпешен опит за обновÑване на файла „%s“\n" #: src/remake.c:444 #, c-format msgid "File '%s' was considered already.\n" msgstr "Файлът „%s“ вече е разгледан.\n" #: src/remake.c:454 #, c-format msgid "Still updating file '%s'.\n" msgstr "Ð’Ñе още Ñе обновÑва файл „%s“.\n" #: src/remake.c:457 #, c-format msgid "Finished updating file '%s'.\n" msgstr "Завършване на обновÑването на файл „%s“.\n" #: src/remake.c:486 #, c-format msgid "File '%s' does not exist.\n" msgstr "Файлът „%s“ не ÑъщеÑтвува.\n" #: src/remake.c:494 #, c-format msgid "" "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp" msgstr "" " ••• ПРЕДУПРЕЖДЕÐИЕ: файлът „.LOW_RESOLUTION_TIME“, указващ ниÑка " "разделителна ÑпоÑобноÑÑ‚ на времето „%s“, е Ñ Ð²Ñ€ÐµÐ¼ÐµÐ²Ð¾ клеймо Ñ Ð²Ð¸Ñока " "разделителна ÑпоÑобноÑÑ‚" #: src/remake.c:507 src/remake.c:1039 #, c-format msgid "Found an implicit rule for '%s'.\n" msgstr "Открито е вградено правило за „%s“.\n" #: src/remake.c:509 src/remake.c:1041 #, c-format msgid "No implicit rule found for '%s'.\n" msgstr "Ðе е открито вградено правило за „%s“.\n" #: src/remake.c:515 #, c-format msgid "Using default recipe for '%s'.\n" msgstr "Използване на Ñтандартната рецепта за „%s“.\n" #: src/remake.c:549 src/remake.c:1088 #, c-format msgid "Circular %s <- %s dependency dropped." msgstr "Цикличната завиÑимоÑÑ‚ „%s“ ↠„%s“ Ñе преÑкача." #: src/remake.c:674 #, c-format msgid "Finished prerequisites of target file '%s'.\n" msgstr "ИзиÑкваниÑта за Ñ†ÐµÐ»ÐµÐ²Ð¸Ñ Ñ„Ð°Ð¹Ð» „%s“ Ñа завършени.\n" #: src/remake.c:680 #, c-format msgid "The prerequisites of '%s' are being made.\n" msgstr "ИзиÑкваниÑта на „%s“ Ñе изграждат.\n" #: src/remake.c:694 #, c-format msgid "Giving up on target file '%s'.\n" msgstr "Отказ за изграждане на Ñ†ÐµÐ»ÐµÐ²Ð¸Ñ Ñ„Ð°Ð¹Ð» „%s“.\n" #: src/remake.c:699 #, c-format msgid "Target '%s' not remade because of errors." msgstr "Целта „%s“ не е преизградена поради грешки." #: src/remake.c:751 #, c-format msgid "Prerequisite '%s' is order-only for target '%s'.\n" msgstr "ИзиÑкването „%s“ е Ñамо за поÑледователноÑÑ‚ за целта „%s“.\n" #: src/remake.c:756 #, c-format msgid "Prerequisite '%s' of target '%s' does not exist.\n" msgstr "ИзиÑкването „%s“ на целта „%s“ не ÑъщеÑтвува.\n" #: src/remake.c:761 #, c-format msgid "Prerequisite '%s' is newer than target '%s'.\n" msgstr "ИзиÑкването „%s“ е по-ново от целта „%s“.\n" #: src/remake.c:764 #, c-format msgid "Prerequisite '%s' is older than target '%s'.\n" msgstr "ИзиÑкването „%s“ е по-Ñтаро от целта „%s“.\n" #: src/remake.c:782 #, c-format msgid "Target '%s' is double-colon and has no prerequisites.\n" msgstr "Целта е „%s“ е „::“ и нÑма изиÑкваниÑ.\n" #: src/remake.c:789 #, c-format msgid "No recipe for '%s' and no prerequisites actually changed.\n" msgstr "ÐÑма рецепта за „%s“ и никое от изиÑкваниÑта не е променено.\n" #: src/remake.c:794 #, c-format msgid "Making '%s' due to always-make flag.\n" msgstr "„%s“ Ñе изгражда наново поради флаг за изрично преизграждане.\n" #: src/remake.c:802 #, c-format msgid "No need to remake target '%s'" msgstr "ÐÑма нужда за преизграждане на целта „%s“" #: src/remake.c:804 #, c-format msgid "; using VPATH name '%s'" msgstr "; използва Ñе име от „VPATH“ „%s“" #: src/remake.c:824 #, c-format msgid "Must remake target '%s'.\n" msgstr "Целта „%s“ трÑбва да Ñе преизгради.\n" #: src/remake.c:830 #, c-format msgid " Ignoring VPATH name '%s'.\n" msgstr " ПреÑкачане на името от „VPATH“ „%s“.\n" #: src/remake.c:839 #, c-format msgid "Recipe of '%s' is being run.\n" msgstr "Рецептата за „%s“ в момента Ñе изпълнÑва.\n" #: src/remake.c:846 #, c-format msgid "Failed to remake target file '%s'.\n" msgstr "ÐеуÑпешно преизграждане на Ñ†ÐµÐ»ÐµÐ²Ð¸Ñ Ñ„Ð°Ð¹Ð» „%s“\n" #: src/remake.c:849 #, c-format msgid "Successfully remade target file '%s'.\n" msgstr "УÑпешно преизграждане на Ñ†ÐµÐ»ÐµÐ²Ð¸Ñ Ñ„Ð°Ð¹Ð» „%s“\n" #: src/remake.c:852 #, c-format msgid "Target file '%s' needs to be remade under -q.\n" msgstr "ЦелевиÑÑ‚ файл „%s“ трÑбва да Ñе преизгради при „-q“.\n" #: src/remake.c:1047 #, c-format msgid "Using default commands for '%s'.\n" msgstr "Използват Ñе Ñтандартни команди за „%s“.\n" #: src/remake.c:1422 #, c-format msgid "Warning: File '%s' has modification time %s s in the future" msgstr "ПРЕДУПРЕЖДЕÐИЕ: файлът „%s“ е Ñ Ð²Ñ€ÐµÐ¼Ðµ на промÑна %s Ñек. в бъдещето" #: src/remake.c:1662 #, c-format msgid ".LIBPATTERNS element '%s' is not a pattern" msgstr "Елементът „%s“ за „.LIBPATTERNS“ не е шаблон" #: src/remote-cstms.c:122 #, c-format msgid "Customs won't export: %s\n" msgstr "Модулът нÑма да Ñе изнеÑе: %s\n" #: src/rule.c:289 #, c-format msgid "warning: ignoring prerequisites on suffix rule definition" msgstr "" #: src/rule.c:530 msgid "" "\n" "# Implicit Rules" msgstr "" "\n" "# Вградени правила" #: src/rule.c:545 msgid "" "\n" "# No implicit rules." msgstr "" "\n" "# ÐÑма вградени правила." #: src/rule.c:548 #, c-format msgid "" "\n" "# %u implicit rules, %u (%.1f%%) terminal." msgstr "" "\n" "# %u вградени правила, %u (%.1f%%) крайни." #: src/rule.c:557 #, c-format msgid "BUG: num_pattern_rules is wrong! %u != %u" msgstr "" "ПРОГРÐМÐРГРЕШКÐ: „num_pattern_rules“ върна неправилен резултат! %u != %u" #: src/signame.c:84 msgid "unknown signal" msgstr "непознат Ñигнал" #: src/signame.c:92 msgid "Hangup" msgstr "ПрекъÑване на връзката" #: src/signame.c:95 msgid "Interrupt" msgstr "ПрекъÑване" #: src/signame.c:98 msgid "Quit" msgstr "Спиране" #: src/signame.c:101 msgid "Illegal Instruction" msgstr "Ðеправилна инÑтрукциÑ" #: src/signame.c:104 msgid "Trace/breakpoint trap" msgstr "ПрекъÑване за траÑиране" #: src/signame.c:109 msgid "Aborted" msgstr "ПреуÑтановÑване" #: src/signame.c:112 msgid "IOT trap" msgstr "ПреуÑтановÑване (IOT)" #: src/signame.c:115 msgid "EMT trap" msgstr "Емулирана инÑтрукциÑ" #: src/signame.c:118 msgid "Floating point exception" msgstr "Изключение от плаваща запетаÑ" #: src/signame.c:121 msgid "Killed" msgstr "Убит" #: src/signame.c:124 msgid "Bus error" msgstr "Грешка в шината" #: src/signame.c:127 msgid "Segmentation fault" msgstr "Грешка в разделÑнето" #: src/signame.c:130 msgid "Bad system call" msgstr "Грешно ÑиÑтемно извикване" #: src/signame.c:133 msgid "Broken pipe" msgstr "ПрекъÑнат програмен канал" #: src/signame.c:136 msgid "Alarm clock" msgstr "Ðларма" #: src/signame.c:139 msgid "Terminated" msgstr "Прекратен" #: src/signame.c:142 msgid "User defined signal 1" msgstr "ПотребителÑки Ñигнал 1" #: src/signame.c:145 msgid "User defined signal 2" msgstr "ПотребителÑки Ñигнал 2" #: src/signame.c:150 src/signame.c:153 msgid "Child exited" msgstr "ПреуÑтановен дъщерен процеÑ" #: src/signame.c:156 msgid "Power failure" msgstr "Проблем в захранването" #: src/signame.c:159 msgid "Stopped" msgstr "СпрÑн" #: src/signame.c:162 msgid "Stopped (tty input)" msgstr "Спиране (вход от tty)" #: src/signame.c:165 msgid "Stopped (tty output)" msgstr "Спиране (изход към tty)" #: src/signame.c:168 msgid "Stopped (signal)" msgstr "СпрÑн (Ñигнал)" #: src/signame.c:171 msgid "CPU time limit exceeded" msgstr "Ðадвишаване на процеÑорното време" #: src/signame.c:174 msgid "File size limit exceeded" msgstr "Ðадвишаване на размера на файл" #: src/signame.c:177 msgid "Virtual timer expired" msgstr "Изтекъл виртуален таймер" #: src/signame.c:180 msgid "Profiling timer expired" msgstr "Изтекъл профилиращ таймер" #: src/signame.c:186 msgid "Window changed" msgstr "Преоразмерен прозорец" #: src/signame.c:189 msgid "Continued" msgstr "Продължен" #: src/signame.c:192 msgid "Urgent I/O condition" msgstr "Спешно вх./изх. ÑÑŠÑтоÑние" #: src/signame.c:199 src/signame.c:208 msgid "I/O possible" msgstr "Възможен вх./изх." #: src/signame.c:202 msgid "SIGWIND" msgstr "Преоразмерен прозорец" #: src/signame.c:205 msgid "SIGPHONE" msgstr "ПромÑна на ÑÑŠÑтоÑнието на линиÑта" #: src/signame.c:211 msgid "Resource lost" msgstr "Загубен реÑурÑ" #: src/signame.c:214 msgid "Danger signal" msgstr "Сигнал за опаÑноÑÑ‚" #: src/signame.c:217 msgid "Information request" msgstr "ЗаÑвка за информациÑ" #: src/signame.c:220 msgid "Floating point co-processor not available" msgstr "ЛипÑва копроцеÑор за чиÑла Ñ Ð¿Ð»Ð°Ð²Ð°Ñ‰Ð° запетаÑ" #: src/strcache.c:274 #, c-format msgid "" "\n" "%s No strcache buffers\n" msgstr "" "\n" "%s ÐÑма буфери за „strcache“\n" #: src/strcache.c:304 #, c-format msgid "" "\n" "%s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu " "B\n" msgstr "" "\n" "%s буфери за кеша за низове: %lu (%lu) / низове = %lu / Ñъхранение = %lu B / " "Ñредно = %lu B\n" #: src/strcache.c:308 #, c-format msgid "" "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B\n" msgstr "" "%s текущ буфер: размер = %hu B / ползвано = %hu B / брой = %hu / Ñредно = %u " "B\n" #: src/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" #: src/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" #: src/strcache.c:326 #, c-format msgid "" "\n" "%s strcache performance: lookups = %lu / hit rate = %lu%%\n" msgstr "" "\n" "%s производителноÑÑ‚ на кеша за низове: търÑÐµÐ½Ð¸Ñ = %lu / Ð½Ð°Ð¼Ð¸Ñ€Ð°Ð½Ð¸Ñ = %lu%%\n" #: src/strcache.c:328 msgid "" "# hash-table stats:\n" "# " msgstr "" "# ÑтатиÑтика на речника:\n" "# " #: src/variable.c:1653 msgid "automatic" msgstr "автоматично" #: src/variable.c:1656 msgid "default" msgstr "Ñтандартно" #: src/variable.c:1659 msgid "environment" msgstr "Ñреда" #: src/variable.c:1662 msgid "makefile" msgstr "файл управлÑващ изграждането" #: src/variable.c:1665 msgid "environment under -e" msgstr "обкръжението е твърде голÑмо за „exec“" #: src/variable.c:1668 msgid "command line" msgstr "команден ред" #: src/variable.c:1671 msgid "'override' directive" msgstr "директива „override“" #: src/variable.c:1682 #, c-format msgid " (from '%s', line %lu)" msgstr " (от „%s“, ред %lu)" #: src/variable.c:1745 msgid "# variable set hash-table stats:\n" msgstr "# ÑтатиÑтика за множеÑтвото на променливите в речника:\n" #: src/variable.c:1756 msgid "" "\n" "# Variables\n" msgstr "" "\n" "# Променливи\n" #: src/variable.c:1760 msgid "" "\n" "# Pattern-specific Variable Values" msgstr "" "\n" "# СтойноÑти на променливи, завиÑещи от шаблона" #: src/variable.c:1774 msgid "" "\n" "# No pattern-specific variable values." msgstr "" "\n" "# ÐÑма ÑтойноÑти на променливи, завиÑещи от шаблона" #: src/variable.c:1776 #, c-format msgid "" "\n" "# %u pattern-specific variable values" msgstr "" "\n" "# %u ÑтойноÑти на променливи, завиÑещи от шаблона" #: src/variable.h:229 #, c-format msgid "warning: undefined variable '%.*s'" msgstr "ПРЕДУПРЕЖДЕÐИЕ: недефинирана променлива „%.*s“" #: src/vmsfunctions.c:91 #, c-format msgid "sys$search() failed with %d\n" msgstr "„sys$search()“ завърши неуÑпешно Ñ ÐºÐ¾Ð´ %d\n" #: src/vmsjobs.c:244 #, c-format msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n" msgstr "" "- ПРЕДУПРЕЖДЕÐИЕ, вероÑтно трÑбва отново да включите управлението на CTRL-Y " "от „DCL“.\n" #: src/vmsjobs.c:681 #, c-format msgid "BUILTIN CD %s\n" msgstr "ВГРÐДЕÐРКОМÐÐДР„CD“ %s\n" #: src/vmsjobs.c:1224 #, c-format msgid "DCL: %s\n" msgstr "„DCL“: %s\n" #: src/vmsjobs.c:1284 #, c-format msgid "Append output to %s\n" msgstr "ДобавÑне на изхода към „%s“\n" #: src/vmsjobs.c:1309 #, c-format msgid "Append %.*s and cleanup\n" msgstr "ДобавÑне на %.*s и изчиÑтване\n" #: src/vmsjobs.c:1322 #, c-format msgid "Executing %s instead\n" msgstr "„%s“ Ñе изпълнÑва вмеÑто\n" #: src/vpath.c:603 msgid "" "\n" "# VPATH Search Paths\n" msgstr "" "\n" "# Пътища за търÑене „VPATH“\n" #: src/vpath.c:620 msgid "# No 'vpath' search paths." msgstr "# ÐÑма пътища за търÑене във „VPATH“" #: src/vpath.c:622 #, c-format msgid "" "\n" "# %u 'vpath' search paths.\n" msgstr "" "\n" "# %u пътища за търÑене във „VPATH“\n" #: src/vpath.c:625 msgid "" "\n" "# No general ('VPATH' variable) search path." msgstr "" "\n" "# ÐÑма общ път (във „VPATH“) за търÑене" #: src/vpath.c:631 msgid "" "\n" "# General ('VPATH' variable) search path:\n" "# " msgstr "" "\n" "# Общ път за търÑене (във „VPATH“)\n" "# " #: src/w32/w32os.c:44 #, c-format msgid "Jobserver slots limited to %d\n" msgstr "Сървърът за задачи приема макÑимум %d заданиÑ\n" #: src/w32/w32os.c:60 #, c-format msgid "creating jobserver semaphore: (Error %ld: %s)" msgstr "Ñъздаване на Ñемафор за Ñървър за задачи: (грешка %ld: %s)" #: src/w32/w32os.c:79 #, c-format msgid "" "internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)" msgstr "" "ВЪТРЕШÐРГРЕШКÐ: Ñемафорът на Ñървъра за задачи не може да Ñе отвори „%s“: " "(грешка %ld: %s)" #: src/w32/w32os.c:82 #, c-format msgid "Jobserver client (semaphore %s)\n" msgstr "Клиент на Ñървър за задачи (Ñемафор %s)\n" #: src/w32/w32os.c:123 #, c-format msgid "release jobserver semaphore: (Error %ld: %s)" msgstr "оÑвобождаване на Ñемафора на Ñървъра за задачи: (грешка %ld: %s)" #: src/w32/w32os.c:194 #, c-format msgid "semaphore or child process wait: (Error %ld: %s)" msgstr "изчакване на Ñемафор или дъщерен процеÑ: (Грешка %ld: %s)" make-4.3/po/nl.po0000644000175000017500000016532013611136531010614 00000000000000# Dutch translations for GNU make. # Copyright (C) 2020 Free Software Foundation, Inc. # This file is distributed under the same license as the make package. # # "On the plus side, Miss Vernon was outstandingly good-looking." # # Taco Witte , 2004. # Benno Schulenberg , 2005, 2006, 2007, 2010. # Benno Schulenberg , 2013, 2014, 2016, 2019, 2020. msgid "" msgstr "" "Project-Id-Version: make-4.2.93\n" "Report-Msgid-Bugs-To: bug-make@gnu.org\n" "POT-Creation-Date: 2020-01-19 15:34-0500\n" "PO-Revision-Date: 2020-01-03 16:48+0100\n" "Last-Translator: Benno Schulenberg \n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/ar.c:46 #, c-format msgid "attempt to use unsupported feature: '%s'" msgstr "poging tot gebruik van niet-ondersteunde functie: '%s'" #: src/ar.c:123 #, c-format msgid "touch archive member is not available on VMS" msgstr "het 'touchen' van een archiefonderdeel is niet mogelijk op VMS" #: src/ar.c:147 #, c-format msgid "touch: Archive '%s' does not exist" msgstr "touch: archief '%s' bestaat niet" #: src/ar.c:150 #, c-format msgid "touch: '%s' is not a valid archive" msgstr "touch: '%s' is geen geldig archief" #: src/ar.c:157 #, c-format msgid "touch: Member '%s' does not exist in '%s'" msgstr "touch: onderdeel '%s' bestaat niet in '%s'" #: src/ar.c:164 #, c-format msgid "touch: Bad return code from ar_member_touch on '%s'" msgstr "touch: ar_member_touch() van '%s' is mislukt" #: src/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" #: src/arscan.c:236 #, c-format msgid "lbr$ini_control() failed with status = %d" msgstr "lbr$ini_control() is mislukt, afsluitwaarde = %d" #: src/arscan.c:261 #, c-format msgid "unable to open library '%s' to lookup member status %d" msgstr "" "kan bibliotheek '%s' niet openen om status van onderdeel %d op te zoeken" #: src/arscan.c:944 #, c-format msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n" msgstr "Onderdeel '%s'%s: %ld bytes bij %ld (%ld).\n" #: src/arscan.c:945 msgid " (name might be truncated)" msgstr " (naam kan afgekapt zijn)" #: src/arscan.c:947 #, c-format msgid " Date %s" msgstr " Datum %s" #: src/arscan.c:948 #, c-format msgid " uid = %d, gid = %d, mode = 0%o.\n" msgstr " uid = %d, gid = %d, modus = 0%o.\n" #: src/commands.c:403 #, c-format msgid "Recipe has too many lines (%ud)" msgstr "Recept bevat te veel regels (%ud)" #: src/commands.c:504 msgid "*** Break.\n" msgstr "*** Afgebroken.\n" #: src/commands.c:628 #, c-format msgid "*** [%s] Archive member '%s' may be bogus; not deleted" msgstr "*** [%s] Archiefonderdeel '%s' kan onecht zijn; niet verwijderd" #: src/commands.c:632 #, c-format msgid "*** Archive member '%s' may be bogus; not deleted" msgstr "*** Archiefonderdeel '%s' kan onecht zijn; niet verwijderd" #: src/commands.c:646 #, c-format msgid "*** [%s] Deleting file '%s'" msgstr "*** [%s] Verwijderen van bestand '%s'" #: src/commands.c:648 #, c-format msgid "*** Deleting file '%s'" msgstr "*** Verwijderen van bestand '%s'" #: src/commands.c:684 msgid "# recipe to execute" msgstr "# uit te voeren recept" #: src/commands.c:687 msgid " (built-in):" msgstr " (ingebouwd):" #: src/commands.c:689 #, c-format msgid " (from '%s', line %lu):\n" msgstr " (uit '%s', regel %lu):\n" #: src/dir.c:1073 msgid "" "\n" "# Directories\n" msgstr "" "\n" "# Mappen\n" #: src/dir.c:1085 #, c-format msgid "# %s: could not be stat'd.\n" msgstr "# kan status van %s niet opvragen.\n" #: src/dir.c:1089 msgid "# %s (key %s, mtime %I64u): could not be opened.\n" msgstr "# %s (sleutel %s, wijzigingstijd %I64u): kan niet worden geopend.\n" #: src/dir.c:1094 #, 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" #: src/dir.c:1099 #, c-format msgid "# %s (device %ld, inode %ld): could not be opened.\n" msgstr "# %s (apparaat %ld, inode %ld): kan niet worden geopend.\n" #: src/dir.c:1126 msgid "# %s (key %s, mtime %I64u): " msgstr "# %s (sleutel %s, wijzigingstijd %I64u): " #: src/dir.c:1131 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): " msgstr "# %s (apparaat %d, inode [%d,%d,%d]): " #: src/dir.c:1136 #, c-format msgid "# %s (device %ld, inode %ld): " msgstr "# %s (apparaat %ld, inode %ld): " #: src/dir.c:1142 src/dir.c:1163 msgid "No" msgstr "Geen" #: src/dir.c:1145 src/dir.c:1166 msgid " files, " msgstr " bestanden, " #: src/dir.c:1147 src/dir.c:1168 msgid "no" msgstr "geen" #: src/dir.c:1150 msgid " impossibilities" msgstr " onmogelijkheden" #: src/dir.c:1154 msgid " so far." msgstr " tot nu toe." #: src/dir.c:1171 #, c-format msgid " impossibilities in %lu directories.\n" msgstr " onmogelijkheden in %lu mappen.\n" #: src/expand.c:125 #, c-format msgid "Recursive variable '%s' references itself (eventually)" msgstr "Recursieve variabele '%s' verwijst naar zichzelf (uiteindelijk)" #: src/expand.c:271 #, c-format msgid "unterminated variable reference" msgstr "onafgemaakte verwijzing naar variabele" #: src/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," #: src/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," #: src/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'." #: src/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'." #: src/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'" #: src/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'" #: src/file.c:408 #, c-format msgid "*** Deleting intermediate file '%s'" msgstr "*** Verwijderen van tussentijds bestand '%s'" #: src/file.c:412 #, c-format msgid "Removing intermediate files...\n" msgstr "Verwijderen van tussentijdse bestanden...\n" #: src/file.c:872 msgid "Current time" msgstr "Huidige tijd" #: src/file.c:876 #, c-format msgid "%s: Timestamp out of range; substituting %s" msgstr "%s: Tijdsstempel ligt buiten bereik; wordt vervangen door %s" #: src/file.c:1016 msgid "# Not a target:" msgstr "# Is geen doel:" #: src/file.c:1021 msgid "# Precious file (prerequisite of .PRECIOUS)." msgstr "# Waardevol bestand (vereiste van .PRECIOUS)." #: src/file.c:1023 msgid "# Phony target (prerequisite of .PHONY)." msgstr "# Nepdoel (vereiste van .PHONY)." #: src/file.c:1025 msgid "# Command line target." msgstr "# Doel afkomstig van opdrachtregel." #: src/file.c:1027 msgid "# A default, MAKEFILES, or -include/sinclude makefile." msgstr "" "# Een standaard Makefile, of eentje via MAKEFILES of '-include/sinclude'." #: src/file.c:1029 msgid "# Builtin rule" msgstr "# Ingebouwde regel" #: src/file.c:1031 msgid "# Implicit rule search has been done." msgstr "# Impliciete regel-zoekopdracht is uitgevoerd." #: src/file.c:1032 msgid "# Implicit rule search has not been done." msgstr "# Impliciete regel-zoekopdracht is niet uitgevoerd." #: src/file.c:1034 #, c-format msgid "# Implicit/static pattern stem: '%s'\n" msgstr "# Impliciete/statische patroonstam: '%s'\n" #: src/file.c:1036 msgid "# File is an intermediate prerequisite." msgstr "# Bestand is een tussentijds vereiste." #: src/file.c:1040 msgid "# Also makes:" msgstr "# Maakt ook:" #: src/file.c:1046 msgid "# Modification time never checked." msgstr "# Wijzigingstijd is nooit gecontroleerd." #: src/file.c:1048 msgid "# File does not exist." msgstr "# Bestand bestaat niet." #: src/file.c:1050 msgid "# File is very old." msgstr "# Bestand is erg oud." #: src/file.c:1055 #, c-format msgid "# Last modified %s\n" msgstr "# Laatst gewijzigd %s\n" #: src/file.c:1058 msgid "# File has been updated." msgstr "# Bestand is bijgewerkt." #: src/file.c:1058 msgid "# File has not been updated." msgstr "# Bestand is niet bijgewerkt." #: src/file.c:1062 msgid "# Recipe currently running (THIS IS A BUG)." msgstr "# Nog lopend recept (DIT IS EEN PROGRAMMAFOUT)." #: src/file.c:1065 msgid "# Dependencies recipe running (THIS IS A BUG)." msgstr "# Nog lopende receptafhankelijkheden (DIT IS EEN PROGRAMMAFOUT)." #: src/file.c:1074 msgid "# Successfully updated." msgstr "# Met succes bijgewerkt." #: src/file.c:1078 msgid "# Needs to be updated (-q is set)." msgstr "# Moet worden bijgewerkt ('-q' is ingesteld)." #: src/file.c:1081 msgid "# Failed to be updated." msgstr "# Bijwerken is mislukt." #: src/file.c:1086 msgid "# Invalid value in 'command_state' member!" msgstr "# Ongeldige waarde in 'command_state'-onderdeel!" #: src/file.c:1105 msgid "" "\n" "# Files" msgstr "" "\n" "# Bestanden" #: src/file.c:1109 msgid "" "\n" "# files hash-table stats:\n" "# " msgstr "" "\n" "# hashtabel-statistieken van bestanden:\n" "# " #: src/file.c:1119 #, c-format msgid "%s: Field '%s' not cached: %s" msgstr "%s: Veld '%s' is niet gecached: %s" #: src/function.c:794 msgid "non-numeric first argument to 'word' function" msgstr "niet-numeriek eerste argument van 'word'-functie" #: src/function.c:799 #, c-format msgid "first argument to 'word' function must be greater than 0" msgstr "eerste argument van 'word'-functie moet groter zijn dan 0" #: src/function.c:819 msgid "non-numeric first argument to 'wordlist' function" msgstr "niet-numeriek eerste argument van 'wordlist'-functie" #: src/function.c:821 msgid "non-numeric second argument to 'wordlist' function" msgstr "niet-numeriek tweede argument van 'wordlist'-functie" #: src/function.c:1533 #, c-format msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n" msgstr "windows32_openpipe(): DuplicateHandle(In) is mislukt (e=%ld)\n" #: src/function.c:1557 #, c-format msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n" msgstr "windows32_openpipe(): DuplicateHandle(Err) is mislukt (e=%ld)\n" #: src/function.c:1564 #, c-format msgid "CreatePipe() failed (e=%ld)\n" msgstr "CreatePipe() is mislukt (e=%ld)\n" #: src/function.c:1572 #, c-format msgid "windows32_openpipe(): process_init_fd() failed\n" msgstr "windows32_openpipe(): process_init_fd() is mislukt\n" #: src/function.c:1857 #, c-format msgid "Cleaning up temporary batch file %s\n" msgstr "Opschonen van tijdelijk batch-bestand %s\n" #: src/function.c:2230 src/function.c:2255 #, c-format msgid "file: missing filename" msgstr "file: ontbrekende bestandsnaam" #: src/function.c:2234 src/function.c:2265 #, c-format msgid "open: %s: %s" msgstr "open(): %s: %s" #: src/function.c:2242 #, c-format msgid "write: %s: %s" msgstr "write(): %s: %s" #: src/function.c:2245 src/function.c:2282 #, c-format msgid "close: %s: %s" msgstr "close(): %s: %s" #: src/function.c:2258 #, c-format msgid "file: too many arguments" msgstr "file: te veel argumenten" #: src/function.c:2277 #, c-format msgid "read: %s: %s" msgstr "read(): %s: %s" #: src/function.c:2290 #, c-format msgid "file: invalid file operation: %s" msgstr "file: ongeldige bestandsbewerking: %s" #: src/function.c:2405 #, c-format msgid "insufficient number of arguments (%d) to function '%s'" msgstr "onvoldoende aantal argumenten (%d) voor functie '%s'" #: src/function.c:2417 #, c-format msgid "unimplemented on this platform: function '%s'" msgstr "niet-geïmplementeerd op dit platform: functie '%s'" #: src/function.c:2483 #, c-format msgid "unterminated call to function '%s': missing '%c'" msgstr "onafgemaakte aanroep van functie '%s': '%c' ontbreekt" #: src/function.c:2667 #, c-format msgid "Empty function name" msgstr "Lege functienaam" #: src/function.c:2669 #, c-format msgid "Invalid function name: %s" msgstr "Ongeldige functienaam: %s" #: src/function.c:2671 #, c-format msgid "Function name too long: %s" msgstr "Functienaam is te lang: %s" #: src/function.c:2674 #, c-format msgid "Invalid minimum argument count (%u) for function %s" msgstr "Ongeldig minimumaantal argumenten (%u) voor functie %s" #: src/function.c:2677 #, c-format msgid "Invalid maximum argument count (%u) for function %s" msgstr "Ongeldig maximumaantal argumenten (%u) voor functie %s" #: src/getopt.c:659 #, c-format msgid "%s: option '%s' is ambiguous\n" msgstr "%s: optie '%s' is niet eenduidig\n" #: src/getopt.c:683 #, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s: optie '--%s' staat geen argument toe\n" #: src/getopt.c:688 #, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s: optie '%c%s' staat geen argument toe\n" #: src/getopt.c:705 src/getopt.c:878 #, c-format msgid "%s: option '%s' requires an argument\n" msgstr "%s: optie '%s' vereist een argument\n" #: src/getopt.c:734 #, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s: onbekende optie '--%s'\n" #: src/getopt.c:738 #, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s: onbekende optie '%c%s'\n" #: src/getopt.c:764 #, c-format msgid "%s: illegal option -- %c\n" msgstr "%s: ongeldige optie -- %c\n" #: src/getopt.c:767 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s: ongeldige optie -- %c\n" #: src/getopt.c:797 src/getopt.c:927 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: optie vereist een argument -- %c\n" #: src/getopt.c:844 #, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s: optie '-W %s' is niet eenduidig\n" #: src/getopt.c:862 #, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s: optie '-W %s' staat geen argument toe\n" #: src/guile.c:58 #, c-format msgid "guile: Expanding '%s'\n" msgstr "guile: Expanderen van '%s'\n" #: src/guile.c:74 #, c-format msgid "guile: Evaluating '%s'\n" msgstr "guile: Evalueren van '%s'\n" #: src/hash.c:50 #, c-format msgid "can't allocate %lu bytes for hash table: memory exhausted" msgstr "" "kan %lu bytes voor hashtabel niet reserveren: onvoldoende geheugen " "beschikbaar" #: src/hash.c:280 #, c-format msgid "Load=%lu/%lu=%.0f%%, " msgstr "Belasting=%lu/%lu=%.0f%%, " #: src/hash.c:282 #, c-format msgid "Rehash=%u, " msgstr "Herhash=%u, " #: src/hash.c:283 #, c-format msgid "Collisions=%lu/%lu=%.0f%%" msgstr "Botsingen=%lu/%lu=%.0f%%" #: src/implicit.c:38 #, c-format msgid "Looking for an implicit rule for '%s'.\n" msgstr "Zoeken naar impliciete regel voor '%s'.\n" #: src/implicit.c:54 #, c-format msgid "Looking for archive-member implicit rule for '%s'.\n" msgstr "Zoeken naar archiefonderdeel-impliciete regel voor '%s'.\n" #: src/implicit.c:311 #, c-format msgid "Avoiding implicit rule recursion.\n" msgstr "Impliciete regelrecursie wordt ontweken.\n" #: src/implicit.c:484 #, c-format msgid "Stem too long: '%s%.*s'.\n" msgstr "Stam is te lang: '%s%.*s'.\n" #: src/implicit.c:490 #, c-format msgid "Trying pattern rule with stem '%.*s'.\n" msgstr "Patroonregel wordt geprobeerd met stam '%.*s'.\n" #: src/implicit.c:717 #, c-format msgid "Rejecting impossible rule prerequisite '%s'.\n" msgstr "Onmogelijke regelvereiste '%s' wordt verworpen.\n" #: src/implicit.c:718 #, c-format msgid "Rejecting impossible implicit prerequisite '%s'.\n" msgstr "Onmogelijke impliciete vereiste '%s' wordt verworpen.\n" #: src/implicit.c:732 #, c-format msgid "Trying rule prerequisite '%s'.\n" msgstr "Proberen van regelvereiste '%s'.\n" #: src/implicit.c:733 #, c-format msgid "Trying implicit prerequisite '%s'.\n" msgstr "Proberen van impliciete vereiste '%s'.\n" #: src/implicit.c:772 #, c-format msgid "Found prerequisite '%s' as VPATH '%s'\n" msgstr "Vereiste '%s' gevonden als VPATH '%s'.\n" #: src/implicit.c:786 #, c-format msgid "Looking for a rule with intermediate file '%s'.\n" msgstr "Zoeken naar een regel met tussentijds bestand '%s'.\n" #: src/job.c:370 msgid "Cannot create a temporary file\n" msgstr "Kan geen tijdelijk bestand aanmaken\n" #: src/job.c:548 msgid " (core dumped)" msgstr " (geheugendump gemaakt)" #: src/job.c:553 msgid " (ignored)" msgstr " (genegeerd)" #: src/job.c:557 src/job.c:1892 msgid "" msgstr "" #: src/job.c:573 #, c-format msgid "%s[%s: %s] Error %d%s" msgstr "%s[%s: %s] Fout %d%s" #: src/job.c:662 #, c-format msgid "*** Waiting for unfinished jobs...." msgstr "*** Wachten op onvoltooide taken..." #: src/job.c:704 #, c-format msgid "Live child %p (%s) PID %s %s\n" msgstr "Levend dochterproces %p (%s) PID %s %s\n" #: src/job.c:706 src/job.c:900 src/job.c:1072 src/job.c:1644 #, c-format msgid " (remote)" msgstr " (ginds)" #: src/job.c:898 #, c-format msgid "Reaping winning child %p PID %s %s\n" msgstr "Beëindigen van winnend dochterproces %p PID %s %s\n" #: src/job.c:899 #, c-format msgid "Reaping losing child %p PID %s %s\n" msgstr "Beëindigen van verliezend dochterproces %p PID %s %s\n" #: src/job.c:950 #, c-format msgid "Cleaning up temp batch file %s\n" msgstr "Opschonen van tijdelijk batch-bestand %s\n" #: src/job.c:956 #, c-format msgid "Cleaning up temp batch file %s failed (%d)\n" msgstr "Opschonen van tijdelijk batch-bestand %s is mislukt (%d)\n" #: src/job.c:1071 #, c-format msgid "Removing child %p PID %s%s from chain.\n" msgstr "Verwijderen van dochterproces %p PID %s%s uit de ketting.\n" #: src/job.c:1120 #, c-format msgid "Released token for child %p (%s).\n" msgstr "Token vrijgegeven voor dochterproces %p (%s).\n" #: src/job.c:1575 src/job.c:2487 #, c-format msgid "process_easy() failed to launch process (e=%ld)\n" msgstr "process_easy() kan geen proces starten (e=%ld)\n" #: src/job.c:1579 src/job.c:2491 #, c-format msgid "" "\n" "Counted %d args in failed launch\n" msgstr "" "\n" "%d argumenten geteld bij mislukte start\n" #: src/job.c:1642 #, 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" #: src/job.c:1875 #, c-format msgid "Obtained token for child %p (%s).\n" msgstr "Token verkregen voor dochterproces %p (%s).\n" #: src/job.c:1902 #, c-format msgid "%s: target '%s' does not exist" msgstr "%s: doel '%s' bestaat niet" #: src/job.c:1905 #, c-format msgid "%s: update target '%s' due to: %s" msgstr "%s: bijwerken van doel '%s' vanwege: %s" #: src/job.c:2108 #, c-format msgid "cannot enforce load limits on this operating system" msgstr "kan belastingsgrenzen niet afdwingen op dit besturingssysteem" #: src/job.c:2110 msgid "cannot enforce load limit: " msgstr "kan belastingsgrens niet afdwingen: " #: src/job.c:2200 #, c-format msgid "no more file handles: could not duplicate stdin\n" msgstr "" "geen bestandshandvatten meer beschikbaar: kan standaardinvoer niet " "dupliceren\n" #: src/job.c:2212 #, c-format msgid "no more file handles: could not duplicate stdout\n" msgstr "" "geen bestandshandvatten meer beschikbaar: kan standaarduitvoer niet " "dupliceren\n" #: src/job.c:2226 #, c-format msgid "no more file handles: could not duplicate stderr\n" msgstr "" "geen bestandshandvatten meer beschikbaar: kan standaardfoutuitvoer niet " "dupliceren\n" #: src/job.c:2241 #, c-format msgid "Could not restore stdin\n" msgstr "Kan standaardinvoer niet herstellen\n" #: src/job.c:2249 #, c-format msgid "Could not restore stdout\n" msgstr "Kan standaarduitvoer niet herstellen\n" #: src/job.c:2257 #, c-format msgid "Could not restore stderr\n" msgstr "Kan standaardfoutuitvoer niet herstellen\n" #: src/job.c:2520 #, 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" #: src/job.c:2623 #, c-format msgid "spawnvpe: environment space might be exhausted" msgstr "spawnvpe: mogelijk geen omgevingsruimte meer beschikbaar" #: src/job.c:2862 #, c-format msgid "$SHELL changed (was '%s', now '%s')\n" msgstr "$SHELL is gewijzigd (was '%s', is nu '%s')\n" #: src/job.c:3300 src/job.c:3485 #, c-format msgid "Creating temporary batch file %s\n" msgstr "Maken van tijdelijk batch-bestand %s\n" #: src/job.c:3308 #, c-format msgid "" "Batch file contents:\n" "\t@echo off\n" msgstr "" "Inhoud van batch-bestand:\n" "\t@echo off\n" #: src/job.c:3497 #, c-format msgid "" "Batch file contents:%s\n" "\t%s\n" msgstr "" "Inhoud van batch-bestand:%s\n" "\t%s\n" #: src/job.c:3605 #, 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" #: src/load.c:60 #, c-format msgid "Failed to open global symbol table: %s" msgstr "Openen van globale symbolentabel is mislukt: %s" #: src/load.c:97 #, c-format msgid "Loaded object %s is not declared to be GPL compatible" msgstr "Geladen object %s is niet gedeclareerd als GPL-compatibel" #: src/load.c:104 #, c-format msgid "Failed to load symbol %s from %s: %s" msgstr "Laden van symbool %s uit %s is mislukt: %s" #: src/load.c:149 #, c-format msgid "Empty symbol name for load: %s" msgstr "Lege symboolnaam om te laden: %s" #: src/load.c:204 #, c-format msgid "Loading symbol %s from %s\n" msgstr "Laden van symbool %s uit %s\n" #: src/load.c:256 #, c-format msgid "The 'load' operation is not supported on this platform." msgstr "De 'load'-operatie wordt op dit platform niet ondersteund." #: src/main.c:335 msgid "Options:\n" msgstr "Opties:\n" #: src/main.c:336 msgid " -b, -m Ignored for compatibility.\n" msgstr "" " -b, -m (genegeerd, maar herkend wegens " "compatibiliteit)\n" #: src/main.c:338 msgid " -B, --always-make Unconditionally make all targets.\n" msgstr " -B, --always-make onvoorwaardelijk alle doelen maken\n" #: src/main.c:340 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" #: src/main.c:343 msgid " -d Print lots of debugging information.\n" msgstr "" " -d veel informatie weergeven voor het debuggen\n" #: src/main.c:345 msgid "" " --debug[=FLAGS] Print various types of debugging information.\n" msgstr "" " --debug[=VLAGGEN] verschillende soorten debuginformatie " "weergeven\n" #: src/main.c:347 msgid "" " -e, --environment-overrides\n" " Environment variables override makefiles.\n" msgstr "" " -e, --environment-overrides omgevingsvariabelen gaan boven Makefiles\n" #: src/main.c:350 msgid "" " -E STRING, --eval=STRING Evaluate STRING as a makefile statement.\n" msgstr "" " -E TEKST, --eval=TEKST deze TEKST als Makefile-statement evalueren\n" #: src/main.c:352 msgid "" " -f FILE, --file=FILE, --makefile=FILE\n" " Read FILE as a makefile.\n" msgstr "" " -f BESTAND, --file=BESTAND, --makefile=BESTAND\n" " het gegeven bestand als Makefile gebruiken\n" "\n" #: src/main.c:355 msgid " -h, --help Print this message and exit.\n" msgstr " -h, --help deze hulptekst tonen en stoppen\n" #: src/main.c:357 msgid " -i, --ignore-errors Ignore errors from recipes.\n" msgstr " -i, --ignore-errors alle fouten in recepten negeren\n" #: src/main.c:359 msgid "" " -I DIRECTORY, --include-dir=DIRECTORY\n" " Search DIRECTORY for included makefiles.\n" msgstr "" " -I MAP, --include-dir=MAP deze map doorzoeken naar ingesloten " "Makefiles\n" #: src/main.c:362 msgid "" " -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no " "arg.\n" msgstr "" " -j [N], --jobs[=N] het uitvoeren van N taken tegelijk toestaan;\n" " zonder N is het aantal onbeperkt\n" #: src/main.c:364 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" #: src/main.c:366 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" " alleen extra taken starten als de\n" " systeembelasting lager is dan N\n" #: src/main.c:369 msgid "" " -L, --check-symlink-times Use the latest mtime between symlinks and " "target.\n" msgstr "" " -L, --check-symlink-times van een symbolische koppeling en zijn doel\n" " de laatste wijzigingstijd gebruiken\n" "\n" #: src/main.c:371 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" " recepten niet uitvoeren, alleen weergeven\n" #: src/main.c:374 msgid "" " -o FILE, --old-file=FILE, --assume-old=FILE\n" " Consider FILE to be very old and don't remake " "it.\n" msgstr "" " -o BESTAND, --old-file=BESTAND, --assume-old=BESTAND\n" " BESTAND als oud beschouwen, niet opnieuw " "maken\n" #: src/main.c:377 msgid "" " -O[TYPE], --output-sync[=TYPE]\n" " Synchronize output of parallel jobs by TYPE.\n" msgstr "" " -O[TYPE], --output-sync[=TYPE]\n" " uitvoer van parallelle taken synchroniseren " "op TYPE\n" #: src/main.c:380 msgid " -p, --print-data-base Print make's internal database.\n" msgstr "" " -p, --print-data-base interne gegevensbank van 'make' weergeven\n" #: src/main.c:382 msgid "" " -q, --question Run no recipe; exit status says if up to " "date.\n" msgstr "" " -q, --question geen recepten uitvoeren; de afsluitwaarde\n" " geeft aan of alles bijgewerkt is\n" #: src/main.c:384 msgid " -r, --no-builtin-rules Disable the built-in implicit rules.\n" msgstr "" " -r, --no-builtin-rules ingebouwde impliciete regels uitzetten\n" #: src/main.c:386 msgid " -R, --no-builtin-variables Disable the built-in variable settings.\n" msgstr "" " -R, --no-builtin-variables ingebouwde instellingen van variabelen " "uitzetten\n" "\n" #: src/main.c:388 msgid " -s, --silent, --quiet Don't echo recipes.\n" msgstr " -s, --silent, --quiet recepten niet weergeven\n" #: src/main.c:390 msgid " --no-silent Echo recipes (disable --silent mode).\n" msgstr "" " --no-silent recepten weergeven (--silent-modus " "uitschakelen)\n" #: src/main.c:392 msgid "" " -S, --no-keep-going, --stop\n" " Turns off -k.\n" msgstr " -S, --no-keep-going, --stop optie '-k' uitzetten\n" #: src/main.c:395 msgid " -t, --touch Touch targets instead of remaking them.\n" msgstr "" " -t, --touch doelen aanraken in plaats van opnieuw maken\n" #: src/main.c:397 msgid " --trace Print tracing information.\n" msgstr " --trace tracing-informatie weergeven\n" #: src/main.c:399 msgid "" " -v, --version Print the version number of make and exit.\n" msgstr " -v, --version programmaversie tonen en stoppen\n" #: src/main.c:401 msgid " -w, --print-directory Print the current directory.\n" msgstr " -w, --print-directory de huidige map weergeven\n" #: src/main.c:403 msgid "" " --no-print-directory Turn off -w, even if it was turned on " "implicitly.\n" msgstr "" " --no-print-directory optie '-w' uitzetten, ook als deze impliciet\n" " was aangezet\n" #: src/main.c:405 msgid "" " -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n" " Consider FILE to be infinitely new.\n" msgstr "" " -W BESTAND, --what-if=BESTAND, --new-file=BESTAND, --assume-new=BESTAND\n" " BESTAND als oneindig nieuw beschouwen\n" #: src/main.c:408 msgid "" " --warn-undefined-variables Warn when an undefined variable is " "referenced.\n" msgstr "" " --warn-undefined-variables waarschuwen als naar een ongedefinieerde\n" " variabele wordt verwezen\n" #: src/main.c:671 #, c-format msgid "empty string invalid as file name" msgstr "lege tekenreeks is ongeldig als bestandsnaam" #: src/main.c:754 #, c-format msgid "unknown debug level specification '%s'" msgstr "onbekende aanduiding '%s' voor debug-niveau" #: src/main.c:794 #, c-format msgid "unknown output-sync type '%s'" msgstr "onbekend uitvoersynchronisatie-type: '%s'" #: src/main.c:849 #, 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" #: src/main.c:856 #, c-format msgid "" "\n" "Unhandled exception filter called from program %s\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" msgstr "" "\n" "Filter voor onbehandelde uitzondering is aangeroepen vanuit programma %s\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" #: src/main.c:864 #, c-format msgid "Access violation: write operation at address 0x%p\n" msgstr "Toegangsrechtenovertreding: schrijfopdracht op adres 0x%p\n" #: src/main.c:865 #, c-format msgid "Access violation: read operation at address 0x%p\n" msgstr "Toegangsrechtenovertreding: leesopdracht op adres 0x%p\n" #: src/main.c:941 src/main.c:956 #, c-format msgid "find_and_set_shell() setting default_shell = %s\n" msgstr "find_and_set_shell() stelt default_shell = %s in\n" #: src/main.c:1009 #, 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" #: src/main.c:1609 #, c-format msgid "" "warning: jobserver unavailable: using -j1. Add '+' to parent make rule." msgstr "" "Waarschuwing: taakserver is onbeschikbaar: '-j1' wordt gebruikt. Voeg '+' " "toe aan de ouderregel." #: src/main.c:1617 #, c-format msgid "warning: -j%d forced in submake: resetting jobserver mode." msgstr "" "Waarschuwing: '-j%d' is afgedwongen in een deelproces: taakserver-modus " "uitgezet." #: src/main.c:1781 #, c-format msgid "Makefile from standard input specified twice." msgstr "Makefile op standaardinvoer is dubbel opgegeven." #: src/main.c:1819 src/vmsjobs.c:1248 msgid "fopen (temporary file)" msgstr "fopen (tijdelijk bestand)" #: src/main.c:1825 msgid "fwrite (temporary file)" msgstr "fwrite (tijdelijk bestand)" #: src/main.c:2004 #, c-format msgid "warning: -j%d forced in makefile: resetting jobserver mode." msgstr "" "Waarschuwing: '-j%d' is afgedwongen in makefile: taakserver-modus uitgezet." #: src/main.c:2068 #, c-format msgid "Parallel jobs (-j) are not supported on this platform." msgstr "Parallelle taken (-j) worden op dit platform niet ondersteund." #: src/main.c:2069 #, c-format msgid "Resetting to single job (-j1) mode." msgstr "Opnieuw instellen op enkele-taakmodus (-j1)." #: src/main.c:2109 #, c-format msgid "Symbolic links not supported: disabling -L." msgstr "" "Symbolische koppelingen worden niet ondersteund: '-L' wordt uitgeschakeld." #: src/main.c:2190 #, c-format msgid "Updating makefiles....\n" msgstr "Bijwerken van Makefiles...\n" #: src/main.c:2226 #, c-format msgid "Makefile '%s' might loop; not remaking it.\n" msgstr "Makefile '%s' bevat mogelijk een lus; wordt niet opnieuw gemaakt.\n" #: src/main.c:2303 #, c-format msgid "Failed to remake makefile '%s'." msgstr "Opnieuw maken van Makefile '%s' is mislukt." #: src/main.c:2323 #, c-format msgid "Included makefile '%s' was not found." msgstr "Ingesloten Makefile '%s' is niet gevonden." #: src/main.c:2328 #, c-format msgid "Makefile '%s' was not found" msgstr "Makefile '%s' is niet gevonden." #: src/main.c:2394 #, c-format msgid "Couldn't change back to original directory." msgstr "Kan niet terugkeren naar oorspronkelijke map." #: src/main.c:2402 #, c-format msgid "Re-executing[%u]:" msgstr "Opnieuw uitvoeren[%u]:" #: src/main.c:2522 msgid "unlink (temporary file): " msgstr "verwijderen (van tijdelijk bestand): " #: src/main.c:2555 #, c-format msgid ".DEFAULT_GOAL contains more than one target" msgstr ".DEFAULT_GOAL bevat meer dan één doel" #: src/main.c:2579 #, c-format msgid "No targets" msgstr "Geen doelen" #: src/main.c:2581 #, c-format msgid "No targets specified and no makefile found" msgstr "Geen doelen opgegeven en geen Makefile gevonden" #: src/main.c:2586 #, c-format msgid "Updating goal targets....\n" msgstr "Bijwerken van doelen...\n" #: src/main.c:2610 #, c-format msgid "warning: Clock skew detected. Your build may be incomplete." msgstr "" "Waarschuwing: Klokafwijking geconstateerd. Het maken is mogelijk " "onvolledig gebeurd." #: src/main.c:2804 #, c-format msgid "Usage: %s [options] [target] ...\n" msgstr "Gebruik: %s [OPTIES] [DOEL]...\n" #: src/main.c:2810 #, c-format msgid "" "\n" "This program built for %s\n" msgstr "" "\n" "Dit programma is gecompileerd voor %s.\n" #: src/main.c:2812 #, c-format msgid "" "\n" "This program built for %s (%s)\n" msgstr "" "\n" "Dit programma is gecompileerd voor %s (%s).\n" #: src/main.c:2815 #, c-format msgid "Report bugs to \n" msgstr "" "Rapporteer programmafouten aan ;\n" "meld gebreken in de vertaling aan .\n" #: src/main.c:2901 #, 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" #: src/main.c:2965 #, c-format msgid "the '-%c' option requires a positive integer argument" msgstr "de optie '-%c' vereist een positief geheel getal als argument" #: src/main.c:3363 #, c-format msgid "%sBuilt for %s\n" msgstr "%sDit programma is gecompileerd voor %s.\n" #: src/main.c:3365 #, c-format msgid "%sBuilt for %s (%s)\n" msgstr "%sDit programma is gecompileerd voor %s (%s).\n" #: src/main.c:3376 #, c-format msgid "" "%sLicense GPLv3+: GNU GPL version 3 or later \n" "%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 "" "%sLicentie GPLv3+: GNU GPL versie 3 of nieuwer \n" "%sDit is vrije software: u mag het vrijelijk wijzigen en verder " "verspreiden.\n" "%sEr is GEEN GARANTIE, voor zover de wet dit toestaat.\n" #: src/main.c:3397 #, c-format msgid "" "\n" "# Make data base, printed on %s" msgstr "" "\n" "# Make-gegevensbank, weergegeven op %s" #: src/main.c:3407 #, c-format msgid "" "\n" "# Finished Make data base on %s\n" msgstr "" "\n" "# Make-gegevensbank voltooid op %s\n" #: src/misc.c:643 #, c-format msgid "%s: user %lu (real %lu), group %lu (real %lu)\n" msgstr "%s: gebruiker %lu (echt %lu), groep %lu (echt %lu)\n" #: src/misc.c:664 msgid "Initialized access" msgstr "Toegang geïnitialiseerd" #: src/misc.c:743 msgid "User access" msgstr "Gebruikerstoegang" #: src/misc.c:791 msgid "Make access" msgstr "Make-toegang" #: src/misc.c:825 msgid "Child access" msgstr "Dochterprocestoegang" #: src/output.c:97 #, c-format msgid "%s: Entering an unknown directory\n" msgstr "%s: Een onbekende map wordt binnengegaan\n" #: src/output.c:99 #, c-format msgid "%s: Leaving an unknown directory\n" msgstr "%s: Een onbekende map wordt verlaten\n" #: src/output.c:102 #, c-format msgid "%s: Entering directory '%s'\n" msgstr "%s: Map '%s' wordt binnengegaan\n" #: src/output.c:104 #, c-format msgid "%s: Leaving directory '%s'\n" msgstr "%s: Map '%s' wordt verlaten\n" #: src/output.c:108 #, c-format msgid "%s[%u]: Entering an unknown directory\n" msgstr "%s[%u]: Een onbekende map wordt binnengegaan\n" #: src/output.c:110 #, c-format msgid "%s[%u]: Leaving an unknown directory\n" msgstr "%s[%u]: Een onbekende map wordt verlaten\n" #: src/output.c:113 #, c-format msgid "%s[%u]: Entering directory '%s'\n" msgstr "%s[%u]: Map '%s' wordt binnengegaan\n" #: src/output.c:115 #, c-format msgid "%s[%u]: Leaving directory '%s'\n" msgstr "%s[%u]: Map '%s' wordt verlaten\n" #: src/output.c:442 src/output.c:444 #, c-format msgid "write error: stdout" msgstr "schrijffout: standaarduitvoer" #: src/output.c:624 msgid ". Stop.\n" msgstr ". Gestopt.\n" #: src/output.c:658 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" #: src/output.c:667 #, c-format msgid "%s: %s" msgstr "%s: %s" #: src/output.h:62 #, c-format msgid "-O[TYPE] (--output-sync[=TYPE]) is not configured for this build." msgstr "" "Optie '-O[TYPE]' (--output-sync[=TYPE]) is niet meegecompileerd in dit " "programma." #: src/posixos.c:90 msgid "creating jobs pipe" msgstr "aanmaken van takenpijp" #: src/posixos.c:98 src/posixos.c:251 msgid "duping jobs pipe" msgstr "dupliceren van takenpijp" #: src/posixos.c:104 msgid "init jobserver pipe" msgstr "initialiseren van taakserverpijp" #: src/posixos.c:119 #, c-format msgid "internal error: invalid --jobserver-auth string '%s'" msgstr "*interne fout*: ongeldige tekenreeks '%s' voor '--jobserver-auth'" #: src/posixos.c:122 #, c-format msgid "Jobserver client (fds %d,%d)\n" msgstr "Taakservercliënt (bestandsdescriptor %d,%d)\n" #: src/posixos.c:138 msgid "jobserver pipeline" msgstr "taakserverpijplijn" #: src/posixos.c:186 msgid "write jobserver" msgstr "schrijven naar taakserver" #: src/posixos.c:300 #, c-format msgid "job server shut down" msgstr "taakserver is gestopt" #: src/posixos.c:303 msgid "pselect jobs pipe" msgstr "pselect() van takenpijp" #: src/posixos.c:319 src/posixos.c:433 msgid "read jobs pipe" msgstr "lezen van takenpijp" #: src/read.c:181 #, c-format msgid "Reading makefiles...\n" msgstr "Lezen van Makefiles...\n" #: src/read.c:336 #, c-format msgid "Reading makefile '%s'" msgstr "Lezen van Makefile '%s'" #: src/read.c:338 #, c-format msgid " (no default goal)" msgstr " (geen standaarddoel)" #: src/read.c:340 #, c-format msgid " (search path)" msgstr " (zoekpad)" #: src/read.c:342 #, c-format msgid " (don't care)" msgstr " (maakt niet uit)" #: src/read.c:344 #, c-format msgid " (no ~ expansion)" msgstr " (geen expansie van ~)" #: src/read.c:655 #, c-format msgid "Skipping UTF-8 BOM in makefile '%s'\n" msgstr "UTF-8 BOM in Makefile '%s' wordt overgeslagen\n" #: src/read.c:658 #, c-format msgid "Skipping UTF-8 BOM in makefile buffer\n" msgstr "UTF-8 BOM in Makefile-buffer wordt overgeslagen\n" #: src/read.c:787 #, c-format msgid "invalid syntax in conditional" msgstr "ongeldige syntax in voorwaardelijk deel" #: src/read.c:960 #, c-format msgid "%s: failed to load" msgstr "%s: laden is mislukt" #: src/read.c:986 #, c-format msgid "recipe commences before first target" msgstr "recept begint voor eerste doel" #: src/read.c:1035 #, c-format msgid "missing rule before recipe" msgstr "ontbrekende regel vóór recept" #: src/read.c:1136 #, c-format msgid "missing separator (did you mean TAB instead of 8 spaces?)" msgstr "" "ontbrekend scheidingsteken (bedoelde u een TAB in plaats van 8 spaties?)" #: src/read.c:1138 #, c-format msgid "missing separator" msgstr "ontbrekend scheidingsteken" #: src/read.c:1283 #, c-format msgid "missing target pattern" msgstr "ontbrekend doelpatroon" #: src/read.c:1285 #, c-format msgid "multiple target patterns" msgstr "meerdere doelpatronen" #: src/read.c:1289 #, c-format msgid "target pattern contains no '%%'" msgstr "doelpatroon bevat geen '%%'" #: src/read.c:1404 #, c-format msgid "missing 'endif'" msgstr "ontbrekende 'endif'" #: src/read.c:1443 src/read.c:1488 src/variable.c:1600 #, c-format msgid "empty variable name" msgstr "lege naam van variabele" #: src/read.c:1478 #, c-format msgid "extraneous text after 'define' directive" msgstr "extra tekst na 'define'-opdracht" #: src/read.c:1503 #, c-format msgid "missing 'endef', unterminated 'define'" msgstr "ontbrekende 'endef', onafgemaakte 'define'" #: src/read.c:1531 #, c-format msgid "extraneous text after 'endef' directive" msgstr "extra tekst na 'endef'-opdracht" #: src/read.c:1603 #, c-format msgid "extraneous text after '%s' directive" msgstr "extra tekst na '%s'-opdracht" #: src/read.c:1604 #, c-format msgid "extraneous '%s'" msgstr "extra '%s'" #: src/read.c:1632 #, c-format msgid "only one 'else' per conditional" msgstr "slechts één 'else' per voorwaardelijk deel" #: src/read.c:1908 #, c-format msgid "Malformed target-specific variable definition" msgstr "Onjuiste doelspecifieke variabele-definitie" #: src/read.c:1968 #, c-format msgid "prerequisites cannot be defined in recipes" msgstr "vereisten kunnen niet in recepten gedefinieerd worden" #: src/read.c:1986 #, c-format msgid "grouped targets must provide a recipe" msgstr "gegroepeerde doelen moeten een recept geven" #: src/read.c:2029 #, c-format msgid "mixed implicit and static pattern rules" msgstr "gemengde impliciete en statische patroonregels" #: src/read.c:2052 #, c-format msgid "mixed implicit and normal rules" msgstr "gemengde impliciete en normale regels" #: src/read.c:2107 #, c-format msgid "target '%s' doesn't match the target pattern" msgstr "doel '%s' komt niet overeen met doelpatroon" #: src/read.c:2122 src/read.c:2168 #, c-format msgid "target file '%s' has both : and :: entries" msgstr "doelbestand '%s' heeft zowel ':'- als '::'-items" #: src/read.c:2128 #, c-format msgid "target '%s' given more than once in the same rule" msgstr "doel '%s' is meerdere keren gegeven in dezelfde regel" #: src/read.c:2138 #, c-format msgid "warning: overriding recipe for target '%s'" msgstr "Waarschuwing: er wordt voorbijgegaan aan recept voor doel '%s'" #: src/read.c:2141 #, c-format msgid "warning: ignoring old recipe for target '%s'" msgstr "Waarschuwing: oud recept voor doel '%s' wordt genegeerd" #: src/read.c:2254 #, c-format msgid "*** mixed implicit and normal rules: deprecated syntax" msgstr "*** gemengde impliciete en normale regels: verouderde syntax" #: src/read.c:2271 #, c-format msgid "warning: overriding group membership for target '%s'" msgstr "" "Waarschuwing: er wordt voorbijgegaan aan groepslidmaatschap voor doel '%s'" #: src/read.c:2636 #, c-format msgid "warning: NUL character seen; rest of line ignored" msgstr "Waarschuwing: NUL-teken gezien; de rest van de regel wordt genegeerd" #: src/remake.c:226 #, c-format msgid "Nothing to be done for '%s'." msgstr "Er hoeft niets gedaan te worden voor '%s'." #: src/remake.c:227 #, c-format msgid "'%s' is up to date." msgstr "'%s' is up-to-date." #: src/remake.c:323 #, c-format msgid "Pruning file '%s'.\n" msgstr "Snoeien van bestand '%s'.\n" #: src/remake.c:389 #, 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" #: src/remake.c:399 #, c-format msgid "%sNo rule to make target '%s'%s" msgstr "%sEr is geen regel om doel '%s' te maken%s" #: src/remake.c:425 #, c-format msgid "Considering target file '%s'.\n" msgstr "Doelbestand '%s' wordt overwogen.\n" #: src/remake.c:432 #, c-format msgid "Recently tried and failed to update file '%s'.\n" msgstr "Bijwerken van bestand '%s' is recent geprobeerd en mislukt.\n" #: src/remake.c:444 #, c-format msgid "File '%s' was considered already.\n" msgstr "Bestand '%s' was al overwogen.\n" #: src/remake.c:454 #, c-format msgid "Still updating file '%s'.\n" msgstr "Bestand '%s' wordt nog bijgewerkt.\n" #: src/remake.c:457 #, c-format msgid "Finished updating file '%s'.\n" msgstr "Bijwerken van bestand '%s' is voltooid.\n" #: src/remake.c:486 #, c-format msgid "File '%s' does not exist.\n" msgstr "Bestand '%s' bestaat niet.\n" #: src/remake.c:494 #, c-format msgid "" "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp" msgstr "" "*** Waarschuwing: .LOW_RESOLUTION_TIME-bestand '%s' heeft een hoge-resolutie " "tijdsstempel" #: src/remake.c:507 src/remake.c:1039 #, c-format msgid "Found an implicit rule for '%s'.\n" msgstr "Impliciete regel voor '%s' gevonden.\n" #: src/remake.c:509 src/remake.c:1041 #, c-format msgid "No implicit rule found for '%s'.\n" msgstr "Geen impliciete regel voor '%s' gevonden.\n" #: src/remake.c:515 #, c-format msgid "Using default recipe for '%s'.\n" msgstr "Standaardrecept wordt gebruikt voor '%s'.\n" #: src/remake.c:549 src/remake.c:1088 #, c-format msgid "Circular %s <- %s dependency dropped." msgstr "Circulaire afhankelijkheid %s <- %s is verworpen." #: src/remake.c:674 #, c-format msgid "Finished prerequisites of target file '%s'.\n" msgstr "Vereisten van doelbestand '%s' zijn voltooid.\n" #: src/remake.c:680 #, c-format msgid "The prerequisites of '%s' are being made.\n" msgstr "De vereisten van '%s' worden nu gemaakt.\n" #: src/remake.c:694 #, c-format msgid "Giving up on target file '%s'.\n" msgstr "Pogingen voor doelbestand '%s' worden gestaakt.\n" #: src/remake.c:699 #, c-format msgid "Target '%s' not remade because of errors." msgstr "Doel '%s' is niet opnieuw gemaakt vanwege fouten." #: src/remake.c:751 #, c-format msgid "Prerequisite '%s' is order-only for target '%s'.\n" msgstr "Vereiste '%s' is alleen-ordenen voor doel '%s'.\n" #: src/remake.c:756 #, c-format msgid "Prerequisite '%s' of target '%s' does not exist.\n" msgstr "Vereiste '%s' van doel '%s' bestaat niet.\n" #: src/remake.c:761 #, c-format msgid "Prerequisite '%s' is newer than target '%s'.\n" msgstr "Vereiste '%s' is nieuwer dan doel '%s'.\n" #: src/remake.c:764 #, c-format msgid "Prerequisite '%s' is older than target '%s'.\n" msgstr "Vereiste '%s' is ouder dan doel '%s'.\n" #: src/remake.c:782 #, c-format msgid "Target '%s' is double-colon and has no prerequisites.\n" msgstr "Doel '%s' is dubbeldubbelpunts en heeft geen vereisten.\n" #: src/remake.c:789 #, 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" #: src/remake.c:794 #, c-format msgid "Making '%s' due to always-make flag.\n" msgstr "Maken van '%s' vanwege 'always-make'-vlag.\n" #: src/remake.c:802 #, c-format msgid "No need to remake target '%s'" msgstr "Doel '%s' hoeft niet opnieuw gemaakt te worden" #: src/remake.c:804 #, c-format msgid "; using VPATH name '%s'" msgstr "; VPATH-naam '%s' wordt gebruikt" #: src/remake.c:824 #, c-format msgid "Must remake target '%s'.\n" msgstr "Doel '%s' moet opnieuw gemaakt worden.\n" #: src/remake.c:830 #, c-format msgid " Ignoring VPATH name '%s'.\n" msgstr " VPATH-naam '%s' wordt genegeerd.\n" #: src/remake.c:839 #, c-format msgid "Recipe of '%s' is being run.\n" msgstr "Recept van '%s' wordt nu uitgevoerd.\n" #: src/remake.c:846 #, c-format msgid "Failed to remake target file '%s'.\n" msgstr "Opnieuw maken van doelbestand '%s' is mislukt.\n" #: src/remake.c:849 #, c-format msgid "Successfully remade target file '%s'.\n" msgstr "Doelbestand '%s' is met succes opnieuw gemaakt.\n" #: src/remake.c:852 #, c-format msgid "Target file '%s' needs to be remade under -q.\n" msgstr "Doelbestand '%s' moet opnieuw worden gemaakt onder '-q'.\n" #: src/remake.c:1047 #, c-format msgid "Using default commands for '%s'.\n" msgstr "Standaardopdrachten worden gebruikt voor '%s'.\n" #: src/remake.c:1422 #, 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" #: src/remake.c:1662 #, c-format msgid ".LIBPATTERNS element '%s' is not a pattern" msgstr ".LIBPATTERNS-element '%s' is geen patroon" #: src/remote-cstms.c:122 #, c-format msgid "Customs won't export: %s\n" msgstr "Customs kan niet exporteren: %s\n" #: src/rule.c:289 #, c-format msgid "warning: ignoring prerequisites on suffix rule definition" msgstr "" #: src/rule.c:530 msgid "" "\n" "# Implicit Rules" msgstr "" "\n" "# Impliciete regels" #: src/rule.c:545 msgid "" "\n" "# No implicit rules." msgstr "" "\n" "# Geen impliciete regels." #: src/rule.c:548 #, c-format msgid "" "\n" "# %u implicit rules, %u (%.1f%%) terminal." msgstr "" "\n" "# %u impliciete regels, %u (%.1f%%) eindpunten." #: src/rule.c:557 #, c-format msgid "BUG: num_pattern_rules is wrong! %u != %u" msgstr "PROGRAMMAFOUT: num_pattern_rules() is verkeerd! %u != %u" #: src/signame.c:84 msgid "unknown signal" msgstr "onbekend signaal" # Vroeger ging dit over het afsluiten van een modemverbinding, # tegenwoordig over het afsluiten van een pseudoterminal. #: src/signame.c:92 msgid "Hangup" msgstr "Opgehangen" #: src/signame.c:95 msgid "Interrupt" msgstr "Onderbroken" # Verleden tijd, "Afgesloten", net als de andere actiesignaalnamen. #: src/signame.c:98 msgid "Quit" msgstr "Afgesloten" #: src/signame.c:101 msgid "Illegal Instruction" msgstr "Ongeldige instructie" #: src/signame.c:104 msgid "Trace/breakpoint trap" msgstr "Traceer/breekpunt-instructie" #: src/signame.c:109 msgid "Aborted" msgstr "Afgebroken" #: src/signame.c:112 msgid "IOT trap" msgstr "IOT-instructie" #: src/signame.c:115 msgid "EMT trap" msgstr "EMT-instructie" #: src/signame.c:118 msgid "Floating point exception" msgstr "Drijvendekomma-berekeningsfout" #: src/signame.c:121 msgid "Killed" msgstr "Geëlimineerd" #: src/signame.c:124 msgid "Bus error" msgstr "Busfout" #: src/signame.c:127 msgid "Segmentation fault" msgstr "Segmentatiefout" #: src/signame.c:130 msgid "Bad system call" msgstr "Onjuiste systeemaanroep" #: src/signame.c:133 msgid "Broken pipe" msgstr "Gebroken pijp" #: src/signame.c:136 msgid "Alarm clock" msgstr "Wekker" #: src/signame.c:139 msgid "Terminated" msgstr "Beëindigd" #: src/signame.c:142 msgid "User defined signal 1" msgstr "Gebruikergedefinieerd signaal 1" #: src/signame.c:145 msgid "User defined signal 2" msgstr "Gebruikergedefinieerd signaal 2" #: src/signame.c:150 src/signame.c:153 msgid "Child exited" msgstr "Dochterproces is afgesloten" #: src/signame.c:156 msgid "Power failure" msgstr "Stroomstoring" #: src/signame.c:159 msgid "Stopped" msgstr "Gepauzeerd" #: src/signame.c:162 msgid "Stopped (tty input)" msgstr "Gepauzeerd (terminalinvoer)" #: src/signame.c:165 msgid "Stopped (tty output)" msgstr "Gepauzeerd (terminaluitvoer)" #: src/signame.c:168 msgid "Stopped (signal)" msgstr "Gepauzeerd (signaal)" #: src/signame.c:171 msgid "CPU time limit exceeded" msgstr "Limiet op processortijd is overschreden" #: src/signame.c:174 msgid "File size limit exceeded" msgstr "Limiet op bestandsgrootte is overschreden" #: src/signame.c:177 msgid "Virtual timer expired" msgstr "Virtuele timer is afgelopen" #: src/signame.c:180 msgid "Profiling timer expired" msgstr "Timer voor profilering is afgelopen" #: src/signame.c:186 msgid "Window changed" msgstr "Venster is veranderd" #: src/signame.c:189 msgid "Continued" msgstr "Doorgegaan" #: src/signame.c:192 msgid "Urgent I/O condition" msgstr "Urgente in-/uitvoertoestand" #: src/signame.c:199 src/signame.c:208 msgid "I/O possible" msgstr "In-/uitvoer is mogelijk" #: src/signame.c:202 msgid "SIGWIND" msgstr "SIGWIND" #: src/signame.c:205 msgid "SIGPHONE" msgstr "SIGPHONE" #: src/signame.c:211 msgid "Resource lost" msgstr "Hulpbron verloren" #: src/signame.c:214 msgid "Danger signal" msgstr "Gevaarsignaal" #: src/signame.c:217 msgid "Information request" msgstr "Verzoek om informatie" #: src/signame.c:220 msgid "Floating point co-processor not available" msgstr "Drijvendekomma-coprocessor is niet beschikbaar" #: src/strcache.c:274 #, c-format msgid "" "\n" "%s No strcache buffers\n" msgstr "" "\n" "%s Geen 'strcache'-buffers\n" #: src/strcache.c:304 #, c-format msgid "" "\n" "%s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu " "B\n" msgstr "" "\n" "%s 'strcache'-buffers: %lu (%lu) / strings = %lu / opslag = %lu B / " "gemiddeld = %lu B\n" #: src/strcache.c:308 #, c-format msgid "" "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B\n" msgstr "" "%s huidig buffer: grootte = %hu B / gebruikt = %hu B / aantal = %hu / " "gemiddeld = %u B\n" #: src/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" #: src/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 vrij: totaal = %lu B / max = %lu B / min = %lu B / gemiddeld = %hu " "B\n" #: src/strcache.c:326 #, c-format msgid "" "\n" "%s strcache performance: lookups = %lu / hit rate = %lu%%\n" msgstr "" "\n" "%s 'strcache'-prestatie: lookups = %lu / treffersverhouding = %lu%%\n" #: src/strcache.c:328 msgid "" "# hash-table stats:\n" "# " msgstr "" "# hashtabel-statistieken van bestanden:\n" "# " #: src/variable.c:1653 msgid "automatic" msgstr "automatisch" #: src/variable.c:1656 msgid "default" msgstr "standaard" #: src/variable.c:1659 msgid "environment" msgstr "omgeving" #: src/variable.c:1662 msgid "makefile" msgstr "Makefile" #: src/variable.c:1665 msgid "environment under -e" msgstr "omgeving onder -e" #: src/variable.c:1668 msgid "command line" msgstr "opdrachtregel" #: src/variable.c:1671 msgid "'override' directive" msgstr "'override'-opdracht" #: src/variable.c:1682 #, c-format msgid " (from '%s', line %lu)" msgstr " (uit '%s', regel %lu)" #: src/variable.c:1745 msgid "# variable set hash-table stats:\n" msgstr "# Statistieken van hashtabel van variabelenverzameling:\n" #: src/variable.c:1756 msgid "" "\n" "# Variables\n" msgstr "" "\n" "# Variabelen\n" #: src/variable.c:1760 msgid "" "\n" "# Pattern-specific Variable Values" msgstr "" "\n" "# Patroonspecifieke variabelewaarden" #: src/variable.c:1774 msgid "" "\n" "# No pattern-specific variable values." msgstr "" "\n" "# Geen patroonspecifieke variabelewaarden" #: src/variable.c:1776 #, c-format msgid "" "\n" "# %u pattern-specific variable values" msgstr "" "\n" "# %u patroonspecifieke variabelewaarden" #: src/variable.h:229 #, c-format msgid "warning: undefined variable '%.*s'" msgstr "Waarschuwing: ongedefinieerde variabele '%.*s'" #: src/vmsfunctions.c:91 #, c-format msgid "sys$search() failed with %d\n" msgstr "sys$search() is mislukt met afsluitwaarde %d\n" #: src/vmsjobs.c:244 #, 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" #: src/vmsjobs.c:681 #, c-format msgid "BUILTIN CD %s\n" msgstr "INGEBOUWDE CD %s\n" #: src/vmsjobs.c:1224 #, c-format msgid "DCL: %s\n" msgstr "DCL: %s\n" #: src/vmsjobs.c:1284 #, c-format msgid "Append output to %s\n" msgstr "Uitvoer wordt toegevoegd aan %s\n" #: src/vmsjobs.c:1309 #, c-format msgid "Append %.*s and cleanup\n" msgstr "Toevoegen van %.*s en opschoning\n" #: src/vmsjobs.c:1322 #, c-format msgid "Executing %s instead\n" msgstr "In plaats daarvan wordt %s uitgevoerd\n" #: src/vpath.c:603 msgid "" "\n" "# VPATH Search Paths\n" msgstr "" "\n" "# VPATH-zoekpaden\n" #: src/vpath.c:620 msgid "# No 'vpath' search paths." msgstr "# Geen 'vpath'-zoekpaden." #: src/vpath.c:622 #, c-format msgid "" "\n" "# %u 'vpath' search paths.\n" msgstr "" "\n" "# %u 'vpath'-zoekpaden.\n" #: src/vpath.c:625 msgid "" "\n" "# No general ('VPATH' variable) search path." msgstr "" "\n" "# Geen algemeen zoekpad ('VPATH'-variabele)." #: src/vpath.c:631 msgid "" "\n" "# General ('VPATH' variable) search path:\n" "# " msgstr "" "\n" "# Algemeen zoekpad ('VPATH'-variabele):\n" "# " #: src/w32/w32os.c:44 #, c-format msgid "Jobserver slots limited to %d\n" msgstr "Taakserver-plaatsen zijn beperkt tot %d\n" #: src/w32/w32os.c:60 #, c-format msgid "creating jobserver semaphore: (Error %ld: %s)" msgstr "aanmaken van taakserver-semafoor: (Fout %ld: %s)" #: src/w32/w32os.c:79 #, 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)" #: src/w32/w32os.c:82 #, c-format msgid "Jobserver client (semaphore %s)\n" msgstr "Taakservercliënt (semafoor %s)\n" #: src/w32/w32os.c:123 #, c-format msgid "release jobserver semaphore: (Error %ld: %s)" msgstr "vrijgeven van taakserver-semafoor: (Fout %ld: %s)" #: src/w32/w32os.c:194 #, c-format msgid "semaphore or child process wait: (Error %ld: %s)" msgstr "wachten op semafoor of dochterproces: (Fout %ld: %s)" #~ msgid "%s: %s: Command not found\n" #~ msgstr "%s: %s: Opdracht niet gevonden\n" #~ msgid "%s: Shell program not found" #~ msgstr "%s: Shell-programma niet gevonden" #~ msgid "%s is suspending for 30 seconds..." #~ msgstr "%s slaapt gedurende 30 seconden..." #~ msgid "done sleep(30). Continuing.\n" #~ msgstr "klaar met 30 seconden slapen. Make gaat verder.\n" #~ msgid "Unknown error %d" #~ msgstr "Onbekende fout %d" #~ msgid "Warning: File '%s' has modification time in the future" #~ msgstr "Waarschuwing: bestand '%s' heeft een wijzigingstijd in de toekomst" #~ 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 "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'" #~ msgid "virtual memory exhausted" #~ msgstr "onvoldoende geheugen beschikbaar" #~ msgid "write error" #~ msgstr "schrijffout" #~ msgid "# Invalid value in 'update_status' member!" #~ msgstr "# Ongeldige waarde in 'update_status'-onderdeel!" #~ msgid "unknown trace mode '%s'" #~ msgstr "onbekende trace-modus '%s'" #~ msgid "*** [%s] Error 0x%x (ignored)" #~ msgstr "*** [%s] Fout 0x%x (genegeerd)" #~ msgid "Invoking recipe from %s:%lu to update target `%s'.\n" #~ msgstr "Recept uit %s:%lu wordt aangeroepen om doel '%s' bij te werken.\n" #~ msgid "Invoking builtin recipe to update target `%s'.\n" #~ msgstr "Ingebouwd recept wordt aangeroepen om doel '%s' bij te werken.\n" #~ msgid "%s # of strcache buffers: %d (* %d B/buffer = %d B)\n" #~ msgstr "%s Aantal strcache-buffers: %d (* %d bytes/buffer = %d bytes)\n" #~ msgid "process_easy() failed failed to launch process (e=%ld)\n" #~ msgstr "process_easy() kan geen proces starten (e=%ld)\n" #~ msgid "empty `override' directive" #~ msgstr "lege 'override'-opdracht" #~ msgid "invalid `override' directive" #~ msgstr "ongeldige 'override'-opdracht" #~ msgid "-warning, CTRL-Y will leave sub-process(es) around.\n" #~ msgstr "-waarschuwing: CTRL-Y zal subproces(sen) achterlaten.\n" make-4.3/po/sv.po0000644000175000017500000015527113611136531010637 00000000000000# Swedish messages translation of make # Copyright © 2002, 2007, 2011, 2013, 2014, 2016, 2019, 2020 Free Software Foundation, Inc. # This file is distributed under the same license as the make package. # # Tomas Gradin , 1996-2002. # Christer Andersson , 2007. # Göran Uddeborg , 2011, 2013, 2014, 2016, 2019, 2020. # # $Id: make.po,v 1.27 2020-01-06 16:22:49+01 göran Exp $ msgid "" msgstr "" "Project-Id-Version: make 4.2.93\n" "Report-Msgid-Bugs-To: bug-make@gnu.org\n" "POT-Creation-Date: 2020-01-19 15:34-0500\n" "PO-Revision-Date: 2020-01-06 16:19+0100\n" "Last-Translator: Göran Uddeborg \n" "Language-Team: Swedish \n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" #: src/ar.c:46 #, c-format msgid "attempt to use unsupported feature: '%s'" msgstr "försök att använda en funktion som inte stöds: â€%sâ€" #: src/ar.c:123 #, c-format msgid "touch archive member is not available on VMS" msgstr "att nudda en arkivmedlem är inte tillgängligt i VMS" #: src/ar.c:147 #, c-format msgid "touch: Archive '%s' does not exist" msgstr "nudda: Arkivet â€%s†finns inte" #: src/ar.c:150 #, c-format msgid "touch: '%s' is not a valid archive" msgstr "nudda: â€%s†är inte nÃ¥got giltigt arkiv" #: src/ar.c:157 #, c-format msgid "touch: Member '%s' does not exist in '%s'" msgstr "nudda: medlemmen â€%s†finns inte i â€%sâ€" #: src/ar.c:164 #, c-format msgid "touch: Bad return code from ar_member_touch on '%s'" msgstr "nudda: Felaktig returkod frÃ¥n ar_member_touch pÃ¥ â€%sâ€" #: src/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" #: src/arscan.c:236 #, c-format msgid "lbr$ini_control() failed with status = %d" msgstr "lbr$ini_control() misslyckades och gav status = %d" #: src/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 medlemsstatus %d" #: src/arscan.c:944 #, c-format msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n" msgstr "Medlem â€%sâ€%s: %ld byte vid %ld (%ld).\n" #: src/arscan.c:945 msgid " (name might be truncated)" msgstr " (namnet kan vara avkortat)" #: src/arscan.c:947 #, c-format msgid " Date %s" msgstr " Datum %s" #: src/arscan.c:948 #, c-format msgid " uid = %d, gid = %d, mode = 0%o.\n" msgstr " uid = %d, gid = %d, flaggor = 0%o.\n" #: src/commands.c:403 #, c-format msgid "Recipe has too many lines (%ud)" msgstr "Receptet har för mÃ¥nga rader (%ud)" #: src/commands.c:504 msgid "*** Break.\n" msgstr "*** Avbrott.\n" #: src/commands.c:628 #, c-format msgid "*** [%s] Archive member '%s' may be bogus; not deleted" msgstr "*** [%s] Arkivmedlemmen â€%s†kan vara felaktig; ej borttagen" #: src/commands.c:632 #, c-format msgid "*** Archive member '%s' may be bogus; not deleted" msgstr "*** Arkivmedlemmen â€%s†kan vara felaktig; ej borttagen" #: src/commands.c:646 #, c-format msgid "*** [%s] Deleting file '%s'" msgstr "*** [%s] Tar bort filen â€%sâ€" #: src/commands.c:648 #, c-format msgid "*** Deleting file '%s'" msgstr "*** Tar bort filen â€%sâ€" #: src/commands.c:684 msgid "# recipe to execute" msgstr "# recept att utföra" #: src/commands.c:687 msgid " (built-in):" msgstr " (inbyggd):" #: src/commands.c:689 #, c-format msgid " (from '%s', line %lu):\n" msgstr " (frÃ¥n â€%sâ€, rad %lu):\n" #: src/dir.c:1073 msgid "" "\n" "# Directories\n" msgstr "" "\n" "# Kataloger\n" #: src/dir.c:1085 #, c-format msgid "# %s: could not be stat'd.\n" msgstr "# %s: kunde inte ta status.\n" #: src/dir.c:1089 msgid "# %s (key %s, mtime %I64u): could not be opened.\n" msgstr "# %s (nyckel %s, mtid %I64u): kunde inte öppnas.\n" #: src/dir.c:1094 #, 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" #: src/dir.c:1099 #, c-format msgid "# %s (device %ld, inode %ld): could not be opened.\n" msgstr "# %s (enhet %ld, inod %ld): kunde inte öppnas.\n" #: src/dir.c:1126 msgid "# %s (key %s, mtime %I64u): " msgstr "# %s (nyckel %s, mtid %I64u): " #: src/dir.c:1131 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): " msgstr "# %s (enhet %d, inod [%d,%d,%d]): " #: src/dir.c:1136 #, c-format msgid "# %s (device %ld, inode %ld): " msgstr "# %s (enhet %ld, inod %ld): " #: src/dir.c:1142 src/dir.c:1163 msgid "No" msgstr "Inga" #: src/dir.c:1145 src/dir.c:1166 msgid " files, " msgstr " filer, " #: src/dir.c:1147 src/dir.c:1168 msgid "no" msgstr "inga" #: src/dir.c:1150 msgid " impossibilities" msgstr " omöjligheter" #: src/dir.c:1154 msgid " so far." msgstr " hittills." #: src/dir.c:1171 #, c-format msgid " impossibilities in %lu directories.\n" msgstr " omöjligheter i %lu kataloger.\n" #: src/expand.c:125 #, c-format msgid "Recursive variable '%s' references itself (eventually)" msgstr "Den rekursiva variabeln â€%s†hänvisar till sig själv (sÃ¥ smÃ¥ningom)" #: src/expand.c:271 #, c-format msgid "unterminated variable reference" msgstr "oavslutad variabelreferens" #: src/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," #: src/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," #: src/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â€." #: src/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â€." #: src/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â€" #: src/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â€" #: src/file.c:408 #, c-format msgid "*** Deleting intermediate file '%s'" msgstr "*** Tar bort mellanfilen â€%sâ€" #: src/file.c:412 #, c-format msgid "Removing intermediate files...\n" msgstr "Tar bort mellanfiler …\n" #: src/file.c:872 msgid "Current time" msgstr "Nuvarande tid" #: src/file.c:876 #, c-format msgid "%s: Timestamp out of range; substituting %s" msgstr "%s: Tidsvärde utanför gränser; ersätter med %s" #: src/file.c:1016 msgid "# Not a target:" msgstr "# Inte ett mÃ¥l:" #: src/file.c:1021 msgid "# Precious file (prerequisite of .PRECIOUS)." msgstr "# Värdefull fil (nödvändig för .PRECIOUS)." #: src/file.c:1023 msgid "# Phony target (prerequisite of .PHONY)." msgstr "# LÃ¥tsasmÃ¥l (nödvändig för .PHONY)." #: src/file.c:1025 msgid "# Command line target." msgstr "# KommandoradsmÃ¥l." #: src/file.c:1027 msgid "# A default, MAKEFILES, or -include/sinclude makefile." msgstr "" "# En standardmakefil, eller enligt MAKEFILES, eller en -include/sinclude-" "makefil." #: src/file.c:1029 msgid "# Builtin rule" msgstr "# Inbyggd regel" #: src/file.c:1031 msgid "# Implicit rule search has been done." msgstr "# Implicit regelsökning har genomförts." #: src/file.c:1032 msgid "# Implicit rule search has not been done." msgstr "# Implicit regelsökning har inte genomförts." #: src/file.c:1034 #, c-format msgid "# Implicit/static pattern stem: '%s'\n" msgstr "# Implicit/statisk mönsterstam: â€%sâ€\n" #: src/file.c:1036 msgid "# File is an intermediate prerequisite." msgstr "# Filen är ett övergÃ¥ende beroende." #: src/file.c:1040 msgid "# Also makes:" msgstr "# Skapar ocksÃ¥:" #: src/file.c:1046 msgid "# Modification time never checked." msgstr "# Ändringstiden har inte kontrollerats." #: src/file.c:1048 msgid "# File does not exist." msgstr "# Filen finns inte." #: src/file.c:1050 msgid "# File is very old." msgstr "# Filen är mycket gammal." #: src/file.c:1055 #, c-format msgid "# Last modified %s\n" msgstr "# Senast ändrad %s\n" #: src/file.c:1058 msgid "# File has been updated." msgstr "# Filen har uppdaterats." #: src/file.c:1058 msgid "# File has not been updated." msgstr "# Filen har inte uppdaterats." #: src/file.c:1062 msgid "# Recipe currently running (THIS IS A BUG)." msgstr "# Recept körs just nu (DETTA ÄR ETT FEL)." #: src/file.c:1065 msgid "# Dependencies recipe running (THIS IS A BUG)." msgstr "# Beroenderecept körs (DETTA ÄR ETT FEL)." #: src/file.c:1074 msgid "# Successfully updated." msgstr "# Uppdateringen lyckades." #: src/file.c:1078 msgid "# Needs to be updated (-q is set)." msgstr "# Behöver uppdateras (-q har angivits)." #: src/file.c:1081 msgid "# Failed to be updated." msgstr "# Uppdateringen misslyckades." #: src/file.c:1086 msgid "# Invalid value in 'command_state' member!" msgstr "# Ogiltigt värde i medlemmen â€command_stateâ€!" #: src/file.c:1105 msgid "" "\n" "# Files" msgstr "" "\n" "# Filer" #: src/file.c:1109 msgid "" "\n" "# files hash-table stats:\n" "# " msgstr "" "\n" "# statistik för filhashtabell:\n" "# " #: src/file.c:1119 #, c-format msgid "%s: Field '%s' not cached: %s" msgstr "%s: Fältet â€%s†cachas inte: %s" #: src/function.c:794 msgid "non-numeric first argument to 'word' function" msgstr "icke-numeriskt första argument till funktionen â€wordâ€" #: src/function.c:799 #, c-format 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" #: src/function.c:819 msgid "non-numeric first argument to 'wordlist' function" msgstr "icke-numeriskt första argument till funktionen â€wordlistâ€" #: src/function.c:821 msgid "non-numeric second argument to 'wordlist' function" msgstr "icke-numeriskt andra argument till funktionen â€wordlistâ€" #: src/function.c:1533 #, c-format msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n" msgstr "windows32_openpipe: DuplicateHandle(In) misslyckades (e=%ld)\n" #: src/function.c:1557 #, c-format msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n" msgstr "windows32_openpipe: DuplicateHandle(Fel) misslyckades (e=%ld)\n" #: src/function.c:1564 #, c-format msgid "CreatePipe() failed (e=%ld)\n" msgstr "CreatePipe() misslyckades (e=%ld)\n" #: src/function.c:1572 #, c-format msgid "windows32_openpipe(): process_init_fd() failed\n" msgstr "windows32_openpipe(): process_init_fd() misslyckades\n" #: src/function.c:1857 #, c-format msgid "Cleaning up temporary batch file %s\n" msgstr "Städar bort tillfällig satsfil %s\n" #: src/function.c:2230 src/function.c:2255 #, c-format msgid "file: missing filename" msgstr "file: filnamn saknas" #: src/function.c:2234 src/function.c:2265 #, c-format msgid "open: %s: %s" msgstr "öppna: %s: %s" #: src/function.c:2242 #, c-format msgid "write: %s: %s" msgstr "skriv: %s: %s" #: src/function.c:2245 src/function.c:2282 #, c-format msgid "close: %s: %s" msgstr "stäng: %s: %s" #: src/function.c:2258 #, c-format msgid "file: too many arguments" msgstr "file: för mÃ¥nga argument" #: src/function.c:2277 #, c-format msgid "read: %s: %s" msgstr "läs: %s: %s" #: src/function.c:2290 #, c-format msgid "file: invalid file operation: %s" msgstr "file: felaktig filÃ¥tgärd: %s" #: src/function.c:2405 #, c-format msgid "insufficient number of arguments (%d) to function '%s'" msgstr "otillräckligt antal argument (%d) till funktionen â€%sâ€" #: src/function.c:2417 #, c-format msgid "unimplemented on this platform: function '%s'" msgstr "ej implementerat pÃ¥ denna plattform: funktionen â€%sâ€" #: src/function.c:2483 #, c-format msgid "unterminated call to function '%s': missing '%c'" msgstr "oavslutat funktionsanrop â€%sâ€: â€%c†saknas" #: src/function.c:2667 #, c-format msgid "Empty function name" msgstr "Tomt funktionsnamn" #: src/function.c:2669 #, c-format msgid "Invalid function name: %s" msgstr "Felaktigt funktionsnamn: %s" #: src/function.c:2671 #, c-format msgid "Function name too long: %s" msgstr "Funktionsnamnet är för lÃ¥ngt: %s" #: src/function.c:2674 #, c-format msgid "Invalid minimum argument count (%u) for function %s" msgstr "Felaktigt minsta antal argument (%u) till funktionen â€%sâ€" #: src/function.c:2677 #, c-format msgid "Invalid maximum argument count (%u) for function %s" msgstr "Felaktigt största antal argument (%u) till funktionen â€%sâ€" #: src/getopt.c:659 #, c-format msgid "%s: option '%s' is ambiguous\n" msgstr "%s: flaggan â€%s†är tvetydig\n" #: src/getopt.c:683 #, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s: flaggan â€--%s†tar inget argument\n" #: src/getopt.c:688 #, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s: flaggan â€%c%s†tar inget argument\n" #: src/getopt.c:705 src/getopt.c:878 #, c-format msgid "%s: option '%s' requires an argument\n" msgstr "%s: flaggan â€%s†kräver ett argument\n" #: src/getopt.c:734 #, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s: okänd flagga â€--%sâ€\n" #: src/getopt.c:738 #, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s: okänd flagga â€%c%sâ€\n" #: src/getopt.c:764 #, c-format msgid "%s: illegal option -- %c\n" msgstr "%s: otillÃ¥ten flagga -- %c\n" #: src/getopt.c:767 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s: ogiltig flagga -- %c\n" #: src/getopt.c:797 src/getopt.c:927 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: flaggan kräver ett argument -- %c\n" #: src/getopt.c:844 #, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s: flaggan â€-W %s†är tvetydig\n" #: src/getopt.c:862 #, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s: flaggan â€-W %s†tar inget argument\n" #: src/guile.c:58 #, c-format msgid "guile: Expanding '%s'\n" msgstr "guile: Expanderar â€%sâ€\n" #: src/guile.c:74 #, c-format msgid "guile: Evaluating '%s'\n" msgstr "guile: Evaluerar â€%sâ€\n" #: src/hash.c:50 #, c-format msgid "can't allocate %lu bytes for hash table: memory exhausted" msgstr "kan inte allokera %lu byte för hashtabell: minnet slut" #: src/hash.c:280 #, c-format msgid "Load=%lu/%lu=%.0f%%, " msgstr "Fyllnadsgrad=%lu/%lu=%.0f %%, " #: src/hash.c:282 #, c-format msgid "Rehash=%u, " msgstr "Omhash=%u, " #: src/hash.c:283 #, c-format msgid "Collisions=%lu/%lu=%.0f%%" msgstr "Kollisioner=%lu/%lu=%.0f %%" #: src/implicit.c:38 #, c-format msgid "Looking for an implicit rule for '%s'.\n" msgstr "Letar efter en implicit regel för â€%sâ€.\n" #: src/implicit.c:54 #, c-format msgid "Looking for archive-member implicit rule for '%s'.\n" msgstr "Letar efter en implicit regel för arkivmedlemmen â€%sâ€.\n" #: src/implicit.c:311 #, c-format msgid "Avoiding implicit rule recursion.\n" msgstr "Undviker rekursion orsakad av implicit regel.\n" #: src/implicit.c:484 #, c-format msgid "Stem too long: '%s%.*s'.\n" msgstr "Stammen är för lÃ¥ng: â€%s%.*sâ€.\n" #: src/implicit.c:490 #, c-format msgid "Trying pattern rule with stem '%.*s'.\n" msgstr "Prövar mönsterregel med stammen â€%.*sâ€.\n" #: src/implicit.c:717 #, c-format msgid "Rejecting impossible rule prerequisite '%s'.\n" msgstr "Avvisar den omöjliga regelförutsättningen â€%sâ€.\n" #: src/implicit.c:718 #, c-format msgid "Rejecting impossible implicit prerequisite '%s'.\n" msgstr "Avvisar den omöjliga implicita förutsättningen â€%sâ€.\n" #: src/implicit.c:732 #, c-format msgid "Trying rule prerequisite '%s'.\n" msgstr "Prövar det regelförutsättningen â€%sâ€.\n" #: src/implicit.c:733 #, c-format msgid "Trying implicit prerequisite '%s'.\n" msgstr "Prövar den implicita förutsättningen â€%sâ€.\n" #: src/implicit.c:772 #, c-format msgid "Found prerequisite '%s' as VPATH '%s'\n" msgstr "Hittade förutsättningen â€%s†som VPATH â€%sâ€\n" #: src/implicit.c:786 #, c-format msgid "Looking for a rule with intermediate file '%s'.\n" msgstr "Letar efter en regel med mellanfilen â€%sâ€.\n" #: src/job.c:370 msgid "Cannot create a temporary file\n" msgstr "Kan inte skapa en temporärfil\n" #: src/job.c:548 msgid " (core dumped)" msgstr " (minnesdump)" #: src/job.c:553 msgid " (ignored)" msgstr " (ignoreras)" #: src/job.c:557 src/job.c:1892 msgid "" msgstr "" #: src/job.c:573 #, c-format msgid "%s[%s: %s] Error %d%s" msgstr "%s[%s: %s] Fel %d%s" #: src/job.c:662 #, c-format msgid "*** Waiting for unfinished jobs...." msgstr "*** Inväntar oavslutade jobb..." #: src/job.c:704 #, c-format msgid "Live child %p (%s) PID %s %s\n" msgstr "Levande barnprocess %p (%s) PID %s %s\n" #: src/job.c:706 src/job.c:900 src/job.c:1072 src/job.c:1644 #, c-format msgid " (remote)" msgstr " (fjärr)" #: src/job.c:898 #, c-format msgid "Reaping winning child %p PID %s %s\n" msgstr "Inhöstar lyckad barnprocess: %p PID %s %s\n" #: src/job.c:899 #, c-format msgid "Reaping losing child %p PID %s %s\n" msgstr "Inhöstar misslyckad barnprocess: %p PID %s %s\n" #: src/job.c:950 #, c-format msgid "Cleaning up temp batch file %s\n" msgstr "Städar bort tillfällig satsfil %s\n" #: src/job.c:956 #, c-format msgid "Cleaning up temp batch file %s failed (%d)\n" msgstr "Bortstädning av tillfällig satsfil %s misslyckades (%d)\n" #: src/job.c:1071 #, c-format msgid "Removing child %p PID %s%s from chain.\n" msgstr "Tar bort barnprocessen %p PID %s%s frÃ¥n kedjan.\n" #: src/job.c:1120 #, c-format msgid "Released token for child %p (%s).\n" msgstr "Frigjorde symbol för barnprocessen %p (%s).\n" #: src/job.c:1575 src/job.c:2487 #, c-format msgid "process_easy() failed to launch process (e=%ld)\n" msgstr "process_easy() misslyckades med processtart (e=%ld)\n" #: src/job.c:1579 src/job.c:2491 #, c-format msgid "" "\n" "Counted %d args in failed launch\n" msgstr "" "\n" "Räknade till %d argument vid misslyckad start\n" #: src/job.c:1642 #, 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" #: src/job.c:1875 #, c-format msgid "Obtained token for child %p (%s).\n" msgstr "Erhöll symbol för barnprocessen %p (%s).\n" #: src/job.c:1902 #, c-format msgid "%s: target '%s' does not exist" msgstr "%s: mÃ¥let â€%s†finns inte" #: src/job.c:1905 #, c-format msgid "%s: update target '%s' due to: %s" msgstr "%s: uppdatera mÃ¥let â€%s†pÃ¥ grund av: %s" #: src/job.c:2108 #, c-format msgid "cannot enforce load limits on this operating system" msgstr "kan inte upprätthÃ¥lla lastbegränsningar i detta operativsystem" #: src/job.c:2110 msgid "cannot enforce load limit: " msgstr "kan inte upprätthÃ¥lla lastbegränsning: " #: src/job.c:2200 #, c-format msgid "no more file handles: could not duplicate stdin\n" msgstr "inga fler filhandtag: kunde inte duplicera standard in\n" #: src/job.c:2212 #, c-format msgid "no more file handles: could not duplicate stdout\n" msgstr "inga fler filhandtag: kunde inte duplicera standard ut\n" #: src/job.c:2226 #, c-format msgid "no more file handles: could not duplicate stderr\n" msgstr "inga fler filhandtag: kunde inte duplicera standard fel\n" #: src/job.c:2241 #, c-format msgid "Could not restore stdin\n" msgstr "Kunde inte Ã¥terställa standard in\n" #: src/job.c:2249 #, c-format msgid "Could not restore stdout\n" msgstr "Kunde inte Ã¥terställa standard ut\n" #: src/job.c:2257 #, c-format msgid "Could not restore stderr\n" msgstr "Kunde inte Ã¥terställa standard fel\n" #: src/job.c:2520 #, 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" #: src/job.c:2623 #, c-format msgid "spawnvpe: environment space might be exhausted" msgstr "spawnvpe: miljöutrymmet kanske är slut" #: src/job.c:2862 #, c-format msgid "$SHELL changed (was '%s', now '%s')\n" msgstr "$SHELL ändrades (var â€%sâ€, är nu â€%sâ€)\n" #: src/job.c:3300 src/job.c:3485 #, c-format msgid "Creating temporary batch file %s\n" msgstr "Skapar tillfällig satsfil %s\n" #: src/job.c:3308 #, c-format msgid "" "Batch file contents:\n" "\t@echo off\n" msgstr "" "SatsfilinnehÃ¥ll:\n" "\t@echo off\n" #: src/job.c:3497 #, c-format msgid "" "Batch file contents:%s\n" "\t%s\n" msgstr "" "SatsfilinnehÃ¥ll:%s\n" "\t%s\n" #: src/job.c:3605 #, 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" #: src/load.c:60 #, c-format msgid "Failed to open global symbol table: %s" msgstr "Misslyckades att öppna den globala symboltabellen: %s" #: src/load.c:97 #, c-format msgid "Loaded object %s is not declared to be GPL compatible" msgstr "Laddat objekt %s är inte deklarerat att vara GPL-kompatibelt" #: src/load.c:104 #, c-format msgid "Failed to load symbol %s from %s: %s" msgstr "Misslyckades att ladda symbolen %s frÃ¥n %s: %s" #: src/load.c:149 #, c-format msgid "Empty symbol name for load: %s" msgstr "Tomt symbolnamn för laddning: %s" #: src/load.c:204 #, c-format msgid "Loading symbol %s from %s\n" msgstr "Laddar symbol %s frÃ¥n %s\n" #: src/load.c:256 #, c-format msgid "The 'load' operation is not supported on this platform." msgstr "Operationen â€load†stödjs inte pÃ¥ denna plattform." #: src/main.c:335 msgid "Options:\n" msgstr "Flaggor:\n" #: src/main.c:336 msgid " -b, -m Ignored for compatibility.\n" msgstr " -b, -m Ignoreras av kompatibilitetsskäl.\n" #: src/main.c:338 msgid " -B, --always-make Unconditionally make all targets.\n" msgstr " -B, --always-make Bygg ovillkorligen alla mÃ¥l.\n" #: src/main.c:340 msgid "" " -C DIRECTORY, --directory=DIRECTORY\n" " Change to DIRECTORY before doing anything.\n" msgstr "" " -C KATALOG, --directory=KATALOG\n" " Byt katalog till KATALOG innan nÃ¥got görs.\n" #: src/main.c:343 msgid " -d Print lots of debugging information.\n" msgstr "" " -d Skriv ut massor av felsökningsinformation.\n" #: src/main.c:345 msgid "" " --debug[=FLAGS] Print various types of debugging information.\n" msgstr "" " --debug[=FLAGGOR] Skriv ut olika sorters " "felsökningsinformation.\n" #: src/main.c:347 msgid "" " -e, --environment-overrides\n" " Environment variables override makefiles.\n" msgstr "" " -e, --environment-overrides\n" " Miljövariabler Ã¥sidosätter makefiler.\n" #: src/main.c:350 msgid "" " -E STRING, --eval=STRING Evaluate STRING as a makefile statement.\n" msgstr " -E STRÄNG, --eval=STRÄNG Evaluera STRÄNG som en makefile-sats.\n" #: src/main.c:352 msgid "" " -f FILE, --file=FILE, --makefile=FILE\n" " Read FILE as a makefile.\n" msgstr "" " -f FIL, --file=FIL, --makefile=FIL\n" " Använd FIL som makefil.\n" #: src/main.c:355 msgid " -h, --help Print this message and exit.\n" msgstr " -h, --help Skriv ut detta meddelande och avsluta.\n" #: src/main.c:357 msgid " -i, --ignore-errors Ignore errors from recipes.\n" msgstr " -i, --ignore-errors Ignorera fel frÃ¥n recept.\n" #: src/main.c:359 msgid "" " -I DIRECTORY, --include-dir=DIRECTORY\n" " Search DIRECTORY for included makefiles.\n" msgstr "" " -I KATALOG, --include-dir=KATALOG\n" " Genomsök KATALOG efter inkluderade makefiler.\n" #: src/main.c:362 msgid "" " -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no " "arg.\n" msgstr "" " -j [N], --jobs[=N] TillÃ¥t N samtidiga jobb; oändligt mÃ¥nga om " "inget antal anges.\n" #: src/main.c:364 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" #: src/main.c:366 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" " PÃ¥börja fler jobb endast om lasten understiger " "N.\n" #: src/main.c:369 msgid "" " -L, --check-symlink-times Use the latest mtime between symlinks and " "target.\n" msgstr "" " -L, --check-symlink-times Använd den senaste av mtiderna för symboliska " "länkar eller mÃ¥l.\n" #: src/main.c:371 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" " Kör inte nÃ¥got recept, skriv bara ut dem.\n" #: src/main.c:374 msgid "" " -o FILE, --old-file=FILE, --assume-old=FILE\n" " Consider FILE to be very old and don't remake " "it.\n" msgstr "" " -o FIL, --old-file=FIL, --assume-old=FIL\n" " Betrakta FIL som mycket gammal och Ã¥terskapa " "den inte.\n" #: src/main.c:377 msgid "" " -O[TYPE], --output-sync[=TYPE]\n" " Synchronize output of parallel jobs by TYPE.\n" msgstr "" " -O[TYP], --output-sync[=TYP]\n" " Synkronisera utmatningen av parallella jobb\n" " enligt TYP.\n" #: src/main.c:380 msgid " -p, --print-data-base Print make's internal database.\n" msgstr " -p, --print-data-base Skriv ut makes interna databas.\n" #: src/main.c:382 msgid "" " -q, --question Run no recipe; exit status says if up to " "date.\n" msgstr "" " -q, --question Kör inga recept; slutstatus visar om det är " "aktuellt.\n" #: src/main.c:384 msgid " -r, --no-builtin-rules Disable the built-in implicit rules.\n" msgstr "" " -r, --no-builtin-rules Inaktivera de inbyggda implicita reglerna.\n" #: src/main.c:386 msgid " -R, --no-builtin-variables Disable the built-in variable settings.\n" msgstr "" " -R, --no-builtin-variables Inaktivera de inbyggda " "variabelinställningarna.\n" #: src/main.c:388 msgid " -s, --silent, --quiet Don't echo recipes.\n" msgstr " -s, --silent, --quiet Ã…terge inte recept.\n" #: src/main.c:390 msgid " --no-silent Echo recipes (disable --silent mode).\n" msgstr "" " --no-silent Skriv recept (avaktivera --silent-läge).\n" #: src/main.c:392 msgid "" " -S, --no-keep-going, --stop\n" " Turns off -k.\n" msgstr "" " -S, --no-keep-going, --stop\n" " Stäng av -k.\n" #: src/main.c:395 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" #: src/main.c:397 msgid " --trace Print tracing information.\n" msgstr " --trace Skriv spÃ¥rningsinformation.\n" #: src/main.c:399 msgid "" " -v, --version Print the version number of make and exit.\n" msgstr "" " -v, --version Skriv ut makes versionsnummer och avsluta.\n" #: src/main.c:401 msgid " -w, --print-directory Print the current directory.\n" msgstr " -w, --print-directory Skriv ut aktuell katalog.\n" #: src/main.c:403 msgid "" " --no-print-directory Turn off -w, even if it was turned on " "implicitly.\n" msgstr "" " --no-print-directory Stäng av -w, även om det är implicit " "pÃ¥slaget.\n" #: src/main.c:405 msgid "" " -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n" " Consider FILE to be infinitely new.\n" msgstr "" " -W FIL, --what-if=FIL, --new-file=FIL, --assume-new=FIL\n" " Betrakta FIL som hur ny som helst.\n" #: src/main.c:408 msgid "" " --warn-undefined-variables Warn when an undefined variable is " "referenced.\n" msgstr "" " --warn-undefined-variables Varna vid användning av en odefinierad " "variabel.\n" #: src/main.c:671 #, c-format msgid "empty string invalid as file name" msgstr "en tom sträng är ett ogiltigt filnamn" #: src/main.c:754 #, c-format msgid "unknown debug level specification '%s'" msgstr "okänd felsökningsnivÃ¥ â€%s†angiven" #: src/main.c:794 #, c-format msgid "unknown output-sync type '%s'" msgstr "okänd typ av utmatningssynkronisering â€%sâ€" #: src/main.c:849 #, 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" #: src/main.c:856 #, c-format msgid "" "\n" "Unhandled exception filter called from program %s\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" msgstr "" "\n" "Ett ohanterat undantagsfilter anropades frÃ¥n programmet %s\n" "Undantagskod = %lx\n" "Undantagsflaggor = %lx\n" "Undantagsadress = 0x%p\n" #: src/main.c:864 #, c-format msgid "Access violation: write operation at address 0x%p\n" msgstr "Ã…tkomstförseelse: skrivinstruktion pÃ¥ adressen 0x%p\n" #: src/main.c:865 #, c-format msgid "Access violation: read operation at address 0x%p\n" msgstr "Ã…tkomstförseelse: läsinstruktion pÃ¥ adressen 0x%p\n" #: src/main.c:941 src/main.c:956 #, c-format msgid "find_and_set_shell() setting default_shell = %s\n" msgstr "find_and_set_shell() ger default_shell = %s\n" #: src/main.c:1009 #, 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" #: src/main.c:1609 #, c-format 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." #: src/main.c:1617 #, c-format msgid "warning: -j%d forced in submake: resetting jobserver mode." msgstr "varning: -j%d framtvingat i del-make: Ã¥terställer jobbserverläge." #: src/main.c:1781 #, c-format msgid "Makefile from standard input specified twice." msgstr "Makefil frÃ¥n standard in angavs dubbelt." #: src/main.c:1819 src/vmsjobs.c:1248 msgid "fopen (temporary file)" msgstr "fopen (temporärfil)" #: src/main.c:1825 msgid "fwrite (temporary file)" msgstr "fwrite (temporärfil)" #: src/main.c:2004 #, c-format msgid "warning: -j%d forced in makefile: resetting jobserver mode." msgstr "varning: -j%d framtvingat i makefile: Ã¥terställer jobbserverläge." #: src/main.c:2068 #, c-format msgid "Parallel jobs (-j) are not supported on this platform." msgstr "Parallella jobb (-j) stöds inte pÃ¥ denna plattform." #: src/main.c:2069 #, c-format msgid "Resetting to single job (-j1) mode." msgstr "Ã…terställer till enkeljobbsläge (-j1)." #: src/main.c:2109 #, c-format msgid "Symbolic links not supported: disabling -L." msgstr "Symboliska länkar stöds inte: inaktiverar -L." #: src/main.c:2190 #, c-format msgid "Updating makefiles....\n" msgstr "Uppdaterar makefiler...\n" #: src/main.c:2226 #, c-format msgid "Makefile '%s' might loop; not remaking it.\n" msgstr "Makefilen â€%s†kan loopa; Ã¥terskapas inte.\n" #: src/main.c:2303 #, c-format msgid "Failed to remake makefile '%s'." msgstr "Misslyckades med att Ã¥terskapa makefilen â€%sâ€." #: src/main.c:2323 #, c-format msgid "Included makefile '%s' was not found." msgstr "Den inkluderade makefilen â€%s†fanns inte." #: src/main.c:2328 #, c-format msgid "Makefile '%s' was not found" msgstr "Makefilen â€%s†fanns inte" #: src/main.c:2394 #, c-format msgid "Couldn't change back to original directory." msgstr "Kunde inte Ã¥tergÃ¥ till ursprungskatalogen." #: src/main.c:2402 #, c-format msgid "Re-executing[%u]:" msgstr "Utför pÃ¥ nytt[%u]:" #: src/main.c:2522 msgid "unlink (temporary file): " msgstr "avlänka (temporärfil): " #: src/main.c:2555 #, c-format msgid ".DEFAULT_GOAL contains more than one target" msgstr ".DEFAULT_GOAL innehÃ¥ller fler än ett mÃ¥l" #: src/main.c:2579 #, c-format msgid "No targets" msgstr "Inga mÃ¥l" #: src/main.c:2581 #, c-format msgid "No targets specified and no makefile found" msgstr "Inga mÃ¥l angavs och ingen makefil hittades" #: src/main.c:2586 #, c-format msgid "Updating goal targets....\n" msgstr "Uppdaterar slutmÃ¥l...\n" #: src/main.c:2610 #, c-format msgid "warning: Clock skew detected. Your build may be incomplete." msgstr "" "varning: Klockförskjutning upptäckt. Bygget kan ha blivit ofullständigt." #: src/main.c:2804 #, c-format msgid "Usage: %s [options] [target] ...\n" msgstr "Användning: %s [flaggor] [mÃ¥l] ...\n" #: src/main.c:2810 #, c-format msgid "" "\n" "This program built for %s\n" msgstr "" "\n" "Detta program byggdes för %s\n" #: src/main.c:2812 #, c-format msgid "" "\n" "This program built for %s (%s)\n" msgstr "" "\n" "Detta program byggdes för %s (%s)\n" #: src/main.c:2815 #, c-format msgid "Report bugs to \n" msgstr "" "Anmäl fel till .\n" "Skicka synpunkter pÃ¥ översättningen till .\n" #: src/main.c:2901 #, 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" #: src/main.c:2965 #, c-format msgid "the '-%c' option requires a positive integer argument" msgstr "flaggan â€-%c†kräver ett positivt heltal som argument" #: src/main.c:3363 #, c-format msgid "%sBuilt for %s\n" msgstr "%sByggt för %s\n" #: src/main.c:3365 #, c-format msgid "%sBuilt for %s (%s)\n" msgstr "%sByggt för %s (%s)\n" #: src/main.c:3376 #, c-format msgid "" "%sLicense GPLv3+: GNU GPL version 3 or later \n" "%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 "" "%sLicens GPLv3+: GNU GPL version 3 eller senare \n" "%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" #: src/main.c:3397 #, c-format msgid "" "\n" "# Make data base, printed on %s" msgstr "" "\n" "# Make-databas, utskriven %s" #: src/main.c:3407 #, c-format msgid "" "\n" "# Finished Make data base on %s\n" msgstr "" "\n" "# Färdigställde Make-databas %s\n" #: src/misc.c:643 #, 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" #: src/misc.c:664 msgid "Initialized access" msgstr "Ã…tkomst inledd" #: src/misc.c:743 msgid "User access" msgstr "AnvändarÃ¥tkomst" #: src/misc.c:791 msgid "Make access" msgstr "Make-Ã¥tkomst" #: src/misc.c:825 msgid "Child access" msgstr "BarnÃ¥tkomst" #: src/output.c:97 #, c-format msgid "%s: Entering an unknown directory\n" msgstr "%s: GÃ¥r till en okänd katalog\n" #: src/output.c:99 #, c-format msgid "%s: Leaving an unknown directory\n" msgstr "%s: Lämnar en okänd katalog\n" #: src/output.c:102 #, c-format msgid "%s: Entering directory '%s'\n" msgstr "%s: GÃ¥r till katalogen â€%sâ€\n" #: src/output.c:104 #, c-format msgid "%s: Leaving directory '%s'\n" msgstr "%s: Lämnar katalogen â€%sâ€\n" #: src/output.c:108 #, c-format msgid "%s[%u]: Entering an unknown directory\n" msgstr "%s[%u]: GÃ¥r till en okänd katalog\n" #: src/output.c:110 #, c-format msgid "%s[%u]: Leaving an unknown directory\n" msgstr "%s[%u]: Lämnar en okänd katalog\n" #: src/output.c:113 #, c-format msgid "%s[%u]: Entering directory '%s'\n" msgstr "%s[%u]: GÃ¥r till katalogen â€%sâ€\n" #: src/output.c:115 #, c-format msgid "%s[%u]: Leaving directory '%s'\n" msgstr "%s[%u]: Lämnar katalogen â€%sâ€\n" #: src/output.c:442 src/output.c:444 #, c-format msgid "write error: stdout" msgstr "skrivfel: standard ut" #: src/output.c:624 msgid ". Stop.\n" msgstr ". Stannar.\n" #: src/output.c:658 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" #: src/output.c:667 #, c-format msgid "%s: %s" msgstr "%s: %s" #: src/output.h:62 #, c-format msgid "-O[TYPE] (--output-sync[=TYPE]) is not configured for this build." msgstr "-O[TYP] (--output-sync[=TYP]) är inte konfigurerat för detta bygge." #: src/posixos.c:90 msgid "creating jobs pipe" msgstr "skapar jobbrör" #: src/posixos.c:98 src/posixos.c:251 msgid "duping jobs pipe" msgstr "duplicerar jobbrör" #: src/posixos.c:104 msgid "init jobserver pipe" msgstr "iordningställer rör till jobbserver" #: src/posixos.c:119 #, c-format msgid "internal error: invalid --jobserver-auth string '%s'" msgstr "internt fel: ogiltig sträng --jobserver-auth â€%sâ€" #: src/posixos.c:122 #, c-format msgid "Jobserver client (fds %d,%d)\n" msgstr "Jobbserverklient (fb %d,%d)\n" #: src/posixos.c:138 msgid "jobserver pipeline" msgstr "rör till jobbserver" #: src/posixos.c:186 msgid "write jobserver" msgstr "skriver till jobbserver" #: src/posixos.c:300 #, c-format msgid "job server shut down" msgstr "jobbservern stängdes ner" #: src/posixos.c:303 msgid "pselect jobs pipe" msgstr "pselect jobbrör" #: src/posixos.c:319 src/posixos.c:433 msgid "read jobs pipe" msgstr "läser frÃ¥n jobbledning" #: src/read.c:181 #, c-format msgid "Reading makefiles...\n" msgstr "Läser makefiler...\n" #: src/read.c:336 #, c-format msgid "Reading makefile '%s'" msgstr "Läser makefilen â€%sâ€" #: src/read.c:338 #, c-format msgid " (no default goal)" msgstr " (inget standardmÃ¥l)" #: src/read.c:340 #, c-format msgid " (search path)" msgstr " (sökväg)" #: src/read.c:342 #, c-format msgid " (don't care)" msgstr " (oviktigt)" #: src/read.c:344 #, c-format msgid " (no ~ expansion)" msgstr " (ingen ~-expansion)" #: src/read.c:655 #, c-format msgid "Skipping UTF-8 BOM in makefile '%s'\n" msgstr "Hoppar över UTF-8-BOM i makefilen â€%sâ€\n" #: src/read.c:658 #, c-format msgid "Skipping UTF-8 BOM in makefile buffer\n" msgstr "Hoppar över UTF-8-BOM i makefile-buffert\n" #: src/read.c:787 #, c-format msgid "invalid syntax in conditional" msgstr "ogiltig syntax i villkorssats" #: src/read.c:960 #, c-format msgid "%s: failed to load" msgstr "%s: misslyckades att ladda" #: src/read.c:986 #, c-format msgid "recipe commences before first target" msgstr "recept inleds före första mÃ¥let" #: src/read.c:1035 #, c-format msgid "missing rule before recipe" msgstr "regel saknas före recept" #: src/read.c:1136 #, c-format msgid "missing separator (did you mean TAB instead of 8 spaces?)" msgstr "separator saknas (var avsikten TAB i stället för 8 mellanslag?)" #: src/read.c:1138 #, c-format msgid "missing separator" msgstr "separator saknas" #: src/read.c:1283 #, c-format msgid "missing target pattern" msgstr "mÃ¥lmönster saknas" #: src/read.c:1285 #, c-format msgid "multiple target patterns" msgstr "flera mÃ¥lmönster" #: src/read.c:1289 #, c-format msgid "target pattern contains no '%%'" msgstr "mÃ¥lmönstret innehÃ¥ller inget â€%%â€" #: src/read.c:1404 #, c-format msgid "missing 'endif'" msgstr "â€endif†saknas" #: src/read.c:1443 src/read.c:1488 src/variable.c:1600 #, c-format msgid "empty variable name" msgstr "tomt variabelnamn" #: src/read.c:1478 #, c-format msgid "extraneous text after 'define' directive" msgstr "överflödig text efter direktivet â€defineâ€" #: src/read.c:1503 #, c-format msgid "missing 'endef', unterminated 'define'" msgstr "â€endef†saknas, oavslutad â€defineâ€" #: src/read.c:1531 #, c-format msgid "extraneous text after 'endef' directive" msgstr "överflödig text efter direktivet â€endefâ€" #: src/read.c:1603 #, c-format msgid "extraneous text after '%s' directive" msgstr "överflödig text efter direktivet â€%sâ€" #: src/read.c:1604 #, c-format msgid "extraneous '%s'" msgstr "överflödigt â€%sâ€" #: src/read.c:1632 #, c-format msgid "only one 'else' per conditional" msgstr "endast ett â€else†per villkor" #: src/read.c:1908 #, c-format msgid "Malformed target-specific variable definition" msgstr "Felformad mÃ¥lberoende variabeldefinition" #: src/read.c:1968 #, c-format msgid "prerequisites cannot be defined in recipes" msgstr "beroenden kan inte definieras i recept" #: src/read.c:1986 #, c-format msgid "grouped targets must provide a recipe" msgstr "grupperade mÃ¥l mÃ¥ste tillhandahÃ¥lla ett recept" #: src/read.c:2029 #, c-format msgid "mixed implicit and static pattern rules" msgstr "blandade implicita regler och statiska mönsterregler" #: src/read.c:2052 #, c-format msgid "mixed implicit and normal rules" msgstr "blandade implicita regler och normala regler" #: src/read.c:2107 #, c-format msgid "target '%s' doesn't match the target pattern" msgstr "mÃ¥let â€%s†motsvarar inte mÃ¥lmönstret" #: src/read.c:2122 src/read.c:2168 #, c-format msgid "target file '%s' has both : and :: entries" msgstr "mÃ¥lfilen â€%s†har bÃ¥de poster med : och ::" #: src/read.c:2128 #, c-format msgid "target '%s' given more than once in the same rule" msgstr "mÃ¥let â€%s†anges flera gÃ¥nger i samma regel" #: src/read.c:2138 #, c-format msgid "warning: overriding recipe for target '%s'" msgstr "varning: Ã¥sidosätter recept för mÃ¥let â€%sâ€" #: src/read.c:2141 #, c-format msgid "warning: ignoring old recipe for target '%s'" msgstr "varning: ignorerar gammalt recept för mÃ¥let â€%sâ€" #: src/read.c:2254 #, c-format msgid "*** mixed implicit and normal rules: deprecated syntax" msgstr "*** blandade implicita regler och normala regler: förÃ¥ldrad syntax" #: src/read.c:2271 #, c-format msgid "warning: overriding group membership for target '%s'" msgstr "varning: Ã¥sidosätter gruppmedlemskap för mÃ¥let â€%sâ€" #: src/read.c:2636 #, c-format msgid "warning: NUL character seen; rest of line ignored" msgstr "varning: NUL-tecken upptäckt, bortser frÃ¥n resten av raden" #: src/remake.c:226 #, c-format msgid "Nothing to be done for '%s'." msgstr "Inget behöver göras för â€%sâ€." #: src/remake.c:227 #, c-format msgid "'%s' is up to date." msgstr "â€%s†är aktuell." #: src/remake.c:323 #, c-format msgid "Pruning file '%s'.\n" msgstr "Beskär filen â€%sâ€.\n" #: src/remake.c:389 #, 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" #: src/remake.c:399 #, c-format msgid "%sNo rule to make target '%s'%s" msgstr "%sIngen regel för att skapa mÃ¥let â€%sâ€%s" #: src/remake.c:425 #, c-format msgid "Considering target file '%s'.\n" msgstr "Överväger mÃ¥lfilen â€%sâ€.\n" #: src/remake.c:432 #, c-format msgid "Recently tried and failed to update file '%s'.\n" msgstr "Misslyckades nyligen med att uppdatera filen â€%sâ€.\n" #: src/remake.c:444 #, c-format msgid "File '%s' was considered already.\n" msgstr "Filen â€%s†har redan övervägts.\n" #: src/remake.c:454 #, c-format msgid "Still updating file '%s'.\n" msgstr "Uppdaterar fortfarande filen â€%sâ€.\n" #: src/remake.c:457 #, c-format msgid "Finished updating file '%s'.\n" msgstr "Slutförde uppdaterandet av filen â€%sâ€.\n" #: src/remake.c:486 #, c-format msgid "File '%s' does not exist.\n" msgstr "Filen â€%s†finns inte.\n" #: src/remake.c:494 #, 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" #: src/remake.c:507 src/remake.c:1039 #, c-format msgid "Found an implicit rule for '%s'.\n" msgstr "Hittade en implicit regel för â€%sâ€.\n" #: src/remake.c:509 src/remake.c:1041 #, c-format msgid "No implicit rule found for '%s'.\n" msgstr "Hittade ingen implicit regel för â€%sâ€.\n" #: src/remake.c:515 #, c-format msgid "Using default recipe for '%s'.\n" msgstr "Använder standardrecept för â€%sâ€.\n" #: src/remake.c:549 src/remake.c:1088 #, c-format msgid "Circular %s <- %s dependency dropped." msgstr "Det cirkulära beroendet %s <- %s släpptes." #: src/remake.c:674 #, c-format msgid "Finished prerequisites of target file '%s'.\n" msgstr "Avslutade förutsättningarna för mÃ¥lfilen â€%sâ€.\n" #: src/remake.c:680 #, c-format msgid "The prerequisites of '%s' are being made.\n" msgstr "Förutsättningarna för â€%s†skapas.\n" #: src/remake.c:694 #, c-format msgid "Giving up on target file '%s'.\n" msgstr "Ger upp med mÃ¥lfilen â€%sâ€.\n" #: src/remake.c:699 #, c-format msgid "Target '%s' not remade because of errors." msgstr "MÃ¥let â€%s†återskapades inte pÃ¥ grund av fel." #: src/remake.c:751 #, 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" #: src/remake.c:756 #, 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" #: src/remake.c:761 #, c-format msgid "Prerequisite '%s' is newer than target '%s'.\n" msgstr "Förutsättningen â€%s†är nyare än mÃ¥let â€%sâ€.\n" #: src/remake.c:764 #, c-format msgid "Prerequisite '%s' is older than target '%s'.\n" msgstr "Förutsättningen â€%s†är äldre än mÃ¥let â€%sâ€.\n" #: src/remake.c:782 #, 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" #: src/remake.c:789 #, 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" #: src/remake.c:794 #, c-format msgid "Making '%s' due to always-make flag.\n" msgstr "Skapar â€%s†pÃ¥ grund av flaggan always-make.\n" #: src/remake.c:802 #, c-format msgid "No need to remake target '%s'" msgstr "Inget behov att Ã¥terskapa mÃ¥let â€%sâ€" #: src/remake.c:804 #, c-format msgid "; using VPATH name '%s'" msgstr "; använder VPATH-namnet â€%sâ€" #: src/remake.c:824 #, c-format msgid "Must remake target '%s'.\n" msgstr "MÃ¥ste Ã¥terskapa mÃ¥let â€%sâ€.\n" #: src/remake.c:830 #, c-format msgid " Ignoring VPATH name '%s'.\n" msgstr " Bortser frÃ¥n VPATH-namnet â€%sâ€.\n" #: src/remake.c:839 #, c-format msgid "Recipe of '%s' is being run.\n" msgstr "Receptet för â€%s†körs.\n" #: src/remake.c:846 #, c-format msgid "Failed to remake target file '%s'.\n" msgstr "Misslyckades med att Ã¥terskapa mÃ¥lfilen â€%sâ€.\n" #: src/remake.c:849 #, c-format msgid "Successfully remade target file '%s'.\n" msgstr "Ã…terskapade mÃ¥lfilen â€%sâ€.\n" #: src/remake.c:852 #, c-format msgid "Target file '%s' needs to be remade under -q.\n" msgstr "MÃ¥lfilen â€%s†behöver Ã¥terskapas med -q.\n" #: src/remake.c:1047 #, c-format msgid "Using default commands for '%s'.\n" msgstr "Använder standardkommandon för â€%sâ€.\n" #: src/remake.c:1422 #, 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" #: src/remake.c:1662 #, c-format msgid ".LIBPATTERNS element '%s' is not a pattern" msgstr ".LIBPATTERNS-elementet â€%s†är inte ett mönster" #: src/remote-cstms.c:122 #, c-format msgid "Customs won't export: %s\n" msgstr "Customs kommer inte att exportera %s\n" #: src/rule.c:289 #, c-format msgid "warning: ignoring prerequisites on suffix rule definition" msgstr "" #: src/rule.c:530 msgid "" "\n" "# Implicit Rules" msgstr "" "\n" "# Implicita regler" #: src/rule.c:545 msgid "" "\n" "# No implicit rules." msgstr "" "\n" "# Inga implicita regler." #: src/rule.c:548 #, c-format msgid "" "\n" "# %u implicit rules, %u (%.1f%%) terminal." msgstr "" "\n" "# %u implicita regler, %u (%.1f %%) slutliga." #: src/rule.c:557 #, c-format msgid "BUG: num_pattern_rules is wrong! %u != %u" msgstr "FEL: num_pattern_rules är felaktigt! %u != %u" #: src/signame.c:84 msgid "unknown signal" msgstr "okänd signal" #: src/signame.c:92 msgid "Hangup" msgstr "Avringd" #: src/signame.c:95 msgid "Interrupt" msgstr "Avbrott" #: src/signame.c:98 msgid "Quit" msgstr "Avslutad" #: src/signame.c:101 msgid "Illegal Instruction" msgstr "OtillÃ¥ten instruktion" #: src/signame.c:104 msgid "Trace/breakpoint trap" msgstr "SpÃ¥rningsfälla" #: src/signame.c:109 msgid "Aborted" msgstr "Avbruten" #: src/signame.c:112 msgid "IOT trap" msgstr "IO-fälla" #: src/signame.c:115 msgid "EMT trap" msgstr "Emulatorfälla" #: src/signame.c:118 msgid "Floating point exception" msgstr "Flyttalsundantag" #: src/signame.c:121 msgid "Killed" msgstr "Dödad" #: src/signame.c:124 msgid "Bus error" msgstr "Bussfel" #: src/signame.c:127 msgid "Segmentation fault" msgstr "Segmenteringsfel" #: src/signame.c:130 msgid "Bad system call" msgstr "Felaktigt systemanrop" #: src/signame.c:133 msgid "Broken pipe" msgstr "Ledningsbrott" #: src/signame.c:136 msgid "Alarm clock" msgstr "Alarmklocka" #: src/signame.c:139 msgid "Terminated" msgstr "Avslutad" #: src/signame.c:142 msgid "User defined signal 1" msgstr "Användarsignal 1" #: src/signame.c:145 msgid "User defined signal 2" msgstr "Användarsignal 2" #: src/signame.c:150 src/signame.c:153 msgid "Child exited" msgstr "Barn avslutades" #: src/signame.c:156 msgid "Power failure" msgstr "Strömavbrott" #: src/signame.c:159 msgid "Stopped" msgstr "Stoppades" #: src/signame.c:162 msgid "Stopped (tty input)" msgstr "Stoppades (tty-läsning)" #: src/signame.c:165 msgid "Stopped (tty output)" msgstr "Stoppades (tty-utskrift)" #: src/signame.c:168 msgid "Stopped (signal)" msgstr "Stoppades (signal)" #: src/signame.c:171 msgid "CPU time limit exceeded" msgstr "CPU-tidsgräns överskreds" #: src/signame.c:174 msgid "File size limit exceeded" msgstr "Filstorleksgräns överskreds" #: src/signame.c:177 msgid "Virtual timer expired" msgstr "Virtuellt tidur löpte ut" #: src/signame.c:180 msgid "Profiling timer expired" msgstr "Profileringstidur löpte ut" #: src/signame.c:186 msgid "Window changed" msgstr "Fönster ändrat" #: src/signame.c:189 msgid "Continued" msgstr "Fortsatte" #: src/signame.c:192 msgid "Urgent I/O condition" msgstr "BrÃ¥dskande I/O-läge" #: src/signame.c:199 src/signame.c:208 msgid "I/O possible" msgstr "I/O-tillfälle" #: src/signame.c:202 msgid "SIGWIND" msgstr "SIGWIND" #: src/signame.c:205 msgid "SIGPHONE" msgstr "SIGPHONE" #: src/signame.c:211 msgid "Resource lost" msgstr "Miste resurs" #: src/signame.c:214 msgid "Danger signal" msgstr "Farosignal" #: src/signame.c:217 msgid "Information request" msgstr "Informationsbegäran" #: src/signame.c:220 msgid "Floating point co-processor not available" msgstr "Flyttalsprocessor inte tillgänglig" #: src/strcache.c:274 #, c-format msgid "" "\n" "%s No strcache buffers\n" msgstr "" "\n" "%s Inga strcache-buffertar\n" #: src/strcache.c:304 #, c-format msgid "" "\n" "%s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu " "B\n" msgstr "" "\n" "%s strcache-buffertar: totalt = %lu (%lu) / strängar = %lu / lagring = %lu " "B / snitt = %lu B\n" #: src/strcache.c:308 #, c-format msgid "" "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B\n" msgstr "" "%s aktuell buf: storlek = %hu B / använt = %hu B / antal = %hu / snitt = %u " "B\n" #: src/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" #: src/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" #: src/strcache.c:326 #, c-format msgid "" "\n" "%s strcache performance: lookups = %lu / hit rate = %lu%%\n" msgstr "" "\n" "%s strcache-prestanda: uppslagningar = %lu / träffsäkerhet = %lu %%\n" #: src/strcache.c:328 msgid "" "# hash-table stats:\n" "# " msgstr "" "# statistik för hashtabell:\n" "# " #: src/variable.c:1653 msgid "automatic" msgstr "automatisk" #: src/variable.c:1656 msgid "default" msgstr "normal" #: src/variable.c:1659 msgid "environment" msgstr "miljö" #: src/variable.c:1662 msgid "makefile" msgstr "makefil" #: src/variable.c:1665 msgid "environment under -e" msgstr "miljö enligt -e" #: src/variable.c:1668 msgid "command line" msgstr "kommandorad" #: src/variable.c:1671 msgid "'override' directive" msgstr "â€overrideâ€-direktiv" #: src/variable.c:1682 #, c-format msgid " (from '%s', line %lu)" msgstr " (frÃ¥n â€%sâ€, rad %lu)" #: src/variable.c:1745 msgid "# variable set hash-table stats:\n" msgstr "# statistik för variabelmängd-hashtabell:\n" #: src/variable.c:1756 msgid "" "\n" "# Variables\n" msgstr "" "\n" "# Variabler\n" #: src/variable.c:1760 msgid "" "\n" "# Pattern-specific Variable Values" msgstr "" "\n" "# Mönsterspecifika variabelvärden" #: src/variable.c:1774 msgid "" "\n" "# No pattern-specific variable values." msgstr "" "\n" "# Inga mönsterspecifika variabelvärden." #: src/variable.c:1776 #, c-format msgid "" "\n" "# %u pattern-specific variable values" msgstr "" "\n" "# %u mönsterspecifika variabelvärden" #: src/variable.h:229 #, c-format msgid "warning: undefined variable '%.*s'" msgstr "varning: odefinierad variabel â€%.*sâ€" #: src/vmsfunctions.c:91 #, c-format msgid "sys$search() failed with %d\n" msgstr "sys$search() misslyckades med %d\n" #: src/vmsjobs.c:244 #, 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" #: src/vmsjobs.c:681 #, c-format msgid "BUILTIN CD %s\n" msgstr "INBYGGT CD %s\n" #: src/vmsjobs.c:1224 #, c-format msgid "DCL: %s\n" msgstr "DCL: %s\n" #: src/vmsjobs.c:1284 #, c-format msgid "Append output to %s\n" msgstr "Lägg till utdata till %s\n" #: src/vmsjobs.c:1309 #, c-format msgid "Append %.*s and cleanup\n" msgstr "Lägg till %.*s och rensa upp\n" #: src/vmsjobs.c:1322 #, c-format msgid "Executing %s instead\n" msgstr "Utför %s i stället\n" #: src/vpath.c:603 msgid "" "\n" "# VPATH Search Paths\n" msgstr "" "\n" "# VPATH-sökvägar\n" #: src/vpath.c:620 msgid "# No 'vpath' search paths." msgstr "# Inga â€vpathâ€-sökvägar." #: src/vpath.c:622 #, c-format msgid "" "\n" "# %u 'vpath' search paths.\n" msgstr "" "\n" "# %u â€vpathâ€-sökvägar.\n" #: src/vpath.c:625 msgid "" "\n" "# No general ('VPATH' variable) search path." msgstr "" "\n" "# Ingen allmän sökväg (enligt â€VPATHâ€-variabeln)." #: src/vpath.c:631 msgid "" "\n" "# General ('VPATH' variable) search path:\n" "# " msgstr "" "\n" "# Allmän sökväg (enligt â€VPATHâ€-variabeln):\n" "# " #: src/w32/w32os.c:44 #, c-format msgid "Jobserver slots limited to %d\n" msgstr "Jobbserverfack begränsat till %d\n" #: src/w32/w32os.c:60 #, c-format msgid "creating jobserver semaphore: (Error %ld: %s)" msgstr "skapar jobbserversemafor: (Fel %ld: %s)" #: src/w32/w32os.c:79 #, 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)" #: src/w32/w32os.c:82 #, c-format msgid "Jobserver client (semaphore %s)\n" msgstr "Jobbserverklient (semafor %s)\n" #: src/w32/w32os.c:123 #, c-format msgid "release jobserver semaphore: (Error %ld: %s)" msgstr "släpp jobbserversemafor: (Fel %ld: %s)" #: src/w32/w32os.c:194 #, c-format msgid "semaphore or child process wait: (Error %ld: %s)" msgstr "väntan pÃ¥ semafor eller barnprocess: (Fel %ld: %s)" make-4.3/po/remove-potcdate.sin0000644000175000017500000000066013611136462013452 00000000000000# Sed script that remove the POT-Creation-Date line in the header entry # from a POT file. # # The distinction between the first and the following occurrences of the # pattern is achieved by looking at the hold space. /^"POT-Creation-Date: .*"$/{ x # Test if the hold space is empty. s/P/P/ ta # Yes it was empty. First occurrence. Remove the line. g d bb :a # The hold space was nonempty. Following occurrences. Do nothing. x :b } make-4.3/po/he.po0000644000175000017500000015477213611136531010610 00000000000000# Hebrew messages for GNU Make # Copyright (C) 2002 Free Software Foundation, Inc. # Eli Zaretskii , 2002. # msgid "" msgstr "" "Project-Id-Version: make 3.79.1\n" "Report-Msgid-Bugs-To: bug-make@gnu.org\n" "POT-Creation-Date: 2020-01-19 15:34-0500\n" "PO-Revision-Date: 2002-03-30 21:33+0300\n" "Last-Translator: Eli Zaretskii \n" "Language-Team: Hebrew \n" "Language: he\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" #: src/ar.c:46 #, fuzzy, c-format msgid "attempt to use unsupported feature: '%s'" msgstr "úëîúð äððéàù `%s' äðåëúá ùåîéù ïåéñð" #: src/ar.c:123 #, c-format msgid "touch archive member is not available on VMS" msgstr "VMS úëøòîá ïåéëøàá øáà ìù äòù/êéøàú éåðéùá äëéîú ïéà" #: src/ar.c:147 #, fuzzy, c-format msgid "touch: Archive '%s' does not exist" msgstr "íéé÷ åðéà `%s' ïåéëøà õáå÷ :touch" #: src/ar.c:150 #, fuzzy, c-format msgid "touch: '%s' is not a valid archive" msgstr "ïé÷ú ïåéëøà õáå÷ åðéà `%s' :touch" #: src/ar.c:157 #, fuzzy, c-format msgid "touch: Member '%s' does not exist in '%s'" msgstr "`%s' øáà ìéëî åðéà `%s' ïåéëøà :touch" #: src/ar.c:164 #, fuzzy, c-format msgid "touch: Bad return code from ar_member_touch on '%s'" msgstr "`%s' øåáò ïé÷ú-àì ãå÷ äøéæçä ar_member_touch :touch" #: src/arscan.c:130 #, fuzzy, c-format msgid "lbr$set_module() failed to extract module info, status = %d" msgstr "%d ñåèèñ ,lib$rset_module é\"ò ìåãåî ìò òãéî úôéìùá ïåìùë" #: src/arscan.c:236 #, fuzzy, c-format msgid "lbr$ini_control() failed with status = %d" msgstr "%d ñåèèñ íò ìùëð lbr$ini_control" #: src/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. #: src/arscan.c:944 #, fuzzy, c-format msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n" msgstr "Member `%s'%s: %ld bytes at %ld (%ld).\n" #: src/arscan.c:945 msgid " (name might be truncated)" msgstr " (name might be truncated)" #: src/arscan.c:947 #, c-format msgid " Date %s" msgstr " Date %s" #: src/arscan.c:948 #, c-format msgid " uid = %d, gid = %d, mode = 0%o.\n" msgstr " uid = %d, gid = %d, mode = 0%o.\n" #: src/commands.c:403 #, c-format msgid "Recipe has too many lines (%ud)" msgstr "" #: src/commands.c:504 msgid "*** Break.\n" msgstr "*** Break. ***\n" #: src/commands.c:628 #, fuzzy, c-format msgid "*** [%s] Archive member '%s' may be bogus; not deleted" msgstr "*** [%s] ÷çîéé àì ;ïé÷ú-éúìá úåéäì ìåìò `%s' ïåéëøà øáà ***" #: src/commands.c:632 #, fuzzy, c-format msgid "*** Archive member '%s' may be bogus; not deleted" msgstr "*** ÷çîéé àì ;ïé÷ú-éúìá úåéäì ìåìò `%s' ïåéëøà øáà ***" #: src/commands.c:646 #, fuzzy, c-format msgid "*** [%s] Deleting file '%s'" msgstr "*** [%s] `%s' õáå÷ ÷çåî ***" #: src/commands.c:648 #, fuzzy, c-format msgid "*** Deleting file '%s'" 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. #: src/commands.c:684 #, fuzzy msgid "# recipe to execute" msgstr "# commands to execute" #: src/commands.c:687 msgid " (built-in):" msgstr " (built-in):" #: src/commands.c:689 #, fuzzy, c-format msgid " (from '%s', line %lu):\n" msgstr " (from `%s', line %lu):\n" #: src/dir.c:1073 msgid "" "\n" "# Directories\n" msgstr "" "\n" "# Directories\n" #: src/dir.c:1085 #, c-format msgid "# %s: could not be stat'd.\n" msgstr "# %s: could not be stat'd.\n" #: src/dir.c:1089 #, fuzzy msgid "# %s (key %s, mtime %I64u): could not be opened.\n" msgstr "# %s (key %s, mtime %d): could not be opened.\n" #: src/dir.c:1094 #, 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" #: src/dir.c:1099 #, c-format msgid "# %s (device %ld, inode %ld): could not be opened.\n" msgstr "# %s (device %ld, inode %ld): could not be opened.\n" #: src/dir.c:1126 #, fuzzy msgid "# %s (key %s, mtime %I64u): " msgstr "# %s (key %s, mtime %d): " #: src/dir.c:1131 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): " msgstr "# %s (device %d, inode [%d,%d,%d]): " #: src/dir.c:1136 #, c-format msgid "# %s (device %ld, inode %ld): " msgstr "# %s (device %ld, inode %ld): " #: src/dir.c:1142 src/dir.c:1163 msgid "No" msgstr "No" #: src/dir.c:1145 src/dir.c:1166 msgid " files, " msgstr " files, " #: src/dir.c:1147 src/dir.c:1168 msgid "no" msgstr "no" #: src/dir.c:1150 msgid " impossibilities" msgstr " impossibilities" #: src/dir.c:1154 msgid " so far." msgstr " so far." #: src/dir.c:1171 #, fuzzy, c-format msgid " impossibilities in %lu directories.\n" msgstr " impossibilities in %u directories.\n" #: src/expand.c:125 #, fuzzy, c-format msgid "Recursive variable '%s' references itself (eventually)" msgstr "(øáã ìù åôåñá) åîöòì äééðôäì íøåâ `%s' éáéñøå÷ø äðúùî" #: src/expand.c:271 #, c-format msgid "unterminated variable reference" msgstr "äëìäë úîééúñî äðéà äðúùîì äééðôä" #: src/file.c:278 #, fuzzy, c-format msgid "Recipe was specified for file '%s' at %s:%lu," msgstr ",`%s' õáå÷ øåáò úåãå÷ô åðúéð %s õáå÷á %lu äøåùá" #: src/file.c:283 #, fuzzy, c-format msgid "Recipe for file '%s' was found by implicit rule search," msgstr ",íéùøåôî-éúìá íéììëá ùåôéç é\"ò åàöîð `%s' õáå÷ øåáò úåãå÷ô" #: src/file.c:287 #, fuzzy, c-format msgid "but '%s' is now considered the same file as '%s'." msgstr ".õáå÷ åúåàì äúò íéáùçð `%s' ïäå `%s' ïä íìåàå" #: src/file.c:290 #, fuzzy, c-format msgid "Recipe for '%s' will be ignored in favor of the one for '%s'." msgstr ".`%s' øåáò åìà ìò úåôéãò `%s' øåáò úåãå÷ô" #: src/file.c:310 #, fuzzy, c-format msgid "can't rename single-colon '%s' to double-colon '%s'" msgstr "`%s' íéããåá íééúåãå÷ðî `%s' íéìåôë íééúåãå÷ðì êåôäì ïúéð àì" #: src/file.c:316 #, fuzzy, c-format msgid "can't rename double-colon '%s' to single-colon '%s'" msgstr "`%s' íéìåôë íééúåãå÷ðî `%s' íéããåá íééúåãå÷ðì êåôäì ïúéð àì" #: src/file.c:408 #, fuzzy, c-format msgid "*** Deleting intermediate file '%s'" msgstr "*** `%s' íééðéá õáå÷ ÷çåî ***" #: src/file.c:412 #, fuzzy, c-format msgid "Removing intermediate files...\n" msgstr "*** `%s' íééðéá õáå÷ ÷çåî ***" #: src/file.c:872 msgid "Current time" msgstr "úëøòî ïåòù" #: src/file.c:876 #, c-format msgid "%s: Timestamp out of range; substituting %s" msgstr "øúåîä íåçúì õåçî äðéäù ,%s ìù ïîæä úîéúç úà %s-á óéìçî" # See the comment above about translations of text printed under -p. #: src/file.c:1016 msgid "# Not a target:" msgstr "# Not a target:" #: src/file.c:1021 msgid "# Precious file (prerequisite of .PRECIOUS)." msgstr "# Precious file (prerequisite of .PRECIOUS)." #: src/file.c:1023 msgid "# Phony target (prerequisite of .PHONY)." msgstr "# Phony target (prerequisite of .PHONY)." #: src/file.c:1025 #, fuzzy msgid "# Command line target." msgstr "# Command-line target." #: src/file.c:1027 #, fuzzy msgid "# A default, MAKEFILES, or -include/sinclude makefile." msgstr "# A default or MAKEFILES makefile." #: src/file.c:1029 #, fuzzy msgid "# Builtin rule" msgstr "" "\n" "# No implicit rules." #: src/file.c:1031 msgid "# Implicit rule search has been done." msgstr "# Implicit rule search has been done." #: src/file.c:1032 msgid "# Implicit rule search has not been done." msgstr "# Implicit rule search has not been done." #: src/file.c:1034 #, fuzzy, c-format msgid "# Implicit/static pattern stem: '%s'\n" msgstr "# Implicit/static pattern stem: `%s'\n" #: src/file.c:1036 msgid "# File is an intermediate prerequisite." msgstr "# File is an intermediate prerequisite." #: src/file.c:1040 msgid "# Also makes:" msgstr "# Also makes:" #: src/file.c:1046 msgid "# Modification time never checked." msgstr "# Modification time never checked." #: src/file.c:1048 msgid "# File does not exist." msgstr "# File does not exist." #: src/file.c:1050 msgid "# File is very old." msgstr "# File is very old." #: src/file.c:1055 #, c-format msgid "# Last modified %s\n" msgstr "# Last modified %s\n" #: src/file.c:1058 msgid "# File has been updated." msgstr "# File has been updated." #: src/file.c:1058 msgid "# File has not been updated." msgstr "# File has not been updated." #: src/file.c:1062 #, fuzzy msgid "# Recipe currently running (THIS IS A BUG)." msgstr "# Commands currently running (THIS IS A BUG)." #: src/file.c:1065 #, fuzzy msgid "# Dependencies recipe running (THIS IS A BUG)." msgstr "# Dependencies commands running (THIS IS A BUG)." #: src/file.c:1074 msgid "# Successfully updated." msgstr "# Successfully updated." #: src/file.c:1078 msgid "# Needs to be updated (-q is set)." msgstr "# Needs to be updated (-q is set)." #: src/file.c:1081 msgid "# Failed to be updated." msgstr "# Failed to be updated." #: src/file.c:1086 #, fuzzy msgid "# Invalid value in 'command_state' member!" msgstr "# Invalid value in `command_state' member!" #: src/file.c:1105 msgid "" "\n" "# Files" msgstr "" "\n" "# Files" #: src/file.c:1109 msgid "" "\n" "# files hash-table stats:\n" "# " msgstr "" #: src/file.c:1119 #, c-format msgid "%s: Field '%s' not cached: %s" msgstr "" #: src/function.c:794 #, fuzzy msgid "non-numeric first argument to 'word' function" msgstr "øôñî åðéà `word' úééö÷ðåôì ïåùàø èðîåâøà" #: src/function.c:799 #, fuzzy, c-format msgid "first argument to 'word' function must be greater than 0" msgstr "éáåéç úåéäì áééç `word' úééö÷ðåôì ïåùàø èðîåâøà" #: src/function.c:819 #, fuzzy msgid "non-numeric first argument to 'wordlist' function" msgstr "øôñî åðéà `wordlist' úééö÷ðåôì ïåùàø èðîåâøà" #: src/function.c:821 #, fuzzy msgid "non-numeric second argument to 'wordlist' function" msgstr "øôñî åðéà `wordlist' úééö÷ðåôì éðù èðîåâøà" #: src/function.c:1533 #, fuzzy, c-format msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n" msgstr "create_child_process: DuplicateHandle(In) failed (e=%d)\n" #: src/function.c:1557 #, fuzzy, c-format msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n" msgstr "create_child_process: DuplicateHandle(Err) failed (e=%d)\n" #: src/function.c:1564 #, fuzzy, c-format msgid "CreatePipe() failed (e=%ld)\n" msgstr "CreatePipe() failed (e=%d)\n" #: src/function.c:1572 #, fuzzy, c-format msgid "windows32_openpipe(): process_init_fd() failed\n" msgstr "windows32_openpipe (): process_init_fd() failed\n" #: src/function.c:1857 #, c-format msgid "Cleaning up temporary batch file %s\n" msgstr "`%s' éðîæ batch õáå÷ ÷ìñî\n" #: src/function.c:2230 src/function.c:2255 #, c-format msgid "file: missing filename" msgstr "" #: src/function.c:2234 src/function.c:2265 #, c-format msgid "open: %s: %s" msgstr "" #: src/function.c:2242 #, c-format msgid "write: %s: %s" msgstr "" #: src/function.c:2245 src/function.c:2282 #, c-format msgid "close: %s: %s" msgstr "" #: src/function.c:2258 #, c-format msgid "file: too many arguments" msgstr "" #: src/function.c:2277 #, c-format msgid "read: %s: %s" msgstr "" #: src/function.c:2290 #, fuzzy, c-format msgid "file: invalid file operation: %s" msgstr "%s úéðëú øåáò éåâù ïééôàî -- %c\n" #: src/function.c:2405 #, fuzzy, c-format msgid "insufficient number of arguments (%d) to function '%s'" msgstr "÷ôñî åðéàù (%d) íéèðîåâøà øôñî íò äàø÷ð `%s' äéö÷ðåô" #: src/function.c:2417 #, fuzzy, c-format msgid "unimplemented on this platform: function '%s'" msgstr "åæ úëøòîá úùîåîî äðéà `%s' äéö÷ðåô" #: src/function.c:2483 #, fuzzy, c-format msgid "unterminated call to function '%s': missing '%c'" msgstr "`%s' äéö÷ðåôì äàéø÷á `%c' øñç" #: src/function.c:2667 #, c-format msgid "Empty function name" msgstr "" #: src/function.c:2669 #, c-format msgid "Invalid function name: %s" msgstr "" #: src/function.c:2671 #, c-format msgid "Function name too long: %s" msgstr "" #: src/function.c:2674 #, fuzzy, c-format msgid "Invalid minimum argument count (%u) for function %s" msgstr "÷ôñî åðéàù (%d) íéèðîåâøà øôñî íò äàø÷ð `%s' äéö÷ðåô" #: src/function.c:2677 #, fuzzy, c-format msgid "Invalid maximum argument count (%u) for function %s" msgstr "÷ôñî åðéàù (%d) íéèðîåâøà øôñî íò äàø÷ð `%s' äéö÷ðåô" #: src/getopt.c:659 #, fuzzy, c-format msgid "%s: option '%s' is ambiguous\n" msgstr "%s úéðëú øåáò éòîùî-ãç åðéà `%s' ïééôàî\n" #: src/getopt.c:683 #, fuzzy, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s úéðëú øåáò èðîåâøà ìá÷î åðéà `--%s' ïééôàî\n" #: src/getopt.c:688 #, fuzzy, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s úéðëú øåáò èðîåâøà ìá÷î åðéà `%c%s' ïééôàî\n" #: src/getopt.c:705 src/getopt.c:878 #, fuzzy, c-format msgid "%s: option '%s' requires an argument\n" msgstr "%s úéðëú øåáò èðîåâøà áééçî `%s' ïééôàî\n" #: src/getopt.c:734 #, fuzzy, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s úéðëú øåáò `--%s' ääåæî-éúìá ïééôàî\n" #: src/getopt.c:738 #, fuzzy, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s úéðëú øåáò `%c%s' ääåæî-éúìá ïééôàî\n" #: src/getopt.c:764 #, c-format msgid "%s: illegal option -- %c\n" msgstr "%s: é÷åç-éúìá ïééôàî -- %c\n" #: src/getopt.c:767 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s úéðëú øåáò éåâù ïééôàî -- %c\n" #: src/getopt.c:797 src/getopt.c:927 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: èðîåâøà áééçî ïééôàî -- %c\n" #: src/getopt.c:844 #, fuzzy, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s úéðëú øåáò éòîùî-ãç åðéà `-W %s' ïééôàî\n" #: src/getopt.c:862 #, fuzzy, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s úéðëú øåáò èðîåâøà ìá÷î åðéà `-W %s' ïééôàî\n" #: src/guile.c:58 #, c-format msgid "guile: Expanding '%s'\n" msgstr "" #: src/guile.c:74 #, c-format msgid "guile: Evaluating '%s'\n" msgstr "" #: src/hash.c:50 #, c-format msgid "can't allocate %lu bytes for hash table: memory exhausted" msgstr "" #: src/hash.c:280 #, c-format msgid "Load=%lu/%lu=%.0f%%, " msgstr "" #: src/hash.c:282 #, c-format msgid "Rehash=%u, " msgstr "" #: src/hash.c:283 #, c-format msgid "Collisions=%lu/%lu=%.0f%%" msgstr "" #: src/implicit.c:38 #, fuzzy, c-format msgid "Looking for an implicit rule for '%s'.\n" msgstr ".`%s' øåáò ùøåôî-éúìá ììë ùôçî\n" #: src/implicit.c:54 #, fuzzy, c-format msgid "Looking for archive-member implicit rule for '%s'.\n" msgstr ".`%s' øåáò ïåéëøà éøáàì ùøåôî-éúìá ììë ùôçî\n" #: src/implicit.c:311 #, c-format msgid "Avoiding implicit rule recursion.\n" msgstr ".úùøåôî-éúìá äéñøå÷øî òðîð\n" #: src/implicit.c:484 #, c-format msgid "Stem too long: '%s%.*s'.\n" msgstr "" #: src/implicit.c:490 #, fuzzy, c-format msgid "Trying pattern rule with stem '%.*s'.\n" msgstr ".`%.*s' ùøåù íò úéðáú ììë äñðî\n" #: src/implicit.c:717 #, fuzzy, c-format msgid "Rejecting impossible rule prerequisite '%s'.\n" msgstr ".úéøùôà-éúìá äðéäù íåùî `%s' íã÷ úùéøã äçåã\n" #: src/implicit.c:718 #, fuzzy, c-format msgid "Rejecting impossible implicit prerequisite '%s'.\n" msgstr ".úéøùôà-éúìá äðéäù íåùî `%s' úùøåôî-éúìá íã÷ úùéøã äçåã\n" #: src/implicit.c:732 #, fuzzy, c-format msgid "Trying rule prerequisite '%s'.\n" msgstr ".`%s' íã÷ úùéøã ììë äñðî\n" #: src/implicit.c:733 #, fuzzy, c-format msgid "Trying implicit prerequisite '%s'.\n" msgstr ".`%s' úùøåôî-éúìá íã÷ úùéøã äñðî\n" #: src/implicit.c:772 #, fuzzy, c-format msgid "Found prerequisite '%s' as VPATH '%s'\n" msgstr "`%s' íã÷ úùéøãë VPATH `%s' éúàöî\n" #: src/implicit.c:786 #, fuzzy, c-format msgid "Looking for a rule with intermediate file '%s'.\n" msgstr ".`%s' éðîæ õáå÷ íò ììë ùôçî\n" #: src/job.c:370 #, fuzzy msgid "Cannot create a temporary file\n" msgstr "fwrite (temporary file)" #: src/job.c:548 msgid " (core dumped)" msgstr " (core õáå÷á íùøð ïåøëæä ïëåú)" #: src/job.c:553 #, fuzzy msgid " (ignored)" msgstr "[%s] %d äì÷úî éúîìòúä" #: src/job.c:557 src/job.c:1892 #, fuzzy msgid "" msgstr " (built-in):" #: src/job.c:573 #, fuzzy, c-format msgid "%s[%s: %s] Error %d%s" msgstr "*** [%s] %d äì÷ú" #: src/job.c:662 #, c-format msgid "*** Waiting for unfinished jobs...." msgstr "*** ...åîééúñð íøèù úåãåáòì ïéúîî" #: src/job.c:704 #, fuzzy, c-format msgid "Live child %p (%s) PID %s %s\n" msgstr "äöø 0x%08lx (%s) PID=%ld %s úá-úéðëú\n" #: src/job.c:706 src/job.c:900 src/job.c:1072 src/job.c:1644 #, c-format msgid " (remote)" msgstr "(ú÷çåøî)" #: src/job.c:898 #, fuzzy, c-format msgid "Reaping winning child %p PID %s %s\n" msgstr "äçéìöäù 0x%08lx PID=%ld %s úá-úéðëú óñåà\n" #: src/job.c:899 #, fuzzy, c-format msgid "Reaping losing child %p PID %s %s\n" msgstr "äìùëðù 0x%08lx PID=%ld %s úá-úéðëú óñåà\n" #: src/job.c:950 #, c-format msgid "Cleaning up temp batch file %s\n" msgstr "`%s' éðîæ batch õáå÷ ÷ìñî\n" #: src/job.c:956 #, fuzzy, c-format msgid "Cleaning up temp batch file %s failed (%d)\n" msgstr "`%s' éðîæ batch õáå÷ ÷ìñî\n" #: src/job.c:1071 #, fuzzy, c-format msgid "Removing child %p PID %s%s from chain.\n" msgstr ".úåãåáò úøùøùî 0x%08lx PID=%ld %s úá-úéðëú ÷éçøî\n" #: src/job.c:1120 #, fuzzy, c-format msgid "Released token for child %p (%s).\n" msgstr ".øøçåù 0x%08lx (%s) úá-úéðëú øåáò ïåîéñàä\n" #: src/job.c:1575 src/job.c:2487 #, fuzzy, c-format msgid "process_easy() failed to launch process (e=%ld)\n" msgstr "(e=%d) úéðëú-úú øåâéùá ìùëð process_easy()\n" #: src/job.c:1579 src/job.c:2491 #, c-format msgid "" "\n" "Counted %d args in failed launch\n" msgstr "" "\n" "ìùëðù øåâéùá åðîð íéèðîåâøà %d\n" #: src/job.c:1642 #, fuzzy, c-format msgid "Putting child %p (%s) PID %s%s on the chain.\n" msgstr ".úåãåáò úøùøùì 0x%08lx (%s) PID=%ld %s úá-úéðëú óøöî\n" #: src/job.c:1875 #, fuzzy, c-format msgid "Obtained token for child %p (%s).\n" msgstr ".0x%08lx (%s) úá-úéðëú øåáò ïåîéñà ìá÷úä\n" #: src/job.c:1902 #, fuzzy, c-format msgid "%s: target '%s' does not exist" msgstr "íéé÷ åðéà `%s' ïåéëøà õáå÷ :touch" #: src/job.c:1905 #, fuzzy, c-format msgid "%s: update target '%s' due to: %s" msgstr "%säúééðáì íéììë ïéà êà ,`%s' úùøåã `%s'%s äøèî" #: src/job.c:2108 #, c-format msgid "cannot enforce load limits on this operating system" msgstr "åæ úëøòîá ñîåò úåìáâî úåôëì ïúéð àì" #: src/job.c:2110 msgid "cannot enforce load limit: " msgstr "cannot enforce load limit: " #: src/job.c:2200 #, c-format msgid "no more file handles: could not duplicate stdin\n" msgstr "" #: src/job.c:2212 #, c-format msgid "no more file handles: could not duplicate stdout\n" msgstr "" #: src/job.c:2226 #, c-format msgid "no more file handles: could not duplicate stderr\n" msgstr "" #: src/job.c:2241 #, c-format msgid "Could not restore stdin\n" msgstr "" #: src/job.c:2249 #, c-format msgid "Could not restore stdout\n" msgstr "" #: src/job.c:2257 #, c-format msgid "Could not restore stderr\n" msgstr "" #: src/job.c:2520 #, fuzzy, c-format msgid "make reaped child pid %s, still waiting for pid %s\n" msgstr "äôñàð pid %d úá-úéðëú ,pid %d-ì äëçî ïééãò\n" #: src/job.c:2623 #, c-format msgid "spawnvpe: environment space might be exhausted" msgstr "" #: src/job.c:2862 #, fuzzy, c-format msgid "$SHELL changed (was '%s', now '%s')\n" msgstr "(`%s' äéä íãå÷ ,`%s' åéùëò) äðúùä $SHELL ìù åëøò" #: src/job.c:3300 src/job.c:3485 #, c-format msgid "Creating temporary batch file %s\n" msgstr "`%s' éðîæ batch õáå÷ øöåé\n" #: src/job.c:3308 #, c-format msgid "" "Batch file contents:\n" "\t@echo off\n" msgstr "" #: src/job.c:3497 #, c-format msgid "" "Batch file contents:%s\n" "\t%s\n" msgstr "" #: src/job.c:3605 #, c-format msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n" msgstr "" "(!unixy && !batch_mode_shell) shell-mode úòéá÷á äì÷ú :%s õáå÷ ìù %d äøåù\n" #: src/load.c:60 #, c-format msgid "Failed to open global symbol table: %s" msgstr "" #: src/load.c:97 #, c-format msgid "Loaded object %s is not declared to be GPL compatible" msgstr "" #: src/load.c:104 #, c-format msgid "Failed to load symbol %s from %s: %s" msgstr "" #: src/load.c:149 #, c-format msgid "Empty symbol name for load: %s" msgstr "" #: src/load.c:204 #, c-format msgid "Loading symbol %s from %s\n" msgstr "" #: src/load.c:256 #, fuzzy, c-format msgid "The 'load' operation is not supported on this platform." msgstr ".åæ úëøòîá êîúð åðéà (-j) éìéá÷î òåöéá" #: src/main.c:335 msgid "Options:\n" msgstr " :íéðééôàî\n" #: src/main.c:336 #, fuzzy msgid " -b, -m Ignored for compatibility.\n" msgstr "úåîéàú ïòîì èîùåî" #: src/main.c:338 msgid " -B, --always-make Unconditionally make all targets.\n" msgstr "" #: src/main.c:340 msgid "" " -C DIRECTORY, --directory=DIRECTORY\n" " Change to DIRECTORY before doing anything.\n" msgstr "" #: src/main.c:343 #, fuzzy msgid " -d Print lots of debugging information.\n" msgstr "úåàéâù éåôéð úáåèì òãéî ìù òôù âöä" #: src/main.c:345 #, fuzzy msgid "" " --debug[=FLAGS] Print various types of debugging information.\n" msgstr "úåàéâù éåôéð úáåèì òãéî ìù íéðåù íéâåñ âöä" #: src/main.c:347 msgid "" " -e, --environment-overrides\n" " Environment variables override makefiles.\n" msgstr "" #: src/main.c:350 msgid "" " -E STRING, --eval=STRING Evaluate STRING as a makefile statement.\n" msgstr "" #: src/main.c:352 msgid "" " -f FILE, --file=FILE, --makefile=FILE\n" " Read FILE as a makefile.\n" msgstr "" #: src/main.c:355 #, fuzzy msgid " -h, --help Print this message and exit.\n" msgstr "úéðëúäî àöå äæ äøæò êñî âöä" #: src/main.c:357 msgid " -i, --ignore-errors Ignore errors from recipes.\n" msgstr "" #: src/main.c:359 msgid "" " -I DIRECTORY, --include-dir=DIRECTORY\n" " Search DIRECTORY for included makefiles.\n" msgstr "" #: src/main.c:362 #, fuzzy msgid "" " -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no " "arg.\n" msgstr "äìáâî ïéà èðîåâøà àìì ;úéðîæ-åá úåãåáò N-î øúåé àì" #: src/main.c:364 #, fuzzy msgid "" " -k, --keep-going Keep going when some targets can't be made.\n" msgstr "äéðáì úåðúéð ïðéà úåøèîäî äîë íà åìéôà êùîä" #: src/main.c:366 msgid "" " -l [N], --load-average[=N], --max-load[=N]\n" " Don't start multiple jobs unless load is below " "N.\n" msgstr "" #: src/main.c:369 msgid "" " -L, --check-symlink-times Use the latest mtime between symlinks and " "target.\n" msgstr "" #: src/main.c:371 msgid "" " -n, --just-print, --dry-run, --recon\n" " Don't actually run any recipe; just print " "them.\n" msgstr "" #: src/main.c:374 msgid "" " -o FILE, --old-file=FILE, --assume-old=FILE\n" " Consider FILE to be very old and don't remake " "it.\n" msgstr "" #: src/main.c:377 msgid "" " -O[TYPE], --output-sync[=TYPE]\n" " Synchronize output of parallel jobs by TYPE.\n" msgstr "" #: src/main.c:380 #, fuzzy msgid " -p, --print-data-base Print make's internal database.\n" msgstr "Make ìù éîéðô íéðåúð ñéñá âöä" #: src/main.c:382 #, fuzzy msgid "" " -q, --question Run no recipe; exit status says if up to " "date.\n" msgstr "úðëãåòî äøèî íàá øîåà äàéöé ãå÷ ;úåãå÷ô õéøú ìà" #: src/main.c:384 #, fuzzy msgid " -r, --no-builtin-rules Disable the built-in implicit rules.\n" msgstr "íéùøåôî-éúìá íéðáåî íéììë ìøèð" #: src/main.c:386 #, fuzzy msgid " -R, --no-builtin-variables Disable the built-in variable settings.\n" msgstr "íéðúùî ìù úåðáåî úåøãâä ìøèð" #: src/main.c:388 msgid " -s, --silent, --quiet Don't echo recipes.\n" msgstr "" #: src/main.c:390 msgid " --no-silent Echo recipes (disable --silent mode).\n" msgstr "" #: src/main.c:392 msgid "" " -S, --no-keep-going, --stop\n" " Turns off -k.\n" msgstr "" #: src/main.c:395 #, fuzzy msgid " -t, --touch Touch targets instead of remaking them.\n" msgstr "ïúåðáì íå÷îá úåøèî ìù ïîæ úîéúç ïëãò" #: src/main.c:397 msgid " --trace Print tracing information.\n" msgstr "" #: src/main.c:399 #, fuzzy msgid "" " -v, --version Print the version number of make and exit.\n" msgstr "úéðëúäî àöå Make ìù àñøéâ øôñî âöä" #: src/main.c:401 #, fuzzy msgid " -w, --print-directory Print the current directory.\n" msgstr "úéçëåð äé÷éú íù âöä" #: src/main.c:403 #, fuzzy msgid "" " --no-print-directory Turn off -w, even if it was turned on " "implicitly.\n" msgstr "ùøåôîá ïéåö àåä íà åìéôà -w ìèá" #: src/main.c:405 msgid "" " -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n" " Consider FILE to be infinitely new.\n" msgstr "" #: src/main.c:408 #, fuzzy msgid "" " --warn-undefined-variables Warn when an undefined variable is " "referenced.\n" msgstr "øãâåä àìù äðúùîì äééðôä äø÷îá äøäæà âöä" #: src/main.c:671 #, c-format msgid "empty string invalid as file name" msgstr "õáå÷ íùë úìá÷úî äðéà ä÷éø úæåøçî" #: src/main.c:754 #, fuzzy, c-format msgid "unknown debug level specification '%s'" msgstr "úåàéâù éåôéðì òãéî ìù `%s' øëåî-éúìá ïééôàî" #: src/main.c:794 #, c-format msgid "unknown output-sync type '%s'" msgstr "" #: src/main.c:849 #, fuzzy, c-format msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n" msgstr "%s úéðëúá (code = 0x%x, addr = 0x%x) äâéøç åà ä÷éñô\n" #: src/main.c:856 #, fuzzy, c-format msgid "" "\n" "Unhandled exception filter called from program %s\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" msgstr "" "\n" "%s úéðëú êåúî àø÷ð ìåôéè àìì úåâéøç ïðñî\n" "ExceptionCode = %x\n" "ExceptionFlags = %x\n" "ExceptionAddress = %x\n" #: src/main.c:864 #, fuzzy, c-format msgid "Access violation: write operation at address 0x%p\n" msgstr "%x úáåúëì äáéúë :ïåøëæì äùéâ úì÷ú\n" #: src/main.c:865 #, fuzzy, c-format msgid "Access violation: read operation at address 0x%p\n" msgstr "%x úáåúëî äàéø÷ :ïåøëæì äùéâ úì÷ú\n" #: src/main.c:941 src/main.c:956 #, fuzzy, c-format msgid "find_and_set_shell() setting default_shell = %s\n" msgstr "find_and_set_shell setting default_shell = %s\n" #: src/main.c:1009 #, 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" #: src/main.c:1609 #, fuzzy, c-format msgid "" "warning: jobserver unavailable: using -j1. Add '+' to parent make rule." msgstr "" ".Make ìù áàä ììëì `+' óñåä .-j1-á ùåîéù äùòéé ;ïéîæ åðéà jobserver :äøäæà" #: src/main.c:1617 #, fuzzy, c-format msgid "warning: -j%d forced in submake: resetting jobserver mode." msgstr "jobserver ïôåà ìèáî ;-jN áééçî Make-úú :äøäæà" #: src/main.c:1781 #, c-format msgid "Makefile from standard input specified twice." msgstr ".úçà íòôî øúåé ïúéð éð÷ú èì÷ õåøòî Makefile" #: src/main.c:1819 src/vmsjobs.c:1248 msgid "fopen (temporary file)" msgstr "fopen (temporary file)" #: src/main.c:1825 msgid "fwrite (temporary file)" msgstr "fwrite (temporary file)" #: src/main.c:2004 #, fuzzy, c-format msgid "warning: -j%d forced in makefile: resetting jobserver mode." msgstr "jobserver ïôåà ìèáî ;-jN áééçî Make-úú :äøäæà" #: src/main.c:2068 #, c-format msgid "Parallel jobs (-j) are not supported on this platform." msgstr ".åæ úëøòîá êîúð åðéà (-j) éìéá÷î òåöéá" #: src/main.c:2069 #, c-format msgid "Resetting to single job (-j1) mode." msgstr ".(-j1) éúøãñ ïôåàá åòöåáé úåãå÷ô" #: src/main.c:2109 #, c-format msgid "Symbolic links not supported: disabling -L." msgstr "" #: src/main.c:2190 #, c-format msgid "Updating makefiles....\n" msgstr "...makefile éöá÷ ïëãòî\n" #: src/main.c:2226 #, fuzzy, c-format msgid "Makefile '%s' might loop; not remaking it.\n" msgstr ".ùãçî åøöééìî òðîð ;úéôåñðéà äàìåì øåöéì ìåìò `%s' Makefile\n" #: src/main.c:2303 #, fuzzy, c-format msgid "Failed to remake makefile '%s'." msgstr ".`%s' makefile ìù ùãçî-äøéöéá äì÷ú" #: src/main.c:2323 #, fuzzy, c-format msgid "Included makefile '%s' was not found." msgstr ".àöîð àì `%s' ììëåî makefile" #: src/main.c:2328 #, fuzzy, c-format msgid "Makefile '%s' was not found" msgstr "àöîð àì `%s' Makefile" #: src/main.c:2394 #, c-format msgid "Couldn't change back to original directory." msgstr ".úéøå÷îä äé÷éúì øåæçì ïúéð àì" #: src/main.c:2402 #, fuzzy, c-format msgid "Re-executing[%u]:" msgstr "Re-executing:" #: src/main.c:2522 msgid "unlink (temporary file): " msgstr "unlink (temporary file): " #: src/main.c:2555 #, c-format msgid ".DEFAULT_GOAL contains more than one target" msgstr "" #: src/main.c:2579 #, c-format msgid "No targets" msgstr "úåøèî ïéà" #: src/main.c:2581 #, c-format msgid "No targets specified and no makefile found" msgstr "makefile éöá÷ åàöîð àìå úåøèî ïåéö ïéà" #: src/main.c:2586 #, c-format msgid "Updating goal targets....\n" msgstr "...ãòé úåøèî ïëãòî\n" #: src/main.c:2610 #, c-format msgid "warning: Clock skew detected. Your build may be incomplete." msgstr ".äîìù àì úåéäì äìåìò äéðáä .ïåòù úùéìâ äúìâúð :úåøéäæ" #: src/main.c:2804 #, c-format msgid "Usage: %s [options] [target] ...\n" msgstr "%s [íéðééôàî] [äøèî] ... :ùåîéù ïôåà\n" #: src/main.c:2810 #, c-format msgid "" "\n" "This program built for %s\n" msgstr "" #: src/main.c:2812 #, c-format msgid "" "\n" "This program built for %s (%s)\n" msgstr "" #: src/main.c:2815 #, fuzzy, c-format msgid "Report bugs to \n" msgstr "" "\n" ".-ì äì÷ú éçååéã çåìùì àð\n" #: src/main.c:2901 #, fuzzy, c-format msgid "the '%s%s' option requires a non-empty string argument" msgstr "éáåéçå íìù èðîåâøà áééçî `-%c' ïééôàî" #: src/main.c:2965 #, fuzzy, c-format msgid "the '-%c' option requires a positive integer argument" msgstr "éáåéçå íìù èðîåâøà áééçî `-%c' ïééôàî" #: src/main.c:3363 #, c-format msgid "%sBuilt for %s\n" msgstr "" #: src/main.c:3365 #, c-format msgid "%sBuilt for %s (%s)\n" msgstr "" #: src/main.c:3376 #, c-format msgid "" "%sLicense GPLv3+: GNU GPL version 3 or later \n" "%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 "" #: src/main.c:3397 #, c-format msgid "" "\n" "# Make data base, printed on %s" msgstr "" "\n" "# Make data base, printed on %s" #: src/main.c:3407 #, c-format msgid "" "\n" "# Finished Make data base on %s\n" msgstr "" "\n" "# Finished Make data base on %s\n" #: src/misc.c:643 #, 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" #: src/misc.c:664 #, fuzzy msgid "Initialized access" msgstr "Initialized" #: src/misc.c:743 msgid "User access" msgstr "" #: src/misc.c:791 msgid "Make access" msgstr "" #: src/misc.c:825 msgid "Child access" msgstr "" #: src/output.c:97 #, fuzzy, c-format msgid "%s: Entering an unknown directory\n" msgstr "an unknown directory" #: src/output.c:99 #, fuzzy, c-format msgid "%s: Leaving an unknown directory\n" msgstr "an unknown directory" #: src/output.c:102 #, fuzzy, c-format msgid "%s: Entering directory '%s'\n" msgstr "directory `%s'\n" #: src/output.c:104 #, fuzzy, c-format msgid "%s: Leaving directory '%s'\n" msgstr "directory `%s'\n" #: src/output.c:108 #, fuzzy, c-format msgid "%s[%u]: Entering an unknown directory\n" msgstr "an unknown directory" #: src/output.c:110 #, fuzzy, c-format msgid "%s[%u]: Leaving an unknown directory\n" msgstr "an unknown directory" #: src/output.c:113 #, c-format msgid "%s[%u]: Entering directory '%s'\n" msgstr "" #: src/output.c:115 #, fuzzy, c-format msgid "%s[%u]: Leaving directory '%s'\n" msgstr "directory `%s'\n" #: src/output.c:442 src/output.c:444 #, c-format msgid "write error: stdout" msgstr "" #: src/output.c:624 msgid ". Stop.\n" msgstr ". Stop.\n" #: src/output.c:658 #, c-format msgid "%s%s: %s" msgstr "" #: src/output.c:667 #, c-format msgid "%s: %s" msgstr "" #: src/output.h:62 #, c-format msgid "-O[TYPE] (--output-sync[=TYPE]) is not configured for this build." msgstr "" #: src/posixos.c:90 msgid "creating jobs pipe" msgstr "creating jobs pipe" #: src/posixos.c:98 src/posixos.c:251 #, fuzzy msgid "duping jobs pipe" msgstr "creating jobs pipe" #: src/posixos.c:104 msgid "init jobserver pipe" msgstr "init jobserver pipe" #: src/posixos.c:119 #, fuzzy, c-format msgid "internal error: invalid --jobserver-auth string '%s'" msgstr "--jobserver-fds ïééôàîá `%s' äéåâù úæåøçî :úéîéðô äðëú úì÷ú" #: src/posixos.c:122 #, c-format msgid "Jobserver client (fds %d,%d)\n" msgstr "" #: src/posixos.c:138 #, 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. #: src/posixos.c:186 msgid "write jobserver" msgstr "write jobserver" #: src/posixos.c:300 #, c-format msgid "job server shut down" msgstr "" #: src/posixos.c:303 #, fuzzy msgid "pselect jobs pipe" msgstr "read jobs pipe" #: src/posixos.c:319 src/posixos.c:433 msgid "read jobs pipe" msgstr "read jobs pipe" #: src/read.c:181 #, c-format msgid "Reading makefiles...\n" msgstr "...makefile éöá÷ àøå÷\n" #: src/read.c:336 #, fuzzy, c-format msgid "Reading makefile '%s'" msgstr "Reading makefile `%s'" #: src/read.c:338 #, c-format msgid " (no default goal)" msgstr " (no default goal)" #: src/read.c:340 #, c-format msgid " (search path)" msgstr " (search path)" #: src/read.c:342 #, c-format msgid " (don't care)" msgstr " (don't care)" #: src/read.c:344 #, c-format msgid " (no ~ expansion)" msgstr " (no ~ expansion)" #: src/read.c:655 #, c-format msgid "Skipping UTF-8 BOM in makefile '%s'\n" msgstr "" #: src/read.c:658 #, c-format msgid "Skipping UTF-8 BOM in makefile buffer\n" msgstr "" #: src/read.c:787 #, c-format msgid "invalid syntax in conditional" msgstr "éàðú ìù éåâù øéáçú" #: src/read.c:960 #, c-format msgid "%s: failed to load" msgstr "" #: src/read.c:986 #, fuzzy, c-format msgid "recipe commences before first target" msgstr "äðåùàø äøèî éðôì úåìéçúî úåãå÷ô" #: src/read.c:1035 #, fuzzy, c-format msgid "missing rule before recipe" msgstr "ïäéðôì ììë àìì úåãå÷ô" #: src/read.c:1136 #, fuzzy, c-format msgid "missing separator (did you mean TAB instead of 8 spaces?)" msgstr "(?íéçååø 8 íå÷îá TAB-ì úðååëúä íàä) " #: src/read.c:1138 #, fuzzy, c-format msgid "missing separator" msgstr "%sãéøôî øñç" #: src/read.c:1283 #, c-format msgid "missing target pattern" msgstr "äøèî úéðáú ïéà" #: src/read.c:1285 #, c-format msgid "multiple target patterns" msgstr "úåáåøî äøèî úåéðáú" #: src/read.c:1289 #, fuzzy, c-format msgid "target pattern contains no '%%'" msgstr "`%%' àìì äøèî úéðáú" #: src/read.c:1404 #, fuzzy, c-format msgid "missing 'endif'" msgstr "øñç `endif'" #: src/read.c:1443 src/read.c:1488 src/variable.c:1600 #, c-format msgid "empty variable name" msgstr "÷éø äðúùî íù" #: src/read.c:1478 #, fuzzy, c-format msgid "extraneous text after 'define' directive" msgstr "`endef' úàøåä éøçà øúåéî èñ÷è" #: src/read.c:1503 #, fuzzy, c-format msgid "missing 'endef', unterminated 'define'" msgstr "íåéñ àìì `define' úàøåä ,øñç `endef'" #: src/read.c:1531 #, fuzzy, c-format msgid "extraneous text after 'endef' directive" msgstr "`endef' úàøåä éøçà øúåéî èñ÷è" #: src/read.c:1603 #, fuzzy, c-format msgid "extraneous text after '%s' directive" msgstr "`%s' úàøåä éøçà øúåéî èñ÷è" #: src/read.c:1604 #, fuzzy, c-format msgid "extraneous '%s'" msgstr "øúåéî `%s'" #: src/read.c:1632 #, fuzzy, c-format msgid "only one 'else' per conditional" msgstr "éàðú ìëì ãéçé `else' ÷ø øúåî" #: src/read.c:1908 #, fuzzy, c-format msgid "Malformed target-specific variable definition" msgstr "äøèîì éôéöôñ äðúùî ìù äéåâù äøãâä" #: src/read.c:1968 #, c-format msgid "prerequisites cannot be defined in recipes" msgstr "" #: src/read.c:1986 #, c-format msgid "grouped targets must provide a recipe" msgstr "" #: src/read.c:2029 #, c-format msgid "mixed implicit and static pattern rules" msgstr "íéùøåôî-éúìáå íééèèñ úéðáú éììë ìù áåáøò" #: src/read.c:2052 #, c-format msgid "mixed implicit and normal rules" msgstr "íéùøåôî-éúìáå íéìéâø íéììë ìù áåáøò" #: src/read.c:2107 #, fuzzy, c-format msgid "target '%s' doesn't match the target pattern" msgstr "ãòéä úéðáú úà úîàåú äðéà `%s' äøèî" #: src/read.c:2122 src/read.c:2168 #, fuzzy, c-format msgid "target file '%s' has both : and :: entries" msgstr ":: ïäå : âåñî ïä íéììë ùé `%s' äøèî õáå÷ì" #: src/read.c:2128 #, fuzzy, c-format msgid "target '%s' given more than once in the same rule" msgstr ".ììë åúåàá úçà íòôî øúåé äòéôåî `%s' äøèî" #: src/read.c:2138 #, fuzzy, c-format msgid "warning: overriding recipe for target '%s'" msgstr "`%s' äøèî øåáò úåãå÷ô ñøåã :úåøéäæ" #: src/read.c:2141 #, fuzzy, c-format msgid "warning: ignoring old recipe for target '%s'" msgstr "`%s' äøèî øåáò úåîãå÷ úåãå÷ôî íìòúî :úåøéäæ" #: src/read.c:2254 #, fuzzy, c-format msgid "*** mixed implicit and normal rules: deprecated syntax" msgstr "íéùøåôî-éúìáå íéìéâø íéììë ìù áåáøò" #: src/read.c:2271 #, fuzzy, c-format msgid "warning: overriding group membership for target '%s'" msgstr "`%s' äøèî øåáò úåãå÷ô ñøåã :úåøéäæ" #: src/read.c:2636 #, c-format msgid "warning: NUL character seen; rest of line ignored" msgstr "äçðæð äøåùä úøúé ;NUL åú éúùâô :äøäæà" #: src/remake.c:226 #, fuzzy, c-format msgid "Nothing to be done for '%s'." msgstr ".`%s øåáò úåùòì äî ïéà" #: src/remake.c:227 #, fuzzy, c-format msgid "'%s' is up to date." msgstr ".éðëãò øáë `%s'" #: src/remake.c:323 #, fuzzy, c-format msgid "Pruning file '%s'.\n" msgstr ".`%s' øåáò úåéåìú óøâ õö÷î\n" #: src/remake.c:389 #, fuzzy, c-format msgid "%sNo rule to make target '%s', needed by '%s'%s" msgstr "%säúééðáì íéììë ïéà êà ,`%s' úùøåã `%s'%s äøèî" #: src/remake.c:399 #, fuzzy, c-format msgid "%sNo rule to make target '%s'%s" msgstr "%s`%s'%s äøèî úééðáì íéììë ïéà" #: src/remake.c:425 #, fuzzy, c-format msgid "Considering target file '%s'.\n" msgstr ".`%s' äøèî õáå÷ ïçåá\n" #: src/remake.c:432 #, fuzzy, c-format msgid "Recently tried and failed to update file '%s'.\n" msgstr ".`%s' õáå÷ ïåëãòá éúìùëðå éúéñéð ïîæî àì\n" #: src/remake.c:444 #, fuzzy, c-format msgid "File '%s' was considered already.\n" msgstr ".ïë-éðôì ïçáð øáë `%s' õáå÷\n" #: src/remake.c:454 #, fuzzy, c-format msgid "Still updating file '%s'.\n" msgstr ".`%s' õáå÷ ïëãòî ïééãò\n" #: src/remake.c:457 #, fuzzy, c-format msgid "Finished updating file '%s'.\n" msgstr ".`%s' õáå÷ ïëãòì éúîééñ\n" #: src/remake.c:486 #, fuzzy, c-format msgid "File '%s' does not exist.\n" msgstr ".íéé÷ åðéà `%s' õáå÷\n" #: src/remake.c:494 #, c-format msgid "" "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp" msgstr "" #: src/remake.c:507 src/remake.c:1039 #, fuzzy, c-format msgid "Found an implicit rule for '%s'.\n" msgstr ".`%s' øåáò ùøåôî-éúìá ììë éúàöî\n" #: src/remake.c:509 src/remake.c:1041 #, fuzzy, c-format msgid "No implicit rule found for '%s'.\n" msgstr ".`%s' øåáò íéùøåôî-éúìá íéììë åàöîð àì\n" #: src/remake.c:515 #, fuzzy, c-format msgid "Using default recipe for '%s'.\n" msgstr ".`%s' øåáò ìãçî úøéøá úåãå÷ôá ùîúùî\n" #: src/remake.c:549 src/remake.c:1088 #, c-format msgid "Circular %s <- %s dependency dropped." msgstr ".%s <- %s úéìâòî ìåìú èéîùî" #: src/remake.c:674 #, fuzzy, c-format msgid "Finished prerequisites of target file '%s'.\n" msgstr ".`%s' äøèî õáå÷ ìù íã÷-úåùéøã íò éúîééñ\n" #: src/remake.c:680 #, fuzzy, c-format msgid "The prerequisites of '%s' are being made.\n" msgstr ".äéðáá `%s' ìù íã÷ä úåùéøã\n" #: src/remake.c:694 #, fuzzy, c-format msgid "Giving up on target file '%s'.\n" msgstr ".`%s' äøèî õáå÷ éáâì íééãé éúîøä\n" #: src/remake.c:699 #, fuzzy, c-format msgid "Target '%s' not remade because of errors." msgstr ".úåàéâù á÷ò ùãçî äúðáð àì `%s' äøèî" #: src/remake.c:751 #, fuzzy, c-format msgid "Prerequisite '%s' is order-only for target '%s'.\n" msgstr ".`%s' íã÷ä úùéøãî äùãç `%s' äøèî\n" #: src/remake.c:756 #, fuzzy, c-format msgid "Prerequisite '%s' of target '%s' does not exist.\n" msgstr ".íéé÷ åðéàù `%s' éàðúë úùøåã `%s' äøèî\n" #: src/remake.c:761 #, fuzzy, c-format msgid "Prerequisite '%s' is newer than target '%s'.\n" msgstr ".`%s' íã÷ä úùéøãî äðùé `%s' äøèî\n" #: src/remake.c:764 #, fuzzy, c-format msgid "Prerequisite '%s' is older than target '%s'.\n" msgstr ".`%s' íã÷ä úùéøãî äùãç `%s' äøèî\n" #: src/remake.c:782 #, fuzzy, c-format msgid "Target '%s' is double-colon and has no prerequisites.\n" msgstr ".íã÷ úåùéøã àììå íéìåôë íééúåãå÷ð íò äðéä `%s' äøèî\n" #: src/remake.c:789 #, fuzzy, c-format msgid "No recipe for '%s' and no prerequisites actually changed.\n" msgstr ".äùòîì äúðúùä àì íã÷ úùéøã óàå `%s' øåáò úåãå÷ô ïéà\n" #: src/remake.c:794 #, c-format msgid "Making '%s' due to always-make flag.\n" msgstr "" #: src/remake.c:802 #, fuzzy, c-format msgid "No need to remake target '%s'" msgstr "`%s' äøèî ùãçî úåðáì êøåö ïéà" #: src/remake.c:804 #, fuzzy, c-format msgid "; using VPATH name '%s'" msgstr " (`%s' :VPATH õáå÷ íù)" #: src/remake.c:824 #, fuzzy, c-format msgid "Must remake target '%s'.\n" msgstr ".`%s' äøèî ùãçî úåðáì áééç\n" #: src/remake.c:830 #, fuzzy, c-format msgid " Ignoring VPATH name '%s'.\n" msgstr " .`%s' VPATH íùî íìòúî\n" #: src/remake.c:839 #, fuzzy, c-format msgid "Recipe of '%s' is being run.\n" msgstr ".`%s' øåáò úåãå÷ô õéøî\n" #: src/remake.c:846 #, fuzzy, c-format msgid "Failed to remake target file '%s'.\n" msgstr ".ùãçî `%s' úåðáì ïåéñð ìùëð\n" #: src/remake.c:849 #, fuzzy, c-format msgid "Successfully remade target file '%s'.\n" msgstr ".`%s' ùãçî úééðáá äçìöä\n" #: src/remake.c:852 #, fuzzy, c-format msgid "Target file '%s' needs to be remade under -q.\n" msgstr ".-q íò úåðáéäì êéøö `%s' äøèî õáå÷\n" #: src/remake.c:1047 #, fuzzy, c-format msgid "Using default commands for '%s'.\n" msgstr ".`%s' øåáò ìãçî úøéøá úåãå÷ôá ùîúùî\n" #: src/remake.c:1422 #, fuzzy, c-format msgid "Warning: File '%s' has modification time %s s in the future" msgstr "*** `%s' õáå÷ øåáò (%s > %s) ãéúòá åðéä ïåøçà éåðéù ïîæ :äøäæà ***" #: src/remake.c:1662 #, fuzzy, c-format msgid ".LIBPATTERNS element '%s' is not a pattern" msgstr "úéðáú åðéà .LIBPATTERNS ìù `%s' èðîìà" #: src/remote-cstms.c:122 #, c-format msgid "Customs won't export: %s\n" msgstr "%s àöééî åðéà Customs\n" #: src/rule.c:289 #, c-format msgid "warning: ignoring prerequisites on suffix rule definition" msgstr "" #: src/rule.c:530 #, fuzzy msgid "" "\n" "# Implicit Rules" msgstr "" "\n" "# No implicit rules." #: src/rule.c:545 msgid "" "\n" "# No implicit rules." msgstr "" "\n" "# No implicit rules." #: src/rule.c:548 #, fuzzy, c-format msgid "" "\n" "# %u implicit rules, %u (%.1f%%) terminal." msgstr "" "\n" "# %u implicit rules, %u" #: src/rule.c:557 #, fuzzy, c-format msgid "BUG: num_pattern_rules is wrong! %u != %u" msgstr "BUG: num_pattern_rules wrong! %u != %u" # It's no use to try to translate the signal names. #: src/signame.c:84 msgid "unknown signal" msgstr "unknown signal" #: src/signame.c:92 msgid "Hangup" msgstr "Hangup" #: src/signame.c:95 msgid "Interrupt" msgstr "Interrupt" #: src/signame.c:98 msgid "Quit" msgstr "Quit" #: src/signame.c:101 msgid "Illegal Instruction" msgstr "Illegal Instruction" #: src/signame.c:104 msgid "Trace/breakpoint trap" msgstr "Trace/breakpoint trap" #: src/signame.c:109 msgid "Aborted" msgstr "Aborted" #: src/signame.c:112 msgid "IOT trap" msgstr "IOT trap" #: src/signame.c:115 msgid "EMT trap" msgstr "EMT trap" #: src/signame.c:118 msgid "Floating point exception" msgstr "Floating point exception" #: src/signame.c:121 msgid "Killed" msgstr "Killed" #: src/signame.c:124 msgid "Bus error" msgstr "Bus error" #: src/signame.c:127 msgid "Segmentation fault" msgstr "Segmentation fault" #: src/signame.c:130 msgid "Bad system call" msgstr "Bad system call" #: src/signame.c:133 msgid "Broken pipe" msgstr "Broken pipe" #: src/signame.c:136 msgid "Alarm clock" msgstr "Alarm clock" #: src/signame.c:139 msgid "Terminated" msgstr "Terminated" #: src/signame.c:142 msgid "User defined signal 1" msgstr "User defined signal 1" #: src/signame.c:145 msgid "User defined signal 2" msgstr "User defined signal 2" #: src/signame.c:150 src/signame.c:153 msgid "Child exited" msgstr "Child exited" #: src/signame.c:156 msgid "Power failure" msgstr "Power failure" #: src/signame.c:159 msgid "Stopped" msgstr "Stopped" #: src/signame.c:162 msgid "Stopped (tty input)" msgstr "Stopped (tty input)" #: src/signame.c:165 msgid "Stopped (tty output)" msgstr "Stopped (tty output)" #: src/signame.c:168 msgid "Stopped (signal)" msgstr "Stopped (signal)" #: src/signame.c:171 msgid "CPU time limit exceeded" msgstr "CPU time limit exceeded" #: src/signame.c:174 msgid "File size limit exceeded" msgstr "File size limit exceeded" #: src/signame.c:177 msgid "Virtual timer expired" msgstr "Virtual timer expired" #: src/signame.c:180 msgid "Profiling timer expired" msgstr "Profiling timer expired" #: src/signame.c:186 msgid "Window changed" msgstr "Window changed" #: src/signame.c:189 msgid "Continued" msgstr "Continued" #: src/signame.c:192 msgid "Urgent I/O condition" msgstr "Urgent I/O condition" #: src/signame.c:199 src/signame.c:208 msgid "I/O possible" msgstr "I/O possible" #: src/signame.c:202 msgid "SIGWIND" msgstr "SIGWIND" #: src/signame.c:205 msgid "SIGPHONE" msgstr "SIGPHONE" #: src/signame.c:211 msgid "Resource lost" msgstr "Resource lost" #: src/signame.c:214 msgid "Danger signal" msgstr "Danger signal" #: src/signame.c:217 msgid "Information request" msgstr "Information request" #: src/signame.c:220 msgid "Floating point co-processor not available" msgstr "Floating point co-processor not available" #: src/strcache.c:274 #, c-format msgid "" "\n" "%s No strcache buffers\n" msgstr "" #: src/strcache.c:304 #, c-format msgid "" "\n" "%s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu " "B\n" msgstr "" #: src/strcache.c:308 #, c-format msgid "" "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B\n" msgstr "" #: src/strcache.c:319 #, c-format msgid "%s other used: total = %lu B / count = %lu / avg = %lu B\n" msgstr "" #: src/strcache.c:322 #, c-format msgid "" "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n" msgstr "" #: src/strcache.c:326 #, c-format msgid "" "\n" "%s strcache performance: lookups = %lu / hit rate = %lu%%\n" msgstr "" #: src/strcache.c:328 msgid "" "# hash-table stats:\n" "# " msgstr "" #: src/variable.c:1653 msgid "automatic" msgstr "automatic" # These are printed under -p, so they are left in English. #: src/variable.c:1656 msgid "default" msgstr "default" #: src/variable.c:1659 msgid "environment" msgstr "environment" #: src/variable.c:1662 msgid "makefile" msgstr "makefile" #: src/variable.c:1665 msgid "environment under -e" msgstr "environment under -e" #: src/variable.c:1668 msgid "command line" msgstr "command line" #: src/variable.c:1671 #, fuzzy msgid "'override' directive" msgstr "`override' directive" #: src/variable.c:1682 #, fuzzy, c-format msgid " (from '%s', line %lu)" msgstr " (from `%s', line %lu):\n" #: src/variable.c:1745 #, fuzzy msgid "# variable set hash-table stats:\n" msgstr "# %u variables in %u hash buckets.\n" #: src/variable.c:1756 msgid "" "\n" "# Variables\n" msgstr "" "\n" "# Variables\n" #: src/variable.c:1760 #, fuzzy msgid "" "\n" "# Pattern-specific Variable Values" msgstr "" "\n" "# Pattern-specific variable values" #: src/variable.c:1774 msgid "" "\n" "# No pattern-specific variable values." msgstr "" "\n" "# No pattern-specific variable values." #: src/variable.c:1776 #, c-format msgid "" "\n" "# %u pattern-specific variable values" msgstr "" "\n" "# %u pattern-specific variable values" #: src/variable.h:229 #, fuzzy, c-format msgid "warning: undefined variable '%.*s'" msgstr "`%.*s' øãâåî-éúìá äðúùî :úåøéäæ" #: src/vmsfunctions.c:91 #, fuzzy, c-format msgid "sys$search() failed with %d\n" msgstr "%d íò ìùëð sys$search\n" #: src/vmsjobs.c:244 #, c-format msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n" msgstr ".DCL-î CTRL-Y-á ìåôéè øåùôéàá êøåö úåéäì ìåìò :úåøéäæ\n" #: src/vmsjobs.c:681 #, c-format msgid "BUILTIN CD %s\n" msgstr "BUILTIN CD %s\n" #: src/vmsjobs.c:1224 #, c-format msgid "DCL: %s\n" msgstr "" #: src/vmsjobs.c:1284 #, fuzzy, c-format msgid "Append output to %s\n" msgstr "%s-ì èìô úééðôä\n" #: src/vmsjobs.c:1309 #, c-format msgid "Append %.*s and cleanup\n" msgstr "" #: src/vmsjobs.c:1322 #, c-format msgid "Executing %s instead\n" msgstr "%s õéøî úàæ íå÷îá\n" #: src/vpath.c:603 msgid "" "\n" "# VPATH Search Paths\n" msgstr "" "\n" "# VPATH Search Paths\n" #: src/vpath.c:620 #, fuzzy msgid "# No 'vpath' search paths." msgstr "# No `vpath' search paths." #: src/vpath.c:622 #, fuzzy, c-format msgid "" "\n" "# %u 'vpath' search paths.\n" msgstr "" "\n" "# %u `vpath' search paths.\n" #: src/vpath.c:625 #, fuzzy msgid "" "\n" "# No general ('VPATH' variable) search path." msgstr "" "\n" "# No general (`VPATH' variable) search path." #: src/vpath.c:631 #, fuzzy msgid "" "\n" "# General ('VPATH' variable) search path:\n" "# " msgstr "" "\n" "# General (`VPATH' variable) search path:\n" "# " #: src/w32/w32os.c:44 #, c-format msgid "Jobserver slots limited to %d\n" msgstr "" #: src/w32/w32os.c:60 #, c-format msgid "creating jobserver semaphore: (Error %ld: %s)" msgstr "" #: src/w32/w32os.c:79 #, c-format msgid "" "internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)" msgstr "" #: src/w32/w32os.c:82 #, c-format msgid "Jobserver client (semaphore %s)\n" msgstr "" #: src/w32/w32os.c:123 #, c-format msgid "release jobserver semaphore: (Error %ld: %s)" msgstr "" #: src/w32/w32os.c:194 #, 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!" #~ msgid "" #~ "\n" #~ "# No files." #~ msgstr "" #~ "\n" #~ "# No files." #~ msgid "" #~ "\n" #~ "# %u files in %u hash buckets.\n" #~ msgstr "" #~ "\n" #~ "# %u files in %u hash buckets.\n" #~ msgid "# average %.3f files per bucket, max %u files in one bucket.\n" #~ msgstr "# average %.3f files per bucket, max %u files in one bucket.\n" #~ 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 "%s: Command not found" #~ msgstr "äàöîð àì åæ äãå÷ô :%s" #~ msgid "%s: Shell program not found" #~ msgstr "äàöîð àì shell úãå÷ô :%s" #~ msgid "DIRECTORY" #~ msgstr "DIRECTORY" #~ msgid "Change to DIRECTORY before doing anything" #~ msgstr "äãåáò úìéçú éðôì DIRECTORY-ì äé÷éú äðù" #~ msgid "FLAGS" #~ msgstr "FLAGS" #~ msgid "Suspend process to allow a debugger to attach" #~ msgstr "äéìà äôðîä øåáéç êøåöì úéðëúä á÷ò" #~ msgid "Environment variables override makefiles" #~ msgstr "makefile-á íéðúùî íéñøåã äáéáñ éðúùî" #~ msgid "FILE" #~ msgstr "FILE" #~ msgid "Read FILE as a makefile" #~ msgstr "makefile-ë FILE àø÷" #~ msgid "Ignore errors from commands" #~ msgstr "úåéðëú-úúá úåàéâùî íìòúä" #~ msgid "Search DIRECTORY for included makefiles" #~ msgstr "DIRECTORY-á íéììëð makefile éöá÷ ùôç" #~ msgid "Don't start multiple jobs unless load is below N" #~ msgstr "N-ì úçúî ñîåòä íà àìà úåáåøî úåãåáò ìéçúú ìà" #~ msgid "Don't actually run any commands; just print them" #~ msgstr "íúåà ñôãä ÷ø ;ììë úåãå÷ô õéøú ìà" #~ msgid "Consider FILE to be very old and don't remake it" #~ msgstr "ùãçî åúåà äðáú ìàå ,ïùé ãàî äéä åìéàë FILE-á âäð" #~ msgid "Don't echo commands" #~ msgstr "úåòöåáî úãå÷ô âéöú ìà" #~ msgid "Turns off -k" #~ msgstr "-k ìèáî" #~ msgid "Consider FILE to be infinitely new" #~ msgstr "øùôàù ùãç éëä äéä FILE åìéàë âäð" #~ 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. #~ msgid "done sleep(30). Continuing.\n" #~ msgstr " äîééúñð\n" #~ msgid "Do not specify -j or --jobs if sh.exe is not available." #~ msgstr ".ïéîæ åðéà sh.exe íà --jobs åà -j-á êåîúì ïúéð àì" #~ msgid "Resetting make for single job mode." #~ 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" #~ "%sCopyright (C) 1988, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 2000\n" #~ "%s\tFree Software Foundation, Inc.\n" #~ "%sThis is free software; see the source for copying conditions.\n" #~ "%sThere is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" #~ "%sPARTICULAR PURPOSE.\n" #~ "\n" #~ "%sReport bugs to .\n" #~ "\n" #~ msgstr "" #~ ", by Richard Stallman and Roland McGrath.\n" #~ "%s %s øåáò äúðáð\n" #~ "%sCopyright (C) 1988, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 2000\n" #~ "%s\tFree Software Foundation, Inc.\n" #~ "%s .øå÷î éöá÷á ïééò ä÷úòä úåéåëæì ;úéùôç äðëú éäåæ\n" #~ "%s äîàúä åà úåøéçñ øåáò àì åìéôà ;úåéøçà áúëá äååìî äðéà åæ úéðëåú\n" #~ "%s .éäùìë úéìëúì\n" #~ "\n" #~ "%s -ì äì÷ú éçååéã çåìùì àð\n" #~ "\n" #~ msgid "Entering" #~ msgstr "Entering" #~ msgid "Leaving" #~ msgstr "Leaving" #~ msgid "Unknown error %d" #~ msgstr "Unknown error %d" #~ msgid "virtual memory exhausted" #~ msgstr "éìàåèøéåä ïåøëæä øîâð" #~ msgid "extraneous `endef'" #~ msgstr "øúåéî `endef'" #~ msgid "empty `override' directive" #~ msgstr "ä÷éø `override' úàøåä" #~ msgid "invalid `override' directive" #~ msgstr "äéåâù `override' úàøåä" #~ msgid "no file name for `%sinclude'" #~ msgstr "õáå÷ íù àìì `%sinclude' úàøåä" #~ msgid "target `%s' leaves prerequisite pattern empty" #~ msgstr "ä÷éø íã÷ä úùéøã úéðáú úà äøéàùî `%s' äøèî" #~ msgid " terminal." #~ msgstr " terminal." #~ msgid "# No variables." #~ msgstr "# No variables." #~ msgid "# average of %.1f variables per bucket, max %u in one bucket.\n" #~ msgstr "# average of %.1f variables per bucket, max %u in one bucket.\n" #~ msgid "# average of %d.%d variables per bucket, max %u in one bucket.\n" #~ msgstr "# average of %d.%d variables per bucket, max %u in one bucket.\n" make-4.3/po/id.gmo0000644000175000017500000011653413611136532010747 00000000000000Þ•Šl ¼0!1!&N!u!…!!Ž!-°!Þ! ð!-"?"'U"#}"¡" ¸"Æ"ä"Pý";N#"Š#­# É#tê#L_$P¬$9ý$M7%@…%oÆ%o6&P¦&l÷&Fd'J«'€ö'9w(C±(fõ(_\);¼):ø)O3*Jƒ*}Î*uL+~Â+>A,M€,CÎ,2-FE-IŒ-;Ö- .."9. \.i. x.†.. ¶.Á.Ü.ï. / //#/%4/Z/7c/›/ª/º//Ò/0030M0(k0”0&©0*Ð0&û0+"1N1#c1#‡1)«1-Õ1,202I2$^29ƒ2½23Ü23,3G3W3!n3$3=µ3Gó39;4u4~4"…4¨4Å4;ã4!5A5+]5‰5œ5¶5,Ð5ý5%6,A6-n6 œ6&½6ä67#7!C7.e7”7¤7͹7‡8/§8&×8 þ8%9E9e9y91Ž9 À9Ì9#ã9#:L+:6x:¯:AË:> ; L;+V;*‚;­; Å;Ï;1×;2 < <<H<a<"v<*™<Ä<Ó< ã<= = ,=6=N= n= {=%ˆ=®=+Î=$ú=> >>H>b>{>+•>Á>!Þ> ? ? '?5?>?]?$s?&˜?¿?#ß?@"@A@,Z@‡@)¥@Ï@!è@& A1AQA XAeAnA%‚A¨A¼A ÏAÙA ÷AB7B>B5\B’B0­B'ÞB3C :C+FCrC-ŽC%¼C-âC'D8DRD!UDwD:•D ÐD*ÛDE"#E FE6PE ‡E-•E-ÃE1ñE1#FUFmF-F¯F´FÆFÜF"òF#G/9G=iG7§GßGÿG-H6KH1‚H-´H"âH'I-I"MI#pI ”I¢I«I³I$ÆI&ëIJ-J5JFJZJ&oJ+–J6ÂJ)ùJ.#K RK7]K*•KÀK#ÖK&úK!LAL\LtL!‰L «L·LÍL!ãLM%M;;MwM(†M ¯M1¹M9ëM3%N3YNN3©N ÝNêN-ýN+O!3OUO iOuOŠO$šO(¿O'èO8P0IP8zP³PÊPâPúPQ6%QH\Q¥Q)ÃQ;íQ3)R]R&fRRR¸RÏR'ïRS0S13S0eS1–S-ÈS1öS2(T[T {T*ˆT0³TäT$óT,U0EU.vU¥U,ÂU1ïU*!VLV6lV5£V,ÙV"W")W3LW)€W-ªW&ØWÿWX,X0FXwX=—X1ÕX,YH4Y*}Y"¨Y/ËY8ûY74ZlZ |ZšŠZ%\"E\ h\ v\!€\2¢\Õ\%é\;]K].i]˜]¸] Ò]"ß]^O ^;p^-¬^Ú^"ø^w_I“_]Ý_G;`kƒ`Mï`r=ax°aX)bl‚bHïbM8c“†c>dBYdcœdqe>reO±etfLvfŠÃf“Ng’âgBuhn¸hF'i;niGªiDòi<7j tj€j!Ÿj ÁjÌjÜjìjk k+kJk"hk ‹k•k ¨k²k$Ák æk=ók1lBl_lFylÀlÛlðl m/(mXm+tm+ m(Ìm3õm)nFn#en)‰n1³n7åno4o'Qo;yo!µo5×o% p*3p^p!up%—p0½pEîpH4q?}q½qÆq3Íqrr?i!¨)Êô- €.8€+g€“€ š€ ¦€´€-Ê€ø€ #- Kl‹2”5Çý-‚$F‚9k‚ ¥‚7°‚è‚7ƒ.>ƒ<mƒ*ªƒ Õƒöƒ3üƒ$0„=U„“„:¥„*à„, …8…5?…u…9ˆ…8Â…<û…48†m†…†<™†Ö†߆ø†‡!$‡#F‡:j‡9¥‡E߇%ˆ&Eˆ7lˆ4¤ˆ6Ùˆ4‰+E‰3q‰¥‰(ĉ'퉊%Š.Š6Š$KŠ&pŠ —Š ¸ŠÄŠØŠòŠ+ ‹58‹=n‹0¬‹DÝ‹ "Œ5,Œ.bŒ‘Œ#¬Œ(ÐŒ&ùŒ ?Z#n’¡¼&×&þ%Ž>8ŽwŽ9‡ŽÁŽJÊŽGE]E£*é@Ud-{©-®Ü ñü‘%&‘(L‘(u‘Dž‘3ã‘<’T’m’‡’Ÿ’¶’:Ó’H“W“*v“A¡“6ã“”+#”O”*^”‰”+œ”)È”ò”•= •<I•=†•1Ä•5ö•2,–&_– †–;“–6Ï–—*—,H—0u—-¦—"Ô—*÷—;"˜5^˜”˜@´˜Aõ˜+7™$c™ˆ™=¦™-ä™5š.Hšwš•š¬š+Èš%ôšH›?c›8£›bÜ›.?œ-nœ.œœ7Ëœ6:L–ä~O°i h²<-móº"dJe6€µ¤+à1FÉ©k`‚ý«xgþ‰2;1…ù(ƒz/6H* 40EÊDa‘"[9C?ÌpG,ˆpQvl@NLåtÏÕ ëFYR&|{P7VrD|œ(s¿f¶¡›`%%“¹BŠ„úWÄí€ǘ ¢t™ŽÈÙéL)çC‹/{3×=ñ÷V#Òe^MÐËÛ ]&PlBðAƒTÍ9Ã,5-<½$8Ý5xŒ‚}‡+rR ¬ê7ˆ¥u­w¯îK†}ûT!㞟yæ¸ZOÜ0~_AS³¼QmKZ•'èÔØqòHo[u > ï§GMX*ÿ '.q$†;ošøj]Á¾…fôÎizb´”c8kd»4>Å IÓNwÖ Þ@3—s„UÑh\£ö=’\?IUb^!±¨:‰â#n᪠Š yES‡JYX·ÚgÂjnWaüvÀ2ìõ)c._Ʀ®ß: # %u 'vpath' search paths. # %u pattern-specific variable values # Directories # Files # Finished Make data base on %s # General ('VPATH' variable) search path: # # Implicit Rules # Make data base, printed on %s # No general ('VPATH' variable) search path. # No implicit rules. # No pattern-specific variable values. # Pattern-specific Variable Values # VPATH Search Paths # Variables # files hash-table stats: # %s No strcache buffers %s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu B %s strcache performance: lookups = %lu / hit rate = %lu%% Counted %d args in failed launch This program built for %s This program built for %s (%s) Unhandled exception filter called from program %s ExceptionCode = %lx ExceptionFlags = %lx ExceptionAddress = 0x%p --debug[=FLAGS] Print various types of debugging information. --no-print-directory Turn off -w, even if it was turned on implicitly. --trace Print tracing information. --warn-undefined-variables Warn when an undefined variable is referenced. -B, --always-make Unconditionally make all targets. -C DIRECTORY, --directory=DIRECTORY Change to DIRECTORY before doing anything. -I DIRECTORY, --include-dir=DIRECTORY Search DIRECTORY for included makefiles. -L, --check-symlink-times Use the latest mtime between symlinks and target. -O[TYPE], --output-sync[=TYPE] Synchronize output of parallel jobs by TYPE. -R, --no-builtin-variables Disable the built-in variable settings. -S, --no-keep-going, --stop Turns off -k. -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE Consider FILE to be infinitely new. -b, -m Ignored for compatibility. -d Print lots of debugging information. -e, --environment-overrides Environment variables override makefiles. -f FILE, --file=FILE, --makefile=FILE Read FILE as a makefile. -h, --help Print this message and exit. -i, --ignore-errors Ignore errors from recipes. -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no arg. -k, --keep-going Keep going when some targets can't be made. -l [N], --load-average[=N], --max-load[=N] Don't start multiple jobs unless load is below N. -n, --just-print, --dry-run, --recon Don't actually run any recipe; just print them. -o FILE, --old-file=FILE, --assume-old=FILE Consider FILE to be very old and don't remake it. -p, --print-data-base Print make's internal database. -q, --question Run no recipe; exit status says if up to date. -r, --no-builtin-rules Disable the built-in implicit rules. -s, --silent, --quiet Don't echo recipes. -t, --touch Touch targets instead of remaking them. -v, --version Print the version number of make and exit. -w, --print-directory Print the current directory. Date %s Ignoring VPATH name '%s'. uid = %d, gid = %d, mode = 0%o. (built-in): (core dumped) (don't care) (from '%s', line %lu) (from '%s', line %lu): (ignored) (name might be truncated) (no default goal) (no ~ expansion) (remote) (search path) files, impossibilities impossibilities in %lu directories. so far.# A default, MAKEFILES, or -include/sinclude makefile.# Also makes:# Builtin rule# Command line target.# Dependencies recipe running (THIS IS A BUG).# Failed to be updated.# File does not exist.# File has been updated.# File has not been updated.# File is an intermediate prerequisite.# File is very old.# Implicit rule search has been done.# Implicit rule search has not been done.# Implicit/static pattern stem: '%s' # Invalid value in 'command_state' member!# Last modified %s # Modification time never checked.# Needs to be updated (-q is set).# Phony target (prerequisite of .PHONY).# Precious file (prerequisite of .PRECIOUS).# Recipe currently running (THIS IS A BUG).# Successfully updated.# recipe to execute# %s (device %d, inode [%d,%d,%d]): # %s (device %d, inode [%d,%d,%d]): could not be opened. # %s (device %ld, inode %ld): # %s (device %ld, inode %ld): could not be opened. # %s: could not be stat'd. # No 'vpath' search paths.# Not a target:# hash-table stats: # # variable set hash-table stats: $SHELL changed (was '%s', now '%s') %s (line %d) Bad shell context (!unixy && !batch_mode_shell) %s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B %s other used: total = %lu B / count = %lu / avg = %lu B %s%s: %s%s: %s%s: Entering an unknown directory %s: Entering directory '%s' %s: Field '%s' not cached: %s%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p) %s: Leaving an unknown directory %s: Leaving directory '%s' %s: Timestamp out of range; substituting %s%s: failed to load%s: illegal option -- %c %s: invalid option -- %c %s: option '%c%s' doesn't allow an argument %s: option '%s' is ambiguous %s: option '%s' requires an argument %s: option '--%s' doesn't allow an argument %s: option '-W %s' doesn't allow an argument %s: option '-W %s' is ambiguous %s: option requires an argument -- %c %s: target '%s' does not exist%s: unrecognized option '%c%s' %s: unrecognized option '--%s' %s: update target '%s' due to: %s%s: user %lu (real %lu), group %lu (real %lu) %sBuilt for %s %sBuilt for %s (%s) %sLicense GPLv3+: GNU GPL version 3 or later %sThis is free software: you are free to change and redistribute it. %sThere is NO WARRANTY, to the extent permitted by law. %sNo rule to make target '%s'%s%sNo rule to make target '%s', needed by '%s'%s%s[%u]: Entering an unknown directory %s[%u]: Entering directory '%s' %s[%u]: Leaving an unknown directory %s[%u]: Leaving directory '%s' '%s' is up to date.'override' directive*** Archive member '%s' may be bogus; not deleted*** Break. *** Deleting file '%s'*** Deleting intermediate file '%s'*** Waiting for unfinished jobs....*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp*** [%s] Archive member '%s' may be bogus; not deleted*** [%s] Deleting file '%s'-O[TYPE] (--output-sync[=TYPE]) is not configured for this build.-warning, you may have to re-enable CTRL-Y handling from DCL. . Stop. .DEFAULT_GOAL contains more than one target.LIBPATTERNS element '%s' is not a pattern; using VPATH name '%s'AbortedAccess violation: read operation at address 0x%p Access violation: write operation at address 0x%p Alarm clockAppend %.*s and cleanup Append output to %s Avoiding implicit rule recursion. BUG: num_pattern_rules is wrong! %u != %uBUILTIN CD %s Bad system callBatch file contents: @echo off Batch file contents:%s %s Broken pipeBus errorCPU time limit exceededCannot create a temporary file Child accessChild exitedCircular %s <- %s dependency dropped.Cleaning up temp batch file %s Cleaning up temp batch file %s failed (%d) Cleaning up temporary batch file %s Considering target file '%s'. ContinuedCould not restore stderr Could not restore stdin Could not restore stdout Couldn't change back to original directory.CreatePipe() failed (e=%ld) Creating temporary batch file %s Current timeCustoms won't export: %s Danger signalEMT trapEmpty symbol name for load: %sExecuting %s instead Failed to load symbol %s from %s: %sFailed to open global symbol table: %sFailed to remake makefile '%s'.Failed to remake target file '%s'. File '%s' does not exist. File '%s' was considered already. File size limit exceededFinished prerequisites of target file '%s'. Finished updating file '%s'. Floating point co-processor not availableFloating point exceptionFound an implicit rule for '%s'. Found prerequisite '%s' as VPATH '%s' Giving up on target file '%s'. HangupI/O possibleIOT trapIllegal InstructionIncluded makefile '%s' was not found.Information requestInitialized accessInterruptJobserver client (fds %d,%d) Jobserver client (semaphore %s) Jobserver slots limited to %d KilledLive child %p (%s) PID %s %s Loaded object %s is not declared to be GPL compatibleLoading symbol %s from %s Looking for a rule with intermediate file '%s'. Looking for an implicit rule for '%s'. Looking for archive-member implicit rule for '%s'. Make accessMakefile '%s' might loop; not remaking it. Makefile '%s' was not foundMakefile from standard input specified twice.Making '%s' due to always-make flag. Malformed target-specific variable definitionMember '%s'%s: %ld bytes at %ld (%ld). Must remake target '%s'. NoNo implicit rule found for '%s'. No need to remake target '%s'No recipe for '%s' and no prerequisites actually changed. No targetsNo targets specified and no makefile foundNothing to be done for '%s'.Obtained token for child %p (%s). Options: Parallel jobs (-j) are not supported on this platform.Power failurePrerequisite '%s' is newer than target '%s'. Prerequisite '%s' is older than target '%s'. Prerequisite '%s' is order-only for target '%s'. Prerequisite '%s' of target '%s' does not exist. Profiling timer expiredPruning file '%s'. Putting child %p (%s) PID %s%s on the chain. QuitRe-executing[%u]:Reading makefile '%s'Reading makefiles... Reaping losing child %p PID %s %s Reaping winning child %p PID %s %s Recently tried and failed to update file '%s'. Recipe for '%s' will be ignored in favor of the one for '%s'.Recipe for file '%s' was found by implicit rule search,Recipe has too many lines (%ud)Recipe of '%s' is being run. Recipe was specified for file '%s' at %s:%lu,Recursive variable '%s' references itself (eventually)Rejecting impossible implicit prerequisite '%s'. Rejecting impossible rule prerequisite '%s'. Released token for child %p (%s). Removing child %p PID %s%s from chain. Removing intermediate files... Report bugs to Resetting to single job (-j1) mode.Resource lostSIGPHONESIGWINDSegmentation faultSkipping UTF-8 BOM in makefile '%s' Skipping UTF-8 BOM in makefile buffer Still updating file '%s'. StoppedStopped (signal)Stopped (tty input)Stopped (tty output)Successfully remade target file '%s'. Symbolic links not supported: disabling -L.Target '%s' is double-colon and has no prerequisites. Target '%s' not remade because of errors.Target file '%s' needs to be remade under -q. TerminatedThe 'load' operation is not supported on this platform.The prerequisites of '%s' are being made. Trace/breakpoint trapTrying implicit prerequisite '%s'. Trying pattern rule with stem '%.*s'. Trying rule prerequisite '%s'. Updating goal targets.... Updating makefiles.... Urgent I/O conditionUsage: %s [options] [target] ... User accessUser defined signal 1User defined signal 2Using default commands for '%s'. Using default recipe for '%s'. Virtual timer expiredWarning: File '%s' has modification time %s s in the futureWindow changedattempt to use unsupported feature: '%s'automaticbut '%s' is now considered the same file as '%s'.can't allocate %lu bytes for hash table: memory exhaustedcan't rename double-colon '%s' to single-colon '%s'can't rename single-colon '%s' to double-colon '%s'cannot enforce load limit: cannot enforce load limits on this operating systemcommand linecreating jobs pipecreating jobserver semaphore: (Error %ld: %s)defaultempty string invalid as file nameempty variable nameenvironmentenvironment under -eextraneous '%s'extraneous text after '%s' directiveextraneous text after 'define' directiveextraneous text after 'endef' directivefind_and_set_shell() path search set default_shell = %s find_and_set_shell() setting default_shell = %s first argument to 'word' function must be greater than 0fopen (temporary file)fwrite (temporary file)guile: Evaluating '%s' guile: Expanding '%s' init jobserver pipeinsufficient number of arguments (%d) to function '%s'internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)invalid syntax in conditionallbr$ini_control() failed with status = %dlbr$set_module() failed to extract module info, status = %dmake reaped child pid %s, still waiting for pid %s makefilemissing 'endef', unterminated 'define'missing 'endif'missing rule before recipemissing target patternmixed implicit and normal rulesmixed implicit and static pattern rulesmultiple target patternsnono more file handles: could not duplicate stderr no more file handles: could not duplicate stdin no more file handles: could not duplicate stdout non-numeric first argument to 'word' functionnon-numeric first argument to 'wordlist' functionnon-numeric second argument to 'wordlist' functiononly one 'else' per conditionalopen: %s: %sprerequisites cannot be defined in recipesprocess_easy() failed to launch process (e=%ld) read jobs piperecipe commences before first targetrelease jobserver semaphore: (Error %ld: %s)semaphore or child process wait: (Error %ld: %s)spawnvpe: environment space might be exhaustedsys$search() failed with %d target '%s' doesn't match the target patterntarget '%s' given more than once in the same ruletarget file '%s' has both : and :: entriestarget pattern contains no '%%'the '%s%s' option requires a non-empty string argumentthe '-%c' option requires a positive integer argumenttouch archive member is not available on VMStouch: '%s' is not a valid archivetouch: Archive '%s' does not existtouch: Bad return code from ar_member_touch on '%s'touch: Member '%s' does not exist in '%s'unimplemented on this platform: function '%s'unknown debug level specification '%s'unknown output-sync type '%s'unknown signalunlink (temporary file): unterminated call to function '%s': missing '%c'unterminated variable referencewarning: Clock skew detected. Your build may be incomplete.warning: NUL character seen; rest of line ignoredwarning: ignoring old recipe for target '%s'warning: jobserver unavailable: using -j1. Add '+' to parent make rule.warning: overriding recipe for target '%s'warning: undefined variable '%.*s'windows32_openpipe(): process_init_fd() failed windows32_openpipe: DuplicateHandle(Err) failed (e=%ld) windows32_openpipe: DuplicateHandle(In) failed (e=%ld) write jobserverwrite: %s: %sProject-Id-Version: GNU make 4.0 Report-Msgid-Bugs-To: bug-make@gnu.org PO-Revision-Date: 2014-07-30 18:30+0700 Last-Translator: Arif E. Nugroho Language-Team: Indonesian Language: id MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. # %u 'vpath' jalur pencarian. # %u nilai variabel pola-spesifik # Direktori # Berksa # Selesai membuat basis data %s # Jalur pencarian umum untuk variabel 'VPATH': # # Aturan implisit. # Membuat basis data, ditampilkan %s # Tidak ada ('VPATH' variabel) umum dalam jalur pencarian. # Tidak ada aturan implisit. # Tidak terdapat nilai variabel pola-spesifik # Nilai Variabel Pola-Spesifik # VPATH Jalur Pencarian # Variabel # berkas statistik hash-table: # %s # dari buffer strcache: %s strcache free: %lu total = (%lu) / mak = %lu / min = %lu / rata-rata = %lu %s strcache performance: lookups = %lu / hit rate = %lu%% Terhitung %d argumen gagal untuk dijalankan Program ini dibuat untuk %s Program ini dibuat untuk %s (%s) Exception filter tidak dapat diatasi dari program %s ExceptionCode = %lx ExceptionFlags = %lx ExceptionAddress = 0x%p --debug[=FLAGS] Menampilkan berbagai tipe informasi debug. --no-print-directory Matikan opsi -w, walaupun opsi ini diaktifkan secara implisit. --trace Menampilkan banyak informasi debug. --warn-undefined-variables Peringatkan akan adanya variabel yang tidak terdefinisi yang direferensikan. -B, --always-make Membuat semua target secara tidak kondisional. -C DIRECTORI, --directory=DIREKTORI Pindah ke DIREKTORI sebelum melakukan apapun. -I DIREKTORI, --include-dir=DIREKTORI Cari di DIREKTORI untuk makefile yang disertakan. -L, --check-symlink-times Gunakan waktu mtime terbaru diantara symlinks dan target. -O[TYPE], --output-sync[=TYPE] Synchronize output of parallel jobs by TYPE. -R, --no-builtin-variables Non-aktifkan konfigurasi variabel bawaan. -S, --no-keep-going, --stop Matikan opsi -k. -W FILE, --what-if=BERKAS, --new-file=BERKAS, --assume-new=BERKAS Pertimbangkan BERKAS sebagai sebuah berkas baru. -b, -m Diabaikan untuk kompatibilitas. -d Menampilkan banyak informasi debug. -e, --environment-overrides Variabel lingkungan memaksa makefiles. -f BERKAS, --file=BERKAS, --makefile=BERKAS Baca BERKAS sebagai sebuah makefile. -h, --help Tampilkan pesan ini dan keluar. -i, --ignore-errors Abaikan kesalahan dari perintah yang dijalankan. -j [N], --jobs[=N] Ijinkan N kerja secara bersamaan. Kerja tidak terhingga jika tidak diberikan argumen. -k, --keep-going Tetap jalan ketika target tidak dapat dibuat. -l [N], --load-average[=N], --max-load[=N] Jangan menjalankan multiple pekerjaan kecuali beban dibawah N. -n, --just-print, --dry-run, --recon Jangan menjalankan perintah apapun; tampilkan saja apa yang akan dikerjakan. -o FILE, --old-file=BERKAS, --assume-old=BERKAS Pertimbangkan BERKAS sudah sangat tua dan jangan membuatnya lagi. -p, --print-data-base Tampilkan basis data internal make. -q, --question Tidak menjalankan perintah. Mengeluarkan status saja dan mengatakan up to date. -r, --no-builtin-rules Aturan implisit bawaan tidak digunakan. -s, --silent, --quiet Jangan menampilkan perintah. -t, --touch Sentuh target dari pada membuat kembali. -v, --version Tampilkan versi dari make dan keluar. -w, --print-directory Tampilkan directory saat ini. Tanggal %s Mengabaikan nama VPATH '%s'. uid = %d, gid = %d, mode = 0%o. (bawaan): (core di-dump) (tidak peduli) (dari '%s', baris %lu) (dari '%s', baris %lu): (diabaikan) (nama mungkin akan di potong) (tidak terdapat tujuan baku) (tidak terdapat ekspansi tilde ~) (remote) (jalur pencarian) berkas, tidak mungkin tidak mungkin dalam direktori %lu. sejauh ini.# Merupakan baku, MAKEFILES atau -include/sinclude makefile.# Juga membuat:# Tidak ada aturan implisit.# Baris perintah target.# Perintah ketergantungan sedang berjalan (INI MERUPAKAN SEBUAH BUG).# Gagal untuk mengupdate.# Berkas tidak ada.# Berkas sudah diperbarui.# Berkas belum diperbarui.# Berkas merupakan dibutuhkan untuk sementara.# Berkas sudah sangat tua.# Pencarian aturan implisit sudah selesai.# Pencarian aturan implisit belum selesai.# Pola/implisit atau statis stem: '%s' # Nilai yang salah dalam anggota 'command_state' !# Terakhir dimodifikasi %s # Waktu ubah sudah diperiksa.# Perlu untuk diupdate (-q diset).# Phony target (dibutuhkan oleh .PHONY).# Berkas sebelumnya (dibutuhkan oleh .PRECIOUS).# Perintah sedang berjalan (INI MERUPAKAN SEBUAH BUG).# Sukses memperbarui.# perintah untuk dijalankan# %s (perangkat %d, inode [%d,%d,%d]): # %s (perangkat %d, inode [%d,%d,%d]): tidak dapat dibuka. # %s (perangkat %ld, inode %ld): # %s (perangkat %ld, inode %ld): tidak dapat dibuka. # %s: tidak dapat melihat statistik. # Tidak ada 'vpath' dalam jalur pencarian.# Bukan sebuah target:# berkas statistik hash-table: # # statistik variable set hash-table: $SHELL berubah (sebelumnya '%s', sekarang '%s') %s (baris %d) shell context tidak baik (!unixy && !batch_mode_shell) %s strcache free: total = %lu / mak = %lu / min = %lu / rata-rata = %hu besar %s strcache: total = %lu / count = %lu / rata-rata = %lu %s%s: %s%s: %s%s: Memasuki sebuah direktori yang tidak diketahui %s: Memasuki direktori '%s' %s: Field '%s' not cached: %s%s: Interupsi/Exception diterima (kode = 0x%lx, alamat = 0x%p) %s: Meninggalkan sebuah direktori yang tidak diketahui %s: Meninggalkan direktori '%s' %s: Timestamp diluar jangkauan; digantikan dengan %s%s: failed to load%s: opsi tidak legal -- %c %s: opsi tidak valid -- %c %s: opsi '%c%s' tidak memperbolehkan argumen %s: opsi '%s' merupakan ambigu %s: opsi '%s' membutuhkan sebuah argumen %s: opsi '--%s' tidak memperbolehkan argumen %s: opsi '-W %s' tidak memperbolehkan sebuah argumen %s: opsi '-W %s' merupakan opsi ambigu %s: opsi membutuhkan sebuah argumen -- %c %s: archive '%s' tidak ada%s: opsi tidak dikenali '%c%s' %s: opsi tidak dikenali '--%s' %s: tidak terdapat aturan untuk membuat target '%s', dibutuhkan oleh %s%s: pengguna %lu (ril %lu), grup %lu (ril %lu) %sAplikasi ini dibuat untuk %s %sAplikasi ini dibuat untuk %s (%s) %sLisensi GPLv3+: GNU GPL versi 3 atau sesudahnya %sIni adalah aplikasi gratis: anda bebas untuk mengubah dan menyebarkannya. %sTidak ada JAMINAN, sepanjang diperbolehkan oleh hukum. %sTidak terdapat aturan untuk membuat target '%s'%s%sTidak terdapat aturan untuk membuat target '%s', dibutuhkan oleh '%s'%s%s[%u]: Memasuki sebuah direktori yang tidak diketahui %s[%u]: Memasuki direktori '%s' %s[%u]: Meninggalkan sebuah direktori yang tidak diketahui %s[%u]: Meninggalkan direktori '%s' '%s' sudah baru.'override' direktif*** Anggota archive '%s' mungkin palsu; tidak dihapus*** Berhenti. *** Menghapus berkas '%s'*** Menghapus berkas sementara '%s'*** Menunggu pekerjaan yang belum selesai....*** Peringatan: .LOW_RESOLUTION_TIME berkas '%s' memiliki sebuah penanda waktu dengan resolusi tinggi*** [%s] Anggota archive '%s' mungkin palsu: tidak dihapus*** [%s] Menghapus berkas '%s'-O[TYPE] (--output-sync[=TYPE]) is not configured for this build.-warning, kamu mungkin telah mengaktifkan pengontrolan CTRL-Y dari DCL. . Berhenti. .DEFAULT_GOAL berisi lebih dari satu target.LIBPATTERNS elemen '%s' bukan merupakan sebuah pattern; menggunakan nama VPATH '%s'DibatalkanAkses dilanggar: operasi baca pada alamat 0x%p Akses dilanggar: operasi tulis pada alamat 0x%p AlarmAppend %.*s and cleanup Meneruskan output ke %s Menghindari aturan implisit rekursi. BUG: num_pattern_rules salah! %u != %uBAWAAN CD %s Panggilan sistem burukBatch file contents: @echo off Batch file contents:%s %s Pipa rusakBus errorBatas waktu CPU telah terlampauiTidak dapat membuat berkas sementara Akses anakProses anak berakhirKetergantungan %s <- %s melingkar dijatuhkan.Membersihkan berkas batch sementara %s Membersihkan berkas batch sementara %s failed (%d) Membersihkan berkas batch sementara %s Mempertimbangkan berkas target '%s'. DilanjutkanTidak dapat mengembalikan stderr Tidak dapat mengembalikan stdin Tidak dapat mengembalikan stdout Tidak dapat kembali ke direktori asal.CreatePipe() gagal (e=%ld) Membuat berkas batch sementara %s Waktu saat iniCustom tidak akan men-export: %s Sinyal bahayaPenangkap EMTEmpty symbol name for load: %sMenjalankan perintah %s Failed to load symbol %s from %s: %sFailed to open global symbol table: %sGagal membuat lagi makefile '%s'.Gagal membuat lagi target berkas '%s'. Berkas '%s' tidak ada. Berkas '%s' baru saja dipertimbangkan. Batas maksimal ukuran berkas terlampauiSelesai melakukan semua persyaratan untuk berkas target '%s'. Selesai memperbarui berkas '%s'. co-processor titik pecahan tidak tersediaEksepsi titik pecahanDitemukan sebuah aturan implisit untuk '%s'. Menemukan persyaratan '%s' sebagai VPATH '%s' Menyerah untuk membuat target berkas '%s'. HangupI/O mungkinPenangkap IOTInstruksi Tidak LegalMakefile yang dimasukan '%s' tidak ditemukan.Permintaan informasiAkses terinisialisasiInterupsiJobserver client (fds %d,%d) Jobserver client (semaphore %s) Jobserver slots limited to %d TerbunuhProses anak yang masih berjalan %p (%s) PID %s %s Loaded object %s is not declared to be GPL compatibleLoading symbol %s from %s Mencari aturan dengan berkas sementara '%s'. Mencari aturan implisit untuk '%s'. Mencari aturan implisit untuk anggota-archive pada '%s'. Buat aksesMakefile '%s' mungkin berupa loop; tidak membuat lagi. Makefile '%s' tidak ditemukanMakefile dari standard input dispesifikasikan dua kali.Membuat '%s' karena adanya tanda always-make. Definisi variable target-specific memiliki format yang salahAnggota '%s'%s: %ld bytes pada %ld (%ld). Harus membuat lagi target '%s'. TidakTidak terdapat aturan implisit untuk membuat '%s'. Tidak perlu membuat lagi target '%s'Tidak ada perintah untuk '%s' dan persyaratan tidak berubah. Tidak ada targetsTarget tidak dispesifikasikan dan tidak ditemukan makefileTidak ada yang harus dilakukan untuk '%s'.Memperoleh token untuk proses anak %p (%s). Opsi: Parallel jobs (-j) tidak didukung dalam platform ini.Listrik bermasalahPersyaratan untuk '%s' lebih baru dari pada target '%s'. Persyaratan untuk '%s' lebih tua dari pada target '%s'. Persyaratan untuk '%s' adalah order-only untuk target '%s'. Persyaratan untuk '%s' untuk target '%s' tidak ada. Pewaktu profiling habisPruning file '%s'. Meletakkan proses anak %p (%s) PID %s%s pada rantai proses. BerhentiMenjalankan kembali[%u]:Membaca makefile '%s'Membaca makefiles... Reaping anak hilang %p PID %s %s Reaping winning child %p PID %s %s Baru saja dicoba dan gagal untuk memperbarui berkas '%s'. Perintah untuk '%s' akan diabaikan untuk menghargai '%s'.Perintah untuk berkas '%s' ditemukan dalam pencarian aturan implisit,Recipe has too many lines (%ud)Perintah dari '%s' sedang dijalankan. Perintah di spesifikasikan untuk berkas '%s' di %s:%lu,Variabel rekursif '%s' menunjuk pada dirinya sendiriMenolak persyaratan implisit yang tidak mungkin '%s'. Menolak persyaratan aturan yang tidak mungkin '%s'. Melepaskan token dari proses anak %p (%s). Menghilangkan proses anak %p PID %s%s dari rantai. Menghapus berkas sementara... Laporkan bugs kepada Mereset kembali ke mode satu job (-j1).Resource hilangSIGPHONESIGWINDKesalahan segmentasiSkipping UTF-8 BOM in makefile '%s' Skipping UTF-8 BOM in makefile buffer Sedang memperbarui berkas '%s'. DihentikkanDihentikan (sinyal)Dihentikan (masukkan tty)Dihentikan (keluaran tty)Sukses membuat kembali target berkas '%s'. Symbolic links tidak didukung: menonaktifkan opsi -L.Target '%s' merupakan kolon-ganda dan tidak memiliki syarat. Target '%s' tidak dibuat lagi karena ada errors.Target berkas '%s' dibutuhkan untuk membuat kembali dengan opsi -q. DimatikanParallel jobs '-j' tidak didukung dalam platform ini.Persyaratan untuk membuat '%s' sedang dibuat. Penangkap trace/breakpointMencoba persyaratan implisit '%s'. Mencoba aturan pola dengan stem '%.*s'. Mencoba persyaratan dari aturan '%s'. Memperbarui tujuan target.... Memperbarui makefiles.... Kondisi I/O pentingPenggunaan: %s [opsi] [target] ... Akses penggunaSinyal definisi pengguna 1Sinyal definisi pengguna 2Menggunakan perintah baku untuk '%s'. Menggunakan perintah baku untuk '%s'. Pewaktu maya habisPeringatan: Berkas '%s' memiliki waktu modifikasi %s s kedepanJendela berubahusaha untuk menggunakan layanan yang tidak didukung: '%s'otomatistetapi '%s' sekarang dipertimbangkan sebagai berkas yang sama dengan '%s'.tidak dapat mengalokasikan %lu bytes untuk tabel hash; kehabisan memorytidak dapat mengubah nama kolon-ganda '%s' menjadi kolon-tunggal '%s'tidak dapat mengubah nama dari kolon-tunggal '%s' ke kolon-ganda '%s'tidak dapat memaksa mencapai batas beban: tidak dapat memaksa mencapai batas beban pada sistem operasi inibaris perintahmembuat pipa pekerjaancreating jobserver semaphore: (Error %ld: %s)baku`string' kosong tidak valid sebagai nama filenama variabel kosonglingkunganlingkungan dibawah opsi -ekelebihan '%s'kelebihan text sesudah '%s' directiveKelebihan text sesudah 'endef' directivekelebihan text sesudah 'endef' directivefind_and_set_shell() jalur pencarian di set pada default_shell = %s find_and_set_shell() diset pada default_shell = %s argumen pertama untuk fungsi 'word' harus lebih besar dari 0fopen (berkas sementara)fwrite (berkas sementara)guile: Evaluating '%s' guile: Expanding '%s' inisiasi pipa server pekerjaJumlah dari argumen (%d) untuk fungsi '%s' tidak mencukupiinternal error: unable to open jobserver semaphore '%s': (Error %ld: %s)sintak salah dalam kondisionallbr$ini_control() gagal dengan status = %dlbr$set_module() gagal untuk mengekstrak info module, status = %dmake reaped child pid %s, tetap menunggu untuk pid %s makefilehilang 'endef', tidak diselesaikan 'define'hilang 'endif'hilang aturan sebelum menjalankan perintahpola target hilangaturan implisit dan aturan normal tercampuraturan pola implisit dan static tercampurpola target banyaktidaktidak ada lagi file handles: tidak dapat menggandakan stderr tidak ada lagi file handles: tidak dapat menggandakan stdin tidak ada lagi file handles: tidak dapat menggandakan stdout argumen pertama untuk fungsi 'word' bukan numerikargumen pertama untuk fungsi 'wordlist' bukan numerikargumen kedua dari fungsi 'wordlist' bukan numerikhanya satu 'else' dalam setiap kondisiopen: %s: %spersyaratan tidak dapat didefinisikan dalam script perintahprocess_easy() gagal untuk menjalankan proses (e=%ld) membaca pipa pekerjaanperintah dijalankan sebelum target pertamarelease jobserver semaphore: (Error %ld: %s)semaphore or child process wait: (Error %ld: %s)spawnvpe: mungkin kehabisan ruang environmentsys$search() gagal dengan kode %d target '%s' tidak cocok dengan pola targettarget '%s' memberikan lebih dari sekali dalam aturan sama.target berkas '%s' keduanya memiliki masukan : dan ::pola target tidak memiliki '%%'opsi '%s%s' membutuhkan sebuah argument string yang tidak kosongopsi '-%c' membutuhkan sebuah argument `string' yang tidak kosongtouch anggota archive tidak tersedia di VMStouch: '%s' bukan archive yang validtouch: Archive '%s' tidak adatouch: Kode kembali tidak baik dari ar_member_touch pada '%s'touch: Anggota '%s' tidak terdapat dalam '%s'Tidak terimplementasi dalam platform ini: fungsi '%s'spesifikasi tingkat debug tidak diketahui '%s'unknown output-sync type '%s'sinyal tidak diketahuiunlink (berkas sementara): fungsi '%s' tidak diselesaikan: hilang '%c'referensi variabel tidak diselesaikanPeringatan: Clock skew terdeteksi. Pembuatan anda mungkin tidak sempurnaperingatan: karakter NUL terlihat; baris selanjutnya dihiraukanperingatan: menghiraukan perintah lama untuk target '%s'Peringatan: server pekerja tidak ada: menggunakan -j1. Tambahkan '+' pada aturan make paling atas.peringatan: memaksa perintah untuk target '%s'peringatan: variabel '%.*s' tidak terdefinisiwindows32_openpipe(): process_init_fd() gagal windows32_openpipe: DuplicateHandle(Err) gagal (e=%ld) windows32_openpipe: DuplicateHandle(In) gagal (e=%ld) menulis jobservermenulis: %s: %smake-4.3/po/uk.po0000644000175000017500000021436013611136531010621 00000000000000# Переклад make українÑькою. # Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. # This file is distributed under the same license as the make package. # # Volodymyr M. Lisivka , 2001-2012. # Yuri Chornoivan , 2012, 2013, 2014, 2016, 2019, 2020. msgid "" msgstr "" "Project-Id-Version: make 4.2.93\n" "Report-Msgid-Bugs-To: bug-make@gnu.org\n" "POT-Creation-Date: 2020-01-19 15:34-0500\n" "PO-Revision-Date: 2020-01-03 12:37+0200\n" "Last-Translator: Yuri Chornoivan \n" "Language-Team: Ukrainian \n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Lokalize 19.11.70\n" #: src/ar.c:46 #, c-format msgid "attempt to use unsupported feature: '%s'" msgstr "Ñпроба вжити можливіÑть, підтримки Ñкої не передбачено: \"%s\"" #: src/ar.c:123 #, c-format msgid "touch archive member is not available on VMS" msgstr "Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ‡Ð°Ñу зміни члена архіву неможливо у ÑиÑтемі VMS" #: src/ar.c:147 #, c-format msgid "touch: Archive '%s' does not exist" msgstr "Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ‡Ð°Ñу зміни: Ðрхів \"%s\" не Ñ–Ñнує" #: src/ar.c:150 #, c-format msgid "touch: '%s' is not a valid archive" msgstr "Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ‡Ð°Ñу зміни: некоректний архів: \"%s\"" #: src/ar.c:157 #, c-format msgid "touch: Member '%s' does not exist in '%s'" msgstr "Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ‡Ð°Ñу зміни: Член \"%s\" не міÑтитьÑÑ Ñƒ \"%s\"" #: src/ar.c:164 #, c-format msgid "touch: Bad return code from ar_member_touch on '%s'" msgstr "" "Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ‡Ð°Ñу зміни: Ð¤ÑƒÐ½ÐºÑ†Ñ–Ñ ar_member_touch повернула\n" "помилковий код відповіді Ð´Ð»Ñ \"%s\"" #: src/arscan.c:130 #, c-format msgid "lbr$set_module() failed to extract module info, status = %d" msgstr "lbr$set_module() не вдалоÑÑ Ð²Ð¸Ð´Ð¾Ð±ÑƒÑ‚Ð¸ дані модулÑ, Ñтан = %d" #: src/arscan.c:236 #, c-format msgid "lbr$ini_control() failed with status = %d" msgstr "Помилка lbr$ini_control() з повідомленнÑм Ñтану = %d" #: src/arscan.c:261 #, c-format msgid "unable to open library '%s' to lookup member status %d" msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ бібліотеку «%s» Ð´Ð»Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ Ñтану елемента %d" #: src/arscan.c:944 #, c-format msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n" msgstr "Елемент «%s»%s: %ld байтів з %ld (%ld).\n" #: src/arscan.c:945 msgid " (name might be truncated)" msgstr " (ім'Ñ Ð¼Ð¾Ð¶Ðµ бути обрізано)" #: src/arscan.c:947 #, c-format msgid " Date %s" msgstr " Дата %s" #: src/arscan.c:948 #, c-format msgid " uid = %d, gid = %d, mode = 0%o.\n" msgstr " uid = %d, gid = %d, режим = 0%o.\n" #: src/commands.c:403 #, c-format msgid "Recipe has too many lines (%ud)" msgstr "У рецепті забагато Ñ€Ñдків (%ud)" #: src/commands.c:504 msgid "*** Break.\n" msgstr "*** Зупинка.\n" #: src/commands.c:628 #, c-format msgid "*** [%s] Archive member '%s' may be bogus; not deleted" msgstr "*** [%s] Елемент архіву, «%s», можливо Ñ” фіктивним; не вилучено" #: src/commands.c:632 #, c-format msgid "*** Archive member '%s' may be bogus; not deleted" msgstr "*** Елемент архіву, «%s», можливо Ñ” фіктивним; не вилучено" #: src/commands.c:646 #, c-format msgid "*** [%s] Deleting file '%s'" msgstr "*** [%s] Вилучаємо файл \"%s\"" #: src/commands.c:648 #, c-format msgid "*** Deleting file '%s'" msgstr "*** Вилучаємо файл \"%s\"" #: src/commands.c:684 msgid "# recipe to execute" msgstr "# ÑпоÑіб, Ñкий Ñлід заÑтоÑувати" #: src/commands.c:687 msgid " (built-in):" msgstr " (вбудоване):" #: src/commands.c:689 #, c-format msgid " (from '%s', line %lu):\n" msgstr " (з \"%s\", Ñ€Ñдок %lu):\n" #: src/dir.c:1073 msgid "" "\n" "# Directories\n" msgstr "" "\n" "# Каталоги\n" #: src/dir.c:1085 #, c-format msgid "# %s: could not be stat'd.\n" msgstr "# %s: неможливо отримати інформацію (stat).\n" #: src/dir.c:1089 msgid "# %s (key %s, mtime %I64u): could not be opened.\n" msgstr "# %s (ключ %s, Ñ‡Ð°Ñ Ð·Ð¼Ñ–Ð½Ð¸ %I64u): не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸.\n" #: src/dir.c:1094 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n" msgstr "# %s (приÑтрій %d, івузол [%d,%d,%d]): неможливо відкрити.\n" #: src/dir.c:1099 #, c-format msgid "# %s (device %ld, inode %ld): could not be opened.\n" msgstr "# %s (приÑтрій %ld, івузол %ld): не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸.\n" #: src/dir.c:1126 msgid "# %s (key %s, mtime %I64u): " msgstr "# %s (ключ %s, Ñ‡Ð°Ñ Ð¼Ð¾Ð´Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ— %I64u): " #: src/dir.c:1131 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): " msgstr "# %s (приÑтрій %d, івузол [%d,%d,%d]): " #: src/dir.c:1136 #, c-format msgid "# %s (device %ld, inode %ld): " msgstr "# %s (приÑтрій %ld, івузол %ld): " #: src/dir.c:1142 src/dir.c:1163 msgid "No" msgstr "ÐÑ–" #: src/dir.c:1145 src/dir.c:1166 msgid " files, " msgstr " файлів, " #: src/dir.c:1147 src/dir.c:1168 msgid "no" msgstr "ні" #: src/dir.c:1150 msgid " impossibilities" msgstr " недоÑÑжних цілей" #: src/dir.c:1154 msgid " so far." msgstr " на поточний момент." #: src/dir.c:1171 #, c-format msgid " impossibilities in %lu directories.\n" msgstr " недоÑÑжних цілей у %lu каталогах.\n" #: src/expand.c:125 #, c-format msgid "Recursive variable '%s' references itself (eventually)" msgstr "РекурÑивна змінна \"%s\" поÑилаєтьÑÑ Ñама на Ñебе (у результаті)" #: src/expand.c:271 #, c-format msgid "unterminated variable reference" msgstr "незавершена поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° змінну" #: src/file.c:278 #, c-format msgid "Recipe was specified for file '%s' at %s:%lu," msgstr "СпоÑіб Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð° «%s» було задано %s:%lu," #: src/file.c:283 #, c-format msgid "Recipe for file '%s' was found by implicit rule search," msgstr "" "СпоÑіб Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð° «%s» було знайдено за допомогою пошуку неÑвних правил," #: src/file.c:287 #, c-format msgid "but '%s' is now considered the same file as '%s'." msgstr "але \"%s\" Ñ– \"%s\" тепер вважаютьÑÑ Ð¾Ð´Ð½Ð¸Ð¼ Ñ– тим же ж файлом. " #: src/file.c:290 #, c-format msgid "Recipe for '%s' will be ignored in favor of the one for '%s'." msgstr "СпоÑіб Ð´Ð»Ñ Â«%s» буде проігноровано на кориÑть ÑпоÑобу Ð´Ð»Ñ Â«%s»." #: src/file.c:310 #, c-format msgid "can't rename single-colon '%s' to double-colon '%s'" msgstr "" "неможливо перейменувати \"%s\" з однією двокрапкою у \"%s\" з двома " "двокрапками" #: src/file.c:316 #, c-format msgid "can't rename double-colon '%s' to single-colon '%s'" msgstr "" "неможливо перейменувати \"%s\" з двома двокрапками у \"%s\" з однією " "двокрапкою" #: src/file.c:408 #, c-format msgid "*** Deleting intermediate file '%s'" msgstr "*** Вилучаємо проміжний файл «%s»" #: src/file.c:412 #, c-format msgid "Removing intermediate files...\n" msgstr "Вилучаємо проміжні файли...\n" #: src/file.c:872 msgid "Current time" msgstr "Поточний чаÑ" #: src/file.c:876 #, c-format msgid "%s: Timestamp out of range; substituting %s" msgstr "%s: чаÑова позначка поза допуÑтимим діапазоном; замінюємо на %s" #: src/file.c:1016 msgid "# Not a target:" msgstr "# Ðе Ñ” метою:" #: src/file.c:1021 msgid "# Precious file (prerequisite of .PRECIOUS)." msgstr "# ВартіÑний файл (залежніÑть .PRECIOUS)." #: src/file.c:1023 msgid "# Phony target (prerequisite of .PHONY)." msgstr "# ПÑевдоціль (залежніÑть .PHONY)." #: src/file.c:1025 msgid "# Command line target." msgstr "# Мета, що викликаєтьÑÑ Ð· командного Ñ€Ñдка." #: src/file.c:1027 msgid "# A default, MAKEFILES, or -include/sinclude makefile." msgstr "# Типово, MAKEFILES, або -include/sinclude makefile." #: src/file.c:1029 msgid "# Builtin rule" msgstr "# Вбудоване правило" #: src/file.c:1031 msgid "# Implicit rule search has been done." msgstr "# Пошук неÑвних правил виконано." #: src/file.c:1032 msgid "# Implicit rule search has not been done." msgstr "# Пошук неÑвних правил не було виконано." #: src/file.c:1034 #, c-format msgid "# Implicit/static pattern stem: '%s'\n" msgstr "# ОÑнова неÑвного або Ñтатичного шаблону: \"%s\"\n" #: src/file.c:1036 msgid "# File is an intermediate prerequisite." msgstr "# Файл Ñ” проміжною залежніÑтю." #: src/file.c:1040 msgid "# Also makes:" msgstr "# Збирає також:" #: src/file.c:1046 msgid "# Modification time never checked." msgstr "# Ð§Ð°Ñ Ð·Ð¼Ñ–Ð½Ð¸ ніколи не перевірÑвÑÑ." #: src/file.c:1048 msgid "# File does not exist." msgstr "# Файл не Ñ–Ñнує." #: src/file.c:1050 msgid "# File is very old." msgstr "# Файл дуже Ñтарий." #: src/file.c:1055 #, c-format msgid "# Last modified %s\n" msgstr "# ВоÑтаннє оновлено %s\n" #: src/file.c:1058 msgid "# File has been updated." msgstr "# Файл був оновлений." #: src/file.c:1058 msgid "# File has not been updated." msgstr "# Файл не було оновлено." #: src/file.c:1062 msgid "# Recipe currently running (THIS IS A BUG)." msgstr "# ВиконуєтьÑÑ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ° (ЦЕ ПОМИЛКÐ)" #: src/file.c:1065 msgid "# Dependencies recipe running (THIS IS A BUG)." msgstr "# Ці залежноÑті вже оброблÑютьÑÑ (ЦЕ ПОМИЛКÐ)." #: src/file.c:1074 msgid "# Successfully updated." msgstr "# УÑпішно оновлено." #: src/file.c:1078 msgid "# Needs to be updated (-q is set)." msgstr "# Повинно бути оновлено (вÑтановлений ключ -q)." #: src/file.c:1081 msgid "# Failed to be updated." msgstr "# Спроба Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð±ÐµÐ·ÑƒÑпішна." #: src/file.c:1086 msgid "# Invalid value in 'command_state' member!" msgstr "# Ðекоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ‡Ð»ÐµÐ½Ð° \"command_state\"!" #: src/file.c:1105 msgid "" "\n" "# Files" msgstr "" "\n" "# Файли" #: src/file.c:1109 msgid "" "\n" "# files hash-table stats:\n" "# " msgstr "" "\n" "# ÑтатиÑтика щодо таблиці хешів файлів:\n" "# " #: src/file.c:1119 #, c-format msgid "%s: Field '%s' not cached: %s" msgstr "%s: поле «%s» не кешовано: %s" #: src/function.c:794 msgid "non-numeric first argument to 'word' function" msgstr "не чиÑловий перший аргумент Ð´Ð»Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— \"word\"" #: src/function.c:799 #, c-format msgid "first argument to 'word' function must be greater than 0" msgstr "першим аргументом функції «word» має бути чиÑло, більше за 0" #: src/function.c:819 msgid "non-numeric first argument to 'wordlist' function" msgstr "не чиÑловий перший аргумент Ð´Ð»Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— \"wordlist\"" #: src/function.c:821 msgid "non-numeric second argument to 'wordlist' function" msgstr "не чиÑловий другий аргумент Ð´Ð»Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— \"wordlist\"" #: src/function.c:1533 #, c-format msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n" msgstr "windows32_openpipe: помилка DuplicateHandle(In) (e=%ld)\n" #: src/function.c:1557 #, c-format msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n" msgstr "windows32_openpipe: помилка DuplicateHandle(Err) (e=%ld)\n" #: src/function.c:1564 #, c-format msgid "CreatePipe() failed (e=%ld)\n" msgstr "Помилка CreatePipe() (e=%ld)\n" #: src/function.c:1572 #, c-format msgid "windows32_openpipe(): process_init_fd() failed\n" msgstr "windows32_openpipe(): помилка process_init_fd()\n" #: src/function.c:1857 #, c-format msgid "Cleaning up temporary batch file %s\n" msgstr "Спорожнюємо тимчаÑовий пакетний файл %s\n" #: src/function.c:2230 src/function.c:2255 #, c-format msgid "file: missing filename" msgstr "file: не вказано назви файла" #: src/function.c:2234 src/function.c:2265 #, c-format msgid "open: %s: %s" msgstr "open: %s: %s" #: src/function.c:2242 #, c-format msgid "write: %s: %s" msgstr "write: %s: %s" #: src/function.c:2245 src/function.c:2282 #, c-format msgid "close: %s: %s" msgstr "close: %s: %s" #: src/function.c:2258 #, c-format msgid "file: too many arguments" msgstr "file: надто багато аргументів" #: src/function.c:2277 #, c-format msgid "read: %s: %s" msgstr "read: %s: %s" #: src/function.c:2290 #, c-format msgid "file: invalid file operation: %s" msgstr "file: некоректна Ð´Ñ–Ñ Ð½Ð°Ð´ файлом: %s" #: src/function.c:2405 #, c-format msgid "insufficient number of arguments (%d) to function '%s'" msgstr "недоÑÑ‚Ð°Ñ‚Ð½Ñ ÐºÑ–Ð»ÑŒÐºÑ–Ñть аргументів (%d) функції «%s»" #: src/function.c:2417 #, c-format msgid "unimplemented on this platform: function '%s'" msgstr "не реалізовано на цій платформі: Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ Â«%s»" #: src/function.c:2483 #, c-format msgid "unterminated call to function '%s': missing '%c'" msgstr "незавершений виклик функції \"%s\"; пропущено \"%c\"" #: src/function.c:2667 #, c-format msgid "Empty function name" msgstr "ÐŸÐ¾Ñ€Ð¾Ð¶Ð½Ñ Ð½Ð°Ð·Ð²Ð° функції" #: src/function.c:2669 #, c-format msgid "Invalid function name: %s" msgstr "Ðекоректна назва функції: %s" #: src/function.c:2671 #, c-format msgid "Function name too long: %s" msgstr "Ðазва функції Ñ” задовгою: %s" #: src/function.c:2674 #, c-format msgid "Invalid minimum argument count (%u) for function %s" msgstr "Ðекоректна мінімальна кількіÑть аргументів (%u) функції %s" #: src/function.c:2677 #, c-format msgid "Invalid maximum argument count (%u) for function %s" msgstr "Ðекоректна макÑимальна кількіÑть аргументів (%u) функції %s" #: src/getopt.c:659 #, c-format msgid "%s: option '%s' is ambiguous\n" msgstr "%s: параметр «%s» не Ñ” однозначним\n" #: src/getopt.c:683 #, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s: Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ñ–Ð² до параметра «--%s» не передбачено\n" #: src/getopt.c:688 #, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s: Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ñ–Ð² до параметра «%c%s» не передбачено\n" #: src/getopt.c:705 src/getopt.c:878 #, c-format msgid "%s: option '%s' requires an argument\n" msgstr "%s: до параметра «%s» Ñлід додати аргумент\n" #: src/getopt.c:734 #, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s: невідомий параметр «--%s»\n" #: src/getopt.c:738 #, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s: невідомий параметр «%c%s»\n" #: src/getopt.c:764 #, c-format msgid "%s: illegal option -- %c\n" msgstr "%s: невірний параметр -- %c\n" #: src/getopt.c:767 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s: невірний параметр -- %c\n" #: src/getopt.c:797 src/getopt.c:927 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: параметру необхідний аргумент -- %c\n" #: src/getopt.c:844 #, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s: параметр «-W %s» не Ñ” однозначним\n" #: src/getopt.c:862 #, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s: Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ñ–Ð² до параметра «-W %s» не передбачено\n" #: src/guile.c:58 #, c-format msgid "guile: Expanding '%s'\n" msgstr "guile: розгортаємо «%s»\n" #: src/guile.c:74 #, c-format msgid "guile: Evaluating '%s'\n" msgstr "guile: обчиÑлюємо «%s»\n" #: src/hash.c:50 #, c-format msgid "can't allocate %lu bytes for hash table: memory exhausted" msgstr "не вдалоÑÑ Ñ€Ð¾Ð·Ð¼Ñ–Ñтити %lu байтів Ð´Ð»Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– хешів: вичерпано пам’Ñть" #: src/hash.c:280 #, c-format msgid "Load=%lu/%lu=%.0f%%, " msgstr "ЗавантаженнÑ=%lu/%lu=%.0f%%, " #: src/hash.c:282 #, c-format msgid "Rehash=%u, " msgstr "Повторне хешуваннÑ=%u, " #: src/hash.c:283 #, c-format msgid "Collisions=%lu/%lu=%.0f%%" msgstr "Збіги=%lu/%lu=%.0f%%" #: src/implicit.c:38 #, c-format msgid "Looking for an implicit rule for '%s'.\n" msgstr "Пошук неÑвного правила Ð´Ð»Ñ \"%s\".\n" #: src/implicit.c:54 #, c-format msgid "Looking for archive-member implicit rule for '%s'.\n" msgstr "Пошук неÑвного правила Ð´Ð»Ñ Ñ‡Ð»ÐµÐ½Ð° архіву \"%s\".\n" #: src/implicit.c:311 #, c-format msgid "Avoiding implicit rule recursion.\n" msgstr "Ð—Ð°Ð¿Ð¾Ð±Ñ–Ð³Ð°Ð½Ð½Ñ Ñ€ÐµÐºÑƒÑ€Ñивного виклику неÑвного правила.\n" #: src/implicit.c:484 #, c-format msgid "Stem too long: '%s%.*s'.\n" msgstr "Занадто довгий шаблон: «%s%.*s».\n" #: src/implicit.c:490 #, c-format msgid "Trying pattern rule with stem '%.*s'.\n" msgstr "Спроба заÑтоÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð°Ð²Ð¸Ð»Ð° зі зразком, оÑнова \"%.*s\".\n" #: src/implicit.c:717 #, c-format msgid "Rejecting impossible rule prerequisite '%s'.\n" msgstr "Ð’Ñ–Ð´ÐºÐ¸Ð´Ð°Ð½Ð½Ñ Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾Ñ— залежноÑті правила «%s».\n" #: src/implicit.c:718 #, c-format msgid "Rejecting impossible implicit prerequisite '%s'.\n" msgstr "Ð’Ñ–Ð´ÐºÐ¸Ð´Ð°Ð½Ð½Ñ Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾Ñ— неÑвної залежноÑті «%s».\n" #: src/implicit.c:732 #, c-format msgid "Trying rule prerequisite '%s'.\n" msgstr "Пробую залежніÑть правило \"%s\".\n" #: src/implicit.c:733 #, c-format msgid "Trying implicit prerequisite '%s'.\n" msgstr "Пробую неÑвні залежноÑті \"%s\".\n" #: src/implicit.c:772 #, c-format msgid "Found prerequisite '%s' as VPATH '%s'\n" msgstr "ВиÑвлено залежніÑть «%s» у форматі VPATH «%s»\n" #: src/implicit.c:786 #, c-format msgid "Looking for a rule with intermediate file '%s'.\n" msgstr "Пошук правила з проміжним файлом \"%s\".\n" #: src/job.c:370 msgid "Cannot create a temporary file\n" msgstr "Ðе вдалоÑÑ Ñтворити тимчаÑовий файл\n" #: src/job.c:548 msgid " (core dumped)" msgstr " (зроблений дамп пам'Ñті)" #: src/job.c:553 msgid " (ignored)" msgstr " (ігноруєтьÑÑ)" #: src/job.c:557 src/job.c:1892 msgid "" msgstr "<вбудований>" #: src/job.c:573 #, c-format msgid "%s[%s: %s] Error %d%s" msgstr "%s[%s: %s] Помилка %d%s" #: src/job.c:662 #, c-format msgid "*** Waiting for unfinished jobs...." msgstr "*** ÐžÑ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð·Ð°Ð²Ð´Ð°Ð½ÑŒ..." #: src/job.c:704 #, c-format msgid "Live child %p (%s) PID %s %s\n" msgstr "Ðезавершений дочірній Ð¿Ñ€Ð¾Ñ†ÐµÑ %p (%s) PID %s %s\n" #: src/job.c:706 src/job.c:900 src/job.c:1072 src/job.c:1644 #, c-format msgid " (remote)" msgstr " (віддалений)" #: src/job.c:898 #, c-format msgid "Reaping winning child %p PID %s %s\n" msgstr "Підбираємо вдалий дочірній Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð· PID %p %s %s\n" #: src/job.c:899 #, c-format msgid "Reaping losing child %p PID %s %s\n" msgstr "Підбираємо невдалий дочірній Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð· PID %p %s %s\n" #: src/job.c:950 #, c-format msgid "Cleaning up temp batch file %s\n" msgstr "Ð—Ð½Ð¸Ñ‰ÐµÐ½Ð½Ñ Ñ‚Ð¸Ð¼Ñ‡Ð°Ñового командного файла %s\n" #: src/job.c:956 #, c-format msgid "Cleaning up temp batch file %s failed (%d)\n" msgstr "" "Спроба Ð²Ð¸Ñ‚Ð¸ÐºÐ°Ð½Ð½Ñ Ñ‚Ð¸Ð¼Ñ‡Ð°Ñового файла пакетної обробки %s зазнала невдачі (%d)\n" #: src/job.c:1071 #, c-format msgid "Removing child %p PID %s%s from chain.\n" msgstr "Вилучаємо PID дочірнього процеÑу %p %s%s з ланцюжка.\n" #: src/job.c:1120 #, c-format msgid "Released token for child %p (%s).\n" msgstr "Звільнено Ñимвол Ð´Ð»Ñ Ð´Ð¾Ñ‡Ñ–Ñ€Ð½ÑŒÐ¾Ð³Ð¾ процеÑу %p (%s).\n" #: src/job.c:1575 src/job.c:2487 #, c-format msgid "process_easy() failed to launch process (e=%ld)\n" msgstr "process_easy() не вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити Ð¿Ñ€Ð¾Ñ†ÐµÑ (e=%ld)\n" #: src/job.c:1579 src/job.c:2491 #, c-format msgid "" "\n" "Counted %d args in failed launch\n" msgstr "" "\n" "Під Ñ‡Ð°Ñ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾Ð³Ð¾ запуÑку кількіÑть аргументів дорівнювала %d\n" #: src/job.c:1642 #, c-format msgid "Putting child %p (%s) PID %s%s on the chain.\n" msgstr "Додаємо дочірній Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð· PID %p (%s) %s%s до ланцюжка.\n" #: src/job.c:1875 #, c-format msgid "Obtained token for child %p (%s).\n" msgstr "Отримано Ñимвол Ð´Ð»Ñ Ð´Ð¾Ñ‡Ñ–Ñ€Ð½ÑŒÐ¾Ð³Ð¾ процеÑу %p (%s).\n" #: src/job.c:1902 #, c-format msgid "%s: target '%s' does not exist" msgstr "%s: мети «%s» не Ñ–Ñнує" #: src/job.c:1905 #, c-format msgid "%s: update target '%s' due to: %s" msgstr "%s: Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¼ÐµÑ‚Ð¸ «%s» з такої причини: %s" #: src/job.c:2108 #, c-format msgid "cannot enforce load limits on this operating system" msgstr "" "Ñ†Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ð¹Ð½Ð° ÑиÑтема не дозволÑÑ” вÑтановлювати Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð½Ð° завантаженнÑ" #: src/job.c:2110 msgid "cannot enforce load limit: " msgstr "неможливо вÑтановити Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð½Ð° завантаженнÑ: " #: src/job.c:2200 #, c-format msgid "no more file handles: could not duplicate stdin\n" msgstr "не виÑтачає файлових деÑкрипторів: не вдалоÑÑ Ð·Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ñ‚Ð¸ stdin\n" #: src/job.c:2212 #, c-format msgid "no more file handles: could not duplicate stdout\n" msgstr "не виÑтачає файлових деÑкрипторів: не вдалоÑÑ Ð·Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ñ‚Ð¸ stdout\n" #: src/job.c:2226 #, c-format msgid "no more file handles: could not duplicate stderr\n" msgstr "не виÑтачає файлових деÑкрипторів: не вдалоÑÑ Ð·Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ñ‚Ð¸ stderr\n" #: src/job.c:2241 #, c-format msgid "Could not restore stdin\n" msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ stdin\n" #: src/job.c:2249 #, c-format msgid "Could not restore stdout\n" msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ stdout\n" #: src/job.c:2257 #, c-format msgid "Could not restore stderr\n" msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ stderr\n" #: src/job.c:2520 #, c-format msgid "make reaped child pid %s, still waiting for pid %s\n" msgstr "" "make підібрано дочірній Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð· pid %s, Ñкий вÑе ще чекає на Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ " "процеÑу з pid %s\n" #: src/job.c:2623 #, c-format msgid "spawnvpe: environment space might be exhausted" msgstr "spawnvpe: ймовірно, завершилоÑÑ Ð¼Ñ–Ñце у Ñередовищі" #: src/job.c:2862 #, c-format msgid "$SHELL changed (was '%s', now '%s')\n" msgstr "$SHELL змінено (було «%s», тепер «%s»)\n" #: src/job.c:3300 src/job.c:3485 #, c-format msgid "Creating temporary batch file %s\n" msgstr "Створюємо тимчаÑовий пакетний файл %s\n" #: src/job.c:3308 #, c-format msgid "" "Batch file contents:\n" "\t@echo off\n" msgstr "" "ВміÑÑ‚ файла пакетної обробки:\n" "\t@echo off\n" #: src/job.c:3497 #, c-format msgid "" "Batch file contents:%s\n" "\t%s\n" msgstr "" "ВміÑÑ‚ пакетного файла:%s\n" "\t%s\n" #: src/job.c:3605 #, c-format msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n" msgstr "" "%s (Ñ€Ñдок %d) Поганий контекÑÑ‚ оболонки (!unixy && !batch_mode_shell)\n" #: src/load.c:60 #, c-format msgid "Failed to open global symbol table: %s" msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ таблицю загальних Ñимволів: %s" #: src/load.c:97 #, c-format msgid "Loaded object %s is not declared to be GPL compatible" msgstr "Завантажений об’єкт %s не оголошено Ñк ÑуміÑний з GPL" #: src/load.c:104 #, c-format msgid "Failed to load symbol %s from %s: %s" msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ Ñимвол %s з %s: %s" #: src/load.c:149 #, c-format msgid "Empty symbol name for load: %s" msgstr "ÐŸÐ¾Ñ€Ð¾Ð¶Ð½Ñ Ð½Ð°Ð·Ð²Ð° Ñимволу Ð´Ð»Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ: %s" #: src/load.c:204 #, c-format msgid "Loading symbol %s from %s\n" msgstr "Завантажуємо Ñимвол %s з %s\n" #: src/load.c:256 #, c-format msgid "The 'load' operation is not supported on this platform." msgstr "Ðа цій платформі Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð´Ñ–Ñ— «load» не передбачено." #: src/main.c:335 msgid "Options:\n" msgstr "Ключі:\n" #: src/main.c:336 msgid " -b, -m Ignored for compatibility.\n" msgstr " -b, -m ІгноруєтьÑÑ, Ð´Ð»Ñ ÑуміÑноÑті.\n" #: src/main.c:338 msgid " -B, --always-make Unconditionally make all targets.\n" msgstr " -B, --always-make безумовно оброблÑти вÑÑ– запиÑи мети.\n" #: src/main.c:340 msgid "" " -C DIRECTORY, --directory=DIRECTORY\n" " Change to DIRECTORY before doing anything.\n" msgstr "" " -C КÐТÐЛОГ, --directory=КÐТÐЛОГ\n" " Перейти до каталогу до Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð±ÑƒÐ´ÑŒ-Ñких " "дій.\n" #: src/main.c:343 msgid " -d Print lots of debugging information.\n" msgstr " -d ВивеÑти діагноÑтичні повідомленнÑ.\n" #: src/main.c:345 msgid "" " --debug[=FLAGS] Print various types of debugging information.\n" msgstr "" " --debug[=ПРÐПОРЦІ] ВивеÑти діагноÑтичні Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð²ÐºÐ°Ð·Ð°Ð½Ð¸Ñ… " "типів.\n" #: src/main.c:347 msgid "" " -e, --environment-overrides\n" " Environment variables override makefiles.\n" msgstr "" " -e, --environment-overrides\n" " Змінні Ñередовища мають вищий пріоритет за " "змінні makefile.\n" #: src/main.c:350 msgid "" " -E STRING, --eval=STRING Evaluate STRING as a makefile statement.\n" msgstr " -E РЯДОК, --eval=РЯДОК Обробити РЯДОК Ñк інÑтрукцію makefile.\n" #: src/main.c:352 msgid "" " -f FILE, --file=FILE, --makefile=FILE\n" " Read FILE as a makefile.\n" msgstr "" " -f ФÐЙЛ, --file=ФÐЙЛ, --makefile=ФÐЙЛ\n" " ВикориÑтати ФÐЙЛ Ñк makefile.\n" #: src/main.c:355 msgid " -h, --help Print this message and exit.\n" msgstr " -h, --help ВивеÑти це Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ– вийти.\n" #: src/main.c:357 msgid " -i, --ignore-errors Ignore errors from recipes.\n" msgstr "" " -i, --ignore-errors Ігнорувати помилки від ÑпоÑобів збираннÑ.\n" #: src/main.c:359 msgid "" " -I DIRECTORY, --include-dir=DIRECTORY\n" " Search DIRECTORY for included makefiles.\n" msgstr "" " -I КÐТÐЛОГ, --include-dir=КÐТÐЛОГ\n" " Виконати пошук включених makefile у каталозі.\n" #: src/main.c:362 msgid "" " -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no " "arg.\n" msgstr "" " -j [N], --jobs[=N] Виконувати одночаÑно N завдань; Ñкщо не " "вказано — необмежену кількіÑть.\n" #: src/main.c:364 msgid "" " -k, --keep-going Keep going when some targets can't be made.\n" msgstr "" " -k, --keep-going Продовжувати роботу, Ñкщо Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ ÑкоїÑÑŒ мети " "неможливе.\n" #: src/main.c:366 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" " Ðе запуÑкати декількох завдань, Ñкщо " "Ð½Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÐ²Ð¸Ñ‰ÑƒÑ” N.\n" #: src/main.c:369 msgid "" " -L, --check-symlink-times Use the latest mtime between symlinks and " "target.\n" msgstr "" " -L, --check-symlink-times ВикориÑтовувати новіший Ñ‡Ð°Ñ Ð·Ð¼Ñ–Ð½Ð¸ з чаÑів " "зміни поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ñ– мети.\n" #: src/main.c:371 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" #: src/main.c:374 msgid "" " -o FILE, --old-file=FILE, --assume-old=FILE\n" " Consider FILE to be very old and don't remake " "it.\n" msgstr "" " -o ФÐЙЛ, --old-file=ФÐЙЛ, --assume-old=ФÐЙЛ\n" " Вважати ФÐЙЛ дуже Ñтарим Ñ– не виконувати його " "повторного збираннÑ.\n" #: src/main.c:377 msgid "" " -O[TYPE], --output-sync[=TYPE]\n" " Synchronize output of parallel jobs by TYPE.\n" msgstr "" " -O[ТИП], --output-sync[=ТИП]\n" " Ñинхронізувати виведені дані паралельних " "завдань за ТИПом.\n" #: src/main.c:380 msgid " -p, --print-data-base Print make's internal database.\n" msgstr " -p, --print-data-base ВивеÑти внутрішню базу даних make.\n" #: src/main.c:382 msgid "" " -q, --question Run no recipe; exit status says if up to " "date.\n" msgstr "" " -q, --question не заÑтоÑовувати жодних " "ÑпоÑобів; код Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð¿Ð¾ÐºÐ°Ð·ÑƒÑ”, чи вÑе вже " "зроблено.\n" #: src/main.c:384 msgid " -r, --no-builtin-rules Disable the built-in implicit rules.\n" msgstr " -r, --no-builtin-rules Вимкнути вбудовані неÑвні правила.\n" #: src/main.c:386 msgid " -R, --no-builtin-variables Disable the built-in variable settings.\n" msgstr " -R, --no-builtin-variables Вимкнути вбудовані параметри змінних.\n" #: src/main.c:388 msgid " -s, --silent, --quiet Don't echo recipes.\n" msgstr " -s, --silent, --quiet Ðе виводити ÑпоÑоби збираннÑ.\n" #: src/main.c:390 msgid " --no-silent Echo recipes (disable --silent mode).\n" msgstr "" " --no-silent Виводити ÑпоÑоби Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ (вимкнути режим --" "silent).\n" #: src/main.c:392 msgid "" " -S, --no-keep-going, --stop\n" " Turns off -k.\n" msgstr "" " -S, --no-keep-going, --stop\n" " Вимкнути -k.\n" #: src/main.c:395 msgid " -t, --touch Touch targets instead of remaking them.\n" msgstr "" " -t, --touch Змінювати Ñ‡Ð°Ñ Ð´Ð¾Ñтупу до мети заміÑть Ñ—Ñ— " "повторного збираннÑ.\n" #: src/main.c:397 msgid " --trace Print tracing information.\n" msgstr " --trace ВивеÑти дані щодо траÑуваннÑ.\n" #: src/main.c:399 msgid "" " -v, --version Print the version number of make and exit.\n" msgstr " -v, --version ВивеÑти дані щодо верÑÑ–Ñ— make Ñ– вийти.\n" #: src/main.c:401 msgid " -w, --print-directory Print the current directory.\n" msgstr " -w, --print-directory Виводити дані щодо поточного каталогу.\n" #: src/main.c:403 msgid "" " --no-print-directory Turn off -w, even if it was turned on " "implicitly.\n" msgstr "" " --no-print-directory Вимкнути -w, навіть Ñкщо Ð²Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ Ð±ÑƒÐ»Ð¾ " "виконано неÑвним чином.\n" #: src/main.c:405 msgid "" " -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n" " Consider FILE to be infinitely new.\n" msgstr "" " -W ФÐЙЛ, --what-if=ФÐЙЛ, --new-file=ФÐЙЛ, --assume-new=ФÐЙЛ\n" " Вважати ФÐЙЛ завжди новим.\n" #: src/main.c:408 msgid "" " --warn-undefined-variables Warn when an undefined variable is " "referenced.\n" msgstr "" " --warn-undefined-variables Попереджати про поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° невизначену " "змінну.\n" #: src/main.c:671 #, c-format msgid "empty string invalid as file name" msgstr "порожній Ñ€Ñдок не може бути назвою файла" #: src/main.c:754 #, c-format msgid "unknown debug level specification '%s'" msgstr "невідома ÑÐ¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ Ñ€Ñ–Ð²Ð½Ñ Ð´Ñ–Ð°Ð³Ð½Ð¾Ñтики, «%s»" #: src/main.c:794 #, c-format msgid "unknown output-sync type '%s'" msgstr "невідомий тип Ñинхронізації виведених даних, «%s»" #: src/main.c:849 #, c-format msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n" msgstr "%s: ÑталоÑÑ Ð¿ÐµÑ€ÐµÑ€Ð¸Ð²Ð°Ð½Ð½Ñ Ð°Ð±Ð¾ Ð²Ð¸ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ (код = 0x%lx, адреÑа = 0x%p)\n" #: src/main.c:856 #, c-format msgid "" "\n" "Unhandled exception filter called from program %s\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" msgstr "" "\n" "З програми %s викликано фільтр непридатних до обробки виключень\n" "Код Ð²Ð¸ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ = %lx\n" "Прапорці Ð²Ð¸ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ = %lx\n" "ÐдреÑа Ð²Ð¸ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ = 0x%p\n" #: src/main.c:864 #, c-format msgid "Access violation: write operation at address 0x%p\n" msgstr "ÐŸÐ¾Ñ€ÑƒÑˆÐµÐ½Ð½Ñ Ð¿Ñ€Ð°Ð²Ð¸Ð» доÑтупу: Ð´Ñ–Ñ Ð· запиÑу за адреÑою 0x%p\n" #: src/main.c:865 #, c-format msgid "Access violation: read operation at address 0x%p\n" msgstr "ÐŸÐ¾Ñ€ÑƒÑˆÐµÐ½Ð½Ñ Ð¿Ñ€Ð°Ð²Ð¸Ð» доÑтупу: Ð´Ñ–Ñ Ð· Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð·Ð° адреÑою 0x%p\n" #: src/main.c:941 src/main.c:956 #, c-format msgid "find_and_set_shell() setting default_shell = %s\n" msgstr "find_and_set_shell() вÑтановлює default_shell = %s\n" #: src/main.c:1009 #, c-format msgid "find_and_set_shell() path search set default_shell = %s\n" msgstr "" "Пошуком шлÑхів find_and_set_shell() вÑтановлено Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ default_shell = %s\n" #: src/main.c:1609 #, c-format msgid "" "warning: jobserver unavailable: using -j1. Add '+' to parent make rule." msgstr "" "попередженнÑ: Ñервер завдань недоÑтупний: викориÑтовуємо -j1. Додайте «+» до " "батьківÑького правила збираннÑ." #: src/main.c:1617 #, c-format msgid "warning: -j%d forced in submake: resetting jobserver mode." msgstr "попередженнÑ: у submake вказано -j%d: вимикаємо режим Ñервера завдань." #: src/main.c:1781 #, c-format msgid "Makefile from standard input specified twice." msgstr "Makefile зі Ñтандартного джерела вхідних даних вказано двічі." #: src/main.c:1819 src/vmsjobs.c:1248 msgid "fopen (temporary file)" msgstr "fopen (тимчаÑовий файл)" #: src/main.c:1825 msgid "fwrite (temporary file)" msgstr "fwrite (тимчаÑовий файл)" #: src/main.c:2004 #, c-format msgid "warning: -j%d forced in makefile: resetting jobserver mode." msgstr "" "попередженнÑ: у makefile вказано -j%d: вимикаємо режим Ñервера завдань." #: src/main.c:2068 #, c-format msgid "Parallel jobs (-j) are not supported on this platform." msgstr "Ðа цій платформі паралельної обробки завдань (-j) не передбачено." #: src/main.c:2069 #, c-format msgid "Resetting to single job (-j1) mode." msgstr "ПовертаємоÑÑ Ð´Ð¾ режиму єдиного Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ (-j1)." #: src/main.c:2109 #, c-format msgid "Symbolic links not supported: disabling -L." msgstr "Підтримки Ñимволічних поÑилань не передбачено: вимикаємо -L." #: src/main.c:2190 #, c-format msgid "Updating makefiles....\n" msgstr "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ make-файлів...\n" #: src/main.c:2226 #, c-format msgid "Makefile '%s' might loop; not remaking it.\n" msgstr "Make-файл \"%s\", можливо, зациклений, він не перезбиратиметьÑÑ.\n" #: src/main.c:2303 #, c-format msgid "Failed to remake makefile '%s'." msgstr "Спроба перезібрати make-файл \"%s\" безуÑпішна." #: src/main.c:2323 #, c-format msgid "Included makefile '%s' was not found." msgstr "Make-файл \"%s\", Ñкий включаєтьÑÑ, не було знайдено." #: src/main.c:2328 #, c-format msgid "Makefile '%s' was not found" msgstr "Make-файл \"%s\" не було знайдено" #: src/main.c:2394 #, c-format msgid "Couldn't change back to original directory." msgstr "Ðеможливо перейти у первіÑний каталог." #: src/main.c:2402 #, c-format msgid "Re-executing[%u]:" msgstr "Повторне виконаннÑ[%u]:" #: src/main.c:2522 msgid "unlink (temporary file): " msgstr "unlink (тимчаÑовий файл): " #: src/main.c:2555 #, c-format msgid ".DEFAULT_GOAL contains more than one target" msgstr ".DEFAULT_GOAL міÑтить декілька запиÑів мети" #: src/main.c:2579 #, c-format msgid "No targets" msgstr "Ðема цілей" #: src/main.c:2581 #, c-format msgid "No targets specified and no makefile found" msgstr "Ðе задані цілі Ñ– не знайдений make-файл" #: src/main.c:2586 #, c-format msgid "Updating goal targets....\n" msgstr "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ†Ñ–Ð»ÐµÐ¹ мети...\n" #: src/main.c:2610 #, c-format msgid "warning: Clock skew detected. Your build may be incomplete." msgstr "" "попередженнÑ: виÑвлено Ð²Ñ–Ð´Ñ…Ð¸Ð»ÐµÐ½Ð½Ñ Ð¿Ð¾ÐºÐ°Ð·Ñ–Ð² годинника. Ð—Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð¼Ð¾Ð¶Ðµ бути " "неповним." #: src/main.c:2804 #, c-format msgid "Usage: %s [options] [target] ...\n" msgstr "ВикориÑтаннÑ: %s [КЛЮЧІ]... [ЦІЛЬ]...\n" #: src/main.c:2810 #, c-format msgid "" "\n" "This program built for %s\n" msgstr "" "\n" "Цю програму зібрано Ð´Ð»Ñ %s\n" #: src/main.c:2812 #, c-format msgid "" "\n" "This program built for %s (%s)\n" msgstr "" "\n" "Цю програму зібрано Ð´Ð»Ñ %s (%s)\n" #: src/main.c:2815 #, c-format msgid "Report bugs to \n" msgstr "Повідомлюйте про помилки до \n" #: src/main.c:2901 #, c-format msgid "the '%s%s' option requires a non-empty string argument" msgstr "разом з «%s%s» мало бути вказано непорожній Ñ€Ñдковий аргумент" #: src/main.c:2965 #, c-format msgid "the '-%c' option requires a positive integer argument" msgstr "ключ \"-%c\" повинен викориÑтовуватиÑÑ Ð· цілим додатним аргументом" #: src/main.c:3363 #, c-format msgid "%sBuilt for %s\n" msgstr "%sЗібрано Ð´Ð»Ñ %s\n" #: src/main.c:3365 #, c-format msgid "%sBuilt for %s (%s)\n" msgstr "%sЗібрано Ð´Ð»Ñ %s (%s)\n" #: src/main.c:3376 #, c-format msgid "" "%sLicense GPLv3+: GNU GPL version 3 or later \n" "%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 GPL верÑÑ–Ñ— 3 або новішій, " "\n" "%sЦе вільне програмне забезпеченнÑ: ви можете вільно змінювати Ñ– поширювати " "його.\n" "%sВам не надаєтьÑÑ Ð–ÐžÐ”ÐИХ ГÐРÐÐТІЙ, окрім гарантій передбачених " "законодавÑтвом.\n" #: src/main.c:3397 #, c-format msgid "" "\n" "# Make data base, printed on %s" msgstr "" "\n" "# База даних Make, надрукована %s" #: src/main.c:3407 #, c-format msgid "" "\n" "# Finished Make data base on %s\n" msgstr "" "\n" "# Друк бази даних Make завершено %s\n" #: src/misc.c:643 #, c-format msgid "%s: user %lu (real %lu), group %lu (real %lu)\n" msgstr "%s: кориÑтувач %lu (наÑправді %lu), група %lu (наÑправді %lu)\n" #: src/misc.c:664 msgid "Initialized access" msgstr "Ініціалізований доÑтуп" #: src/misc.c:743 msgid "User access" msgstr "ДоÑтуп кориÑтувача" #: src/misc.c:791 msgid "Make access" msgstr "ДоÑтуп make" #: src/misc.c:825 msgid "Child access" msgstr "ДоÑтуп дочірнього процеÑу" #: src/output.c:97 #, c-format msgid "%s: Entering an unknown directory\n" msgstr "%s: входимо до невідомого каталогу\n" #: src/output.c:99 #, c-format msgid "%s: Leaving an unknown directory\n" msgstr "%s: виходимо з невідомого каталогу\n" #: src/output.c:102 #, c-format msgid "%s: Entering directory '%s'\n" msgstr "%s: входимо до каталогу «%s»\n" #: src/output.c:104 #, c-format msgid "%s: Leaving directory '%s'\n" msgstr "%s: Залишаю каталог \"%s\"\n" #: src/output.c:108 #, c-format msgid "%s[%u]: Entering an unknown directory\n" msgstr "%s[%u]: входимо до невідомого каталогу\n" #: src/output.c:110 #, c-format msgid "%s[%u]: Leaving an unknown directory\n" msgstr "%s[%u]: залишаємо невідомий каталог\n" #: src/output.c:113 #, c-format msgid "%s[%u]: Entering directory '%s'\n" msgstr "%s[%u]: входимо до каталогу «%s»\n" #: src/output.c:115 #, c-format msgid "%s[%u]: Leaving directory '%s'\n" msgstr "%s[%u]: Залишаю каталог \"%s\"\n" #: src/output.c:442 src/output.c:444 #, c-format msgid "write error: stdout" msgstr "помилка запиÑу: stdout" #: src/output.c:624 msgid ". Stop.\n" msgstr ". Зупинка.\n" #: src/output.c:658 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" #: src/output.c:667 #, c-format msgid "%s: %s" msgstr "%s: %s" #: src/output.h:62 #, c-format msgid "-O[TYPE] (--output-sync[=TYPE]) is not configured for this build." msgstr "" "-O[ТИП] (--output-sync[=ТИП]) Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ ÑеанÑу Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð½Ðµ налаштовано." #: src/posixos.c:90 msgid "creating jobs pipe" msgstr "Ñтворюємо канал завдань" #: src/posixos.c:98 src/posixos.c:251 msgid "duping jobs pipe" msgstr "дублюємо канал завдань" #: src/posixos.c:104 msgid "init jobserver pipe" msgstr "ініціалізуємо канал Ñервера завдань" #: src/posixos.c:119 #, c-format msgid "internal error: invalid --jobserver-auth string '%s'" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: некоректний Ñ€Ñдок --jobserver-auth, «%s»" #: src/posixos.c:122 #, c-format msgid "Jobserver client (fds %d,%d)\n" msgstr "Клієнт Ñервера завдань (fd %d,%d)\n" #: src/posixos.c:138 msgid "jobserver pipeline" msgstr "канал Ñервера завдань" #: src/posixos.c:186 msgid "write jobserver" msgstr "Ð·Ð°Ð¿Ð¸Ñ Ð´Ð¾ Ñервера завдань" #: src/posixos.c:300 #, c-format msgid "job server shut down" msgstr "Ñервер завдань вимкнено" #: src/posixos.c:303 msgid "pselect jobs pipe" msgstr "Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ pselect Ð´Ð»Ñ ÐºÐ°Ð½Ð°Ð»Ñƒ завдань" #: src/posixos.c:319 src/posixos.c:433 msgid "read jobs pipe" msgstr "Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñів з потоку завдань" #: src/read.c:181 #, c-format msgid "Reading makefiles...\n" msgstr "Ð§Ð¸Ñ‚Ð°Ð½Ð½Ñ make-файлів...\n" #: src/read.c:336 #, c-format msgid "Reading makefile '%s'" msgstr "Ð§Ð¸Ñ‚Ð°Ð½Ð½Ñ make-файла \"%s\"" #: src/read.c:338 #, c-format msgid " (no default goal)" msgstr " (немає типової мети)" #: src/read.c:340 #, c-format msgid " (search path)" msgstr " (шлÑÑ… пошуку)" #: src/read.c:342 #, c-format msgid " (don't care)" msgstr " (не зважати)" #: src/read.c:344 #, c-format msgid " (no ~ expansion)" msgstr " (не розширювати ~)" #: src/read.c:655 #, c-format msgid "Skipping UTF-8 BOM in makefile '%s'\n" msgstr "ПропуÑкаємо мітку UTF-8 у файлі makefile «%s»\n" #: src/read.c:658 #, c-format msgid "Skipping UTF-8 BOM in makefile buffer\n" msgstr "ПропуÑкаємо мітку UTF-8 у буфері файла makefile\n" #: src/read.c:787 #, c-format msgid "invalid syntax in conditional" msgstr "невірний ÑинтакÑÐ¸Ñ Ñƒ умовному вираженні" #: src/read.c:960 #, c-format msgid "%s: failed to load" msgstr "%s: не вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸" #: src/read.c:986 #, c-format msgid "recipe commences before first target" msgstr "Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÑпоÑобу Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð¿Ð¾Ñ‡Ð¸Ð½Ð°Ñ”Ñ‚ÑŒÑÑ Ð´Ð¾ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÑˆÐ¾Ñ— мети" #: src/read.c:1035 #, c-format msgid "missing rule before recipe" msgstr "пропущено правило до ÑпоÑобу" #: src/read.c:1136 #, c-format msgid "missing separator (did you mean TAB instead of 8 spaces?)" msgstr "пропущено роздільник (ви хотіли ввеÑти TAB заміÑть 8 пробілів?)" #: src/read.c:1138 #, c-format msgid "missing separator" msgstr "пропущено розділювач" #: src/read.c:1283 #, c-format msgid "missing target pattern" msgstr "пропущений шаблон цілі" #: src/read.c:1285 #, c-format msgid "multiple target patterns" msgstr "не один шаблон цілі" #: src/read.c:1289 #, c-format msgid "target pattern contains no '%%'" msgstr "шаблон цілі не міÑтить \"%%\"" #: src/read.c:1404 #, c-format msgid "missing 'endif'" msgstr "пропущена \"endif\"" #: src/read.c:1443 src/read.c:1488 src/variable.c:1600 #, c-format msgid "empty variable name" msgstr "порожнє ім'Ñ Ð·Ð¼Ñ–Ð½Ð½Ð¾Ñ—" #: src/read.c:1478 #, c-format msgid "extraneous text after 'define' directive" msgstr "зайвий текÑÑ‚ піÑÐ»Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð¸ «define»" #: src/read.c:1503 #, c-format msgid "missing 'endef', unterminated 'define'" msgstr "пропущена \"endif\", незавершена \"define\"" #: src/read.c:1531 #, c-format msgid "extraneous text after 'endef' directive" msgstr "зайвий текÑÑ‚ піÑÐ»Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð¸ «endef»" #: src/read.c:1603 #, c-format msgid "extraneous text after '%s' directive" msgstr "зайвий текÑÑ‚ піÑÐ»Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð¸ \"%s\"" #: src/read.c:1604 #, c-format msgid "extraneous '%s'" msgstr "зайва \"%s\"" #: src/read.c:1632 #, c-format msgid "only one 'else' per conditional" msgstr "в умовному виразі можлива лише одна директива `else'" #: src/read.c:1908 #, c-format msgid "Malformed target-specific variable definition" msgstr "Помилкове Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñпецифічного Ð´Ð»Ñ Ð¼ÐµÑ‚Ð¸ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð·Ð¼Ñ–Ð½Ð½Ð¾Ñ—" #: src/read.c:1968 #, c-format msgid "prerequisites cannot be defined in recipes" msgstr "у ÑпоÑобах Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð½Ðµ можна вказувати залежноÑтей" #: src/read.c:1986 #, c-format msgid "grouped targets must provide a recipe" msgstr "Ð´Ð»Ñ Ð·Ð³Ñ€ÑƒÐ¿Ð¾Ð²Ð°Ð½Ð¸Ñ… цілей має бути надано ÑпоÑіб збираннÑ" #: src/read.c:2029 #, c-format msgid "mixed implicit and static pattern rules" msgstr "змішані неÑвні правила Ñ– правила зі Ñтатичними зразками" #: src/read.c:2052 #, c-format msgid "mixed implicit and normal rules" msgstr "змішані неÑвні Ñ– звичайні правила" #: src/read.c:2107 #, c-format msgid "target '%s' doesn't match the target pattern" msgstr "ціль \"%s\" не відповідає зразку цілей" #: src/read.c:2122 src/read.c:2168 #, c-format msgid "target file '%s' has both : and :: entries" msgstr "цільовий файл \"%s\" має Ð²Ñ…Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ Ñ– з \":\", Ñ– з \"::\" " #: src/read.c:2128 #, c-format msgid "target '%s' given more than once in the same rule" msgstr "ціль \"%s\" зазначено декілька разів у одному правилі" #: src/read.c:2138 #, c-format msgid "warning: overriding recipe for target '%s'" msgstr "попередженнÑ: замінюємо ÑпоÑіб Ð´Ð»Ñ Ð¼ÐµÑ‚Ð¸ «%s»" #: src/read.c:2141 #, c-format msgid "warning: ignoring old recipe for target '%s'" msgstr "попередженнÑ: ігноруємо заÑтарілий ÑпоÑіб Ð´Ð»Ñ Ð¼ÐµÑ‚Ð¸ «%s»" #: src/read.c:2254 #, c-format msgid "*** mixed implicit and normal rules: deprecated syntax" msgstr "*** змішані неÑвні Ñ– звичайні правила: заÑтарілий ÑинтакÑиÑ" #: src/read.c:2271 #, c-format msgid "warning: overriding group membership for target '%s'" msgstr "попередженнÑ: перевизначаємо учаÑть у групах Ð´Ð»Ñ Ð¼ÐµÑ‚Ð¸ «%s»" #: src/read.c:2636 #, c-format msgid "warning: NUL character seen; rest of line ignored" msgstr "попередженнÑ: зуÑтрінутий Ñимвол NUL; ігноруєтьÑÑ Ð´Ð¾ ÐºÑ–Ð½Ñ†Ñ Ñ€Ñдки" #: src/remake.c:226 #, c-format msgid "Nothing to be done for '%s'." msgstr "Ціль \"%s\" не вимагає Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´." #: src/remake.c:227 #, c-format msgid "'%s' is up to date." msgstr "\"%s\" не вимагає оновленнÑ." #: src/remake.c:323 #, c-format msgid "Pruning file '%s'.\n" msgstr "Обрізаємо файл «%s».\n" #: src/remake.c:389 #, c-format msgid "%sNo rule to make target '%s', needed by '%s'%s" msgstr "%sÐема правила Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ†Ñ–Ð»Ñ– \"%s\", необхідної Ð´Ð»Ñ \"%s\"%s" #: src/remake.c:399 #, c-format msgid "%sNo rule to make target '%s'%s" msgstr "%sÐема правила Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ†Ñ–Ð»Ñ– \"%s\"%s" #: src/remake.c:425 #, c-format msgid "Considering target file '%s'.\n" msgstr "Обробка цільового файла \"%s\".\n" #: src/remake.c:432 #, c-format msgid "Recently tried and failed to update file '%s'.\n" msgstr "ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ Ñпроба оновити файл \"%s\" завершилаÑÑ Ð±ÐµÐ·ÑƒÑпішно.\n" #: src/remake.c:444 #, c-format msgid "File '%s' was considered already.\n" msgstr "Файл \"%s\" вже було оброблено.\n" #: src/remake.c:454 #, c-format msgid "Still updating file '%s'.\n" msgstr "Ð’Ñе ще оновлюєтьÑÑ Ñ„Ð°Ð¹Ð» \"%s\".\n" #: src/remake.c:457 #, c-format msgid "Finished updating file '%s'.\n" msgstr "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° \"%s\" завершено.\n" #: src/remake.c:486 #, c-format msgid "File '%s' does not exist.\n" msgstr "Ðе виÑвлено файла з назвою «%s».\n" #: src/remake.c:494 #, c-format msgid "" "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp" msgstr "" "*** ПопередженнÑ: файл .LOW_RESOLUTION_TIME «%s» має чаÑову позначку виÑокої " "точноÑті" #: src/remake.c:507 src/remake.c:1039 #, c-format msgid "Found an implicit rule for '%s'.\n" msgstr "Знайдено неÑвне правило Ð´Ð»Ñ \"%s\".\n" #: src/remake.c:509 src/remake.c:1041 #, c-format msgid "No implicit rule found for '%s'.\n" msgstr "Ðе знайдено неÑвних правил Ð´Ð»Ñ \"%s\".\n" #: src/remake.c:515 #, c-format msgid "Using default recipe for '%s'.\n" msgstr "ВикориÑтовуємо типовий ÑпоÑіб Ð´Ð»Ñ Â«%s».\n" #: src/remake.c:549 src/remake.c:1088 #, c-format msgid "Circular %s <- %s dependency dropped." msgstr "Циклічна залежніÑть %s <- %s пропущена." #: src/remake.c:674 #, c-format msgid "Finished prerequisites of target file '%s'.\n" msgstr "Завершено обробку попередніх залежноÑтей файла мети «%s».\n" #: src/remake.c:680 #, c-format msgid "The prerequisites of '%s' are being made.\n" msgstr "Цілі, від Ñких залежить \"%s\", збираютьÑÑ.\n" #: src/remake.c:694 #, c-format msgid "Giving up on target file '%s'.\n" msgstr "Ðварійний зупинка на цільовому файлі \"%s\".\n" #: src/remake.c:699 #, c-format msgid "Target '%s' not remade because of errors." msgstr "Ціль \"%s\" не була перезібрана через помилки." #: src/remake.c:751 #, c-format msgid "Prerequisite '%s' is order-only for target '%s'.\n" msgstr "ЗалежніÑть «%s» визначено Ð´Ð»Ñ Ð¼ÐµÑ‚Ð¸ «%s» лише порÑдком збираннÑ.\n" #: src/remake.c:756 #, c-format msgid "Prerequisite '%s' of target '%s' does not exist.\n" msgstr "ЗалежноÑті «%s» мети «%s» не Ñ–Ñнує.\n" #: src/remake.c:761 #, c-format msgid "Prerequisite '%s' is newer than target '%s'.\n" msgstr "ЗалежніÑть «%s» Ñ” новішою за мету «%s».\n" #: src/remake.c:764 #, c-format msgid "Prerequisite '%s' is older than target '%s'.\n" msgstr "ЗалежніÑть «%s» Ñ” Ñтарішою за мету «%s».\n" #: src/remake.c:782 #, c-format msgid "Target '%s' is double-colon and has no prerequisites.\n" msgstr "Ціль \"%s\" оголошена з двома двокрапками Ñ– не має залежноÑтей.\n" #: src/remake.c:789 #, c-format msgid "No recipe for '%s' and no prerequisites actually changed.\n" msgstr "Ðемає ÑпоÑобу Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Â«%s», вÑÑ– попередні залежноÑті не змінено.\n" #: src/remake.c:794 #, c-format msgid "Making '%s' due to always-make flag.\n" msgstr "Збираємо «%s» через вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð° always-make.\n" #: src/remake.c:802 #, c-format msgid "No need to remake target '%s'" msgstr "Потреби у повторному збиранні мети «%s» немає" #: src/remake.c:804 #, c-format msgid "; using VPATH name '%s'" msgstr "; викориÑтовуємо назву VPATH «%s»" #: src/remake.c:824 #, c-format msgid "Must remake target '%s'.\n" msgstr "Ðеобхідно перезібрати ціль \"%s\".\n" #: src/remake.c:830 #, c-format msgid " Ignoring VPATH name '%s'.\n" msgstr " Ігноруємо назву VPATH «%s».\n" #: src/remake.c:839 #, c-format msgid "Recipe of '%s' is being run.\n" msgstr "ЗаÑтоÑовуємо ÑпоÑіб «%s».\n" #: src/remake.c:846 #, c-format msgid "Failed to remake target file '%s'.\n" msgstr "Спроба перезібрати цільовий файл \"%s\" безуÑпішна.\n" #: src/remake.c:849 #, c-format msgid "Successfully remade target file '%s'.\n" msgstr "Цільовий файл \"%s\" уÑпішно перезібраний.\n" #: src/remake.c:852 #, c-format msgid "Target file '%s' needs to be remade under -q.\n" msgstr "Цільовий файл \"%s\" вимагає Ð¿ÐµÑ€ÐµÐ·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð· ключем -q.\n" #: src/remake.c:1047 #, c-format msgid "Using default commands for '%s'.\n" msgstr "ВикориÑÑ‚Ð°Ð½Ð½Ñ Ñ‚Ð¸Ð¿Ð¾Ð²Ð¸Ñ… команд Ð´Ð»Ñ Â«%s».\n" #: src/remake.c:1422 #, c-format msgid "Warning: File '%s' has modification time %s s in the future" msgstr "Увага: Ñ‡Ð°Ñ Ð·Ð¼Ñ–Ð½Ð¸ файла «%s» перебуває на %s Ñ Ñƒ майбутньому" #: src/remake.c:1662 #, c-format msgid ".LIBPATTERNS element '%s' is not a pattern" msgstr "Елемент .LIBPATTERNS «%s» не Ñ” зразком" #: src/remote-cstms.c:122 #, c-format msgid "Customs won't export: %s\n" msgstr "ÐеекÑпортовні налаштуваннÑ: %s\n" #: src/rule.c:289 #, c-format msgid "warning: ignoring prerequisites on suffix rule definition" msgstr "" #: src/rule.c:530 msgid "" "\n" "# Implicit Rules" msgstr "" "\n" "# ÐеÑвні правила" #: src/rule.c:545 msgid "" "\n" "# No implicit rules." msgstr "" "\n" "# ÐеÑвних правил нема." #: src/rule.c:548 #, c-format msgid "" "\n" "# %u implicit rules, %u (%.1f%%) terminal." msgstr "" "\n" "# ÐеÑвних правил: %u, термінальних: %u (%.1f%%)." #: src/rule.c:557 #, c-format msgid "BUG: num_pattern_rules is wrong! %u != %u" msgstr "ПОМИЛКÐ: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ num_pattern_rules Ñ” помилковим! %u != %u" #: src/signame.c:84 msgid "unknown signal" msgstr "невідомий Ñигнал" #: src/signame.c:92 msgid "Hangup" msgstr "Обрив" #: src/signame.c:95 msgid "Interrupt" msgstr "ПерериваннÑ" #: src/signame.c:98 msgid "Quit" msgstr "Вихід" #: src/signame.c:101 msgid "Illegal Instruction" msgstr "ÐеприпуÑтима інÑтрукціÑ" #: src/signame.c:104 msgid "Trace/breakpoint trap" msgstr "ПаÑтка траÑÑƒÐ²Ð°Ð½Ð½Ñ Ñ‡Ð¸ точки зупинки" #: src/signame.c:109 msgid "Aborted" msgstr "Припинено" #: src/signame.c:112 msgid "IOT trap" msgstr "ПаÑтка IOT" #: src/signame.c:115 msgid "EMT trap" msgstr "ПаÑтка EMT" #: src/signame.c:118 msgid "Floating point exception" msgstr "Помилка операції з крапкою, що плаває" #: src/signame.c:121 msgid "Killed" msgstr "ЗнищеннÑ" #: src/signame.c:124 msgid "Bus error" msgstr "Помилка на шині" #: src/signame.c:127 msgid "Segmentation fault" msgstr "Збій Ñегментації" #: src/signame.c:130 msgid "Bad system call" msgstr "Поганий ÑиÑтемний виклик" #: src/signame.c:133 msgid "Broken pipe" msgstr "Обрив каналу" #: src/signame.c:136 msgid "Alarm clock" msgstr "Сигнал по таймеру" #: src/signame.c:139 msgid "Terminated" msgstr "Завершено" #: src/signame.c:142 msgid "User defined signal 1" msgstr "Обумовлений кориÑтувачем Ñигнал 1" #: src/signame.c:145 msgid "User defined signal 2" msgstr "Обумовлений кориÑтувачем Ñигнал 2" #: src/signame.c:150 src/signame.c:153 msgid "Child exited" msgstr "Ðащадок завершив роботу" #: src/signame.c:156 msgid "Power failure" msgstr "Збій живленнÑ" #: src/signame.c:159 msgid "Stopped" msgstr "Зупинено" #: src/signame.c:162 msgid "Stopped (tty input)" msgstr "Зупинено (ввід з термінала) " #: src/signame.c:165 msgid "Stopped (tty output)" msgstr "Зупинено (вивід на термінал)" #: src/signame.c:168 msgid "Stopped (signal)" msgstr "Зупинено (Ñигнал)" #: src/signame.c:171 msgid "CPU time limit exceeded" msgstr "Перевищене Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð½Ð° процеÑорний чаÑ" #: src/signame.c:174 msgid "File size limit exceeded" msgstr "Перевищений межа розміру файла" #: src/signame.c:177 msgid "Virtual timer expired" msgstr "Віртуальний Ñ‡Ð°Ñ Ð¼Ð¸Ð½ÑƒÐ²" #: src/signame.c:180 msgid "Profiling timer expired" msgstr "Ð§Ð°Ñ Ð¿Ñ€Ð¾Ñ„Ñ–Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð¼Ð¸Ð½ÑƒÐ²" #: src/signame.c:186 msgid "Window changed" msgstr "Вікно змінено" #: src/signame.c:189 msgid "Continued" msgstr "Продовжено" #: src/signame.c:192 msgid "Urgent I/O condition" msgstr "Умова екÑтреного вводу/виводу" #: src/signame.c:199 src/signame.c:208 msgid "I/O possible" msgstr "Можливий ввід/вивід" #: src/signame.c:202 msgid "SIGWIND" msgstr "SIGWIND" #: src/signame.c:205 msgid "SIGPHONE" msgstr "SIGPHONE" #: src/signame.c:211 msgid "Resource lost" msgstr "РеÑÑƒÑ€Ñ Ð²Ñ‚Ñ€Ð°Ñ‡ÐµÐ½Ð¾" #: src/signame.c:214 msgid "Danger signal" msgstr "Сигнал небезпеки" #: src/signame.c:217 msgid "Information request" msgstr "Запит інформації" #: src/signame.c:220 msgid "Floating point co-processor not available" msgstr "Допоміжний процеÑор Ð´Ð»Ñ Ð¾Ð±Ñ‡Ð¸Ñлень з рухомою комою недоÑтупний" #: src/strcache.c:274 #, c-format msgid "" "\n" "%s No strcache buffers\n" msgstr "" "\n" "%s немає буферів strcache\n" #: src/strcache.c:304 #, c-format msgid "" "\n" "%s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu " "B\n" msgstr "" "\n" "Буфери strcache %s: %lu (%lu) / Ñ€Ñдків = %lu / Ñховище = %lu Б / Ñер = %lu " "Б\n" #: src/strcache.c:308 #, c-format msgid "" "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B\n" msgstr "" "Поточний буфер %s: розмір = %hu Б / викориÑтано = %hu Б / кількіÑть = %hu / " "Ñер = %u Б\n" #: src/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" #: src/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" #: src/strcache.c:326 #, c-format msgid "" "\n" "%s strcache performance: lookups = %lu / hit rate = %lu%%\n" msgstr "" "\n" "Ð¨Ð²Ð¸Ð´ÐºÐ¾Ð´Ñ–Ñ strcache %s: циклів пошуку = %lu / відÑоток знайденого = %lu%%\n" #: src/strcache.c:328 msgid "" "# hash-table stats:\n" "# " msgstr "" "# ÑтатиÑтика щодо таблиці хешів:\n" "# " #: src/variable.c:1653 msgid "automatic" msgstr "автоматична" #: src/variable.c:1656 msgid "default" msgstr "типовий" #: src/variable.c:1659 msgid "environment" msgstr "визначена у Ñередовищі" #: src/variable.c:1662 msgid "makefile" msgstr "файл make" #: src/variable.c:1665 msgid "environment under -e" msgstr "заданий ключ -e" #: src/variable.c:1668 msgid "command line" msgstr "визначена у командному Ñ€Ñдку" #: src/variable.c:1671 msgid "'override' directive" msgstr "Директива «override»" #: src/variable.c:1682 #, c-format msgid " (from '%s', line %lu)" msgstr " (з \"%s\", Ñ€Ñдок %lu)" #: src/variable.c:1745 msgid "# variable set hash-table stats:\n" msgstr "# Ñтан змінних у хеш-таблиці:\n" #: src/variable.c:1756 msgid "" "\n" "# Variables\n" msgstr "" "\n" "# Змінні\n" #: src/variable.c:1760 msgid "" "\n" "# Pattern-specific Variable Values" msgstr "" "\n" "# Специфічні Ð´Ð»Ñ Ð·Ñ€Ð°Ð·ÐºÐ° Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð·Ð¼Ñ–Ð½Ð½Ð¸Ñ…" #: src/variable.c:1774 msgid "" "\n" "# No pattern-specific variable values." msgstr "" "\n" "# Ðемає Ñпецифічних Ð´Ð»Ñ Ð·Ñ€Ð°Ð·ÐºÐ° значень змінних." #: src/variable.c:1776 #, c-format msgid "" "\n" "# %u pattern-specific variable values" msgstr "" "\n" "# %u Ñпецифічних Ð´Ð»Ñ Ð·Ñ€Ð°Ð·ÐºÐ° значень змінних" #: src/variable.h:229 #, c-format msgid "warning: undefined variable '%.*s'" msgstr "попередженнÑ: невизначена змінна \"%.*s\"" #: src/vmsfunctions.c:91 #, c-format msgid "sys$search() failed with %d\n" msgstr "sys$search() повернуто код помилки %d\n" #: src/vmsjobs.c:244 #, c-format msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n" msgstr "" "-попередженнÑ, ймовірно, вам варто повторно увімкнути обробку CTRL-Y з DCL.\n" #: src/vmsjobs.c:681 #, c-format msgid "BUILTIN CD %s\n" msgstr "ВБУДОВÐÐИЙ CD %s\n" #: src/vmsjobs.c:1224 #, c-format msgid "DCL: %s\n" msgstr "DCL: %s\n" #: src/vmsjobs.c:1284 #, c-format msgid "Append output to %s\n" msgstr "ДопиÑати виведенні дані до %s\n" #: src/vmsjobs.c:1309 #, c-format msgid "Append %.*s and cleanup\n" msgstr "ДопиÑати %.*s Ñ– Ñпорожнити\n" #: src/vmsjobs.c:1322 #, c-format msgid "Executing %s instead\n" msgstr "ЗаміÑть заданого виконуєтьÑÑ %s\n" #: src/vpath.c:603 msgid "" "\n" "# VPATH Search Paths\n" msgstr "" "\n" "# ШлÑхи пошуку VPATH\n" #: src/vpath.c:620 msgid "# No 'vpath' search paths." msgstr "# Ðе визначено шлÑÑ… пошуку \"vpath\"." #: src/vpath.c:622 #, c-format msgid "" "\n" "# %u 'vpath' search paths.\n" msgstr "" "\n" "# %u шлÑхи пошуку \"vpath\".\n" #: src/vpath.c:625 msgid "" "\n" "# No general ('VPATH' variable) search path." msgstr "" "\n" "# Ðе визначено загальний шлÑÑ… пошуку (змінна \"VPATH\")." #: src/vpath.c:631 msgid "" "\n" "# General ('VPATH' variable) search path:\n" "# " msgstr "" "\n" "# Загальний шлÑÑ… пошуку (змінна \"VPATH\"):\n" "# " #: src/w32/w32os.c:44 #, c-format msgid "Jobserver slots limited to %d\n" msgstr "Слоти Ñервера завдань обмежено значеннÑм %d\n" #: src/w32/w32os.c:60 #, c-format msgid "creating jobserver semaphore: (Error %ld: %s)" msgstr "Ñтворюємо Ñемафор Ñервера завдань: (помилка %ld: %s)" #: src/w32/w32os.c:79 #, c-format msgid "" "internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)" msgstr "" "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ Ñемафор Ñервера завдань «%s»: " "(помилка %ld: %s)" #: src/w32/w32os.c:82 #, c-format msgid "Jobserver client (semaphore %s)\n" msgstr "Клієнт Ñервера завдань (Ñемафор %s)\n" #: src/w32/w32os.c:123 #, c-format msgid "release jobserver semaphore: (Error %ld: %s)" msgstr "ÑпуÑкаємо Ñемафор Ñервера завдань: (Помилка %ld: %s)" #: src/w32/w32os.c:194 #, c-format msgid "semaphore or child process wait: (Error %ld: %s)" msgstr "Ð¾Ñ‡Ñ–ÐºÐºÑƒÐ²Ð°Ð½Ð½Ñ Ñемафора або дочірнього процеÑу: (помилка %ld: %s)" #~ msgid "%s: %s: Command not found\n" #~ msgstr "%s: %s: не знайдено команди\n" #~ msgid "%s[%u]: %s: Command not found\n" #~ msgstr "%s[%u]: %s: не знайдено команди\n" #~ msgid "%s: Shell program not found" #~ msgstr "%s: Командний процеÑор не знайдений" #~ msgid "%s is suspending for 30 seconds..." #~ msgstr "%s призупинÑєтьÑÑ Ð½Ð° 30 Ñекунд..." #~ msgid "done sleep(30). Continuing.\n" #~ msgstr "виконано sleep(30). Продовжуємо.\n" #~ msgid "Unknown error %d" #~ msgstr "Ðевідома помилка %d" #~ msgid "Warning: File '%s' has modification time in the future" #~ msgstr "Увага: Файл \"%s\" має майбутній Ñ‡Ð°Ñ Ð·Ð¼Ñ–Ð½Ð¸" #~ msgid " terminal." #~ msgstr "." #~ 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" #~ msgid "internal error: multiple --jobserver-fds options" #~ msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: вказано декілька ключів --jobserver-fds" #~ msgid "virtual memory exhausted" #~ msgstr "віртуальна пам'Ñть вичерпана" #~ msgid "write error" #~ msgstr "помилка запиÑу" #~ msgid "BUILTIN RM %s\n" #~ msgstr "ВБУДОВÐÐИЙ RM %s\n" #~ msgid "# Invalid value in 'update_status' member!" #~ msgstr "# Ðекоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ‡Ð»ÐµÐ½Ð° \"update_status\"!" #~ msgid "unknown trace mode '%s'" #~ msgstr "невідомий режим траÑÑƒÐ²Ð°Ð½Ð½Ñ Â«%s»" make-4.3/po/id.po0000644000175000017500000017164013611136531010601 00000000000000# Pesan Bahasa Indonesia untuk GNU make # Copyright (C) 2006 Free Software Foundation, Inc. # This file is distributed under the same license as the make package. # Arif E. Nugroho , 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014. # msgid "" msgstr "" "Project-Id-Version: GNU make 4.0\n" "Report-Msgid-Bugs-To: bug-make@gnu.org\n" "POT-Creation-Date: 2020-01-19 15:34-0500\n" "PO-Revision-Date: 2014-07-30 18:30+0700\n" "Last-Translator: Arif E. Nugroho \n" "Language-Team: Indonesian \n" "Language: id\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" #: src/ar.c:46 #, c-format msgid "attempt to use unsupported feature: '%s'" msgstr "usaha untuk menggunakan layanan yang tidak didukung: '%s'" #: src/ar.c:123 #, c-format msgid "touch archive member is not available on VMS" msgstr "touch anggota archive tidak tersedia di VMS" #: src/ar.c:147 #, c-format msgid "touch: Archive '%s' does not exist" msgstr "touch: Archive '%s' tidak ada" #: src/ar.c:150 #, c-format msgid "touch: '%s' is not a valid archive" msgstr "touch: '%s' bukan archive yang valid" #: src/ar.c:157 #, c-format msgid "touch: Member '%s' does not exist in '%s'" msgstr "touch: Anggota '%s' tidak terdapat dalam '%s'" #: src/ar.c:164 #, c-format msgid "touch: Bad return code from ar_member_touch on '%s'" msgstr "touch: Kode kembali tidak baik dari ar_member_touch pada '%s'" #: src/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" #: src/arscan.c:236 #, c-format msgid "lbr$ini_control() failed with status = %d" msgstr "lbr$ini_control() gagal dengan status = %d" #: src/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'" #: src/arscan.c:944 #, c-format msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n" msgstr "Anggota '%s'%s: %ld bytes pada %ld (%ld).\n" #: src/arscan.c:945 msgid " (name might be truncated)" msgstr " (nama mungkin akan di potong)" #: src/arscan.c:947 #, c-format msgid " Date %s" msgstr " Tanggal %s" #: src/arscan.c:948 #, c-format msgid " uid = %d, gid = %d, mode = 0%o.\n" msgstr " uid = %d, gid = %d, mode = 0%o.\n" #: src/commands.c:403 #, c-format msgid "Recipe has too many lines (%ud)" msgstr "Recipe has too many lines (%ud)" #: src/commands.c:504 msgid "*** Break.\n" msgstr "*** Berhenti.\n" #: src/commands.c:628 #, c-format msgid "*** [%s] Archive member '%s' may be bogus; not deleted" msgstr "*** [%s] Anggota archive '%s' mungkin palsu: tidak dihapus" #: src/commands.c:632 #, c-format msgid "*** Archive member '%s' may be bogus; not deleted" msgstr "*** Anggota archive '%s' mungkin palsu; tidak dihapus" #: src/commands.c:646 #, c-format msgid "*** [%s] Deleting file '%s'" msgstr "*** [%s] Menghapus berkas '%s'" #: src/commands.c:648 #, c-format msgid "*** Deleting file '%s'" msgstr "*** Menghapus berkas '%s'" #: src/commands.c:684 msgid "# recipe to execute" msgstr "# perintah untuk dijalankan" #: src/commands.c:687 msgid " (built-in):" msgstr " (bawaan):" #: src/commands.c:689 #, c-format msgid " (from '%s', line %lu):\n" msgstr " (dari '%s', baris %lu):\n" #: src/dir.c:1073 msgid "" "\n" "# Directories\n" msgstr "" "\n" "# Direktori\n" #: src/dir.c:1085 #, c-format msgid "# %s: could not be stat'd.\n" msgstr "# %s: tidak dapat melihat statistik.\n" #: src/dir.c:1089 #, fuzzy msgid "# %s (key %s, mtime %I64u): could not be opened.\n" msgstr "# %s (kunci %s, mtime %d): tidak dapat dibuka.\n" #: src/dir.c:1094 #, 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" #: src/dir.c:1099 #, c-format msgid "# %s (device %ld, inode %ld): could not be opened.\n" msgstr "# %s (perangkat %ld, inode %ld): tidak dapat dibuka.\n" #: src/dir.c:1126 #, fuzzy msgid "# %s (key %s, mtime %I64u): " msgstr "# %s (kunci %s, mtime %d): " #: src/dir.c:1131 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): " msgstr "# %s (perangkat %d, inode [%d,%d,%d]): " #: src/dir.c:1136 #, c-format msgid "# %s (device %ld, inode %ld): " msgstr "# %s (perangkat %ld, inode %ld): " #: src/dir.c:1142 src/dir.c:1163 msgid "No" msgstr "Tidak" #: src/dir.c:1145 src/dir.c:1166 msgid " files, " msgstr " berkas, " #: src/dir.c:1147 src/dir.c:1168 msgid "no" msgstr "tidak" #: src/dir.c:1150 msgid " impossibilities" msgstr " tidak mungkin" #: src/dir.c:1154 msgid " so far." msgstr " sejauh ini." #: src/dir.c:1171 #, c-format msgid " impossibilities in %lu directories.\n" msgstr " tidak mungkin dalam direktori %lu.\n" #: src/expand.c:125 #, c-format msgid "Recursive variable '%s' references itself (eventually)" msgstr "Variabel rekursif '%s' menunjuk pada dirinya sendiri" #: src/expand.c:271 #, c-format msgid "unterminated variable reference" msgstr "referensi variabel tidak diselesaikan" #: src/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," #: src/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," #: src/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'." #: src/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'." #: src/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'" #: src/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'" #: src/file.c:408 #, c-format msgid "*** Deleting intermediate file '%s'" msgstr "*** Menghapus berkas sementara '%s'" #: src/file.c:412 #, c-format msgid "Removing intermediate files...\n" msgstr "Menghapus berkas sementara...\n" #: src/file.c:872 msgid "Current time" msgstr "Waktu saat ini" #: src/file.c:876 #, c-format msgid "%s: Timestamp out of range; substituting %s" msgstr "%s: Timestamp diluar jangkauan; digantikan dengan %s" #: src/file.c:1016 msgid "# Not a target:" msgstr "# Bukan sebuah target:" #: src/file.c:1021 msgid "# Precious file (prerequisite of .PRECIOUS)." msgstr "# Berkas sebelumnya (dibutuhkan oleh .PRECIOUS)." #: src/file.c:1023 msgid "# Phony target (prerequisite of .PHONY)." msgstr "# Phony target (dibutuhkan oleh .PHONY)." #: src/file.c:1025 msgid "# Command line target." msgstr "# Baris perintah target." #: src/file.c:1027 msgid "# A default, MAKEFILES, or -include/sinclude makefile." msgstr "# Merupakan baku, MAKEFILES atau -include/sinclude makefile." #: src/file.c:1029 msgid "# Builtin rule" msgstr "# Tidak ada aturan implisit." #: src/file.c:1031 msgid "# Implicit rule search has been done." msgstr "# Pencarian aturan implisit sudah selesai." #: src/file.c:1032 msgid "# Implicit rule search has not been done." msgstr "# Pencarian aturan implisit belum selesai." #: src/file.c:1034 #, c-format msgid "# Implicit/static pattern stem: '%s'\n" msgstr "# Pola/implisit atau statis stem: '%s'\n" #: src/file.c:1036 msgid "# File is an intermediate prerequisite." msgstr "# Berkas merupakan dibutuhkan untuk sementara." #: src/file.c:1040 msgid "# Also makes:" msgstr "# Juga membuat:" #: src/file.c:1046 msgid "# Modification time never checked." msgstr "# Waktu ubah sudah diperiksa." #: src/file.c:1048 msgid "# File does not exist." msgstr "# Berkas tidak ada." #: src/file.c:1050 msgid "# File is very old." msgstr "# Berkas sudah sangat tua." #: src/file.c:1055 #, c-format msgid "# Last modified %s\n" msgstr "# Terakhir dimodifikasi %s\n" #: src/file.c:1058 msgid "# File has been updated." msgstr "# Berkas sudah diperbarui." #: src/file.c:1058 msgid "# File has not been updated." msgstr "# Berkas belum diperbarui." #: src/file.c:1062 msgid "# Recipe currently running (THIS IS A BUG)." msgstr "# Perintah sedang berjalan (INI MERUPAKAN SEBUAH BUG)." #: src/file.c:1065 msgid "# Dependencies recipe running (THIS IS A BUG)." msgstr "# Perintah ketergantungan sedang berjalan (INI MERUPAKAN SEBUAH BUG)." #: src/file.c:1074 msgid "# Successfully updated." msgstr "# Sukses memperbarui." #: src/file.c:1078 msgid "# Needs to be updated (-q is set)." msgstr "# Perlu untuk diupdate (-q diset)." #: src/file.c:1081 msgid "# Failed to be updated." msgstr "# Gagal untuk mengupdate." #: src/file.c:1086 msgid "# Invalid value in 'command_state' member!" msgstr "# Nilai yang salah dalam anggota 'command_state' !" #: src/file.c:1105 msgid "" "\n" "# Files" msgstr "" "\n" "# Berksa" #: src/file.c:1109 msgid "" "\n" "# files hash-table stats:\n" "# " msgstr "" "\n" "# berkas statistik hash-table:\n" "# " #: src/file.c:1119 #, c-format msgid "%s: Field '%s' not cached: %s" msgstr "%s: Field '%s' not cached: %s" #: src/function.c:794 msgid "non-numeric first argument to 'word' function" msgstr "argumen pertama untuk fungsi 'word' bukan numerik" #: src/function.c:799 #, c-format msgid "first argument to 'word' function must be greater than 0" msgstr "argumen pertama untuk fungsi 'word' harus lebih besar dari 0" #: src/function.c:819 msgid "non-numeric first argument to 'wordlist' function" msgstr "argumen pertama untuk fungsi 'wordlist' bukan numerik" #: src/function.c:821 msgid "non-numeric second argument to 'wordlist' function" msgstr "argumen kedua dari fungsi 'wordlist' bukan numerik" #: src/function.c:1533 #, c-format msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n" msgstr "windows32_openpipe: DuplicateHandle(In) gagal (e=%ld)\n" #: src/function.c:1557 #, c-format msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n" msgstr "windows32_openpipe: DuplicateHandle(Err) gagal (e=%ld)\n" #: src/function.c:1564 #, c-format msgid "CreatePipe() failed (e=%ld)\n" msgstr "CreatePipe() gagal (e=%ld)\n" #: src/function.c:1572 #, c-format msgid "windows32_openpipe(): process_init_fd() failed\n" msgstr "windows32_openpipe(): process_init_fd() gagal\n" #: src/function.c:1857 #, c-format msgid "Cleaning up temporary batch file %s\n" msgstr "Membersihkan berkas batch sementara %s\n" #: src/function.c:2230 src/function.c:2255 #, c-format msgid "file: missing filename" msgstr "" #: src/function.c:2234 src/function.c:2265 #, c-format msgid "open: %s: %s" msgstr "open: %s: %s" #: src/function.c:2242 #, c-format msgid "write: %s: %s" msgstr "menulis: %s: %s" #: src/function.c:2245 src/function.c:2282 #, fuzzy, c-format msgid "close: %s: %s" msgstr "open: %s: %s" #: src/function.c:2258 #, c-format msgid "file: too many arguments" msgstr "" #: src/function.c:2277 #, fuzzy, c-format msgid "read: %s: %s" msgstr "menulis: %s: %s" #: src/function.c:2290 #, fuzzy, c-format msgid "file: invalid file operation: %s" msgstr "Invalid file operation: %s" #: src/function.c:2405 #, c-format msgid "insufficient number of arguments (%d) to function '%s'" msgstr "Jumlah dari argumen (%d) untuk fungsi '%s' tidak mencukupi" #: src/function.c:2417 #, c-format msgid "unimplemented on this platform: function '%s'" msgstr "Tidak terimplementasi dalam platform ini: fungsi '%s'" #: src/function.c:2483 #, c-format msgid "unterminated call to function '%s': missing '%c'" msgstr "fungsi '%s' tidak diselesaikan: hilang '%c'" #: src/function.c:2667 #, fuzzy, c-format msgid "Empty function name" msgstr "Empty function name\n" #: src/function.c:2669 #, fuzzy, c-format msgid "Invalid function name: %s" msgstr "Invalid function name: %s\n" #: src/function.c:2671 #, fuzzy, c-format msgid "Function name too long: %s" msgstr "Function name too long: %s\n" #: src/function.c:2674 #, fuzzy, c-format msgid "Invalid minimum argument count (%u) for function %s" msgstr "Jumlah dari argumen (%d) untuk fungsi %s tidak mencukupi\n" #: src/function.c:2677 #, fuzzy, c-format msgid "Invalid maximum argument count (%u) for function %s" msgstr "Jumlah dari argumen (%d) untuk fungsi %s tidak mencukupi\n" #: src/getopt.c:659 #, c-format msgid "%s: option '%s' is ambiguous\n" msgstr "%s: opsi '%s' merupakan ambigu\n" #: src/getopt.c:683 #, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s: opsi '--%s' tidak memperbolehkan argumen\n" #: src/getopt.c:688 #, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s: opsi '%c%s' tidak memperbolehkan argumen\n" #: src/getopt.c:705 src/getopt.c:878 #, c-format msgid "%s: option '%s' requires an argument\n" msgstr "%s: opsi '%s' membutuhkan sebuah argumen\n" #: src/getopt.c:734 #, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s: opsi tidak dikenali '--%s'\n" #: src/getopt.c:738 #, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s: opsi tidak dikenali '%c%s'\n" #: src/getopt.c:764 #, c-format msgid "%s: illegal option -- %c\n" msgstr "%s: opsi tidak legal -- %c\n" #: src/getopt.c:767 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s: opsi tidak valid -- %c\n" #: src/getopt.c:797 src/getopt.c:927 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: opsi membutuhkan sebuah argumen -- %c\n" #: src/getopt.c:844 #, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s: opsi '-W %s' merupakan opsi ambigu\n" #: src/getopt.c:862 #, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s: opsi '-W %s' tidak memperbolehkan sebuah argumen\n" #: src/guile.c:58 #, c-format msgid "guile: Expanding '%s'\n" msgstr "guile: Expanding '%s'\n" #: src/guile.c:74 #, c-format msgid "guile: Evaluating '%s'\n" msgstr "guile: Evaluating '%s'\n" #: src/hash.c:50 #, c-format msgid "can't allocate %lu bytes for hash table: memory exhausted" msgstr "" "tidak dapat mengalokasikan %lu bytes untuk tabel hash; kehabisan memory" #: src/hash.c:280 #, fuzzy, c-format msgid "Load=%lu/%lu=%.0f%%, " msgstr "Beban=%ld/%ld=%.0f%%, " #: src/hash.c:282 #, fuzzy, c-format msgid "Rehash=%u, " msgstr "Rehash=%d, " #: src/hash.c:283 #, fuzzy, c-format msgid "Collisions=%lu/%lu=%.0f%%" msgstr "Tabrakan=%ld/%ld=%.0f%%" #: src/implicit.c:38 #, c-format msgid "Looking for an implicit rule for '%s'.\n" msgstr "Mencari aturan implisit untuk '%s'.\n" #: src/implicit.c:54 #, c-format msgid "Looking for archive-member implicit rule for '%s'.\n" msgstr "Mencari aturan implisit untuk anggota-archive pada '%s'.\n" #: src/implicit.c:311 #, c-format msgid "Avoiding implicit rule recursion.\n" msgstr "Menghindari aturan implisit rekursi.\n" #: src/implicit.c:484 #, fuzzy, c-format msgid "Stem too long: '%s%.*s'.\n" msgstr "Stem too long: '%.*s'.\n" #: src/implicit.c:490 #, c-format msgid "Trying pattern rule with stem '%.*s'.\n" msgstr "Mencoba aturan pola dengan stem '%.*s'.\n" #: src/implicit.c:717 #, c-format msgid "Rejecting impossible rule prerequisite '%s'.\n" msgstr "Menolak persyaratan aturan yang tidak mungkin '%s'.\n" #: src/implicit.c:718 #, c-format msgid "Rejecting impossible implicit prerequisite '%s'.\n" msgstr "Menolak persyaratan implisit yang tidak mungkin '%s'.\n" #: src/implicit.c:732 #, c-format msgid "Trying rule prerequisite '%s'.\n" msgstr "Mencoba persyaratan dari aturan '%s'.\n" #: src/implicit.c:733 #, c-format msgid "Trying implicit prerequisite '%s'.\n" msgstr "Mencoba persyaratan implisit '%s'.\n" #: src/implicit.c:772 #, c-format msgid "Found prerequisite '%s' as VPATH '%s'\n" msgstr "Menemukan persyaratan '%s' sebagai VPATH '%s'\n" #: src/implicit.c:786 #, c-format msgid "Looking for a rule with intermediate file '%s'.\n" msgstr "Mencari aturan dengan berkas sementara '%s'.\n" #: src/job.c:370 msgid "Cannot create a temporary file\n" msgstr "Tidak dapat membuat berkas sementara\n" #: src/job.c:548 msgid " (core dumped)" msgstr " (core di-dump)" #: src/job.c:553 msgid " (ignored)" msgstr " (diabaikan)" #: src/job.c:557 src/job.c:1892 msgid "" msgstr "" #: src/job.c:573 #, fuzzy, c-format msgid "%s[%s: %s] Error %d%s" msgstr "%s[%s] Error %d%s" #: src/job.c:662 #, c-format msgid "*** Waiting for unfinished jobs...." msgstr "*** Menunggu pekerjaan yang belum selesai...." #: src/job.c:704 #, c-format msgid "Live child %p (%s) PID %s %s\n" msgstr "Proses anak yang masih berjalan %p (%s) PID %s %s\n" #: src/job.c:706 src/job.c:900 src/job.c:1072 src/job.c:1644 #, c-format msgid " (remote)" msgstr " (remote)" #: src/job.c:898 #, c-format msgid "Reaping winning child %p PID %s %s\n" msgstr "Reaping winning child %p PID %s %s\n" #: src/job.c:899 #, c-format msgid "Reaping losing child %p PID %s %s\n" msgstr "Reaping anak hilang %p PID %s %s\n" #: src/job.c:950 #, c-format msgid "Cleaning up temp batch file %s\n" msgstr "Membersihkan berkas batch sementara %s\n" #: src/job.c:956 #, c-format msgid "Cleaning up temp batch file %s failed (%d)\n" msgstr "Membersihkan berkas batch sementara %s failed (%d)\n" #: src/job.c:1071 #, c-format msgid "Removing child %p PID %s%s from chain.\n" msgstr "Menghilangkan proses anak %p PID %s%s dari rantai.\n" #: src/job.c:1120 #, c-format msgid "Released token for child %p (%s).\n" msgstr "Melepaskan token dari proses anak %p (%s).\n" #: src/job.c:1575 src/job.c:2487 #, c-format msgid "process_easy() failed to launch process (e=%ld)\n" msgstr "process_easy() gagal untuk menjalankan proses (e=%ld)\n" #: src/job.c:1579 src/job.c:2491 #, c-format msgid "" "\n" "Counted %d args in failed launch\n" msgstr "" "\n" "Terhitung %d argumen gagal untuk dijalankan\n" #: src/job.c:1642 #, 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" #: src/job.c:1875 #, c-format msgid "Obtained token for child %p (%s).\n" msgstr "Memperoleh token untuk proses anak %p (%s).\n" #: src/job.c:1902 #, c-format msgid "%s: target '%s' does not exist" msgstr "%s: archive '%s' tidak ada" #: src/job.c:1905 #, c-format msgid "%s: update target '%s' due to: %s" msgstr "" "%s: tidak terdapat aturan untuk membuat target '%s', dibutuhkan oleh %s" #: src/job.c:2108 #, c-format msgid "cannot enforce load limits on this operating system" msgstr "tidak dapat memaksa mencapai batas beban pada sistem operasi ini" #: src/job.c:2110 msgid "cannot enforce load limit: " msgstr "tidak dapat memaksa mencapai batas beban: " #: src/job.c:2200 #, c-format msgid "no more file handles: could not duplicate stdin\n" msgstr "tidak ada lagi file handles: tidak dapat menggandakan stdin\n" #: src/job.c:2212 #, c-format msgid "no more file handles: could not duplicate stdout\n" msgstr "tidak ada lagi file handles: tidak dapat menggandakan stdout\n" #: src/job.c:2226 #, c-format msgid "no more file handles: could not duplicate stderr\n" msgstr "tidak ada lagi file handles: tidak dapat menggandakan stderr\n" #: src/job.c:2241 #, c-format msgid "Could not restore stdin\n" msgstr "Tidak dapat mengembalikan stdin\n" #: src/job.c:2249 #, c-format msgid "Could not restore stdout\n" msgstr "Tidak dapat mengembalikan stdout\n" #: src/job.c:2257 #, c-format msgid "Could not restore stderr\n" msgstr "Tidak dapat mengembalikan stderr\n" #: src/job.c:2520 #, 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" #: src/job.c:2623 #, c-format msgid "spawnvpe: environment space might be exhausted" msgstr "spawnvpe: mungkin kehabisan ruang environment" #: src/job.c:2862 #, c-format msgid "$SHELL changed (was '%s', now '%s')\n" msgstr "$SHELL berubah (sebelumnya '%s', sekarang '%s')\n" #: src/job.c:3300 src/job.c:3485 #, c-format msgid "Creating temporary batch file %s\n" msgstr "Membuat berkas batch sementara %s\n" #: src/job.c:3308 #, c-format msgid "" "Batch file contents:\n" "\t@echo off\n" msgstr "" "Batch file contents:\n" "\t@echo off\n" #: src/job.c:3497 #, c-format msgid "" "Batch file contents:%s\n" "\t%s\n" msgstr "" "Batch file contents:%s\n" "\t%s\n" #: src/job.c:3605 #, 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" #: src/load.c:60 #, c-format msgid "Failed to open global symbol table: %s" msgstr "Failed to open global symbol table: %s" #: src/load.c:97 #, c-format msgid "Loaded object %s is not declared to be GPL compatible" msgstr "Loaded object %s is not declared to be GPL compatible" #: src/load.c:104 #, c-format msgid "Failed to load symbol %s from %s: %s" msgstr "Failed to load symbol %s from %s: %s" #: src/load.c:149 #, c-format msgid "Empty symbol name for load: %s" msgstr "Empty symbol name for load: %s" #: src/load.c:204 #, c-format msgid "Loading symbol %s from %s\n" msgstr "Loading symbol %s from %s\n" #: src/load.c:256 #, c-format msgid "The 'load' operation is not supported on this platform." msgstr "Parallel jobs '-j' tidak didukung dalam platform ini." #: src/main.c:335 msgid "Options:\n" msgstr "Opsi:\n" #: src/main.c:336 msgid " -b, -m Ignored for compatibility.\n" msgstr " -b, -m Diabaikan untuk kompatibilitas.\n" #: src/main.c:338 msgid " -B, --always-make Unconditionally make all targets.\n" msgstr "" " -B, --always-make Membuat semua target secara tidak " "kondisional.\n" #: src/main.c:340 msgid "" " -C DIRECTORY, --directory=DIRECTORY\n" " Change to DIRECTORY before doing anything.\n" msgstr "" " -C DIRECTORI, --directory=DIREKTORI\n" " Pindah ke DIREKTORI sebelum melakukan apapun.\n" #: src/main.c:343 msgid " -d Print lots of debugging information.\n" msgstr " -d Menampilkan banyak informasi debug.\n" #: src/main.c:345 msgid "" " --debug[=FLAGS] Print various types of debugging information.\n" msgstr "" " --debug[=FLAGS] Menampilkan berbagai tipe informasi debug.\n" #: src/main.c:347 msgid "" " -e, --environment-overrides\n" " Environment variables override makefiles.\n" msgstr "" " -e, --environment-overrides\n" " Variabel lingkungan memaksa makefiles.\n" #: src/main.c:350 #, fuzzy msgid "" " -E STRING, --eval=STRING Evaluate STRING as a makefile statement.\n" msgstr "" " --eval=STRING Evaluate STRING as a makefile statement.\n" #: src/main.c:352 msgid "" " -f FILE, --file=FILE, --makefile=FILE\n" " Read FILE as a makefile.\n" msgstr "" " -f BERKAS, --file=BERKAS, --makefile=BERKAS\n" " Baca BERKAS sebagai sebuah makefile.\n" #: src/main.c:355 msgid " -h, --help Print this message and exit.\n" msgstr " -h, --help Tampilkan pesan ini dan keluar.\n" #: src/main.c:357 msgid " -i, --ignore-errors Ignore errors from recipes.\n" msgstr "" " -i, --ignore-errors Abaikan kesalahan dari perintah yang " "dijalankan.\n" #: src/main.c:359 msgid "" " -I DIRECTORY, --include-dir=DIRECTORY\n" " Search DIRECTORY for included makefiles.\n" msgstr "" " -I DIREKTORI, --include-dir=DIREKTORI\n" " Cari di DIREKTORI untuk makefile yang " "disertakan.\n" #: src/main.c:362 msgid "" " -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no " "arg.\n" msgstr "" " -j [N], --jobs[=N] Ijinkan N kerja secara bersamaan. Kerja tidak " "terhingga jika tidak diberikan argumen.\n" #: src/main.c:364 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" #: src/main.c:366 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" " Jangan menjalankan multiple pekerjaan kecuali " "beban dibawah N.\n" #: src/main.c:369 msgid "" " -L, --check-symlink-times Use the latest mtime between symlinks and " "target.\n" msgstr "" " -L, --check-symlink-times Gunakan waktu mtime terbaru diantara symlinks " "dan target.\n" #: src/main.c:371 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" " Jangan menjalankan perintah apapun; tampilkan " "saja apa yang akan dikerjakan.\n" #: src/main.c:374 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=BERKAS, --assume-old=BERKAS\n" " Pertimbangkan BERKAS sudah sangat tua dan " "jangan membuatnya lagi.\n" #: src/main.c:377 msgid "" " -O[TYPE], --output-sync[=TYPE]\n" " Synchronize output of parallel jobs by TYPE.\n" msgstr "" " -O[TYPE], --output-sync[=TYPE]\n" " Synchronize output of parallel jobs by TYPE.\n" #: src/main.c:380 msgid " -p, --print-data-base Print make's internal database.\n" msgstr " -p, --print-data-base Tampilkan basis data internal make.\n" #: src/main.c:382 msgid "" " -q, --question Run no recipe; exit status says if up to " "date.\n" msgstr "" " -q, --question Tidak menjalankan perintah. Mengeluarkan " "status saja dan mengatakan up to date.\n" #: src/main.c:384 msgid " -r, --no-builtin-rules Disable the built-in implicit rules.\n" msgstr "" " -r, --no-builtin-rules Aturan implisit bawaan tidak digunakan.\n" #: src/main.c:386 msgid " -R, --no-builtin-variables Disable the built-in variable settings.\n" msgstr "" " -R, --no-builtin-variables Non-aktifkan konfigurasi variabel bawaan.\n" #: src/main.c:388 msgid " -s, --silent, --quiet Don't echo recipes.\n" msgstr " -s, --silent, --quiet Jangan menampilkan perintah.\n" #: src/main.c:390 #, fuzzy msgid " --no-silent Echo recipes (disable --silent mode).\n" msgstr "" " -q, --question Tidak menjalankan perintah. Mengeluarkan " "status saja dan mengatakan up to date.\n" #: src/main.c:392 msgid "" " -S, --no-keep-going, --stop\n" " Turns off -k.\n" msgstr "" " -S, --no-keep-going, --stop\n" " Matikan opsi -k.\n" #: src/main.c:395 msgid " -t, --touch Touch targets instead of remaking them.\n" msgstr "" " -t, --touch Sentuh target dari pada membuat kembali.\n" #: src/main.c:397 msgid " --trace Print tracing information.\n" msgstr "" " --trace Menampilkan banyak informasi debug.\n" #: src/main.c:399 msgid "" " -v, --version Print the version number of make and exit.\n" msgstr " -v, --version Tampilkan versi dari make dan keluar.\n" #: src/main.c:401 msgid " -w, --print-directory Print the current directory.\n" msgstr " -w, --print-directory Tampilkan directory saat ini.\n" #: src/main.c:403 msgid "" " --no-print-directory Turn off -w, even if it was turned on " "implicitly.\n" msgstr "" " --no-print-directory Matikan opsi -w, walaupun opsi ini diaktifkan " "secara implisit.\n" #: src/main.c:405 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=BERKAS, --new-file=BERKAS, --assume-new=BERKAS\n" " Pertimbangkan BERKAS sebagai sebuah berkas " "baru.\n" #: src/main.c:408 msgid "" " --warn-undefined-variables Warn when an undefined variable is " "referenced.\n" msgstr "" " --warn-undefined-variables Peringatkan akan adanya variabel yang tidak " "terdefinisi yang direferensikan.\n" #: src/main.c:671 #, c-format msgid "empty string invalid as file name" msgstr "`string' kosong tidak valid sebagai nama file" #: src/main.c:754 #, c-format msgid "unknown debug level specification '%s'" msgstr "spesifikasi tingkat debug tidak diketahui '%s'" #: src/main.c:794 #, c-format msgid "unknown output-sync type '%s'" msgstr "unknown output-sync type '%s'" #: src/main.c:849 #, 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" #: src/main.c:856 #, c-format msgid "" "\n" "Unhandled exception filter called from program %s\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" msgstr "" "\n" "Exception filter tidak dapat diatasi dari program %s\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" #: src/main.c:864 #, c-format msgid "Access violation: write operation at address 0x%p\n" msgstr "Akses dilanggar: operasi tulis pada alamat 0x%p\n" #: src/main.c:865 #, c-format msgid "Access violation: read operation at address 0x%p\n" msgstr "Akses dilanggar: operasi baca pada alamat 0x%p\n" #: src/main.c:941 src/main.c:956 #, c-format msgid "find_and_set_shell() setting default_shell = %s\n" msgstr "find_and_set_shell() diset pada default_shell = %s\n" #: src/main.c:1009 #, 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" #: src/main.c:1609 #, c-format 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." #: src/main.c:1617 #, fuzzy, c-format msgid "warning: -j%d forced in submake: resetting jobserver mode." msgstr "" "Peringatan: -jN dipaksakan dalam submake: non-aktifkan mode server pekerja." #: src/main.c:1781 #, c-format msgid "Makefile from standard input specified twice." msgstr "Makefile dari standard input dispesifikasikan dua kali." #: src/main.c:1819 src/vmsjobs.c:1248 msgid "fopen (temporary file)" msgstr "fopen (berkas sementara)" #: src/main.c:1825 msgid "fwrite (temporary file)" msgstr "fwrite (berkas sementara)" #: src/main.c:2004 #, fuzzy, c-format msgid "warning: -j%d forced in makefile: resetting jobserver mode." msgstr "" "Peringatan: -jN dipaksakan dalam submake: non-aktifkan mode server pekerja." #: src/main.c:2068 #, c-format msgid "Parallel jobs (-j) are not supported on this platform." msgstr "Parallel jobs (-j) tidak didukung dalam platform ini." #: src/main.c:2069 #, c-format msgid "Resetting to single job (-j1) mode." msgstr "Mereset kembali ke mode satu job (-j1)." #: src/main.c:2109 #, c-format msgid "Symbolic links not supported: disabling -L." msgstr "Symbolic links tidak didukung: menonaktifkan opsi -L." #: src/main.c:2190 #, c-format msgid "Updating makefiles....\n" msgstr "Memperbarui makefiles....\n" #: src/main.c:2226 #, c-format msgid "Makefile '%s' might loop; not remaking it.\n" msgstr "Makefile '%s' mungkin berupa loop; tidak membuat lagi.\n" #: src/main.c:2303 #, c-format msgid "Failed to remake makefile '%s'." msgstr "Gagal membuat lagi makefile '%s'." #: src/main.c:2323 #, c-format msgid "Included makefile '%s' was not found." msgstr "Makefile yang dimasukan '%s' tidak ditemukan." #: src/main.c:2328 #, c-format msgid "Makefile '%s' was not found" msgstr "Makefile '%s' tidak ditemukan" #: src/main.c:2394 #, c-format msgid "Couldn't change back to original directory." msgstr "Tidak dapat kembali ke direktori asal." #: src/main.c:2402 #, c-format msgid "Re-executing[%u]:" msgstr "Menjalankan kembali[%u]:" #: src/main.c:2522 msgid "unlink (temporary file): " msgstr "unlink (berkas sementara): " #: src/main.c:2555 #, c-format msgid ".DEFAULT_GOAL contains more than one target" msgstr ".DEFAULT_GOAL berisi lebih dari satu target" #: src/main.c:2579 #, c-format msgid "No targets" msgstr "Tidak ada targets" #: src/main.c:2581 #, c-format msgid "No targets specified and no makefile found" msgstr "Target tidak dispesifikasikan dan tidak ditemukan makefile" #: src/main.c:2586 #, c-format msgid "Updating goal targets....\n" msgstr "Memperbarui tujuan target....\n" #: src/main.c:2610 #, c-format msgid "warning: Clock skew detected. Your build may be incomplete." msgstr "" "Peringatan: Clock skew terdeteksi. Pembuatan anda mungkin tidak sempurna" #: src/main.c:2804 #, c-format msgid "Usage: %s [options] [target] ...\n" msgstr "Penggunaan: %s [opsi] [target] ...\n" #: src/main.c:2810 #, c-format msgid "" "\n" "This program built for %s\n" msgstr "" "\n" "Program ini dibuat untuk %s\n" #: src/main.c:2812 #, c-format msgid "" "\n" "This program built for %s (%s)\n" msgstr "" "\n" "Program ini dibuat untuk %s (%s)\n" #: src/main.c:2815 #, c-format msgid "Report bugs to \n" msgstr "Laporkan bugs kepada \n" #: src/main.c:2901 #, c-format msgid "the '%s%s' option requires a non-empty string argument" msgstr "opsi '%s%s' membutuhkan sebuah argument string yang tidak kosong" #: src/main.c:2965 #, c-format msgid "the '-%c' option requires a positive integer argument" msgstr "opsi '-%c' membutuhkan sebuah argument `string' yang tidak kosong" #: src/main.c:3363 #, c-format msgid "%sBuilt for %s\n" msgstr "%sAplikasi ini dibuat untuk %s\n" #: src/main.c:3365 #, c-format msgid "%sBuilt for %s (%s)\n" msgstr "%sAplikasi ini dibuat untuk %s (%s)\n" #: src/main.c:3376 #, c-format msgid "" "%sLicense GPLv3+: GNU GPL version 3 or later \n" "%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 "" "%sLisensi GPLv3+: GNU GPL versi 3 atau sesudahnya \n" "%sIni adalah aplikasi gratis: anda bebas untuk mengubah dan menyebarkannya.\n" "%sTidak ada JAMINAN, sepanjang diperbolehkan oleh hukum.\n" #: src/main.c:3397 #, c-format msgid "" "\n" "# Make data base, printed on %s" msgstr "" "\n" "# Membuat basis data, ditampilkan %s" #: src/main.c:3407 #, c-format msgid "" "\n" "# Finished Make data base on %s\n" msgstr "" "\n" "# Selesai membuat basis data %s\n" #: src/misc.c:643 #, c-format msgid "%s: user %lu (real %lu), group %lu (real %lu)\n" msgstr "%s: pengguna %lu (ril %lu), grup %lu (ril %lu)\n" #: src/misc.c:664 msgid "Initialized access" msgstr "Akses terinisialisasi" #: src/misc.c:743 msgid "User access" msgstr "Akses pengguna" #: src/misc.c:791 msgid "Make access" msgstr "Buat akses" #: src/misc.c:825 msgid "Child access" msgstr "Akses anak" #: src/output.c:97 #, c-format msgid "%s: Entering an unknown directory\n" msgstr "%s: Memasuki sebuah direktori yang tidak diketahui\n" #: src/output.c:99 #, c-format msgid "%s: Leaving an unknown directory\n" msgstr "%s: Meninggalkan sebuah direktori yang tidak diketahui\n" #: src/output.c:102 #, c-format msgid "%s: Entering directory '%s'\n" msgstr "%s: Memasuki direktori '%s'\n" #: src/output.c:104 #, c-format msgid "%s: Leaving directory '%s'\n" msgstr "%s: Meninggalkan direktori '%s'\n" #: src/output.c:108 #, c-format msgid "%s[%u]: Entering an unknown directory\n" msgstr "%s[%u]: Memasuki sebuah direktori yang tidak diketahui\n" #: src/output.c:110 #, c-format msgid "%s[%u]: Leaving an unknown directory\n" msgstr "%s[%u]: Meninggalkan sebuah direktori yang tidak diketahui\n" #: src/output.c:113 #, c-format msgid "%s[%u]: Entering directory '%s'\n" msgstr "%s[%u]: Memasuki direktori '%s'\n" #: src/output.c:115 #, c-format msgid "%s[%u]: Leaving directory '%s'\n" msgstr "%s[%u]: Meninggalkan direktori '%s'\n" #: src/output.c:442 src/output.c:444 #, fuzzy, c-format msgid "write error: stdout" msgstr "error menulis: %s" #: src/output.c:624 msgid ". Stop.\n" msgstr ". Berhenti.\n" #: src/output.c:658 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" #: src/output.c:667 #, c-format msgid "%s: %s" msgstr "%s: %s" #: src/output.h:62 #, c-format msgid "-O[TYPE] (--output-sync[=TYPE]) is not configured for this build." msgstr "-O[TYPE] (--output-sync[=TYPE]) is not configured for this build." #: src/posixos.c:90 msgid "creating jobs pipe" msgstr "membuat pipa pekerjaan" #: src/posixos.c:98 src/posixos.c:251 #, fuzzy msgid "duping jobs pipe" msgstr "membuat pipa pekerjaan" #: src/posixos.c:104 msgid "init jobserver pipe" msgstr "inisiasi pipa server pekerja" #: src/posixos.c:119 #, fuzzy, c-format msgid "internal error: invalid --jobserver-auth string '%s'" msgstr "internal error: tidak valid --jobserver-fds string '%s'" #: src/posixos.c:122 #, c-format msgid "Jobserver client (fds %d,%d)\n" msgstr "Jobserver client (fds %d,%d)\n" #: src/posixos.c:138 #, fuzzy msgid "jobserver pipeline" msgstr "inisiasi pipa server pekerja" #: src/posixos.c:186 msgid "write jobserver" msgstr "menulis jobserver" #: src/posixos.c:300 #, c-format msgid "job server shut down" msgstr "" #: src/posixos.c:303 #, fuzzy msgid "pselect jobs pipe" msgstr "membaca pipa pekerjaan" #: src/posixos.c:319 src/posixos.c:433 msgid "read jobs pipe" msgstr "membaca pipa pekerjaan" #: src/read.c:181 #, c-format msgid "Reading makefiles...\n" msgstr "Membaca makefiles...\n" #: src/read.c:336 #, c-format msgid "Reading makefile '%s'" msgstr "Membaca makefile '%s'" #: src/read.c:338 #, c-format msgid " (no default goal)" msgstr " (tidak terdapat tujuan baku)" #: src/read.c:340 #, c-format msgid " (search path)" msgstr " (jalur pencarian)" #: src/read.c:342 #, c-format msgid " (don't care)" msgstr " (tidak peduli)" #: src/read.c:344 #, c-format msgid " (no ~ expansion)" msgstr " (tidak terdapat ekspansi tilde ~)" #: src/read.c:655 #, c-format msgid "Skipping UTF-8 BOM in makefile '%s'\n" msgstr "Skipping UTF-8 BOM in makefile '%s'\n" #: src/read.c:658 #, c-format msgid "Skipping UTF-8 BOM in makefile buffer\n" msgstr "Skipping UTF-8 BOM in makefile buffer\n" #: src/read.c:787 #, c-format msgid "invalid syntax in conditional" msgstr "sintak salah dalam kondisional" #: src/read.c:960 #, c-format msgid "%s: failed to load" msgstr "%s: failed to load" #: src/read.c:986 #, c-format msgid "recipe commences before first target" msgstr "perintah dijalankan sebelum target pertama" #: src/read.c:1035 #, c-format msgid "missing rule before recipe" msgstr "hilang aturan sebelum menjalankan perintah" #: src/read.c:1136 #, fuzzy, c-format msgid "missing separator (did you mean TAB instead of 8 spaces?)" msgstr " (apakah yang anda maksud TAB dari pada 8 buah spasi?)" #: src/read.c:1138 #, fuzzy, c-format msgid "missing separator" msgstr "pemisah %s hilang" #: src/read.c:1283 #, c-format msgid "missing target pattern" msgstr "pola target hilang" #: src/read.c:1285 #, c-format msgid "multiple target patterns" msgstr "pola target banyak" #: src/read.c:1289 #, c-format msgid "target pattern contains no '%%'" msgstr "pola target tidak memiliki '%%'" #: src/read.c:1404 #, c-format msgid "missing 'endif'" msgstr "hilang 'endif'" #: src/read.c:1443 src/read.c:1488 src/variable.c:1600 #, c-format msgid "empty variable name" msgstr "nama variabel kosong" #: src/read.c:1478 #, c-format msgid "extraneous text after 'define' directive" msgstr "Kelebihan text sesudah 'endef' directive" #: src/read.c:1503 #, c-format msgid "missing 'endef', unterminated 'define'" msgstr "hilang 'endef', tidak diselesaikan 'define'" #: src/read.c:1531 #, c-format msgid "extraneous text after 'endef' directive" msgstr "kelebihan text sesudah 'endef' directive" #: src/read.c:1603 #, c-format msgid "extraneous text after '%s' directive" msgstr "kelebihan text sesudah '%s' directive" #: src/read.c:1604 #, c-format msgid "extraneous '%s'" msgstr "kelebihan '%s'" #: src/read.c:1632 #, c-format msgid "only one 'else' per conditional" msgstr "hanya satu 'else' dalam setiap kondisi" #: src/read.c:1908 #, c-format msgid "Malformed target-specific variable definition" msgstr "Definisi variable target-specific memiliki format yang salah" #: src/read.c:1968 #, c-format msgid "prerequisites cannot be defined in recipes" msgstr "persyaratan tidak dapat didefinisikan dalam script perintah" #: src/read.c:1986 #, c-format msgid "grouped targets must provide a recipe" msgstr "" #: src/read.c:2029 #, c-format msgid "mixed implicit and static pattern rules" msgstr "aturan pola implisit dan static tercampur" #: src/read.c:2052 #, c-format msgid "mixed implicit and normal rules" msgstr "aturan implisit dan aturan normal tercampur" #: src/read.c:2107 #, c-format msgid "target '%s' doesn't match the target pattern" msgstr "target '%s' tidak cocok dengan pola target" #: src/read.c:2122 src/read.c:2168 #, c-format msgid "target file '%s' has both : and :: entries" msgstr "target berkas '%s' keduanya memiliki masukan : dan ::" #: src/read.c:2128 #, c-format msgid "target '%s' given more than once in the same rule" msgstr "target '%s' memberikan lebih dari sekali dalam aturan sama." #: src/read.c:2138 #, c-format msgid "warning: overriding recipe for target '%s'" msgstr "peringatan: memaksa perintah untuk target '%s'" #: src/read.c:2141 #, c-format msgid "warning: ignoring old recipe for target '%s'" msgstr "peringatan: menghiraukan perintah lama untuk target '%s'" #: src/read.c:2254 #, fuzzy, c-format msgid "*** mixed implicit and normal rules: deprecated syntax" msgstr "aturan implisit dan aturan normal tercampur" #: src/read.c:2271 #, fuzzy, c-format msgid "warning: overriding group membership for target '%s'" msgstr "peringatan: memaksa perintah untuk target '%s'" #: src/read.c:2636 #, c-format msgid "warning: NUL character seen; rest of line ignored" msgstr "peringatan: karakter NUL terlihat; baris selanjutnya dihiraukan" #: src/remake.c:226 #, c-format msgid "Nothing to be done for '%s'." msgstr "Tidak ada yang harus dilakukan untuk '%s'." #: src/remake.c:227 #, c-format msgid "'%s' is up to date." msgstr "'%s' sudah baru." #: src/remake.c:323 #, c-format msgid "Pruning file '%s'.\n" msgstr "Pruning file '%s'.\n" #: src/remake.c:389 #, 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" #: src/remake.c:399 #, c-format msgid "%sNo rule to make target '%s'%s" msgstr "%sTidak terdapat aturan untuk membuat target '%s'%s" #: src/remake.c:425 #, c-format msgid "Considering target file '%s'.\n" msgstr "Mempertimbangkan berkas target '%s'.\n" #: src/remake.c:432 #, c-format msgid "Recently tried and failed to update file '%s'.\n" msgstr "Baru saja dicoba dan gagal untuk memperbarui berkas '%s'.\n" #: src/remake.c:444 #, c-format msgid "File '%s' was considered already.\n" msgstr "Berkas '%s' baru saja dipertimbangkan.\n" #: src/remake.c:454 #, c-format msgid "Still updating file '%s'.\n" msgstr "Sedang memperbarui berkas '%s'.\n" #: src/remake.c:457 #, c-format msgid "Finished updating file '%s'.\n" msgstr "Selesai memperbarui berkas '%s'.\n" #: src/remake.c:486 #, c-format msgid "File '%s' does not exist.\n" msgstr "Berkas '%s' tidak ada.\n" #: src/remake.c:494 #, c-format msgid "" "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp" msgstr "" "*** Peringatan: .LOW_RESOLUTION_TIME berkas '%s' memiliki sebuah penanda " "waktu dengan resolusi tinggi" #: src/remake.c:507 src/remake.c:1039 #, c-format msgid "Found an implicit rule for '%s'.\n" msgstr "Ditemukan sebuah aturan implisit untuk '%s'.\n" #: src/remake.c:509 src/remake.c:1041 #, c-format msgid "No implicit rule found for '%s'.\n" msgstr "Tidak terdapat aturan implisit untuk membuat '%s'.\n" #: src/remake.c:515 #, c-format msgid "Using default recipe for '%s'.\n" msgstr "Menggunakan perintah baku untuk '%s'.\n" #: src/remake.c:549 src/remake.c:1088 #, c-format msgid "Circular %s <- %s dependency dropped." msgstr "Ketergantungan %s <- %s melingkar dijatuhkan." #: src/remake.c:674 #, c-format msgid "Finished prerequisites of target file '%s'.\n" msgstr "Selesai melakukan semua persyaratan untuk berkas target '%s'.\n" #: src/remake.c:680 #, c-format msgid "The prerequisites of '%s' are being made.\n" msgstr "Persyaratan untuk membuat '%s' sedang dibuat.\n" #: src/remake.c:694 #, c-format msgid "Giving up on target file '%s'.\n" msgstr "Menyerah untuk membuat target berkas '%s'.\n" #: src/remake.c:699 #, c-format msgid "Target '%s' not remade because of errors." msgstr "Target '%s' tidak dibuat lagi karena ada errors." #: src/remake.c:751 #, c-format msgid "Prerequisite '%s' is order-only for target '%s'.\n" msgstr "Persyaratan untuk '%s' adalah order-only untuk target '%s'.\n" #: src/remake.c:756 #, c-format msgid "Prerequisite '%s' of target '%s' does not exist.\n" msgstr "Persyaratan untuk '%s' untuk target '%s' tidak ada.\n" #: src/remake.c:761 #, c-format msgid "Prerequisite '%s' is newer than target '%s'.\n" msgstr "Persyaratan untuk '%s' lebih baru dari pada target '%s'.\n" #: src/remake.c:764 #, c-format msgid "Prerequisite '%s' is older than target '%s'.\n" msgstr "Persyaratan untuk '%s' lebih tua dari pada target '%s'.\n" #: src/remake.c:782 #, c-format msgid "Target '%s' is double-colon and has no prerequisites.\n" msgstr "Target '%s' merupakan kolon-ganda dan tidak memiliki syarat.\n" #: src/remake.c:789 #, c-format msgid "No recipe for '%s' and no prerequisites actually changed.\n" msgstr "Tidak ada perintah untuk '%s' dan persyaratan tidak berubah.\n" #: src/remake.c:794 #, c-format msgid "Making '%s' due to always-make flag.\n" msgstr "Membuat '%s' karena adanya tanda always-make.\n" #: src/remake.c:802 #, c-format msgid "No need to remake target '%s'" msgstr "Tidak perlu membuat lagi target '%s'" #: src/remake.c:804 #, c-format msgid "; using VPATH name '%s'" msgstr "; menggunakan nama VPATH '%s'" #: src/remake.c:824 #, c-format msgid "Must remake target '%s'.\n" msgstr "Harus membuat lagi target '%s'.\n" #: src/remake.c:830 #, c-format msgid " Ignoring VPATH name '%s'.\n" msgstr " Mengabaikan nama VPATH '%s'.\n" #: src/remake.c:839 #, c-format msgid "Recipe of '%s' is being run.\n" msgstr "Perintah dari '%s' sedang dijalankan.\n" #: src/remake.c:846 #, c-format msgid "Failed to remake target file '%s'.\n" msgstr "Gagal membuat lagi target berkas '%s'.\n" #: src/remake.c:849 #, c-format msgid "Successfully remade target file '%s'.\n" msgstr "Sukses membuat kembali target berkas '%s'.\n" #: src/remake.c:852 #, 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" #: src/remake.c:1047 #, c-format msgid "Using default commands for '%s'.\n" msgstr "Menggunakan perintah baku untuk '%s'.\n" #: src/remake.c:1422 #, c-format msgid "Warning: File '%s' has modification time %s s in the future" msgstr "Peringatan: Berkas '%s' memiliki waktu modifikasi %s s kedepan" #: src/remake.c:1662 #, c-format msgid ".LIBPATTERNS element '%s' is not a pattern" msgstr ".LIBPATTERNS elemen '%s' bukan merupakan sebuah pattern" #: src/remote-cstms.c:122 #, c-format msgid "Customs won't export: %s\n" msgstr "Custom tidak akan men-export: %s\n" #: src/rule.c:289 #, c-format msgid "warning: ignoring prerequisites on suffix rule definition" msgstr "" #: src/rule.c:530 msgid "" "\n" "# Implicit Rules" msgstr "" "\n" "# Aturan implisit." #: src/rule.c:545 msgid "" "\n" "# No implicit rules." msgstr "" "\n" "# Tidak ada aturan implisit." #: src/rule.c:548 #, fuzzy, c-format msgid "" "\n" "# %u implicit rules, %u (%.1f%%) terminal." msgstr "" "\n" "# %u aturan implisit, %u" #: src/rule.c:557 #, c-format msgid "BUG: num_pattern_rules is wrong! %u != %u" msgstr "BUG: num_pattern_rules salah! %u != %u" #: src/signame.c:84 msgid "unknown signal" msgstr "sinyal tidak diketahui" #: src/signame.c:92 msgid "Hangup" msgstr "Hangup" #: src/signame.c:95 msgid "Interrupt" msgstr "Interupsi" #: src/signame.c:98 msgid "Quit" msgstr "Berhenti" #: src/signame.c:101 msgid "Illegal Instruction" msgstr "Instruksi Tidak Legal" #: src/signame.c:104 msgid "Trace/breakpoint trap" msgstr "Penangkap trace/breakpoint" #: src/signame.c:109 msgid "Aborted" msgstr "Dibatalkan" #: src/signame.c:112 msgid "IOT trap" msgstr "Penangkap IOT" #: src/signame.c:115 msgid "EMT trap" msgstr "Penangkap EMT" #: src/signame.c:118 msgid "Floating point exception" msgstr "Eksepsi titik pecahan" #: src/signame.c:121 msgid "Killed" msgstr "Terbunuh" #: src/signame.c:124 msgid "Bus error" msgstr "Bus error" #: src/signame.c:127 msgid "Segmentation fault" msgstr "Kesalahan segmentasi" #: src/signame.c:130 msgid "Bad system call" msgstr "Panggilan sistem buruk" #: src/signame.c:133 msgid "Broken pipe" msgstr "Pipa rusak" #: src/signame.c:136 msgid "Alarm clock" msgstr "Alarm" #: src/signame.c:139 msgid "Terminated" msgstr "Dimatikan" #: src/signame.c:142 msgid "User defined signal 1" msgstr "Sinyal definisi pengguna 1" #: src/signame.c:145 msgid "User defined signal 2" msgstr "Sinyal definisi pengguna 2" #: src/signame.c:150 src/signame.c:153 msgid "Child exited" msgstr "Proses anak berakhir" #: src/signame.c:156 msgid "Power failure" msgstr "Listrik bermasalah" #: src/signame.c:159 msgid "Stopped" msgstr "Dihentikkan" #: src/signame.c:162 msgid "Stopped (tty input)" msgstr "Dihentikan (masukkan tty)" #: src/signame.c:165 msgid "Stopped (tty output)" msgstr "Dihentikan (keluaran tty)" #: src/signame.c:168 msgid "Stopped (signal)" msgstr "Dihentikan (sinyal)" #: src/signame.c:171 msgid "CPU time limit exceeded" msgstr "Batas waktu CPU telah terlampaui" #: src/signame.c:174 msgid "File size limit exceeded" msgstr "Batas maksimal ukuran berkas terlampaui" #: src/signame.c:177 msgid "Virtual timer expired" msgstr "Pewaktu maya habis" #: src/signame.c:180 msgid "Profiling timer expired" msgstr "Pewaktu profiling habis" #: src/signame.c:186 msgid "Window changed" msgstr "Jendela berubah" #: src/signame.c:189 msgid "Continued" msgstr "Dilanjutkan" #: src/signame.c:192 msgid "Urgent I/O condition" msgstr "Kondisi I/O penting" #: src/signame.c:199 src/signame.c:208 msgid "I/O possible" msgstr "I/O mungkin" #: src/signame.c:202 msgid "SIGWIND" msgstr "SIGWIND" #: src/signame.c:205 msgid "SIGPHONE" msgstr "SIGPHONE" #: src/signame.c:211 msgid "Resource lost" msgstr "Resource hilang" #: src/signame.c:214 msgid "Danger signal" msgstr "Sinyal bahaya" #: src/signame.c:217 msgid "Information request" msgstr "Permintaan informasi" #: src/signame.c:220 msgid "Floating point co-processor not available" msgstr "co-processor titik pecahan tidak tersedia" #: src/strcache.c:274 #, c-format msgid "" "\n" "%s No strcache buffers\n" msgstr "" "\n" "%s # dari buffer strcache: \n" #: src/strcache.c:304 #, c-format msgid "" "\n" "%s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu " "B\n" msgstr "" "\n" "%s strcache free: %lu total = (%lu) / mak = %lu / min = %lu / rata-rata = " "%lu\n" #: src/strcache.c:308 #, fuzzy, c-format msgid "" "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B\n" msgstr "" "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %hu B\n" #: src/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" #: src/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" #: src/strcache.c:326 #, c-format msgid "" "\n" "%s strcache performance: lookups = %lu / hit rate = %lu%%\n" msgstr "" "\n" "%s strcache performance: lookups = %lu / hit rate = %lu%%\n" #: src/strcache.c:328 msgid "" "# hash-table stats:\n" "# " msgstr "" "# berkas statistik hash-table:\n" "# " #: src/variable.c:1653 msgid "automatic" msgstr "otomatis" #: src/variable.c:1656 msgid "default" msgstr "baku" #: src/variable.c:1659 msgid "environment" msgstr "lingkungan" #: src/variable.c:1662 msgid "makefile" msgstr "makefile" #: src/variable.c:1665 msgid "environment under -e" msgstr "lingkungan dibawah opsi -e" #: src/variable.c:1668 msgid "command line" msgstr "baris perintah" #: src/variable.c:1671 msgid "'override' directive" msgstr "'override' direktif" #: src/variable.c:1682 #, c-format msgid " (from '%s', line %lu)" msgstr " (dari '%s', baris %lu)" #: src/variable.c:1745 msgid "# variable set hash-table stats:\n" msgstr "# statistik variable set hash-table:\n" #: src/variable.c:1756 msgid "" "\n" "# Variables\n" msgstr "" "\n" "# Variabel\n" #: src/variable.c:1760 msgid "" "\n" "# Pattern-specific Variable Values" msgstr "" "\n" "# Nilai Variabel Pola-Spesifik" #: src/variable.c:1774 msgid "" "\n" "# No pattern-specific variable values." msgstr "" "\n" "# Tidak terdapat nilai variabel pola-spesifik" #: src/variable.c:1776 #, c-format msgid "" "\n" "# %u pattern-specific variable values" msgstr "" "\n" "# %u nilai variabel pola-spesifik" #: src/variable.h:229 #, c-format msgid "warning: undefined variable '%.*s'" msgstr "peringatan: variabel '%.*s' tidak terdefinisi" #: src/vmsfunctions.c:91 #, c-format msgid "sys$search() failed with %d\n" msgstr "sys$search() gagal dengan kode %d\n" #: src/vmsjobs.c:244 #, 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" #: src/vmsjobs.c:681 #, c-format msgid "BUILTIN CD %s\n" msgstr "BAWAAN CD %s\n" #: src/vmsjobs.c:1224 #, c-format msgid "DCL: %s\n" msgstr "" #: src/vmsjobs.c:1284 #, c-format msgid "Append output to %s\n" msgstr "Meneruskan output ke %s\n" #: src/vmsjobs.c:1309 #, c-format msgid "Append %.*s and cleanup\n" msgstr "Append %.*s and cleanup\n" #: src/vmsjobs.c:1322 #, c-format msgid "Executing %s instead\n" msgstr "Menjalankan perintah %s\n" #: src/vpath.c:603 msgid "" "\n" "# VPATH Search Paths\n" msgstr "" "\n" "# VPATH Jalur Pencarian\n" #: src/vpath.c:620 msgid "# No 'vpath' search paths." msgstr "# Tidak ada 'vpath' dalam jalur pencarian." #: src/vpath.c:622 #, c-format msgid "" "\n" "# %u 'vpath' search paths.\n" msgstr "" "\n" "# %u 'vpath' jalur pencarian.\n" #: src/vpath.c:625 msgid "" "\n" "# No general ('VPATH' variable) search path." msgstr "" "\n" "# Tidak ada ('VPATH' variabel) umum dalam jalur pencarian." #: src/vpath.c:631 msgid "" "\n" "# General ('VPATH' variable) search path:\n" "# " msgstr "" "\n" "# Jalur pencarian umum untuk variabel 'VPATH':\n" "# " #: src/w32/w32os.c:44 #, c-format msgid "Jobserver slots limited to %d\n" msgstr "Jobserver slots limited to %d\n" #: src/w32/w32os.c:60 #, c-format msgid "creating jobserver semaphore: (Error %ld: %s)" msgstr "creating jobserver semaphore: (Error %ld: %s)" #: src/w32/w32os.c:79 #, 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)" #: src/w32/w32os.c:82 #, c-format msgid "Jobserver client (semaphore %s)\n" msgstr "Jobserver client (semaphore %s)\n" #: src/w32/w32os.c:123 #, c-format msgid "release jobserver semaphore: (Error %ld: %s)" msgstr "release jobserver semaphore: (Error %ld: %s)" #: src/w32/w32os.c:194 #, 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 "%s: Command not found" #~ msgstr "%s: Perintah tidak ada" #~ msgid "%s: Shell program not found" #~ msgstr "%s: Shell program tidak ditemukan" #~ msgid "internal error: multiple --sync-mutex options" #~ msgstr "internal error: opsi --sync-mutex lebih dari satu" #~ msgid "%s is suspending for 30 seconds..." #~ msgstr "%s dihentikan selama 30 detik..." #~ msgid "done sleep(30). Continuing.\n" #~ msgstr "selesai tidur(30). Melanjutkan.\n" #~ msgid "internal error: multiple --jobserver-fds options" #~ msgstr "internal error: opsi --jobserver-fds lebih dari satu" #~ msgid "dup jobserver" #~ msgstr "dup server pekerja" #~ msgid "Unknown error %d" #~ msgstr "Kesalahan tidak diketahui %d" #~ msgid "virtual memory exhausted" #~ msgstr "Kehabisan memori maya" #~ msgid "write error" #~ msgstr "error menulis" #~ msgid "Warning: File '%s' has modification time in the future" #~ msgstr "Peringatan: Berkas '%s' memiliki waktu modifikasi dimasa depan" #~ msgid " terminal." #~ msgstr " terminal." #~ 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' !" #~ msgid "*** [%s] Error 0x%x (ignored)" #~ msgstr "*** [%s] Error 0x%x (diabaikan)" #~ msgid "process_easy() failed failed to launch process (e=%ld)\n" #~ msgstr "process_easy() gagal untuk menjalankan proses (e=%ld)\n" #~ 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" #~ "%sPARTICULAR PURPOSE.\n" #~ msgstr "" #~ "%sIni adalah piranti lunak bebas; lihat kode program untuk syarat " #~ "penyalinan.\n" #~ "%sTIDAK TERDAPAT GARANSI; bahkan untuk PENJUALAN atau \n" #~ "%sKESESUAIAN UNTUK TUJUAN TERTENTU.\n" #~ msgid "extraneous `endef'" #~ msgstr "kelebihan `endef'" #~ msgid "empty `override' directive" #~ msgstr "directive `override' kosong" #~ msgid "invalid `override' directive" #~ msgstr "directive `override' tidak valid" #~ msgid "" #~ "\n" #~ "%s # of strings in strcache: %d\n" #~ msgstr "" #~ "\n" #~ "%s # dari string dalam strcache: %d\n" #~ msgid "-warning, CTRL-Y will leave sub-process(es) around.\n" #~ msgstr "-warning, CTRL-Y akan meninggalkan sub-process(es).\n" #~ msgid "" #~ "\n" #~ "# No files." #~ msgstr "" #~ "\n" #~ "# Tidak terdapat files." #~ msgid "" #~ "\n" #~ "# %u files in %u hash buckets.\n" #~ msgstr "" #~ "\n" #~ "# %u files dalam %u hash buckets.\n" #~ msgid "# average %.3f files per bucket, max %u files in one bucket.\n" #~ msgstr "" #~ "# rata - rata %.3f files per bucket, maksimal %u files dalam satu " #~ "bucket.\n" #~ msgid "the `word' function takes a positive index argument" #~ msgstr "fungsi `word' mengambil sebuah argumen index yang positif" #~ msgid "Syntax error, still inside '\"'\n" #~ msgstr "Sintak error, masih didalam '\"'\n" #~ msgid "Got a SIGCHLD; %u unreaped children.\n" #~ msgstr "Mendapat sinyal SIGCHLD; %u unreaped childern.\n" #~ msgid "DIRECTORY" #~ msgstr "DIREKTORI" #~ msgid "Change to DIRECTORY before doing anything" #~ msgstr "Pindah ke DIRECTORY sebelum melakukan sesuatu." #~ msgid "FLAGS" #~ msgstr "FLAGS" #~ msgid "Suspend process to allow a debugger to attach" #~ msgstr "Proses dihentikan untuk memberikan kesempatan debugger" #~ msgid "Environment variables override makefiles" #~ msgstr "Variabel environment digunakan dalam makefiles" #~ msgid "FILE" #~ msgstr "FILE" #~ msgid "Read FILE as a makefile" #~ msgstr "Baca FILE sebagai sebuah makefile" #~ msgid "Search DIRECTORY for included makefiles" #~ msgstr "Cari DIREKTORI untuk makefiles yang dibutuhkan" #~ msgid "Don't start multiple jobs unless load is below N" #~ msgstr "Tidak melakukan banyak jobs jika beban lebih dari N." #~ msgid "Don't actually run any commands; just print them" #~ msgstr "" #~ "Jangan menjalankan perintah apapun. Hanya tampilkan saja apa yang akan " #~ "dilakukan" #~ msgid "Consider FILE to be very old and don't remake it" #~ msgstr "" #~ "Anggap FILE sudah sangat tua dan jangan dibuat kembali file tersebut" #~ msgid "Don't echo commands" #~ msgstr "Jangan menampilkan perintah yang dijalankan" #~ msgid "Turns off -k" #~ msgstr "Matikan opsi -k" #~ msgid "Consider FILE to be infinitely new" #~ msgstr "Pertimbangkan FILE sebagai file yang baru." #~ msgid "Do not specify -j or --jobs if sh.exe is not available." #~ msgstr "Jangan menspesifikasi -j atau --jobs jika sh.exe tidak ada." #~ msgid "Resetting make for single job mode." #~ msgstr "Mereset kembali make pada mode job tunggal." #~ msgid "Entering" #~ msgstr "Memasuki" #~ msgid "Leaving" #~ msgstr "Meninggalkan" #~ msgid "no file name for `%sinclude'" #~ msgstr "tidak terdapat nama file untuk `%s include'" #~ msgid "target `%s' leaves prerequisite pattern empty" #~ msgstr "target `%s' meninggalkan persyaratan pola kosong" #~ msgid "# No variables." #~ msgstr "# Tidak ada variabel." #~ msgid "# average of %.1f variables per bucket, max %u in one bucket.\n" #~ msgstr "" #~ "# rata - rata dari %.1f variabel per bucket, maksimal %u dalam satu " #~ "bucket.\n" #~ msgid "# average of %d.%d variables per bucket, max %u in one bucket.\n" #~ msgstr "" #~ "# rata - rata dari %d.%d variabel per bucket, maksimal %u dalam satu " #~ "bucket.\n" make-4.3/po/ru.po0000644000175000017500000022205613611136531010631 00000000000000# Translation of make messages to Russian. # Copyright (C) 1998, 1999, 2000, 2001, 2002, 2009 Free Software Foundation, Inc. # This file is distributed under the same license as the make package. # # Oleg S. Tihonov , 1998. # Alexey Mahotkin , 2001. # Denis Perchine , 2001, 2002. # Pavel Maryanov , 2009. # Yuri Kozlov , 2009, 2010, 2013, 2014, 2016, 2019, 2020. msgid "" msgstr "" "Project-Id-Version: make 4.2.93\n" "Report-Msgid-Bugs-To: bug-make@gnu.org\n" "POT-Creation-Date: 2020-01-19 15:34-0500\n" "PO-Revision-Date: 2020-01-03 22:09+0300\n" "Last-Translator: Yuri Kozlov \n" "Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "X-Generator: Lokalize 2.0\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" #: src/ar.c:46 #, c-format msgid "attempt to use unsupported feature: '%s'" msgstr "попытка иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½ÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð¾Ð³Ð¾ ÑредÑтва: «%s»" #: src/ar.c:123 #, c-format msgid "touch archive member is not available on VMS" msgstr "обновление времени Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ‡Ð»ÐµÐ½Ð° архива невозможно в ÑиÑтеме VMS" #: src/ar.c:147 #, c-format msgid "touch: Archive '%s' does not exist" msgstr "обновление времени изменениÑ: Ðрхив «%s» не ÑущеÑтвует" #: src/ar.c:150 #, c-format msgid "touch: '%s' is not a valid archive" msgstr "обновление времени изменениÑ: Ðеверный архив: «%s»" #: src/ar.c:157 #, c-format msgid "touch: Member '%s' does not exist in '%s'" msgstr "обновление времени изменениÑ: Элемент «%s» не ÑодержитÑÑ Ð² «%s»" #: src/ar.c:164 #, c-format msgid "touch: Bad return code from ar_member_touch on '%s'" msgstr "" "обновление времени изменениÑ: Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ ar_member_touch вернула\n" "ошибочное значение Ð´Ð»Ñ Â«%s»" #: src/arscan.c:130 #, c-format msgid "lbr$set_module() failed to extract module info, status = %d" msgstr "lbr$set_module() не Ñмогла извлечь информацию о модуле, ÑÑ‚Ð°Ñ‚ÑƒÑ = %d" #: src/arscan.c:236 #, c-format msgid "lbr$ini_control() failed with status = %d" msgstr "lbr$init_control() вернула код ошибки %d" #: src/arscan.c:261 #, c-format msgid "unable to open library '%s' to lookup member status %d" msgstr "" "невозможно открыть библиотеку «%s» Ð´Ð»Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑоÑтоÑÐ½Ð¸Ñ Ñлемента %d" #: src/arscan.c:944 #, c-format msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n" msgstr "Элемент «%s»%s: %ld байт по адреÑу %ld (%ld).\n" #: src/arscan.c:945 msgid " (name might be truncated)" msgstr " (Ð¸Ð¼Ñ Ð¼Ð¾Ð¶ÐµÑ‚ быть уÑечено)" #: src/arscan.c:947 #, c-format msgid " Date %s" msgstr " Дата %s" #: src/arscan.c:948 #, c-format msgid " uid = %d, gid = %d, mode = 0%o.\n" msgstr " uid = %d, gid = %d, mode = 0%o.\n" #: src/commands.c:403 #, c-format msgid "Recipe has too many lines (%ud)" msgstr "Ð’ ÑпоÑобе Ñлишком много Ñтрок (%ud)" #: src/commands.c:504 msgid "*** Break.\n" msgstr "*** ОÑтанов.\n" #: src/commands.c:628 #, c-format msgid "*** [%s] Archive member '%s' may be bogus; not deleted" msgstr "*** [%s] Элемент архива «%s», кажетÑÑ, недейÑтвителен; не удалён" #: src/commands.c:632 #, c-format msgid "*** Archive member '%s' may be bogus; not deleted" msgstr "*** Элемент архива «%s», кажетÑÑ, недейÑтвителен; не удалён" #: src/commands.c:646 #, c-format msgid "*** [%s] Deleting file '%s'" msgstr "*** [%s] УдалÑетÑÑ Ñ„Ð°Ð¹Ð» «%s»" #: src/commands.c:648 #, c-format msgid "*** Deleting file '%s'" msgstr "*** УдалÑетÑÑ Ñ„Ð°Ð¹Ð» «%s»" #: src/commands.c:684 msgid "# recipe to execute" msgstr "# ÑпоÑоб, который Ñледует применить" #: src/commands.c:687 msgid " (built-in):" msgstr " (вÑтроенные):" #: src/commands.c:689 #, c-format msgid " (from '%s', line %lu):\n" msgstr " (из «%s», Ñтрока %lu):\n" #: src/dir.c:1073 msgid "" "\n" "# Directories\n" msgstr "" "\n" "# Каталоги\n" #: src/dir.c:1085 #, c-format msgid "# %s: could not be stat'd.\n" msgstr "# %s: невозможно получить ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð²Ñ‹Ð·Ð¾Ð²Ð¾Ð¼ stat.\n" #: src/dir.c:1089 msgid "# %s (key %s, mtime %I64u): could not be opened.\n" msgstr "# %s (ключ %s, mtime %l64u): невозможно открыть.\n" #: src/dir.c:1094 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n" msgstr "# %s (уÑтройÑтво %d, inode [%d,%d,%d]): невозможно открыть.\n" #: src/dir.c:1099 #, c-format msgid "# %s (device %ld, inode %ld): could not be opened.\n" msgstr "# %s (уÑтройÑтво %ld, inode %ld): невозможно открыть.\n" #: src/dir.c:1126 msgid "# %s (key %s, mtime %I64u): " msgstr "# %s (ключ %s, mtime %l64u): " #: src/dir.c:1131 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): " msgstr "# %s (уÑтройÑтво %d, inode [%d,%d,%d]): " #: src/dir.c:1136 #, c-format msgid "# %s (device %ld, inode %ld): " msgstr "# %s (уÑтройÑтво %ld, inode %ld): " #: src/dir.c:1142 src/dir.c:1163 msgid "No" msgstr "Ðет" #: src/dir.c:1145 src/dir.c:1166 msgid " files, " msgstr " файлов," #: src/dir.c:1147 src/dir.c:1168 msgid "no" msgstr "нет" #: src/dir.c:1150 msgid " impossibilities" msgstr " недоÑтижимых целей" #: src/dir.c:1154 msgid " so far." msgstr " на текущий момент." #: src/dir.c:1171 #, c-format msgid " impossibilities in %lu directories.\n" msgstr " недоÑтижимых целей в %lu каталогах.\n" #: src/expand.c:125 #, c-format msgid "Recursive variable '%s' references itself (eventually)" msgstr "РекурÑÐ¸Ð²Ð½Ð°Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Â«%s» ÑÑылаетÑÑ Ñама на ÑÐµÐ±Ñ (в результате)" #: src/expand.c:271 #, c-format msgid "unterminated variable reference" msgstr "Ð½ÐµÐ·Ð°Ð²ÐµÑ€ÑˆÑ‘Ð½Ð½Ð°Ñ ÑÑылка на переменную" #: src/file.c:278 #, c-format msgid "Recipe was specified for file '%s' at %s:%lu," msgstr "СпоÑоб Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð° «%s» был задан в %s:%lu," #: src/file.c:283 #, c-format msgid "Recipe for file '%s' was found by implicit rule search," msgstr "СпоÑоб Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð° «%s» был найден из неÑвного правила," #: src/file.c:287 #, c-format msgid "but '%s' is now considered the same file as '%s'." msgstr "но «%s» и «%s» теперь ÑчитаютÑÑ Ð¾Ð´Ð½Ð¸Ð¼ и тем же файлом." #: src/file.c:290 #, c-format msgid "Recipe for '%s' will be ignored in favor of the one for '%s'." msgstr "" "СпоÑоб Ð´Ð»Ñ Â«%s» игнорируетÑÑ, вмеÑто него будет иÑпользован ÑпоÑоб Ð´Ð»Ñ Â«%s»." #: src/file.c:310 #, c-format msgid "can't rename single-colon '%s' to double-colon '%s'" msgstr "" "невозможно переименовать «%s» Ñ Ð¾Ð´Ð½Ð¸Ð¼ двоеточием в «%s» Ñ Ð´Ð²ÑƒÐ¼Ñ Ð´Ð²Ð¾ÐµÑ‚Ð¾Ñ‡Ð¸Ñми" #: src/file.c:316 #, c-format msgid "can't rename double-colon '%s' to single-colon '%s'" msgstr "" "невозможно переименовать «%s» Ñ Ð´Ð²ÑƒÐ¼Ñ Ð´Ð²Ð¾ÐµÑ‚Ð¾Ñ‡Ð¸Ñми в «%s» Ñ Ð¾Ð´Ð½Ð¸Ð¼ двоеточием" #: src/file.c:408 #, c-format msgid "*** Deleting intermediate file '%s'" msgstr "*** Удаление промежуточного файла «%s»" #: src/file.c:412 #, c-format msgid "Removing intermediate files...\n" msgstr "Удаление промежуточных файлов...\n" #: src/file.c:872 msgid "Current time" msgstr "Текущее времÑ" #: src/file.c:876 #, c-format msgid "%s: Timestamp out of range; substituting %s" msgstr "%s: Временной штамп выходит за пределы диапазона; подÑтавлÑем %s" #: src/file.c:1016 msgid "# Not a target:" msgstr "# Ðе ÑвлÑетÑÑ Ñ†ÐµÐ»ÑŒÑŽ:" #: src/file.c:1021 msgid "# Precious file (prerequisite of .PRECIOUS)." msgstr "# Ценный файл (завиÑимоÑть .PRECIOUS)." #: src/file.c:1023 msgid "# Phony target (prerequisite of .PHONY)." msgstr "# ПÑевдоцель (завиÑимоÑть от .PHONY)." #: src/file.c:1025 msgid "# Command line target." msgstr "# Цель, Ð²Ñ‹Ð·Ñ‹Ð²Ð°ÐµÐ¼Ð°Ñ Ð¸Ð· командной Ñтроки." #: src/file.c:1027 msgid "# A default, MAKEFILES, or -include/sinclude makefile." msgstr "# По умолчанию, MAKEFILES, или -include/sinclude makefile." #: src/file.c:1029 msgid "# Builtin rule" msgstr "# Ð’Ñтроенное правило" #: src/file.c:1031 msgid "# Implicit rule search has been done." msgstr "# ПроизводилÑÑ Ð¿Ð¾Ð¸Ñк неÑвных правил." #: src/file.c:1032 msgid "# Implicit rule search has not been done." msgstr "# ПоиÑк неÑвных правил не производилÑÑ." #: src/file.c:1034 #, c-format msgid "# Implicit/static pattern stem: '%s'\n" msgstr "# ОÑнова неÑвного или ÑтатичеÑкого образца: «%s»\n" #: src/file.c:1036 msgid "# File is an intermediate prerequisite." msgstr "# Файл — Ð¿Ñ€Ð¾Ð¼ÐµÐ¶ÑƒÑ‚Ð¾Ñ‡Ð½Ð°Ñ Ð·Ð°Ð²Ð¸ÑимоÑть." #: src/file.c:1040 msgid "# Also makes:" msgstr "# Собирает также:" #: src/file.c:1046 msgid "# Modification time never checked." msgstr "# Ð’Ñ€ÐµÐ¼Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½Ð¸ разу не проверÑлоÑÑŒ." #: src/file.c:1048 msgid "# File does not exist." msgstr "# Файл не ÑущеÑтвует." #: src/file.c:1050 msgid "# File is very old." msgstr "# Файл очень Ñтарый." #: src/file.c:1055 #, c-format msgid "# Last modified %s\n" msgstr "# Ð’Ñ€ÐµÐ¼Ñ Ð¿Ð¾Ñледнего Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ %s\n" #: src/file.c:1058 msgid "# File has been updated." msgstr "# Файл был обновлён." #: src/file.c:1058 msgid "# File has not been updated." msgstr "# Файл не был обновлён." #: src/file.c:1062 msgid "# Recipe currently running (THIS IS A BUG)." msgstr "# Ð’ данный момент уже применÑетÑÑ Ð½ÐµÐºÐ¸Ð¹ ÑпоÑоб (ЭТО ОШИБКÐ)." #: src/file.c:1065 msgid "# Dependencies recipe running (THIS IS A BUG)." msgstr "" "# Ð’ данный момент уже применÑетÑÑ Ð½ÐµÐºÐ¸Ð¹ ÑпоÑоб по завиÑимоÑÑ‚Ñм (ЭТО ОШИБКÐ)." #: src/file.c:1074 msgid "# Successfully updated." msgstr "# УÑпешно обновлено." #: src/file.c:1078 msgid "# Needs to be updated (-q is set)." msgstr "# Должно быть обновлено (задан ключ -q)." #: src/file.c:1081 msgid "# Failed to be updated." msgstr "# Попытка Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð±ÐµÐ·ÑƒÑпешна." #: src/file.c:1086 msgid "# Invalid value in 'command_state' member!" msgstr "# Ðеверное значение члена «command_state»!" #: src/file.c:1105 msgid "" "\n" "# Files" msgstr "" "\n" "# Файлы" #: src/file.c:1109 msgid "" "\n" "# files hash-table stats:\n" "# " msgstr "" "\n" "# ÑоÑтоÑние файлов хеш-таблицы:\n" "# " #: src/file.c:1119 #, c-format msgid "%s: Field '%s' not cached: %s" msgstr "%s: Поле «%s» не кешировано: %s" #: src/function.c:794 msgid "non-numeric first argument to 'word' function" msgstr "нечиÑловой первый аргумент функции «word»" #: src/function.c:799 #, c-format msgid "first argument to 'word' function must be greater than 0" msgstr "первый аргумент функции «word» должен быть больше нулÑ" #: src/function.c:819 msgid "non-numeric first argument to 'wordlist' function" msgstr "нечиÑловой первый аргумент функции «wordlist»" #: src/function.c:821 msgid "non-numeric second argument to 'wordlist' function" msgstr "нечиÑловой второй аргумент функции «wordlist»" #: src/function.c:1533 #, c-format msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n" msgstr "windows32_openpipe: DuplicateHandle(In) вернула код ошибки (e=%ld)\n" #: src/function.c:1557 #, c-format msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n" msgstr "windows32_openpipe: DuplicateHandle(Err) вернула код ошибки (e=%ld)\n" #: src/function.c:1564 #, c-format msgid "CreatePipe() failed (e=%ld)\n" msgstr "CreatePipe() вернула код ошибки (e=%ld)\n" #: src/function.c:1572 #, c-format msgid "windows32_openpipe(): process_init_fd() failed\n" msgstr "windows32_openpipe(): process_init_fd() завершилаÑÑŒ неудачно\n" #: src/function.c:1857 #, c-format msgid "Cleaning up temporary batch file %s\n" msgstr "Очищаю временный пакетный файл %s\n" #: src/function.c:2230 src/function.c:2255 #, c-format msgid "file: missing filename" msgstr "файл: отÑутÑтвует Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°" #: src/function.c:2234 src/function.c:2265 #, c-format msgid "open: %s: %s" msgstr "открытие: %s: %s" #: src/function.c:2242 #, c-format msgid "write: %s: %s" msgstr "запиÑÑŒ: %s: %s" #: src/function.c:2245 src/function.c:2282 #, c-format msgid "close: %s: %s" msgstr "закрытие: %s: %s" #: src/function.c:2258 #, c-format msgid "file: too many arguments" msgstr "файл: Ñлишком много аргументов" #: src/function.c:2277 #, c-format msgid "read: %s: %s" msgstr "чтение: %s: %s" #: src/function.c:2290 #, c-format msgid "file: invalid file operation: %s" msgstr "файл: Ð½ÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð¼: %s" #: src/function.c:2405 #, c-format msgid "insufficient number of arguments (%d) to function '%s'" msgstr "недоÑтаточно аргументов (вÑего %d) функции «%s»" #: src/function.c:2417 #, c-format msgid "unimplemented on this platform: function '%s'" msgstr "не реализовано на Ñтой платформе: Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Â«%s»" #: src/function.c:2483 #, c-format msgid "unterminated call to function '%s': missing '%c'" msgstr "незавершённый вызов функции «%s»: пропущено «%c»" #: src/function.c:2667 #, c-format msgid "Empty function name" msgstr "ПуÑтое Ð¸Ð¼Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸" #: src/function.c:2669 #, c-format msgid "Invalid function name: %s" msgstr "Ðекорректное Ð¸Ð¼Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸: %s" #: src/function.c:2671 #, c-format msgid "Function name too long: %s" msgstr "Слишком длинное Ð¸Ð¼Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸: %s" #: src/function.c:2674 #, c-format msgid "Invalid minimum argument count (%u) for function %s" msgstr "Ðекорректное минимальное чиÑло аргументов (вÑего %u) функции %s" #: src/function.c:2677 #, c-format msgid "Invalid maximum argument count (%u) for function %s" msgstr "Ðекорректное макÑимальное чиÑло аргументов (вÑего %u) функции %s" # Ð¡Ð¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ getopt иÑключены, Ñ‚.к. они отноÑÑÑ‚ÑÑ Ðº уже # уÑтаревшей верÑии Ñтой библиотеки, и иÑчезнут в Ñледующей верÑии make #: src/getopt.c:659 #, c-format msgid "%s: option '%s' is ambiguous\n" msgstr "%s: ключ «%s» не однозначен\n" #: src/getopt.c:683 #, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s: ключ «--%s» должен иÑпользоватьÑÑ Ð±ÐµÐ· аргумента\n" #: src/getopt.c:688 #, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s: ключ «%c%s» должен иÑпользоватьÑÑ Ð±ÐµÐ· аргумента\n" #: src/getopt.c:705 src/getopt.c:878 #, c-format msgid "%s: option '%s' requires an argument\n" msgstr "%s: ключу «%s» требуетÑÑ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚\n" #: src/getopt.c:734 #, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s: неизвеÑтный ключ «--%s»\n" #: src/getopt.c:738 #, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s: неизвеÑтный ключ «%c%s»\n" #: src/getopt.c:764 #, c-format msgid "%s: illegal option -- %c\n" msgstr "%s: недопуÑтимый ключ -- %c\n" #: src/getopt.c:767 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s: неверный ключ -- %c\n" #: src/getopt.c:797 src/getopt.c:927 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: ключ требует аргумент -- %c\n" #: src/getopt.c:844 #, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s: ключ «-W %s» неоднозначен\n" #: src/getopt.c:862 #, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s: ключ «-W %s» должен иÑпользоватьÑÑ Ð±ÐµÐ· аргумента\n" #: src/guile.c:58 #, c-format msgid "guile: Expanding '%s'\n" msgstr "guile: раÑширÑетÑÑ Â«%s»\n" #: src/guile.c:74 #, c-format msgid "guile: Evaluating '%s'\n" msgstr "guile: вычиÑлÑетÑÑ Â«%s»\n" #: src/hash.c:50 #, c-format msgid "can't allocate %lu bytes for hash table: memory exhausted" msgstr "не удалоÑÑŒ выделить %lu байт Ð´Ð»Ñ Ñ…ÐµÑˆ-таблицы: закончилаÑÑŒ памÑть" #: src/hash.c:280 #, c-format msgid "Load=%lu/%lu=%.0f%%, " msgstr "Загружено=%lu/%lu=%.0f%%, " #: src/hash.c:282 #, c-format msgid "Rehash=%u, " msgstr "Переформулировано=%u, " #: src/hash.c:283 #, c-format msgid "Collisions=%lu/%lu=%.0f%%" msgstr "Противоречий=%lu/%lu=%.0f%%" #: src/implicit.c:38 #, c-format msgid "Looking for an implicit rule for '%s'.\n" msgstr "ПоиÑк неÑвного правила Ð´Ð»Ñ Â«%s».\n" #: src/implicit.c:54 #, c-format msgid "Looking for archive-member implicit rule for '%s'.\n" msgstr "ПоиÑк неÑвного правила Ð´Ð»Ñ Ñлемента архива «%s».\n" #: src/implicit.c:311 #, c-format msgid "Avoiding implicit rule recursion.\n" msgstr "Избежание рекурÑивного вызова неÑвного правила.\n" #: src/implicit.c:484 #, c-format msgid "Stem too long: '%s%.*s'.\n" msgstr "Слишком длинный образец: «%s%.*s».\n" #: src/implicit.c:490 #, c-format msgid "Trying pattern rule with stem '%.*s'.\n" msgstr "Попытка Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð°Ð²Ð¸Ð»Ð° Ñ Ð¾Ð±Ñ€Ð°Ð·Ñ†Ð¾Ð¼ «%.*s».\n" #: src/implicit.c:717 #, c-format msgid "Rejecting impossible rule prerequisite '%s'.\n" msgstr "Отвержение невозможной завиÑимоÑти правила «%s».\n" #: src/implicit.c:718 #, c-format msgid "Rejecting impossible implicit prerequisite '%s'.\n" msgstr "Отвержение невозможной неÑвной завиÑимоÑти «%s».\n" #: src/implicit.c:732 #, c-format msgid "Trying rule prerequisite '%s'.\n" msgstr "Попытка Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð°Ð²Ð¸Ð»Ð° завиÑимоÑти «%s».\n" #: src/implicit.c:733 #, c-format msgid "Trying implicit prerequisite '%s'.\n" msgstr "Попытка Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½ÐµÑвной завиÑимоÑти «%s».\n" #: src/implicit.c:772 #, c-format msgid "Found prerequisite '%s' as VPATH '%s'\n" msgstr "Обнаружена завиÑимоÑть «%s» в виде VPATH «%s»\n" #: src/implicit.c:786 #, c-format msgid "Looking for a rule with intermediate file '%s'.\n" msgstr "ПоиÑк правила Ñ Ð¿Ñ€Ð¾Ð¼ÐµÐ¶ÑƒÑ‚Ð¾Ñ‡Ð½Ñ‹Ð¼ файлом «%s».\n" #: src/job.c:370 msgid "Cannot create a temporary file\n" msgstr "Ðе удалоÑÑŒ Ñоздать временный файл\n" #: src/job.c:548 msgid " (core dumped)" msgstr " (Ñделан дамп памÑти)" #: src/job.c:553 msgid " (ignored)" msgstr " (игнорирование)" #: src/job.c:557 src/job.c:1892 msgid "" msgstr "<вÑтроенное>" #: src/job.c:573 #, c-format msgid "%s[%s: %s] Error %d%s" msgstr "%s[%s: %s] Ошибка %d%s" #: src/job.c:662 #, c-format msgid "*** Waiting for unfinished jobs...." msgstr "*** Ожидание Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð·Ð°Ð´Ð°Ð½Ð¸Ð¹â€¦" #: src/job.c:704 #, c-format msgid "Live child %p (%s) PID %s %s\n" msgstr "Ðезавершённый потомок %p (%s) PID %s %s\n" #: src/job.c:706 src/job.c:900 src/job.c:1072 src/job.c:1644 #, c-format msgid " (remote)" msgstr " (удалённый)" #: src/job.c:898 #, c-format msgid "Reaping winning child %p PID %s %s\n" msgstr "ПодбираетÑÑ ÑƒÐ´Ð°Ñ‡Ð½Ð¾ завершившийÑÑ Ð¿Ð¾Ñ‚Ð¾Ð¼Ð¾Ðº %p PID %s %s\n" #: src/job.c:899 #, c-format msgid "Reaping losing child %p PID %s %s\n" msgstr "ПодбираетÑÑ Ð½ÐµÑƒÐ´Ð°Ñ‡Ð½Ð¾ завершившийÑÑ Ð¿Ð¾Ñ‚Ð¾Ð¼Ð¾Ðº %p PID %s %s\n" #: src/job.c:950 #, c-format msgid "Cleaning up temp batch file %s\n" msgstr "Подчищаю временный пакетный файл %s\n" #: src/job.c:956 #, c-format msgid "Cleaning up temp batch file %s failed (%d)\n" msgstr "ОчиÑтка временного пакетного файла %s завершилаÑÑŒ Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹ (%d)\n" #: src/job.c:1071 #, c-format msgid "Removing child %p PID %s%s from chain.\n" msgstr "УдалÑетÑÑ Ð¿Ð¾Ñ‚Ð¾Ð¼Ð¾Ðº %p PID %s%s из цепочки.\n" #: src/job.c:1120 #, c-format msgid "Released token for child %p (%s).\n" msgstr "ОÑвобождён токен Ð´Ð»Ñ Ð¿Ð¾Ñ‚Ð¾Ð¼ÐºÐ° %p (%s).\n" #: src/job.c:1575 src/job.c:2487 #, c-format msgid "process_easy() failed to launch process (e=%ld)\n" msgstr "process_easy() не Ñмогла запуÑтить процеÑÑ (e=%ld)\n" #: src/job.c:1579 src/job.c:2491 #, c-format msgid "" "\n" "Counted %d args in failed launch\n" msgstr "" "\n" "При неудачном запуÑке ÑоÑчитано %d аргументов\n" #: src/job.c:1642 #, c-format msgid "Putting child %p (%s) PID %s%s on the chain.\n" msgstr "Помещение потомка %p (%s) PID %s%s в цепочку потомков.\n" #: src/job.c:1875 #, c-format msgid "Obtained token for child %p (%s).\n" msgstr "Получен токен Ð´Ð»Ñ Ð¿Ð¾Ñ‚Ð¾Ð¼ÐºÐ° %p (%s).\n" #: src/job.c:1902 #, c-format msgid "%s: target '%s' does not exist" msgstr "%s: цель «%s» не ÑущеÑтвует" #: src/job.c:1905 #, c-format msgid "%s: update target '%s' due to: %s" msgstr "%s: обновление цели «%s» из-за: %s" #: src/job.c:2108 #, c-format msgid "cannot enforce load limits on this operating system" msgstr "Ñта Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð°Ñ ÑиÑтема не позволÑет уÑтанавливать пределы загрузки" #: src/job.c:2110 msgid "cannot enforce load limit: " msgstr "невозможно уÑтановить пределы загрузки: " #: src/job.c:2200 #, c-format msgid "no more file handles: could not duplicate stdin\n" msgstr "закончилиÑÑŒ файловые деÑкрипторы: не удалоÑÑŒ Ñделать копию stdin\n" #: src/job.c:2212 #, c-format msgid "no more file handles: could not duplicate stdout\n" msgstr "закончилиÑÑŒ файловые деÑкрипторы: не удалоÑÑŒ Ñделать копию stdout\n" #: src/job.c:2226 #, c-format msgid "no more file handles: could not duplicate stderr\n" msgstr "закончилиÑÑŒ файловые деÑкрипторы: не удалоÑÑŒ Ñделать копию stderr\n" #: src/job.c:2241 #, c-format msgid "Could not restore stdin\n" msgstr "Ðе удалоÑÑŒ воÑÑтановить stdin\n" #: src/job.c:2249 #, c-format msgid "Could not restore stdout\n" msgstr "Ðе удалоÑÑŒ воÑÑтановить stdout\n" #: src/job.c:2257 #, c-format msgid "Could not restore stderr\n" msgstr "Ðе удалоÑÑŒ воÑÑтановить stderr\n" #: src/job.c:2520 #, c-format msgid "make reaped child pid %s, still waiting for pid %s\n" msgstr "make нашла завершившегоÑÑ Ð¿Ð¾Ñ‚Ð¾Ð¼ÐºÐ° pid %s, вÑÑ‘ ещё ожидает pid %s\n" #: src/job.c:2623 #, c-format msgid "spawnvpe: environment space might be exhausted" msgstr "spawnvpe: вероÑтно, закончилоÑÑŒ меÑто под окружение" #: src/job.c:2862 #, c-format msgid "$SHELL changed (was '%s', now '%s')\n" msgstr "ÐŸÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ $SHELL изменилаÑÑŒ (было «%s», теперь «%s»)\n" #: src/job.c:3300 src/job.c:3485 #, c-format msgid "Creating temporary batch file %s\n" msgstr "СоздаётÑÑ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ñ‹Ð¹ пакетный файл %s\n" #: src/job.c:3308 #, c-format msgid "" "Batch file contents:\n" "\t@echo off\n" msgstr "" "Содержимое файла пакетных заданий:\n" "\t@echo off\n" #: src/job.c:3497 #, c-format msgid "" "Batch file contents:%s\n" "\t%s\n" msgstr "" "Содержимое файла пакетных заданий:%s\n" "\t%s\n" #: src/job.c:3605 #, c-format msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n" msgstr "" "%s (Ñтрока %d) Плохой контекÑÑ‚ командного процеÑÑора (!unixy && !" "batch_mode_shell)\n" #: src/load.c:60 #, c-format msgid "Failed to open global symbol table: %s" msgstr "Ðе удалоÑÑŒ открыть глобальную таблицу Ñимволов: %s" #: src/load.c:97 #, c-format msgid "Loaded object %s is not declared to be GPL compatible" msgstr "Загруженный объект %s не объÑвлено как ÑовмеÑтимый Ñ GPL" #: src/load.c:104 #, c-format msgid "Failed to load symbol %s from %s: %s" msgstr "Ðе удалоÑÑŒ загрузить Ñимвол %s из %s: %s" #: src/load.c:149 #, c-format msgid "Empty symbol name for load: %s" msgstr "ПуÑтое Ð¸Ð¼Ñ Ñимвола Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸: %s" #: src/load.c:204 #, c-format msgid "Loading symbol %s from %s\n" msgstr "ЗагружаетÑÑ Ñимвол %s из %s\n" #: src/load.c:256 #, c-format msgid "The 'load' operation is not supported on this platform." msgstr "ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ñ Â«load» не поддерживаетÑÑ Ð½Ð° Ñтой платформе." #: src/main.c:335 msgid "Options:\n" msgstr "Ключи:\n" #: src/main.c:336 msgid " -b, -m Ignored for compatibility.\n" msgstr " -b, -m ИгнорируетÑÑ Ð´Ð»Ñ ÑовмеÑтимоÑти.\n" #: src/main.c:338 msgid " -B, --always-make Unconditionally make all targets.\n" msgstr " -B, --always-make Без уÑловий отрабатывать вÑе цели.\n" #: src/main.c:340 msgid "" " -C DIRECTORY, --directory=DIRECTORY\n" " Change to DIRECTORY before doing anything.\n" msgstr "" " -C КÐТÐЛОГ, --directory=КÐТÐЛОГ\n" " Перейти в КÐТÐЛОГ перед выполнением дейÑтвий.\n" #: src/main.c:343 msgid " -d Print lots of debugging information.\n" msgstr " -d Выводить маÑÑу отладочных Ñообщений.\n" #: src/main.c:345 msgid "" " --debug[=FLAGS] Print various types of debugging information.\n" msgstr "" " --debug[=ФЛÐГИ] Выводить различные типы отладочной " "информации.\n" #: src/main.c:347 msgid "" " -e, --environment-overrides\n" " Environment variables override makefiles.\n" msgstr "" " -e, --environment-overrides\n" " Переменные Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ Ð·Ð°Ð¼ÐµÐ½ÑÑŽÑ‚ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ " "makefile.\n" #: src/main.c:350 msgid "" " -E STRING, --eval=STRING Evaluate STRING as a makefile statement.\n" msgstr "" " -E СТРОКÐ, --eval=СТРОКРВычиÑлить СТРОКУ как предложение makefile.\n" #: src/main.c:352 msgid "" " -f FILE, --file=FILE, --makefile=FILE\n" " Read FILE as a makefile.\n" msgstr "" " -f ФÐЙЛ, --file=ФÐЙЛ, --makefile=ФÐЙЛ\n" " ИÑпользовать ФÐЙЛ в качеÑтве makefile.\n" #: src/main.c:355 msgid " -h, --help Print this message and exit.\n" msgstr " -h, --help Показать Ñту Ñправку и выйти.\n" #: src/main.c:357 msgid " -i, --ignore-errors Ignore errors from recipes.\n" msgstr " -i, --ignore-errors Игнорировать ошибки ÑпоÑобов.\n" #: src/main.c:359 msgid "" " -I DIRECTORY, --include-dir=DIRECTORY\n" " Search DIRECTORY for included makefiles.\n" msgstr "" " -I КÐТÐЛОГ, --include-dir=КÐТÐЛОГ\n" " ИÑкать включаемые make-файлы в КÐТÐЛОГЕ.\n" #: src/main.c:362 msgid "" " -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no " "arg.\n" msgstr "" " -j [N], --jobs[=N] ЗапуÑкать одновременно до N заданий; \n" " еÑли N не указано, чиÑло заданий " "неограничено.\n" #: src/main.c:364 msgid "" " -k, --keep-going Keep going when some targets can't be made.\n" msgstr "" " -k, --keep-going Продолжать работу, даже еÑли некоторые цели\n" " не могут быть доÑтигнуты.\n" #: src/main.c:366 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" " неÑколько заданий, еÑли загрузка больше N.\n" #: src/main.c:369 msgid "" " -L, --check-symlink-times Use the latest mtime between symlinks and " "target.\n" msgstr "" " -L, --check-symlink-times ИÑпользовать поÑледнее mtime при выборе между\n" " ÑимволичеÑкими ÑÑылками и целью.\n" #: src/main.c:371 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" #: src/main.c:374 msgid "" " -o FILE, --old-file=FILE, --assume-old=FILE\n" " Consider FILE to be very old and don't remake " "it.\n" msgstr "" " -o ФÐЙЛ, --old-file=ФÐЙЛ, --assume-old=ФÐЙЛ\n" " Считать ФÐЙЛ очень Ñтарым и не переделывать " "его.\n" #: src/main.c:377 msgid "" " -O[TYPE], --output-sync[=TYPE]\n" " Synchronize output of parallel jobs by TYPE.\n" msgstr "" " -O[ТИП], --output-sync[=ТИП]\n" " Синхронизировать вывод параллельных\n" " заданий Ñ Ñ‚Ð¸Ð¿Ð¾Ð¼ ТИП.\n" #: src/main.c:380 msgid " -p, --print-data-base Print make's internal database.\n" msgstr "" " -p, --print-data-base Ðапечатать внутреннюю базу данных make.\n" #: src/main.c:382 msgid "" " -q, --question Run no recipe; exit status says if up to " "date.\n" msgstr "" " -q, --question Ðе применÑть ÑпоÑоб;\n" " код Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð¿Ð¾ÐºÐ°Ð·Ñ‹Ð²Ð°ÐµÑ‚, вÑÑ‘ ли уже " "Ñделано.\n" #: src/main.c:384 msgid " -r, --no-builtin-rules Disable the built-in implicit rules.\n" msgstr "" " -r, --no-builtin-rules Ðе иÑпользовать вÑтроенные неÑвные правила.\n" # Что такое "variable settings"? #: src/main.c:386 msgid " -R, --no-builtin-variables Disable the built-in variable settings.\n" msgstr "" " -R, --no-builtin-variables Выключить уÑтановку вÑтроенных\n" " значений переменных.\n" #: src/main.c:388 msgid " -s, --silent, --quiet Don't echo recipes.\n" msgstr " -s, --silent, --quiet Ðе показывать Ñами ÑпоÑобы.\n" #: src/main.c:390 msgid " --no-silent Echo recipes (disable --silent mode).\n" msgstr "" " --no-silent Показывать ÑпоÑобы (отключает режим --" "silent).\n" #: src/main.c:392 msgid "" " -S, --no-keep-going, --stop\n" " Turns off -k.\n" msgstr "" " -S, --no-keep-going, --stop\n" " Отменить ключ -k.\n" #: src/main.c:395 msgid " -t, --touch Touch targets instead of remaking them.\n" msgstr "" " -t, --touch УÑтановить Ð²Ñ€ÐµÐ¼Ñ Ð´Ð¾Ñтупа целей в текущее,\n" " а не переÑобирать их.\n" #: src/main.c:397 msgid " --trace Print tracing information.\n" msgstr " --trace Выводить траÑÑировочную информацию.\n" #: src/main.c:399 msgid "" " -v, --version Print the version number of make and exit.\n" msgstr " -v, --version Показать информацию о верÑии и выйти.\n" #: src/main.c:401 msgid " -w, --print-directory Print the current directory.\n" msgstr " -w, --print-directory Ðапечатать текущий каталог.\n" #: src/main.c:403 msgid "" " --no-print-directory Turn off -w, even if it was turned on " "implicitly.\n" msgstr "" " --no-print-directory Отменить ключ -w, даже еÑли он был Ñвно " "указан.\n" #: src/main.c:405 msgid "" " -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n" " Consider FILE to be infinitely new.\n" msgstr "" " -W ФÐЙЛ, --what-if=ФÐЙЛ, --new-file=ФÐЙЛ, --assume-new=ФÐЙЛ\n" " Считать ФÐЙЛ вÑегда новым.\n" #: src/main.c:408 msgid "" " --warn-undefined-variables Warn when an undefined variable is " "referenced.\n" msgstr "" " --warn-undefined-variables Выдавать предупреждение при ÑÑылке\n" " на неопределённую переменную.\n" #: src/main.c:671 #, c-format msgid "empty string invalid as file name" msgstr "пуÑÑ‚Ð°Ñ Ñтрока недопуÑтима в качеÑтве имени файла" #: src/main.c:754 #, c-format msgid "unknown debug level specification '%s'" msgstr "задан неизвеÑтный уровень отладки «%s»" #: src/main.c:794 #, c-format msgid "unknown output-sync type '%s'" msgstr "неизвеÑтный тип output-sync «%s»" #: src/main.c:849 #, c-format msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n" msgstr "%s: поймано прерывание или иÑключение (код = 0x%lx, Ð°Ð´Ñ€ÐµÑ = 0x%p)\n" #: src/main.c:856 #, c-format msgid "" "\n" "Unhandled exception filter called from program %s\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" msgstr "" "\n" "Ðеобработанное иÑключение в программе %s\n" "Код иÑÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ = %lx\n" "Флаги иÑÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ = %lx\n" "ÐÐ´Ñ€ÐµÑ Ð¸ÑÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ = 0x%p\n" #: src/main.c:864 #, c-format msgid "Access violation: write operation at address 0x%p\n" msgstr "Ðарушение доÑтупа: Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñи по адреÑу 0x%p\n" #: src/main.c:865 #, c-format msgid "Access violation: read operation at address 0x%p\n" msgstr "Ðарушение доÑтупа: Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð°Ð´Ñ€ÐµÑа 0x%p\n" #: src/main.c:941 src/main.c:956 #, c-format msgid "find_and_set_shell() setting default_shell = %s\n" msgstr "find_and_set_shell() уÑтанавливает default_shell = %s\n" #: src/main.c:1009 #, c-format msgid "find_and_set_shell() path search set default_shell = %s\n" msgstr "find_and_set_shell(): поиÑк в путÑÑ… уÑтанавливает default_shell = %s\n" #: src/main.c:1609 #, c-format msgid "" "warning: jobserver unavailable: using -j1. Add '+' to parent make rule." msgstr "" "предупреждение: Ñервер заданий недоÑтупен: иÑпользуетÑÑ -j1. Добавьте «+» к " "правилу в родительÑком make." #: src/main.c:1617 #, c-format msgid "warning: -j%d forced in submake: resetting jobserver mode." msgstr "" "предупреждение: в Ñуб-Makefile принудительно задан -j%d; ÑÐ±Ñ€Ð¾Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° " "Ñервера заданий" #: src/main.c:1781 #, c-format msgid "Makefile from standard input specified twice." msgstr "Makefile из Ñтандартного ввода указан дважды." #: src/main.c:1819 src/vmsjobs.c:1248 msgid "fopen (temporary file)" msgstr "fopen (временный файл)" #: src/main.c:1825 msgid "fwrite (temporary file)" msgstr "fwrite (временный файл)" #: src/main.c:2004 #, c-format msgid "warning: -j%d forced in makefile: resetting jobserver mode." msgstr "" "предупреждение: в makefile принудительно задан -j%d; ÑÐ±Ñ€Ð¾Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° Ñервера " "заданий" #: src/main.c:2068 #, c-format msgid "Parallel jobs (-j) are not supported on this platform." msgstr "Параллельные Ð·Ð°Ð´Ð°Ð½Ð¸Ñ (-j) не поддерживаютÑÑ Ð½Ð° Ñтой платформе." #: src/main.c:2069 #, c-format msgid "Resetting to single job (-j1) mode." msgstr "ВозвращаетÑÑ Ñ€ÐµÐ¶Ð¸Ð¼ одиночного Ð·Ð°Ð´Ð°Ð½Ð¸Ñ (-j1)." #: src/main.c:2109 #, c-format msgid "Symbolic links not supported: disabling -L." msgstr "СимволичеÑкие ÑÑылки не поддерживаютÑÑ: отменÑетÑÑ ÐºÐ»ÑŽÑ‡ -L." #: src/main.c:2190 #, c-format msgid "Updating makefiles....\n" msgstr "Обновление make-файлов....\n" #: src/main.c:2226 #, c-format msgid "Makefile '%s' might loop; not remaking it.\n" msgstr "Make-файл «%s», возможно, зациклен, он не будет переÑобиратьÑÑ.\n" #: src/main.c:2303 #, c-format msgid "Failed to remake makefile '%s'." msgstr "Попытка переÑобрать make-файл «%s» завершилаÑÑŒ неудачно." #: src/main.c:2323 #, c-format msgid "Included makefile '%s' was not found." msgstr "Включаемый make-файл «%s» не найден." #: src/main.c:2328 #, c-format msgid "Makefile '%s' was not found" msgstr "Make-файл «%s» не найден" #: src/main.c:2394 #, c-format msgid "Couldn't change back to original directory." msgstr "Ðевозможно перейти в первоначальный каталог." #: src/main.c:2402 #, c-format msgid "Re-executing[%u]:" msgstr "Повторное выполнение[%u]:" #: src/main.c:2522 msgid "unlink (temporary file): " msgstr "unlink (временный файл)" #: src/main.c:2555 #, c-format msgid ".DEFAULT_GOAL contains more than one target" msgstr ".DEFAULT_GOAL Ñодержит более одной цели" #: src/main.c:2579 #, c-format msgid "No targets" msgstr "Ðет целей" #: src/main.c:2581 #, c-format msgid "No targets specified and no makefile found" msgstr "Ðе заданы цели и не найден make-файл" #: src/main.c:2586 #, c-format msgid "Updating goal targets....\n" msgstr "Обновление целей результата...\n" #: src/main.c:2610 #, c-format msgid "warning: Clock skew detected. Your build may be incomplete." msgstr "предупреждение: Ðеправильный ход чаÑов. Сборка может быть неполной." #: src/main.c:2804 #, c-format msgid "Usage: %s [options] [target] ...\n" msgstr "ИÑпользование: %s [КЛЮЧ]... [ЦЕЛЬ]...\n" #: src/main.c:2810 #, c-format msgid "" "\n" "This program built for %s\n" msgstr "" "\n" "Эта программа Ñобрана Ð´Ð»Ñ %s\n" #: src/main.c:2812 #, c-format msgid "" "\n" "This program built for %s (%s)\n" msgstr "" "\n" "Эта программа Ñобрана Ð´Ð»Ñ %s (%s)\n" #: src/main.c:2815 #, c-format msgid "Report bugs to \n" msgstr "Сообщайте об ошибках по адреÑу \n" #: src/main.c:2901 #, c-format msgid "the '%s%s' option requires a non-empty string argument" msgstr "длÑ ключа «%s%s» нужно указать аргументом непуÑтую Ñтроку" #: src/main.c:2965 #, c-format msgid "the '-%c' option requires a positive integer argument" msgstr "ключ «-%c» должен иÑпользоватьÑÑ Ñ Ñ†ÐµÐ»Ñ‹Ð¼ положительным аргументом" #: src/main.c:3363 #, c-format msgid "%sBuilt for %s\n" msgstr "%sЭта программа Ñобрана Ð´Ð»Ñ %s\n" #: src/main.c:3365 #, c-format msgid "%sBuilt for %s (%s)\n" msgstr "%sЭта программа Ñобрана Ð´Ð»Ñ %s (%s)\n" #: src/main.c:3376 #, c-format msgid "" "%sLicense GPLv3+: GNU GPL version 3 or later \n" "%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 GPL верÑии 3 или новее \n" "%sЭто Ñвободное программное обеÑпечение: вы можете Ñвободно изменÑть его и\n" "%sраÑпроÑтранÑть. ÐЕТ ÐИКÐКИХ ГÐРÐÐТИЙ вне пределов, допуÑтимых законом.\n" #: src/main.c:3397 #, c-format msgid "" "\n" "# Make data base, printed on %s" msgstr "" "\n" "# База данных Make, напечатана %s" #: src/main.c:3407 #, c-format msgid "" "\n" "# Finished Make data base on %s\n" msgstr "" "\n" "# Печать базы данных Make завершена %s\n" #: src/misc.c:643 #, c-format msgid "%s: user %lu (real %lu), group %lu (real %lu)\n" msgstr "" "%s: пользователь %lu (дейÑтвительный %lu),\n" "группа %lu (дейÑÑ‚Ð²Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ %lu)\n" #: src/misc.c:664 msgid "Initialized access" msgstr "ДоÑтуп инициализации" #: src/misc.c:743 msgid "User access" msgstr "ДоÑтуп пользователÑ" #: src/misc.c:791 msgid "Make access" msgstr "ДоÑтуп make" #: src/misc.c:825 msgid "Child access" msgstr "ДоÑтуп потомка" #: src/output.c:97 #, c-format msgid "%s: Entering an unknown directory\n" msgstr "%s: Вход в неизвеÑтный каталог\n" #: src/output.c:99 #, c-format msgid "%s: Leaving an unknown directory\n" msgstr "%s: Выход из неизвеÑтного каталога\n" #: src/output.c:102 #, c-format msgid "%s: Entering directory '%s'\n" msgstr "%s: вход в каталог «%s»\n" #: src/output.c:104 #, c-format msgid "%s: Leaving directory '%s'\n" msgstr "%s: выход из каталога «%s»\n" #: src/output.c:108 #, c-format msgid "%s[%u]: Entering an unknown directory\n" msgstr "%s[%u]: вход в неизвеÑтный каталог\n" #: src/output.c:110 #, c-format msgid "%s[%u]: Leaving an unknown directory\n" msgstr "%s[%u]: выход из неизвеÑтного каталога\n" #: src/output.c:113 #, c-format msgid "%s[%u]: Entering directory '%s'\n" msgstr "%s[%u]: вход в каталог «%s»\n" #: src/output.c:115 #, c-format msgid "%s[%u]: Leaving directory '%s'\n" msgstr "%s[%u]: выход из каталога «%s»\n" #: src/output.c:442 src/output.c:444 #, c-format msgid "write error: stdout" msgstr "ошибка запиÑи: stdout" #: src/output.c:624 msgid ". Stop.\n" msgstr ". ОÑтанов.\n" #: src/output.c:658 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" #: src/output.c:667 #, c-format msgid "%s: %s" msgstr "%s: %s" #: src/output.h:62 #, c-format msgid "-O[TYPE] (--output-sync[=TYPE]) is not configured for this build." msgstr "-O[ТИП] (--output-sync[=ТИП]) не наÑтроен в данной Ñборке." #: src/posixos.c:90 msgid "creating jobs pipe" msgstr "ÑоздаётÑÑ ÐºÐ°Ð½Ð°Ð» заданий" #: src/posixos.c:98 src/posixos.c:251 msgid "duping jobs pipe" msgstr "делаетÑÑ ÐºÐ¾Ð¿Ð¸Ñ ÐºÐ°Ð½Ð°Ð»Ð° заданий" #: src/posixos.c:104 msgid "init jobserver pipe" msgstr "Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ ÐºÐ°Ð½Ð°Ð»Ð° Ñервера заданий" #: src/posixos.c:119 #, c-format msgid "internal error: invalid --jobserver-auth string '%s'" msgstr "внутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ Ñтрока --jobserver-auth «%s»" #: src/posixos.c:122 #, c-format msgid "Jobserver client (fds %d,%d)\n" msgstr "Клиент Ñервера заданий (fds %d,%d)\n" #: src/posixos.c:138 msgid "jobserver pipeline" msgstr "конвейер Ñервера заданий" #: src/posixos.c:186 msgid "write jobserver" msgstr "запиÑÑŒ Ñервера заданий" #: src/posixos.c:300 #, c-format msgid "job server shut down" msgstr "Ñервер заданий выключен" #: src/posixos.c:303 msgid "pselect jobs pipe" msgstr "pselect из канала заданий" #: src/posixos.c:319 src/posixos.c:433 msgid "read jobs pipe" msgstr "чтение канала заданий" #: src/read.c:181 #, c-format msgid "Reading makefiles...\n" msgstr "Чтение make-файлов...\n" #: src/read.c:336 #, c-format msgid "Reading makefile '%s'" msgstr "Чтение make-файла «%s»" #: src/read.c:338 #, c-format msgid " (no default goal)" msgstr " (нет цели по умолчанию)" #: src/read.c:340 #, c-format msgid " (search path)" msgstr " (путь поиÑка)" #: src/read.c:342 #, c-format msgid " (don't care)" msgstr " (игнорировать ошибки)" #: src/read.c:344 #, c-format msgid " (no ~ expansion)" msgstr " (не раÑкрывать Ñимвол `~') " #: src/read.c:655 #, c-format msgid "Skipping UTF-8 BOM in makefile '%s'\n" msgstr "ПропуÑк UTF-8 BOM в make-файле «%s»\n" #: src/read.c:658 #, c-format msgid "Skipping UTF-8 BOM in makefile buffer\n" msgstr "ПропуÑк UTF-8 BOM в буфере make-файла\n" #: src/read.c:787 #, c-format msgid "invalid syntax in conditional" msgstr "неверный ÑинтакÑÐ¸Ñ Ð² уÑловном выражении" #: src/read.c:960 #, c-format msgid "%s: failed to load" msgstr "%s: не удалоÑÑŒ загрузить" #: src/read.c:986 #, c-format msgid "recipe commences before first target" msgstr "обнаружен ÑпоÑоб до первого Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ†ÐµÐ»Ð¸" #: src/read.c:1035 #, c-format msgid "missing rule before recipe" msgstr "перед ÑпоÑобом отÑутÑтвует правило" #: src/read.c:1136 #, c-format msgid "missing separator (did you mean TAB instead of 8 spaces?)" msgstr "пропущен разделитель (возможно нужен TAB вмеÑто воÑьми пробелов?)" #: src/read.c:1138 #, c-format msgid "missing separator" msgstr "пропущен разделитель" #: src/read.c:1283 #, c-format msgid "missing target pattern" msgstr "пропущен образец цели" #: src/read.c:1285 #, c-format msgid "multiple target patterns" msgstr "неÑколько образцов цели" #: src/read.c:1289 #, c-format msgid "target pattern contains no '%%'" msgstr "образец цели не Ñодержит «%%»" #: src/read.c:1404 #, c-format msgid "missing 'endif'" msgstr "отÑутÑтвует «endif»" #: src/read.c:1443 src/read.c:1488 src/variable.c:1600 #, c-format msgid "empty variable name" msgstr "пуÑтое Ð¸Ð¼Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¹" #: src/read.c:1478 #, c-format msgid "extraneous text after 'define' directive" msgstr "излишний текÑÑ‚ поÑле директивы «define»" #: src/read.c:1503 #, c-format msgid "missing 'endef', unterminated 'define'" msgstr "отÑутÑтвует «endif», Ð½ÐµÐ·Ð°Ð²ÐµÑ€ÑˆÑ‘Ð½Ð½Ð°Ñ Â«define»" #: src/read.c:1531 #, c-format msgid "extraneous text after 'endef' directive" msgstr "излишний текÑÑ‚ поÑле директивы «endef»" #: src/read.c:1603 #, c-format msgid "extraneous text after '%s' directive" msgstr "Излишний текÑÑ‚ поÑле директивы «%s»" #: src/read.c:1604 #, c-format msgid "extraneous '%s'" msgstr "излишнÑÑ Â«%s»" #: src/read.c:1632 #, c-format msgid "only one 'else' per conditional" msgstr "в уÑловном выражении возможна только одна «else»" #: src/read.c:1908 #, c-format msgid "Malformed target-specific variable definition" msgstr "Ðеправильный формат Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¹ цели" #: src/read.c:1968 #, c-format msgid "prerequisites cannot be defined in recipes" msgstr "в ÑпоÑобах не могут задаватьÑÑ Ð·Ð°Ð²Ð¸ÑимоÑти" #: src/read.c:1986 #, c-format msgid "grouped targets must provide a recipe" msgstr "Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð¾Ð²Ñ‹Ñ… целей должен предоÑтавлÑтьÑÑ ÑпоÑоб" #: src/read.c:2029 #, c-format msgid "mixed implicit and static pattern rules" msgstr "Ñмешаны неÑвные правила и правила Ñо ÑтатичеÑкими образцами" #: src/read.c:2052 #, c-format msgid "mixed implicit and normal rules" msgstr "Ñмешаны неÑвные и обычные правила" #: src/read.c:2107 #, c-format msgid "target '%s' doesn't match the target pattern" msgstr "цель «%s» не ÑоответÑтвует образцу целей" #: src/read.c:2122 src/read.c:2168 #, c-format msgid "target file '%s' has both : and :: entries" msgstr "целевой файл «%s» имеет Ð²Ñ…Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¸ Ñ :, и Ñ ::" #: src/read.c:2128 #, c-format msgid "target '%s' given more than once in the same rule" msgstr "цель «%s» указана неÑколько раз в одном правиле" #: src/read.c:2138 #, c-format msgid "warning: overriding recipe for target '%s'" msgstr "предупреждение: переопределение ÑпоÑоба Ð´Ð»Ñ Ñ†ÐµÐ»Ð¸ «%s»" #: src/read.c:2141 #, c-format msgid "warning: ignoring old recipe for target '%s'" msgstr "предупреждение: Ñтарый ÑпоÑоб Ð´Ð»Ñ Ñ†ÐµÐ»Ð¸ «%s» игнорируютÑÑ" #: src/read.c:2254 #, c-format msgid "*** mixed implicit and normal rules: deprecated syntax" msgstr "*** Ñмешаны неÑвные и обычные правила: уÑтаревший ÑинтакÑиÑ" #: src/read.c:2271 #, c-format msgid "warning: overriding group membership for target '%s'" msgstr "предупреждение: переопределение членÑтва группы Ð´Ð»Ñ Ñ†ÐµÐ»Ð¸ «%s»" #: src/read.c:2636 #, c-format msgid "warning: NUL character seen; rest of line ignored" msgstr "предупреждение: вÑтречен Ñимвол NUL; игнорируетÑÑ Ð´Ð¾ конца Ñтроки" #: src/remake.c:226 #, c-format msgid "Nothing to be done for '%s'." msgstr "Цель «%s» не требует Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´." #: src/remake.c:227 #, c-format msgid "'%s' is up to date." msgstr "«%s» не требует обновлениÑ." #: src/remake.c:323 #, c-format msgid "Pruning file '%s'.\n" msgstr "ОбрезаетÑÑ Ñ„Ð°Ð¹Ð» «%s».\n" #: src/remake.c:389 #, c-format msgid "%sNo rule to make target '%s', needed by '%s'%s" msgstr "%sÐет правила Ð´Ð»Ñ Ñборки цели «%s», требуемой Ð´Ð»Ñ Â«%s»%s" #: src/remake.c:399 #, c-format msgid "%sNo rule to make target '%s'%s" msgstr "%sÐет правила Ð´Ð»Ñ Ñборки цели «%s»%s" #: src/remake.c:425 #, c-format msgid "Considering target file '%s'.\n" msgstr "Обработка целевого файла «%s».\n" #: src/remake.c:432 #, c-format msgid "Recently tried and failed to update file '%s'.\n" msgstr "ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° обновить файл «%s» завершилаÑÑŒ неудачно.\n" #: src/remake.c:444 #, c-format msgid "File '%s' was considered already.\n" msgstr "Файл «%s» уже был обработан.\n" #: src/remake.c:454 #, c-format msgid "Still updating file '%s'.\n" msgstr "Файл «%s» обновлÑетÑÑ Ð² данный момент.\n" #: src/remake.c:457 #, c-format msgid "Finished updating file '%s'.\n" msgstr "Обновление файла «%s» завершено.\n" #: src/remake.c:486 #, c-format msgid "File '%s' does not exist.\n" msgstr "Файл «%s» не ÑущеÑтвует.\n" #: src/remake.c:494 #, c-format msgid "" "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp" msgstr "" "*** Предупреждение: у файла «%s» параметр LOW_RESOLUTION_TIME Ñодержит метку " "времени Ñ Ð²Ñ‹Ñокой точноÑтью" #: src/remake.c:507 src/remake.c:1039 #, c-format msgid "Found an implicit rule for '%s'.\n" msgstr "Ðайдено неÑвное правило Ð´Ð»Ñ Â«%s».\n" #: src/remake.c:509 src/remake.c:1041 #, c-format msgid "No implicit rule found for '%s'.\n" msgstr "Ðе найдено неÑвного правила Ð´Ð»Ñ Â«%s».\n" #: src/remake.c:515 #, c-format msgid "Using default recipe for '%s'.\n" msgstr "ИÑпользование ÑпоÑоба по умолчанию Ð´Ð»Ñ Â«%s».\n" #: src/remake.c:549 src/remake.c:1088 #, c-format msgid "Circular %s <- %s dependency dropped." msgstr "ЦикличеÑÐºÐ°Ñ Ð·Ð°Ð²Ð¸ÑимоÑть %s <- %s пропущена." #: src/remake.c:674 #, c-format msgid "Finished prerequisites of target file '%s'.\n" msgstr "Обновление целей, от которых завиÑит целевой файл «%s», завершено.\n" #: src/remake.c:680 #, c-format msgid "The prerequisites of '%s' are being made.\n" msgstr "Цели, от которых завиÑит «%s», в наÑтоÑщий момент ÑобираютÑÑ.\n" #: src/remake.c:694 #, c-format msgid "Giving up on target file '%s'.\n" msgstr "Ðварийный оÑтанов на целевом файле «%s».\n" #: src/remake.c:699 #, c-format msgid "Target '%s' not remade because of errors." msgstr "Цель «%s» не была переÑобрана из-за ошибок." #: src/remake.c:751 #, c-format msgid "Prerequisite '%s' is order-only for target '%s'.\n" msgstr "ЗавиÑимоÑть «%s» Ð´Ð»Ñ Ñ†ÐµÐ»Ð¸ «%s» завиÑит от порÑдка.\n" #: src/remake.c:756 #, c-format msgid "Prerequisite '%s' of target '%s' does not exist.\n" msgstr "ЗавиÑимоÑть «%s» цели «%s» не ÑущеÑтвует.\n" #: src/remake.c:761 #, c-format msgid "Prerequisite '%s' is newer than target '%s'.\n" msgstr "ЗавиÑимоÑть «%s» новее, чем цель «%s».\n" #: src/remake.c:764 #, c-format msgid "Prerequisite '%s' is older than target '%s'.\n" msgstr "ЗавиÑимоÑть «%s» Ñтарее, чем цель «%s».\n" #: src/remake.c:782 #, c-format msgid "Target '%s' is double-colon and has no prerequisites.\n" msgstr "Цель «%s» объÑвлена Ñ Ð´Ð²ÑƒÐ¼Ñ Ð´Ð²Ð¾ÐµÑ‚Ð¾Ñ‡Ð¸Ñми и не имеет завиÑимоÑтей.\n" #: src/remake.c:789 #, c-format msgid "No recipe for '%s' and no prerequisites actually changed.\n" msgstr "СпоÑоб Ð´Ð»Ñ Â«%s» не задан, и начальные уÑÐ»Ð¾Ð²Ð¸Ñ Ð½Ðµ изменены.\n" #: src/remake.c:794 #, c-format msgid "Making '%s' due to always-make flag.\n" msgstr "ПереÑборка «%s» из-за уÑтановленного флага always-make.\n" #: src/remake.c:802 #, c-format msgid "No need to remake target '%s'" msgstr "Ðет необходимоÑти переÑобирать цель «%s»" #: src/remake.c:804 #, c-format msgid "; using VPATH name '%s'" msgstr "; иÑпользуетÑÑ VPATH-Ð¸Ð¼Ñ Â«%s»" #: src/remake.c:824 #, c-format msgid "Must remake target '%s'.\n" msgstr "Ðеобходимо переÑобрать цель «%s».\n" #: src/remake.c:830 #, c-format msgid " Ignoring VPATH name '%s'.\n" msgstr " ИгнорируетÑÑ VPATH-Ð¸Ð¼Ñ Â«%s».\n" #: src/remake.c:839 #, c-format msgid "Recipe of '%s' is being run.\n" msgstr "Ð’ наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÑетÑÑ ÑпоÑоб «%s».\n" #: src/remake.c:846 #, c-format msgid "Failed to remake target file '%s'.\n" msgstr "Ðе удалоÑÑŒ переÑоздать файл цели «%s».\n" #: src/remake.c:849 #, c-format msgid "Successfully remade target file '%s'.\n" msgstr "Целевой файл «%s» уÑпешно переÑоздан.\n" #: src/remake.c:852 #, c-format msgid "Target file '%s' needs to be remade under -q.\n" msgstr "Целевой файл «%s» требует переÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñ ÐºÐ»ÑŽÑ‡Ð¾Ð¼ -q.\n" #: src/remake.c:1047 #, c-format msgid "Using default commands for '%s'.\n" msgstr "ИÑпользование команд по умолчанию Ð´Ð»Ñ Â«%s».\n" #: src/remake.c:1422 #, c-format msgid "Warning: File '%s' has modification time %s s in the future" msgstr "Предупреждение: Ð²Ñ€ÐµÐ¼Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° «%s» находитÑÑ Ð² будущем (%s)" #: src/remake.c:1662 #, c-format msgid ".LIBPATTERNS element '%s' is not a pattern" msgstr "Элемент .LIBPATTERNS «%s» не ÑвлÑетÑÑ Ð¾Ð±Ñ€Ð°Ð·Ñ†Ð¾Ð¼" #: src/remote-cstms.c:122 #, c-format msgid "Customs won't export: %s\n" msgstr "Ðе ÑкÑпортируемые наÑтройки: %s\n" #: src/rule.c:289 #, c-format msgid "warning: ignoring prerequisites on suffix rule definition" msgstr "" #: src/rule.c:530 msgid "" "\n" "# Implicit Rules" msgstr "" "\n" "# ÐеÑвные правила" #: src/rule.c:545 msgid "" "\n" "# No implicit rules." msgstr "" "\n" "# ÐеÑвных правил нет." #: src/rule.c:548 #, c-format msgid "" "\n" "# %u implicit rules, %u (%.1f%%) terminal." msgstr "" "\n" "# ÐеÑвных правил: %u, терминальных: %u (%.1f%%)" #: src/rule.c:557 #, c-format msgid "BUG: num_pattern_rules is wrong! %u != %u" msgstr "ОШИБКÐ: неверное значение num_pattern_rules! %u != %u" #: src/signame.c:84 msgid "unknown signal" msgstr "неизвеÑтный Ñигнал" #: src/signame.c:92 msgid "Hangup" msgstr "Обрыв терминальной линии" #: src/signame.c:95 msgid "Interrupt" msgstr "Прерывание" #: src/signame.c:98 msgid "Quit" msgstr "Ðварийное прерывание" #: src/signame.c:101 msgid "Illegal Instruction" msgstr "ÐедопуÑÑ‚Ð¸Ð¼Ð°Ñ Ð¸Ð½ÑтрукциÑ" #: src/signame.c:104 msgid "Trace/breakpoint trap" msgstr "Прерывание на контрольной точке" #: src/signame.c:109 msgid "Aborted" msgstr "Прервано" #: src/signame.c:112 msgid "IOT trap" msgstr "Ошибка IOT" #: src/signame.c:115 msgid "EMT trap" msgstr "Ошибка ÑмулÑции" #: src/signame.c:118 msgid "Floating point exception" msgstr "Ошибка операции Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ точкой" #: src/signame.c:121 msgid "Killed" msgstr "Уничтожение" #: src/signame.c:124 msgid "Bus error" msgstr "Ðеверное обращение к памÑти" #: src/signame.c:127 msgid "Segmentation fault" msgstr "Ðарушение прав доÑтупа к памÑти" #: src/signame.c:130 msgid "Bad system call" msgstr "Ðеправильный ÑиÑтемный вызов" #: src/signame.c:133 msgid "Broken pipe" msgstr "Обрыв канала" #: src/signame.c:136 msgid "Alarm clock" msgstr "Сигнал по таймеру" #: src/signame.c:139 msgid "Terminated" msgstr "Завершение" #: src/signame.c:142 msgid "User defined signal 1" msgstr "ОпределÑемый пользователем Ñигнал 1" #: src/signame.c:145 msgid "User defined signal 2" msgstr "ОпределÑемый пользователем Ñигнал 2" #: src/signame.c:150 src/signame.c:153 msgid "Child exited" msgstr "Потомок завершил работу" #: src/signame.c:156 msgid "Power failure" msgstr "Отказ питаниÑ" #: src/signame.c:159 msgid "Stopped" msgstr "ОÑтанов" #: src/signame.c:162 msgid "Stopped (tty input)" msgstr "ОÑтанов (ввод Ñ Ñ‚ÐµÑ€Ð¼Ð¸Ð½Ð°Ð»Ð°) " #: src/signame.c:165 msgid "Stopped (tty output)" msgstr "ОÑтанов (вывод на терминал)" #: src/signame.c:168 msgid "Stopped (signal)" msgstr "ОÑтанов (Ñигнал)" #: src/signame.c:171 msgid "CPU time limit exceeded" msgstr "Превышен предел процеÑÑорного времени" #: src/signame.c:174 msgid "File size limit exceeded" msgstr "Превышен предел размера файла" #: src/signame.c:177 msgid "Virtual timer expired" msgstr "Виртуальное Ð²Ñ€ÐµÐ¼Ñ Ð¸Ñтекло" #: src/signame.c:180 msgid "Profiling timer expired" msgstr "Ð’Ñ€ÐµÐ¼Ñ Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ñтекло" #: src/signame.c:186 msgid "Window changed" msgstr "Окно изменено" #: src/signame.c:189 msgid "Continued" msgstr "Возобновление" #: src/signame.c:192 msgid "Urgent I/O condition" msgstr "УÑÐ»Ð¾Ð²Ð¸Ñ ÑкÑтренного ввода/вывода" #: src/signame.c:199 src/signame.c:208 msgid "I/O possible" msgstr "Возможен ввод/вывод" #: src/signame.c:202 msgid "SIGWIND" msgstr "SIGWIND" #: src/signame.c:205 msgid "SIGPHONE" msgstr "SIGPHONE" #: src/signame.c:211 msgid "Resource lost" msgstr "РеÑÑƒÑ€Ñ Ð¿Ð¾Ñ‚ÐµÑ€Ñн" #: src/signame.c:214 msgid "Danger signal" msgstr "Сигнал опаÑноÑти" #: src/signame.c:217 msgid "Information request" msgstr "Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸" #: src/signame.c:220 msgid "Floating point co-processor not available" msgstr "СопроцеÑÑор Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ точкой недоÑтупен" #: src/strcache.c:274 #, c-format msgid "" "\n" "%s No strcache buffers\n" msgstr "" "\n" "%s без буферов strcache\n" #: src/strcache.c:304 #, c-format msgid "" "\n" "%s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu " "B\n" msgstr "" "\n" "%s буферы strcache: %lu (%lu) / Ñтрок = %lu / хранилище = %lu Б / Ñред = %lu " "Б\n" #: src/strcache.c:308 #, c-format msgid "" "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B\n" msgstr "" "%s текущий buf: размер = %hu Б / иÑпользуетÑÑ = %hu Б / кол-во = %hu / Ñред " "= %u Б\n" #: src/strcache.c:319 #, c-format msgid "%s other used: total = %lu B / count = %lu / avg = %lu B\n" msgstr "" "%s Ð´Ð»Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð³Ð¾ иÑпользуетÑÑ: вÑего = %lu Б / кол-во = %lu / Ñред = %lu Б\n" #: src/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" #: src/strcache.c:326 #, c-format msgid "" "\n" "%s strcache performance: lookups = %lu / hit rate = %lu%%\n" msgstr "" "\n" "%s производительноÑть strcache: поиÑков = %lu / найдено = %lu%%\n" #: src/strcache.c:328 msgid "" "# hash-table stats:\n" "# " msgstr "" "# ÑоÑтоÑние хеш-таблицы:\n" "# " #: src/variable.c:1653 msgid "automatic" msgstr "автоматичеÑкаÑ" #: src/variable.c:1656 msgid "default" msgstr "по умолчанию" #: src/variable.c:1659 msgid "environment" msgstr "определена в Ñреде" #: src/variable.c:1662 msgid "makefile" msgstr "make-файл" #: src/variable.c:1665 msgid "environment under -e" msgstr "окружение Ñ -e" #: src/variable.c:1668 msgid "command line" msgstr "определена в командной Ñтроке" #: src/variable.c:1671 msgid "'override' directive" msgstr "Директива «override»" #: src/variable.c:1682 #, c-format msgid " (from '%s', line %lu)" msgstr " (из «%s», Ñтрока %lu)" #: src/variable.c:1745 msgid "# variable set hash-table stats:\n" msgstr "# ÑоÑтоÑние переменных в хеш-таблице:\n" #: src/variable.c:1756 msgid "" "\n" "# Variables\n" msgstr "" "\n" "# Переменные\n" #: src/variable.c:1760 msgid "" "\n" "# Pattern-specific Variable Values" msgstr "" "\n" "# Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ñ‹Ñ… оÑобенные Ð´Ð»Ñ Ð¼Ð°Ñки" #: src/variable.c:1774 msgid "" "\n" "# No pattern-specific variable values." msgstr "" "\n" "# Ðет значений переменных оÑобенных Ð´Ð»Ñ Ð¼Ð°Ñки." #: src/variable.c:1776 #, c-format msgid "" "\n" "# %u pattern-specific variable values" msgstr "" "\n" "# %u значений переменных оÑобенных Ð´Ð»Ñ Ð¼Ð°Ñки" #: src/variable.h:229 #, c-format msgid "warning: undefined variable '%.*s'" msgstr "предупреждение: Ð½ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð°Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Â«%.*s»" #: src/vmsfunctions.c:91 #, c-format msgid "sys$search() failed with %d\n" msgstr "sys$search() вернула код ошибки %d\n" #: src/vmsjobs.c:244 #, c-format msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n" msgstr "" "-предупреждение, возможно вам потребуетÑÑ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ разрешить\n" "обработку CTRL-Y из DCL.\n" #: src/vmsjobs.c:681 #, c-format msgid "BUILTIN CD %s\n" msgstr "ВСТРОЕÐÐЫЙ CD %s\n" #: src/vmsjobs.c:1224 #, c-format msgid "DCL: %s\n" msgstr "DCL: %s\n" #: src/vmsjobs.c:1284 #, c-format msgid "Append output to %s\n" msgstr "Стандартный вывод добавлен в %s\n" #: src/vmsjobs.c:1309 #, c-format msgid "Append %.*s and cleanup\n" msgstr "Добавить %.*s и очиÑтить\n" #: src/vmsjobs.c:1322 #, c-format msgid "Executing %s instead\n" msgstr "ВмеÑто заданного выполнÑетÑÑ %s\n" #: src/vpath.c:603 msgid "" "\n" "# VPATH Search Paths\n" msgstr "" "\n" "# Пути поиÑка VPATH\n" #: src/vpath.c:620 msgid "# No 'vpath' search paths." msgstr "# Ðе определён путь поиÑка «vpath»." #: src/vpath.c:622 #, c-format msgid "" "\n" "# %u 'vpath' search paths.\n" msgstr "" "\n" "# %u путей поиÑка по «vpath»\n" #: src/vpath.c:625 msgid "" "\n" "# No general ('VPATH' variable) search path." msgstr "" "\n" "# Ðе определён общий (Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Â«VPATH») путь поиÑка." #: src/vpath.c:631 msgid "" "\n" "# General ('VPATH' variable) search path:\n" "# " msgstr "" "\n" "# Общий (Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Â«VPATH») путь поиÑка:\n" "# " #: src/w32/w32os.c:44 #, c-format msgid "Jobserver slots limited to %d\n" msgstr "КоличеÑтво Ñлотов Ñервера заданий ограничено %d\n" #: src/w32/w32os.c:60 #, c-format msgid "creating jobserver semaphore: (Error %ld: %s)" msgstr "Ñоздание Ñемафора Ñервера заданий: (ошибка %ld: %s)" #: src/w32/w32os.c:79 #, c-format msgid "" "internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)" msgstr "" "внутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°: не удалоÑÑŒ открыть Ñемафор Ñервера заданий «%s»: (ошибка " "%ld: %s)" #: src/w32/w32os.c:82 #, c-format msgid "Jobserver client (semaphore %s)\n" msgstr "Клиент Ñервера заданий (Ñемафор %s)\n" #: src/w32/w32os.c:123 #, c-format msgid "release jobserver semaphore: (Error %ld: %s)" msgstr "оÑвобождение Ñемафора Ñервера заданий: (ошибка %ld: %s)" #: src/w32/w32os.c:194 #, c-format msgid "semaphore or child process wait: (Error %ld: %s)" msgstr "ожидание Ñемафора или процеÑÑа-потомка: (ошибка %ld: %s)" #~ msgid "%s: %s: Command not found\n" #~ msgstr "%s: %s: Команда не найдена\n" #~ msgid "%s[%u]: %s: Command not found\n" #~ msgstr "%s[%u]: %s: Команда не найдена\n" #~ msgid "%s: Shell program not found" #~ msgstr "%s: Командный процеÑÑор не найден" #~ msgid "%s is suspending for 30 seconds..." #~ msgstr "%s приоÑтанавливаетÑÑ Ð½Ð° 30 Ñекунд..." #~ msgid "done sleep(30). Continuing.\n" #~ msgstr "sleep(30) завершён. Продолжаем.\n" #~ msgid "Unknown error %d" #~ msgstr "ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° %d" #~ msgid "Warning: File '%s' has modification time in the future" #~ msgstr "Предупреждение: Ð²Ñ€ÐµÐ¼Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° «%s» находитÑÑ Ð² будущем" #~ msgid " terminal." #~ msgstr " терминал." #~ 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" #~ msgid "internal error: multiple --jobserver-fds options" #~ msgstr "внутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°: неÑколько ключей --jobserver-fds" #~ msgid "virtual memory exhausted" #~ msgstr "закончилаÑÑŒ Ð²Ð¸Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð°Ñ Ð¿Ð°Ð¼Ñть" #~ msgid "write error" #~ msgstr "ошибка запиÑи" #~ msgid "BUILTIN RM %s\n" #~ msgstr "ВСТРОЕÐÐЫЙ RM %s\n" #~ msgid "# Invalid value in 'update_status' member!" #~ msgstr "# Ðеверное значение члена «update_status»!" #~ msgid "unknown trace mode '%s'" #~ msgstr "неизвеÑтный режим траÑÑировки «%s»" #~ msgid "*** [%s] Error 0x%x (ignored)" #~ msgstr "*** [%s] Ошибка 0x%x (игнорирована)" #~ msgid "Invoking recipe from %s:%lu to update target `%s'.\n" #~ msgstr "ПрименÑетÑÑ ÑпоÑоб из %s:%lu Ð´Ð»Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñ†ÐµÐ»Ð¸ `%s'.\n" #~ msgid "Invoking builtin recipe to update target `%s'.\n" #~ msgstr "ВыполнÑетÑÑ Ð²Ñтроенный ÑпоÑоб Ð´Ð»Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñ†ÐµÐ»Ð¸ `%s'.\n" #~ msgid "%s # of strcache buffers: %d (* %d B/buffer = %d B)\n" #~ msgstr "%s # буферов strcache: %d (* %d B/buffer = %d B)\n" #~ msgid "" #~ "\n" #~ "# strcache hash-table stats:\n" #~ "# " #~ msgstr "" #~ "\n" #~ "# ÑоÑтоÑние хеш-таблицы strcache:\n" #~ "# " #~ msgid "process_easy() failed failed to launch process (e=%ld)\n" #~ msgstr "process_easy() не Ñмогла запуÑтить процеÑÑ (e=%ld)\n" #~ 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" #~ "%sPARTICULAR PURPOSE.\n" #~ msgstr "" #~ "%sЭто ÑÐ²Ð¾Ð±Ð¾Ð´Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð°; подробноÑти об уÑловиÑÑ… раÑпроÑÑ‚Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ " #~ "Ñмотрите\n" #~ "%sв иÑходном коде. Мы ÐЕ предоÑтавлÑем гарантий; даже гарантий\n" #~ "%sКОММЕРЧЕСКОЙ ЦЕÐÐОСТИ или ПРИГОДÐОСТИ ДЛЯ КÐКОЙ-ЛИБО ЦЕЛИ.\n" #~ msgid "extraneous `endef'" #~ msgstr "излишний `endef'" #~ msgid "empty `override' directive" #~ msgstr "пуÑÑ‚Ð°Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð° `override'" #~ msgid "invalid `override' directive" #~ msgstr "Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¸Ð²Ð° `override'" #~ msgid "-warning, CTRL-Y will leave sub-process(es) around.\n" #~ msgstr "-предупреждение, поÑле CTRL-Y оÑтанутÑÑ Ñуб-процеÑÑÑ‹.\n" make-4.3/po/Rules-quot0000644000175000017500000000416513611136462011650 00000000000000# 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 .SUFFIXES: .insert-header .po-update-en en@quot.po-create: $(MAKE) en@quot.po-update en@boldquot.po-create: $(MAKE) en@boldquot.po-update en@quot.po-update: en@quot.po-update-en 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-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) $(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 \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ exit 1; \ fi; \ fi; \ else \ echo "creation of $$lang.po failed!" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ fi en@quot.insert-header: insert-header.sin sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header en@boldquot.insert-header: insert-header.sin sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header mostlyclean: mostlyclean-quot mostlyclean-quot: rm -f *.insert-header make-4.3/po/lt.po0000644000175000017500000013202513611136531010616 00000000000000# translation of make-3.81 to Lithuanian # Copyright (C) 2008 Free Software Foundation, Inc. # This file is distributed under the same license as the make package. # # Gintautas Miliauskas , 2008. msgid "" msgstr "" "Project-Id-Version: make-3.81\n" "Report-Msgid-Bugs-To: bug-make@gnu.org\n" "POT-Creation-Date: 2020-01-19 15:34-0500\n" "PO-Revision-Date: 2008-05-17 21:42+0300\n" "Last-Translator: Gintautas Miliauskas \n" "Language-Team: Lithuanian \n" "Language: lt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "X-Generator: KBabel 1.11.4\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n" "%100<10 || n%100>=20) ? 1 : 2);\n" #: src/ar.c:46 #, fuzzy, c-format msgid "attempt to use unsupported feature: '%s'" msgstr "bandymas naudoti nepalaikomÄ… funkcionalumÄ…: „%s“" #: src/ar.c:123 #, c-format msgid "touch archive member is not available on VMS" msgstr "" #: src/ar.c:147 #, fuzzy, c-format msgid "touch: Archive '%s' does not exist" msgstr "touch: Archyvas „%s“ neegzistuoja" #: src/ar.c:150 #, fuzzy, c-format msgid "touch: '%s' is not a valid archive" msgstr "touch: „%s“ nÄ—ra taisyklingas archyvas" #: src/ar.c:157 #, fuzzy, c-format msgid "touch: Member '%s' does not exist in '%s'" msgstr "touch: Archyvas „%s“ neegzistuoja" #: src/ar.c:164 #, c-format msgid "touch: Bad return code from ar_member_touch on '%s'" msgstr "" #: src/arscan.c:130 #, c-format msgid "lbr$set_module() failed to extract module info, status = %d" msgstr "" #: src/arscan.c:236 #, c-format msgid "lbr$ini_control() failed with status = %d" msgstr "" #: src/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“" #: src/arscan.c:944 #, fuzzy, c-format msgid "Member '%s'%s: %ld bytes at %ld (%ld).\n" msgstr "Narys „%s“%s: %ld baitų pozicijoje %ld (%ld).\n" #: src/arscan.c:945 msgid " (name might be truncated)" msgstr " (pavadinimas gali bÅ«ti sutrumpintas)" #: src/arscan.c:947 #, c-format msgid " Date %s" msgstr " Data %s" #: src/arscan.c:948 #, c-format msgid " uid = %d, gid = %d, mode = 0%o.\n" msgstr " uid = %d, gid = %d, mode = 0%o.\n" #: src/commands.c:403 #, c-format msgid "Recipe has too many lines (%ud)" msgstr "" #: src/commands.c:504 msgid "*** Break.\n" msgstr "" #: src/commands.c:628 #, c-format msgid "*** [%s] Archive member '%s' may be bogus; not deleted" msgstr "" #: src/commands.c:632 #, c-format msgid "*** Archive member '%s' may be bogus; not deleted" msgstr "" #: src/commands.c:646 #, fuzzy, c-format msgid "*** [%s] Deleting file '%s'" msgstr "*** [%s] Trinamas failas „%s“" #: src/commands.c:648 #, fuzzy, c-format msgid "*** Deleting file '%s'" msgstr "*** Trinamas failas „%s“" #: src/commands.c:684 #, fuzzy msgid "# recipe to execute" msgstr "# vykdytinos komandos" #: src/commands.c:687 msgid " (built-in):" msgstr " (integruota)" #: src/commands.c:689 #, fuzzy, c-format msgid " (from '%s', line %lu):\n" msgstr " (nuo „%s“, %lu eilutÄ—):\n" #: src/dir.c:1073 msgid "" "\n" "# Directories\n" msgstr "" "\n" "# Aplankai\n" #: src/dir.c:1085 #, c-format msgid "# %s: could not be stat'd.\n" msgstr "# %s: negalÄ—jo bÅ«ti stat'intas.\n" #: src/dir.c:1089 #, fuzzy msgid "# %s (key %s, mtime %I64u): could not be opened.\n" msgstr "# %s (key %s, mtime %d): nepavyko atverti.\n" #: src/dir.c:1094 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): could not be opened.\n" msgstr "" #: src/dir.c:1099 #, c-format msgid "# %s (device %ld, inode %ld): could not be opened.\n" msgstr "" #: src/dir.c:1126 #, fuzzy msgid "# %s (key %s, mtime %I64u): " msgstr "# %s (key %s, mtime %d): nepavyko atverti.\n" #: src/dir.c:1131 #, c-format msgid "# %s (device %d, inode [%d,%d,%d]): " msgstr "" #: src/dir.c:1136 #, c-format msgid "# %s (device %ld, inode %ld): " msgstr "" #: src/dir.c:1142 src/dir.c:1163 msgid "No" msgstr "Ne" #: src/dir.c:1145 src/dir.c:1166 msgid " files, " msgstr " failai, " #: src/dir.c:1147 src/dir.c:1168 msgid "no" msgstr "ne" #: src/dir.c:1150 msgid " impossibilities" msgstr " negalimybÄ—s" #: src/dir.c:1154 msgid " so far." msgstr " kol kas." #: src/dir.c:1171 #, c-format msgid " impossibilities in %lu directories.\n" msgstr " negalimybÄ—s %lu aplankuose.\n" #: src/expand.c:125 #, fuzzy, c-format msgid "Recursive variable '%s' references itself (eventually)" msgstr "Rekursyvus kintamasis „%s“ nukreipia į save (anksÄiau ar vÄ—liau)" #: src/expand.c:271 #, c-format msgid "unterminated variable reference" msgstr "neterminuota nuoroda į kintamÄ…jį" #: src/file.c:278 #, fuzzy, c-format msgid "Recipe was specified for file '%s' at %s:%lu," msgstr "Komandos nurodytos failui „%s“ %s:%lu," #: src/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Ä…" #: src/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“." #: src/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." #: src/file.c:310 #, c-format msgid "can't rename single-colon '%s' to double-colon '%s'" msgstr "" #: src/file.c:316 #, c-format msgid "can't rename double-colon '%s' to single-colon '%s'" msgstr "" #: src/file.c:408 #, fuzzy, c-format msgid "*** Deleting intermediate file '%s'" msgstr "*** Trinamas tarpinis failas „%s“" #: src/file.c:412 #, c-format msgid "Removing intermediate files...\n" msgstr "Å alinami tarpiniai failai...\n" #: src/file.c:872 msgid "Current time" msgstr "Dabartinis laikas" #: src/file.c:876 #, c-format msgid "%s: Timestamp out of range; substituting %s" msgstr "%s: Laiko žymÄ— už rėžių; keiÄiama į %s" #: src/file.c:1016 msgid "# Not a target:" msgstr "# Ne tikslas:" #: src/file.c:1021 #, fuzzy msgid "# Precious file (prerequisite of .PRECIOUS)." msgstr "# Brangus failas (reikalingas .PRECIOUS)" #: src/file.c:1023 #, fuzzy msgid "# Phony target (prerequisite of .PHONY)." msgstr "# Keistas tikslas (reikalingas .PHONY)." #: src/file.c:1025 #, fuzzy msgid "# Command line target." msgstr "# KomandinÄ—s eilutÄ—s tikslas" #: src/file.c:1027 msgid "# A default, MAKEFILES, or -include/sinclude makefile." msgstr "# Numatytoji reikÅ¡mÄ—, MAKEFILES, arba -include/sinclude „make“ failas" #: src/file.c:1029 #, fuzzy msgid "# Builtin rule" msgstr "" "\n" "# NÄ—ra neiÅ¡reikÅ¡tinių taisyklių." #: src/file.c:1031 msgid "# Implicit rule search has been done." msgstr "# NeiÅ¡reikÅ¡tinių taisyklių paieÅ¡ka atlikta." #: src/file.c:1032 msgid "# Implicit rule search has not been done." msgstr "# NeiÅ¡reikÅ¡tinių taisyklių paieÅ¡ka neatlikta." #: src/file.c:1034 #, fuzzy, c-format msgid "# Implicit/static pattern stem: '%s'\n" msgstr "# IÅ¡reikÅ¡tinis/statinis Å¡ablono kamienas: „%s“\n" #: src/file.c:1036 #, fuzzy msgid "# File is an intermediate prerequisite." msgstr "# Failas yra tarpinÄ— sÄ…lyga" #: src/file.c:1040 msgid "# Also makes:" msgstr "# Taip pat sukuria:" #: src/file.c:1046 msgid "# Modification time never checked." msgstr "# Modifikacijos laikas niekada netikrintas." #: src/file.c:1048 msgid "# File does not exist." msgstr "# Failas neegzistuoja." #: src/file.c:1050 msgid "# File is very old." msgstr "# Failas labai senas." #: src/file.c:1055 #, c-format msgid "# Last modified %s\n" msgstr "# Paskutinį kartÄ… pakeista %s\n" #: src/file.c:1058 msgid "# File has been updated." msgstr "# Failas atnaujintas." #: src/file.c:1058 msgid "# File has not been updated." msgstr "# Failas nebuvo atnaujintas." #: src/file.c:1062 #, fuzzy msgid "# Recipe currently running (THIS IS A BUG)." msgstr "# Dabar vykdomos komandos (TAI KLAIDA)." #: src/file.c:1065 #, fuzzy msgid "# Dependencies recipe running (THIS IS A BUG)." msgstr "# Vykdomos priklausomybių komandos (TAI KLAIDA)." #: src/file.c:1074 msgid "# Successfully updated." msgstr "# SÄ—kmingai atnaujinta." #: src/file.c:1078 msgid "# Needs to be updated (-q is set)." msgstr "# Turi bÅ«ti atnaujinta (-q nustatyta)." #: src/file.c:1081 msgid "# Failed to be updated." msgstr "# Nepavyko atnaujinti." #: src/file.c:1086 #, fuzzy msgid "# Invalid value in 'command_state' member!" msgstr "# Netaisyklinga reikÅ¡mÄ— „command_state“ naryje!" #: src/file.c:1105 msgid "" "\n" "# Files" msgstr "" "\n" "# Failai" #: src/file.c:1109 msgid "" "\n" "# files hash-table stats:\n" "# " msgstr "" "\n" "# failų maiÅ¡os lentelÄ—s statistika:\n" "# " #: src/file.c:1119 #, c-format msgid "%s: Field '%s' not cached: %s" msgstr "" #: src/function.c:794 msgid "non-numeric first argument to 'word' function" msgstr "" #: src/function.c:799 #, c-format msgid "first argument to 'word' function must be greater than 0" msgstr "" #: src/function.c:819 msgid "non-numeric first argument to 'wordlist' function" msgstr "" #: src/function.c:821 msgid "non-numeric second argument to 'wordlist' function" msgstr "" #: src/function.c:1533 #, c-format msgid "windows32_openpipe: DuplicateHandle(In) failed (e=%ld)\n" msgstr "" #: src/function.c:1557 #, c-format msgid "windows32_openpipe: DuplicateHandle(Err) failed (e=%ld)\n" msgstr "" #: src/function.c:1564 #, c-format msgid "CreatePipe() failed (e=%ld)\n" msgstr "" #: src/function.c:1572 #, c-format msgid "windows32_openpipe(): process_init_fd() failed\n" msgstr "" #: src/function.c:1857 #, c-format msgid "Cleaning up temporary batch file %s\n" msgstr "" #: src/function.c:2230 src/function.c:2255 #, c-format msgid "file: missing filename" msgstr "" #: src/function.c:2234 src/function.c:2265 #, fuzzy, c-format msgid "open: %s: %s" msgstr "%s: %s" #: src/function.c:2242 #, fuzzy, c-format msgid "write: %s: %s" msgstr "raÅ¡ymo klaida: %s" #: src/function.c:2245 src/function.c:2282 #, fuzzy, c-format msgid "close: %s: %s" msgstr "%s%s: %s" #: src/function.c:2258 #, c-format msgid "file: too many arguments" msgstr "" #: src/function.c:2277 #, fuzzy, c-format msgid "read: %s: %s" msgstr "%s: %s" #: src/function.c:2290 #, fuzzy, c-format msgid "file: invalid file operation: %s" msgstr "%s: netaisyklingas argumentas -- %c\n" #: src/function.c:2405 #, c-format msgid "insufficient number of arguments (%d) to function '%s'" msgstr "" #: src/function.c:2417 #, c-format msgid "unimplemented on this platform: function '%s'" msgstr "" #: src/function.c:2483 #, c-format msgid "unterminated call to function '%s': missing '%c'" msgstr "" #: src/function.c:2667 #, c-format msgid "Empty function name" msgstr "" #: src/function.c:2669 #, c-format msgid "Invalid function name: %s" msgstr "" #: src/function.c:2671 #, c-format msgid "Function name too long: %s" msgstr "" #: src/function.c:2674 #, c-format msgid "Invalid minimum argument count (%u) for function %s" msgstr "" #: src/function.c:2677 #, c-format msgid "Invalid maximum argument count (%u) for function %s" msgstr "" #: src/getopt.c:659 #, fuzzy, c-format msgid "%s: option '%s' is ambiguous\n" msgstr "%s: parametras `%s' dviprasmis\n" #: src/getopt.c:683 #, fuzzy, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s: argumentas „--%s“ neleidžia parametro\n" #: src/getopt.c:688 #, fuzzy, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s: argumentas „%c%s“ neleidžia parametro\n" #: src/getopt.c:705 src/getopt.c:878 #, fuzzy, c-format msgid "%s: option '%s' requires an argument\n" msgstr "%s: parametrui „%s“ reikia argumento\n" #: src/getopt.c:734 #, fuzzy, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s: neatpažintas argumentas „--%s“\n" #: src/getopt.c:738 #, fuzzy, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s: neatpažintas argumentas „%c%s“\n" #: src/getopt.c:764 #, c-format msgid "%s: illegal option -- %c\n" msgstr "%s: neleistinas parametras -- %c\n" #: src/getopt.c:767 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s: netaisyklingas argumentas -- %c\n" #: src/getopt.c:797 src/getopt.c:927 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: parametrui reikia argumento -- %c\n" #: src/getopt.c:844 #, fuzzy, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s: parametras „-W %s“ dviprasmis\n" #: src/getopt.c:862 #, fuzzy, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s: parametras „-W %s“ neleidžia argumento\n" #: src/guile.c:58 #, c-format msgid "guile: Expanding '%s'\n" msgstr "" #: src/guile.c:74 #, c-format msgid "guile: Evaluating '%s'\n" msgstr "" #: src/hash.c:50 #, c-format msgid "can't allocate %lu bytes for hash table: memory exhausted" msgstr "" #: src/hash.c:280 #, c-format msgid "Load=%lu/%lu=%.0f%%, " msgstr "" #: src/hash.c:282 #, c-format msgid "Rehash=%u, " msgstr "" #: src/hash.c:283 #, c-format msgid "Collisions=%lu/%lu=%.0f%%" msgstr "" #: src/implicit.c:38 #, fuzzy, c-format msgid "Looking for an implicit rule for '%s'.\n" msgstr "Rasta neiÅ¡reikÅ¡tinÄ— taisyklÄ— tikslui „%s“.\n" #: src/implicit.c:54 #, fuzzy, c-format msgid "Looking for archive-member implicit rule for '%s'.\n" msgstr "Rasta neiÅ¡reikÅ¡tinÄ— taisyklÄ— tikslui „%s“.\n" #: src/implicit.c:311 #, c-format msgid "Avoiding implicit rule recursion.\n" msgstr "" #: src/implicit.c:484 #, c-format msgid "Stem too long: '%s%.*s'.\n" msgstr "" #: src/implicit.c:490 #, c-format msgid "Trying pattern rule with stem '%.*s'.\n" msgstr "" #: src/implicit.c:717 #, c-format msgid "Rejecting impossible rule prerequisite '%s'.\n" msgstr "" #: src/implicit.c:718 #, c-format msgid "Rejecting impossible implicit prerequisite '%s'.\n" msgstr "" #: src/implicit.c:732 #, c-format msgid "Trying rule prerequisite '%s'.\n" msgstr "" #: src/implicit.c:733 #, c-format msgid "Trying implicit prerequisite '%s'.\n" msgstr "" #: src/implicit.c:772 #, c-format msgid "Found prerequisite '%s' as VPATH '%s'\n" msgstr "" #: src/implicit.c:786 #, fuzzy, c-format msgid "Looking for a rule with intermediate file '%s'.\n" msgstr "Å alinami tarpiniai failai...\n" #: src/job.c:370 msgid "Cannot create a temporary file\n" msgstr "" #: src/job.c:548 msgid " (core dumped)" msgstr "" #: src/job.c:553 msgid " (ignored)" msgstr "" #: src/job.c:557 src/job.c:1892 #, fuzzy msgid "" msgstr " (integruota)" #: src/job.c:573 #, c-format msgid "%s[%s: %s] Error %d%s" msgstr "" #: src/job.c:662 #, c-format msgid "*** Waiting for unfinished jobs...." msgstr "" #: src/job.c:704 #, c-format msgid "Live child %p (%s) PID %s %s\n" msgstr "" #: src/job.c:706 src/job.c:900 src/job.c:1072 src/job.c:1644 #, c-format msgid " (remote)" msgstr "" #: src/job.c:898 #, c-format msgid "Reaping winning child %p PID %s %s\n" msgstr "" #: src/job.c:899 #, c-format msgid "Reaping losing child %p PID %s %s\n" msgstr "" #: src/job.c:950 #, fuzzy, c-format msgid "Cleaning up temp batch file %s\n" msgstr "%s: nepavyko atverti laikinojo failo: %s" #: src/job.c:956 #, fuzzy, c-format msgid "Cleaning up temp batch file %s failed (%d)\n" msgstr "%s: nepavyko atverti laikinojo failo: %s" #: src/job.c:1071 #, c-format msgid "Removing child %p PID %s%s from chain.\n" msgstr "" #: src/job.c:1120 #, c-format msgid "Released token for child %p (%s).\n" msgstr "" #: src/job.c:1575 src/job.c:2487 #, c-format msgid "process_easy() failed to launch process (e=%ld)\n" msgstr "" #: src/job.c:1579 src/job.c:2491 #, c-format msgid "" "\n" "Counted %d args in failed launch\n" msgstr "" #: src/job.c:1642 #, c-format msgid "Putting child %p (%s) PID %s%s on the chain.\n" msgstr "" #: src/job.c:1875 #, c-format msgid "Obtained token for child %p (%s).\n" msgstr "" #: src/job.c:1902 #, fuzzy, c-format msgid "%s: target '%s' does not exist" msgstr "touch: Archyvas „%s“ neegzistuoja" #: src/job.c:1905 #, fuzzy, c-format msgid "%s: update target '%s' due to: %s" msgstr "%sNÄ—ra taisyklÄ—s pasiekti tikslui „%s“, kurio reikia „%s“%s" #: src/job.c:2108 #, c-format msgid "cannot enforce load limits on this operating system" msgstr "" #: src/job.c:2110 #, fuzzy msgid "cannot enforce load limit: " msgstr "%s: nepayko pakeisti limito: %s" #: src/job.c:2200 #, c-format msgid "no more file handles: could not duplicate stdin\n" msgstr "" #: src/job.c:2212 #, c-format msgid "no more file handles: could not duplicate stdout\n" msgstr "" #: src/job.c:2226 #, c-format msgid "no more file handles: could not duplicate stderr\n" msgstr "" #: src/job.c:2241 #, c-format msgid "Could not restore stdin\n" msgstr "" #: src/job.c:2249 #, c-format msgid "Could not restore stdout\n" msgstr "" #: src/job.c:2257 #, c-format msgid "Could not restore stderr\n" msgstr "" #: src/job.c:2520 #, c-format msgid "make reaped child pid %s, still waiting for pid %s\n" msgstr "" #: src/job.c:2623 #, c-format msgid "spawnvpe: environment space might be exhausted" msgstr "" #: src/job.c:2862 #, fuzzy, c-format msgid "$SHELL changed (was '%s', now '%s')\n" msgstr "$SHELL pakeistas (buvo „%s“, dabar „%s“)\n" #: src/job.c:3300 src/job.c:3485 #, c-format msgid "Creating temporary batch file %s\n" msgstr "" #: src/job.c:3308 #, c-format msgid "" "Batch file contents:\n" "\t@echo off\n" msgstr "" #: src/job.c:3497 #, c-format msgid "" "Batch file contents:%s\n" "\t%s\n" msgstr "" #: src/job.c:3605 #, c-format msgid "%s (line %d) Bad shell context (!unixy && !batch_mode_shell)\n" msgstr "" #: src/load.c:60 #, c-format msgid "Failed to open global symbol table: %s" msgstr "" #: src/load.c:97 #, c-format msgid "Loaded object %s is not declared to be GPL compatible" msgstr "" #: src/load.c:104 #, c-format msgid "Failed to load symbol %s from %s: %s" msgstr "" #: src/load.c:149 #, c-format msgid "Empty symbol name for load: %s" msgstr "" #: src/load.c:204 #, c-format msgid "Loading symbol %s from %s\n" msgstr "" #: src/load.c:256 #, c-format msgid "The 'load' operation is not supported on this platform." msgstr "" #: src/main.c:335 msgid "Options:\n" msgstr "" #: src/main.c:336 msgid " -b, -m Ignored for compatibility.\n" msgstr "" #: src/main.c:338 msgid " -B, --always-make Unconditionally make all targets.\n" msgstr "" #: src/main.c:340 msgid "" " -C DIRECTORY, --directory=DIRECTORY\n" " Change to DIRECTORY before doing anything.\n" msgstr "" #: src/main.c:343 msgid " -d Print lots of debugging information.\n" msgstr "" #: src/main.c:345 msgid "" " --debug[=FLAGS] Print various types of debugging information.\n" msgstr "" #: src/main.c:347 msgid "" " -e, --environment-overrides\n" " Environment variables override makefiles.\n" msgstr "" #: src/main.c:350 msgid "" " -E STRING, --eval=STRING Evaluate STRING as a makefile statement.\n" msgstr "" #: src/main.c:352 msgid "" " -f FILE, --file=FILE, --makefile=FILE\n" " Read FILE as a makefile.\n" msgstr "" #: src/main.c:355 msgid " -h, --help Print this message and exit.\n" msgstr "" #: src/main.c:357 msgid " -i, --ignore-errors Ignore errors from recipes.\n" msgstr "" #: src/main.c:359 msgid "" " -I DIRECTORY, --include-dir=DIRECTORY\n" " Search DIRECTORY for included makefiles.\n" msgstr "" #: src/main.c:362 msgid "" " -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no " "arg.\n" msgstr "" #: src/main.c:364 msgid "" " -k, --keep-going Keep going when some targets can't be made.\n" msgstr "" #: src/main.c:366 msgid "" " -l [N], --load-average[=N], --max-load[=N]\n" " Don't start multiple jobs unless load is below " "N.\n" msgstr "" #: src/main.c:369 msgid "" " -L, --check-symlink-times Use the latest mtime between symlinks and " "target.\n" msgstr "" #: src/main.c:371 msgid "" " -n, --just-print, --dry-run, --recon\n" " Don't actually run any recipe; just print " "them.\n" msgstr "" #: src/main.c:374 msgid "" " -o FILE, --old-file=FILE, --assume-old=FILE\n" " Consider FILE to be very old and don't remake " "it.\n" msgstr "" #: src/main.c:377 msgid "" " -O[TYPE], --output-sync[=TYPE]\n" " Synchronize output of parallel jobs by TYPE.\n" msgstr "" #: src/main.c:380 msgid " -p, --print-data-base Print make's internal database.\n" msgstr "" #: src/main.c:382 msgid "" " -q, --question Run no recipe; exit status says if up to " "date.\n" msgstr "" #: src/main.c:384 msgid " -r, --no-builtin-rules Disable the built-in implicit rules.\n" msgstr "" #: src/main.c:386 msgid " -R, --no-builtin-variables Disable the built-in variable settings.\n" msgstr "" #: src/main.c:388 msgid " -s, --silent, --quiet Don't echo recipes.\n" msgstr "" #: src/main.c:390 msgid " --no-silent Echo recipes (disable --silent mode).\n" msgstr "" #: src/main.c:392 msgid "" " -S, --no-keep-going, --stop\n" " Turns off -k.\n" msgstr "" #: src/main.c:395 msgid " -t, --touch Touch targets instead of remaking them.\n" msgstr "" #: src/main.c:397 msgid " --trace Print tracing information.\n" msgstr "" #: src/main.c:399 msgid "" " -v, --version Print the version number of make and exit.\n" msgstr "" #: src/main.c:401 msgid " -w, --print-directory Print the current directory.\n" msgstr "" #: src/main.c:403 msgid "" " --no-print-directory Turn off -w, even if it was turned on " "implicitly.\n" msgstr "" #: src/main.c:405 msgid "" " -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n" " Consider FILE to be infinitely new.\n" msgstr "" #: src/main.c:408 msgid "" " --warn-undefined-variables Warn when an undefined variable is " "referenced.\n" msgstr "" #: src/main.c:671 #, c-format msgid "empty string invalid as file name" msgstr "negalimas tuÅ¡Äias failo pavadinimas" #: src/main.c:754 #, fuzzy, c-format msgid "unknown debug level specification '%s'" msgstr "nežinomas debug lygio specifikacija „%s“" #: src/main.c:794 #, c-format msgid "unknown output-sync type '%s'" msgstr "" #: src/main.c:849 #, c-format msgid "%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n" msgstr "" #: src/main.c:856 #, c-format msgid "" "\n" "Unhandled exception filter called from program %s\n" "ExceptionCode = %lx\n" "ExceptionFlags = %lx\n" "ExceptionAddress = 0x%p\n" msgstr "" #: src/main.c:864 #, c-format msgid "Access violation: write operation at address 0x%p\n" msgstr "" #: src/main.c:865 #, c-format msgid "Access violation: read operation at address 0x%p\n" msgstr "" #: src/main.c:941 src/main.c:956 #, c-format msgid "find_and_set_shell() setting default_shell = %s\n" msgstr "" #: src/main.c:1009 #, c-format msgid "find_and_set_shell() path search set default_shell = %s\n" msgstr "" #: src/main.c:1609 #, c-format msgid "" "warning: jobserver unavailable: using -j1. Add '+' to parent make rule." msgstr "" #: src/main.c:1617 #, c-format msgid "warning: -j%d forced in submake: resetting jobserver mode." msgstr "" #: src/main.c:1781 #, c-format msgid "Makefile from standard input specified twice." msgstr "" #: src/main.c:1819 src/vmsjobs.c:1248 msgid "fopen (temporary file)" msgstr "" #: src/main.c:1825 msgid "fwrite (temporary file)" msgstr "" #: src/main.c:2004 #, c-format msgid "warning: -j%d forced in makefile: resetting jobserver mode." msgstr "" #: src/main.c:2068 #, c-format msgid "Parallel jobs (-j) are not supported on this platform." msgstr "" #: src/main.c:2069 #, c-format msgid "Resetting to single job (-j1) mode." msgstr "" #: src/main.c:2109 #, c-format msgid "Symbolic links not supported: disabling -L." msgstr "" #: src/main.c:2190 #, c-format msgid "Updating makefiles....\n" msgstr "Atnaujinami „make“ failai....\n" #: src/main.c:2226 #, c-format msgid "Makefile '%s' might loop; not remaking it.\n" msgstr "" #: src/main.c:2303 #, fuzzy, c-format msgid "Failed to remake makefile '%s'." msgstr "Nereikia atnaujinti taikinio „%s“" #: src/main.c:2323 #, fuzzy, c-format msgid "Included makefile '%s' was not found." msgstr "„Make“ failas „%s“ nerastas" #: src/main.c:2328 #, fuzzy, c-format msgid "Makefile '%s' was not found" msgstr "„Make“ failas „%s“ nerastas" #: src/main.c:2394 #, c-format msgid "Couldn't change back to original directory." msgstr "Nepavyko grįžti į pirminį aplankÄ…." #: src/main.c:2402 #, c-format msgid "Re-executing[%u]:" msgstr "" #: src/main.c:2522 msgid "unlink (temporary file): " msgstr "" #: src/main.c:2555 #, c-format msgid ".DEFAULT_GOAL contains more than one target" msgstr "" #: src/main.c:2579 #, c-format msgid "No targets" msgstr "NÄ—ra tikslų" #: src/main.c:2581 #, c-format msgid "No targets specified and no makefile found" msgstr "Nenurodyta tikslų ir nerasta „make“ failų" #: src/main.c:2586 #, c-format msgid "Updating goal targets....\n" msgstr "Atnaujinami tikslai...\n" #: src/main.c:2610 #, c-format msgid "warning: Clock skew detected. Your build may be incomplete." msgstr "" #: src/main.c:2804 #, c-format msgid "Usage: %s [options] [target] ...\n" msgstr "Naudojimas: %s [argumentai] [tikslas] ...\n" #: src/main.c:2810 #, c-format msgid "" "\n" "This program built for %s\n" msgstr "" "\n" "Å i programa sukompiliuota %s sistemai\n" #: src/main.c:2812 #, c-format msgid "" "\n" "This program built for %s (%s)\n" msgstr "" "\n" "Å i programa sukompiliuota %s (%s) sistemai\n" #: src/main.c:2815 #, c-format msgid "Report bugs to \n" msgstr "PraneÅ¡kite apie klaidas adresu \n" #: src/main.c:2901 #, fuzzy, c-format msgid "the '%s%s' option requires a non-empty string argument" msgstr "parametrui „-%c“ reikia netuÅ¡Äio argumento" #: src/main.c:2965 #, fuzzy, c-format msgid "the '-%c' option requires a positive integer argument" msgstr "parametrui „-%c“ reikia teigiamo sveiko argumento" #: src/main.c:3363 #, fuzzy, c-format msgid "%sBuilt for %s\n" msgstr "" "\n" "%sÅ i programa sukompiliuota %s sistemai\n" #: src/main.c:3365 #, fuzzy, c-format msgid "%sBuilt for %s (%s)\n" msgstr "" "\n" "%sÅ i programa sukompiliuota %s (%s) sistemai\n" #: src/main.c:3376 #, c-format msgid "" "%sLicense GPLv3+: GNU GPL version 3 or later \n" "%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 "" #: src/main.c:3397 #, c-format msgid "" "\n" "# Make data base, printed on %s" msgstr "" #: src/main.c:3407 #, c-format msgid "" "\n" "# Finished Make data base on %s\n" msgstr "" #: src/misc.c:643 #, c-format msgid "%s: user %lu (real %lu), group %lu (real %lu)\n" msgstr "%s: user %lu (real %lu), group %lu (real %lu)\n" #: src/misc.c:664 msgid "Initialized access" msgstr "" #: src/misc.c:743 msgid "User access" msgstr "" #: src/misc.c:791 msgid "Make access" msgstr "" #: src/misc.c:825 msgid "Child access" msgstr "" #: src/output.c:97 #, c-format msgid "%s: Entering an unknown directory\n" msgstr "%s: Ä®einama į nežinomÄ… aplankÄ…\n" #: src/output.c:99 #, c-format msgid "%s: Leaving an unknown directory\n" msgstr "%s: IÅ¡einama iÅ¡ nežinomo aplanko\n" #: src/output.c:102 #, fuzzy, c-format msgid "%s: Entering directory '%s'\n" msgstr "%s: Ä®einama į aplankÄ… „%s“\n" #: src/output.c:104 #, fuzzy, c-format msgid "%s: Leaving directory '%s'\n" msgstr "%s: IÅ¡einama iÅ¡ aplanko „%s“\n" #: src/output.c:108 #, c-format msgid "%s[%u]: Entering an unknown directory\n" msgstr "%s[%u]: Ä®einama į nežinomÄ… aplankÄ…\n" #: src/output.c:110 #, c-format msgid "%s[%u]: Leaving an unknown directory\n" msgstr "%s[%u]: IÅ¡einama iÅ¡ nežinomo aplanko\n" #: src/output.c:113 #, fuzzy, c-format msgid "%s[%u]: Entering directory '%s'\n" msgstr "%s[%u]: Ä®einama į aplankÄ… „%s“\n" #: src/output.c:115 #, fuzzy, c-format msgid "%s[%u]: Leaving directory '%s'\n" msgstr "%s[%u]: IÅ¡einama iÅ¡ aplanko „%s“\n" #: src/output.c:442 src/output.c:444 #, fuzzy, c-format msgid "write error: stdout" msgstr "raÅ¡ymo klaida: %s" #: src/output.c:624 msgid ". Stop.\n" msgstr ". Pabaiga.\n" #: src/output.c:658 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" #: src/output.c:667 #, c-format msgid "%s: %s" msgstr "%s: %s" #: src/output.h:62 #, c-format msgid "-O[TYPE] (--output-sync[=TYPE]) is not configured for this build." msgstr "" #: src/posixos.c:90 msgid "creating jobs pipe" msgstr "" #: src/posixos.c:98 src/posixos.c:251 msgid "duping jobs pipe" msgstr "" #: src/posixos.c:104 msgid "init jobserver pipe" msgstr "" #: src/posixos.c:119 #, c-format msgid "internal error: invalid --jobserver-auth string '%s'" msgstr "" #: src/posixos.c:122 #, c-format msgid "Jobserver client (fds %d,%d)\n" msgstr "" #: src/posixos.c:138 msgid "jobserver pipeline" msgstr "" #: src/posixos.c:186 #, fuzzy msgid "write jobserver" msgstr "raÅ¡ymo klaida: %s" #: src/posixos.c:300 #, c-format msgid "job server shut down" msgstr "" #: src/posixos.c:303 msgid "pselect jobs pipe" msgstr "" #: src/posixos.c:319 src/posixos.c:433 msgid "read jobs pipe" msgstr "" #: src/read.c:181 #, c-format msgid "Reading makefiles...\n" msgstr "Skaitomi „make“ failai...\n" #: src/read.c:336 #, fuzzy, c-format msgid "Reading makefile '%s'" msgstr "Skaitomas „make“ failas „%s“" #: src/read.c:338 #, c-format msgid " (no default goal)" msgstr " (nÄ—ra numatytojo tikslo)" #: src/read.c:340 #, c-format msgid " (search path)" msgstr " (paieÅ¡kos kelias)" #: src/read.c:342 #, c-format msgid " (don't care)" msgstr " (nesvarbu)" #: src/read.c:344 #, c-format msgid " (no ~ expansion)" msgstr " (nÄ—ra ~ iÅ¡plÄ—timo)" #: src/read.c:655 #, c-format msgid "Skipping UTF-8 BOM in makefile '%s'\n" msgstr "" #: src/read.c:658 #, c-format msgid "Skipping UTF-8 BOM in makefile buffer\n" msgstr "" #: src/read.c:787 #, c-format msgid "invalid syntax in conditional" msgstr "netaisyklinga sÄ…lygos sintaksÄ—" #: src/read.c:960 #, c-format msgid "%s: failed to load" msgstr "" #: src/read.c:986 #, fuzzy, c-format msgid "recipe commences before first target" msgstr "komandos prasideda prieÅ¡ pirmÄ…jį tikslÄ…" #: src/read.c:1035 #, fuzzy, c-format msgid "missing rule before recipe" msgstr "trÅ«ksta taisyklÄ—s prieÅ¡ komandas" #: src/read.c:1136 #, fuzzy, c-format msgid "missing separator (did you mean TAB instead of 8 spaces?)" msgstr " (ar norÄ—jote padÄ—ti TAB simbolį vietoje 8 tarpų?)" #: src/read.c:1138 #, fuzzy, c-format msgid "missing separator" msgstr "trÅ«ksta skirtuko%s" #: src/read.c:1283 #, c-format msgid "missing target pattern" msgstr "trÅ«ksta tikslo Å¡ablono" #: src/read.c:1285 #, c-format msgid "multiple target patterns" msgstr "keli tikslo Å¡ablonai" #: src/read.c:1289 #, fuzzy, c-format msgid "target pattern contains no '%%'" msgstr "tikslo Å¡ablone nÄ—ra „%%“" #: src/read.c:1404 #, fuzzy, c-format msgid "missing 'endif'" msgstr "trÅ«ksta „endif“" #: src/read.c:1443 src/read.c:1488 src/variable.c:1600 #, c-format msgid "empty variable name" msgstr "tuÅ¡Äias kintamojo pavadinimas" #: src/read.c:1478 #, fuzzy, c-format msgid "extraneous text after 'define' directive" msgstr "Perteklinis tekstas po „endef“ direktyvos" #: src/read.c:1503 #, fuzzy, c-format msgid "missing 'endef', unterminated 'define'" msgstr "trÅ«ksta „endef“, nebaigtas „define“" #: src/read.c:1531 #, fuzzy, c-format msgid "extraneous text after 'endef' directive" msgstr "Perteklinis tekstas po „endef“ direktyvos" #: src/read.c:1603 #, fuzzy, c-format msgid "extraneous text after '%s' directive" msgstr "Perteklinis tekstas po „%s“ direktyvos" #: src/read.c:1604 #, fuzzy, c-format msgid "extraneous '%s'" msgstr "perteklinis „%s“" #: src/read.c:1632 #, c-format msgid "only one 'else' per conditional" msgstr "" #: src/read.c:1908 #, c-format msgid "Malformed target-specific variable definition" msgstr "" #: src/read.c:1968 #, c-format msgid "prerequisites cannot be defined in recipes" msgstr "" #: src/read.c:1986 #, c-format msgid "grouped targets must provide a recipe" msgstr "" #: src/read.c:2029 #, c-format msgid "mixed implicit and static pattern rules" msgstr "" #: src/read.c:2052 #, c-format msgid "mixed implicit and normal rules" msgstr "" #: src/read.c:2107 #, c-format msgid "target '%s' doesn't match the target pattern" msgstr "" #: src/read.c:2122 src/read.c:2168 #, c-format msgid "target file '%s' has both : and :: entries" msgstr "" #: src/read.c:2128 #, c-format msgid "target '%s' given more than once in the same rule" msgstr "" #: src/read.c:2138 #, c-format msgid "warning: overriding recipe for target '%s'" msgstr "" #: src/read.c:2141 #, c-format msgid "warning: ignoring old recipe for target '%s'" msgstr "" #: src/read.c:2254 #, c-format msgid "*** mixed implicit and normal rules: deprecated syntax" msgstr "" #: src/read.c:2271 #, c-format msgid "warning: overriding group membership for target '%s'" msgstr "" #: src/read.c:2636 #, c-format msgid "warning: NUL character seen; rest of line ignored" msgstr "" #: src/remake.c:226 #, fuzzy, c-format msgid "Nothing to be done for '%s'." msgstr "NÄ—ra kÄ… daryti su „%s“." #: src/remake.c:227 #, fuzzy, c-format msgid "'%s' is up to date." msgstr "„%s“ atnaujinti nereikia." #: src/remake.c:323 #, fuzzy, c-format msgid "Pruning file '%s'.\n" msgstr "Vis dar atnaujinamas failas „%s“.\n" #: src/remake.c:389 #, 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" #: src/remake.c:399 #, fuzzy, c-format msgid "%sNo rule to make target '%s'%s" msgstr "%sNÄ—ra taisyklÄ—s pasiekti tikslui „%s“%s" #: src/remake.c:425 #, fuzzy, c-format msgid "Considering target file '%s'.\n" msgstr "Svarstomas tikslo failas „%s“.\n" #: src/remake.c:432 #, fuzzy, c-format msgid "Recently tried and failed to update file '%s'.\n" msgstr "Neseniai bandyta ir nepavyko atnaujinti failo „%s“.\n" #: src/remake.c:444 #, fuzzy, c-format msgid "File '%s' was considered already.\n" msgstr "Failas „%s“ jau apsvarstytas.\n" #: src/remake.c:454 #, fuzzy, c-format msgid "Still updating file '%s'.\n" msgstr "Vis dar atnaujinamas failas „%s“.\n" #: src/remake.c:457 #, fuzzy, c-format msgid "Finished updating file '%s'.\n" msgstr "Baigtas atnaujinti failas „%s“.\n" #: src/remake.c:486 #, fuzzy, c-format msgid "File '%s' does not exist.\n" msgstr "Failas „%s“ neegzistuoja.\n" #: src/remake.c:494 #, c-format msgid "" "*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp" msgstr "" #: src/remake.c:507 src/remake.c:1039 #, fuzzy, c-format msgid "Found an implicit rule for '%s'.\n" msgstr "Rasta neiÅ¡reikÅ¡tinÄ— taisyklÄ— tikslui „%s“.\n" #: src/remake.c:509 src/remake.c:1041 #, fuzzy, c-format msgid "No implicit rule found for '%s'.\n" msgstr "Nerasta neiÅ¡reikÅ¡tinių taisyklių tikslui „%s“.\n" #: src/remake.c:515 #, c-format msgid "Using default recipe for '%s'.\n" msgstr "" #: src/remake.c:549 src/remake.c:1088 #, c-format msgid "Circular %s <- %s dependency dropped." msgstr "" #: src/remake.c:674 #, fuzzy, c-format msgid "Finished prerequisites of target file '%s'.\n" msgstr "Svarstomas tikslo failas „%s“.\n" #: src/remake.c:680 #, c-format msgid "The prerequisites of '%s' are being made.\n" msgstr "" #: src/remake.c:694 #, fuzzy, c-format msgid "Giving up on target file '%s'.\n" msgstr "Svarstomas tikslo failas „%s“.\n" #: src/remake.c:699 #, fuzzy, c-format msgid "Target '%s' not remade because of errors." msgstr "Tikslas „%s“ neatnaujintas dÄ—l klaidų." #: src/remake.c:751 #, c-format msgid "Prerequisite '%s' is order-only for target '%s'.\n" msgstr "" #: src/remake.c:756 #, fuzzy, c-format msgid "Prerequisite '%s' of target '%s' does not exist.\n" msgstr "Failas „%s“ neegzistuoja.\n" #: src/remake.c:761 #, c-format msgid "Prerequisite '%s' is newer than target '%s'.\n" msgstr "" #: src/remake.c:764 #, c-format msgid "Prerequisite '%s' is older than target '%s'.\n" msgstr "" #: src/remake.c:782 #, c-format msgid "Target '%s' is double-colon and has no prerequisites.\n" msgstr "" #: src/remake.c:789 #, c-format msgid "No recipe for '%s' and no prerequisites actually changed.\n" msgstr "" #: src/remake.c:794 #, c-format msgid "Making '%s' due to always-make flag.\n" msgstr "" #: src/remake.c:802 #, fuzzy, c-format msgid "No need to remake target '%s'" msgstr "Nereikia atnaujinti taikinio „%s“" #: src/remake.c:804 #, c-format msgid "; using VPATH name '%s'" msgstr "" #: src/remake.c:824 #, fuzzy, c-format msgid "Must remake target '%s'.\n" msgstr "BÅ«tina atnaujinti taikinį „%s“.\n" #: src/remake.c:830 #, c-format msgid " Ignoring VPATH name '%s'.\n" msgstr "" #: src/remake.c:839 #, fuzzy, c-format msgid "Recipe of '%s' is being run.\n" msgstr "Vykdomos „%s“ komandos.\n" #: src/remake.c:846 #, fuzzy, c-format msgid "Failed to remake target file '%s'.\n" msgstr "Nereikia atnaujinti taikinio „%s“" #: src/remake.c:849 #, fuzzy, c-format msgid "Successfully remade target file '%s'.\n" msgstr "BÅ«tina atnaujinti taikinį „%s“.\n" #: src/remake.c:852 #, c-format msgid "Target file '%s' needs to be remade under -q.\n" msgstr "" #: src/remake.c:1047 #, fuzzy, c-format msgid "Using default commands for '%s'.\n" msgstr "paskutinÄ— komanda: %s\n" #: src/remake.c:1422 #, c-format msgid "Warning: File '%s' has modification time %s s in the future" msgstr "" #: src/remake.c:1662 #, c-format msgid ".LIBPATTERNS element '%s' is not a pattern" msgstr "" #: src/remote-cstms.c:122 #, c-format msgid "Customs won't export: %s\n" msgstr "" #: src/rule.c:289 #, c-format msgid "warning: ignoring prerequisites on suffix rule definition" msgstr "" #: src/rule.c:530 msgid "" "\n" "# Implicit Rules" msgstr "" "\n" "# NeiÅ¡reikÅ¡tinÄ—s taisyklÄ—s" #: src/rule.c:545 msgid "" "\n" "# No implicit rules." msgstr "" "\n" "# NÄ—ra neiÅ¡reikÅ¡tinių taisyklių." #: src/rule.c:548 #, fuzzy, c-format msgid "" "\n" "# %u implicit rules, %u (%.1f%%) terminal." msgstr "" "\n" "# %u neiÅ¡reikÅ¡tinių taisyklių, %u" #: src/rule.c:557 #, c-format msgid "BUG: num_pattern_rules is wrong! %u != %u" msgstr "" #: src/signame.c:84 msgid "unknown signal" msgstr "nežinomas signalas" #: src/signame.c:92 msgid "Hangup" msgstr "" #: src/signame.c:95 msgid "Interrupt" msgstr "Pertraukimas" #: src/signame.c:98 msgid "Quit" msgstr "IÅ¡eita" #: src/signame.c:101 msgid "Illegal Instruction" msgstr "Neleistina instrukcija" #: src/signame.c:104 msgid "Trace/breakpoint trap" msgstr "" #: src/signame.c:109 msgid "Aborted" msgstr "" #: src/signame.c:112 #, fuzzy msgid "IOT trap" msgstr "EMT gaudyklÄ—" #: src/signame.c:115 msgid "EMT trap" msgstr "EMT gaudyklÄ—" #: src/signame.c:118 msgid "Floating point exception" msgstr "Slankaus kablelio klaida" #: src/signame.c:121 msgid "Killed" msgstr "Nutraukta" #: src/signame.c:124 msgid "Bus error" msgstr "MagistralÄ—s klaida" #: src/signame.c:127 msgid "Segmentation fault" msgstr "Segmentacijos klaida" #: src/signame.c:130 msgid "Bad system call" msgstr "Blogas sisteminis kvietimas" #: src/signame.c:133 msgid "Broken pipe" msgstr "" #: src/signame.c:136 msgid "Alarm clock" msgstr "Žadintuvas" #: src/signame.c:139 #, fuzzy msgid "Terminated" msgstr "apribota" #: src/signame.c:142 #, fuzzy msgid "User defined signal 1" msgstr "%s: nutrauktas signalo %d" #: src/signame.c:145 #, fuzzy msgid "User defined signal 2" msgstr "%s: nutrauktas signalo %d" #: src/signame.c:150 src/signame.c:153 #, fuzzy msgid "Child exited" msgstr "Failas jau egzistuoja" #: src/signame.c:156 msgid "Power failure" msgstr "Elektros maitinimo sutrikimas" #: src/signame.c:159 msgid "Stopped" msgstr "Sustabdyta" #: src/signame.c:162 msgid "Stopped (tty input)" msgstr "Sustabdyta (tty įvedimas)" #: src/signame.c:165 msgid "Stopped (tty output)" msgstr "Sustabdyta (tty iÅ¡vedimas)" #: src/signame.c:168 msgid "Stopped (signal)" msgstr "Sustabdyta (signalas)" #: src/signame.c:171 msgid "CPU time limit exceeded" msgstr "VirÅ¡ytas CPU laiko limitas" #: src/signame.c:174 msgid "File size limit exceeded" msgstr "VirÅ¡ytas failo dydžio limitas" #: src/signame.c:177 msgid "Virtual timer expired" msgstr "" #: src/signame.c:180 msgid "Profiling timer expired" msgstr "" #: src/signame.c:186 msgid "Window changed" msgstr "Langas pakeistas" #: src/signame.c:189 msgid "Continued" msgstr "PratÄ™sta" #: src/signame.c:192 msgid "Urgent I/O condition" msgstr "" #: src/signame.c:199 src/signame.c:208 msgid "I/O possible" msgstr "Galimas įvedimas/iÅ¡vedimas" #: src/signame.c:202 msgid "SIGWIND" msgstr "SIGWIND" #: src/signame.c:205 msgid "SIGPHONE" msgstr "SIGPHONE" #: src/signame.c:211 msgid "Resource lost" msgstr "IÅ¡teklius prarastas" #: src/signame.c:214 msgid "Danger signal" msgstr "Pavojaus signalas" #: src/signame.c:217 msgid "Information request" msgstr "Informacijos užklausa" #: src/signame.c:220 msgid "Floating point co-processor not available" msgstr "Slankaus kablelio koprocesorius neprieinamas" #: src/strcache.c:274 #, c-format msgid "" "\n" "%s No strcache buffers\n" msgstr "" #: src/strcache.c:304 #, c-format msgid "" "\n" "%s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu " "B\n" msgstr "" #: src/strcache.c:308 #, c-format msgid "" "%s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B\n" msgstr "" #: src/strcache.c:319 #, c-format msgid "%s other used: total = %lu B / count = %lu / avg = %lu B\n" msgstr "" #: src/strcache.c:322 #, c-format msgid "" "%s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B\n" msgstr "" #: src/strcache.c:326 #, c-format msgid "" "\n" "%s strcache performance: lookups = %lu / hit rate = %lu%%\n" msgstr "" #: src/strcache.c:328 #, fuzzy msgid "" "# hash-table stats:\n" "# " msgstr "" "\n" "# failų maiÅ¡os lentelÄ—s statistika:\n" "# " #: src/variable.c:1653 msgid "automatic" msgstr "" #: src/variable.c:1656 msgid "default" msgstr "" #: src/variable.c:1659 msgid "environment" msgstr "" #: src/variable.c:1662 msgid "makefile" msgstr "" #: src/variable.c:1665 msgid "environment under -e" msgstr "" #: src/variable.c:1668 #, fuzzy msgid "command line" msgstr "%s: komanda nerasta" #: src/variable.c:1671 #, fuzzy msgid "'override' directive" msgstr "tuÅ¡Äia „override“ direktyva" #: src/variable.c:1682 #, fuzzy, c-format msgid " (from '%s', line %lu)" msgstr " (nuo „%s“, %lu eilutÄ—):\n" #: src/variable.c:1745 msgid "# variable set hash-table stats:\n" msgstr "" #: src/variable.c:1756 msgid "" "\n" "# Variables\n" msgstr "" #: src/variable.c:1760 msgid "" "\n" "# Pattern-specific Variable Values" msgstr "" #: src/variable.c:1774 msgid "" "\n" "# No pattern-specific variable values." msgstr "" #: src/variable.c:1776 #, c-format msgid "" "\n" "# %u pattern-specific variable values" msgstr "" #: src/variable.h:229 #, fuzzy, c-format msgid "warning: undefined variable '%.*s'" msgstr "%s: neatpažintas argumentas „%c%s“\n" #: src/vmsfunctions.c:91 #, c-format msgid "sys$search() failed with %d\n" msgstr "" #: src/vmsjobs.c:244 #, c-format msgid "-warning, you may have to re-enable CTRL-Y handling from DCL.\n" msgstr "" #: src/vmsjobs.c:681 #, c-format msgid "BUILTIN CD %s\n" msgstr "" #: src/vmsjobs.c:1224 #, c-format msgid "DCL: %s\n" msgstr "" #: src/vmsjobs.c:1284 #, c-format msgid "Append output to %s\n" msgstr "" #: src/vmsjobs.c:1309 #, c-format msgid "Append %.*s and cleanup\n" msgstr "" #: src/vmsjobs.c:1322 #, c-format msgid "Executing %s instead\n" msgstr "" #: src/vpath.c:603 msgid "" "\n" "# VPATH Search Paths\n" msgstr "" #: src/vpath.c:620 #, fuzzy msgid "# No 'vpath' search paths." msgstr " (paieÅ¡kos kelias)" #: src/vpath.c:622 #, c-format msgid "" "\n" "# %u 'vpath' search paths.\n" msgstr "" #: src/vpath.c:625 msgid "" "\n" "# No general ('VPATH' variable) search path." msgstr "" #: src/vpath.c:631 msgid "" "\n" "# General ('VPATH' variable) search path:\n" "# " msgstr "" #: src/w32/w32os.c:44 #, c-format msgid "Jobserver slots limited to %d\n" msgstr "" #: src/w32/w32os.c:60 #, c-format msgid "creating jobserver semaphore: (Error %ld: %s)" msgstr "" #: src/w32/w32os.c:79 #, c-format msgid "" "internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)" msgstr "" #: src/w32/w32os.c:82 #, c-format msgid "Jobserver client (semaphore %s)\n" msgstr "" #: src/w32/w32os.c:123 #, c-format msgid "release jobserver semaphore: (Error %ld: %s)" msgstr "" #: src/w32/w32os.c:194 #, 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!" #~ msgid "%s: Command not found" #~ msgstr "%s: Komanda nerasta" #~ msgid "%s: Shell program not found" #~ msgstr "%s: Kevalo programa nerasta" #~ msgid "Unknown error %d" #~ msgstr "Nežinoma klaida %d" #~ msgid "virtual memory exhausted" #~ msgstr "baigÄ—si virtuali atmintis" #~ msgid "write error" #~ msgstr "raÅ¡ymo klaida" #~ msgid "extraneous `endef'" #~ msgstr "perteklinis „endef“" #, fuzzy #~ msgid "invalid `override' directive" #~ msgstr "netaisyklinga „override“ direktyva" #, fuzzy #~ msgid "Redirected error to %s\n" #~ msgstr "skaitymo klaida: %d: %s" make-4.3/po/gl.gmo0000644000175000017500000005204713611136532010753 00000000000000Þ•ÕÄ%l &(8!Ac u–'¬#Ôø ";^ zt›LP]M®@üo=o­FJd€¯90Cjf®_;uO±J}L~Ê>ICˆFÌI;] ™"£ ÆÓ â ðû) ;ET]%n”7Õäü-G(eŽ&£*Êõ# #.)R-|ª$Ã9è"3Au‘!¡=à  " ;4 !p +’ ¾ Ø &ò .!H!X!Ím!&;"%b" ˆ"#”">¸" ÷"#1 #2;# n#"z#*#È#×# ç# ó#ý#$ 5$ B$%O$u$$•$ º$+Ä$ð$! % /%<% V%d%m%ƒ%)œ%Æ%ß% æ%ó%ü%&$& 7&A&H& f&-r&- &Î& Ñ&*Ü&"' *'64' k'-y'§'¬'¾'"Ô'#÷'"('>(f("†(#©( Í(Û(ä(ì(ÿ()),) A)L)b)})•)!ª) Ì)Ø)î)** )*93*m*3‰* ½*Ê*Ý*!å*+ +'+8<+0u+¦+½+Õ+é+),;1,3m,¡,ª,Á,'á, -"-0%-V-e-,‚-¯-¾-Ø-=ø-16./h.­˜.3F0z0 Š0(—0À0)Ö01+10K1|1•10¤10Õ1 2%'2‚M2SÐ2t$3~™3L4qe4—×4Qo5JÁ5— 6<¤6Iá6p+7pœ7< 8xJ8vÃ8 :9ŠÛ9Gf:M®:Jü:MG;;•; Ñ;"Û;þ;<$< 3<?< ^<< š<¤< µ< Â<!Ï< ñ<Dý<B=T=$t=™=³="Ò=-õ=#>)@>-j>˜>/¶>/æ>-?2D?w?)’?A¼?#þ?;"@3^@’@:©@Xä@=AFA)MAOwA(ÇA3ðA$BDB)bB1ŒB¾BÓBÉíB-·C,åCD-%DESD ™D¤D=­D?ëD +E-8E0fE—E¦EÄE ×E#ãE,F4FDF.ZF)‰F)³F ÝF/èF(G*AG lGxG’G ¢G­G*ÅG6ðG'HCHJH \HjHƒHH ±H¾H%ÅHëHBúH5=IsIwICŠI4ÎI J>J$MJ4rJ§J­JÀJ2ßJ2K4EK0zK&«K{ÒK9NLˆL˜L¡L©L»LÂLÑLíL M%M$8M&]M„M#žMÂMÔMòMN.N ?NDKN.NB¿NO$O 6O4BOwO‘OšOC¬O2ðO#P=P4XP"P4°PUåPH;Q„Q•Q'°Q5ØQ R/R?3R%sR'™RHÁR SS#8ST\S9±S;ëSÐI€A©Š$Ô3ˆÀºÓ†Ÿ&q¾O Ì«0„ag ~Fµ6`‹Í³¯5ªÑx1-k¸ #Yv\o–fƒCMÄÒÃ[(°¬4Nz¤)EÇy¼PËœjÊ^ w]lX®È»?Œs¡hdQ‡U‚muÏHB™,;¥8@…’²bp}V!>i‘“L‰ ÕÁ—+Ž¿”•›R¢¹7Å<W29S'ΚK:˜=G£´¨Â|Te±.%Jž_§Zc¶D·­"¦ *{½/nt ÆÉr # %u pattern-specific variable values # Directories # Files # Finished Make data base on %s # Implicit Rules # Make data base, printed on %s # No implicit rules. # No pattern-specific variable values. # Pattern-specific Variable Values # VPATH Search Paths # Variables # files hash-table stats: # Counted %d args in failed launch This program built for %s This program built for %s (%s) Unhandled exception filter called from program %s ExceptionCode = %lx ExceptionFlags = %lx ExceptionAddress = 0x%p --debug[=FLAGS] Print various types of debugging information. --no-print-directory Turn off -w, even if it was turned on implicitly. --warn-undefined-variables Warn when an undefined variable is referenced. -B, --always-make Unconditionally make all targets. -C DIRECTORY, --directory=DIRECTORY Change to DIRECTORY before doing anything. -I DIRECTORY, --include-dir=DIRECTORY Search DIRECTORY for included makefiles. -R, --no-builtin-variables Disable the built-in variable settings. -S, --no-keep-going, --stop Turns off -k. -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE Consider FILE to be infinitely new. -b, -m Ignored for compatibility. -d Print lots of debugging information. -e, --environment-overrides Environment variables override makefiles. -f FILE, --file=FILE, --makefile=FILE Read FILE as a makefile. -h, --help Print this message and exit. -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no arg. -k, --keep-going Keep going when some targets can't be made. -l [N], --load-average[=N], --max-load[=N] Don't start multiple jobs unless load is below N. -o FILE, --old-file=FILE, --assume-old=FILE Consider FILE to be very old and don't remake it. -p, --print-data-base Print make's internal database. -r, --no-builtin-rules Disable the built-in implicit rules. -t, --touch Touch targets instead of remaking them. -v, --version Print the version number of make and exit. -w, --print-directory Print the current directory. Date %s uid = %d, gid = %d, mode = 0%o. (built-in): (core dumped) (don't care) (ignored) (name might be truncated) (no default goal) (no ~ expansion) (remote) (search path) files, impossibilities impossibilities in %lu directories. so far.# A default, MAKEFILES, or -include/sinclude makefile.# Also makes:# Command line target.# Failed to be updated.# File does not exist.# File has been updated.# File has not been updated.# File is an intermediate prerequisite.# File is very old.# Implicit rule search has been done.# Implicit rule search has not been done.# Last modified %s # Modification time never checked.# Needs to be updated (-q is set).# Phony target (prerequisite of .PHONY).# Precious file (prerequisite of .PRECIOUS).# Successfully updated.# %s (device %d, inode [%d,%d,%d]): # %s (device %d, inode [%d,%d,%d]): could not be opened. # %s (device %ld, inode %ld): # %s (device %ld, inode %ld): could not be opened. # %s: could not be stat'd. # Not a target:# variable set hash-table stats: %s (line %d) Bad shell context (!unixy && !batch_mode_shell) %s%s: %s%s: %s%s: Entering an unknown directory %s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p) %s: Leaving an unknown directory %s: Timestamp out of range; substituting %s%s: illegal option -- %c %s: invalid option -- %c %s: option requires an argument -- %c %s: user %lu (real %lu), group %lu (real %lu) %sBuilt for %s %sBuilt for %s (%s) %sLicense GPLv3+: GNU GPL version 3 or later %sThis is free software: you are free to change and redistribute it. %sThere is NO WARRANTY, to the extent permitted by law. %s[%u]: Entering an unknown directory %s[%u]: Leaving an unknown directory *** Break. *** Waiting for unfinished jobs....-warning, you may have to re-enable CTRL-Y handling from DCL. . Stop. AbortedAccess violation: read operation at address 0x%p Access violation: write operation at address 0x%p Alarm clockAvoiding implicit rule recursion. BUG: num_pattern_rules is wrong! %u != %uBUILTIN CD %s Bad system callBroken pipeBus errorCPU time limit exceededCannot create a temporary file Child accessChild exitedCircular %s <- %s dependency dropped.Cleaning up temp batch file %s Cleaning up temporary batch file %s ContinuedCouldn't change back to original directory.CreatePipe() failed (e=%ld) Creating temporary batch file %s Current timeCustoms won't export: %s Danger signalEMT trapExecuting %s instead File size limit exceededFloating point co-processor not availableFloating point exceptionHangupI/O possibleIOT trapIllegal InstructionInformation requestInitialized accessInterruptKilledLive child %p (%s) PID %s %s Make accessMakefile from standard input specified twice.Malformed target-specific variable definitionNoNo targetsNo targets specified and no makefile foundObtained token for child %p (%s). Options: Parallel jobs (-j) are not supported on this platform.Power failurePutting child %p (%s) PID %s%s on the chain. QuitRe-executing[%u]:Reading makefiles... Reaping losing child %p PID %s %s Reaping winning child %p PID %s %s Released token for child %p (%s). Removing child %p PID %s%s from chain. Removing intermediate files... Report bugs to Resetting to single job (-j1) mode.Resource lostSIGPHONESIGWINDSegmentation faultStoppedStopped (signal)Stopped (tty input)Stopped (tty output)TerminatedTrace/breakpoint trapUpdating goal targets.... Updating makefiles.... Urgent I/O conditionUsage: %s [options] [target] ... User accessUser defined signal 1User defined signal 2Virtual timer expiredWindow changedautomaticcan't allocate %lu bytes for hash table: memory exhaustedcannot enforce load limit: cannot enforce load limits on this operating systemcommand linecreating jobs pipedefaultempty string invalid as file nameempty variable nameenvironmentenvironment under -efind_and_set_shell() path search set default_shell = %s find_and_set_shell() setting default_shell = %s fopen (temporary file)fwrite (temporary file)init jobserver pipeinvalid syntax in conditionallbr$ini_control() failed with status = %dlbr$set_module() failed to extract module info, status = %dmake reaped child pid %s, still waiting for pid %s makefilemissing target patternmixed implicit and normal rulesmixed implicit and static pattern rulesmultiple target patternsnoprocess_easy() failed to launch process (e=%ld) read jobs pipesys$search() failed with %d touch archive member is not available on VMSunknown signalunlink (temporary file): unterminated variable referencewarning: Clock skew detected. Your build may be incomplete.warning: NUL character seen; rest of line ignoredwindows32_openpipe(): process_init_fd() failed Project-Id-Version: make 3.82 Report-Msgid-Bugs-To: bug-make@gnu.org PO-Revision-Date: 2012-11-12 16:40+0100 Last-Translator: Leandro Regueiro Language-Team: Galician Language: gl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8-bit X-Bugs: Report translation errors to the Language-Team address. Plural-Forms: nplurals=2; plural=(n != 1); # %u valores de variábeis específicos do patrón # Directorios # Ficheiros # Base de datos de Make rematada en %s # Regras implícitas # Base de datos de Make, imprimida en %s # Non hai regras implícitas. # Non hai valores específicos do patrón. # Valores de variábeis específicas do patrón # Rutas de busca VPATH # Variábeis # estatísticas da táboa hash de ficheiros: # Contáronse %d argumentos no inicio que fallou Este programa compilou para %s Este programa compilou para %s (%s) Filtro de excepcións non manexadas chamado desde o programa %s ExceptionCode = %lx ExceptionFlags = %lx ExceptionAddress = 0x%p --debug[=MODIFICADORES] Mostrar varios tipos de información de depuración. --no-print-directory Desactivar -w, incluso se se activou implicitamente. --warn-undefined-variables Avisar cando se faga referencia a unha variábel non definida. -B, --always-make Facer todos os obxectivos incondicionalmente. -C DIRECTORIO, --directory=DIRECTORIO Cambiar ao DIRECTORIO antes de facer nada. -I DIRECTORIO, --include-dir=DIRECTORIO Buscar os makefiles incluídos no DIRECTORIO. -R, --no-builtin-variables Desactivar os valores das variábeis incorporadas. -S, --no-keep-going, --stop Desactiva -k. -W FICHEIRO, --what-if=FICHEIRO, --new-file=FICHEIRO, --assume-new=FICHEIRO Tratar o FICHEIRO como infinitamente novo. -b, -m Ignorado por compatibilidade. -d Mostrar moita información de depuración. -e, --environment-overrides As variábei de ambiente substitúen aos makefiles. -f FICHEIRO, --file=FICHEIRO, --makefile=FICHEIRO Ler o FICHEIRO como makefile. -h, --help Mostrar esta mensaxe e saír. -j [N], --jobs[=N] Permitir N traballos á vez; infinitos sen un argumento. -k, --keep-going Continuar cando no se poidan facer algúns obxectivos. -l [N], --load-average[=N], --max-load[=N] Non iniciar varios traballos con carga superior a N. -o FICHEIRO, --old-file=FICHEIRO, --assume-old=FICHEIRO Tratar o FICHEIRO como moi antigo e non refacelo. -p, --print-data-base Mostrar a base de datos interna de make. -r, --no-builtin-rules Desactivar as regras implícitas incorporadas. -t, --touch Tocar os obxectivos no canto de os refacer. -v, --version Mostrar o número de versión de make e saír. -w, --print-directory Mostrar o directorio actual. Data %s uid = %d, gid = %d, modo = 0%o. (incorporadas): (memoria envorcada) (non importa) (ignorado) (o nome pode quedar truncado) (non hai unha meta por defecto) (non hai expansión de ~) (remoto) (ruta de busca) ficheiros, imposíbeis imposíbeis en %lu directorios. ata aquí.# Un ficheiro de make por defecto, MAKEFILES, ou -include/sinclude.# Tamén se fai:# Obxectivo da liña de ordes.# Produciuse un erro ao actualizar.# O ficheiro non existe.# O ficheiro foi actualizado.# O ficheiro non foi actualizado.# O ficheiro é un prerrequisito intermedio.# O ficheiro é moi antigo.# Fíxose a busca de regras implícitas.# Non se fixo a busca de regras implícitas.# Última modificación: %s # Nunca se comprobou o tempo de modificación.# Ten que ser actualizado (-q está definido).# Obxectivo falso (prerrequisito de .PHONY).# Ficheiro precioso (prerrequisito de .PRECIOUS).# Actualizado con éxito.# %s (dispositivo %d, inodo [%d,%d,%d]): # %s (dispositivo %d, inodo [%d,%d,%d]): non foi posíbel abrir. # %s (dispositivo %ld, inodo %ld): # %s (dispositivo %ld, inodo %ld): non foi posíbel abrir. # %s: non foi posíbel facer a operación de stat. # Non é un obxectivo:# estatísticas da táboa hash de conxunto de variábeis: %s (liña %d) Contexto do intérprete de ordes incorrecto (!unixy && !batch_mode_shell) %s%s: %s%s: %s%s: Entrando nun directorio descoñecido %s: Atrapouse unha Interrupción/Excepción (código = 0x%lx, enderezo = 0x%p) %s: Saíndo dun directorio descoñecido %s: Marca de tempo fóra de rango; substituíndo %s%s: opción inaceptábel -- %c %s: opción incorrecta -- %c %s: a opción require un argumento -- %c %s: usuario %lu (real %lu), grupo %lu (real %lu) %sCompilado para %s %sCompilado para %s (%s) %sLicenza GPLv3+: GNU GPL versión 3 ou posterior %sIsto é software libre: pode modificalo e redistribuílo. %sNon hai NINGUNHA GARANTÃA, ata onde o permita a lei. %s[%u]: Entrando nun directorio descoñecido %s[%u]: Saíndo dun directorio descoñecido *** Interrompido. *** Agardando por traballos non rematados....-aviso, pode que teña que reactivar o manexo de CTRL-Y desde o DCL. . Detido. AbortadoViolación de acceso: operación de lectura no enderezo 0x%p Violación de acceso: operación de escritura no enderezo 0x%p TemporizadorEvitando a recursión de regras implícitas. FALLO: num_pattern_rules é incorrecto! %u != %uBUILTIN CD %s Chamada ao sistema incorrectaCanalización rotaErro do busExcedeuse o límite de tempo de CPUNon foi posíbel crear un ficheiro temporal Acceso de filloO proceso fillo saíuA dependencia circular %s <- %s foi eliminada.Limpando o ficheiro de lotes temporal %s Limpando o ficheiro de lotes temporal %s ContinuadoNon foi posíbel volver ao directorio orixinal.A chamada a CreatePipe() fallou (e=%ld) Creando un ficheiro por lotes temporal %s Hora actualA Aduana non exporta: %s Sinal de perigoTrampa EMTExecutando %s no canto Excedeuse o límite de tamaño do ficheiroO coprocesador de coma flotante non está dispoñíbelExcepción de coma flotanteColgarA E/S é posíbelTrampa de IOTInstrución inaceptábelPetición de informaciónAcceso inicializadoInterrompidoMatadoProceso fillo vivo %p (%s) PID %s %s Acceso de makeO ficheiro de make da entrada estándar especificouse dúas veces.Definición dunha variábel por obxectivo mal formadaNonNon hai obxectivosNon se especificaron obxectivos e non se atopou un ficheiro de makeObtívose un elemento para o proceso fillo %p (%s). Opcións: Non se admiten os traballos en paralelo (-j) nesta plataforma.Fallo de subministración eléctricaPoñendo o proceso fillo %p (%s) PID %s%s na cadea. SaírRe-executando[%u]:Lendo os ficheiros de make... Colleitando o proceso fillo perdedor %p PID %s %s Colleitando o proceso fillo gañador %p PID %s %s Liberouse un elemento para o proceso fillo %p (%s). Retirando o proceso fillo %p PID %s%s da cadea. Retirando os ficheiros intermedios... Envíe informes de fallo no programa a . Envíe informes de fallo na tradución a . Reiniciando para entrar no modo de traballo único (-j1).Recurso perdidoSIGPHONESIGWINDFallo de segmentoDetidoDetido (sinal)Detido (entrada de consola)Detido (saída de consola)TerminadoTrampa de trazado/punto de detenciónActualizando os obxectivos meta.... Actualizando os ficheiros de make.... Condición de E/S urxenteUso: %s [opcións] [obxectivo] ... Acceso de usuarioSinal definido polo usuario 1Sinal definido polo usuario 2Temporizador virtual esgotadoA xanela cambiouautomáticonon se poden reservar %lu bytes para a táboa hash: memoria esgotadanon é posíbel impoñer un límite de carga: non é posíbel impoñer límites de carga neste sistema operativoliña de ordescreando a canalización de traballospor defectoa cadea baleira non é válida como nome de ficheironome de variábel baleiroambienteambiente baixo -eA busca de rutas de find_and_set_shell() define default_shell = %s find_and_set_shell() definindo default_shell = %s fopen (ficheiro temporal)fwrite (ficheiro temporal)inicializar a canalización do servidor de traballossintaxe non válida no condicionala chamada a lbr$ini_control() fallou con estado = %da chamada a lbr$set_module() fallou ao extraer a información do módulo, estado = %dmake colleitou un proceso fillo de pid %s, aínda se agarda polo pid %s ficheiro de makefalta un patrón obxectivoregras implícitas e normais mesturadasregras de patrón implícitas e estáticas mesturadaspatróns de obxectivo múltiplesnonproduciuse un erro ao iniciar process_easy() o proceso (e=%ld) lectura da canalización de traballosa chamada a sys$search() fallou con %d a operación de tocar un membro do arquivo non está dispoñíbel en VMSsinal descoñecidounlink (ficheiro temporal)referencia a variábel non rematadaaviso: Detectáronse inconsistencias de reloxo. A operación pode quedar incompleta.aviso: viuse un carácter NUL; ignórase o resto da liñawindows32_openpipe(): a chamada a process_init_fd() fallou make-4.3/po/zh_TW.gmo0000644000175000017500000012243413611136532011402 00000000000000Þ•®Œ Aü$$+$&J$q$$!Š$-¬$Ú$ ì$- %;%'Q%#y%% ´%Â%à%Pù%;J&"†&©& Å&tæ&L['P¨'Dù'9>(Mx(@Æ(o)Gw)o¿)P/*l€*Fí*J4+€+9,C:,f~,_å,;E-:-O¼-J .}W.uÕ.~K/>Ê/M 0CW02›0FÎ0I1;_1 ›1¥1"Â1 å1ò1 22&2 ?2J2e2x2 Š2”2£2¬2%½2ã27ì2$333C3/[3‹3¤3¼3Ö3(ô34&24*Y4&„4+«4×4#ì4#5)45-^5,Œ5¹5Ò5$ç59 6F63e6™61¶6è677/7!F7$h7=7GË7G89[8•8ž8"¥8È8å8;9!?9a9+}9©9¼9Ö9,ð9:%;:,a:-Ž: ¼:&Ý:;#;C;!c;.…;´;Ä;ÍÙ;§</Ç<÷<& = 4=%U={=›=¯=1Ä= ö=>#>#=>La>6®>å>6?A8?>z? ¹?+Ã?*ï?@ 2@<@1D@2v@ ©@µ@Î@"ã@*A1A@A PAqA A ™A£A»A ÛA èA%õAB+;B$gBŒB¦B ÅBÏBéBC+CHC!eC ‡C”C®C ·CÅCÎCâCD$D&_0X_‰_=©_;ç_:#`1^`,`H½`4a*;a"fa/‰a8¹a7òa*b>b Nb&\b ƒd0¤d'Õd ýd e&e/9eie#ye1eÏe*èef1f HfSfpfPf7àf'g@gYgjwg=âgD hSeh4¹hOîhE>iH„iOÍiRjgpjrØj:KkI†kÐk7Rl:ŠlhÅlo.m:žmCÙmanLn|ÌnpIo„ºo@?pa€p:âp7qaUqC·q4ûq 0r! J&Y0€±ÐÙ.à.‚>‚E‚\‚s‚)‚º‚ɂ܂û‚ ƒ"ƒ2ƒJƒaƒrƒ‚ƒ¢ƒ%ƒèƒ„$„C„J„d„~„˜„´„Ñ„ ñ„þ„ … '… 4… ?… L…m…(…… ®…&Ï…*ö…!†=†\†*u† †¿†Þ†-î†)‡F‡^‡}‡ „‡ ‡ š‡)§‡ чÞ‡î‡õ‡3ˆ3Dˆ/xˆ&¨ˆ ψ ðˆ%ýˆ#‰-;‰i‰3ˆ‰'¼‰3ä‰ Š8$Š]Š-xŠ1¦Š'ØŠ0‹$1‹V‹*Z‹#…‹E©‹ ï‹*ù‹ $Œ+EŒ qŒ&|Œ £Œ&°Œ&׌RþŒ0Q‚˜+´àçùŽ,1Ž,^Ž3‹Ž=¿ŽGýŽE*d:2Êý**:-e(“¼#Ù!ý ‘,‘5‘ =‘(J‘*s‘ž‘!¾‘à‘ç‘ú‘’*(’$S’6x’/¯’7ß’“%“!D“f“|“/›“Ë“ê“ü“”")”L”\”t”'Œ”!´”Ö”9ì”&•)6•`•7g•7Ÿ•:ו:–M–-i–—– §–±–5Ê–—— — ?—L—S—l—2„—/·—/ç—(˜@˜W˜Ak˜/­˜0ݘ™ ™'3™[™r™‰™-¨™;Ö™Ošbš~š”š,ªš>ך8›O›,X›…›—›³›=Ûœœ$0œUœhœ9lœ9¦œ9àœ.2I2|%¯ Õ$â0ž8žMž`ž!ož2‘ž/Äž+ôž Ÿ#AŸ2eŸ0˜ŸÉŸ(çŸ$ )5 +_ %‹ 9± 1ë 8¡)V¡#€¡ ¤¡Å¡Õ¡7ë¡#¢K<¢;ˆ¢;Ä¢8£/9£Ri£/¼£,ì£%¤/?¤8o¤7¨¤à¤ø¤ ¥’’ž­u› ÙfŠœ´hcÓ='6݉#‰€“þEAf—)«$­¡É ~‘à k©µŒ9|jè2e-S„&vs•Ü`N¡H !š¨' ¦1uD§ô{}&.Y« Ïÿê?V¶50 mO¾v…JõK‡سöºxWQ ]tr–9 {C4ƒB±ÂMT†,\Z0š˰q:¨ó œU71ÌrHÛl™<:øò¿3B¢|/æjcP¸¯g5²Š—ç(+Áb-[+@†}~ŽzÊ™bFYä>n›"*]€,˜íÑlðQ =£‹Ldaã`8Ð÷åZÍ”#©@%ÎgnMÃsª_ÕD\S®ùTR„^7‚Ò ‹ _kEKž¬Vh6$¤/dwŸŸXúƒN4R¢^xtëLª®Ö»‘q*Åâ>W[ì§¹‡Ô·˜ÇF;!3PJe•y‚ÆoG¥ ;¥¼£I”ŽpˆéĈ"ß×GÚŒ“zÀo)ÞmUXa8¤Aý¬ip2(ïO–IiȦ…y½.ñîü%áCûw<? # %u 'vpath' search paths. # %u implicit rules, %u (%.1f%%) terminal. # %u pattern-specific variable values # Directories # Files # Finished Make data base on %s # General ('VPATH' variable) search path: # # Implicit Rules # Make data base, printed on %s # No general ('VPATH' variable) search path. # No implicit rules. # No pattern-specific variable values. # Pattern-specific Variable Values # VPATH Search Paths # Variables # files hash-table stats: # %s No strcache buffers %s strcache buffers: %lu (%lu) / strings = %lu / storage = %lu B / avg = %lu B %s strcache performance: lookups = %lu / hit rate = %lu%% Counted %d args in failed launch This program built for %s This program built for %s (%s) Unhandled exception filter called from program %s ExceptionCode = %lx ExceptionFlags = %lx ExceptionAddress = 0x%p --debug[=FLAGS] Print various types of debugging information. --no-print-directory Turn off -w, even if it was turned on implicitly. --no-silent Echo recipes (disable --silent mode). --trace Print tracing information. --warn-undefined-variables Warn when an undefined variable is referenced. -B, --always-make Unconditionally make all targets. -C DIRECTORY, --directory=DIRECTORY Change to DIRECTORY before doing anything. -E STRING, --eval=STRING Evaluate STRING as a makefile statement. -I DIRECTORY, --include-dir=DIRECTORY Search DIRECTORY for included makefiles. -L, --check-symlink-times Use the latest mtime between symlinks and target. -O[TYPE], --output-sync[=TYPE] Synchronize output of parallel jobs by TYPE. -R, --no-builtin-variables Disable the built-in variable settings. -S, --no-keep-going, --stop Turns off -k. -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE Consider FILE to be infinitely new. -b, -m Ignored for compatibility. -d Print lots of debugging information. -e, --environment-overrides Environment variables override makefiles. -f FILE, --file=FILE, --makefile=FILE Read FILE as a makefile. -h, --help Print this message and exit. -i, --ignore-errors Ignore errors from recipes. -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no arg. -k, --keep-going Keep going when some targets can't be made. -l [N], --load-average[=N], --max-load[=N] Don't start multiple jobs unless load is below N. -n, --just-print, --dry-run, --recon Don't actually run any recipe; just print them. -o FILE, --old-file=FILE, --assume-old=FILE Consider FILE to be very old and don't remake it. -p, --print-data-base Print make's internal database. -q, --question Run no recipe; exit status says if up to date. -r, --no-builtin-rules Disable the built-in implicit rules. -s, --silent, --quiet Don't echo recipes. -t, --touch Touch targets instead of remaking them. -v, --version Print the version number of make and exit. -w, --print-directory Print the current directory. Date %s Ignoring VPATH name '%s'. uid = %d, gid = %d, mode = 0%o. (built-in): (core dumped) (don't care) (from '%s', line %lu) (from '%s', line %lu): (ignored) (name might be truncated) (no default goal) (no ~ expansion) (remote) (search path) files, impossibilities impossibilities in %lu directories. so far.# A default, MAKEFILES, or -include/sinclude makefile.# Also makes:# Builtin rule# Command line target.# Dependencies recipe running (THIS IS A BUG).# Failed to be updated.# File does not exist.# File has been updated.# File has not been updated.# File is an intermediate prerequisite.# File is very old.# Implicit rule search has been done.# Implicit rule search has not been done.# Implicit/static pattern stem: '%s' # Invalid value in 'command_state' member!# Last modified %s # Modification time never checked.# Needs to be updated (-q is set).# Phony target (prerequisite of .PHONY).# Precious file (prerequisite of .PRECIOUS).# Recipe currently running (THIS IS A BUG).# Successfully updated.# recipe to execute# %s (device %d, inode [%d,%d,%d]): # %s (device %d, inode [%d,%d,%d]): could not be opened. # %s (device %ld, inode %ld): # %s (device %ld, inode %ld): could not be opened. # %s (key %s, mtime %I64u): # %s (key %s, mtime %I64u): could not be opened. # %s: could not be stat'd. # No 'vpath' search paths.# Not a target:# hash-table stats: # # variable set hash-table stats: $SHELL changed (was '%s', now '%s') %s (line %d) Bad shell context (!unixy && !batch_mode_shell) %s current buf: size = %hu B / used = %hu B / count = %hu / avg = %u B %s other free: total = %lu B / max = %lu B / min = %lu B / avg = %hu B %s other used: total = %lu B / count = %lu / avg = %lu B %s%s: %s%s: %s%s: Entering an unknown directory %s: Entering directory '%s' %s: Field '%s' not cached: %s%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p) %s: Leaving an unknown directory %s: Leaving directory '%s' %s: Timestamp out of range; substituting %s%s: failed to load%s: illegal option -- %c %s: invalid option -- %c %s: option '%c%s' doesn't allow an argument %s: option '%s' is ambiguous %s: option '%s' requires an argument %s: option '--%s' doesn't allow an argument %s: option '-W %s' doesn't allow an argument %s: option '-W %s' is ambiguous %s: option requires an argument -- %c %s: target '%s' does not exist%s: unrecognized option '%c%s' %s: unrecognized option '--%s' %s: update target '%s' due to: %s%s: user %lu (real %lu), group %lu (real %lu) %sBuilt for %s %sBuilt for %s (%s) %sLicense GPLv3+: GNU GPL version 3 or later %sThis is free software: you are free to change and redistribute it. %sThere is NO WARRANTY, to the extent permitted by law. %sNo rule to make target '%s'%s%sNo rule to make target '%s', needed by '%s'%s%s[%s: %s] Error %d%s%s[%u]: Entering an unknown directory %s[%u]: Entering directory '%s' %s[%u]: Leaving an unknown directory %s[%u]: Leaving directory '%s' '%s' is up to date.'override' directive*** Archive member '%s' may be bogus; not deleted*** Break. *** Deleting file '%s'*** Deleting intermediate file '%s'*** Waiting for unfinished jobs....*** Warning: .LOW_RESOLUTION_TIME file '%s' has a high resolution time stamp*** [%s] Archive member '%s' may be bogus; not deleted*** [%s] Deleting file '%s'*** mixed implicit and normal rules: deprecated syntax-O[TYPE] (--output-sync[=TYPE]) is not configured for this build.-warning, you may have to re-enable CTRL-Y handling from DCL. . Stop. .DEFAULT_GOAL contains more than one target.LIBPATTERNS element '%s' is not a pattern; using VPATH name '%s'AbortedAccess violation: read operation at address 0x%p Access violation: write operation at address 0x%p Alarm clockAppend %.*s and cleanup Append output to %s Avoiding implicit rule recursion. BUG: num_pattern_rules is wrong! %u != %uBUILTIN CD %s Bad system callBatch file contents: @echo off Batch file contents:%s %s Broken pipeBus errorCPU time limit exceededCannot create a temporary file Child accessChild exitedCircular %s <- %s dependency dropped.Cleaning up temp batch file %s Cleaning up temp batch file %s failed (%d) Cleaning up temporary batch file %s Collisions=%lu/%lu=%.0f%%Considering target file '%s'. ContinuedCould not restore stderr Could not restore stdin Could not restore stdout Couldn't change back to original directory.CreatePipe() failed (e=%ld) Creating temporary batch file %s Current timeCustoms won't export: %s DCL: %s Danger signalEMT trapEmpty function nameEmpty symbol name for load: %sExecuting %s instead Failed to load symbol %s from %s: %sFailed to open global symbol table: %sFailed to remake makefile '%s'.Failed to remake target file '%s'. File '%s' does not exist. File '%s' was considered already. File size limit exceededFinished prerequisites of target file '%s'. Finished updating file '%s'. Floating point co-processor not availableFloating point exceptionFound an implicit rule for '%s'. Found prerequisite '%s' as VPATH '%s' Function name too long: %sGiving up on target file '%s'. HangupI/O possibleIOT trapIllegal InstructionIncluded makefile '%s' was not found.Information requestInitialized accessInterruptInvalid function name: %sInvalid maximum argument count (%u) for function %sInvalid minimum argument count (%u) for function %sJobserver client (fds %d,%d) Jobserver client (semaphore %s) Jobserver slots limited to %d KilledLive child %p (%s) PID %s %s Load=%lu/%lu=%.0f%%, Loaded object %s is not declared to be GPL compatibleLoading symbol %s from %s Looking for a rule with intermediate file '%s'. Looking for an implicit rule for '%s'. Looking for archive-member implicit rule for '%s'. Make accessMakefile '%s' might loop; not remaking it. Makefile '%s' was not foundMakefile from standard input specified twice.Making '%s' due to always-make flag. Malformed target-specific variable definitionMember '%s'%s: %ld bytes at %ld (%ld). Must remake target '%s'. NoNo implicit rule found for '%s'. No need to remake target '%s'No recipe for '%s' and no prerequisites actually changed. No targetsNo targets specified and no makefile foundNothing to be done for '%s'.Obtained token for child %p (%s). Options: Parallel jobs (-j) are not supported on this platform.Power failurePrerequisite '%s' is newer than target '%s'. Prerequisite '%s' is older than target '%s'. Prerequisite '%s' is order-only for target '%s'. Prerequisite '%s' of target '%s' does not exist. Profiling timer expiredPruning file '%s'. Putting child %p (%s) PID %s%s on the chain. QuitRe-executing[%u]:Reading makefile '%s'Reading makefiles... Reaping losing child %p PID %s %s Reaping winning child %p PID %s %s Recently tried and failed to update file '%s'. Recipe for '%s' will be ignored in favor of the one for '%s'.Recipe for file '%s' was found by implicit rule search,Recipe has too many lines (%ud)Recipe of '%s' is being run. Recipe was specified for file '%s' at %s:%lu,Recursive variable '%s' references itself (eventually)Rehash=%u, Rejecting impossible implicit prerequisite '%s'. Rejecting impossible rule prerequisite '%s'. Released token for child %p (%s). Removing child %p PID %s%s from chain. Removing intermediate files... Report bugs to Resetting to single job (-j1) mode.Resource lostSIGPHONESIGWINDSegmentation faultSkipping UTF-8 BOM in makefile '%s' Skipping UTF-8 BOM in makefile buffer Stem too long: '%s%.*s'. Still updating file '%s'. StoppedStopped (signal)Stopped (tty input)Stopped (tty output)Successfully remade target file '%s'. Symbolic links not supported: disabling -L.Target '%s' is double-colon and has no prerequisites. Target '%s' not remade because of errors.Target file '%s' needs to be remade under -q. TerminatedThe 'load' operation is not supported on this platform.The prerequisites of '%s' are being made. Trace/breakpoint trapTrying implicit prerequisite '%s'. Trying pattern rule with stem '%.*s'. Trying rule prerequisite '%s'. Updating goal targets.... Updating makefiles.... Urgent I/O conditionUsage: %s [options] [target] ... User accessUser defined signal 1User defined signal 2Using default commands for '%s'. Using default recipe for '%s'. Virtual timer expiredWarning: File '%s' has modification time %s s in the futureWindow changedattempt to use unsupported feature: '%s'automaticbut '%s' is now considered the same file as '%s'.can't allocate %lu bytes for hash table: memory exhaustedcan't rename double-colon '%s' to single-colon '%s'can't rename single-colon '%s' to double-colon '%s'cannot enforce load limit: cannot enforce load limits on this operating systemclose: %s: %scommand linecreating jobs pipecreating jobserver semaphore: (Error %ld: %s)defaultduping jobs pipeempty string invalid as file nameempty variable nameenvironmentenvironment under -eextraneous '%s'extraneous text after '%s' directiveextraneous text after 'define' directiveextraneous text after 'endef' directivefile: invalid file operation: %sfile: missing filenamefile: too many argumentsfind_and_set_shell() path search set default_shell = %s find_and_set_shell() setting default_shell = %s first argument to 'word' function must be greater than 0fopen (temporary file)fwrite (temporary file)grouped targets must provide a recipeguile: Evaluating '%s' guile: Expanding '%s' init jobserver pipeinsufficient number of arguments (%d) to function '%s'internal error: invalid --jobserver-auth string '%s'internal error: unable to open jobserver semaphore '%s': (Error %ld: %s)invalid syntax in conditionaljob server shut downjobserver pipelinelbr$ini_control() failed with status = %dlbr$set_module() failed to extract module info, status = %dmake reaped child pid %s, still waiting for pid %s makefilemissing 'endef', unterminated 'define'missing 'endif'missing rule before recipemissing separatormissing separator (did you mean TAB instead of 8 spaces?)missing target patternmixed implicit and normal rulesmixed implicit and static pattern rulesmultiple target patternsnono more file handles: could not duplicate stderr no more file handles: could not duplicate stdin no more file handles: could not duplicate stdout non-numeric first argument to 'word' functionnon-numeric first argument to 'wordlist' functionnon-numeric second argument to 'wordlist' functiononly one 'else' per conditionalopen: %s: %sprerequisites cannot be defined in recipesprocess_easy() failed to launch process (e=%ld) pselect jobs piperead jobs piperead: %s: %srecipe commences before first targetrelease jobserver semaphore: (Error %ld: %s)semaphore or child process wait: (Error %ld: %s)spawnvpe: environment space might be exhaustedsys$search() failed with %d target '%s' doesn't match the target patterntarget '%s' given more than once in the same ruletarget file '%s' has both : and :: entriestarget pattern contains no '%%'the '%s%s' option requires a non-empty string argumentthe '-%c' option requires a positive integer argumenttouch archive member is not available on VMStouch: '%s' is not a valid archivetouch: Archive '%s' does not existtouch: Bad return code from ar_member_touch on '%s'touch: Member '%s' does not exist in '%s'unable to open library '%s' to lookup member status %dunimplemented on this platform: function '%s'unknown debug level specification '%s'unknown output-sync type '%s'unknown signalunlink (temporary file): unterminated call to function '%s': missing '%c'unterminated variable referencewarning: Clock skew detected. Your build may be incomplete.warning: -j%d forced in makefile: resetting jobserver mode.warning: -j%d forced in submake: resetting jobserver mode.warning: NUL character seen; rest of line ignoredwarning: ignoring old recipe for target '%s'warning: jobserver unavailable: using -j1. Add '+' to parent make rule.warning: overriding group membership for target '%s'warning: overriding recipe for target '%s'warning: undefined variable '%.*s'windows32_openpipe(): process_init_fd() failed windows32_openpipe: DuplicateHandle(Err) failed (e=%ld) windows32_openpipe: DuplicateHandle(In) failed (e=%ld) write error: stdoutwrite jobserverwrite: %s: %sProject-Id-Version: make 4.2.93 Report-Msgid-Bugs-To: bug-make@gnu.org PO-Revision-Date: 2020-01-03 20:13+0800 Last-Translator: pan93412 Language-Team: Chinese (traditional) Language: zh_TW MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. X-Generator: Lokalize 19.12.0 X-ZhConverter: ç¹åŒ–姬 dict-4ac8d2ed-r906 @ 2019/10/24 21:28:21 | https://zhconvert.org Plural-Forms: nplurals=1; plural=0; # %u「vpathã€æœå°‹è·¯å¾‘。 # %u æ¢éš±å«è¦å‰‡ï¼Œ%u (%.1f%%) 為末端。 # %u 個 pattern-specific 變數的值 # 目錄 # 檔案 # 在 %s ä¸Šå®Œæˆ make 資料基礎 # 通用æœå°‹è·¯å¾‘ (「VPATHã€è®Šæ•¸): # # éš±å«è¦å‰‡ # make 資料基礎,輸出在 %s # 沒有通用æœå°‹è·¯å¾‘(「VPATHã€è®Šæ•¸)。 # 沒有隱å«è¦å‰‡ã€‚ # 沒有 pattern-specific 變數的值。 # Pattern-specific 變數值 # VPATH æœå°‹è·¯å¾‘ # 變數 # 檔案雜湊表狀態: # %s 沒有 strcache ç·©è¡å€ %s strcache ç·©è¡: %lu (%lu) / 字串 = %lu / 空間 = %lu B / å¹³å‡ = %lu B %s strcache 性能:尋找 = %lu / 命中率 = %lu%% 失敗執行中共有 %d å€‹åƒæ•¸ã€‚ 該程å¼ç‚º %s 編譯 該程å¼ç‚º %s (%s) 編譯 å¾žç¨‹å¼ %s 產生的未處ç†çš„ç•°å¸¸éŽæ¿¾å™¨ 異常碼 = %lx 異常標誌 = %lx 異常ä½å€ = 0x%p --debug[=旗標] 輸出å„種除錯訊æ¯ã€‚ --no-print-directory 關閉 -w,å³ä½¿ -w é è¨­é–‹å•Ÿã€‚ --no-silent å°æ–¹æ¡ˆé€²è¡Œå›žé¡¯ï¼ˆåœç”¨ --silent 模å¼ï¼‰ã€‚ --trace 輸出跟蹤訊æ¯ã€‚ --warn-undefined-variables 當引用未定義變數的時候發出警告。 -B, --always-make ç„¡æ¢ä»¶è£½ä½œ (make) 所有目標。 -C 目錄, --directory=目錄 在執行å‰å…ˆåˆ‡æ›åˆ° <目錄>。 -E 字串, --eval=字串 å°‡ <字串> 作為 makefile 語å¥ä¼°å€¼ã€‚ -I 目錄, --include-dir=目錄 在 <目錄> 中æœå°‹è¢«åŒ…å«çš„ makefile。 -L, --check-symlink-times 使用符號連çµåŠç¬¦è™Ÿé€£çµç›®æ¨™ä¸­ä¿®æ”¹æ™‚間較晚的一個。 -O[類型], --output-sync[=類型] 使用 <類型> æ–¹å¼åŒæ­¥ä¸¦è¡Œä½œæ¥­è¼¸å‡ºã€‚ -R, --no-builtin-variables åœç”¨å…§å»ºè®Šæ•¸è¨­å®šã€‚ -S, --no-keep-going, --stop 關閉 -k。 -W 檔案, --what-if=檔案, --new-file=檔案, --assume-new=檔案 å°‡ <檔案> ç•¶åšæœ€æ–°ã€‚ -b, -m 為相容性而忽略。 -d 輸出大é‡é™¤éŒ¯è¨Šæ¯ã€‚ -e, --environment-overrides 環境變數覆蓋 makefile 中的變數。 -f 檔案, --file=檔案, --makefile=檔案 從 <檔案> 中讀入 makefile。 -h, --help 輸出該訊æ¯ä¸¦é›¢é–‹ã€‚ -i, --ignore-errors 忽略來自指令方案的錯誤。 -j [N], --jobs[=N] åŒæ™‚å…許 N å€‹ä½œæ¥­ï¼›ç„¡åƒæ•¸è¡¨æ˜Žå…許無é™å€‹ä½œæ¥­ã€‚ -k, --keep-going ç•¶æŸäº›ç›®æ¨™ç„¡æ³•製作時ä»ç„¶ç¹¼çºŒã€‚ -l [N], --load-average[=N], --max-load[=N] 在系統負載高於 N 時ä¸å•Ÿå‹•多作業。 -n, --just-print, --dry-run, --recon åªè¼¸å‡ºæŒ‡ä»¤æ–¹æ¡ˆï¼Œä¸å¯¦éš›åŸ·è¡Œã€‚ -o 檔案, --old-file=檔案, --assume-old=檔案 å°‡ <檔案> ç•¶åšå¾ˆèˆŠï¼Œä¸å¿…釿–°è£½ä½œã€‚ -p, --print-data-base 輸出 make 的內部資料庫。 -q, --question ä¸åŸ·è¡Œä»»ä½•方案;離開狀態說明是å¦å·²å…¨éƒ¨æ›´æ–°ã€‚ -r, --no-builtin-rules åœç”¨å…§å»ºéš±å«è¦å‰‡ã€‚ -s, --silent, --quiet ä¸è¼¸å‡ºæ–¹æ¡ˆæŒ‡ä»¤ã€‚ -t, --touch touch ç›®æ¨™ï¼ˆæ›´æ–°ä¿®æ”¹æ™‚é–“ï¼‰è€Œä¸æ˜¯é‡æ–°è£½ä½œå®ƒå€‘。 -v, --version 輸出 make 的版本號並離開。 -w, --print-directory 輸出目å‰ç›®éŒ„。 日期 %s 忽略 VPATH å稱「%sã€ã€‚ uid = %d,gid = %d,mode = 0%o。 (內建): (已傾尿 ¸å¿ƒ) (ä¸ç”¨ç†) (從「%sã€ï¼Œè¡Œ %lu) (從「%sã€ï¼Œè¡Œ %lu): (已忽略) (å稱å¯èƒ½è¢«æˆªæ–·) (沒有é è¨­ç›®æ¨™) (沒有 ~ 展開) (é ç«¯) (æœå°‹è·¯å¾‘) 檔案, ä¸å¯èƒ½ ä¸å¯èƒ½åœ¨ %lu 目錄中。 迄今為止。# é è¨­çš„ã€MAKEFILES 指定的ã€-include/sinclude 包å«çš„ makefile。# é‚„è¦è£½ä½œï¼š# 內建è¦å‰‡# 指令列目標。# 正在執行的ä¾è³´æ€§æ–¹æ¡ˆ (這是 BUG)。# 更新失敗。# 檔案ä¸å­˜åœ¨ã€‚# 檔案已經被更新。# 檔案尚未被更新。# æª”æ¡ˆæ˜¯ä¸€å€‹ä¸­é–“å‰æã€‚# 檔案éžå¸¸é™³èˆŠã€‚# å°éš±å«è¦å‰‡çš„æœå°‹å·²å®Œæˆã€‚# å°éš±å«è¦å‰‡çš„æœå°‹å°šæœªå®Œæˆã€‚# éš±å«/éœæ…‹æ¨¡å¼ä¸»å¹¹ï¼šã€Œ%s〠# 「command_stateã€æˆå“¡ä¸­å­˜åœ¨ç„¡æ•ˆçš„值ï¼# 最近更新 %s # å¾žä¸æª¢æŸ¥ä¿®æ”¹æ™‚間。# éœ€è¦æ›´æ–° (用 -q 設定)。# å‡ç›®æ¨™ (.PHONY çš„å‰æ)。# é‡è¦æª”案 (.PRECIOUS çš„å‰æ)。# 正在執行的方案 (這是 BUG)。# æ›´æ–°æˆåŠŸã€‚# è¦åŸ·è¡Œçš„æ–¹æ¡ˆ# %s (è£ç½® %d,i-節點 [%d,%d,%d]):# %s (è£ç½® %d,i-節點 [%d,%d,%d]):無法打開。 # %s (è£ç½® %ld,i-節點 %ld):# %s (è£ç½® %ld,i-節點 %ld):無法打開。 # %s (é—œéµå­— %s,修改時間 %I64u):# %s (é—œéµå­— %s,修改時間 %I64u):無法打開。 # %s:無法å°å…¶é€²è¡Œ stat 動作。 # 沒有「vpathã€æœå°‹è·¯å¾‘。# 䏿˜¯ä¸€å€‹ç›®æ¨™ï¼š# 雜湊表統計資料: # # 變數的雜湊表狀態: $SHELL 已改變 (原為「%sã€ï¼Œç¾ç‚ºã€Œ%sã€) %s (行 %d) 錯誤的 shell 上下文 (!unixy && !batch_mode_shell) %s ç›®å‰ç·©è¡: 尺寸 = %hu B / 已用 = %hu B / æ•¸é‡ = %hu / å¹³å‡ = %u B %s 其他空餘: 總共 = %lu B / 最大 = %lu B / æœ€å° = %lu B / å¹³å‡ = %hu B %s 其他已用: 總共 = %lu B / æ•¸é‡ = %lu / å¹³å‡ = %lu B %s%s: %s%s: %s%s: 進入一個未知的目錄 %s: 進入目錄「%s〠%s:欄ä½ã€Œ%sã€æœªè¢«å¿«å–:%s%s:æ•ç²ä¸­æ–·/異常 (程å¼ç¢¼ = 0x%lx, ä½å€ = 0x%p) %s: 離開一個未知的目錄 %s: 離開目錄「%s〠%s:時間標記超出範åœï¼›æ­£åœ¨å–代 %s%s: 載入失敗%s:é¸é …無效 ─ %c %s:無效é¸é … -- %c %s:é¸é …「%c%sã€ä¸å…è¨±åƒæ•¸ %s:é¸é …「%sã€å«ç¾©ä¸æ¸… %s:é¸é …「%sã€éœ€è¦ä¸€å€‹åƒæ•¸ %s:é¸é …「--%sã€ä¸å…è¨±åƒæ•¸ %s:é¸é …「-W %sã€ä¸å…è¨±çµ¦å‡ºåƒæ•¸ %s:é¸é …「-W %sã€å«ç¾©ä¸æ¸… %s:é¸é …需è¦ä¸€å€‹åƒæ•¸ -- %c %s: 目標檔案「%sã€ä¸å­˜åœ¨%s:無法識別的é¸é …「%c%s〠%s:無法識別的é¸é …「--%s〠%s:更新「%sã€ï¼Œå› ç‚ºï¼š%s%s: 使用者 %lu (真實使用者 %lu), 組 %lu (真實組 %lu) %s為 %s 編譯 %s為 %s (%s) 編譯 %sæŽˆæ¬Šæ¢æ¬¾ï¼šGPLv3+:GNU é€šç”¨å…¬å…±æŽˆæ¬Šæ¢æ¬¾ç¬¬ 3 版或更新版本。 %s本軟體是自由軟體:您å¯ä»¥è‡ªç”±ä¿®æ”¹å’Œé‡æ–°ç™¼å¸ƒå®ƒã€‚ %s在法律å…許的範åœå…§æ²’有其他ä¿è­‰ã€‚ %s沒有è¦å‰‡å¯è£½ä½œç›®æ¨™ã€Œ%sã€%s%s沒有è¦å‰‡å¯è£½ä½œç›®æ¨™ã€Œ%sã€ï¼Œç”±ã€Œ%sã€%s 需求%s[%s:%s] 錯誤 %d%s%s[%u]: 進入一個未知的目錄 %s[%u]: 進入目錄「%s〠%s[%u]: 離開一個未知的目錄 %s[%u]: 離開目錄「%s〠「%sã€å·²æ˜¯æœ€æ–°ã€‚「overrideã€æŒ‡ä»¤*** å°å­˜æˆå“¡ã€Œ%sã€å¯èƒ½æ˜¯å‡çš„;未刪除*** 中斷。 *** 正在刪除檔案「%sã€*** 正在刪除中間檔案「%sã€*** 正在等待未完æˆçš„作業....*** 警告: .LOW_RESOLUTION_TIME 檔案 `%s' 有一個高精度的的時間標誌*** [%s] å°å­˜æˆå“¡ã€Œ%sã€å¯èƒ½æ˜¯å‡çš„;未刪除*** [%s] 正在刪除檔案「%sã€*** éš±å«å’Œæ™®é€šè¦å‰‡æ··åˆï¼šå·²æ£„用的語法-O[類型] (--output-sync[=類型]) 並未設定入此 make 構建。-警告, ä½ å¯èƒ½å¿…須從 DCL 釿–°å•Ÿç”¨ CTRL-Y 處ç†ã€‚ 。 åœæ­¢ã€‚ .DEFAULT_GOAL 包å«å¤šé¤˜ä¸€å€‹ç›®æ¨™.LIBPATTERNS 的元素「%sã€ä¸æ˜¯ä¸€å€‹æ¨¡å¼ï¼›ä½¿ç”¨ VPATH å稱「%sã€<內建>å–æ¶ˆå­˜å–è¡çªï¼šä½å€ 0x%p 處的讀å–動作 å­˜å–è¡çªï¼šä½å€ 0x%p 處的寫入動作 鬧é˜è¿½åŠ  %.*s ä¸¦æ¸…ç† å°‡è¼¸å‡ºè¿½åŠ åˆ° %s é¿å…éš±å«è¦å‰‡éžè¿´ã€‚ BUG:num_pattern_rules 出錯ï¼%u != %uBUILTIN CD %s ç„¡æ•ˆç³»çµ±å‘¼å«æ‰¹æ¬¡æª”內容: @echo off 批次檔內容:%s %s 管線æå£žåŒ¯æµæŽ’éŒ¯èª¤åˆ°é” CPU 時間上é™ç„¡æ³•建立暫存檔 å­ç¨‹åº 權é™å­ç¨‹åºé€€å‡ºæ”¾æ£„循環ä¾è³´ %s <- %s 。正在清除暫時批次檔 %s æ¸…ç†æš«æ™‚批次檔 %s 失敗 (%d) 正在清除暫時批次檔 %s 碰撞=%lu/%lu=%.0f%%正在考慮目標檔案「%sã€ã€‚ 繼續無法還原標準錯誤 無法還原標準輸入 無法還原標準輸出 無法回到原始目錄。CreatePipe() 失敗 (e=%ld) 正在建立暫時批檔案 %s ç›®å‰æ™‚間使用者ä¸å¸Œæœ›åŒ¯å‡ºï¼š%s DCL:%s å±éšªè¨Šè™ŸEMT 陷阱空函數åè¦è¼‰å…¥çš„符號å為空:%s執行 %s 作為替代 從 %2$s 載入符號 %1$s 失敗:%3$s打開全域符號表失敗:%s釿–°åŸ·è¡Œ makefile「%sã€å¤±æ•—ã€‚é‡æ–°è£½ä½œç›®æ¨™æª”案「%sã€å¤±æ•—。 檔案「%sã€ä¸å­˜åœ¨ã€‚ å·²è€ƒæ…®éŽæª”案「%sã€ã€‚ åˆ°é”æª”案大å°ä¸Šé™ç›®æ¨™æª”案「%sã€çš„å‰æå·²å®Œæˆã€‚ 更新檔案「%sã€å®Œæˆã€‚ 浮點數å”處ç†å™¨ä¸å¯ç”¨æœŸæœ›æµ®é»žæ•¸æ‰¾åˆ°ä¸€æ¢é—œæ–¼ã€Œ%sã€çš„éš±å«è¦å‰‡ã€‚ å‰æã€Œ%sã€åœ¨ VPATH「%sã€ä¸­ç™¼ç¾ 函數å稱太長:%s放棄目標檔案「%sã€ã€‚ 掛斷å¯èƒ½ I/OIOT 陷阱無效指令找ä¸åˆ°è¢«å¼•入的 makefile「%sã€ã€‚資訊請求åˆå§‹åŒ–æˆåŠŸä¸­æ­¢ç„¡æ•ˆçš„å‡½æ•¸å稱:%s函數「%2$sã€çš„æœ€å¤šåƒæ•¸æ•¸é‡ (%1$u) 無效函數「%2$sã€çš„æœ€å°‘åƒæ•¸æ•¸é‡ (%1$u) 無效Jobserver 客戶端(檔案æè¿°ç¬¦ %d,%d) Jobserver å®¢æˆ¶ç«¯ï¼ˆè¨Šè™Ÿé‡ %s) Jobserver æ§½ä½æ•¸é™åˆ¶ç‚º %d å¼·åˆ¶çµæŸä½¿ç”¨ä¸­å­ç¨‹åº %p (%s) PID %s %s 負載=%lu/%lu=%.0f%%, 已載入的物件 %s æœªè²æ˜Žç‚º GPL 相容正從 %2$s 載入符號 %1$s 正在尋找包å«ä¸­é–“檔案「%sã€çš„è¦å‰‡ã€‚ 正在為「%sã€å°‹æ‰¾éš±å«è¦å‰‡ã€‚ 正在為「%sã€å°‹æ‰¾å°å­˜æˆå“¡éš±å«è¦å‰‡ã€‚ Make 權é™Makefile「%sã€å¯èƒ½å¾ªç’°ï¼›ä¸æœƒé‡æ–°åŸ·è¡Œå®ƒã€‚ 找ä¸åˆ° makefile「%sã€å…©æ¬¡æŒ‡æ˜Žä¾†è‡ªæ¨™æº–輸入的 makefile。由於 always-make 標誌所以製作「%sã€ã€‚ é‡å°ç›®æ¨™çš„ç´”é‡å®šç¾©æ ¼å¼éŒ¯èª¤æˆå“¡ã€Œ%sã€%s: %ld ä½å…ƒçµ„æ–¼ %ld (%ld)。 å¿…é ˆé‡æ–°è£½ä½œç›®æ¨™ã€Œ%sã€ã€‚ 無找ä¸åˆ°é—œæ–¼ã€Œ%sã€çš„éš±å«è¦å‰‡ã€‚ ä¸éœ€è¦é‡æ–°è£½ä½œç›®æ¨™ã€Œ%sã€æ²’有關於「%sã€çš„æ–¹æ¡ˆï¼Œä¸¦ä¸”æ²’æœ‰å¯¦éš›æ”¹è®Šçš„å‰æã€‚ 無目標沒有指明目標並且找ä¸åˆ° makefileå°ã€Œ%sã€ç„¡éœ€åšä»»ä½•事。å–得至處ç†ç¨‹åº %p (%s) 的標記。 é¸é …: 本平å°ä¸æ”¯æ´ä¸¦è¡Œä½œæ¥­ (-j)。電æºéŒ¯èª¤å‰æã€Œ%sã€æ¯”目標「%sã€æ–°ã€‚ å‰æã€Œ%sã€æ¯”目標「%sã€èˆŠã€‚ å‰æã€Œ%sã€å°ç›®æ¨™ã€Œ%sã€ä¾†èªªåƒ…ç”¨æ–¼æŒ‡å®šåŸ·è¡Œé †åº (order-only) 。 目標「%2$sã€çš„å‰æã€Œ%1$sã€ä¸å­˜åœ¨ã€‚ 分æžè¨ˆæ™‚å™¨éŽæœŸæ­£åˆªé™¤æª”案「%sã€ã€‚ å°‡å­ç¨‹åº %p (%s) PID %s%s 放入éˆã€‚ çµæŸé‡æ–°åŸ·è¡Œ[%u]:正在讀入 makefile「%sã€æ­£åœ¨è®€å…¥ makefile... 正在中止失敗的å­ç¨‹åº %p PID %s %s 正在中止ç²å‹çš„å­ç¨‹åº %p PID %s %s æœ€è¿‘å·²å˜—è©¦éŽæ›´æ–°æª”案「%sã€ä¸¦å¤±æ•—。 「%sã€çš„æŒ‡ä»¤æ–¹æ¡ˆè¢«å¿½ç•¥ï¼Œè½‰è€Œä½¿ç”¨ã€Œ%sã€çš„。關於檔案「%sã€çš„æŒ‡ä»¤æ–¹æ¡ˆé€éŽéš±å«è¦å‰‡æœå°‹è€Œæ‰¾åˆ°ï¼ŒæŒ‡ä»¤æ–¹æ¡ˆè¡Œæ•¸å¤ªå¤š (%ud)「%sã€çš„æŒ‡ä»¤æ–¹æ¡ˆæ­£åœ¨è¢«åŸ·è¡Œã€‚ 關於檔案「%sã€çš„æŒ‡ä»¤æ–¹æ¡ˆåœ¨ %s:%lu 處指定,éžè¿´è®Šæ•¸ã€Œ%sã€ï¼ˆæœ€çµ‚å°‡æœƒï¼‰å¼•ç”¨è‡ªèº«é‡æ–°é›œæ¹Š=%u, 拒絕ä¸å¯èƒ½çš„éš±å«å‰æã€Œ%sã€ã€‚ 拒絕ä¸å¯èƒ½çš„è¦å‰‡å‰æã€Œ%sã€ã€‚ 為å­ç¨‹åº %p (%s) 釋放憑證 (token)。 從éˆä¸­åˆªé™¤å­ç¨‹åº %p PID %s%s。 正在刪除中間檔案... 報告錯誤到 é‡è¨­ç‚ºå–®ä½œæ¥­æ¨¡å¼ (-j1)。資æºéºå¤±SIGPHONESIGWINDåˆ†å‰²éŒ¯èª¤è·³éŽ Makefile「%sã€ä¸­çš„ UTF-8 BOM è·³éŽ Makefile ç·©è¡å€ä¸­çš„ UTF-8 BOM 主幹太長:「%s%.*sã€ã€‚ ä»ç„¶åœ¨æ›´æ–°æª”案「%sã€ã€‚ åœæ­¢åœæ­¢ï¼ˆä¿¡è™Ÿï¼‰åœæ­¢ï¼ˆtty è¼¸å…¥ï¼‰åœæ­¢ï¼ˆtty è¼¸å‡ºï¼‰é‡æ–°è£½ä½œç›®æ¨™æª”案「%sã€æˆåŠŸã€‚ 䏿”¯æ´ç¬¦è™Ÿé€£çµï¼šåœç”¨ -L。目標「%sã€æ˜¯é›™å†’è™Ÿç›®æ¨™ä¸¦ä¸”æ²’æœ‰å‰æã€‚ 由於錯誤目標「%sã€ä¸¦æœªé‡æ–°è£½ä½œã€‚目標檔案「%sã€éœ€è¦ä»¥ -q é¸é …釿–°è£½ä½œã€‚ 終止本平å°ä¸æ”¯æ´ã€Œloadã€å‹•作。正在製作「%sã€çš„å‰æã€‚ 追蹤 / 斷點陷阱嘗試隱å«å‰æã€Œ%sã€ã€‚ 用主幹「%.*sã€å˜—è©¦ç¬¦åˆæ¨¡å¼è¦å‰‡ã€‚ 嘗試è¦å‰‡å‰æã€Œ%sã€ã€‚ 更新目標.... 正在更新 makefile.... 緊急 I/O æ¢ä»¶ç”¨æ³•:%s [é¸é …] [目標] ... 使用者權é™ä½¿ç”¨è€…定義信號 1使用者定義信號 2使用關於「%sã€çš„é è¨­æŒ‡ä»¤ã€‚ 使用「%sã€çš„é è¨­æ–¹æ¡ˆã€‚ è™›æ“¬è¨ˆæ™‚å™¨éŽæœŸè­¦å‘Šï¼šæª”案「%sã€çš„修改時間在未來 %s ç§’å¾Œå·²è®Šæ›´è¦–çª—è©¦åœ–ä½¿ç”¨ä¸æ”¯æ´çš„功能:「%sã€è‡ªå‹•但「%sã€ç¾åœ¨è¢«çœ‹åšã€Œ%sã€çš„åŒä¸€å€‹æª”æ¡ˆã€‚ç„¡æ³•ç‚ºé›œæ¹Šè¡¨åˆ†é… %lu ä½å…ƒçµ„: 記憶體耗盡無法將雙冒號「%sã€é‡æ–°å‘½å為單冒號「%sã€ç„¡æ³•將單冒號「%sã€é‡æ–°å‘½å為雙冒號「%sã€ç„¡æ³•實施負載é™åˆ¶ï¼šç„¡æ³•在本作業系統中實施負載é™åˆ¶close:%s:%sæŒ‡ä»¤åˆ—æ­£åœ¨å»ºç«‹ä½œæ¥­ç®¡é“æ­£å»ºç«‹ jobserver 訊號é‡ï¼šï¼ˆéŒ¯èª¤ %ld:%s)é è¨­æ­£åœ¨è¤‡è£½ä½œæ¥­ç®¡é“空字串是無效的檔案å空變數å環境-e 指定的環境變數ä¸è©²å‡ºç¾çš„「%sã€åœ¨ã€Œ%sã€æŒ‡ä»¤ä¹‹å¾Œå«æœ‰ä¸è©²å‡ºç¾çš„æ–‡å­—「endefã€æŒ‡ä»¤å¾Œå«æœ‰ä¸è©²å‡ºç¾çš„æ–‡å­—「endefã€æŒ‡ä»¤å¾Œå«æœ‰ä¸è©²å‡ºç¾çš„æ–‡å­—file:無效檔案(file)動作:%sfile:缺少檔案åfileï¼šå¤ªå¤šåƒæ•¸find_and_set_shell() 路徑æœå°‹çµæžœè¨­å®š default_shell = %s find_and_set_shell() 設定 default_shell = %s 「wordã€å‡½æ•¸çš„ç¬¬ä¸€å€‹åƒæ•¸å¿…須大於 0fopen (暫存檔)fwrite (暫存檔)æˆçµ„的目標必須æä¾›ä¸€å€‹æ–¹æ¡ˆguile: 正求值 '%s' guile: 正展開 '%s' 創始化作業伺æœå™¨ç®¡é“函數「%2$sã€çš„åƒæ•¸æ•¸é‡ (%1$d) ä¸å¤ å…§éƒ¨éŒ¯èª¤ï¼šç„¡æ•ˆ --jobserver-auth 驗證字串「%sã€å…§éƒ¨éŒ¯èª¤ï¼šç„¡æ³•打開 jobserver 訊號é‡ã€Œ%sã€ï¼šï¼ˆéŒ¯èª¤ %ld:%s)æ¢ä»¶ä¸­å«æœ‰ç„¡æ•ˆèªžæ³•作業伺æœå™¨é—œé–‰ä½œæ¥­ä¼ºæœå™¨ç®¡é“lbr$ini_control() 失敗,返回狀態 = %dlbr$set_modules() å–得模組訊æ¯å¤±æ•—,返回狀態 = %dmake 已中止的å­ç¨‹åº pid %s,ä»åœ¨ç­‰å¾… pid %s makefileéºæ¼ã€Œendefã€ï¼Œæœªçµ‚止的「defineã€éºæ¼ã€Œendifã€æ–¹æ¡ˆä¹‹å‰éºæ¼äº†è¦å‰‡ç¼ºå°‘分隔符缺少分隔符 (你大概想用 TABï¼Œè€Œä¸æ˜¯å…«å€‹ç©ºæ ¼)ç„¡ç›®æ¨™ç¬¦åˆæ··åˆçš„éš±å«å’Œæ™®é€šè¦å‰‡æ··åˆçš„éš±å«å’Œéœæ…‹æ¨¡å¼è¦å‰‡å¤šå€‹ç›®æ¨™ç¬¦åˆç„¡æ²’有剩餘的檔案處ç†å™¨: 無法複製標準錯誤 沒有剩餘的檔案處ç†å™¨: 無法複製標準輸入 沒有剩餘的檔案處ç†å™¨: 無法複製標準輸出 「wordã€å‡½æ•¸çš„ç¬¬ä¸€å€‹åƒæ•¸ä¸æ˜¯æ•¸å­—「wordlistã€å‡½æ•¸çš„ç¬¬ä¸€å€‹åƒæ•¸ä¸æ˜¯æ•¸å­—「wordlistã€å‡½æ•¸çš„ç¬¬äºŒå€‹åƒæ•¸ä¸æ˜¯æ•¸å­—æ¯å€‹æ¢ä»¶åªèƒ½æœ‰ä¸€å€‹ã€Œelseã€open: %s: %sä¾è³´ç„¡æ³•在方案腳本中定義process_easy() 啟動處ç†ç¨‹åºå¤±æ•— (e=%ld) pselect 作業管é“讀å–作業管é“read:%s:%s方案在第一個目標å‰é–‹å§‹é‡‹æ”¾ jobserver 訊號é‡ï¼šï¼ˆéŒ¯èª¤ %ld:%sï¼‰è¨Šè™Ÿé‡æˆ–å­ç¨‹åºç­‰å¾…:(錯誤 %ld:%s)spawnvpe: 環境變數空間å¯èƒ½æœƒè€—盡sys$search() 失敗並返回 %d 目標「%sã€ä¸ç¬¦åˆç›®æ¨™æ¨¡å¼ç›®æ¨™ã€Œ%sã€åœ¨åŒä¸€å€‹è¦å‰‡ä¸­çµ¦å‡ºäº†å¤šæ¬¡ç›®æ¨™æª”案「%sã€å«æœ‰ : å’Œ :: 兩種æ¢ç›®ç›®æ¨™æ¨¡å¼ä¸å«æœ‰ã€Œ%%ã€ã€Œ%s%sã€é¸é …需è¦éžç©ºå­—ä¸²åƒæ•¸ã€Œ-%cã€é¸é …éœ€è¦æ­£æ•´æ•¸åƒæ•¸VMS ç³»çµ±ä¸Šä¸æ”¯æ´ touch å°å­˜æˆå“¡touch:「%sã€ä¸æ˜¯æœ‰æ•ˆçš„å°å­˜æª”案touch:å°å­˜æª”案「%sã€ä¸å­˜åœ¨touch:「%sã€ä¸Šçš„ ar_member_touch 的返回碼ä¸ç•¶touch:在「%2$sã€ä¸­ä¸å­˜åœ¨æˆå“¡ã€Œ%1$sã€ç„¡æ³•打開函å¼åº«ã€Œ%sã€ä»¥å°‹æ‰¾æˆå“¡ï¼Œç‹€æ…‹ %d在本平å°ä¸Šæœªå¯¦ç¾ï¼šå‡½æ•¸ã€Œ%sã€æœªçŸ¥çš„除錯級別定義「%sã€ä¸æ˜Žè¼¸å‡ºåŒæ­¥é¡žåž‹ã€Œ%sã€æœªçŸ¥çš„訊號刪除 (暫存檔):å°å‡½æ•¸ã€Œ%sã€çš„æœªçµ‚止的呼å«ï¼šéºæ¼ã€Œ%cã€æœªçµ‚止的變數引用警告:檢測到時é˜éŒ¯èª¤ã€‚您的構建版本å¯èƒ½æ˜¯ä¸å®Œæ•´çš„。警告: å­ make 中強制 -j%d: é‡è¨­ jobserver 模å¼ã€‚警告: å­ make 中強制 -j%d: é‡è¨­ jobserver 模å¼ã€‚警告:é‡åˆ°äº† NUL 字元;忽略行的剩餘部分警告:忽略關於目標「%sã€çš„舊方案警告: jobserver ä¸å¯ç”¨: 正使用 -j1。添加「+ã€åˆ°çˆ¶ make çš„è¦å‰‡ã€‚警告:覆蓋關於目標「%sã€çš„組æˆå“¡è­¦å‘Šï¼šè¦†è“‹é—œæ–¼ç›®æ¨™ã€Œ%sã€çš„æ–¹æ¡ˆè­¦å‘Šï¼šæœªå®šç¾©çš„變數「%.*sã€windows32_openpipe(): process_init_fd() 失敗 windows32_openpipe: DuplicateHandle(Err) 失敗 (e=%ld) windows32_openpipe: DuplicateHandle(In) 失敗 (e=%ld) 寫錯誤: 標準輸出寫入作業伺æœå™¨write: %s: %smake-4.3/build_w32.bat0000755000175000017500000002540313603564437011522 00000000000000@echo off :: Copyright (C) 1996-2020 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 . setlocal if not "%RECURSEME%"=="%~0" ( set "RECURSEME=%~0" %ComSpec% /s /c ""%~0" %*" goto :EOF ) call :Reset if "%1" == "-h" goto Usage if "%1" == "--help" goto Usage echo. echo Creating GNU Make for Windows 9X/NT/2K/XP/Vista/7/8/10 echo. set MAKE=gnumake set GUILE=Y set COMPILER=cl.exe set O=obj set ARCH=x64 set DEBUG=N if exist maintMakefile ( set MAINT=Y ) else ( set MAINT=N ) :ParseSW if "%1" == "--debug" goto SetDebug if "%1" == "--without-guile" goto NoGuile if "%1" == "--x86" goto Set32Bit if "%1" == "gcc" goto SetCC if "%1" == "" goto DoneSW goto Usage :SetDebug set DEBUG=Y echo - Building without compiler optimizations shift goto ParseSW :NoGuile set GUILE=N echo - Building without Guile shift goto ParseSW :Set32Bit set ARCH=x86 echo - Building 32bit GNU Make shift goto ParseSW :SetCC set COMPILER=gcc set O=o echo - Building with GCC shift goto ParseSW :DoneSW if "%MAINT%" == "Y" echo - Enabling maintainer mode if "%COMPILER%" == "gcc" goto FindGcc :: Find a compiler. Visual Studio requires a lot of effort to locate :-/. %COMPILER% >nul 2>&1 if not ERRORLEVEL 1 goto FoundMSVC :: Visual Studio 17 and above provides the "vswhere" tool call :FindVswhere if ERRORLEVEL 1 goto LegacyVS for /f "tokens=* usebackq" %%i in (`%VSWHERE% -latest -property installationPath`) do ( set InstallPath=%%i ) set "VSVARS=%InstallPath%\VC\Auxiliary\Build\vcvarsall.bat" call :CheckMSVC if not ERRORLEVEL 1 goto FoundMSVC :: No "vswhere" or it can't find a compiler. Go old-school. :LegacyVS set "VSVARS=%VS150COMNTOOLS%\..\..\VC\vcvarsall.bat" call :CheckMSVC if not ERRORLEVEL 1 goto FoundMSVC set "VSVARS=%VS140COMNTOOLS%\..\..\VC\vcvarsall.bat" call :CheckMSVC if not ERRORLEVEL 1 goto FoundMSVC set "VSVARS=%VS120COMNTOOLS%\..\..\VC\vcvarsall.bat" call :CheckMSVC if not ERRORLEVEL 1 goto FoundMSVC set "VSVARS=%VS110COMNTOOLS%\..\..\VC\vcvarsall.bat" call :CheckMSVC if not ERRORLEVEL 1 goto FoundMSVC set "VSVARS=%VS100COMNTOOLS%\..\..\VC\vcvarsall.bat" call :CheckMSVC if not ERRORLEVEL 1 goto FoundMSVC set "VSVARS=%VS90COMNTOOLS%\..\..\VC\vcvarsall.bat" call :CheckMSVC if not ERRORLEVEL 1 goto FoundMSVC set "VSVARS=%VS80COMNTOOLS%\..\..\VC\vcvarsall.bat" call :CheckMSVC if not ERRORLEVEL 1 goto FoundMSVC set "VSVARS=%VS71COMNTOOLS%\..\..\VC\vcvarsall.bat" call :CheckMSVC if not ERRORLEVEL 1 goto FoundMSVC set "VSVARS=%VS70COMNTOOLS%\..\..\VC\vcvarsall.bat" call :CheckMSVC if not ERRORLEVEL 1 goto FoundMSVC set "VSVARS=%V6TOOLS%\VC98\Bin\vcvars32.bat" call :CheckMSVC if not ERRORLEVEL 1 goto FoundMSVC set "VSVARS=%V6TOOLS%\VC97\Bin\vcvars32.bat" call :CheckMSVC if not ERRORLEVEL 1 goto FoundMSVC set "VSVARS=%V5TOOLS%\VC\Bin\vcvars32.bat" call :CheckMSVC if not ERRORLEVEL 1 goto FoundMSVC :: We did not find anything--fail echo No MSVC compiler available. echo Please run vcvarsall.bat and/or configure your Path. exit 1 :FoundMSVC set OUTDIR=.\WinRel set LNKOUT=./WinRel set "OPTS=/O2 /D NDEBUG" set LINKOPTS= if "%DEBUG%" == "Y" set OUTDIR=.\WinDebug if "%DEBUG%" == "Y" set LNKOUT=./WinDebug if "%DEBUG%" == "Y" set "OPTS=/Zi /Od /D _DEBUG" if "%DEBUG%" == "Y" set LINKOPTS=/DEBUG if "%MAINT%" == "Y" set "OPTS=%OPTS% /D MAKE_MAINTAINER_MODE" :: Show the compiler version that we found :: Unfortunately this also shows a "usage" note; I can't find anything better. echo. %COMPILER% goto Build :FindGcc set OUTDIR=.\GccRel set LNKOUT=./GccRel set OPTS=-O2 if "%DEBUG%" == "Y" set OPTS=-O0 if "%DEBUG%" == "Y" set OUTDIR=.\GccDebug if "%DEBUG%" == "Y" set LNKOUT=./GccDebug if "%MAINT%" == "Y" set "OPTS=%OPTS% -DMAKE_MAINTAINER_MODE" :: Show the compiler version that we found echo. %COMPILER% --version if not ERRORLEVEL 1 goto Build echo No %COMPILER% found. exit 1 :Build :: Clean the directory if it exists if exist %OUTDIR%\nul rmdir /S /Q %OUTDIR% :: Recreate it mkdir %OUTDIR% mkdir %OUTDIR%\src mkdir %OUTDIR%\src\w32 mkdir %OUTDIR%\src\w32\compat mkdir %OUTDIR%\src\w32\subproc mkdir %OUTDIR%\lib if "%GUILE%" == "Y" call :ChkGuile echo. echo Compiling %OUTDIR% version if exist src\config.h.W32.template call :ConfigSCM copy src\config.h.W32 %OUTDIR%\src\config.h copy lib\glob.in.h %OUTDIR%\lib\glob.h copy lib\fnmatch.in.h %OUTDIR%\lib\fnmatch.h if exist %OUTDIR%\link.sc del %OUTDIR%\link.sc call :Compile src/ar call :Compile src/arscan call :Compile src/commands call :Compile src/default call :Compile src/dir call :Compile src/expand call :Compile src/file call :Compile src/function call :Compile src/getopt call :Compile src/getopt1 call :Compile src/guile GUILE call :Compile src/hash call :Compile src/implicit call :Compile src/job call :Compile src/load call :Compile src/loadapi call :Compile src/main GUILE call :Compile src/misc call :Compile src/output call :Compile src/read call :Compile src/remake call :Compile src/remote-stub call :Compile src/rule call :Compile src/signame call :Compile src/strcache call :Compile src/variable call :Compile src/version call :Compile src/vpath call :Compile src/w32/pathstuff call :Compile src/w32/w32os call :Compile src/w32/compat/posixfcn call :Compile src/w32/subproc/misc call :Compile src/w32/subproc/sub_proc call :Compile src/w32/subproc/w32err call :Compile lib/fnmatch call :Compile lib/glob call :Compile lib/getloadavg if not "%COMPILER%" == "gcc" call :Compile src\w32\compat\dirent call :Link echo. if exist %OUTDIR%\%MAKE%.exe goto Success echo %OUTDIR% build FAILED! exit 1 :Success echo %OUTDIR% build succeeded. if exist Basic.mk copy /Y Basic.mk Makefile if not exist tests\config-flags.pm copy /Y tests\config-flags.pm.W32 tests\config-flags.pm call :Reset goto :EOF :: :: Subroutines :: :Compile echo %LNKOUT%/%1.%O% >>%OUTDIR%\link.sc set EXTRAS= if "%2" == "GUILE" set "EXTRAS=%GUILECFLAGS%" if exist "%OUTDIR%\%1.%O%" del "%OUTDIR%\%1.%O%" if "%COMPILER%" == "gcc" goto GccCompile :: MSVC Compile echo on %COMPILER% /nologo /MT /W4 /EHsc %OPTS% /I %OUTDIR%/src /I src /I %OUTDIR%/lib /I lib /I src/w32/include /D WINDOWS32 /D WIN32 /D _CONSOLE /D HAVE_CONFIG_H /FR%OUTDIR% /Fp%OUTDIR%\%MAKE%.pch /Fo%OUTDIR%\%1.%O% /Fd%OUTDIR%\%MAKE%.pdb %EXTRAS% /c %1.c @echo off goto CompileDone :GccCompile :: GCC Compile echo on %COMPILER% -mthreads -Wall -std=gnu99 -gdwarf-2 -g3 %OPTS% -I%OUTDIR%/src -I./src -I%OUTDIR%/lib -I./lib -I./src/w32/include -DWINDOWS32 -DHAVE_CONFIG_H %EXTRAS% -o %OUTDIR%/%1.%O% -c %1.c @echo off :CompileDone if not exist "%OUTDIR%\%1.%O%" exit 1 goto :EOF :Link echo. echo Linking %LNKOUT%/%MAKE%.exe if "%COMPILER%" == "gcc" goto GccLink :: MSVC Link 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 echo on link.exe /NOLOGO /SUBSYSTEM:console /PDB:%LNKOUT%\%MAKE%.pdb %LINKOPTS% /OUT:%LNKOUT%\%MAKE%.exe @%LNKOUT%\link.sc @echo off goto :EOF :GccLink :: GCC Link echo on echo %GUILELIBS% -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -luuid -lodbc32 -lodbccp32 >>%OUTDIR%\link.sc %COMPILER% -mthreads -gdwarf-2 -g3 %OPTS% -o %LNKOUT%/%MAKE%.exe @%LNKOUT%/link.sc -Wl,--out-implib=%LNKOUT%/libgnumake-1.dll.a @echo off goto :EOF :ConfigSCM echo Generating config from SCM templates sed -n "s/^AC_INIT(\[GNU make\],\[\([^]]\+\)\].*/s,%%VERSION%%,\1,g/p" configure.ac > %OUTDIR%\src\config.h.W32.sed echo s,%%PACKAGE%%,make,g >> %OUTDIR%\src\config.h.W32.sed sed -f %OUTDIR%\src\config.h.W32.sed src\config.h.W32.template > src\config.h.W32 echo static const char *const GUILE_module_defn = ^" \ > src\gmk-default.h sed -e "s/;.*//" -e "/^[ \t]*$/d" -e "s/\"/\\\\\"/g" -e "s/$/ \\\/" src\gmk-default.scm >> src\gmk-default.h echo ^";>> src\gmk-default.h goto :EOF :ChkGuile :: Build with Guile is supported only on NT and later versions if not "%OS%" == "Windows_NT" goto NoGuile pkg-config --help > %OUTDIR%\guile.tmp 2> NUL if ERRORLEVEL 1 goto NoPkgCfg echo Checking for Guile 2.0 if not "%COMPILER%" == "gcc" set PKGMSC=--msvc-syntax pkg-config --cflags --short-errors "guile-2.0" > %OUTDIR%\guile.tmp if not ERRORLEVEL 1 set /P GUILECFLAGS= < %OUTDIR%\guile.tmp pkg-config --libs --static --short-errors %PKGMSC% "guile-2.0" > %OUTDIR%\guile.tmp if not ERRORLEVEL 1 set /P GUILELIBS= < %OUTDIR%\guile.tmp if not "%GUILECFLAGS%" == "" goto GuileDone echo Checking for Guile 1.8 pkg-config --cflags --short-errors "guile-1.8" > %OUTDIR%\guile.tmp if not ERRORLEVEL 1 set /P GUILECFLAGS= < %OUTDIR%\guile.tmp pkg-config --libs --static --short-errors %PKGMSC% "guile-1.8" > %OUTDIR%\guile.tmp if not ERRORLEVEL 1 set /P GUILELIBS= < %OUTDIR%\guile.tmp if not "%GUILECFLAGS%" == "" goto GuileDone echo - No Guile found, building without Guile goto GuileDone :NoPkgCfg echo - pkg-config not found, building without Guile :GuileDone if "%GUILECFLAGS%" == "" goto :EOF echo - Guile found: building with Guile set "GUILECFLAGS=%GUILECFLAGS% -DHAVE_GUILE" goto :EOF :FindVswhere set VSWHERE=vswhere %VSWHERE% -help >nul 2>&1 if not ERRORLEVEL 1 exit /b 0 set "VSWHERE=C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere" %VSWHERE% -help >nul 2>&1 if ERRORLEVEL 1 exit /b 1 goto :EOF :CheckMSVC if not exist "%VSVARS%" exit /b 1 call "%VSVARS%" %ARCH% if ERRORLEVEL 1 exit /b 1 %COMPILER% >nul 2>&1 if ERRORLEVEL 1 exit /b 1 goto :EOF :Usage echo Usage: %0 [options] [gcc] echo Options: echo. --without-guile Do not compile Guile support even if found echo. --debug Make a Debug build--default is Release echo. --x86 Make a 32bit binary--default is 64bit echo. --help Display these instructions and exit goto :EOF :Reset set ARCH= set COMPILER= set DEBUG= set GUILE= set GUILECFLAGS= set GUILELIBS= set LINKOPTS= set MAKE= set NOGUILE= set O= set OPTS= set OUTDIR= set LNKOUT= set PKGMSC= set VSVARS= goto :EOF make-4.3/SCOPTIONS0000644000175000017500000000031013603564437010527 00000000000000ERRORREXX OPTIMIZE NOVERSION OPTIMIZERTIME OPTIMIZERALIAS DEFINE HAVE_CONFIG_H DEFINE INCLUDEDIR="include:" DEFINE LIBDIR="lib:" DEFINE NO_ALLOCA DEFINE NO_ARCHIVES IGNORE=161 IGNORE=100 STARTUP=cres make-4.3/build-aux/0000755000175000017500000000000013611151241011163 500000000000000make-4.3/build-aux/install-sh0000755000175000017500000003643513533304251013126 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2018-03-11.20; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -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) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) 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. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 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 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dstbase=`basename "$src"` case $dst in */) dst=$dst$dstbase;; *) dst=$dst/$dstbase;; esac dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi case $dstdir in */) dstdirslash=$dstdir;; *) dstdirslash=$dstdir/;; esac obsolete_mkdir_used=false 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. ;; *) # Note that $RANDOM variable is not portable (e.g. dash); Use it # here however when possible just to lower collision chance. tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 # Because "mkdir -p" follows existing symlinks and we likely work # directly in world-writeable /tmp, make sure that the '$tmpdir' # directory is successfully created first before we actually test # 'mkdir -p' feature. 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" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift 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/ 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 fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=${dstdirslash}_inst.$$_ rmtmp=${dstdirslash}_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && { test -z "$stripcmd" || { # Create $dsttmp read-write so that cp doesn't create it read-only, # which would cause strip to fail. if test -z "$doit"; then : >"$dsttmp" # No need to fork-exec 'touch'. else $doit touch "$dsttmp" fi } } && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # 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` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # 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" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: make-4.3/build-aux/depcomp0000755000175000017500000005602013576212717012503 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2018-03-07.03; # UTC # Copyright (C) 1999-2019 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 # the Free Software Foundation; either version 2, 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, see . # 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. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: make-4.3/build-aux/texinfo.tex0000644000175000017500000134052213546442730013325 00000000000000% texinfo.tex -- TeX macros to handle Texinfo files. % % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % \def\texinfoversion{2019-09-24.13} % % Copyright 1985, 1986, 1988, 1990-2019 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 % published by the Free Software Foundation, either version 3 of the % License, or (at your option) any later version. % % This texinfo.tex file 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 . % % As a special exception, when this file is read by TeX when processing % a Texinfo source document, you may use the result without % restriction. This Exception is an additional permission under section 7 % of the GNU General Public License, version 3 ("GPLv3"). % % Please try the latest version of texinfo.tex before submitting bug % reports; you can get the latest version from: % https://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or % https://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or % https://www.gnu.org/software/texinfo/ (the Texinfo home page) % The texinfo.tex in any given distribution could well be out % of date, so if that's what you're using, please check. % % Send bug reports to bug-texinfo@gnu.org. Please include including a % complete document in each bug report with which we can reproduce the % problem. Patches are, of course, greatly appreciated. % % To process a Texinfo manual with TeX, it's most reliable to use the % texi2dvi shell script that comes with the distribution. For a simple % manual foo.texi, however, you can get away with this: % tex foo.texi % texindex foo.?? % tex foo.texi % tex foo.texi % dvips foo.dvi -o # or whatever; this makes foo.ps. % The extra TeX runs get the cross-reference information correct. % Sometimes one run after texindex suffices, and sometimes you need more % than two; texi2dvi does it as many times as necessary. % % It is possible to adapt texinfo.tex for other languages, to some % extent. You can get the existing language-specific files from the % full Texinfo distribution. % % The GNU Texinfo home page is https://www.gnu.org/software/texinfo. \message{Loading texinfo [version \texinfoversion]:} % If in a .fmt file, print the version number % and turn on active characters that we couldn't do earlier because % they might have appeared in the input file name. \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. % For @tex, we can use \tabalign. \let\+ = \relax % Save some plain tex macros whose names we will redefine. \let\ptexb=\b \let\ptexbullet=\bullet \let\ptexc=\c \let\ptexcomma=\, \let\ptexdot=\. \let\ptexdots=\dots \let\ptexend=\end \let\ptexequiv=\equiv \let\ptexexclam=\! \let\ptexfootnote=\footnote \let\ptexgtr=> \let\ptexhat=^ \let\ptexi=\i \let\ptexindent=\indent \let\ptexinsert=\insert \let\ptexlbrace=\{ \let\ptexless=< \let\ptexnewwrite\newwrite \let\ptexnoindent=\noindent \let\ptexplus=+ \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 % If this character appears in an error message or help string, it % starts a new line in the output. \newlinechar = `^^J % Use TeX 3.0's \inputlineno to get the line number, for better error % messages, but if we're using an old version of TeX, don't do anything. % \ifx\inputlineno\thisisundefined \let\linenumber = \empty % Pre-3.0. \else \def\linenumber{l.\the\inputlineno:\space} \fi % Set up fixed words for English if not already set. \ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi \ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi \ifx\putworderror\undefined \gdef\putworderror{error}\fi \ifx\putwordfile\undefined \gdef\putwordfile{file}\fi \ifx\putwordin\undefined \gdef\putwordin{in}\fi \ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi \ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi \ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi \ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi \ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi \ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi \ifx\putwordof\undefined \gdef\putwordof{of}\fi \ifx\putwordon\undefined \gdef\putwordon{on}\fi \ifx\putwordpage\undefined \gdef\putwordpage{page}\fi \ifx\putwordsection\undefined \gdef\putwordsection{section}\fi \ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi \ifx\putwordsee\undefined \gdef\putwordsee{see}\fi \ifx\putwordSee\undefined \gdef\putwordSee{See}\fi \ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi \ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi % \ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi \ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi \ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi \ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi \ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi \ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi \ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi \ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi \ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi \ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi \ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi \ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi % \ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi \ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi \ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi \ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi \ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi % Give the space character the catcode for a space. \def\spaceisspace{\catcode`\ =10\relax} % Likewise for ^^M, the end of line character. \def\endlineisspace{\catcode13=10\relax} \chardef\dashChar = `\- \chardef\slashChar = `\/ \chardef\underChar = `\_ % Ignore a token. % \def\gobble#1{} % The following is used inside several \edef's. \def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} % Hyphenation fixes. \hyphenation{ Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script ap-pen-dix bit-map bit-maps data-base data-bases eshell fall-ing half-way long-est man-u-script man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces spell-ing spell-ings stand-alone strong-est time-stamp time-stamps which-ever white-space wide-spread wrap-around } % 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 % some effort to order the tracing commands to reduce output in the log % file; cf. trace.sty in LaTeX. % \def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% \def\loggingall{% \tracingstats2 \tracingpages1 \tracinglostchars2 % 2 gives us more in etex \tracingparagraphs1 \tracingoutput1 \tracingmacros2 \tracingrestores1 \showboxbreadth\maxdimen \showboxdepth\maxdimen \ifx\eTeXversion\thisisundefined\else % etex gives us more logging \tracingscantokens1 \tracingifs1 \tracinggroups1 \tracingnesting2 \tracingassigns1 \fi \tracingcommands3 % 3 gives us more in etex \errorcontextlines16 }% % @errormsg{MSG}. Do the index-like expansions on MSG, but if things % aren't perfect, it's not the end of the world, being an error message, % after all. % \def\errormsg{\begingroup \indexnofonts \doerrormsg} \def\doerrormsg#1{\errmessage{#1}} % add check for \lastpenalty to plain's definitions. If the last thing % we did was a \nobreak, we don't want to insert more space. % \def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount \removelastskip\penalty-50\smallskip\fi\fi} \def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount \removelastskip\penalty-100\medskip\fi\fi} \def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount \removelastskip\penalty-200\bigskip\fi\fi} % 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 } \newdimen\outerhsize \newdimen\outervsize % set by the paper size routines \newdimen\topandbottommargin \topandbottommargin=.75in % Output a mark which sets \thischapter, \thissection and \thiscolor. % We dump everything together because we only have one kind of mark. % This works because we only use \botmark / \topmark, not \firstmark. % % A mark contains a subexpression of the \ifcase ... \fi construct. % \get*marks macros below extract the needed part using \ifcase. % % 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. % \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 \currentchapterdefs, % and \prevsectiondefs is the same as \currentsectiondefs. % 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{\currentchapterdefs}% \toks2=\expandafter{\currentsectiondefs}% \toks4=\expandafter{\prevchapterdefs}% \toks6=\expandafter{\prevsectiondefs}% \toks8=\expandafter{\currentcolordefs}% \mark{% \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., % @setcolor (or @url, or @link, etc.) between @contents and the very % first @chapter. \def\gettopheadingmarks{% \ifcase0\the\savedtopmark\fi \ifx\thischapter\empty \ifcase0\firstmark\fi \fi } \def\getbottomheadingmarks{\ifcase1\botmark\fi} \def\getcolormarks{\ifcase2\the\savedtopmark\fi} % Avoid "undefined control sequence" errors. \def\currentchapterdefs{} \def\currentsectiondefs{} \def\currentsection{} \def\prevchapterdefs{} \def\prevsectiondefs{} \def\currentcolordefs{} % 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 \newtoks\defaultoutput \defaultoutput = {\savetopmark\onepageout{\pagecontents\PAGE}} \output=\expandafter{\the\defaultoutput} \newbox\headlinebox \newbox\footlinebox % When outputting the double column layout for indices, an output routine % is run several times, which hides the original value of \topmark. This % can lead to a page heading being output and duplicating the chapter heading % of the index. Hence, save the contents of \topmark at the beginning of % the output routine. The saved contents are valid until we actually % \shipout a page. % % (We used to run a short output routine to actually set \topmark and % \firstmark to the right values, but if this was called with an empty page % containing whatsits for writing index entries, the whatsits would be thrown % away and the index auxiliary file would remain empty.) % \newtoks\savedtopmark \newif\iftopmarksaved \topmarksavedtrue \def\savetopmark{% \iftopmarksaved\else \global\savedtopmark=\expandafter{\topmark}% \global\topmarksavedtrue \fi } % \onepageout takes a vbox as an argument. % \shipout a vbox for a single page, adding an optional header, footer % and footnote. This also causes index entries for this page to be written % to the auxiliary files. % \def\onepageout#1{% \hoffset=\normaloffset % \ifodd\pageno \advance\hoffset by \bindingoffset \else \advance\hoffset by -\bindingoffset\fi % % 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\the\savedtopmark\fi \let\prevchaptername\thischaptername \ifcase0\firstmark\fi \let\curchaptername\thischaptername % \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \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 % % 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=\txipagewidth \texinfochars} % \global\setbox\headlinebox = \vbox{\commmonheadfootline \makeheadline}% % \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi \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. % \atdummies % don't expand commands in the output. \turnoffactive \shipout\vbox{% % Do this early so pdf references go to the beginning of the page. \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi % \unvbox\headlinebox \pagebody{#1}% \ifdim\ht\footlinebox > 0pt % Only leave this space if the footline is nonempty. % (We lessened \vsize for it in \oddfootingyyy.) % The \baselineskip=24pt in plain's \makefootline has no effect. \vskip 24pt \unvbox\footlinebox \fi % }% }% \global\topmarksavedfalse \advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi } \newinsert\margin \dimen\margin=\maxdimen % 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) \ifvoid\margin\else % marginal info is present \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi \dimen@=\dp#1\relax \unvbox#1\relax \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi \ifr@ggedbottom \kern-\dimen@ \vfil \fi} } % 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{% \def\argtorun{#2}% \begingroup \obeylines \spaceisspace #1% \parseargline\empty% Insert the \empty token, see \finishparsearg below. } {\obeylines % \gdef\parseargline#1^^M{% \endgroup % End of the group started in \parsearg. \argremovecomment #1\comment\ArgTerm% }% } % First remove any @comment, then any @c comment. 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} % Each occurrence of `\^^M' or `\^^M' is replaced by a single space. % % \argremovec might leave us with trailing space, e.g., % @end itemize @c foo % This space token undergoes the same procedure and is eventually removed % by \finishparsearg. % \def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} \def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} \def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% \def\temp{#3}% \ifx\temp\empty % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp: \let\temp\finishparsearg \else \let\temp\argcheckspaces \fi % Put the space token in: \temp#1 #3\ArgTerm } % If a _delimited_ argument is enclosed in braces, they get stripped; so % to get _exactly_ the rest of the line, we had to prevent such situation. % We prepended an \empty token at the very beginning and we expand it now, % just before passing the control to \argtorun. % (Similarly, we have to think about #3 of \argcheckspacesY above: it is % either the null string, or it ends with \^^M---thus there is no danger % that a pair of braces would be stripped. % % But first, we have to remove the trailing space token. % \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{...} \def\parseargdef#1{% \expandafter \doparseargdef \csname\string#1\endcsname #1% } \def\doparseargdef#1#2{% \def#2{\parsearg#1}% \def#1##1% } % Several utility definitions with active space: { \obeyspaces \gdef\obeyedspace{ } % Make each space character in the input produce a normal interword % space in the output. Don't allow a line break at this space, as this % is used only in environments like @example, where each line of input % should produce a line of output anyway. % \gdef\sepspaces{\obeyspaces\let =\tie} % If an index command is used in an @example environment, any spaces % therein should become regular spaces in the raw index file, not the % expansion of \tie (\leavevmode \penalty \@M \ ). \gdef\unsepspaces{\let =\space} } \def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} % Define the framework for environments in texinfo.tex. It's used like this: % % \envdef\foo{...} % \def\Efoo{...} % % It's the responsibility of \envdef to insert \begingroup before the % actual body; @end closes the group after calling \Efoo. \envdef also % defines \thisenv, so the current environment is known; @end checks % whether the environment name matches. The \checkenv macro can also be % used to check whether the current environment is the one expected. % % Non-false conditionals (@iftex, @ifset) don't fit into this, so they % are not treated as environments; they don't open a group. (The % implementation of @end takes care not to call \endgroup in this % special case.) % At run-time, environments start with this: \def\startenvironment#1{\begingroup\def\thisenv{#1}} % initialize \let\thisenv\empty % ... but they get defined via ``\envdef\foo{...}'': \long\def\envdef#1#2{\def#1{\startenvironment#1#2}} \def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} % Check whether we're in the right environment: \def\checkenv#1{% \def\temp{#1}% \ifx\thisenv\temp \else \badenverr \fi } % Environment mismatch, #1 expected: \def\badenverr{% \errhelp = \EMsimple \errmessage{This command can appear only \inenvironment\temp, not \inenvironment\thisenv}% } \def\inenvironment#1{% \ifx#1\empty outside of any environment% \else in environment \expandafter\string#1% \fi } % @end foo executes the definition of \Efoo. % But first, it executes a specialized version of \checkenv % \parseargdef\end{% \if 1\csname iscond.#1\endcsname \else % The general wording of \badenverr may not be ideal. \expandafter\checkenv\csname#1\endcsname \csname E#1\endcsname \endgroup \fi } \newhelp\EMsimple{Press RETURN to continue.} % Be sure we're in horizontal mode when doing a tie, since we make space % equivalent to this in @example-like environments. Otherwise, a space % at the beginning of a line will start with \penalty -- and % since \penalty is valid in vertical mode, we'd end up putting the % penalty on the vertical list instead of in the new paragraph. {\catcode`@ = 11 % Avoid using \@M directly, because that causes trouble % if the definition is written into an index file. \global\let\tiepenalty = \@M \gdef\tie{\leavevmode\penalty\tiepenalty\ } } % @: forces normal size whitespace following. \def\:{\spacefactor=1000 } % @* forces a line break. \def\*{\unskip\hfil\break\hbox{}\ignorespaces} % @/ allows a line break. \let\/=\allowbreak % @. is an end-of-sentence period. \def\.{.\spacefactor=\endofsentencespacefactor\space} % @! is an end-of-sentence bang. \def\!{!\spacefactor=\endofsentencespacefactor\space} % @? is an end-of-sentence query. \def\?{?\spacefactor=\endofsentencespacefactor\space} % @frenchspacing on|off says whether to put extra space after punctuation. % \def\onword{on} \def\offword{off} % \parseargdef\frenchspacing{% \def\temp{#1}% \ifx\temp\onword \plainfrenchspacing \else\ifx\temp\offword \plainnonfrenchspacing \else \errhelp = \EMsimple \errmessage{Unknown @frenchspacing option `\temp', must be on|off}% \fi\fi } % @w prevents a word break. Without the \leavevmode, @w at the % beginning of a paragraph, when TeX is still in vertical mode, would % produce a whole line of output instead of starting the paragraph. \def\w#1{\leavevmode\hbox{#1}} % @group ... @end group forces ... to be all on one page, by enclosing % it in a TeX vbox. We use \vtop instead of \vbox to construct the box % to keep its height that of a normal line. According to the rules for % \topskip (p.114 of the TeXbook), the glue inserted is % max (\topskip - \ht (first item), 0). If that height is large, % therefore, no glue is inserted, and the space between the headline and % the text is small, which looks bad. % % Another complication is that the group might be very large. This can % cause the glue on the previous page to be unduly stretched, because it % does not have much material. In this case, it's better to add an % explicit \vfill so that the extra space is at the bottom. The % threshold for doing this is if the group is more than \vfilllimit % percent of a page (\vfilllimit can be changed inside of @tex). % \newbox\groupbox \def\vfilllimit{0.7} % \envdef\group{% \ifnum\catcode`\^^M=\active \else \errhelp = \groupinvalidhelp \errmessage{@group invalid in context where filling is enabled}% \fi \startsavinginserts % \setbox\groupbox = \vtop\bgroup % Do @comment since we are called inside an environment such as % @example, where each end-of-line in the input causes an % end-of-line in the output. We don't want the end-of-line after % the `@group' to put extra space in the output. Since @group % should appear on a line by itself (according to the Texinfo % manual), we don't worry about eating any user text. \comment } % % The \vtop produces a box with normal height and large depth; thus, TeX puts % \baselineskip glue before it, and (when the next line of text is done) % \lineskip glue after it. Thus, space below is not quite equal to space % above. But it's pretty close. \def\Egroup{% % To get correct interline space between the last line of the group % and the first line afterwards, we have to propagate \prevdepth. \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 = \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\txipageheight \page \fi \fi \box\groupbox } % % TeX puts in an \escapechar (i.e., `@') at the beginning of the help % message, so this ends up printing `@group can only ...'. % \newhelp\groupinvalidhelp{% group can only be used in environments such as @example,^^J% where each line of input produces a line of output.} % @need space-in-mils % forces a page break if there is not space-in-mils remaining. \newdimen\mil \mil=0.001in \parseargdef\need{% % Ensure vertical mode, so we don't make a big box in the middle of a % paragraph. \par % % If the @need value is less than one line space, it's useless. \dimen0 = #1\mil \dimen2 = \ht\strutbox \advance\dimen2 by \dp\strutbox \ifdim\dimen0 > \dimen2 % % Do a \strut just to make the height of this box be normal, so the % normal leading is inserted relative to the preceding line. % And a page break here is fine. \vtop to #1\mil{\strut\vfil}% % % TeX does not even consider page breaks if a penalty added to the % main vertical list is 10000 or more. But in order to see if the % empty box we just added fits on the page, we must make it consider % page breaks. On the other hand, we don't want to actually break the % page after the empty box. So we use a penalty of 9999. % % There is an extremely small chance that TeX will actually break the % page at this \penalty, if there are no other feasible breakpoints in % sight. (If the user is using lots of big @group commands, which % almost-but-not-quite fill up a page, TeX will have a hard time doing % good page breaking, for example.) However, I could not construct an % example where a page broke at this \penalty; if it happens in a real % document, then we can reconsider our strategy. \penalty9999 % % Back up by the size of the box, whether we did a page break or not. \kern -#1\mil % % Do not allow a page break right after this kern. \nobreak \fi } % @br forces paragraph break (and is undocumented). \let\br = \par % @page forces the start of a new page. % \def\page{\par\vfill\supereject} % @exdent text.... % outputs text on separate line in roman font, starting at standard page margin % This records the amount of indent in the innermost environment. % That's how much \exdent should take out. \newskip\exdentamount % This defn is used inside fill environments such as @defun. \parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} % This defn is used inside nofill environments such as @example. \parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount \leftline{\hskip\leftskip{\rm#1}}}} % @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current % paragraph. For more general purposes, use the \margin insertion % class. WHICH is `l' or `r'. Not documented, written for gawk manual. % \newskip\inmarginspacing \inmarginspacing=1cm \def\strutdepth{\dp\strutbox} % \def\doinmargin#1#2{\strut\vadjust{% \nobreak \kern-\strutdepth \vtop to \strutdepth{% \baselineskip=\strutdepth \vss % if you have multiple lines of stuff to put here, you'll need to % make the vbox yourself of the appropriate size. \ifx#1l% \llap{\ignorespaces #2\hskip\inmarginspacing}% \else \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% \fi \null }% }} \def\inleftmargin{\doinmargin l} \def\inrightmargin{\doinmargin r} % % @inmargin{TEXT [, RIGHT-TEXT]} % (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; % else use TEXT for both). % \def\inmargin#1{\parseinmargin #1,,\finish} \def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \def\lefttext{#1}% have both texts \def\righttext{#2}% \else \def\lefttext{#1}% have only one text \def\righttext{#1}% \fi % \ifodd\pageno \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin \else \def\temp{\inleftmargin\lefttext}% \fi \temp } % @include FILE -- \input text of FILE. % \def\include{\parseargusing\filenamecatcodes\includezzz} \def\includezzz#1{% \pushthisfilestack \def\thisfile{#1}% {% \makevalueexpandable % we want to expand any @value in FILE. \turnoffactive % and allow special characters in the expansion \indexnofonts % Allow `@@' and other weird things in file names. \wlog{texinfo.tex: doing @include of #1^^J}% \edef\temp{\noexpand\input #1 }% % % This trickery is to read FILE outside of a group, in case it makes % definitions, etc. \expandafter }\temp \popthisfilestack } \def\filenamecatcodes{% \catcode`\\=\other \catcode`~=\other \catcode`^=\other \catcode`_=\other \catcode`|=\other \catcode`<=\other \catcode`>=\other \catcode`+=\other \catcode`-=\other \catcode`\`=\other \catcode`\'=\other } \def\pushthisfilestack{% \expandafter\pushthisfilestackX\popthisfilestack\StackTerm } \def\pushthisfilestackX{% \expandafter\pushthisfilestackY\thisfile\StackTerm } \def\pushthisfilestackY #1\StackTerm #2\StackTerm {% \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% } \def\popthisfilestack{\errthisfilestackempty} \def\errthisfilestackempty{\errmessage{Internal error: the stack of filenames is empty.}} % \def\thisfile{} % @center line % outputs that line, centered. % \parseargdef\center{% \ifhmode \let\centersub\centerH \else \let\centersub\centerV \fi \centersub{\hfil \ignorespaces#1\unskip \hfil}% \let\centersub\relax % don't let the definition persist, just in case } \def\centerH#1{{% \hfil\break \advance\hsize by -\leftskip \advance\hsize by -\rightskip \line{#1}% \break }} % \newcount\centerpenalty \def\centerV#1{% % The idea here is the same as in \startdefun, \cartouche, etc.: if % @center is the first thing after a section heading, we need to wipe % out the negative parskip inserted by \sectionheading, but still % prevent a page break here. \centerpenalty = \lastpenalty \ifnum\centerpenalty>10000 \vskip\parskip \fi \ifnum\centerpenalty>9999 \penalty\centerpenalty \fi \line{\kern\leftskip #1\kern\rightskip}% } % @sp n outputs n lines of vertical space % \parseargdef\sp{\vskip #1\baselineskip} % @comment ...line which is ignored... % @c is the same as @comment % @ignore ... @end ignore is another way to write a comment \def\c{\begingroup \catcode`\^^M=\active% \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% \cxxx} {\catcode`\^^M=\active \gdef\cxxx#1^^M{\endgroup}} % \let\comment\c % @paragraphindent NCHARS % We'll use ems for NCHARS, close enough. % NCHARS can also be the word `asis' or `none'. % We cannot feasibly implement @paragraphindent asis, though. % \def\asisword{asis} % no translation, these are keywords \def\noneword{none} % \parseargdef\paragraphindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \defaultparindent = 0pt \else \defaultparindent = #1em \fi \fi \parindent = \defaultparindent } % @exampleindent NCHARS % We'll use ems for NCHARS like @paragraphindent. % It seems @exampleindent asis isn't necessary, but % I preserve it to make it similar to @paragraphindent. \parseargdef\exampleindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \lispnarrowing = 0pt \else \lispnarrowing = #1em \fi \fi } % @firstparagraphindent WORD % If WORD is `none', then suppress indentation of the first paragraph % after a section heading. If WORD is `insert', then do indent at such % paragraphs. % % The paragraph indentation is suppressed or not by calling % \suppressfirstparagraphindent, which the sectioning commands do. % We switch the definition of this back and forth according to WORD. % By default, we suppress indentation. % \def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} \def\insertword{insert} % \parseargdef\firstparagraphindent{% \def\temp{#1}% \ifx\temp\noneword \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent \else\ifx\temp\insertword \let\suppressfirstparagraphindent = \relax \else \errhelp = \EMsimple \errmessage{Unknown @firstparagraphindent option `\temp'}% \fi\fi } % Here is how we actually suppress indentation. Redefine \everypar to % \kern backwards by \parindent, and then reset itself to empty. % % We also make \indent itself not actually do anything until the next % paragraph. % \gdef\dosuppressfirstparagraphindent{% \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 = {}% } % @refill is a no-op. \let\refill=\relax % @setfilename INFO-FILENAME - ignored \let\setfilename=\comment % @bye. \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} \message{pdf,} % adobe `portable' document format \newcount\tempnum \newcount\lnkcount \newtoks\filename \newcount\filenamelength \newcount\pgn \newtoks\toksA \newtoks\toksB \newtoks\toksC \newtoks\toksD \newbox\boxA \newbox\boxB \newcount\countA \newif\ifpdf \newif\ifpdfmakepagedest % % For LuaTeX % \newif\iftxiuseunicodedestname \txiuseunicodedestnamefalse % For pdfTeX etc. \ifx\luatexversion\thisisundefined \else % Use Unicode destination names \txiuseunicodedestnametrue % Escape PDF strings with converting UTF-16 from UTF-8 \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', math.floor(c / 256), math.floor(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', math.floor(c_hi / 256), math.floor(c_hi % 256), math.floor(c_lo / 256), math.floor(c_lo % 256))) end end end } \endgroup \def\pdfescapestrutfsixteen#1{\directlua{UTF16oct('\luaescapestring{#1}')}} % Escape PDF strings without converting \begingroup \directlua{ function PDFescstr(str) for c in string.bytes(str) do if c <= 0x20 or c >= 0x80 or c == 0x28 or c == 0x29 or c == 0x5c then tex.sprint(-2, string.format(string.char(0x5c) .. string.char(0x25) .. '03o', c)) else tex.sprint(-2, string.char(c)) end end end } % The -2 in the arguments here gives all the input to TeX catcode 12 % (other) or 10 (space), preventing undefined control sequence errors. See % https://lists.gnu.org/archive/html/bug-texinfo/2019-08/msg00031.html % \endgroup \def\pdfescapestring#1{\directlua{PDFescstr('\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 \else \ifx\pdfoutput\relax \else \ifcase\pdfoutput \else \pdftrue \fi \fi \fi \newif\ifpdforxetex \pdforxetexfalse \ifpdf \pdforxetextrue \fi \ifx\XeTeXrevision\thisisundefined\else \pdforxetextrue \fi % PDF uses PostScript string constants for the names of xref targets, % for display in the outlines, and in other places. Thus, we have to % double any backslashes. Otherwise, a name like "\node" will be % interpreted as a newline (\n), followed by o, d, e. Not good. % % See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and % related messages. The final outcome is that it is up to the TeX user % to double the backslashes and otherwise make the string valid, so % that's what we do. pdftex 1.30.0 (ca.2005) introduced a primitive to % do this reliably, so we use it. % #1 is a control sequence in which to do the replacements, % which we \xdef. \def\txiescapepdf#1{% \ifx\pdfescapestring\thisisundefined % No primitive available; should we give a warning or log? % Many times it won't matter. \xdef#1{#1}% \else % The expandable \pdfescapestring primitive escapes parentheses, % backslashes, and other special chars. \xdef#1{\pdfescapestring{#1}}% \fi } \def\txiescapepdfutfsixteen#1{% \ifx\pdfescapestrutfsixteen\thisisundefined % No UTF-16 converting macro available. \txiescapepdf{#1}% \else \xdef#1{\pdfescapestrutfsixteen{#1}}% \fi } \newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images with PDF output, and none of those formats could be found. (.eps cannot be supported due to the design of the PDF format; use regular TeX (DVI output) for that.)} \ifpdf % % Color manipulation macros using ideas from pdfcolor.tex, % except using rgb instead of cmyk; the latter is said to render as a % very dark gray on-screen and a very dark halftone in print, instead % of actual black. The dark red here is dark enough to print on paper as % nearly black, but still distinguishable for online viewing. We use % black by default, though. \def\rgbDarkRed{0.50 0.09 0.12} \def\rgbBlack{0 0 0} % % 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, % so that \makeheadline knows which color to restore. \def\setcolor#1{% \xdef\currentcolordefs{\gdef\noexpand\thiscolor{#1}}% \domark \pdfsetcolor{#1}% } % \def\maincolor{\rgbBlack} \pdfsetcolor{\maincolor} \edef\thiscolor{\maincolor} \def\currentcolordefs{} % \def\makefootline{% \baselineskip24pt \line{\pdfsetcolor{\maincolor}\the\footline}% } % \def\makeheadline{% \vbox to 0pt{% \vskip-22.5pt \line{% \vbox to8.5pt{}% % Extract \thiscolor definition from the marks. \getcolormarks % Typeset the headline with \maincolor, then restore the color. \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}% }% \vss }% \nointerlineskip } % % \pdfcatalog{/PageMode /UseOutlines} % % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). \def\dopdfimage#1#2#3{% \def\pdfimagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% \def\pdfimageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% % % pdftex (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\pdfimgext=\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 \errhelp = \nopdfimagehelp \errmessage{Could not find image file #1 for pdf}% \else \gdef\pdfimgext{JPG}% \fi \else \gdef\pdfimgext{jpeg}% \fi \else \gdef\pdfimgext{jpg}% \fi \else \gdef\pdfimgext{png}% \fi \else \gdef\pdfimgext{PDF}% \fi \else \gdef\pdfimgext{pdf}% \fi \closein 1 \endgroup % % without \immediate, ancient pdftex seg faults when the same image is % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) \ifnum\pdftexversion < 14 \immediate\pdfimage \else \immediate\pdfximage \fi \ifdim \wd0 >0pt width \pdfimagewidth \fi \ifdim \wd2 >0pt height \pdfimageheight \fi \ifnum\pdftexversion<13 #1.\pdfimgext \else {#1.\pdfimgext}% \fi \ifnum\pdftexversion < 14 \else \pdfrefximage \pdflastximage \fi} % \def\setpdfdestname#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 \makevalueexpandable \turnoffactive \iftxiuseunicodedestname \ifx \declaredencoding \latone % Pass through Latin-1 characters. % LuaTeX with byte wise I/O converts Latin-1 characters to Unicode. \else \ifx \declaredencoding \utfeight % Pass through Unicode characters. \else % Use ASCII approximations in destination names. \passthroughcharsfalse \fi \fi \else % Use ASCII approximations in destination names. \passthroughcharsfalse \fi \def\pdfdestname{#1}% \txiescapepdf\pdfdestname }} % \def\setpdfoutlinetext#1{{% \indexnofonts \makevalueexpandable \turnoffactive \ifx \declaredencoding \latone % The PDF format can use an extended form of Latin-1 in bookmark % strings. See Appendix D of the PDF Reference, Sixth Edition, for % the "PDFDocEncoding". \passthroughcharstrue % Pass through Latin-1 characters. % LuaTeX: Convert to Unicode % pdfTeX: Use Latin-1 as PDFDocEncoding \def\pdfoutlinetext{#1}% \else \ifx \declaredencoding \utfeight \ifx\luatexversion\thisisundefined % For pdfTeX with UTF-8. % TODO: the PDF format can use UTF-16 in bookmark strings, % but the code for this isn't done yet. % Use ASCII approximations. \passthroughcharsfalse \def\pdfoutlinetext{#1}% \else % For LuaTeX with UTF-8. % Pass through Unicode characters for title texts. \passthroughcharstrue \def\pdfoutlinetext{#1}% \fi \else % For non-Latin-1 or non-UTF-8 encodings. % Use ASCII approximations. \passthroughcharsfalse \def\pdfoutlinetext{#1}% \fi \fi % LuaTeX: Convert to UTF-16 % pdfTeX: Use Latin-1 as PDFDocEncoding \txiescapepdfutfsixteen\pdfoutlinetext }} % \def\pdfmkdest#1{% \setpdfdestname{#1}% \safewhatsit{\pdfdest name{\pdfdestname} xyz}% } % % used to mark target names; must be expandable. \def\pdfmkpgn#1{#1} % % by default, use black for everything. \def\urlcolor{\rgbBlack} \def\linkcolor{\rgbBlack} \def\endlink{\setcolor{\maincolor}\pdfendlink} % % Adding outlines to PDF; macros for calculating structure of outlines % come from Petr Olsak \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% \else \csname#1\endcsname \fi} \def\advancenumber#1{\tempnum=\expnumber{#1}\relax \advance\tempnum by 1 \expandafter\xdef\csname#1\endcsname{\the\tempnum}} % % #1 is the section text, which is what will be displayed in the % outline by the pdf viewer. #2 is the pdf expression for the number % of subentries (or empty, for subsubsections). #3 is the node text, % which might be empty if this toc entry had no corresponding node. % #4 is the page number % \def\dopdfoutline#1#2#3#4{% % Generate a link to the node text if that exists; else, use the % 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. \setpdfoutlinetext{#1} \setpdfdestname{#3} \ifx\pdfdestname\empty \def\pdfdestname{#4}% \fi % \pdfoutline goto name{\pdfmkpgn{\pdfdestname}}#2{\pdfoutlinetext}% } % \def\pdfmakeoutlines{% \begingroup % Read toc silently, to get counts of subentries for \pdfoutline. \def\partentry##1##2##3##4{}% ignore parts in the outlines \def\numchapentry##1##2##3##4{% \def\thischapnum{##2}% \def\thissecnum{0}% \def\thissubsecnum{0}% }% \def\numsecentry##1##2##3##4{% \advancenumber{chap\thischapnum}% \def\thissecnum{##2}% \def\thissubsecnum{0}% }% \def\numsubsecentry##1##2##3##4{% \advancenumber{sec\thissecnum}% \def\thissubsecnum{##2}% }% \def\numsubsubsecentry##1##2##3##4{% \advancenumber{subsec\thissubsecnum}% }% \def\thischapnum{0}% \def\thissecnum{0}% \def\thissubsecnum{0}% % % use \def rather than \let here because we redefine \chapentry et % al. a second time, below. \def\appentry{\numchapentry}% \def\appsecentry{\numsecentry}% \def\appsubsecentry{\numsubsecentry}% \def\appsubsubsecentry{\numsubsubsecentry}% \def\unnchapentry{\numchapentry}% \def\unnsecentry{\numsecentry}% \def\unnsubsecentry{\numsubsecentry}% \def\unnsubsubsecentry{\numsubsubsecentry}% \readdatafile{toc}% % % Read toc second time, this time actually producing the outlines. % The `-' means take the \expnumber as the absolute number of % subentries, which we calculated on our first read of the .toc above. % % We use the node names as the destinations. \def\numchapentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% \def\numsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% \def\numsubsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% \def\numsubsubsecentry##1##2##3##4{% count is always zero \dopdfoutline{##1}{}{##3}{##4}}% % % PDF outlines are displayed using system fonts, instead of % document fonts. Therefore we cannot use special characters, % since the encoding is unknown. For example, the eogonek from % Latin 2 (0xea) gets translated to a | character. Info from % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. % % TODO this right, we have to translate 8-bit characters to % their "best" equivalent, based on the @documentencoding. Too % much work for too little return. Just use the ASCII equivalents % we use for the index sort strings. % \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[}]% ] % \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 } \ifnum\pdftexversion < 14 \let \startlink \pdfannotlink \else \let \startlink \pdfstartlink \fi % 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}% \startlink attr{/Border [0 0 0]}% user{/Subtype /Link /A << /S /URI /URI (#1) >>}% \endgroup} % \pdfgettoks - Surround page numbers in #1 with @pdflink. #1 may % be a simple number, or a list of numbers in the case of an index % entry. \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{% \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} \setcolor{\linkcolor}#1\endlink} \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} \else % non-pdf mode \let\pdfmkdest = \gobble \let\pdfurl = \gobble \let\endlink = \relax \let\setcolor = \gobble \let\pdfsetcolor = \gobble \let\pdfmakeoutlines = \relax \fi % \ifx\pdfoutput % % For XeTeX % \ifx\XeTeXrevision\thisisundefined \else % % XeTeX version check % \ifnum\strcmp{\the\XeTeXversion\XeTeXrevision}{0.99996}>-1 % TeX Live 2016 contains XeTeX 0.99996 and xdvipdfmx 20160307. % It can use the `dvipdfmx:config' special (from TeX Live SVN r40941). % For avoiding PDF destination name replacement, we use this special % instead of xdvipdfmx's command line option `-C 0x0010'. \special{dvipdfmx:config C 0x0010} % XeTeX 0.99995+ comes with xdvipdfmx 20160307+. % It can handle Unicode destination names for PDF. \txiuseunicodedestnametrue \else % XeTeX < 0.99996 (TeX Live < 2016) cannot use the % `dvipdfmx:config' special. % So for avoiding PDF destination name replacement, % xdvipdfmx's command line option `-C 0x0010' is necessary. % % XeTeX < 0.99995 can not handle Unicode destination names for PDF % because xdvipdfmx 20150315 has a UTF-16 conversion issue. % It is fixed by xdvipdfmx 20160106 (TeX Live SVN r39753). \txiuseunicodedestnamefalse \fi % % Color support % \def\rgbDarkRed{0.50 0.09 0.12} \def\rgbBlack{0 0 0} % \def\pdfsetcolor#1{\special{pdf:scolor [#1]}} % % Set color, and create a mark which defines \thiscolor accordingly, % so that \makeheadline knows which color to restore. \def\setcolor#1{% \xdef\currentcolordefs{\gdef\noexpand\thiscolor{#1}}% \domark \pdfsetcolor{#1}% } % \def\maincolor{\rgbBlack} \pdfsetcolor{\maincolor} \edef\thiscolor{\maincolor} \def\currentcolordefs{} % \def\makefootline{% \baselineskip24pt \line{\pdfsetcolor{\maincolor}\the\footline}% } % \def\makeheadline{% \vbox to 0pt{% \vskip-22.5pt \line{% \vbox to8.5pt{}% % Extract \thiscolor definition from the marks. \getcolormarks % Typeset the headline with \maincolor, then restore the color. \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}% }% \vss }% \nointerlineskip } % % PDF outline support % % Emulate pdfTeX primitive \def\pdfdest name#1 xyz{% \special{pdf:dest (#1) [@thispage /XYZ @xpos @ypos null]}% } % \def\setpdfdestname#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 \makevalueexpandable \turnoffactive \iftxiuseunicodedestname % Pass through Unicode characters. \else % Use ASCII approximations in destination names. \passthroughcharsfalse \fi \def\pdfdestname{#1}% \txiescapepdf\pdfdestname }} % \def\setpdfoutlinetext#1{{% \turnoffactive % Always use Unicode characters in title texts. \def\pdfoutlinetext{#1}% % For XeTeX, xdvipdfmx converts to UTF-16. % So we do not convert. \txiescapepdf\pdfoutlinetext }} % \def\pdfmkdest#1{% \setpdfdestname{#1}% \safewhatsit{\pdfdest name{\pdfdestname} xyz}% } % % by default, use black for everything. \def\urlcolor{\rgbBlack} \def\linkcolor{\rgbBlack} \def\endlink{\setcolor{\maincolor}\pdfendlink} % \def\dopdfoutline#1#2#3#4{% \setpdfoutlinetext{#1} \setpdfdestname{#3} \ifx\pdfdestname\empty \def\pdfdestname{#4}% \fi % \special{pdf:out [-] #2 << /Title (\pdfoutlinetext) /A << /S /GoTo /D (\pdfdestname) >> >> }% } % \def\pdfmakeoutlines{% \begingroup % % For XeTeX, counts of subentries are not necessary. % Therefore, we read toc only once. % % We use node names as 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% % % For 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 a UTF-16 conversion issue of xdvipdfmx 20150315, % ``\special{pdf:dest ...}'' cannot handle non-ASCII strings. % It is 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 (#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) supports .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,} % Set the baselineskip to #1, and the lineskip and strut size % correspondingly. There is no deep meaning behind these magic numbers % used as factors; they just match (closely enough) what Knuth defined. % \def\lineskipfactor{.08333} \def\strutheightpercent{.70833} \def\strutdepthpercent {.29167} % % can get a sort of poor man's double spacing by redefining this. \def\baselinefactor{1} % \newdimen\textleading \def\setleading#1{% \dimen0 = #1\relax \normalbaselineskip = \baselinefactor\dimen0 \normallineskip = \lineskipfactor\normalbaselineskip \normalbaselines \setbox\strutbox =\hbox{% \vrule width0pt height\strutheightpercent\baselineskip depth \strutdepthpercent \baselineskip }% } % PDF CMaps. See also LaTeX's t1.cmap. % % do nothing with this by default. \expandafter\let\csname cmapOT1\endcsname\gobble \expandafter\let\csname cmapOT1IT\endcsname\gobble \expandafter\let\csname cmapOT1TT\endcsname\gobble % if we are producing pdf, and we have \pdffontattr, then define cmaps. % (\pdffontattr was introduced many years ago, but people still run % older pdftex's; it's easy to conditionalize, so we do.) \ifpdf \ifx\pdffontattr\thisisundefined \else \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1-0) %%Title: (TeX-OT1-0 TeX OT1 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1) /Supplement 0 >> def /CMapName /TeX-OT1-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <23> <26> <0023> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 40 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1IT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1IT-0) %%Title: (TeX-OT1IT-0 TeX OT1IT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1IT) /Supplement 0 >> def /CMapName /TeX-OT1IT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <25> <26> <0025> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 42 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <23> <0023> <24> <00A3> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1IT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1TT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1TT-0) %%Title: (TeX-OT1TT-0 TeX OT1TT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1TT) /Supplement 0 >> def /CMapName /TeX-OT1TT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 5 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <21> <26> <0021> <28> <5F> <0028> <61> <7E> <0061> endbfrange 32 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <2191> <0C> <2193> <0D> <0027> <0E> <00A1> <0F> <00BF> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <20> <2423> <27> <2019> <60> <2018> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1TT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% \fi\fi % Set the font macro #1 to the font named \fontprefix#2. % #3 is the font's design size, #4 is a scale factor, #5 is the CMap % encoding (only OT1, OT1IT and OT1TT are allowed, or empty to omit). % Example: % #1 = \textrm % #2 = \rmshape % #3 = 10 % #4 = \mainmagstep % #5 = OT1 % \def\setfont#1#2#3#4#5{% \font#1=\fontprefix#2#3 scaled #4 \csname cmap#5\endcsname#1% } % This is what gets called when #5 of \setfont is empty. \let\cmap\gobble % % (end of cmaps) % Use cm as the default font prefix. % To specify the font prefix, you must define \fontprefix % before you read in texinfo.tex. \ifx\fontprefix\thisisundefined \def\fontprefix{cm} \fi % Support font families that don't use the same naming scheme as CM. \def\rmshape{r} \def\rmbshape{bx} % where the normal face is bold \def\bfshape{b} \def\bxshape{bx} \def\ttshape{tt} \def\ttbshape{tt} \def\ttslshape{sltt} \def\itshape{ti} \def\itbshape{bxti} \def\slshape{sl} \def\slbshape{bxsl} \def\sfshape{ss} \def\sfbshape{ss} \def\scshape{csc} \def\scbshape{csc} % Definitions for a main text size of 11pt. (The default in Texinfo.) % \def\definetextfontsizexi{% % Text fonts (11.2pt, magstep1). \def\textnominalsize{11pt} \edef\mainmagstep{\magstephalf} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1095} % 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}{OT1} \setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT} \def\df{\let\ttfont=\deftt \let\bffont = \defbf \let\ttslfont=\defttsl \let\slfont=\defsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for math mode superscripts (7pt). \def\sevennominalsize{7pt} \setfont\sevenrm\rmshape{7}{1000}{OT1} \setfont\seventt\ttshape{10}{700}{OT1TT} \setfont\sevenbf\bfshape{10}{700}{OT1} \setfont\sevenit\itshape{7}{1000}{OT1IT} \setfont\sevensl\slshape{10}{700}{OT1} \setfont\sevensf\sfshape{10}{700}{OT1} \setfont\sevensc\scshape{10}{700}{OT1} \setfont\seventtsl\ttslshape{10}{700}{OT1TT} \font\seveni=cmmi7 \font\sevensy=cmsy7 \def\sevenecsize{0700} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter (and unnumbered) fonts (17.28pt). \def\chapnominalsize{17pt} \setfont\chaprm\rmbshape{12}{\magstep2}{OT1} \setfont\chapit\itbshape{10}{\magstep3}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep3}{OT1} \setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT} \setfont\chapsf\sfbshape{17}{1000}{OT1} \let\chapbf=\chaprm \setfont\chapsc\scbshape{10}{\magstep3}{OT1} \font\chapi=cmmi12 scaled \magstep2 \font\chapsy=cmsy10 scaled \magstep3 \def\chapecsize{1728} % 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} \setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\secsf\sfbshape{12}{\magstep1}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep2}{OT1} \font\seci=cmmi12 scaled \magstep1 \font\secsy=cmsy10 scaled \magstep2 \def\sececsize{1440} % Subsection fonts (13.15pt). \def\ssecnominalsize{13pt} \setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1} \setfont\ssecit\itbshape{10}{1315}{OT1IT} \setfont\ssecsl\slbshape{10}{1315}{OT1} \setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1315}{OT1TT} \setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1315}{OT1} \font\sseci=cmmi12 scaled \magstephalf \font\ssecsy=cmsy10 scaled 1315 \def\ssececsize{1200} % Reduced fonts for @acronym in text (10pt). \def\reducednominalsize{10pt} \setfont\reducedrm\rmshape{10}{1000}{OT1} \setfont\reducedtt\ttshape{10}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{1000}{OT1} \setfont\reducedit\itshape{10}{1000}{OT1IT} \setfont\reducedsl\slshape{10}{1000}{OT1} \setfont\reducedsf\sfshape{10}{1000}{OT1} \setfont\reducedsc\scshape{10}{1000}{OT1} \setfont\reducedttsl\ttslshape{10}{1000}{OT1TT} \font\reducedi=cmmi10 \font\reducedsy=cmsy10 \def\reducedecsize{1000} \textleading = 13.2pt % line spacing for 11pt CM \textfonts % reset the current fonts \rm } % end of 11pt text font size definitions, \definetextfontsizexi % Definitions to make the main text be 10pt Computer Modern, with % section, chapter, etc., sizes following suit. This is for the GNU % Press printing of the Emacs 22 manual. Maybe other manuals in the % future. Used with @smallbook, which sets the leading to 12pt. % \def\definetextfontsizex{% % Text fonts (10pt). \def\textnominalsize{10pt} \edef\mainmagstep{1000} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1000} % 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}{OT1} \setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT} \def\df{\let\ttfont=\deftt \let\bffont = \defbf \let\slfont=\defsl \let\ttslfont=\defttsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for math mode superscripts (7pt). \def\sevennominalsize{7pt} \setfont\sevenrm\rmshape{7}{1000}{OT1} \setfont\seventt\ttshape{10}{700}{OT1TT} \setfont\sevenbf\bfshape{10}{700}{OT1} \setfont\sevenit\itshape{7}{1000}{OT1IT} \setfont\sevensl\slshape{10}{700}{OT1} \setfont\sevensf\sfshape{10}{700}{OT1} \setfont\sevensc\scshape{10}{700}{OT1} \setfont\seventtsl\ttslshape{10}{700}{OT1TT} \font\seveni=cmmi7 \font\sevensy=cmsy7 \def\sevenecsize{0700} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter fonts (14.4pt). \def\chapnominalsize{14pt} \setfont\chaprm\rmbshape{12}{\magstep1}{OT1} \setfont\chapit\itbshape{10}{\magstep2}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep2}{OT1} \setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\chapsf\sfbshape{12}{\magstep1}{OT1} \let\chapbf\chaprm \setfont\chapsc\scbshape{10}{\magstep2}{OT1} \font\chapi=cmmi12 scaled \magstep1 \font\chapsy=cmsy10 scaled \magstep2 \def\chapecsize{1440} % Section fonts (12pt). \def\secnominalsize{12pt} \setfont\secrm\rmbshape{12}{1000}{OT1} \setfont\secit\itbshape{10}{\magstep1}{OT1IT} \setfont\secsl\slbshape{10}{\magstep1}{OT1} \setfont\sectt\ttbshape{12}{1000}{OT1TT} \setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT} \setfont\secsf\sfbshape{12}{1000}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep1}{OT1} \font\seci=cmmi12 \font\secsy=cmsy10 scaled \magstep1 \def\sececsize{1200} % Subsection fonts (10pt). \def\ssecnominalsize{10pt} \setfont\ssecrm\rmbshape{10}{1000}{OT1} \setfont\ssecit\itbshape{10}{1000}{OT1IT} \setfont\ssecsl\slbshape{10}{1000}{OT1} \setfont\ssectt\ttbshape{10}{1000}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1000}{OT1TT} \setfont\ssecsf\sfbshape{10}{1000}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1000}{OT1} \font\sseci=cmmi10 \font\ssecsy=cmsy10 \def\ssececsize{1000} % Reduced fonts for @acronym in text (9pt). \def\reducednominalsize{9pt} \setfont\reducedrm\rmshape{9}{1000}{OT1} \setfont\reducedtt\ttshape{9}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{900}{OT1} \setfont\reducedit\itshape{9}{1000}{OT1IT} \setfont\reducedsl\slshape{9}{1000}{OT1} \setfont\reducedsf\sfshape{9}{1000}{OT1} \setfont\reducedsc\scshape{10}{900}{OT1} \setfont\reducedttsl\ttslshape{10}{900}{OT1TT} \font\reducedi=cmmi9 \font\reducedsy=cmsy9 \def\reducedecsize{0900} \divide\parskip by 2 % reduce space between paragraphs \textleading = 12pt % line spacing for 10pt CM \textfonts % reset the current fonts \rm } % end of 10pt text font size definitions, \definetextfontsizex % Fonts for short table of contents. \setfont\shortcontrm\rmshape{12}{1000}{OT1} \setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12 \setfont\shortcontsl\slshape{12}{1000}{OT1} \setfont\shortconttt\ttshape{12}{1000}{OT1TT} % We provide the user-level command % @fonttextsize 10 % (or 11) to redefine the text font size. pt is assumed. % \def\xiword{11} \def\xword{10} \def\xwordpt{10pt} % \parseargdef\fonttextsize{% \def\textsizearg{#1}% %\wlog{doing @fonttextsize \textsizearg}% % % Set \globaldefs so that documents can use this inside @tex, since % makeinfo 4.8 does not support it, but we need it nonetheless. % \begingroup \globaldefs=1 \ifx\textsizearg\xword \definetextfontsizex \else \ifx\textsizearg\xiword \definetextfontsizexi \else \errhelp=\EMsimple \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'} \fi\fi \endgroup } % % Change the current font style to #1, remembering it in \curfontstyle. % For now, we do not accumulate font styles: @b{@i{foo}} prints foo in % italics, not bold italics. % \def\setfontstyle#1{% \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. \csname #1font\endcsname % change the current font } \def\rm{\fam=0 \setfontstyle{rm}} \def\it{\fam=\itfam \setfontstyle{it}} \def\sl{\fam=\slfam \setfontstyle{sl}} \def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} \def\tt{\fam=\ttfam \setfontstyle{tt}} % Texinfo sort of supports the sans serif font style, which plain TeX does not. % So we set up a \sf. \newfam\sffam \def\sf{\fam=\sffam \setfontstyle{sf}} % We don't need math for this font style. \def\ttsl{\setfontstyle{ttsl}} % In order for the font changes to affect most math symbols and letters, % we have to define the \textfont of the standard families. % We don't bother to reset \scriptscriptfont; awaiting user need. % \def\resetmathfonts{% \textfont0=\rmfont \textfont1=\ifont \textfont2=\syfont \textfont\itfam=\itfont \textfont\slfam=\slfont \textfont\bffam=\bffont \textfont\ttfam=\ttfont \textfont\sffam=\sffont % % Fonts for superscript. Note that the 7pt fonts are used regardless % of the current font size. \scriptfont0=\sevenrm \scriptfont1=\seveni \scriptfont2=\sevensy \scriptfont\itfam=\sevenit \scriptfont\slfam=\sevensl \scriptfont\bffam=\sevenbf \scriptfont\ttfam=\seventt \scriptfont\sffam=\sevensf } % % The font-changing commands (all called \...fonts) redefine the meanings % of \STYLEfont, instead of just \STYLE. We do this because \STYLE needs % to also set the current \fam for math mode. Our \STYLE (e.g., \rm) % commands hardwire \STYLEfont to set the current font. % % The fonts used for \ifont are for "math italics" (\itfont is for italics % in regular text). \syfont is also used in math mode only. % % Each font-changing command also sets the names \lsize (one size lower) % and \lllsize (three sizes lower). These relative commands are used % in, e.g., the LaTeX logo and acronyms. % % This all needs generalizing, badly. % \def\assignfonts#1{% \expandafter\let\expandafter\rmfont\csname #1rm\endcsname \expandafter\let\expandafter\itfont\csname #1it\endcsname \expandafter\let\expandafter\slfont\csname #1sl\endcsname \expandafter\let\expandafter\bffont\csname #1bf\endcsname \expandafter\let\expandafter\ttfont\csname #1tt\endcsname \expandafter\let\expandafter\smallcaps\csname #1sc\endcsname \expandafter\let\expandafter\sffont \csname #1sf\endcsname \expandafter\let\expandafter\ifont \csname #1i\endcsname \expandafter\let\expandafter\syfont \csname #1sy\endcsname \expandafter\let\expandafter\ttslfont\csname #1ttsl\endcsname } \newif\ifrmisbold % Select smaller font size with the current style. Used to change font size % in, e.g., the LaTeX logo and acronyms. If we are using bold fonts for % normal roman text, also use bold fonts for roman text in the smaller size. \def\switchtolllsize{% \expandafter\assignfonts\expandafter{\lllsize}% \ifrmisbold \let\rmfont\bffont \fi \csname\curfontstyle\endcsname }% \def\switchtolsize{% \expandafter\assignfonts\expandafter{\lsize}% \ifrmisbold \let\rmfont\bffont \fi \csname\curfontstyle\endcsname }% \def\definefontsetatsize#1#2#3#4#5{% \expandafter\def\csname #1fonts\endcsname{% \def\curfontsize{#1}% \def\lsize{#2}\def\lllsize{#3}% \csname rmisbold#5\endcsname \assignfonts{#1}% \resetmathfonts \setleading{#4}% }} \definefontsetatsize{text} {reduced}{smaller}{\textleading}{false} \definefontsetatsize{title} {chap} {subsec} {27pt} {true} \definefontsetatsize{chap} {sec} {text} {19pt} {true} \definefontsetatsize{sec} {subsec} {reduced}{17pt} {true} \definefontsetatsize{ssec} {text} {small} {15pt} {true} \definefontsetatsize{reduced}{small} {smaller}{10.5pt}{false} \definefontsetatsize{small} {smaller}{smaller}{10.5pt}{false} \definefontsetatsize{smaller}{smaller}{smaller}{9.5pt} {false} \def\titlefont#1{{\titlefonts\rm #1}} \let\subsecfonts = \ssecfonts \let\subsubsecfonts = \ssecfonts % Define these just so they can be easily changed for other fonts. \def\angleleft{$\langle$} \def\angleright{$\rangle$} % Set the fonts to use with the @small... environments. \let\smallexamplefonts = \smallfonts % About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample % can fit this many characters: % 8.5x11=86 smallbook=72 a4=90 a5=69 % If we use \scriptfonts (8pt), then we can fit this many characters: % 8.5x11=90+ smallbook=80 a4=90+ a5=77 % For me, subjectively, the few extra characters that fit aren't worth % the additional smallness of 8pt. So I'm making the default 9pt. % % By the way, for comparison, here's what fits with @example (10pt): % 8.5x11=71 smallbook=60 a4=75 a5=58 % --karl, 24jan03. % Set up the default fonts, so we can use them for creating boxes. % \definetextfontsizexi \message{markup,} % Check if we are currently using a typewriter font. Since all the % Computer Modern typewriter fonts have zero interword stretch (and % shrink), and it is reasonable to expect all typewriter fonts to have % this property, we can check that font parameter. % \def\ifmonospace{\ifdim\fontdimen3\font=0pt } % Markup style infrastructure. \defmarkupstylesetup\INITMACRO will % define and register \INITMACRO to be called on markup style changes. % \INITMACRO can check \currentmarkupstyle for the innermost % style. \let\currentmarkupstyle\empty \def\setupmarkupstyle#1{% \def\currentmarkupstyle{#1}% \markupstylesetup } \let\markupstylesetup\empty \def\defmarkupstylesetup#1{% \expandafter\def\expandafter\markupstylesetup \expandafter{\markupstylesetup #1}% \def#1% } % Markup style setup for left and right quotes. \defmarkupstylesetup\markupsetuplq{% \expandafter\let\expandafter \temp \csname markupsetuplq\currentmarkupstyle\endcsname \ifx\temp\relax \markupsetuplqdefault \else \temp \fi } \defmarkupstylesetup\markupsetuprq{% \expandafter\let\expandafter \temp \csname markupsetuprq\currentmarkupstyle\endcsname \ifx\temp\relax \markupsetuprqdefault \else \temp \fi } { \catcode`\'=\active \catcode`\`=\active \gdef\markupsetuplqdefault{\let`\lq} \gdef\markupsetuprqdefault{\let'\rq} \gdef\markupsetcodequoteleft{\let`\codequoteleft} \gdef\markupsetcodequoteright{\let'\codequoteright} } \let\markupsetuplqcode \markupsetcodequoteleft \let\markupsetuprqcode \markupsetcodequoteright % \let\markupsetuplqexample \markupsetcodequoteleft \let\markupsetuprqexample \markupsetcodequoteright % \let\markupsetuplqkbd \markupsetcodequoteleft \let\markupsetuprqkbd \markupsetcodequoteright % \let\markupsetuplqsamp \markupsetcodequoteleft \let\markupsetuprqsamp \markupsetcodequoteright % \let\markupsetuplqverb \markupsetcodequoteleft \let\markupsetuprqverb \markupsetcodequoteright % \let\markupsetuplqverbatim \markupsetcodequoteleft \let\markupsetuprqverbatim \markupsetcodequoteright % Allow an option to not use regular directed right quote/apostrophe % (char 0x27), but instead the undirected quote from cmtt (char 0x0d). % The undirected quote is ugly, so don't make it the default, but it % works for pasting with more pdf viewers (at least evince), the % lilypond developers report. xpdf does work with the regular 0x27. % \def\codequoteright{% \ifmonospace \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax '% \else \char'15 \fi \else \char'15 \fi \else '% \fi } % % and a similar option for the left quote char vs. a grave accent. % Modern fonts display ASCII 0x60 as a grave accent, so some people like % the code environments to do likewise. % \def\codequoteleft{% \ifmonospace \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax % [Knuth] pp. 380,381,391 % \relax disables Spanish ligatures ?` and !` of \tt font. \relax`% \else \char'22 \fi \else \char'22 \fi \else \relax`% \fi } % Commands to set the quote options. % \parseargdef\codequoteundirected{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxicodequoteundirected\endcsname = t% \else\ifx\temp\offword \expandafter\let\csname SETtxicodequoteundirected\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @codequoteundirected value `\temp', must be on|off}% \fi\fi } % \parseargdef\codequotebacktick{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxicodequotebacktick\endcsname = t% \else\ifx\temp\offword \expandafter\let\csname SETtxicodequotebacktick\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @codequotebacktick value `\temp', must be on|off}% \fi\fi } % [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font. \def\noligaturesquoteleft{\relax\lq} % Count depth in font-changes, for error checks \newcount\fontdepth \fontdepth=0 % Font commands. % #1 is the font command (\sl or \it), #2 is the text to slant. % If we are in a monospaced environment, however, 1) always use \ttsl, % and 2) do not add an italic correction. \def\dosmartslant#1#2{% \ifusingtt {{\ttsl #2}\let\next=\relax}% {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}% \next } \def\smartslanted{\dosmartslant\sl} \def\smartitalic{\dosmartslant\it} % Output an italic correction unless \next (presumed to be the following % character) is such as not to need one. \def\smartitaliccorrection{% \ifx\next,% \else\ifx\next-% \else\ifx\next.% \else\ifx\next\.% \else\ifx\next\comma% \else\ptexslash \fi\fi\fi\fi\fi \aftersmartic } % Unconditional use \ttsl, and no ic. @var is set to this for defuns. \def\ttslanted#1{{\ttsl #1}} % @cite is like \smartslanted except unconditionally use \sl. We never want % ttsl for book titles, do we? \def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection} \def\aftersmartic{} \def\var#1{% \let\saveaftersmartic = \aftersmartic \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}% \smartslanted{#1}% } \let\i=\smartitalic \let\slanted=\smartslanted \let\dfn=\smartslanted \let\emph=\smartitalic % Explicit font changes: @r, @sc, undocumented @ii. \def\r#1{{\rm #1}} % roman font \def\sc#1{{\smallcaps#1}} % smallcaps font \def\ii#1{{\it #1}} % italic font % @b, explicit bold. Also @strong. \def\b#1{{\bf #1}} \let\strong=\b % @sansserif, explicit sans. \def\sansserif#1{{\sf #1}} % We can't just use \exhyphenpenalty, because that only has effect at % the end of a paragraph. Restore normal hyphenation at the end of the % group within which \nohyphenation is presumably called. % \def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} \def\restorehyphenation{\hyphenchar\font = `- } % Set sfcode to normal for the chars that usually have another value. % Can't use plain's \frenchspacing because it uses the `\x notation, and % sometimes \x has an active definition that messes things up. % \catcode`@=11 \def\plainfrenchspacing{% \sfcode`\.=\@m \sfcode`\?=\@m \sfcode`\!=\@m \sfcode`\:=\@m \sfcode`\;=\@m \sfcode`\,=\@m \def\endofsentencespacefactor{1000}% for @. and friends } \def\plainnonfrenchspacing{% \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000 \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 \def\endofsentencespacefactor{3000}% for @. and friends } \catcode`@=\other \def\endofsentencespacefactor{3000}% default % @t, explicit typewriter. \def\t#1{% {\tt \plainfrenchspacing #1}% \null } % @samp. \def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}} % @indicateurl is \samp, that is, with quotes. \let\indicateurl=\samp % @code (and similar) prints in typewriter, but with spaces the same % size as normal in the surrounding text, without hyphenation, etc. % This is a subroutine for that. \def\tclose#1{% {% % Change normal interword space to be same as for the current font. \spaceskip = \fontdimen2\font % % Switch to typewriter. \tt % % But `\ ' produces the large typewriter interword space. \def\ {{\spaceskip = 0pt{} }}% % % Turn off hyphenation. \nohyphenation % \plainfrenchspacing #1% }% \null % reset spacefactor to 1000 } % We *must* turn on hyphenation at `-' and `_' in @code. % (But see \codedashfinish below.) % Otherwise, it is too hard to avoid overfull hboxes % in the Emacs manual, the Library manual, etc. % % Unfortunately, TeX uses one parameter (\hyphenchar) to control % both hyphenation at - and hyphenation within words. % We must therefore turn them both off (\tclose does that) % and arrange explicitly to hyphenate at a dash. -- rms. { \catcode`\-=\active \catcode`\_=\active \catcode`\'=\active \catcode`\`=\active \global\let'=\rq \global\let`=\lq % default definitions % \global\def\code{\begingroup \setupmarkupstyle{code}% % The following should really be moved into \setupmarkupstyle handlers. \catcode\dashChar=\active \catcode\underChar=\active \ifallowcodebreaks \let-\codedash \let_\codeunder \else \let-\normaldash \let_\realunder \fi % Given -foo (with a single dash), we do not want to allow a break % after the hyphen. \global\let\codedashprev=\codedash % \codex } % \gdef\codedash{\futurelet\next\codedashfinish} \gdef\codedashfinish{% \normaldash % always output the dash character itself. % % Now, output a discretionary to allow a line break, unless % (a) the next character is a -, or % (b) the preceding character is a -. % E.g., given --posix, we do not want to allow a break after either -. % Given --foo-bar, we do want to allow a break between the - and the b. \ifx\next\codedash \else \ifx\codedashprev\codedash \else \discretionary{}{}{}\fi \fi % we need the space after the = for the case when \next itself is a % space token; it would get swallowed otherwise. As in @code{- a}. \global\let\codedashprev= \next } } \def\normaldash{-} % \def\codex #1{\tclose{#1}\endgroup} \def\codeunder{% % this is all so @math{@code{var_name}+1} can work. In math mode, _ % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) % will therefore expand the active definition of _, which is us % (inside @code that is), therefore an endless loop. \ifusingtt{\ifmmode \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. \else\normalunderscore \fi \discretionary{}{}{}}% {\_}% } % An additional complication: the above will allow breaks after, e.g., % each of the four underscores in __typeof__. This is bad. % @allowcodebreaks provides a document-level way to turn breaking at - % and _ on and off. % \newif\ifallowcodebreaks \allowcodebreakstrue \def\keywordtrue{true} \def\keywordfalse{false} \parseargdef\allowcodebreaks{% \def\txiarg{#1}% \ifx\txiarg\keywordtrue \allowcodebreakstrue \else\ifx\txiarg\keywordfalse \allowcodebreaksfalse \else \errhelp = \EMsimple \errmessage{Unknown @allowcodebreaks option `\txiarg', must be true|false}% \fi\fi } % For @command, @env, @file, @option quotes seem unnecessary, % so use \code rather than \samp. \let\command=\code \let\env=\code \let\file=\code \let\option=\code % @uref (abbreviation for `urlref') aka @url takes an optional % (comma-separated) second argument specifying the text to display and % an optional third arg as text to display instead of (rather than in % addition to) the url itself. First (mandatory) arg is the url. % TeX-only option to allow changing PDF output to show only the second % arg (if given), and not the url (which is then just the link target). \newif\ifurefurlonlylink % The main macro is \urefbreak, which allows breaking at expected % places within the url. (There used to be another version, which % didn't support automatic breaking.) \def\urefbreak{\begingroup \urefcatcodes \dourefbreak} \let\uref=\urefbreak % \def\dourefbreak#1{\urefbreakfinish #1,,,\finish} \def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example \unsepspaces \pdfurl{#1}% \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \unhbox0 % third arg given, show only that \else \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 \else % PDF, normally display both arg and url for consistency, % visibility, if the pdf is eventually used to print, etc. \unhbox0\ (\urefcode{#1})% \fi \else \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 \fi \fi \endlink \endgroup} % Allow line breaks around only a few characters (only). \def\urefcatcodes{% \catcode`\&=\active \catcode`\.=\active \catcode`\#=\active \catcode`\?=\active \catcode`\/=\active } { \urefcatcodes % \global\def\urefcode{\begingroup \setupmarkupstyle{code}% \urefcatcodes \let&\urefcodeamp \let.\urefcodedot \let#\urefcodehash \let?\urefcodequest \let/\urefcodeslash \codex } % % By default, they are just regular characters. \global\def&{\normalamp} \global\def.{\normaldot} \global\def#{\normalhash} \global\def?{\normalquest} \global\def/{\normalslash} } \def\urefcodeamp{\urefprebreak \&\urefpostbreak} \def\urefcodedot{\urefprebreak .\urefpostbreak} \def\urefcodehash{\urefprebreak \#\urefpostbreak} \def\urefcodequest{\urefprebreak ?\urefpostbreak} \def\urefcodeslash{\futurelet\next\urefcodeslashfinish} { \catcode`\/=\active \global\def\urefcodeslashfinish{% \urefprebreak \slashChar % Allow line break only after the final / in a sequence of % slashes, to avoid line break between the slashes in http://. \ifx\next/\else \urefpostbreak \fi } } % By default we'll break after the special characters, but some people like to % break before the special chars, so allow that. Also allow no breaking at % all, for manual control. % \parseargdef\urefbreakstyle{% \def\txiarg{#1}% \ifx\txiarg\wordnone \def\urefprebreak{\nobreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordbefore \def\urefprebreak{\urefallowbreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordafter \def\urefprebreak{\nobreak}\def\urefpostbreak{\urefallowbreak} \else \errhelp = \EMsimple \errmessage{Unknown @urefbreakstyle setting `\txiarg'}% \fi\fi\fi } \def\wordafter{after} \def\wordbefore{before} \def\wordnone{none} % Allow a ragged right output to aid breaking long URL's. There can % be a break at the \allowbreak with no extra glue (if the existing stretch in % the line is sufficent), a break at the \penalty100 with extra glue added % at the end of the line, or no break at all here. % Changing the value of the penalty and/or the amount of stretch affects how % preferrable one choice is over the other. \def\urefallowbreak{% \allowbreak \hskip 0pt plus 4 em\relax \penalty100 \hskip 0pt plus -4 em\relax } \urefbreakstyle after % @url synonym for @uref, since that's how everyone uses it. % \let\url=\uref % rms does not like angle brackets --karl, 17may97. % So now @email is just like @uref, unless we are pdf. % %\def\email#1{\angleleft{\tt #1}\angleright} \ifpdforxetex \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} \else \let\email=\uref \fi % @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), % `example' (@kbd uses ttsl only inside of @example and friends), % or `code' (@kbd uses normal tty font always). \parseargdef\kbdinputstyle{% \def\txiarg{#1}% \ifx\txiarg\worddistinct \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% \else\ifx\txiarg\wordexample \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% \else\ifx\txiarg\wordcode \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% \else \errhelp = \EMsimple \errmessage{Unknown @kbdinputstyle setting `\txiarg'}% \fi\fi\fi } \def\worddistinct{distinct} \def\wordexample{example} \def\wordcode{code} % Default is `distinct'. \kbdinputstyle distinct % @kbd is like @code, except that if the argument is just one @key command, % then @kbd has no effect. \def\kbd#1{{\def\look{#1}\expandafter\kbdsub\look??\par}} \def\xkey{\key} \def\kbdsub#1#2#3\par{% \def\one{#1}\def\three{#3}\def\threex{??}% \ifx\one\xkey\ifx\threex\three \key{#2}% \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi } % definition of @key that produces a lozenge. Doesn't adjust to text size. %\setfont\keyrm\rmshape{8}{1000}{OT1} %\font\keysy=cmsy9 %\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% % \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% % \vbox{\hrule\kern-0.4pt % \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% % \kern-0.4pt\hrule}% % \kern-.06em\raise0.4pt\hbox{\angleright}}}} % definition of @key with no lozenge. If the current font is already % monospace, don't change it; that way, we respect @kbdinputstyle. But % if it isn't monospace, then use \tt. % \def\key#1{{\setupmarkupstyle{key}% \nohyphenation \ifmonospace\else\tt\fi #1}\null} % @clicksequence{File @click{} Open ...} \def\clicksequence#1{\begingroup #1\endgroup} % @clickstyle @arrow (by default) \parseargdef\clickstyle{\def\click{#1}} \def\click{\arrow} % Typeset a dimension, e.g., `in' or `pt'. The only reason for the % argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. % \def\dmn#1{\thinspace #1} % @acronym for "FBI", "NATO", and the like. % We print this one point size smaller, since it's intended for % all-uppercase. % \def\acronym#1{\doacronym #1,,\finish} \def\doacronym#1,#2,#3\finish{% {\switchtolsize #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi \null % reset \spacefactor=1000 } % @abbr for "Comput. J." and the like. % No font change, but don't do end-of-sentence spacing. % \def\abbr#1{\doabbr #1,,\finish} \def\doabbr#1,#2,#3\finish{% {\plainfrenchspacing #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi \null % reset \spacefactor=1000 } % @asis just yields its argument. Used with @table, for example. % \def\asis#1{#1} % @math outputs its argument in math mode. % % One complication: _ usually means subscripts, but it could also mean % an actual _ character, as in @math{@var{some_variable} + 1}. So make % _ active, and distinguish by seeing if the current family is \slfam, % which is what @var uses. { \catcode`\_ = \active \gdef\mathunderscore{% \catcode`\_=\active \def_{\ifnum\fam=\slfam \_\else\sb\fi}% } } % Another complication: we want \\ (and @\) to output a math (or tt) \. % FYI, plain.tex uses \\ as a temporary control sequence (for no % particular reason), but this is not advertised and we don't care. % % The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. \def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} % \def\math{% \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. % Some active characters (such as <) are spaced differently in math. % We have to reset their definitions in case the @math was an argument % to a command which sets the catcodes (such as @item or @section). % { \catcode`^ = \active \catcode`< = \active \catcode`> = \active \catcode`+ = \active \catcode`' = \active \gdef\mathactive{% \let^ = \ptexhat \let< = \ptexless \let> = \ptexgtr \let+ = \ptexplus \let' = \ptexquoteright } } % 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{\switchtolllsize #1}}$}% % \def\sup{\ifmmode \expandafter\ptexsp \else \expandafter\finishsup\fi} \def\finishsup#1{$\ptexsp{\hbox{\switchtolllsize #1}}$}% % @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}. % Ignore unless FMTNAME == tex; then it is like @iftex and @tex, % except specified as a normal braced arg, so no newlines to worry about. % \def\outfmtnametex{tex} % \long\def\inlinefmt#1{\doinlinefmt #1,\finish} \long\def\doinlinefmt#1,#2,\finish{% \def\inlinefmtname{#1}% \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi } % % @inlinefmtifelse{FMTNAME,THEN-TEXT,ELSE-TEXT} expands THEN-TEXT if % FMTNAME is tex, else ELSE-TEXT. \long\def\inlinefmtifelse#1{\doinlinefmtifelse #1,,,\finish} \long\def\doinlinefmtifelse#1,#2,#3,#4,\finish{% \def\inlinefmtname{#1}% \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\else \ignorespaces #3\fi } % % For raw, must switch into @tex before parsing the argument, to avoid % setting catcodes prematurely. Doing it this way means that, for % example, @inlineraw{html, foo{bar} gets a parse error instead of being % ignored. But this isn't important because if people want a literal % *right* brace they would have to use a command anyway, so they may as % well use a command to get a left brace too. We could re-use the % delimiter character idea from \verb, but it seems like overkill. % \long\def\inlineraw{\tex \doinlineraw} \long\def\doinlineraw#1{\doinlinerawtwo #1,\finish} \def\doinlinerawtwo#1,#2,\finish{% \def\inlinerawname{#1}% \ifx\inlinerawname\outfmtnametex \ignorespaces #2\fi \endgroup % close group opened by \tex. } % @inlineifset{VAR, TEXT} expands TEXT if VAR is @set. % \long\def\inlineifset#1{\doinlineifset #1,\finish} \long\def\doinlineifset#1,#2,\finish{% \def\inlinevarname{#1}% \expandafter\ifx\csname SET\inlinevarname\endcsname\relax \else\ignorespaces#2\fi } % @inlineifclear{VAR, TEXT} expands TEXT if VAR is not @set. % \long\def\inlineifclear#1{\doinlineifclear #1,\finish} \long\def\doinlineifclear#1,#2,\finish{% \def\inlinevarname{#1}% \expandafter\ifx\csname SET\inlinevarname\endcsname\relax \ignorespaces#2\fi } \message{glyphs,} % and logos. % @@ prints an @, as does @atchar{}. \def\@{\char64 } \let\atchar=\@ % @{ @} @lbracechar{} @rbracechar{} all generate brace characters. \def\lbracechar{{\ifmonospace\char123\else\ensuremath\lbrace\fi}} \def\rbracechar{{\ifmonospace\char125\else\ensuremath\rbrace\fi}} \let\{=\lbracechar \let\}=\rbracechar % @comma{} to avoid , parsing problems. \let\comma = , % Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent % Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. \let\, = \ptexc \let\dotaccent = \ptexdot \def\ringaccent#1{{\accent23 #1}} \let\tieaccent = \ptext \let\ubaraccent = \ptexb \let\udotaccent = \d % Other special characters: @questiondown @exclamdown @ordf @ordm % Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. \def\questiondown{?`} \def\exclamdown{!`} \def\ordf{\leavevmode\raise1ex\hbox{\switchtolllsize \underbar{a}}} \def\ordm{\leavevmode\raise1ex\hbox{\switchtolllsize \underbar{o}}} % Dotless i and dotless j, used for accents. \def\imacro{i} \def\jmacro{j} \def\dotless#1{% \def\temp{#1}% \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi \else \errmessage{@dotless can be used only with i or j}% \fi\fi } % The \TeX{} logo, as in plain, but resetting the spacing so that a % period following counts as ending a sentence. (Idea found in latex.) % \edef\TeX{\TeX \spacefactor=1000 } % @LaTeX{} logo. Not quite the same results as the definition in % latex.ltx, since we use a different font for the raised A; it's most % convenient for us to use an explicitly smaller font, rather than using % the \scriptstyle font (since we don't reset \scriptstyle and % \scriptscriptstyle). % \def\LaTeX{% L\kern-.36em {\setbox0=\hbox{T}% \vbox to \ht0{\hbox{% \ifx\textnominalsize\xwordpt % for 10pt running text, lllsize (8pt) is too small for the A in LaTeX. % Revert to plain's \scriptsize, which is 7pt. \count255=\the\fam $\fam\count255 \scriptstyle A$% \else % For 11pt, we can use our lllsize. \switchtolllsize A% \fi }% \vss }}% \kern-.15em \TeX } % 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 % typewriter fonts as three actual period characters; on the other hand, % in other typewriter fonts three periods are wider than 1.5em. So do % whichever is larger. % \def\dots{% \leavevmode \setbox0=\hbox{...}% get width of three periods \ifdim\wd0 > 1.5em \dimen0 = \wd0 \else \dimen0 = 1.5em \fi \hbox to \dimen0{% \hskip 0pt plus.25fil .\hskip 0pt plus1fil .\hskip 0pt plus1fil .\hskip 0pt plus.5fil }% } % @enddots{} is an end-of-sentence ellipsis. % \def\enddots{% \dots \spacefactor=\endofsentencespacefactor } % @point{}, @result{}, @expansion{}, @print{}, @equiv{}. % % Since these characters are used in examples, they should be an even number of % \tt widths. Each \tt character is 1en, so two makes it 1em. % \def\point{$\star$} \def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}} \def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} \def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}} \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} \def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}} % The @error{} command. % Adapted from the TeXbook's \boxit. % \newbox\errorbox % {\ttfont \global\dimen0 = 3em}% Width of the box. \dimen2 = .55pt % Thickness of rules % The text. (`r' is open on the right, `e' somewhat less so on the left.) \setbox0 = \hbox{\kern-.75pt \reducedsf \putworderror\kern-1.5pt} % \setbox\errorbox=\hbox to \dimen0{\hfil \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. \advance\hsize by -2\dimen2 % Rules. \vbox{% \hrule height\dimen2 \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. \kern3pt\vrule width\dimen2}% Space to right. \hrule height\dimen2} \hfil} % \def\error{\leavevmode\lower.7ex\copy\errorbox} % @pounds{} is a sterling sign, which Knuth put in the CM italic font. % \def\pounds{{\it\$}} % @euro{} comes from a separate font, depending on the current style. % We use the free feym* fonts from the eurosym package by Henrik % Theiling, which support regular, slanted, bold and bold slanted (and % "outlined" (blackboard board, sort of) versions, which we don't need). % It is available from http://www.ctan.org/tex-archive/fonts/eurosym. % % Although only regular is the truly official Euro symbol, we ignore % that. The Euro is designed to be slightly taller than the regular % font height. % % feymr - regular % feymo - slanted % feybr - bold % feybo - bold slanted % % There is no good (free) typewriter version, to my knowledge. % A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. % Hmm. % % Also doesn't work in math. Do we need to do math with euro symbols? % Hope not. % % \def\euro{{\eurofont e}} \def\eurofont{% % We set the font at each command, rather than predefining it in % \textfonts and the other font-switching commands, so that % installations which never need the symbol don't have to have the % font installed. % % There is only one designed size (nominal 10pt), so we always scale % that to the current nominal size. % % By the way, simply using "at 1em" works for cmr10 and the like, but % does not work for cmbx10 and other extended/shrunken fonts. % \def\eurosize{\csname\curfontsize nominalsize\endcsname}% % \ifx\curfontstyle\bfstylename % bold: \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize \else % regular: \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize \fi \thiseurofont } % Glyphs from the EC fonts. We don't use \let for the aliases, because % sometimes we redefine the original macro, and the alias should reflect % the redefinition. % % Use LaTeX names for the Icelandic letters. \def\DH{{\ecfont \char"D0}} % Eth \def\dh{{\ecfont \char"F0}} % eth \def\TH{{\ecfont \char"DE}} % Thorn \def\th{{\ecfont \char"FE}} % thorn % \def\guillemetleft{{\ecfont \char"13}} \def\guillemotleft{\guillemetleft} \def\guillemetright{{\ecfont \char"14}} \def\guillemotright{\guillemetright} \def\guilsinglleft{{\ecfont \char"0E}} \def\guilsinglright{{\ecfont \char"0F}} \def\quotedblbase{{\ecfont \char"12}} \def\quotesinglbase{{\ecfont \char"0D}} % % This positioning is not perfect (see the ogonek LaTeX package), but % we have the precomposed glyphs for the most common cases. We put the % tests to use those glyphs in the single \ogonek macro so we have fewer % dummy definitions to worry about for index entries, etc. % % ogonek is also used with other letters in Lithuanian (IOU), but using % the precomposed glyphs for those is not so easy since they aren't in % the same EC font. \def\ogonek#1{{% \def\temp{#1}% \ifx\temp\macrocharA\Aogonek \else\ifx\temp\macrochara\aogonek \else\ifx\temp\macrocharE\Eogonek \else\ifx\temp\macrochare\eogonek \else \ecfont \setbox0=\hbox{#1}% \ifdim\ht0=1ex\accent"0C #1% \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}% \fi \fi\fi\fi\fi }% } \def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A} \def\aogonek{{\ecfont \char"A1}}\def\macrochara{a} \def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E} \def\eogonek{{\ecfont \char"A6}}\def\macrochare{e} % % 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 % hopefully nobody will notice/care. \edef\ecsize{\csname\curfontsize ecsize\endcsname}% \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}% \ifmonospace % typewriter: \font\thisecfont = #1ctt\ecsize \space at \nominalsize \else \ifx\curfontstyle\bfstylename % bold: \font\thisecfont = #1cb\ifusingit{i}{x}\ecsize \space at \nominalsize \else % regular: \font\thisecfont = #1c\ifusingit{ti}{rm}\ecsize \space at \nominalsize \fi \fi \thisecfont } % @registeredsymbol - R in a circle. The font for the R should really % be smaller yet, but lllsize is the best we can do for now. % Adapted from the plain.tex definition of \copyright. % \def\registeredsymbol{% $^{{\ooalign{\hfil\raise.07ex\hbox{\switchtolllsize R}% \hfil\crcr\Orb}}% }$% } % @textdegree - the normal degrees sign. % \def\textdegree{$^\circ$} % Laurent Siebenmann reports \Orb undefined with: % Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 % so we'll define it if necessary. % \ifx\Orb\thisisundefined \def\Orb{\mathhexbox20D} \fi % Quotes. \chardef\quotedblleft="5C \chardef\quotedblright=`\" \chardef\quoteleft=`\` \chardef\quoteright=`\' \message{page headings,} \newskip\titlepagetopglue \titlepagetopglue = 1.5in \newskip\titlepagebottomglue \titlepagebottomglue = 2pc % First the title page. Must do @settitle before @titlepage. \newif\ifseenauthor \newif\iffinishedtitlepage % @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}% \endgroup\page\hbox{}\page} \envdef\titlepage{% % Open one extra group, as we want to close it in the middle of \Etitlepage. \begingroup \parindent=0pt \textfonts % Leave some space at the very top of the page. \vglue\titlepagetopglue % No rule at page bottom unless we print one at the top with @title. \finishedtitlepagetrue % % Most title ``pages'' are actually two pages long, with space % at the top of the second. We don't want the ragged left on the second. \let\oldpage = \page \def\page{% \iffinishedtitlepage\else \finishtitlepage \fi \let\page = \oldpage \page \null }% } \def\Etitlepage{% \iffinishedtitlepage\else \finishtitlepage \fi % It is important to do the page break before ending the group, % because the headline and footline are only empty inside the group. % If we use the new definition of \page, we always get a blank page % after the title page, which we certainly don't want. \oldpage \endgroup % % Need this before the \...aftertitlepage checks so that if they are % in effect the toc pages will come out with page numbers. \HEADINGSon } \def\finishtitlepage{% \vskip4pt \hrule height 2pt width \hsize \vskip\titlepagebottomglue \finishedtitlepagetrue } % Settings used for typesetting titles: no hyphenation, no indentation, % don't worry much about spacing, ragged right. This should be used % inside a \vbox, and fonts need to be set appropriately first. \par should % be specified before the end of the \vbox, since a vbox is a group. % \def\raggedtitlesettings{% \rm \hyphenpenalty=10000 \parindent=0pt \tolerance=5000 \ptexraggedright } % Macros to be used within @titlepage: \let\subtitlerm=\rmfont \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} \parseargdef\title{% \checkenv\titlepage \vbox{\titlefonts \raggedtitlesettings #1\par}% % print a rule at the page bottom also. \finishedtitlepagefalse \vskip4pt \hrule height 4pt width \hsize \vskip4pt } \parseargdef\subtitle{% \checkenv\titlepage {\subtitlefont \rightline{#1}}% } % @author should come last, but may come many times. % It can also be used inside @quotation. % \parseargdef\author{% \def\temp{\quotation}% \ifx\thisenv\temp \def\quotationauthor{#1}% printed in \Equotation. \else \checkenv\titlepage \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi {\secfonts\rm \leftline{#1}}% \fi } % Set up page headings and footings. \let\thispage=\folio \newtoks\evenheadline % headline on even pages \newtoks\oddheadline % headline on odd pages \newtoks\evenfootline % footline on even pages \newtoks\oddfootline % footline on odd pages % 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 \else \the\evenfootline \fi}\HEADINGShook} \let\HEADINGShook=\relax % Commands to set those variables. % For example, this is what @headings on does % @evenheading @thistitle|@thispage|@thischapter % @oddheading @thischapter|@thispage|@thistitle % @evenfooting @thisfile|| % @oddfooting ||@thisfile \def\evenheading{\parsearg\evenheadingxxx} \def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} \def\evenheadingyyy #1\|#2\|#3\|#4\finish{% \global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddheading{\parsearg\oddheadingxxx} \def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} \def\oddheadingyyy #1\|#2\|#3\|#4\finish{% \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% \def\evenfooting{\parsearg\evenfootingxxx} \def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} \def\evenfootingyyy #1\|#2\|#3\|#4\finish{% \global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddfooting{\parsearg\oddfootingxxx} \def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} \def\oddfootingyyy #1\|#2\|#3\|#4\finish{% \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% % % Leave some space for the footline. Hopefully ok to assume % @evenfooting will not be used by itself. \global\advance\txipageheight by -12pt \global\advance\vsize by -12pt } \parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} % @evenheadingmarks top \thischapter <- chapter at the top of a page % @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page % % The same set of arguments for: % % @oddheadingmarks % @evenfootingmarks % @oddfootingmarks % @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}} \parseargdef\everyheadingmarks{\headingmarks{even}{heading}{#1} \headingmarks{odd}{heading}{#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 {% \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname \global\expandafter\let\csname get#1#2marks\endcsname \temp } \everyheadingmarks bottom \everyfootingmarks bottom % @headings double turns headings on for double-sided printing. % @headings single turns headings on for single-sided printing. % @headings off turns them off. % @headings on same as @headings double, retained for compatibility. % @headings after turns on double-sided headings after this page. % @headings doubleafter turns on double-sided headings after this page. % @headings singleafter turns on single-sided headings after this page. % By default, they are off at the start of a document, % and turned `on' after @end titlepage. \parseargdef\headings{\csname HEADINGS#1\endcsname} \def\headingsoff{% non-global headings elimination \evenheadline={\hfil}\evenfootline={\hfil}% \oddheadline={\hfil}\oddfootline={\hfil}% } \def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting \HEADINGSoff % it's the default % When we turn headings on, set the page number to 1. % For double-sided printing, put current file name in lower left corner, % chapter name on inside top of right hand pages, document % title on inside top of left hand pages, and page numbers on outside top % edge of all pages. \def\HEADINGSdouble{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapterheading\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \let\contentsalignmacro = \chappager % For single-sided printing, chapter title goes across top left of page, % page number on top right. \def\HEADINGSsingle{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapterheading\hfil\folio}} \global\oddheadline={\line{\thischapterheading\hfil\folio}} \global\let\contentsalignmacro = \chappager } \def\HEADINGSon{\HEADINGSdouble} \def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} \let\HEADINGSdoubleafter=\HEADINGSafter \def\HEADINGSdoublex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapterheading\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} \def\HEADINGSsinglex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapterheading\hfil\folio}} \global\oddheadline={\line{\thischapterheading\hfil\folio}} \global\let\contentsalignmacro = \chappager } % Subroutines used in generating headings % This produces Day Month Year style of output. % Only define if not already defined, in case a txi-??.tex file has set % up a different format (e.g., txi-cs.tex does this). \ifx\today\thisisundefined \def\today{% \number\day\space \ifcase\month \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec \fi \space\number\year} \fi % @settitle line... specifies the title of the document, for headings. % It generates no output of its own. \def\thistitle{\putwordNoTitle} \def\settitle{\parsearg{\gdef\thistitle}} \message{tables,} % Tables -- @table, @ftable, @vtable, @item(x). % default indentation of table text \newdimen\tableindent \tableindent=.8in % default indentation of @itemize and @enumerate text \newdimen\itemindent \itemindent=.3in % margin between end of table item and start of table text. \newdimen\itemmargin \itemmargin=.1in % used internally for \itemindent minus \itemmargin \newdimen\itemmax % Note @table, @ftable, and @vtable define @item, @itemx, etc., with % these defs. % They also define \itemindex % to index the item name in whatever manner is desired (perhaps none). \newif\ifitemxneedsnegativevskip \def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} \def\internalBitem{\smallbreak \parsearg\itemzzz} \def\internalBitemx{\itemxpar \parsearg\itemzzz} \def\itemzzz #1{\begingroup % \advance\hsize by -\rightskip \advance\hsize by -\tableindent \setbox0=\hbox{\itemindicate{#1}}% \itemindex{#1}% \nobreak % This prevents a break before @itemx. % % If the item text does not fit in the space we have, put it on a line % by itself, and do not allow a page break either before or after that % line. We do not start a paragraph here because then if the next % command is, e.g., @kindex, the whatsit would get put into the % horizontal list on a line by itself, resulting in extra blank space. \ifdim \wd0>\itemmax % % Make this a paragraph so we get the \parskip glue and wrapping, % but leave it ragged-right. \begingroup \advance\leftskip by-\tableindent \advance\hsize by\tableindent \advance\rightskip by0pt plus1fil\relax \leavevmode\unhbox0\par \endgroup % % We're going to be starting a paragraph, but we don't want the % \parskip glue -- logically it's part of the @item we just started. \nobreak \vskip-\parskip % % Stop a page break at the \parskip glue coming up. However, if % what follows is an environment such as @example, there will be no % \parskip glue; then the negative vskip we just inserted would % cause the example and the item to crash together. So we use this % bizarre value of 10001 as a signal to \aboveenvbreak to insert % \parskip glue after all. Section titles are handled this way also. % \penalty 10001 \endgroup \itemxneedsnegativevskipfalse \else % The item text fits into the space. Start a paragraph, so that the % following text (if any) will end up on the same line. \noindent % Do this with kerns and \unhbox so that if there is a footnote in % the item text, it can migrate to the main vertical list and % eventually be printed. \nobreak\kern-\tableindent \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 \unhbox0 \nobreak\kern\dimen0 \endgroup \itemxneedsnegativevskiptrue \fi } \def\item{\errmessage{@item while not in a list environment}} \def\itemx{\errmessage{@itemx while not in a list environment}} % @table, @ftable, @vtable. \envdef\table{% \let\itemindex\gobble \tablecheck{table}% } \envdef\ftable{% \def\itemindex ##1{\doind {fn}{\code{##1}}}% \tablecheck{ftable}% } \envdef\vtable{% \def\itemindex ##1{\doind {vr}{\code{##1}}}% \tablecheck{vtable}% } \def\tablecheck#1{% \ifnum \the\catcode`\^^M=\active \endgroup \errmessage{This command won't work in this context; perhaps the problem is that we are \inenvironment\thisenv}% \def\next{\doignore{#1}}% \else \let\next\tablex \fi \next } \def\tablex#1{% \def\itemindicate{#1}% \parsearg\tabley } \def\tabley#1{% {% \makevalueexpandable \edef\temp{\noexpand\tablez #1\space\space\space}% \expandafter }\temp \endtablez } \def\tablez #1 #2 #3 #4\endtablez{% \aboveenvbreak \ifnum 0#1>0 \advance \leftskip by #1\mil \fi \ifnum 0#2>0 \tableindent=#2\mil \fi \ifnum 0#3>0 \advance \rightskip by #3\mil \fi \itemmax=\tableindent \advance \itemmax by -\itemmargin \advance \leftskip by \tableindent \exdentamount=\tableindent \parindent = 0pt \parskip = \smallskipamount \ifdim \parskip=0pt \parskip=2pt \fi \let\item = \internalBitem \let\itemx = \internalBitemx } \def\Etable{\endgraf\afterenvbreak} \let\Eftable\Etable \let\Evtable\Etable \let\Eitemize\Etable \let\Eenumerate\Etable % This is the counter used by @enumerate, which is really @itemize \newcount \itemno \envdef\itemize{\parsearg\doitemize} \def\doitemize#1{% \aboveenvbreak \itemmax=\itemindent \advance\itemmax by -\itemmargin \advance\leftskip by \itemindent \exdentamount=\itemindent \parindent=0pt \parskip=\smallskipamount \ifdim\parskip=0pt \parskip=2pt \fi % % Try typesetting the item mark so that if the document erroneously says % something like @itemize @samp (intending @table), there's an error % right away at the @itemize. It's not the best error message in the % world, but it's better than leaving it to the @item. This means if % the user wants an empty mark, they have to say @w{} not just @w. \def\itemcontents{#1}% \setbox0 = \hbox{\itemcontents}% % % @itemize with no arg is equivalent to @itemize @bullet. \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi % \let\item=\itemizeitem } % Definition of @item while inside @itemize and @enumerate. % \def\itemizeitem{% \advance\itemno by 1 % for enumerations {\let\par=\endgraf \smallbreak}% reasonable place to break {% % If the document has an @itemize directly after a section title, a % \nobreak will be last on the list, and \sectionheading will have % done a \vskip-\parskip. In that case, we don't want to zero % parskip, or the item text will crash with the heading. On the % other hand, when there is normal text preceding the item (as there % usually is), we do want to zero parskip, or there would be too much % space. In that case, we won't have a \nobreak before. At least % that's the theory. \ifnum\lastpenalty<10000 \parskip=0in \fi \noindent \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% % \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 } % \splitoff TOKENS\endmark defines \first to be the first token in % TOKENS, and \rest to be the remainder. % \def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% % Allow an optional argument of an uppercase letter, lowercase letter, % or number, to specify the first label in the enumerated list. No % argument is the same as `1'. % \envparseargdef\enumerate{\enumeratey #1 \endenumeratey} \def\enumeratey #1 #2\endenumeratey{% % If we were given no argument, pretend we were given `1'. \def\thearg{#1}% \ifx\thearg\empty \def\thearg{1}\fi % % Detect if the argument is a single token. If so, it might be a % letter. Otherwise, the only valid thing it can be is a number. % (We will always have one token, because of the test we just made. % This is a good thing, since \splitoff doesn't work given nothing at % all -- the first parameter is undelimited.) \expandafter\splitoff\thearg\endmark \ifx\rest\empty % Only one token in the argument. It could still be anything. % A ``lowercase letter'' is one whose \lccode is nonzero. % An ``uppercase letter'' is one whose \lccode is both nonzero, and % not equal to itself. % Otherwise, we assume it's a number. % % We need the \relax at the end of the \ifnum lines to stop TeX from % continuing to look for a . % \ifnum\lccode\expandafter`\thearg=0\relax \numericenumerate % a number (we hope) \else % It's a letter. \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax \lowercaseenumerate % lowercase letter \else \uppercaseenumerate % uppercase letter \fi \fi \else % Multiple tokens in the argument. We hope it's a number. \numericenumerate \fi } % An @enumerate whose labels are integers. The starting integer is % given in \thearg. % \def\numericenumerate{% \itemno = \thearg \startenumeration{\the\itemno}% } % The starting (lowercase) letter is in \thearg. \def\lowercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more lowercase letters in @enumerate; get a bigger alphabet}% \fi \char\lccode\itemno }% } % The starting (uppercase) letter is in \thearg. \def\uppercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more uppercase letters in @enumerate; get a bigger alphabet} \fi \char\uccode\itemno }% } % Call \doitemize, adding a period to the first argument and supplying the % common last two arguments. Also subtract one from the initial value in % \itemno, since @item increments \itemno. % \def\startenumeration#1{% \advance\itemno by -1 \doitemize{#1.}\flushcr } % @alphaenumerate and @capsenumerate are abbreviations for giving an arg % to @enumerate. % \def\alphaenumerate{\enumerate{a}} \def\capsenumerate{\enumerate{A}} \def\Ealphaenumerate{\Eenumerate} \def\Ecapsenumerate{\Eenumerate} % @multitable macros % Amy Hendrickson, 8/18/94, 3/6/96 % % @multitable ... @end multitable will make as many columns as desired. % Contents of each column will wrap at width given in preamble. Width % can be specified either with sample text given in a template line, % or in percent of \hsize, the current width of text on page. % Table can continue over pages but will only break between lines. % To make preamble: % % Either define widths of columns in terms of percent of \hsize: % @multitable @columnfractions .25 .3 .45 % @item ... % % Numbers following @columnfractions are the percent of the total % current hsize to be used for each column. You may use as many % columns as desired. % Or use a template: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item ... % using the widest term desired in each column. % Each new table line starts with @item, each subsequent new column % starts with @tab. Empty columns may be produced by supplying @tab's % with nothing between them for as many times as empty columns are needed, % ie, @tab@tab@tab will produce two empty columns. % @item, @tab do not need to be on their own lines, but it will not hurt % if they are. % Sample multitable: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item first col stuff @tab second col stuff @tab third col % @item % first col stuff % @tab % second col stuff % @tab % third col % @item first col stuff @tab second col stuff % @tab Many paragraphs of text may be used in any column. % % They will wrap at the width determined by the template. % @item@tab@tab This will be in third column. % @end multitable % Default dimensions may be reset by user. % @multitableparskip is vertical space between paragraphs in table. % @multitableparindent is paragraph indent in table. % @multitablecolmargin is horizontal space to be left between columns. % @multitablelinespace is space to leave between table items, baseline % to baseline. % 0pt means it depends on current normal line spacing. % \newskip\multitableparskip \newskip\multitableparindent \newdimen\multitablecolspace \newskip\multitablelinespace \multitableparskip=0pt \multitableparindent=6pt \multitablecolspace=12pt \multitablelinespace=0pt % Macros used to set up halign preamble: % \let\endsetuptable\relax \def\xendsetuptable{\endsetuptable} \let\columnfractions\relax \def\xcolumnfractions{\columnfractions} \newif\ifsetpercent % #1 is the @columnfraction, usually a decimal number like .5, but might % be just 1. We just use it, whatever it is. % \def\pickupwholefraction#1 {% \global\advance\colcount by 1 \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% \setuptable } \newcount\colcount \def\setuptable#1{% \def\firstarg{#1}% \ifx\firstarg\xendsetuptable \let\go = \relax \else \ifx\firstarg\xcolumnfractions \global\setpercenttrue \else \ifsetpercent \let\go\pickupwholefraction \else \global\advance\colcount by 1 \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a % separator; typically that is always in the input, anyway. \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% \fi \fi \ifx\go\pickupwholefraction % Put the argument back for the \pickupwholefraction call, so % we'll always have a period there to be parsed. \def\go{\pickupwholefraction#1}% \else \let\go = \setuptable \fi% \fi \go } % multitable-only commands. % % @headitem starts a heading row, which we typeset in bold. Assignments % have to be global since we are inside the implicit group of an % alignment entry. \everycr below resets \everytab so we don't have to % undo it ourselves. \def\headitemfont{\b}% for people to use in the template row; not changeable \def\headitem{% \checkenv\multitable \crcr \gdef\headitemcrhook{\nobreak}% attempt to avoid page break after headings \global\everytab={\bf}% can't use \headitemfont since the parsing differs \the\everytab % for the first item }% % % default for tables with no headings. \let\headitemcrhook=\relax % % A \tab used to include \hskip1sp. But then the space in a template % line is not enough. That is bad. So let's go back to just `&' until % we again encounter the problem the 1sp was intended to solve. % --karl, nathan@acm.org, 20apr99. \def\tab{\checkenv\multitable &\the\everytab}% % @multitable ... @end multitable definitions: % \newtoks\everytab % insert after every tab. % \envdef\multitable{% \vskip\parskip \startsavinginserts % % @item within a multitable starts a normal row. % We use \def instead of \let so that if one of the multitable entries % contains an @itemize, we don't choke on the \item (seen as \crcr aka % \endtemplate) expanding \doitemize. \def\item{\crcr}% % \tolerance=9500 \hbadness=9500 \setmultitablespacing \parskip=\multitableparskip \parindent=\multitableparindent \overfullrule=0pt \global\colcount=0 % \everycr = {% \noalign{% \global\everytab={}% Reset from possible headitem. \global\colcount=0 % Reset the column counter. % % Check for saved footnotes, etc.: \checkinserts % % Perhaps a \nobreak, then reset: \headitemcrhook \global\let\headitemcrhook=\relax }% }% % \parsearg\domultitable } \def\domultitable#1{% % To parse everything between @multitable and @item: \setuptable#1 \endsetuptable % % This preamble sets up a generic column definition, which will % be used as many times as user calls for columns. % \vtop will set a single line and will also let text wrap and % continue for many paragraphs if desired. \halign\bgroup &% \global\advance\colcount by 1 \multistrut \vtop{% % Use the current \colcount to find the correct column width: \hsize=\expandafter\csname col\the\colcount\endcsname % % In order to keep entries from bumping into each other % we will add a \leftskip of \multitablecolspace to all columns after % the first one. % % If a template has been used, we will add \multitablecolspace % to the width of each template entry. % % If the user has set preamble in terms of percent of \hsize we will % use that dimension as the width of the column, and the \leftskip % will keep entries from bumping into each other. Table will start at % left margin and final column will justify at right margin. % % Make sure we don't inherit \rightskip from the outer environment. \rightskip=0pt \ifnum\colcount=1 % The first column will be indented with the surrounding text. \advance\hsize by\leftskip \else \ifsetpercent \else % If user has not set preamble in terms of percent of \hsize % we will advance \hsize by \multitablecolspace. \advance\hsize by \multitablecolspace \fi % In either case we will make \leftskip=\multitablecolspace: \leftskip=\multitablecolspace \fi % Ignoring space at the beginning and end avoids an occasional spurious % blank line, when TeX decides to break the line at the space before the % box from the multistrut, so the strut ends up on a line by itself. % For example: % @multitable @columnfractions .11 .89 % @item @code{#} % @tab Legal holiday which is valid in major parts of the whole country. % Is automatically provided with highlighting sequences respectively % marking characters. \noindent\ignorespaces##\unskip\multistrut }\cr } \def\Emultitable{% \crcr \egroup % end the \halign \global\setpercentfalse } \def\setmultitablespacing{% \def\multistrut{\strut}% just use the standard line spacing % % Compute \multitablelinespace (if not defined by user) for use in % \multitableparskip calculation. We used define \multistrut based on % this, but (ironically) that caused the spacing to be off. % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100. \ifdim\multitablelinespace=0pt \setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip \global\advance\multitablelinespace by-\ht0 \fi % Test to see if parskip is larger than space between lines of % table. If not, do nothing. % If so, set to same dimension as multitablelinespace. \ifdim\multitableparskip>\multitablelinespace \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt % to keep parskip somewhat smaller % than skip between lines in the table. \fi% \ifdim\multitableparskip=0pt \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt % to keep parskip somewhat smaller % than skip between lines in the table. \fi} \message{conditionals,} % @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, % @ifnotxml always succeed. They currently do nothing; we don't % attempt to check whether the conditionals are properly nested. But we % have to remember that they are conditionals, so that @end doesn't % attempt to close an environment group. % \def\makecond#1{% \expandafter\let\csname #1\endcsname = \relax \expandafter\let\csname iscond.#1\endcsname = 1 } \makecond{iftex} \makecond{ifnotdocbook} \makecond{ifnothtml} \makecond{ifnotinfo} \makecond{ifnotplaintext} \makecond{ifnotxml} % Ignore @ignore, @ifhtml, @ifinfo, and the like. % \def\direntry{\doignore{direntry}} \def\documentdescription{\doignore{documentdescription}} \def\docbook{\doignore{docbook}} \def\html{\doignore{html}} \def\ifdocbook{\doignore{ifdocbook}} \def\ifhtml{\doignore{ifhtml}} \def\ifinfo{\doignore{ifinfo}} \def\ifnottex{\doignore{ifnottex}} \def\ifplaintext{\doignore{ifplaintext}} \def\ifxml{\doignore{ifxml}} \def\ignore{\doignore{ignore}} \def\menu{\doignore{menu}} \def\xml{\doignore{xml}} % Ignore text until a line `@end #1', keeping track of nested conditionals. % % A count to remember the depth of nesting. \newcount\doignorecount \def\doignore#1{\begingroup % Scan in ``verbatim'' mode: \obeylines \catcode`\@ = \other \catcode`\{ = \other \catcode`\} = \other % % Make sure that spaces turn into tokens that match what \doignoretext wants. \spaceisspace % % Count number of #1's that we've seen. \doignorecount = 0 % % Swallow text until we reach the matching `@end #1'. \dodoignore{#1}% } { \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. \obeylines % % \gdef\dodoignore#1{% % #1 contains the command name as a string, e.g., `ifinfo'. % % Define a command to find the next `@end #1'. \long\def\doignoretext##1^^M@end #1{% \doignoretextyyy##1^^M@#1\_STOP_}% % % And this command to find another #1 command, at the beginning of a % line. (Otherwise, we would consider a line `@c @ifset', for % example, to count as an @ifset for nesting.) \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% % % And now expand that command. \doignoretext ^^M% }% } \def\doignoreyyy#1{% \def\temp{#1}% \ifx\temp\empty % Nothing found. \let\next\doignoretextzzz \else % Found a nested condition, ... \advance\doignorecount by 1 \let\next\doignoretextyyy % ..., look for another. % If we're here, #1 ends with ^^M\ifinfo (for example). \fi \next #1% the token \_STOP_ is present just after this macro. } % We have to swallow the remaining "\_STOP_". % \def\doignoretextzzz#1{% \ifnum\doignorecount = 0 % We have just found the outermost @end. \let\next\enddoignore \else % Still inside a nested condition. \advance\doignorecount by -1 \let\next\doignoretext % Look for the next @end. \fi \next } % Finish off ignored text. { \obeylines% % Ignore anything after the last `@end #1'; this matters in verbatim % environments, where otherwise the newline after an ignored conditional % would result in a blank line in the output. \gdef\enddoignore#1^^M{\endgroup\ignorespaces}% } % @set VAR sets the variable VAR to an empty value. % @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. % % Since we want to separate VAR from REST-OF-LINE (which might be % empty), we can't just use \parsearg; we have to insert a space of our % own to delimit the rest of the line, and then take it out again if we % didn't need it. % We rely on the fact that \parsearg sets \catcode`\ =10. % \parseargdef\set{\setyyy#1 \endsetyyy} \def\setyyy#1 #2\endsetyyy{% {% \makevalueexpandable \def\temp{#2}% \edef\next{\gdef\makecsname{SET#1}}% \ifx\temp\empty \next{}% \else \setzzz#2\endsetzzz \fi }% } % Remove the trailing space \setxxx inserted. \def\setzzz#1 \endsetzzz{\next{#1}} % @clear VAR clears (i.e., unsets) the variable VAR. % \parseargdef\clear{% {% \makevalueexpandable \global\expandafter\let\csname SET#1\endcsname=\relax }% } % @value{foo} gets the text saved in variable foo. \def\value{\begingroup\makevalueexpandable\valuexxx} \def\valuexxx#1{\expandablevalue{#1}\endgroup} { \catcode`\-=\active \catcode`\_=\active % \gdef\makevalueexpandable{% \let\value = \expandablevalue % We don't want these characters active, ... \catcode`\-=\other \catcode`\_=\other % ..., but we might end up with active ones in the argument if % we're called from @code, as @code{@value{foo-bar_}}, though. % So \let them to their normal equivalents. \let-\normaldash \let_\normalunderscore } } \def\expandablevalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax {[No value for ``#1'']}% \message{Variable `#1', used in @value, is not set.}% \else \csname SET#1\endcsname \fi } % Like \expandablevalue, but completely expandable (the \message in the % definition above operates at the execution level of TeX). Used when % writing to auxiliary files, due to the expansion that \write does. % If flag is undefined, pass through an unexpanded @value command: maybe it % will be set by the time it is read back in. % % NB flag names containing - or _ may not work here. \def\dummyvalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax \string\value{#1}% \else \csname SET#1\endcsname \fi } % Used for @value's in index entries to form the sort key: expand the @value % if possible, otherwise sort late. \def\indexnofontsvalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax ZZZZZZZ% \else \csname SET#1\endcsname \fi } % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined % with @set. % % To get the special treatment we need for `@end ifset,' we call % \makecond and then redefine. % \makecond{ifset} \def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} \def\doifset#1#2{% {% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname SET#2\endcsname\relax #1% If not set, redefine \next. \fi \expandafter }\next } \def\ifsetfail{\doignore{ifset}} % @ifclear VAR ... @end executes the `...' iff VAR has never been % defined with @set, or has been undefined with @clear. % % The `\else' inside the `\doifset' parameter is a trick to reuse the % above code: if the variable is not set, do nothing, if it is set, % then redefine \next to \ifclearfail. % \makecond{ifclear} \def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} \def\ifclearfail{\doignore{ifclear}} % @ifcommandisdefined CMD ... @end executes the `...' if CMD (written % without the @) is in fact defined. We can only feasibly check at the % TeX level, so something like `mathcode' is going to considered % defined even though it is not a Texinfo command. % \makecond{ifcommanddefined} \def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}} % \def\doifcmddefined#1#2{{% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname #2\endcsname\relax #1% If not defined, \let\next as above. \fi \expandafter }\next } \def\ifcmddefinedfail{\doignore{ifcommanddefined}} % @ifcommandnotdefined CMD ... handled similar to @ifclear above. \makecond{ifcommandnotdefined} \def\ifcommandnotdefined{% \parsearg{\doifcmddefined{\else \let\next=\ifcmdnotdefinedfail}}} \def\ifcmdnotdefinedfail{\doignore{ifcommandnotdefined}} % Set the `txicommandconditionals' variable, so documents have a way to % test if the @ifcommand...defined conditionals are available. \set txicommandconditionals % @dircategory CATEGORY -- specify a category of the dir file % which this file should belong to. Ignore this in TeX. \let\dircategory=\comment % @defininfoenclose. \let\definfoenclose=\comment \message{indexing,} % Index generation facilities % Define \newwrite to be identical to plain tex's \newwrite % except not \outer, so it can be used within macros and \if's. \edef\newwrite{\makecsname{ptexnewwrite}} % \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{% \expandafter\chardef\csname#1indfile\endcsname=0 \expandafter\xdef\csname#1index\endcsname{% % Define @#1index \noexpand\doindex{#1}} } % @defindex foo == \newindex{foo} % \def\defindex{\parsearg\newindex} % Define @defcodeindex, like @defindex except put all entries in @code. % \def\defcodeindex{\parsearg\newcodeindex} % \def\newcodeindex#1{% \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. % % @syncodeindex foo bar similar, but put all entries made for index foo % inside @code. % \def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} \def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} % #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), % #3 the target index (bar). \def\dosynindex#1#2#3{% \requireopenindexfile{#3}% % redefine \fooindfile: \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname \expandafter\let\csname#2indfile\endcsname=\temp % redefine \fooindex: \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% } % Define \doindex, the driver for all index macros. % Argument #1 is generated by the calling \fooindex macro, % and it is the two-letter name of the index. \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\docodeindexxxx} \def\docodeindexxxx #1{\doind{\indexname}{\code{#1}}} % Used for the aux, toc and index files to prevent expansion of Texinfo % commands. % \def\atdummies{% \definedummyletter\@% \definedummyletter\ % \definedummyletter\{% \definedummyletter\}% \definedummyletter\&% % % Do the redefinitions. \definedummies \otherbackslash } % \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 % control characters, but is needed to separate the control word % from whatever follows. % % These can be used both for control words that take an argument and % those that do not. If it is followed by {arg} in the input, then % that will dutifully get written to the index (or wherever). % % For control letters, we have \definedummyletter, which omits the % space. % \def\definedummyword #1{\def#1{\string#1\space}}% \def\definedummyletter#1{\def#1{\string#1}}% \let\definedummyaccent\definedummyletter % Called from \atdummies to prevent the expansion of commands. % \def\definedummies{% % \let\commondummyword\definedummyword \let\commondummyletter\definedummyletter \let\commondummyaccent\definedummyaccent \commondummiesnofonts % \definedummyletter\_% \definedummyletter\-% % % Non-English letters. \definedummyword\AA \definedummyword\AE \definedummyword\DH \definedummyword\L \definedummyword\O \definedummyword\OE \definedummyword\TH \definedummyword\aa \definedummyword\ae \definedummyword\dh \definedummyword\exclamdown \definedummyword\l \definedummyword\o \definedummyword\oe \definedummyword\ordf \definedummyword\ordm \definedummyword\questiondown \definedummyword\ss \definedummyword\th % % Although these internal commands shouldn't show up, sometimes they do. \definedummyword\bf \definedummyword\gtr \definedummyword\hat \definedummyword\less \definedummyword\sf \definedummyword\sl \definedummyword\tclose \definedummyword\tt % \definedummyword\LaTeX \definedummyword\TeX % % Assorted special characters. \definedummyword\ampchar \definedummyword\atchar \definedummyword\arrow \definedummyword\backslashchar \definedummyword\bullet \definedummyword\comma \definedummyword\copyright \definedummyword\registeredsymbol \definedummyword\dots \definedummyword\enddots \definedummyword\entrybreak \definedummyword\equiv \definedummyword\error \definedummyword\euro \definedummyword\expansion \definedummyword\geq \definedummyword\guillemetleft \definedummyword\guillemetright \definedummyword\guilsinglleft \definedummyword\guilsinglright \definedummyword\lbracechar \definedummyword\leq \definedummyword\mathopsup \definedummyword\minus \definedummyword\ogonek \definedummyword\pounds \definedummyword\point \definedummyword\print \definedummyword\quotedblbase \definedummyword\quotedblleft \definedummyword\quotedblright \definedummyword\quoteleft \definedummyword\quoteright \definedummyword\quotesinglbase \definedummyword\rbracechar \definedummyword\result \definedummyword\sub \definedummyword\sup \definedummyword\textdegree % \definedummyword\subentry % % We want to disable all macros so that they are not expanded by \write. \macrolist \let\value\dummyvalue % \normalturnoffactive } % \commondummiesnofonts: common to \definedummies and \indexnofonts. % Define \commondummyletter, \commondummyaccent and \commondummyword before % using. Used for accents, font commands, and various control letters. % \def\commondummiesnofonts{% % Control letters and accents. \commondummyletter\!% \commondummyaccent\"% \commondummyaccent\'% \commondummyletter\*% \commondummyaccent\,% \commondummyletter\.% \commondummyletter\/% \commondummyletter\:% \commondummyaccent\=% \commondummyletter\?% \commondummyaccent\^% \commondummyaccent\`% \commondummyaccent\~% \commondummyword\u \commondummyword\v \commondummyword\H \commondummyword\dotaccent \commondummyword\ogonek \commondummyword\ringaccent \commondummyword\tieaccent \commondummyword\ubaraccent \commondummyword\udotaccent \commondummyword\dotless % % Texinfo font commands. \commondummyword\b \commondummyword\i \commondummyword\r \commondummyword\sansserif \commondummyword\sc \commondummyword\slanted \commondummyword\t % % Commands that take arguments. \commondummyword\abbr \commondummyword\acronym \commondummyword\anchor \commondummyword\cite \commondummyword\code \commondummyword\command \commondummyword\dfn \commondummyword\dmn \commondummyword\email \commondummyword\emph \commondummyword\env \commondummyword\file \commondummyword\image \commondummyword\indicateurl \commondummyword\inforef \commondummyword\kbd \commondummyword\key \commondummyword\math \commondummyword\option \commondummyword\pxref \commondummyword\ref \commondummyword\samp \commondummyword\strong \commondummyword\tie \commondummyword\U \commondummyword\uref \commondummyword\url \commondummyword\var \commondummyword\verb \commondummyword\w \commondummyword\xref } \let\indexlbrace\relax \let\indexrbrace\relax \let\indexatchar\relax \let\indexbackslash\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{% \let-\normaldash \let<\normalless } } % \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 % would be for a given command (usually its argument). % \def\indexnofonts{% % Accent commands should become @asis. \def\commondummyaccent##1{\let##1\asis}% % We can just ignore other control letters. \def\commondummyletter##1{\let##1\empty}% % All control words become @asis by default; overrides below. \let\commondummyword\commondummyaccent \commondummiesnofonts % % Don't no-op \tt, since it isn't a user-level command % and is used in the definitions of the active chars like <, >, |, etc. % Likewise with the other plain tex font commands. %\let\tt=\asis % \def\ { }% \def\@{@}% \def\_{\normalunderscore}% \def\-{}% @- shouldn't affect sorting % \uccode`\1=`\{ \uppercase{\def\{{1}}% \uccode`\1=`\} \uppercase{\def\}{1}}% \let\lbracechar\{% \let\rbracechar\}% % % Non-English letters. \def\AA{AA}% \def\AE{AE}% \def\DH{DZZ}% \def\L{L}% \def\OE{OE}% \def\O{O}% \def\TH{TH}% \def\aa{aa}% \def\ae{ae}% \def\dh{dzz}% \def\exclamdown{!}% \def\l{l}% \def\oe{oe}% \def\ordf{a}% \def\ordm{o}% \def\o{o}% \def\questiondown{?}% \def\ss{ss}% \def\th{th}% % \def\LaTeX{LaTeX}% \def\TeX{TeX}% % % Assorted special characters. \defglyph gives the control sequence a % definition that removes the {} that follows its use. \defglyph\atchar{@}% \defglyph\arrow{->}% \defglyph\bullet{bullet}% \defglyph\comma{,}% \defglyph\copyright{copyright}% \defglyph\dots{...}% \defglyph\enddots{...}% \defglyph\equiv{==}% \defglyph\error{error}% \defglyph\euro{euro}% \defglyph\expansion{==>}% \defglyph\geq{>=}% \defglyph\guillemetleft{<<}% \defglyph\guillemetright{>>}% \defglyph\guilsinglleft{<}% \defglyph\guilsinglright{>}% \defglyph\leq{<=}% \defglyph\lbracechar{\{}% \defglyph\minus{-}% \defglyph\point{.}% \defglyph\pounds{pounds}% \defglyph\print{-|}% \defglyph\quotedblbase{"}% \defglyph\quotedblleft{"}% \defglyph\quotedblright{"}% \defglyph\quoteleft{`}% \defglyph\quoteright{'}% \defglyph\quotesinglbase{,}% \defglyph\rbracechar{\}}% \defglyph\registeredsymbol{R}% \defglyph\result{=>}% \defglyph\textdegree{o}% % % 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 % writing an index entry, and texindex isn't prepared for an index sort entry % that starts with \. % % Since macro invocations are followed by braces, we can just redefine them % to take a single TeX argument. The case of a macro invocation that % goes to end-of-line is not handled. % \macrolist \let\value\indexnofontsvalue } \def\defglyph#1#2{\def#1##1{#2}} % see above % #1 is the index name, #2 is the entry text. \def\doind#1#2{% \iflinks {% % \requireopenindexfile{#1}% \edef\writeto{\csname#1indfile\endcsname}% % \def\indextext{#2}% \safewhatsit\doindwrite }% \fi } % 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} % Definition for writing index entry sort key. { \catcode`\-=13 \gdef\indexwritesortas{% \begingroup \indexnonalnumreappear \indexwritesortasxxx} \gdef\indexwritesortasxxx#1{% \xdef\indexsortkey{#1}\endgroup} } \def\indexwriteseealso#1{ \gdef\pagenumbertext{\string\seealso{#1}}% } \def\indexwriteseeentry#1{ \gdef\pagenumbertext{\string\seeentry{#1}}% } % The default definitions \def\sortas#1{}% \def\seealso#1{\i{\putwordSeeAlso}\ #1}% for sorted index file only \def\putwordSeeAlso{See also} \def\seeentry#1{\i{\putwordSee}\ #1}% for sorted index file only % Given index entry text like "aaa @subentry bbb @sortas{ZZZ}": % * Set \bracedtext to "{aaa}{bbb}" % * Set \fullindexsortkey to "aaa @subentry ZZZ" % * If @seealso occurs, set \pagenumbertext % \def\splitindexentry#1{% \gdef\fullindexsortkey{}% \xdef\bracedtext{}% \def\sep{}% \def\seealso##1{}% \def\seeentry##1{}% \expandafter\doindexsegment#1\subentry\finish\subentry } % append the results from the next segment \def\doindexsegment#1\subentry{% \def\segment{#1}% \ifx\segment\isfinish \else % % Fully expand the segment, throwing away any @sortas directives, and % trim spaces. \edef\trimmed{\segment}% \edef\trimmed{\expandafter\eatspaces\expandafter{\trimmed}}% % \xdef\bracedtext{\bracedtext{\trimmed}}% % % Get the string to sort by. Process the segment with all % font commands turned off. \bgroup \let\sortas\indexwritesortas \let\seealso\indexwriteseealso \let\seeentry\indexwriteseeentry \indexnofonts % The braces around the commands are recognized by texindex. \def\lbracechar{{\string\indexlbrace}}% \def\rbracechar{{\string\indexrbrace}}% \let\{=\lbracechar \let\}=\rbracechar \def\@{{\string\indexatchar}}% \def\atchar##1{\@}% \def\backslashchar{{\string\indexbackslash}}% \uccode`\~=`\\ \uppercase{\let~\backslashchar}% % \let\indexsortkey\empty \global\let\pagenumbertext\empty % Execute the segment and throw away the typeset output. This executes % any @sortas or @seealso commands in this segment. \setbox\dummybox = \hbox{\segment}% \ifx\indexsortkey\empty{% \indexnonalnumdisappear \xdef\trimmed{\segment}% \xdef\trimmed{\expandafter\eatspaces\expandafter{\trimmed}}% \xdef\indexsortkey{\trimmed}% \ifx\indexsortkey\empty\xdef\indexsortkey{ }\fi }\fi % % Append to \fullindexsortkey. \edef\tmp{\gdef\noexpand\fullindexsortkey{% \fullindexsortkey\sep\indexsortkey}}% \tmp \egroup \def\sep{\subentry}% % \expandafter\doindexsegment \fi } \def\isfinish{\finish}% \newbox\dummybox % used above \let\subentry\relax % Use \ instead of @ in index files. To support old texi2dvi and texindex. % This works without changing the escape character used in the toc or aux % files because the index entries are fully expanded here, and \string uses % the current value of \escapechar. \def\escapeisbackslash{\escapechar=`\\} % Use \ in index files by default. texi2dvi didn't support @ as the escape % character (as it checked for "\entry" in the files, and not "@entry"). When % the new version of texi2dvi has had a chance to become more prevalent, then % the escape character can change back to @ again. This should be an easy % change to make now because both @ and \ are only used as escape characters in % index files, never standing for themselves. % \set txiindexescapeisbackslash % Write the entry in \indextext to the index file. % \def\doindwrite{% \maybemarginindex % \atdummies % \expandafter\ifx\csname SETtxiindexescapeisbackslash\endcsname\relax\else \escapeisbackslash \fi % % For texindex which always views { and } as separators. \def\{{\lbracechar{}}% \def\}{\rbracechar{}}% \uccode`\~=`\\ \uppercase{\def~{\backslashchar{}}}% % % Split the entry into primary entry and any subentries, and get the index % sort key. \splitindexentry\indextext % % Set up the complete index entry, with both the sort key and % the original text, including any font commands. We write % three arguments to \entry to the .?? file (four in the % subentry case), texindex reduces to two when writing the .??s % sorted result. % \edef\temp{% \write\writeto{% \string\entry{\fullindexsortkey}% {\ifx\pagenumbertext\empty\noexpand\folio\else\pagenumbertext\fi}% \bracedtext}% }% \temp } % Put the index entry in the margin if desired (undocumented). \def\maybemarginindex{% \ifx\SETmarginindex\relax\else \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \relax\indextext}}% \fi } \let\SETmarginindex=\relax % Take care of unwanted page breaks/skips around a whatsit: % % If a skip is the last thing on the list now, preserve it % by backing up by \lastskip, doing the \write, then inserting % the skip again. Otherwise, the whatsit generated by the % \write or \pdfdest will make \lastskip zero. The result is that % sequences like this: % @end defun % @tindex whatever % @defun ... % will have extra space inserted, because the \medbreak in the % start of the @defun won't see the skip inserted by the @end of % the previous defun. % % But don't do any of this if we're not in vertical mode. We % don't want to do a \vskip and prematurely end a paragraph. % % Avoid page breaks due to these extra skips, too. % % But wait, there is a catch there: % We'll have to check whether \lastskip is zero skip. \ifdim is not % sufficient for this purpose, as it ignores stretch and shrink parts % of the skip. The only way seems to be to check the textual % representation of the skip. % % The following is almost like \def\zeroskipmacro{0.0pt} except that % the ``p'' and ``t'' characters have catcode \other, not 11 (letter). % \edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} % \newskip\whatsitskip \newcount\whatsitpenalty % % ..., ready, GO: % \def\safewhatsit#1{\ifhmode #1% \else % \lastskip and \lastpenalty cannot both be nonzero simultaneously. \whatsitskip = \lastskip \edef\lastskipmacro{\the\lastskip}% \whatsitpenalty = \lastpenalty % % If \lastskip is nonzero, that means the last item was a % skip. And since a skip is discardable, that means this % -\whatsitskip glue we're inserting is preceded by a % non-discardable item, therefore it is not a potential % breakpoint, therefore no \nobreak needed. \ifx\lastskipmacro\zeroskipmacro \else \vskip-\whatsitskip \fi % #1% % \ifx\lastskipmacro\zeroskipmacro % If \lastskip was zero, perhaps the last item was a penalty, and % perhaps it was >=10000, e.g., a \nobreak. In that case, we want % to re-insert the same penalty (values >10000 are used for various % signals); since we just inserted a non-discardable item, any % following glue (such as a \parskip) would be a breakpoint. For example: % @deffn deffn-whatever % @vindex index-whatever % Description. % would allow a break between the index-whatever whatsit % and the "Description." paragraph. \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi \else % On the other hand, if we had a nonzero \lastskip, % this make-up glue would be preceded by a non-discardable item % (the whatsit from the \write), so we must insert a \nobreak. \nobreak\vskip\whatsitskip \fi \fi} % The index entry written in the file actually looks like % \entry {sortstring}{page}{topic} % or % \entry {sortstring}{page}{topic}{subtopic} % The texindex program reads in these files and writes files % containing these kinds of lines: % \initial {c} % before the first topic whose initial is c % \entry {topic}{pagelist} % for a topic that is used without subtopics % \primary {topic} % \entry {topic}{} % for the beginning of a topic that is used with subtopics % \secondary {subtopic}{pagelist} % for each subtopic. % \secondary {subtopic}{} % for a subtopic with sub-subtopics % \tertiary {subtopic}{subsubtopic}{pagelist} % for each sub-subtopic. % Define the user-accessible indexing commands % @findex, @vindex, @kindex, @cindex. \def\findex {\fnindex} \def\kindex {\kyindex} \def\cindex {\cpindex} \def\vindex {\vrindex} \def\tindex {\tpindex} \def\pindex {\pgindex} % Define the macros used in formatting output of the sorted index material. % @printindex causes a particular index (the ??s file) to get printed. % It does not print any chapter heading (usually an @unnumbered). % \parseargdef\printindex{\begingroup \dobreak \chapheadingskip{10000}% % \smallfonts \rm \tolerance = 9500 \plainfrenchspacing \everypar = {}% don't want the \kern\-parindent from indentation suppression. % % See comment in \requireopenindexfile. \def\indexname{#1}\ifx\indexname\indexisfl\def\indexname{f1}\fi % % See if the index file exists and is nonempty. \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 % 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 \thisline \ifeof 1 \putwordIndexIsEmpty \else \expandafter\printindexzz\thisline\relax\relax\finish% \fi \fi \closein 1 \endgroup} % If the index file starts with a backslash, forgo reading the index % file altogether. If somebody upgrades texinfo.tex they may still have % old index files using \ as the escape character. Reading this would % at best lead to typesetting garbage, at worst a TeX syntax error. \def\printindexzz#1#2\finish{% \expandafter\ifx\csname SETtxiindexescapeisbackslash\endcsname\relax \uccode`\~=`\\ \uppercase{\if\noexpand~}\noexpand#1 \expandafter\ifx\csname SETtxiskipindexfileswithbackslash\endcsname\relax \errmessage{% ERROR: A sorted index file in an obsolete format was skipped. To fix this problem, please upgrade your version of 'texi2dvi' or 'texi2pdf' to that at . If you are using an old version of 'texindex' (part of the Texinfo distribution), you may also need to upgrade to a newer version (at least 6.0). You may be able to typeset the index if you run 'texindex \jobname.\indexname' yourself. You could also try setting the 'txiindexescapeisbackslash' flag by running a command like 'texi2dvi -t "@set txiindexescapeisbackslash" \jobname.texi'. If you do this, Texinfo will try to use index files in the old format. If you continue to have problems, deleting the index files and starting again might help (with 'rm \jobname.?? \jobname.??s')% }% \else (Skipped sorted index file in obsolete format) \fi \else \begindoublecolumns \input \jobname.\indexname s \enddoublecolumns \fi \else \begindoublecolumns \catcode`\\=0\relax \catcode`\@=12\relax \input \jobname.\indexname s \enddoublecolumns \fi } % These macros are used by the sorted index file itself. % Change them to control the appearance of the index. {\catcode`\/=13 \catcode`\-=13 \catcode`\^=13 \catcode`\~=13 \catcode`\_=13 \catcode`\|=13 \catcode`\<=13 \catcode`\>=13 \catcode`\+=13 \catcode`\"=13 \catcode`\$=3 \gdef\initialglyphs{% % special control sequences used in the index sort key \let\indexlbrace\{% \let\indexrbrace\}% \let\indexatchar\@% \def\indexbackslash{\math{\backslash}}% % % 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. \uccode`\~=`\\ \uppercase{\def~{\math{\backslash}}} % % In case @\ is used for backslash \uppercase{\let\\=~} % 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 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 % to column. It still won't often be perfect, because of the stretch % we need before each entry, but it's better. % % No shrink because it confuses \balancecolumns. \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. % \def\entry{% \begingroup % % Start a new paragraph if necessary, so our assignments below can't % affect previous text. \par % % No extra space above this paragraph. \parskip = 0in % % 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}% An undocumented command % % Swallow the left brace of the text (first parameter): \afterassignment\doentry \let\temp = } \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. } {\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. % % 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 % \null\nobreak\indexdotfill % Have leaders before the page number. % \ifpdforxetex \pdfgettoks#1.% \hskip\skip\thinshrinkable\the\toksA \else \hskip\skip\thinshrinkable #1% \fi \fi \egroup % end \boxA \ifdim\wd\boxB = 0pt \noindent\unhbox\boxA\par \nobreak \else\bgroup % We want the text of the entries to be aligned to the left, and the % page numbers to be aligned to the right. % \parindent = 0pt \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 % \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 % Try to split the text roughly evenly. \dimen@ will be the length of % the first line. \dimen@ = 0.7\dimen@ \dimen@ii = \hsize \ifnum\dimen@>\dimen@ii % If the entry is too long (for example, if it needs more than % two lines), use all the space in the first line. \dimen@ = \dimen@ii \fi \advance\leftskip by 0pt plus 1fill % ragged right \advance \dimen@ by 1\rightskip \parshape = 2 0pt \dimen@ 0em \dimen@ii % Ideally we'd add a finite glue at the end of the first line only, % instead of using \parshape with explicit line lengths, but TeX % doesn't seem to provide a way to do such a thing. % % Indent all lines but the first one. \advance\leftskip by 1em \advance\parindent by -1em \fi\fi \indent % start paragraph \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 }} \newskip\thinshrinkable \skip\thinshrinkable=.15em minus .15em % 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 1filll} \def\primary #1{\line{#1\hfil}} \def\secondary{\indententry{0.5cm}} \def\tertiary{\indententry{1cm}} \def\indententry#1#2#3{% \bgroup \leftskip=#1 \entry{#2}{#3}% \egroup } % 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 % private names \newbox\partialpage \newdimen\doublecolumnhsize \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 = {% \savetopmark % \global\setbox\partialpage = \vbox{% % Unvbox the main output page. \unvbox\PAGE \kern-\topskip \kern\baselineskip }% }% \eject % run that output routine to set \partialpage % % Use the double-column output routine for subsequent pages. \output = {\doublecolumnout}% % % Change the page size parameters. We could do this once outside this % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 % format, but then we repeat the same computation. Repeating a couple % of assignments once per index is clearly meaningless for the % execution time, so we may as well do it in one place. % % First we halve the line length, less a little for the gutter between % the columns. We compute the gutter based on the line length, so it % changes automatically with the paper format. The magic constant % below is chosen so that the gutter has the same value (well, +-<1pt) % as it did when we hard-coded it. % % We put the result in a separate register, \doublecolumhsize, so we % can restore it in \pagesofar, after \hsize itself has (potentially) % been clobbered. % \doublecolumnhsize = \hsize \advance\doublecolumnhsize by -.04154\hsize \divide\doublecolumnhsize by 2 \hsize = \doublecolumnhsize % % Get the available space for the double columns -- the normal % (undoubled) page height minus any material left over from the % previous page. \advance\vsize by -\ht\partialpage \vsize = 2\vsize % % For the benefit of balancing columns \advance\baselineskip by 0pt plus 0.5pt } % The double-column output routine for all double-column pages except % the last, which is done by \balancecolumns. % \def\doublecolumnout{% % \savetopmark \splittopskip=\topskip \splitmaxdepth=\maxdepth \dimen@ = \vsize \divide\dimen@ by 2 % % box0 will be the left-hand column, box2 the right. \setbox0=\vsplit\PAGE to\dimen@ \setbox2=\vsplit\PAGE to\dimen@ \global\advance\vsize by 2\ht\partialpage \onepageout\pagesofar % empty except for the first time we are called \unvbox\PAGE \penalty\outputpenalty } % % Re-output the contents of the output page -- any previous material, % followed by the two boxes we just split, in box0 and box2. \def\pagesofar{% \unvbox\partialpage % \hsize = \doublecolumnhsize \wd0=\hsize \wd2=\hsize \hbox to\txipagewidth{\box0\hfil\box2}% } % Finished 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 % following situation: % % The last section of the index consists only of a single entry. % Before this section, \pagetotal is less than \pagegoal, so no % break occurs before the last section starts. However, the last % section, consisting of \initial and the single \entry, does not % fit on the page and has to be broken off. Without the following % penalty the page builder will not be exercised until \eject % below, and by that time we'll already have changed the output % routine to the \balancecolumns version, so the next-to-last % double-column page will be processed with \balancecolumns, which % is wrong: The two columns will go to the main vertical list, with % the broken-off section in the recent contributions. As soon as % the output routine finishes, TeX starts reconsidering the page % break. The two columns and the broken-off section both fit on the % page, because the two columns now take up only half of the page % 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 \txipageheight (see % \pagebody), causing an overfull box. % % Note that glue won't work here, because glue does not exercise the % page builder, unlike penalties (see The TeXbook, pp. 280-281). \penalty0 % \output = {% % Split the last of the double-column material. \savetopmark \balancecolumns }% \eject % call the \output just set \ifdim\pagetotal=0pt % Having called \balancecolumns once, we do not % want to call it again. Therefore, reset \output to its normal % definition right away. \global\output=\expandafter{\the\defaultoutput} % \endgroup % started in \begindoublecolumns % 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 % typesetting, so reset \pagegoal to the normal \vsize. \global\vsize = \txipageheight % \pagegoal = \txipageheight % \else % We had some left-over material. This might happen when \doublecolumnout % is called in \balancecolumns. Try again. \expandafter\enddoublecolumns \fi } \newbox\balancedcolumns \setbox\balancedcolumns=\vbox{shouldnt see this}% % % Only called for the last of the double column material. \doublecolumnout % does the others. \def\balancecolumns{% \setbox0 = \vbox{\unvbox\PAGE}% like \box255 but more efficient, see p.120. \dimen@ = \ht0 \ifdim\dimen@<7\baselineskip % Don't split a short final column in two. \setbox2=\vbox{}% \global\setbox\balancedcolumns=\vbox{\pagesofar}% \else % double the leading vertical space \advance\dimen@ by \topskip \advance\dimen@ by-\baselineskip \divide\dimen@ by 2 % target to split to \dimen@ii = \dimen@ \splittopskip = \topskip % Loop until left column is at least as high as the right column. {% \vbadness = 10000 \loop \global\setbox3 = \copy0 \global\setbox1 = \vsplit3 to \dimen@ \ifdim\ht1<\ht3 \global\advance\dimen@ by 1pt \repeat }% % Now the left column is in box 1, and the right column in box 3. % % Check whether the left column has come out higher than the page itself. % (Note that we have doubled \vsize for the double columns, so % the actual height of the page is 0.5\vsize). \ifdim2\ht1>\vsize % It appears that we have been called upon to balance too much material. % Output some of it with \doublecolumnout, leaving the rest on the page. \setbox\PAGE=\box0 \doublecolumnout \else % Compare the heights of the two columns. \ifdim4\ht1>5\ht3 % Column heights are too different, so don't make their bottoms % flush with each other. \setbox2=\vbox to \ht1 {\unvbox3\vfill}% \setbox0=\vbox to \ht1 {\unvbox1\vfill}% \else % Make column bottoms flush with each other. \setbox2=\vbox to\ht1{\unvbox3\unskip}% \setbox0=\vbox to\ht1{\unvbox1\unskip}% \fi \global\setbox\balancedcolumns=\vbox{\pagesofar}% \fi \fi % } \catcode`\@ = \other \message{sectioning,} % Chapters, sections, etc. % Let's start with @part. \outer\parseargdef\part{\partzzz{#1}} \def\partzzz#1{% \chapoddpage \null \vskip.3\vsize % move it down on the page a bit \begingroup \noindent \titlefonts\rm #1\par % the text \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 } % \unnumberedno is an oxymoron. But we count the unnumbered % sections so that we can refer to them unambiguously in the pdf % outlines by their "section number". We avoid collisions with chapter % numbers by starting them at 10000. (If a document ever has 10000 % chapters, we're in trouble anyway, I'm sure.) \newcount\unnumberedno \unnumberedno = 10000 \newcount\chapno \newcount\secno \secno=0 \newcount\subsecno \subsecno=0 \newcount\subsubsecno \subsubsecno=0 % This counter is funny since it counts through charcodes of letters A, B, ... \newcount\appendixno \appendixno = `\@ % % \def\appendixletter{\char\the\appendixno} % We do the following ugly conditional instead of the above simple % construct for the sake of pdftex, which needs the actual % letter in the expansion, not just typeset. % \def\appendixletter{% \ifnum\appendixno=`A A% \else\ifnum\appendixno=`B B% \else\ifnum\appendixno=`C C% \else\ifnum\appendixno=`D D% \else\ifnum\appendixno=`E E% \else\ifnum\appendixno=`F F% \else\ifnum\appendixno=`G G% \else\ifnum\appendixno=`H H% \else\ifnum\appendixno=`I I% \else\ifnum\appendixno=`J J% \else\ifnum\appendixno=`K K% \else\ifnum\appendixno=`L L% \else\ifnum\appendixno=`M M% \else\ifnum\appendixno=`N N% \else\ifnum\appendixno=`O O% \else\ifnum\appendixno=`P P% \else\ifnum\appendixno=`Q Q% \else\ifnum\appendixno=`R R% \else\ifnum\appendixno=`S S% \else\ifnum\appendixno=`T T% \else\ifnum\appendixno=`U U% \else\ifnum\appendixno=`V V% \else\ifnum\appendixno=`W W% \else\ifnum\appendixno=`X X% \else\ifnum\appendixno=`Y Y% \else\ifnum\appendixno=`Z Z% % The \the is necessary, despite appearances, because \appendixletter is % expanded while writing the .toc file. \char\appendixno is not % expandable, thus it is written literally, thus all appendixes come out % with the same letter (or @) in the toc without it. \else\char\the\appendixno \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} % Each @chapter defines these (using marks) as the number+name, number % and name of the chapter. Page headings and footings can use % these. @section does likewise. \def\thischapter{} \def\thischapternum{} \def\thischaptername{} \def\thissection{} \def\thissectionnum{} \def\thissectionname{} \newcount\absseclevel % used to calculate proper heading level \newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count % @raisesections: treat @section as chapter, @subsection as section, etc. \def\raisesections{\global\advance\secbase by -1} % @lowersections: treat @chapter as section, @section as subsection, etc. \def\lowersections{\global\advance\secbase by 1} % we only have subsub. \chardef\maxseclevel = 3 % % A numbered section within an unnumbered changes to unnumbered too. % To achieve this, remember the "biggest" unnum. sec. we are currently in: \chardef\unnlevel = \maxseclevel % % Trace whether the current chapter is an appendix or not: % \chapheadtype is "N" or "A", unnumbered chapters are ignored. \def\chapheadtype{N} % Choose a heading macro % #1 is heading type % #2 is heading level % #3 is text for heading \def\genhead#1#2#3{% % Compute the abs. sec. level: \absseclevel=#2 \advance\absseclevel by \secbase % Make sure \absseclevel doesn't fall outside the range: \ifnum \absseclevel < 0 \absseclevel = 0 \else \ifnum \absseclevel > 3 \absseclevel = 3 \fi \fi % The heading type: \def\headtype{#1}% \if \headtype U% \ifnum \absseclevel < \unnlevel \chardef\unnlevel = \absseclevel \fi \else % Check for appendix sections: \ifnum \absseclevel = 0 \edef\chapheadtype{\headtype}% \else \if \headtype A\if \chapheadtype N% \errmessage{@appendix... within a non-appendix chapter}% \fi\fi \fi % Check for numbered within unnumbered: \ifnum \absseclevel > \unnlevel \def\headtype{U}% \else \chardef\unnlevel = 3 \fi \fi % Now print the heading: \if \headtype U% \ifcase\absseclevel \unnumberedzzz{#3}% \or \unnumberedseczzz{#3}% \or \unnumberedsubseczzz{#3}% \or \unnumberedsubsubseczzz{#3}% \fi \else \if \headtype A% \ifcase\absseclevel \appendixzzz{#3}% \or \appendixsectionzzz{#3}% \or \appendixsubseczzz{#3}% \or \appendixsubsubseczzz{#3}% \fi \else \ifcase\absseclevel \chapterzzz{#3}% \or \seczzz{#3}% \or \numberedsubseczzz{#3}% \or \numberedsubsubseczzz{#3}% \fi \fi \fi \suppressfirstparagraphindent } % an interface: \def\numhead{\genhead N} \def\apphead{\genhead A} \def\unnmhead{\genhead U} % @chapter, @appendix, @unnumbered. Increment top-level counter, reset % all lower-level sectioning counters to zero. % % Also set \chaplevelprefix, which we prepend to @float sequence numbers % (e.g., figures), q.v. By default (before any chapter), that is empty. \let\chaplevelprefix = \empty % \outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz \def\chapterzzz#1{% % section resetting is \global in case the chapter is in a group, such % as an @include file. \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\chapno by 1 % % Used for \float. \gdef\chaplevelprefix{\the\chapno.}% \resetallfloatnos % % \putwordChapter can contain complex things in translations. \toks0=\expandafter{\putwordChapter}% \message{\the\toks0 \space \the\chapno}% % % Write the actual heading. \chapmacro{#1}{Ynumbered}{\the\chapno}% % % So @section and the like are numbered underneath this chapter. \global\let\section = \numberedsec \global\let\subsection = \numberedsubsec \global\let\subsubsection = \numberedsubsubsec } \outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz % \def\appendixzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\appendixno by 1 \gdef\chaplevelprefix{\appendixletter.}% \resetallfloatnos % % \putwordAppendix can contain complex things in translations. \toks0=\expandafter{\putwordAppendix}% \message{\the\toks0 \space \appendixletter}% % \chapmacro{#1}{Yappendix}{\appendixletter}% % \global\let\section = \appendixsec \global\let\subsection = \appendixsubsec \global\let\subsubsection = \appendixsubsubsec } % normally unnmhead0 calls unnumberedzzz: \outer\parseargdef\unnumbered{\unnmhead0{#1}} \def\unnumberedzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\unnumberedno by 1 % % Since an unnumbered has no number, no prefix for figures. \global\let\chaplevelprefix = \empty \resetallfloatnos % % This used to be simply \message{#1}, but TeX fully expands the % argument to \message. Therefore, if #1 contained @-commands, TeX % expanded them. For example, in `@unnumbered The @cite{Book}', TeX % expanded @cite (which turns out to cause errors because \cite is meant % to be executed, not expanded). % % Anyway, we don't want the fully-expanded definition of @cite to appear % as a result of the \message, we just want `@cite' itself. We use % \the to achieve this: TeX expands \the only once, % simply yielding the contents of . (We also do this for % the toc entries.) \toks0 = {#1}% \message{(\the\toks0)}% % \chapmacro{#1}{Ynothing}{\the\unnumberedno}% % \global\let\section = \unnumberedsec \global\let\subsection = \unnumberedsubsec \global\let\subsubsection = \unnumberedsubsubsec } % @centerchap is like @unnumbered, but the heading is centered. \outer\parseargdef\centerchap{% \let\centerparametersmaybe = \centerparameters \unnmhead0{#1}% \let\centerparametersmaybe = \relax } % @top is like @unnumbered. \let\top\unnumbered % Sections. % \outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz \def\seczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% } % normally calls appendixsectionzzz: \outer\parseargdef\appendixsection{\apphead1{#1}} \def\appendixsectionzzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% } \let\appendixsec\appendixsection % normally calls unnumberedseczzz: \outer\parseargdef\unnumberedsec{\unnmhead1{#1}} \def\unnumberedseczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% } % Subsections. % % normally calls numberedsubseczzz: \outer\parseargdef\numberedsubsec{\numhead2{#1}} \def\numberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% } % normally calls appendixsubseczzz: \outer\parseargdef\appendixsubsec{\apphead2{#1}} \def\appendixsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno}% } % normally calls unnumberedsubseczzz: \outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} \def\unnumberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno}% } % Subsubsections. % % normally numberedsubsubseczzz: \outer\parseargdef\numberedsubsubsec{\numhead3{#1}} \def\numberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynumbered}% {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% } % normally appendixsubsubseczzz: \outer\parseargdef\appendixsubsubsec{\apphead3{#1}} \def\appendixsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% } % normally unnumberedsubsubseczzz: \outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} \def\unnumberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% } % These macros control what the section commands do, according % to what kind of chapter we are in (ordinary, appendix, or unnumbered). % Define them by default for a numbered chapter. \let\section = \numberedsec \let\subsection = \numberedsubsec \let\subsubsection = \numberedsubsubsec % Define @majorheading, @heading and @subheading \def\majorheading{% {\advance\chapheadingskip by 10pt \chapbreak }% \parsearg\chapheadingzzz } \def\chapheading{\chapbreak \parsearg\chapheadingzzz} \def\chapheadingzzz#1{% \vbox{\chapfonts \raggedtitlesettings #1\par}% \nobreak\bigskip \nobreak \suppressfirstparagraphindent } % @heading, @subheading, @subsubheading. \parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} % These macros generate a chapter, section, etc. heading only % (including whitespace, linebreaking, etc. around it), % given all the information in convenient, parsed form. % Args are the skip and penalty (usually negative) \def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} % Parameter controlling skip before chapter headings (if needed) \newskip\chapheadingskip % 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. \def\chapoddpage{% \chappager \ifodd\pageno \else \begingroup \headingsoff \null \chappager \endgroup \fi } \parseargdef\setchapternewpage{\csname CHAPPAG#1\endcsname} \def\CHAPPAGoff{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chapbreak \global\let\pagealignmacro=\chappager} \def\CHAPPAGon{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chappager \global\let\pagealignmacro=\chappager \global\def\HEADINGSon{\HEADINGSsingle}} \def\CHAPPAGodd{% \global\let\contentsalignmacro = \chapoddpage \global\let\pchapsepmacro=\chapoddpage \global\let\pagealignmacro=\chapoddpage \global\def\HEADINGSon{\HEADINGSdouble}} \CHAPPAGon % \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\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 % Insert the first mark before the heading break (see notes for \domark). \let\prevchapterdefs=\currentchapterdefs \let\prevsectiondefs=\currentsectiondefs \gdef\currentsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}% \gdef\thissection{}}% % \def\temptype{#2}% \ifx\temptype\Ynothingkeyword \gdef\currentchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{\thischaptername}}% \else\ifx\temptype\Yomitfromtockeyword \gdef\currentchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{}}% \else\ifx\temptype\Yappendixkeyword \toks0={#1}% \xdef\currentchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\appendixletter}% % \noexpand\putwordAppendix avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thischapter{\noexpand\putwordAppendix{} \noexpand\thischapternum: \noexpand\thischaptername}% }% \else \toks0={#1}% \xdef\currentchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\the\chapno}% % \noexpand\putwordChapter avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thischapter{\noexpand\putwordChapter{} \noexpand\thischapternum: \noexpand\thischaptername}% }% \fi\fi\fi % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert the chapter heading break. \pchapsepmacro % % Now the second mark, after the heading break. No break points % between here and the heading. \let\prevchapterdefs=\currentchapterdefs \let\prevsectiondefs=\currentsectiondefs \domark % {% \chapfonts \rm \let\footnote=\errfootnoteheading % give better error message % % Have to define \currentsection before calling \donoderef, because the % xref code eventually uses it. On the other hand, it has to be called % after \pchapsepmacro, or the headline will change too soon. \gdef\currentsection{#1}% % % Only insert the separating space if we have a chapter/appendix % number, and don't print the unnumbered ``number''. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unnchap}% \else\ifx\temptype\Yomitfromtockeyword \setbox0 = \hbox{}% contents like unnumbered, but no toc entry \def\toctype{omit}% \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% \def\toctype{app}% \else \setbox0 = \hbox{#3\enspace}% \def\toctype{numchap}% \fi\fi\fi % % Write the toc entry for this chapter. Must come before the % \donoderef, because we include the current node name in the toc % entry, and \donoderef resets it to empty. \writetocentry{\toctype}{#1}{#3}% % % For pdftex, we have to write out the node definition (aka, make % the pdfdest) after any page break, but before the actual text has % been typeset. If the destination for the pdf outline is after the % text, then jumping from the outline may wind up with the text not % being visible, for instance under high magnification. \donoderef{#2}% % % Typeset the actual heading. \nobreak % Avoid page breaks at the interline glue. \vbox{\raggedtitlesettings \hangindent=\wd0 \centerparametersmaybe \unhbox0 #1\par}% }% \nobreak\bigskip % no page break after a chapter title \nobreak } % @centerchap -- centered and unnumbered. \let\centerparametersmaybe = \relax \def\centerparameters{% \advance\rightskip by 3\rightskip \leftskip = \rightskip \parfillskip = 0pt } % Section titles. These macros combine the section number parts and % call the generic \sectionheading to do the printing. % \newskip\secheadingskip \def\secheadingbreak{\dobreak \secheadingskip{-1000}} % Subsection titles. \newskip\subsecheadingskip \def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} % Subsubsection titles. \def\subsubsecheadingskip{\subsecheadingskip} \def\subsubsecheadingbreak{\subsecheadingbreak} % Print any size, any type, section title. % % #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{% {% \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 \rm % % Insert first mark before the heading break (see notes for \domark). \let\prevsectiondefs=\currentsectiondefs \ifx\temptype\Ynothingkeyword \ifx\sectionlevel\seckeyword \gdef\currentsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}% \gdef\thissection{\thissectionname}}% \fi \else\ifx\temptype\Yomitfromtockeyword % Don't redefine \thissection. \else\ifx\temptype\Yappendixkeyword \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\currentsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% % \noexpand\putwordSection avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thissection{\noexpand\putwordSection{} \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi \else \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\currentsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% % \noexpand\putwordSection avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thissection{\noexpand\putwordSection{} \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi \fi\fi\fi % % Go into vertical mode. Usually we'll already be there, but we % don't want the following whatsit to end up in a preceding paragraph % if the document didn't happen to have a blank line. \par % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert space above the heading. \csname #2headingbreak\endcsname % % Now the second mark, after the heading break. No break points % between here and the heading. \global\let\prevsectiondefs=\currentsectiondefs \domark % % Only insert the space after the number if we have a section number. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unn}% \gdef\currentsection{#1}% \else\ifx\temptype\Yomitfromtockeyword % for @headings -- no section number, don't include in toc, % and don't redefine \currentsection. \setbox0 = \hbox{}% \def\toctype{omit}% \let\sectionlevel=\empty \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{#4\enspace}% \def\toctype{app}% \gdef\currentsection{#1}% \else \setbox0 = \hbox{#4\enspace}% \def\toctype{num}% \gdef\currentsection{#1}% \fi\fi\fi % % Write the toc entry (before \donoderef). See comments in \chapmacro. \writetocentry{\toctype\sectionlevel}{#1}{#4}% % % Write the node reference (= pdf destination for pdftex). % Again, see comments in \chapmacro. \donoderef{#3}% % % Interline glue will be inserted when the vbox is completed. % That glue will be a valid breakpoint for the page, since it'll be % preceded by a whatsit (usually from the \donoderef, or from the % \writetocentry if there was no node). We don't want to allow that % break, since then the whatsits could end up on page n while the % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000. \nobreak % % Output the actual section heading. \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright \hangindent=\wd0 % zero if no section number \unhbox0 #1}% }% % Add extra space after the heading -- half of whatever came above it. % Don't allow stretch, though. \kern .5 \csname #2headingskip\endcsname % % Do not let the kern be a potential breakpoint, as it would be if it % was followed by glue. \nobreak % % We'll almost certainly start a paragraph next, so don't let that % glue accumulate. (Not a breakpoint because it's preceded by a % discardable item.) However, when a paragraph is not started next % (\startdefun, \cartouche, \center, etc.), this needs to be wiped out % or the negative glue will cause weirdly wrong output, typically % obscuring the section heading with something else. \vskip-\parskip % % This is so the last item on the main vertical list is a known % \penalty > 10000, so \startdefun, etc., can recognize the situation % and do the needful. \penalty 10001 } \message{toc,} % Table of contents. \newwrite\tocfile % Write an entry to the toc file, opening it if necessary. % Called from @chapter, etc. % % Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} % We append the current node name (if any) and page number as additional % arguments for the \{chap,sec,...}entry macros which will eventually % read this. The node name is used in the pdf outlines as the % destination to jump to. % % We open the .toc file for writing here instead of at @setfilename (or % any other fixed time) so that @contents can be anywhere in the document. % But if #1 is `omit', then we don't do anything. This is used for the % table of contents chapter openings themselves. % \newif\iftocfileopened \def\omitkeyword{omit}% % \def\writetocentry#1#2#3{% \edef\writetoctype{#1}% \ifx\writetoctype\omitkeyword \else \iftocfileopened\else \immediate\openout\tocfile = \jobname.toc \global\tocfileopenedtrue \fi % \iflinks {\atdummies \edef\temp{% \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}% \temp }% \fi \fi % % Tell \shipout to create a pdf destination on each page, if we're % writing pdf. These are used in the table of contents. We can't % just write one on every page because the title pages are numbered % 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'. \ifpdforxetex \global\pdfmakepagedesttrue \fi } % These characters do not print properly in the Computer Modern roman % fonts, so we must take special care. This is more or less redundant % with the Texinfo input format setup at the end of this file. % \def\activecatcodes{% \catcode`\"=\active \catcode`\$=\active \catcode`\<=\active \catcode`\>=\active \catcode`\\=\active \catcode`\^=\active \catcode`\_=\active \catcode`\|=\active \catcode`\~=\active } % Read the toc file, which is essentially Texinfo input. \def\readtocfile{% \setupdatafile \activecatcodes \input \tocreadfilename } \newskip\contentsrightmargin \contentsrightmargin=1in \newcount\savepageno \newcount\lastnegativepageno \lastnegativepageno = -1 % Prepare to read what we've written to \tocfile. % \def\startcontents#1{% % If @setchapternewpage on, and @headings double, the contents should % start on an odd page, unlike chapters. Thus, we maintain % \contentsalignmacro in parallel with \pagealignmacro. % From: Torbjorn Granlund \contentsalignmacro \immediate\closeout\tocfile % % Don't need to put `Contents' or `Short Contents' in the headline. % It is abundantly clear what they are. \chapmacro{#1}{Yomitfromtoc}{}% % \savepageno = \pageno \begingroup % Set up to handle contents files properly. \raggedbottom % Worry more about breakpoints than the bottom. \entryrightmargin=\contentsrightmargin % Don't use the full line length. % % Roman numerals for page numbers. \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi } % redefined for the two-volume lispref. We always output on % \jobname.toc even if this is redefined. % \def\tocreadfilename{\jobname.toc} % Normal (long) toc. % \def\contents{% \startcontents{\putwordTOC}% \openin 1 \tocreadfilename\space \ifeof 1 \else \readtocfile \fi \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \ifeof 1 \else \pdfmakeoutlines \fi \closein 1 \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } % And just the chapters. \def\summarycontents{% \startcontents{\putwordShortTOC}% % \let\partentry = \shortpartentry \let\numchapentry = \shortchapentry \let\appentry = \shortchapentry \let\unnchapentry = \shortunnchapentry % We want a true roman here for the page numbers. \secfonts \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl \let\tt=\shortconttt \rm \hyphenpenalty = 10000 \advance\baselineskip by 1pt % Open it up a little. \def\numsecentry##1##2##3##4{} \let\appsecentry = \numsecentry \let\unnsecentry = \numsecentry \let\numsubsecentry = \numsecentry \let\appsubsecentry = \numsecentry \let\unnsubsecentry = \numsecentry \let\numsubsubsecentry = \numsecentry \let\appsubsubsecentry = \numsecentry \let\unnsubsubsecentry = \numsecentry \openin 1 \tocreadfilename\space \ifeof 1 \else \readtocfile \fi \closein 1 \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } \let\shortcontents = \summarycontents % Typeset the label for a chapter or appendix for the short contents. % The arg is, e.g., `A' for an appendix, or `3' for a chapter. % \def\shortchaplabel#1{% % This space should be enough, since a single number is .5em, and the % widest letter (M) is 1em, at least in the Computer Modern fonts. % But use \hss just in case. % (This space doesn't include the extra space that gets added after % the label; that gets put in by \shortchapentry above.) % % We'd like to right-justify chapter numbers, but that looks strange % with appendix letters. And right-justifying numbers and % left-justifying letters looks strange when there is less than 10 % chapters. Have to read the whole toc once to know how many chapters % there are before deciding ... \hbox to 1em{#1\hss}% } % These macros generate individual entries in the table of contents. % The first argument is the chapter or section name. % The last argument is the page number. % The arguments in between are the chapter number, section number, ... % Parts, in the main contents. Replace the part number, which doesn't % exist, with an empty box. Let's hope all the numbers have the same width. % Also ignore the page number, which is conventionally not printed. \def\numeralbox{\setbox0=\hbox{8}\hbox to \wd0{\hfil}} \def\partentry#1#2#3#4{% % Add stretch and a bonus for breaking the page before the part heading. % This reduces the chance of the page being broken immediately after the % part heading, before a following chapter heading. \vskip 0pt plus 5\baselineskip \penalty-300 \vskip 0pt plus -5\baselineskip \dochapentry{\numeralbox\labelspace#1}{}% } % % Parts, in the short toc. \def\shortpartentry#1#2#3#4{% \penalty-300 \vskip.5\baselineskip plus.15\baselineskip minus.1\baselineskip \shortchapentry{{\bf #1}}{\numeralbox}{}{}% } % 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{% \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% } % Appendices, in the main contents. % Need the word Appendix, and a fixed-size box. % \def\appendixbox#1{% % We use M since it's probably the widest letter. \setbox0 = \hbox{\putwordAppendix{} M}% \hbox to \wd0{\putwordAppendix{} #1\hss}} % \def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\hskip.7em#1}{#4}} % Unnumbered chapters. \def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} \def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} % Sections. \def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} \let\appsecentry=\numsecentry \def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} % Subsections. \def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} \let\appsubsecentry=\numsubsecentry \def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} % And subsubsections. \def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} \let\appsubsubsecentry=\numsubsubsecentry \def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} % This parameter controls the indentation of the various levels. % Same as \defaultparindent. \newdimen\tocindent \tocindent = 15pt % Now for the actual typesetting. In all these, #1 is the text and #2 is the % page number. % % If the toc has to be broken over pages, we want it to be at chapters % if at all possible; hence the \penalty. \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 \nobreak\vskip .25\baselineskip plus.1\baselineskip } \def\dosecentry#1#2{\begingroup \secentryfonts \leftskip=\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsecentry#1#2{\begingroup \subsecentryfonts \leftskip=2\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsubsecentry#1#2{\begingroup \subsubsecentryfonts \leftskip=3\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} % We use the same \entry macro as for the index entries. \let\tocentry = \entry % Space between chapter (or whatever) number and the title. \def\labelspace{\hskip1em \relax} \def\dopageno#1{{\rm #1}} \def\doshortpageno#1{{\rm #1}} \def\chapentryfonts{\secfonts \rm} \def\secentryfonts{\textfonts} \def\subsecentryfonts{\textfonts} \def\subsubsecentryfonts{\textfonts} \message{environments,} % @foo ... @end foo. % @tex ... @end tex escapes into raw TeX temporarily. % One exception: @ is still an escape character, so that @end tex works. % But \@ or @@ will get a plain @ character. \envdef\tex{% \setupmarkupstyle{tex}% \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie \catcode `\%=14 \catcode `\+=\other \catcode `\"=\other \catcode `\|=\other \catcode `\<=\other \catcode `\>=\other \catcode `\`=\other \catcode `\'=\other % % ' 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 \let\,=\ptexcomma \let\.=\ptexdot \let\dots=\ptexdots \let\equiv=\ptexequiv \let\!=\ptexexclam \let\i=\ptexi \let\indent=\ptexindent \let\noindent=\ptexnoindent \let\{=\ptexlbrace \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 % \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% \def\@{@}% } % There is no need to define \Etex. % Define @lisp ... @end lisp. % @lisp environment forms a group so it can rebind things, % including the definition of @end lisp (which normally is erroneous). % Amount to narrow the margins by for @lisp. \newskip\lispnarrowing \lispnarrowing=0.4in % This is the definition that ^^M gets inside @lisp, @example, and other % such environments. \null is better than a space, since it doesn't % have any width. \def\lisppar{\null\endgraf} % This space is always present above and below environments. \newskip\envskipamount \envskipamount = 0pt % Make spacing and below environment symmetrical. We use \parskip here % to help in doing that, since in @example-like environments \parskip % is reset to zero; thus the \afterenvbreak inserts no space -- but the % start of the next paragraph will insert \parskip. % \def\aboveenvbreak{{% % =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 \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 \vskip\envskipamount \fi \fi }} % \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 % @cartouche ... @end cartouche: draw rectangle w/rounded corners around % environment contents. % \def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth \def\ctr{{\hskip 6pt\circle\char'010}} \def\cbl{{\circle\char'012\hskip -6pt}} \def\cbr{{\hskip 6pt\circle\char'011}} \def\carttop{\hbox to \cartouter{\hskip\lskip \ctl\leaders\hrule height\circthick\hfil\ctr \hskip\rskip}} \def\cartbot{\hbox to \cartouter{\hskip\lskip \cbl\leaders\hrule height\circthick\hfil\cbr \hskip\rskip}} % \newskip\lskip\newskip\rskip % only require the font if @cartouche is actually used \def\cartouchefontdefs{% \font\circle=lcircle10\relax \circthick=\fontdimen8\circle } \newdimen\circthick \newdimen\cartouter\newdimen\cartinner \newskip\normbskip\newskip\normpskip\newskip\normlskip \envdef\cartouche{% \cartouchefontdefs \ifhmode\par\fi % can't be in the midst of a paragraph. \startsavinginserts \lskip=\leftskip \rskip=\rightskip \leftskip=0pt\rightskip=0pt % we want these *outside*. \cartinner=\hsize \advance\cartinner by-\lskip \advance\cartinner by-\rskip \cartouter=\hsize \advance\cartouter by 18.4pt % allow for 3pt kerns on either % side, and for 6pt waste from % each corner char, and rule thickness \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip % % If this cartouche directly follows a sectioning command, we need the % \parskip glue (backspaced over by default) or the cartouche can % collide with the section heading. \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi % \setbox\groupbox=\vbox\bgroup \baselineskip=0pt\parskip=0pt\lineskip=0pt \carttop \hbox\bgroup \hskip\lskip \vrule\kern3pt \vbox\bgroup \kern3pt \hsize=\cartinner \baselineskip=\normbskip \lineskip=\normlskip \parskip=\normpskip \vskip -\parskip \comment % For explanation, see the end of def\group. } \def\Ecartouche{% \ifhmode\par\fi \kern3pt \egroup \kern3pt\vrule \hskip\rskip \egroup \cartbot \egroup \addgroupbox \checkinserts } % This macro is called at the beginning of all the @example variants, % inside a group. \newdimen\nonfillparindent \def\nonfillstart{% \aboveenvbreak \ifdim\hfuzz < 12pt \hfuzz = 12pt \fi % Don't be fussy \sepspaces % Make spaces be word-separators rather than space tokens. \let\par = \lisppar % don't ignore blank lines \obeylines % each line of input is a line of output \parskip = 0pt % Turn off paragraph indentation but redefine \indent to emulate % the normal \indent. \nonfillparindent=\parindent \parindent = 0pt \let\indent\nonfillindent % \emergencystretch = 0pt % don't try to avoid overfull boxes \ifx\nonarrowing\relax \advance \leftskip by \lispnarrowing \exdentamount=\lispnarrowing \else \let\nonarrowing = \relax \fi \let\exdent=\nofillexdent } \begingroup \obeyspaces % We want to swallow spaces (but not other tokens) after the fake % @indent in our nonfill-environments, where spaces are normally % active and set to @tie, resulting in them not being ignored after % @indent. \gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}% \gdef\nonfillindentcheck{% \ifx\temp % \expandafter\nonfillindentgobble% \else% \leavevmode\nonfillindentbox% \fi% }% \endgroup \def\nonfillindentgobble#1{\nonfillindent} \def\nonfillindentbox{\hbox to \nonfillparindent{\hss}} % If you want all examples etc. small: @set dispenvsize small. % If you want even small examples the full size: @set dispenvsize nosmall. % This affects the following displayed environments: % @example, @display, @format, @lisp % \def\smallword{small} \def\nosmallword{nosmall} \let\SETdispenvsize\relax \def\setnormaldispenv{% \ifx\SETdispenvsize\smallword % end paragraph for sake of leading, in case document has no blank % line. This is redundant with what happens in \aboveenvbreak, but % we need to do it before changing the fonts, and it's inconvenient % to change the fonts afterward. \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } \def\setsmalldispenv{% \ifx\SETdispenvsize\nosmallword \else \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } % We often define two environments, @foo and @smallfoo. % Let's do it in one command. #1 is the env name, #2 the definition. \def\makedispenvdef#1#2{% \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}% \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}% \expandafter\let\csname E#1\endcsname \afterenvbreak \expandafter\let\csname Esmall#1\endcsname \afterenvbreak } % Define two environment synonyms (#1 and #2) for an environment. \def\maketwodispenvdef#1#2#3{% \makedispenvdef{#1}{#3}% \makedispenvdef{#2}{#3}% } % % @lisp: indented, narrowed, typewriter font; % @example: same as @lisp. % % @smallexample and @smalllisp: use smaller fonts. % Originally contributed by Pavel@xerox. % \maketwodispenvdef{lisp}{example}{% \nonfillstart \tt\setupmarkupstyle{example}% \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. \gobble % eat return } % @display/@smalldisplay: same as @lisp except keep current font. % \makedispenvdef{display}{% \nonfillstart \gobble } % @format/@smallformat: same as @display except don't narrow margins. % \makedispenvdef{format}{% \let\nonarrowing = t% \nonfillstart \gobble } % @flushleft: same as @format, but doesn't obey \SETdispenvsize. \envdef\flushleft{% \let\nonarrowing = t% \nonfillstart \gobble } \let\Eflushleft = \afterenvbreak % @flushright. % \envdef\flushright{% \let\nonarrowing = t% \nonfillstart \advance\leftskip by 0pt plus 1fill\relax \gobble } \let\Eflushright = \afterenvbreak % @raggedright does more-or-less normal line breaking but no right % justification. From plain.tex. \envdef\raggedright{% \rightskip0pt plus2.4em \spaceskip.3333em \xspaceskip.5em\relax } \let\Eraggedright\par \envdef\raggedleft{% \parindent=0pt \leftskip0pt plus2em \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt \hbadness=10000 % Last line will usually be underfull, so turn off % badness reporting. } \let\Eraggedleft\par \envdef\raggedcenter{% \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt \hbadness=10000 % Last line will usually be underfull, so turn off % badness reporting. } \let\Eraggedcenter\par % @quotation does normal linebreaking (hence we can't use \nonfillstart) % and narrows the margins. We keep \parskip nonzero in general, since % we're doing normal filling. So, when using \aboveenvbreak and % \afterenvbreak, temporarily make \parskip 0. % \makedispenvdef{quotation}{\quotationstart} % \def\quotationstart{% \indentedblockstart % same as \indentedblock, but increase right margin too. \ifx\nonarrowing\relax \advance\rightskip by \lispnarrowing \fi \parsearg\quotationlabel } % We have retained a nonzero parskip for the environment, since we're % doing normal filling. % \def\Equotation{% \par \ifx\quotationauthor\thisisundefined\else % indent a bit. \leftline{\kern 2\leftskip \sl ---\quotationauthor}% \fi {\parskip=0pt \afterenvbreak}% } \def\Esmallquotation{\Equotation} % If we're given an argument, typeset it in bold with a colon after. \def\quotationlabel#1{% \def\temp{#1}% \ifx\temp\empty \else {\bf #1: }% \fi } % @indentedblock is like @quotation, but indents only on the left and % has no optional argument. % \makedispenvdef{indentedblock}{\indentedblockstart} % \def\indentedblockstart{% {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip \parindent=0pt % % @cartouche defines \nonarrowing to inhibit narrowing at next level down. \ifx\nonarrowing\relax \advance\leftskip by \lispnarrowing \exdentamount = \lispnarrowing \else \let\nonarrowing = \relax \fi } % Keep a nonzero parskip for the environment, since we're doing normal filling. % \def\Eindentedblock{% \par {\parskip=0pt \afterenvbreak}% } \def\Esmallindentedblock{\Eindentedblock} % LaTeX-like @verbatim...@end verbatim and @verb{...} % If we want to allow any as delimiter, % we need the curly braces so that makeinfo sees the @verb command, eg: % `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org % % [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. % % [Knuth] p.344; only we need to do the other characters Texinfo sets % active too. Otherwise, they get lost as the first character on a % verbatim line. \def\dospecials{% \do\ \do\\\do\{\do\}\do\$\do\&% \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% \do\<\do\>\do\|\do\@\do+\do\"% % Don't do the quotes -- if we do, @set txicodequoteundirected and % @set txicodequotebacktick will not have effect on @verb and % @verbatim, and ?` and !` ligatures won't get disabled. %\do\`\do\'% } % % [Knuth] p. 380 \def\uncatcodespecials{% \def\do##1{\catcode`##1=\other}\dospecials} % % Setup for the @verb command. % % Eight spaces for a tab \begingroup \catcode`\^^I=\active \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} \endgroup % \def\setupverb{% \tt % easiest (and conventionally used) font for verbatim \def\par{\leavevmode\endgraf}% \setupmarkupstyle{verb}% \tabeightspaces % Respect line breaks, % print special symbols as themselves, and % make each space count % must do in this order: \obeylines \uncatcodespecials \sepspaces } % Setup for the @verbatim environment % % Real tab expansion. \newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount % % We typeset each line of the verbatim in an \hbox, so we can handle % tabs. The \global is in case the verbatim line starts with an accent, % or some other command that starts with a begin-group. Otherwise, the % entire \verbbox would disappear at the corresponding end-group, before % it is typeset. Meanwhile, we can't have nested verbatim commands % (can we?), so the \global won't be overwriting itself. \newbox\verbbox \def\starttabbox{\global\setbox\verbbox=\hbox\bgroup} % \begingroup \catcode`\^^I=\active \gdef\tabexpand{% \catcode`\^^I=\active \def^^I{\leavevmode\egroup \dimen\verbbox=\wd\verbbox % the width so far, or since the previous tab \divide\dimen\verbbox by\tabw \multiply\dimen\verbbox by\tabw % compute previous multiple of \tabw \advance\dimen\verbbox by\tabw % advance to next multiple of \tabw \wd\verbbox=\dimen\verbbox \box\verbbox \starttabbox }% } \endgroup % start the verbatim environment. \def\setupverbatim{% \let\nonarrowing = t% \nonfillstart \tt % easiest (and conventionally used) font for verbatim % The \leavevmode here is for blank lines. Otherwise, we would % never \starttabbox and the \egroup would end verbatim mode. \def\par{\leavevmode\egroup\box\verbbox\endgraf}% \tabexpand \setupmarkupstyle{verbatim}% % Respect line breaks, % print special symbols as themselves, and % make each space count. % Must do in this order: \obeylines \uncatcodespecials \sepspaces \everypar{\starttabbox}% } % Do the @verb magic: verbatim text is quoted by unique % delimiter characters. Before first delimiter expect a % right brace, after last delimiter expect closing brace: % % \def\doverb'{'#1'}'{#1} % % [Knuth] p. 382; only eat outer {} \begingroup \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] \endgroup % \def\verb{\begingroup\setupverb\doverb} % % % Do the @verbatim magic: define the macro \doverbatim so that % the (first) argument ends when '@end verbatim' is reached, ie: % % \def\doverbatim#1@end verbatim{#1} % % For Texinfo it's a lot easier than for LaTeX, % because texinfo's \verbatim doesn't stop at '\end{verbatim}': % we need not redefine '\', '{' and '}'. % % Inspired by LaTeX's verbatim command set [latex.ltx] % \begingroup \catcode`\ =\active \obeylines % % ignore everything up to the first ^^M, that's the newline at the end % of the @verbatim input line itself. Otherwise we get an extra blank % line in the output. \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}% % We really want {...\end verbatim} in the body of the macro, but % without the active space; thus we have to use \xdef and \gobble. \endgroup % \envdef\verbatim{% \setupverbatim\doverbatim } \let\Everbatim = \afterenvbreak % @verbatiminclude FILE - insert text of file in verbatim environment. % \def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} % \def\doverbatiminclude#1{% {% \makevalueexpandable \setupverbatim {% \indexnofonts % Allow `@@' and other weird things in file names. \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}% \edef\tmp{\noexpand\input #1 } \expandafter }\tmp \afterenvbreak }% } % @copying ... @end copying. % Save the text away for @insertcopying later. % % We save the uninterpreted tokens, rather than creating a box. % Saving the text in a box would be much easier, but then all the % 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 desirable. % \def\copying{\checkenv{}\begingroup\scanargctxt\docopying} \def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} % \def\insertcopying{% \begingroup \parindent = 0pt % paragraph indentation looks wrong on title page \scanexp\copyingtext \endgroup } \message{defuns,} % @defun etc. \newskip\defbodyindent \defbodyindent=.4in \newskip\defargsindent \defargsindent=50pt \newskip\deflastargmargin \deflastargmargin=18pt \newcount\defunpenalty % Start the processing of @deffn: \def\startdefun{% \ifnum\lastpenalty<10000 \medbreak \defunpenalty=10003 % Will keep this @deffn together with the % following @def command, see below. \else % If there are two @def commands in a row, we'll have a \nobreak, % which is there to keep the function description together with its % header. But if there's nothing but headers, we need to allow a % break somewhere. Check specifically for penalty 10002, inserted % by \printdefunline, instead of 10000, since the sectioning % commands also insert a nobreak penalty, and we don't want to allow % a break between a section heading and a defun. % % As a further refinement, we avoid "club" headers by signalling % with penalty of 10003 after the very first @deffn in the % sequence (see above), and penalty of 10002 after any following % @def command. \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi % % Similarly, after a section heading, do not allow a break. % But do insert the glue. \medskip % preceded by discardable penalty, so not a breakpoint \fi % \parindent=0in \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent } \def\dodefunx#1{% % First, check whether we are in the right environment: \checkenv#1% % % As above, allow line break if we have multiple x headers in a row. % It's not a great place, though. \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi % % And now, it's time to reuse the body of the original defun: \expandafter\gobbledefun#1% } \def\gobbledefun#1\startdefun{} % \printdefunline \deffnheader{text} % \def\printdefunline#1#2{% \begingroup % call \deffnheader: #1#2 \endheader % common ending: \interlinepenalty = 10000 \advance\rightskip by 0pt plus 1fil\relax \endgraf \nobreak\vskip -\parskip \penalty\defunpenalty % signal to \startdefun and \dodefunx % Some of the @defun-type tags do not enable magic parentheses, % rendering the following check redundant. But we don't optimize. \checkparencounts \endgroup } \def\Edefun{\endgraf\medbreak} % \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; % the only thing remaining is to define \deffnheader. % \def\makedefun#1{% \expandafter\let\csname E#1\endcsname = \Edefun \edef\temp{\noexpand\domakedefun \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% \temp } % \domakedefun \deffn \deffnx \deffnheader { (defn. of \deffnheader) } % % Define \deffn and \deffnx, without parameters. % \deffnheader has to be defined explicitly. % \def\domakedefun#1#2#3{% \envdef#1{% \startdefun \doingtypefnfalse % distinguish typed functions from all else \parseargusing\activeparens{\printdefunline#3}% }% \def#2{\dodefunx#1}% \def#3% } \newif\ifdoingtypefn % doing typed function? \newif\ifrettypeownline % typeset return type on its own line? % @deftypefnnewline on|off says whether the return type of typed functions % are printed on their own line. This affects @deftypefn, @deftypefun, % @deftypeop, and @deftypemethod. % \parseargdef\deftypefnnewline{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxideftypefnnl\endcsname = \empty \else\ifx\temp\offword \expandafter\let\csname SETtxideftypefnnl\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @txideftypefnnl value `\temp', must be on|off}% \fi\fi } % \dosubind {index}{topic}{subtopic} % % If SUBTOPIC is present, precede it with a space, and call \doind. % (At some time during the 20th century, this made a two-level entry in an % index such as the operation index. Nobody seemed to notice the change in % behaviour though.) \def\dosubind#1#2#3{% \def\thirdarg{#3}% \ifx\thirdarg\empty \doind{#1}{#2}% \else \doind{#1}{#2\space#3}% \fi } % Untyped functions: % @deffn category name args \makedefun{deffn}{\deffngeneral{}} % @deffn category class name args \makedefun{defop}#1 {\defopon{#1\ \putwordon}} % \defopon {category on}class name args \def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deffngeneral {subind}category name args % \def\deffngeneral#1#2 #3 #4\endheader{% \dosubind{fn}{\code{#3}}{#1}% \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% } % Typed functions: % @deftypefn category type name args \makedefun{deftypefn}{\deftypefngeneral{}} % @deftypeop category class type name args \makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} % \deftypeopon {category on}class type name args \def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deftypefngeneral {subind}category type name args % \def\deftypefngeneral#1#2 #3 #4 #5\endheader{% \dosubind{fn}{\code{#4}}{#1}% \doingtypefntrue \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } % Typed variables: % @deftypevr category type var args \makedefun{deftypevr}{\deftypecvgeneral{}} % @deftypecv category class type var args \makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} % \deftypecvof {category of}class type var args \def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } % \deftypecvgeneral {subind}category type var args % \def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% \dosubind{vr}{\code{#4}}{#1}% \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } % Untyped variables: % @defvr category var args \makedefun{defvr}#1 {\deftypevrheader{#1} {} } % @defcv category class var args \makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} % \defcvof {category of}class var args \def\defcvof#1#2 {\deftypecvof{#1}#2 {} } % Types: % @deftp category name args \makedefun{deftp}#1 #2 #3\endheader{% \doind{tp}{\code{#2}}% \defname{#1}{}{#2}\defunargs{#3\unskip}% } % Remaining @defun-like shortcuts: \makedefun{defun}{\deffnheader{\putwordDeffunc} } \makedefun{defmac}{\deffnheader{\putwordDefmac} } \makedefun{defspec}{\deffnheader{\putwordDefspec} } \makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } \makedefun{defvar}{\defvrheader{\putwordDefvar} } \makedefun{defopt}{\defvrheader{\putwordDefopt} } \makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } \makedefun{defmethod}{\defopon\putwordMethodon} \makedefun{deftypemethod}{\deftypeopon\putwordMethodon} \makedefun{defivar}{\defcvof\putwordInstanceVariableof} \makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} % \defname, which formats the name of the @def (not the args). % #1 is the category, such as "Function". % #2 is the return type, if any. % #3 is the function name. % % We are followed by (but not passed) the arguments, if any. % \def\defname#1#2#3{% \par % Get the values of \leftskip and \rightskip as they were outside the @def... \advance\leftskip by -\defbodyindent % % Determine if we are typesetting the return type of a typed function % on a line by itself. \rettypeownlinefalse \ifdoingtypefn % doing a typed function specifically? % then check user option for putting return type on its own line: \expandafter\ifx\csname SETtxideftypefnnl\endcsname\relax \else \rettypeownlinetrue \fi \fi % % How we'll format the category name. Putting it in brackets helps % distinguish it from the body text that may end up on the next line % just below it. \def\temp{#1}% \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} % % Figure out line sizes for the paragraph shape. We'll always have at % least two. \tempnum = 2 % % The first line needs space for \box0; but if \rightskip is nonzero, % we need only space for the part of \box0 which exceeds it: \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip % % If doing a return type on its own line, we'll have another line. \ifrettypeownline \advance\tempnum by 1 \def\maybeshapeline{0in \hsize}% \else \def\maybeshapeline{}% \fi % % The continuations: \dimen2=\hsize \advance\dimen2 by -\defargsindent % % The final paragraph shape: \parshape \tempnum 0in \dimen0 \maybeshapeline \defargsindent \dimen2 % % Put the category name at the right margin. \noindent \hbox to 0pt{% \hfil\box0 \kern-\hsize % \hsize has to be shortened this way: \kern\leftskip % Intentionally do not respect \rightskip, since we need the space. }% % % Allow all lines to be underfull without complaint: \tolerance=10000 \hbadness=10000 \exdentamount=\defbodyindent {% % defun fonts. We use typewriter by default (used to be bold) because: % . we're printing identifiers, they should be in tt in principle. % . in languages with many accents, such as Czech or French, it's % common to leave accents off identifiers. The result looks ok in % tt, but exceedingly strange in rm. % . we don't want -- and --- to be treated as ligatures. % . this still does not fix the ?` and !` ligatures, but so far no % one has made identifiers using them :). \df \tt \def\temp{#2}% text of the return type \ifx\temp\empty\else \tclose{\temp}% typeset the return type \ifrettypeownline % put return type on its own line; prohibit line break following: \hfil\vadjust{\nobreak}\break \else \space % type on same line, so just followed by a space \fi \fi % no return type #3% output function name }% {\rm\enskip}% hskip 0.5 em of \rmfont % \boldbrax % arguments will be output next, if any. } % Print arguments in slanted roman (not ttsl), inconsistently with using % tt for the name. This is because literal text is sometimes needed in % the argument list (groff manual), and ttsl and tt are not very % distinguishable. Prevent hyphenation at `-' chars. % \def\defunargs#1{% % use sl by default (not ttsl), % tt for the names. \df \sl \hyphenchar\font=0 % % On the other hand, if an argument has two dashes (for instance), we % want a way to get ttsl. We used to recommend @var for that, so % leave the code in, but it's strange for @var to lead to typewriter. % Nowadays we recommend @code, since the difference between a ttsl hyphen % and a tt hyphen is pretty tiny. @code also disables ?` !`. \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}% #1% \sl\hyphenchar\font=45 } % We want ()&[] to print specially on the defun line. % \def\activeparens{% \catcode`\(=\active \catcode`\)=\active \catcode`\[=\active \catcode`\]=\active \catcode`\&=\active } % Make control sequences which act like normal parenthesis chars. \let\lparen = ( \let\rparen = ) % Be sure that we always have a definition for `(', etc. For example, % if the fn name has parens in it, \boldbrax will not be in effect yet, % so TeX would otherwise complain about undefined control sequence. { \activeparens \global\let(=\lparen \global\let)=\rparen \global\let[=\lbrack \global\let]=\rbrack \global\let& = \& \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} \gdef\magicamp{\let&=\amprm} } \let\ampchar\& \newcount\parencount % If we encounter &foo, then turn on ()-hacking afterwards \newif\ifampseen \def\amprm#1 {\ampseentrue{\bf\ }} \def\parenfont{% \ifampseen % At the first level, print parens in roman, % otherwise use the default font. \ifnum \parencount=1 \rm \fi \else % The \sf parens (in \boldbrax) actually are a little bolder than % the contained text. This is especially needed for [ and ] . \sf \fi } \def\infirstlevel#1{% \ifampseen \ifnum\parencount=1 #1% \fi \fi } \def\bfafterword#1 {#1 \bf} \def\opnr{% \global\advance\parencount by 1 {\parenfont(}% \infirstlevel \bfafterword } \def\clnr{% {\parenfont)}% \infirstlevel \sl \global\advance\parencount by -1 } \newcount\brackcount \def\lbrb{% \global\advance\brackcount by 1 {\bf[}% } \def\rbrb{% {\bf]}% \global\advance\brackcount by -1 } \def\checkparencounts{% \ifnum\parencount=0 \else \badparencount \fi \ifnum\brackcount=0 \else \badbrackcount \fi } % these should not use \errmessage; the glibc manual, at least, actually % has such constructs (when documenting function pointers). \def\badparencount{% \message{Warning: unbalanced parentheses in @def...}% \global\parencount=0 } \def\badbrackcount{% \message{Warning: unbalanced square brackets in @def...}% \global\brackcount=0 } \message{macros,} % @macro. % To do this right we need a feature of e-TeX, \scantokens, % which we arrange to emulate with a temporary file in ordinary TeX. \ifx\eTeXversion\thisisundefined \newwrite\macscribble \def\scantokens#1{% \toks0={#1}% \immediate\openout\macscribble=\jobname.tmp \immediate\write\macscribble{\the\toks0}% \immediate\closeout\macscribble \input \jobname.tmp } \fi % Used at the time of macro expansion. % Argument is macro body with arguments substituted \def\scanmacro#1{% \newlinechar`\^^M \def\xeatspaces{\eatspaces}% % % Process the macro body under the current catcode regime. \scantokens{#1@comment}% % % The \comment is to remove the \newlinechar added by \scantokens, and % can be noticed by \parsearg. Note \c isn't used because this means cedilla % in math mode. } % Used for copying and captions \def\scanexp#1{% \expandafter\scanmacro\expandafter{#1}% } \newcount\paramno % Count of parameters \newtoks\macname % Macro name \newif\ifrecursive % Is it recursive? % List of all defined macros in the form % \commondummyword\macro1\commondummyword\macro2... % Currently is also contains all @aliases; the list can be split % if there is a need. \def\macrolist{} % Add the macro to \macrolist \def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname} \def\addtomacrolistxxx#1{% \toks0 = \expandafter{\macrolist\commondummyword#1}% \xdef\macrolist{\the\toks0}% } % Utility routines. % This does \let #1 = #2, with \csnames; that is, % \let \csname#1\endcsname = \csname#2\endcsname % (except of course we have to play expansion games). % \def\cslet#1#2{% \expandafter\let \csname#1\expandafter\endcsname \csname#2\endcsname } % Trim leading and trailing spaces off a string. % Concepts from aro-bend problem 15 (see CTAN). {\catcode`\@=11 \gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} \gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} \gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} \def\unbrace#1{#1} \unbrace{\gdef\trim@@@ #1 } #2@{#1} } % Trim a single trailing ^^M off a string. {\catcode`\^^M=\other \catcode`\Q=3% \gdef\eatcr #1{\eatcra #1Q^^MQ}% \gdef\eatcra#1^^MQ{\eatcrb#1Q}% \gdef\eatcrb#1Q#2Q{#1}% } % Macro bodies are absorbed as an argument in a context where % all characters are catcode 10, 11 or 12, except \ which is active % (as in normal texinfo). It is necessary to change the definition of \ % to recognize macro arguments; this is the job of \mbodybackslash. % % Non-ASCII encodings make 8-bit characters active, so un-activate % them to avoid their expansion. Must do this non-globally, to % confine the change to the current group. % % It's necessary to have hard CRs when the macro is executed. This is % done by making ^^M (\endlinechar) catcode 12 when reading the macro % body, and then making it the \newlinechar in \scanmacro. % \def\scanctxt{% used as subroutine \catcode`\"=\other \catcode`\+=\other \catcode`\<=\other \catcode`\>=\other \catcode`\^=\other \catcode`\_=\other \catcode`\|=\other \catcode`\~=\other \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 } % 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`\ =\active \catcode`\@=\other \catcode`\^^M=\other \catcode`\\=\active } \def\macrolineargctxt{% used for whole-line arguments without braces \scanctxt \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other } % \mbodybackslash is the definition of \ in @macro bodies. % It maps \foo\ => \csname macarg.foo\endcsname => #N % where N is the macro parameter number. % We define \csname macarg.\endcsname to be \realbackslash, so % \\ in macro replacement text gets you a backslash. % {\catcode`@=0 @catcode`@\=@active @gdef@usembodybackslash{@let\=@mbodybackslash} @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} } \expandafter\def\csname macarg.\endcsname{\realbackslash} \def\margbackslash#1{\char`\#1 } \def\macro{\recursivefalse\parsearg\macroxxx} \def\rmacro{\recursivetrue\parsearg\macroxxx} \def\macroxxx#1{% \getargs{#1}% now \macname is the macname and \argl the arglist \ifx\argl\empty % no arguments \paramno=0\relax \else \expandafter\parsemargdef \argl;% \if\paramno>256\relax \ifx\eTeXversion\thisisundefined \errhelp = \EMsimple \errmessage{You need eTeX to compile a file with macros with more than 256 arguments} \fi \fi \fi \if1\csname ismacro.\the\macname\endcsname \message{Warning: redefining \the\macname}% \else \expandafter\ifx\csname \the\macname\endcsname \relax \else \errmessage{Macro name \the\macname\space already defined}\fi \global\cslet{macsave.\the\macname}{\the\macname}% \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% \addtomacrolist{\the\macname}% \fi \begingroup \macrobodyctxt \ifrecursive \expandafter\parsermacbody \else \expandafter\parsemacbody \fi} \parseargdef\unmacro{% \if1\csname ismacro.#1\endcsname \global\cslet{#1}{macsave.#1}% \global\expandafter\let \csname ismacro.#1\endcsname=0% % Remove the macro name from \macrolist: \begingroup \expandafter\let\csname#1\endcsname \relax \let\commondummyword\unmacrodo \xdef\macrolist{\macrolist}% \endgroup \else \errmessage{Macro #1 not defined}% \fi } % Called by \do from \dounmacro on each macro. The idea is to omit any % macro definitions that have been changed to \relax. % \def\unmacrodo#1{% \ifx #1\relax % remove this \else \noexpand\commondummyword \noexpand#1% \fi } % \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 % is #, then the preceding argument is delimited by % an opening brace, and that opening brace is not consumed. % 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). % % If there are 10 or more arguments, a different technique is used: see % \parsemmanyargdef. % \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,;,% \ifnum\paramno<10\relax\else \paramno0\relax \parsemmanyargdef@@#1,;,% 10 or more arguments \fi } \def\parsemargdefxxx#1,{% \if#1;\let\next=\relax \else \let\next=\parsemargdefxxx \advance\paramno by 1 \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname {\xeatspaces{\hash\the\paramno}}% \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 \let\next=\parsemmanyargdef@@ \edef\tempb{\eatspaces{#1}}% \expandafter\def\expandafter\tempa \expandafter{\csname macarg.\tempb\endcsname}% % Note that we need some extra \noexpand\noexpand, this is because we % don't want \the to be expanded in the \parsermacbody as it uses an % \xdef . \expandafter\edef\tempa {\noexpand\noexpand\noexpand\the\toks\the\paramno}% \advance\paramno by 1\relax \fi\next} \let\endargs@\relax \let\nil@\relax \def\nilm@{\nil@}% \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 % macarg.ARGNAME % % #1 is the macro name % #2 is the list of argument names % #3 is the list of argument values \def\getargvals@#1#2#3{% \def\macargdeflist@{}% \def\saveparamlist@{#2}% Need to keep a copy for parameter expansion. \def\paramlist{#2,\nil@}% \def\macroname{#1}% \begingroup \macroargctxt \def\argvaluelist{#3,\nil@}% \def\@tempa{#3}% \ifx\@tempa\empty \setemptyargvalues@ \else \getargvals@@ \fi } \def\getargvals@@{% \ifx\paramlist\nilm@ % Some sanity check needed here that \argvaluelist is also empty. \ifx\argvaluelist\nillm@ \else \errhelp = \EMsimple \errmessage{Too many arguments in macro `\macroname'!}% \fi \let\next\macargexpandinbody@ \else \ifx\argvaluelist\nillm@ % No more arguments values passed to macro. Set remaining named-arg % macros to empty. \let\next\setemptyargvalues@ \else % pop current arg name into \@tempb \def\@tempa##1{\pop@{\@tempb}{\paramlist}##1\endargs@}% \expandafter\@tempa\expandafter{\paramlist}% % pop current argument value into \@tempc \def\@tempa##1{\longpop@{\@tempc}{\argvaluelist}##1\endargs@}% \expandafter\@tempa\expandafter{\argvaluelist}% % Here \@tempb is the current arg name and \@tempc is the current arg value. % First place the new argument macro definition into \@tempd \expandafter\macname\expandafter{\@tempc}% \expandafter\let\csname macarg.\@tempb\endcsname\relax \expandafter\def\expandafter\@tempe\expandafter{% \csname macarg.\@tempb\endcsname}% \edef\@tempd{\long\def\@tempe{\the\macname}}% \push@\@tempd\macargdeflist@ \let\next\getargvals@@ \fi \fi \next } \def\push@#1#2{% \expandafter\expandafter\expandafter\def \expandafter\expandafter\expandafter#2% \expandafter\expandafter\expandafter{% \expandafter#1#2}% } % Replace arguments by their values in the macro body, and place the result % 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 % values into respective token registers. % % First we save the token context, and initialize argument numbering. \begingroup \paramno0\relax % Then, for each argument number #N, we place the corresponding argument % value into a new token list register \toks#N \expandafter\putargsintokens@\saveparamlist@,;,% % Then, we expand the body so that argument are replaced by their % values. The trick for values not to be expanded themselves is that they % are within tokens and that tokens expand only once in an \edef . \edef\@tempc{\csname mac.\macroname .body\endcsname}% % Now we restore the token stack pointer to free the token list registers % which we have used, but we make sure that expanded body is saved after % group. \expandafter \endgroup \expandafter\def\expandafter\@tempa\expandafter{\@tempc}% } % Define the named-macro outside of this group and then close this group. % \def\macargexpandinbody@{% \expandafter \endgroup \macargdeflist@ % First the replace in body the macro arguments by their values, the result % is in \@tempa . \macvalstoargs@ % Then we point at the \norecurse or \gobble (for recursive) macro value % with \@tempb . \expandafter\let\expandafter\@tempb\csname mac.\macroname .recurse\endcsname % Depending on whether it is recursive or not, we need some tailing % \egroup . \ifx\@tempb\gobble \let\@tempc\relax \else \let\@tempc\egroup \fi % And now we do the real job: \edef\@tempd{\noexpand\@tempb{\macroname}\noexpand\scanmacro{\@tempa}\@tempc}% \@tempd } \def\putargsintokens@#1,{% \if#1;\let\next\relax \else \let\next\putargsintokens@ % First we allocate the new token list register, and give it a temporary % alias \@tempb . \toksdef\@tempb\the\paramno % Then we place the argument value into that token list register. \expandafter\let\expandafter\@tempa\csname macarg.#1\endcsname \expandafter\@tempb\expandafter{\@tempa}% \advance\paramno by 1\relax \fi \next } % Trailing missing arguments are set to empty. % \def\setemptyargvalues@{% \ifx\paramlist\nilm@ \let\next\macargexpandinbody@ \else \expandafter\setemptyargvaluesparser@\paramlist\endargs@ \let\next\setemptyargvalues@ \fi \next } \def\setemptyargvaluesparser@#1,#2\endargs@{% \expandafter\def\expandafter\@tempa\expandafter{% \expandafter\def\csname macarg.#1\endcsname{}}% \push@\@tempa\macargdeflist@ \def\paramlist{#2}% } % #1 is the element target macro % #2 is the list macro % #3,#4\endargs@ is the list value \def\pop@#1#2#3,#4\endargs@{% \def#1{#3}% \def#2{#4}% } \long\def\longpop@#1#2#3,#4\endargs@{% \long\def#1{#3}% \long\def#2{#4}% } %%%%%%%%%%%%%% 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 four cases: 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. % \def\defmacro{% \let\hash=##% convert placeholders to macro parameter chars \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 \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup \noexpand\spaceisspace \noexpand\endlineisspace \noexpand\expandafter % skip any whitespace after the macro name. \expandafter\noexpand\csname\the\macname @@@\endcsname}% \expandafter\xdef\csname\the\macname @@@\endcsname{% \egroup \noexpand\scanmacro{\macrobody}}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup \noexpand\braceorline \expandafter\noexpand\csname\the\macname @@@\endcsname}% \expandafter\xdef\csname\the\macname @@@\endcsname##1{% \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\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 @@@@\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\macrobody \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble \fi \fi} \catcode `\@\texiatcatcode\relax % end private-to-Texinfo catcodes \def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % {\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 \macroargctxt \expandafter\passargtomacro \else \macrolineargctxt\expandafter\parsearg \fi \macnamexxx} % @alias. % We need some trickery to remove the optional spaces around the equal % sign. Make them active and then expand them all to nothing. % \def\alias{\parseargusing\obeyspaces\aliasxxx} \def\aliasxxx #1{\aliasyyy#1\relax} \def\aliasyyy #1=#2\relax{% {% \expandafter\let\obeyedspace=\empty \addtomacrolist{#1}% \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% }% \next } \message{cross references,} \newwrite\auxfile \newif\ifhavexrefs % True if xref values are known. \newif\ifwarnedxrefs % True if we warned once that they aren't known. % @inforef is relatively simple. \def\inforef #1{\inforefzzz #1,,,,**} \def\inforefzzz #1,#2,#3,#4**{% \putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, node \samp{\ignorespaces#1{}}} % @node's only job in TeX is to define \lastnode, which is used in % cross-references. The @node line might or might not have commas, and % might or might not have spaces before the first comma, like: % @node foo , bar , ... % We don't want such trailing spaces in the node name. % \parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} % % also remove a trailing comma, in case of something like this: % @node Help-Cross, , , Cross-refs \def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} \def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}\omittopnode} % Used so that the @top node doesn't have to be wrapped in an @ifnottex % conditional. % \doignore goes to more effort to skip nested conditionals but we don't need % that here. \def\omittopnode{% \ifx\lastnode\wordTop \expandafter\ignorenode\fi } \def\wordTop{Top} % Until the next @node or @bye command, divert output to a box that is not % output. \def\ignorenode{\setbox\dummybox\vbox\bgroup\def\node{\egroup\node}% \ignorenodebye } {\let\bye\relax \gdef\ignorenodebye{\let\bye\ignorenodebyedef} \gdef\ignorenodebyedef{\egroup(`Top' node ignored)\bye}} % The redefinition of \bye here is because it is declared \outer \let\lastnode=\empty % Write a cross-reference definition for the current node. #1 is the % type (Ynumbered, Yappendix, Ynothing). % \def\donoderef#1{% \ifx\lastnode\empty\else \setref{\lastnode}{#1}% \global\let\lastnode=\empty \fi } % @anchor{NAME} -- define xref target at arbitrary point. % \newcount\savesfregister % \def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} \def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} \def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} % \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an % anchor), which consists of three parts: % 1) NAME-title - the current sectioning name taken from \currentsection, % or the anchor name. % 2) NAME-snt - section number and type, passed as the SNT arg, or % empty for anchors. % 3) NAME-pg - the page number. % % This is called from \donoderef, \anchor, and \dofloat. In the case of % floats, there is an additional part, which is not written here: % 4) NAME-lof - the text as it should appear in a @listoffloats. % \def\setref#1#2{% \pdfmkdest{#1}% \iflinks {% \requireauxfile \atdummies % preserve commands, but don't expand them % match definition in \xrdef, \refx, \xrefX. \def\value##1{##1}% \edef\writexrdef##1##2{% \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef ##1}{##2}}% these are parameters of \writexrdef }% \toks0 = \expandafter{\currentsection}% \immediate \writexrdef{title}{\the\toks0 }% \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout }% \fi } % @xrefautosectiontitle on|off says whether @section(ing) names are used % automatically in xrefs, if the third arg is not explicitly specified. % This was provided as a "secret" @set xref-automatic-section-title % variable, now it's official. % \parseargdef\xrefautomaticsectiontitle{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETxref-automatic-section-title\endcsname = \empty \else\ifx\temp\offword \expandafter\let\csname SETxref-automatic-section-title\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @xrefautomaticsectiontitle value `\temp', must be on|off}% \fi\fi } % % @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is % the node name, #2 the name of the Info cross-reference, #3 the printed % 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{\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 \newbox\infofilenamebox \newbox\printedmanualbox % \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup \unsepspaces % % Get args without leading/trailing spaces. \def\printedrefname{\ignorespaces #3}% \setbox\printedrefnamebox = \hbox{\printedrefname\unskip}% % \def\infofilename{\ignorespaces #4}% \setbox\infofilenamebox = \hbox{\infofilename\unskip}% % \def\printedmanual{\ignorespaces #5}% \setbox\printedmanualbox = \hbox{\printedmanual\unskip}% % % If the printed reference name (arg #3) was not explicitly given in % the @xref, figure out what we want to use. \ifdim \wd\printedrefnamebox = 0pt % No printed node name was explicitly given. \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax % Not auto section-title: use node name inside the square brackets. \def\printedrefname{\ignorespaces #1}% \else % Auto section-title: use chapter/section title inside % the square brackets if we have it. \ifdim \wd\printedmanualbox > 0pt % It is in another manual, so we don't have it; use node name. \def\printedrefname{\ignorespaces #1}% \else \ifhavexrefs % We (should) know the real title if we have the xref values. \def\printedrefname{\refx{#1-title}{}}% \else % Otherwise just copy the Info node name. \def\printedrefname{\ignorespaces #1}% \fi% \fi \fi \fi % % Make link in pdf output. \ifpdf % For pdfTeX and LuaTeX {\indexnofonts \makevalueexpandable \turnoffactive % 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. \setpdfdestname{#1}% % \ifx\pdfdestname\empty \def\pdfdestname{Top}% no empty targets \fi % \leavevmode \startlink attr{/Border [0 0 0]}% \ifnum\filenamelength>0 goto file{\the\filename.pdf} name{\pdfdestname}% \else goto name{\pdfmkpgn{\pdfdestname}}% \fi }% \setcolor{\linkcolor}% \else \ifx\XeTeXrevision\thisisundefined \else % For XeTeX {\indexnofonts \makevalueexpandable \turnoffactive % 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. \setpdfdestname{#1}% % \ifx\pdfdestname\empty \def\pdfdestname{Top}% no empty targets \fi % \leavevmode \ifnum\filenamelength>0 % With default settings, % XeTeX (xdvipdfmx) replaces link destination names with integers. % In this case, the replaced destination names of % remote PDFs are no longer known. In order to avoid a replacement, % you can use xdvipdfmx's command line option `-C 0x0010'. % If you use XeTeX 0.99996+ (TeX Live 2016+), % this command line option is no longer necessary % because we can use the `dvipdfmx:config' special. \special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A << /S /GoToR /F (\the\filename.pdf) /D (\pdfdestname) >> >>}% \else \special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A << /S /GoTo /D (\pdfdestname) >> >>}% \fi }% \setcolor{\linkcolor}% \fi \fi {% % 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". \ifdim\wd\printedrefnamebox = 0pt \refx{#1-snt}{}% \else \printedrefname \fi % % If the user also gave the printed manual name (fifth arg), append % "in MANUALNAME". \ifdim \wd\printedmanualbox > 0pt \space \putwordin{} \cite{\printedmanual}% \fi \else % node/anchor (non-float) references. % % If we use \unhbox to print the node names, TeX does not insert % empty discretionaries after hyphens, which means that it will not % find a line break at a hyphen in a node names. Since some manuals % are best written with fairly long node names, containing hyphens, % this is a loss. Therefore, we give the text of the node name % again, so it is as if TeX is seeing it for the first time. % \ifdim \wd\printedmanualbox > 0pt % Cross-manual reference with a printed manual name. % \crossmanualxref{\cite{\printedmanual\unskip}}% % \else\ifdim \wd\infofilenamebox > 0pt % Cross-manual reference with only an info filename (arg 4), no % printed manual name (arg 5). This is essentially the same as % the case above; we output the filename, since we have nothing else. % \crossmanualxref{\code{\infofilename\unskip}}% % \else % Reference within this manual. % % _ (for example) has to be the character _ for the purposes of the % control sequence corresponding to the node, but it has to expand % into the usual \leavevmode...\vrule stuff for purposes of % printing. So we \turnoffactive for the \refx-snt, back on for the % printing, back off for the \refx-pg. {\turnoffactive % Only output a following space if the -snt ref is nonempty; for % @unnumbered and @anchor, it won't be. \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi }% % output the `[mynode]' via the macro below so it can be overridden. \xrefprintnodename\printedrefname % % But we always want a comma and a space: ,\space % % 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 \endgroup} % Output a cross-manual xref to #1. Used just above (twice). % % Only include the text "Section ``foo'' in" if the foo is neither % missing or Top. Thus, @xref{,,,foo,The Foo Manual} outputs simply % "see The Foo Manual", the idea being to refer to the whole manual. % % But, this being TeX, we can't easily compare our node name against the % string "Top" while ignoring the possible spaces before and after in % the input. By adding the arbitrary 7sp below, we make it much less % likely that a real node name would have the same width as "Top" (e.g., % in a monospaced font). Hopefully it will never happen in practice. % % For the same basic reason, we retypeset the "Top" at every % reference, since the current font is indeterminate. % \def\crossmanualxref#1{% \setbox\toprefbox = \hbox{Top\kern7sp}% \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}% \ifdim \wd2 > 7sp % nonempty? \ifdim \wd2 = \wd\toprefbox \else % same as Top? \putwordSection{} ``\printedrefname'' \putwordin{}\space \fi \fi #1% } % This macro is called from \xrefX for the `[nodename]' part of xref % output. It's a separate macro only so it can be changed more easily, % since square brackets don't work well in some documents. Particularly % one that Bob is working on :). % \def\xrefprintnodename#1{[#1]} % Things referred to by \setref. % \def\Ynothing{} \def\Yomitfromtoc{} \def\Ynumbered{% \ifnum\secno=0 \putwordChapter@tie \the\chapno \else \ifnum\subsecno=0 \putwordSection@tie \the\chapno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie \the\chapno.\the\secno.\the\subsecno \else \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } \def\Yappendix{% \ifnum\secno=0 \putwordAppendix@tie @char\the\appendixno{}% \else \ifnum\subsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno \else \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } % \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 }% \ifx\thisrefX\relax % If not defined, say something at least. \angleleft un\-de\-fined\angleright \iflinks \ifhavexrefs {\toks0 = {#1}% avoid expansion of possibly-complex value \message{\linenumber Undefined cross reference `\the\toks0'.}}% \else \ifwarnedxrefs\else \global\warnedxrefstrue \message{Cross reference values unknown; you must run TeX again.}% \fi \fi \fi \else % It's defined, so just use it. \thisrefX \fi #2% Output the suffix in any case. } % 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{% {% 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}% }% % \bgroup \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% \egroup % We put the \gdef inside a group to avoid the definitions building up on % TeX's save stack, which can cause it to run out of space for aux files with % thousands of lines. \gdef doesn't use the save stack, but \csname does % when it defines an unknown control sequence as \relax. % % Was that xref control sequence that we just defined for a float? \expandafter\iffloat\csname XR\safexrefname\endcsname % it was a float, and we have the (safe) float type in \iffloattype. \expandafter\let\expandafter\floatlist \csname floatlist\iffloattype\endcsname % % Is this the first time we've seen this float type? \expandafter\ifx\floatlist\relax \toks0 = {\do}% yes, so just \do \else % had it before, so preserve previous elements in list. \toks0 = \expandafter{\floatlist\do}% \fi % % Remember this xref in the control sequence \floatlistFLOATTYPE, % for later use in \listoffloats. \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0 {\safexrefname}}% \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{% \openin 1 \jobname.aux \ifeof 1 \else \readdatafile{aux}% \global\havexrefstrue \fi \closein 1 } \def\setupdatafile{% \catcode`\^^@=\other \catcode`\^^A=\other \catcode`\^^B=\other \catcode`\^^C=\other \catcode`\^^D=\other \catcode`\^^E=\other \catcode`\^^F=\other \catcode`\^^G=\other \catcode`\^^H=\other \catcode`\^^K=\other \catcode`\^^L=\other \catcode`\^^N=\other \catcode`\^^P=\other \catcode`\^^Q=\other \catcode`\^^R=\other \catcode`\^^S=\other \catcode`\^^T=\other \catcode`\^^U=\other \catcode`\^^V=\other \catcode`\^^W=\other \catcode`\^^X=\other \catcode`\^^Z=\other \catcode`\^^[=\other \catcode`\^^\=\other \catcode`\^^]=\other \catcode`\^^^=\other \catcode`\^^_=\other \catcode`\^=\other % % Special characters. Should be turned off anyway, but... \catcode`\~=\other \catcode`\[=\other \catcode`\]=\other \catcode`\"=\other \catcode`\_=\other \catcode`\|=\other \catcode`\<=\other \catcode`\>=\other \catcode`\$=\other \catcode`\#=\other \catcode`\&=\other \catcode`\%=\other \catcode`+=\other % avoid \+ for paranoia even though we've turned it off % \catcode`\\=\active % % @ is our escape character in .aux files, and we need braces. \catcode`\{=1 \catcode`\}=2 \catcode`\@=0 } \def\readdatafile#1{% \begingroup \setupdatafile \input\jobname.#1 \endgroup} \message{insertions,} % including footnotes. \newcount \footnoteno % The trailing space in the following definition for supereject is % vital for proper filling; pages come out unaligned when you do a % pagealignmacro call if that space before the closing brace is % removed. (Generally, numeric constants should always be followed by a % space to prevent strange expansion errors.) \def\supereject{\par\penalty -20000\footnoteno =0 } % @footnotestyle is meaningful for Info output only. \let\footnotestyle=\comment {\catcode `\@=11 % % Auto-number footnotes. Otherwise like plain. \gdef\footnote{% \global\advance\footnoteno by \@ne \edef\thisfootno{$^{\the\footnoteno}$}% % % In case the footnote comes at the end of a sentence, preserve the % extra spacing after we do the footnote number. \let\@sf\empty \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi % % Remove inadvertent blank space before typesetting the footnote number. \unskip \thisfootno\@sf \dofootnote }% % Don't bother with the trickery in plain.tex to not require the % footnote text as a parameter. Our footnotes don't need to be so general. % % Oh yes, they do; otherwise, @ifset (and anything else that uses % \parseargline) fails inside footnotes because the tokens are fixed when % the footnote is read. --karl, 16nov96. % \gdef\dofootnote{% \insert\footins\bgroup % % Nested footnotes are not supported in TeX, that would take a lot % more work. (\startsavinginserts does not suffice.) \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=\txipagewidth \interlinepenalty\interfootnotelinepenalty \splittopskip\ht\strutbox % top baseline for broken footnotes \splitmaxdepth\dp\strutbox \floatingpenalty\@MM \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip \parindent\defaultparindent % \smallfonts \rm % % Because we use hanging indentation in footnotes, a @noindent appears % to exdent this text, so make it be a no-op. makeinfo does not use % hanging indentation so @noindent can still be needed within footnote % text after an @example or the like (not that this is good style). \let\noindent = \relax % % Hang the footnote text off the number. Use \everypar in case the % footnote extends for more than one paragraph. \everypar = {\hang}% \textindent{\thisfootno}% % % Don't crash into the line above the footnote text. Since this % expands into a box, it must come within the paragraph, lest it % provide a place where TeX can split the footnote. \footstrut % % Invoke rest of plain TeX footnote routine. \futurelet\next\fo@t } }%end \catcode `\@=11 \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. % Similarly, if a @footnote appears inside an alignment, save the footnote % text to a box and make the \insert when a row of the table is finished. % And the same can be done for other insert classes. --kasal, 16nov03. % % Replace the \insert primitive by a cheating macro. % Deeper inside, just make sure that the saved insertions are not spilled % out prematurely. % \def\startsavinginserts{% \ifx \insert\ptexinsert \let\insert\saveinsert \else \let\checkinserts\relax \fi } % This \insert replacement works for both \insert\footins{foo} and % \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. % \def\saveinsert#1{% \edef\next{\noexpand\savetobox \makeSAVEname#1}% \afterassignment\next % swallow the left brace \let\temp = } \def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} \def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} \def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} \def\placesaveins#1{% \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname {\box#1}% } % eat @SAVE -- beware, all of them have catcode \other: { \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) \gdef\gobblesave @SAVE{} } % initialization: \def\newsaveins #1{% \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% \next } \def\newsaveinsX #1{% \csname newbox\endcsname #1% \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts \checksaveins #1}% } % initialize: \let\checkinserts\empty \newsaveins\footins \newsaveins\margin % @image. We use the macros from epsf.tex to support this. % If epsf.tex is not installed and @image is used, we complain. % % Check for and read epsf.tex up front. If we read it only at @image % time, we might be inside a group, and then its definitions would get % undone and the next image would fail. \openin 1 = epsf.tex \ifeof 1 \else % Do not bother showing banner with epsf.tex v2.7k (available in % doc/epsf.tex and on ctan). \def\epsfannounce{\toks0 = }% \input epsf.tex \fi \closein 1 % % We will only complain once about lack of epsf.tex. \newif\ifwarnednoepsf \newhelp\noepsfhelp{epsf.tex must be installed for images to work. It is also included in the Texinfo distribution, or you can get it from https://ctan.org/texarchive/macros/texinfo/texinfo/doc/epsf.tex.} % \def\image#1{% \ifx\epsfbox\thisisundefined \ifwarnednoepsf \else \errhelp = \noepsfhelp \errmessage{epsf.tex not found, images will be ignored}% \global\warnednoepsftrue \fi \else \imagexxx #1,,,,,\finish \fi } % % Arguments to @image: % #1 is (mandatory) image filename; we tack on .eps extension. % #2 is (optional) width, #3 is (optional) height. % #4 is (ignored optional) html alt text. % #5 is (ignored optional) extension. % #6 is just the usual extra ignored arg for parsing stuff. \newif\ifimagevmode \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 \else \ifx\centersub\centerV % for @center @image, we need a vbox so we can have our vertical space \imagevmodetrue \vbox\bgroup % vbox has better behavior than vtop herev \fi\fi % \ifimagevmode \nobreak\medskip % Usually we'll have text after the image which will insert % \parskip glue, so insert it here too to equalize the space % above and below. \nobreak\vskip\parskip \nobreak \fi % % Leave vertical mode so that indentation from an enclosing % environment such as @quotation is respected. % However, if we're at the top level, we don't want the % normal paragraph indentation. % On the other hand, if we are in the case of @center @image, we don't % want to start a paragraph, which will create a hsize-width box and % eradicate the centering. \ifx\centersub\centerV\else \noindent \fi % % Output the image. \ifpdf % For pdfTeX and LuaTeX <= 0.80 \dopdfimage{#1}{#2}{#3}% \else \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 \medskip % space after a standalone image \fi \ifx\centersub\centerV \egroup \fi \endgroup} % @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, % etc. We don't actually implement floating yet, we always include the % float "here". But it seemed the best name for the future. % \envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} % There may be a space before second and/or third parameter; delete it. \def\eatcommaspace#1, {#1,} % #1 is the optional FLOATTYPE, the text label for this float, typically % "Figure", "Table", "Example", etc. Can't contain commas. If omitted, % this float will not be numbered and cannot be referred to. % % #2 is the optional xref label. Also must be present for the float to % be referable. % % #3 is the optional positioning argument; for now, it is ignored. It % will somehow specify the positions allowed to float to (here, top, bottom). % % We keep a separate counter for each FLOATTYPE, which we reset at each % chapter-level command. \let\resetallfloatnos=\empty % \def\dofloat#1,#2,#3,#4\finish{% \let\thiscaption=\empty \let\thisshortcaption=\empty % % don't lose footnotes inside @float. % % BEWARE: when the floats start float, we have to issue warning whenever an % insert appears inside a float which could possibly float. --kasal, 26may04 % \startsavinginserts % % We can't be used inside a paragraph. \par % \vtop\bgroup \def\floattype{#1}% \def\floatlabel{#2}% \def\floatloc{#3}% we do nothing with this yet. % \ifx\floattype\empty \let\safefloattype=\empty \else {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% \fi % % If label is given but no type, we handle that as the empty type. \ifx\floatlabel\empty \else % We want each FLOATTYPE to be numbered separately (Figure 1, % Table 1, Figure 2, ...). (And if no label, no number.) % \expandafter\getfloatno\csname\safefloattype floatno\endcsname \global\advance\floatno by 1 % {% % This magic value for \currentsection is output by \setref as the % XREFLABEL-title value. \xrefX uses it to distinguish float % labels (which have a completely different output format) from % node and anchor labels. And \xrdef uses it to construct the % lists of floats. % \edef\currentsection{\floatmagic=\safefloattype}% \setref{\floatlabel}{Yfloat}% }% \fi % % start with \parskip glue, I guess. \vskip\parskip % % Don't suppress indentation if a float happens to start a section. \restorefirstparagraphindent } % we have these possibilities: % @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap % @float Foo,lbl & no caption: Foo 1.1 % @float Foo & @caption{Cap}: Foo: Cap % @float Foo & no caption: Foo % @float ,lbl & Caption{Cap}: 1.1: Cap % @float ,lbl & no caption: 1.1 % @float & @caption{Cap}: Cap % @float & no caption: % \def\Efloat{% \let\floatident = \empty % % In all cases, if we have a float type, it comes first. \ifx\floattype\empty \else \def\floatident{\floattype}\fi % % If we have an xref label, the number comes next. \ifx\floatlabel\empty \else \ifx\floattype\empty \else % if also had float type, need tie first. \appendtomacro\floatident{\tie}% \fi % the number. \appendtomacro\floatident{\chaplevelprefix\the\floatno}% \fi % % Start the printed caption with what we've constructed in % \floatident, but keep it separate; we need \floatident again. \let\captionline = \floatident % \ifx\thiscaption\empty \else \ifx\floatident\empty \else \appendtomacro\captionline{: }% had ident, so need a colon between \fi % % caption text. \appendtomacro\captionline{\scanexp\thiscaption}% \fi % % If we have anything to print, print it, with space before. % Eventually this needs to become an \insert. \ifx\captionline\empty \else \vskip.5\parskip \captionline % % Space below caption. \vskip\parskip \fi % % If have an xref label, write the list of floats info. Do this % after the caption, to avoid chance of it being a breakpoint. \ifx\floatlabel\empty \else % Write the text that goes in the lof to the aux file as % \floatlabel-lof. Besides \floatident, we include the short % caption if specified, else the full caption if specified, else nothing. {% \requireauxfile \atdummies % \ifx\thisshortcaption\empty \def\gtemp{\thiscaption}% \else \def\gtemp{\thisshortcaption}% \fi \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident \ifx\gtemp\empty \else : \gtemp \fi}}% }% \fi \egroup % end of \vtop % \checkinserts } % Append the tokens #2 to the definition of macro #1, not expanding either. % \def\appendtomacro#1#2{% \expandafter\def\expandafter#1\expandafter{#1#2}% } % @caption, @shortcaption % \def\caption{\docaption\thiscaption} \def\shortcaption{\docaption\thisshortcaption} \def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} \def\defcaption#1#2{\egroup \def#1{#2}} % The parameter is the control sequence identifying the counter we are % going to use. Create it if it doesn't exist and assign it to \floatno. \def\getfloatno#1{% \ifx#1\relax % Haven't seen this figure type before. \csname newcount\endcsname #1% % % Remember to reset this floatno at the next chap. \expandafter\gdef\expandafter\resetallfloatnos \expandafter{\resetallfloatnos #1=0 }% \fi \let\floatno#1% } % \setref calls this to get the XREFLABEL-snt value. We want an @xref % to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we % first read the @float command. % \def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% % Magic string used for the XREFLABEL-title value, so \xrefX can % distinguish floats from other xref types. \def\floatmagic{!!float!!} % #1 is the control sequence we are passed; we expand into a conditional % which is true if #1 represents a float ref. That is, the magic % \currentsection value which we \setref above. % \def\iffloat#1{\expandafter\doiffloat#1==\finish} % % #1 is (maybe) the \floatmagic string. If so, #2 will be the % (safe) float type for this float. We set \iffloattype to #2. % \def\doiffloat#1=#2=#3\finish{% \def\temp{#1}% \def\iffloattype{#2}% \ifx\temp\floatmagic } % @listoffloats FLOATTYPE - print a list of floats like a table of contents. % \parseargdef\listoffloats{% \def\floattype{#1}% floattype {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% % % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax \ifhavexrefs % if the user said @listoffloats foo but never @float foo. \message{\linenumber No `\safefloattype' floats to list.}% \fi \else \begingroup \leftskip=\tocindent % indent these entries like a toc \let\do=\listoffloatsdo \csname floatlist\safefloattype\endcsname \endgroup \fi } % This is called on each entry in a list of floats. We're passed the % xref label, in the form LABEL-title, which is how we save it in the % aux file. We strip off the -title and look up \XRLABEL-lof, which % has the text we're supposed to typeset here. % % Figures without xref labels will not be included in the list (since % they won't appear in the aux file). % \def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} \def\listoffloatsdoentry#1-title\finish{{% % Can't fully expand XR#1-lof because it can contain anything. Just % pass the control sequence. On the other hand, XR#1-pg is just the % page number, and we want to fully expand that so we can get a link % in pdf output. \toksA = \expandafter{\csname XR#1-lof\endcsname}% % % use the same \entry macro we use to generate the TOC and index. \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% \writeentry }} \message{localization,} % For single-language documents, @documentlanguage is usually given very % early, just after @documentencoding. Single argument is the language % (de) or locale (de_DE) abbreviation. % { \catcode`\_ = \active \globaldefs=1 \parseargdef\documentlanguage{% \tex % read txi-??.tex file in plain TeX. % Read the file by the name they passed if it exists. \let_ = \normalunderscore % normal _ character for filename test \openin 1 txi-#1.tex \ifeof 1 \documentlanguagetrywithoutunderscore #1_\finish \else \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 \endgroup % end raw TeX } % % If they passed de_DE, and txi-de_DE.tex doesn't exist, % try txi-de.tex. % \gdef\documentlanguagetrywithoutunderscore#1_#2\finish{% \openin 1 txi-#1.tex \ifeof 1 \errhelp = \nolanghelp \errmessage{Cannot read language file txi-#1.tex}% \else \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 } }% end of special _ catcode % \newhelp\nolanghelp{The given language definition file cannot be found or is empty. Maybe you need to install it? Putting it in the current directory should work if nowhere else does.} % This macro is called from txi-??.tex files; the first argument is the % \language name to set (without the "\lang@" prefix), the second and % third args are \{left,right}hyphenmin. % % The language names to pass are determined when the format is built. % See the etex.log file created at that time, e.g., % /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log. % % With TeX Live 2008, etex now includes hyphenation patterns for all % available languages. This means we can support hyphenation in % Texinfo, at least to some extent. (This still doesn't solve the % accented characters problem.) % \catcode`@=11 \def\txisetlanguage#1#2#3{% % do not set the language if the name is undefined in the current TeX. \expandafter\ifx\csname lang@#1\endcsname \relax \message{no patterns for #1}% \else \global\language = \csname lang@#1\endcsname \fi % but there is no harm in adjusting the hyphenmin values regardless. \global\lefthyphenmin = #2\relax \global\righthyphenmin = #3\relax } % XeTeX and LuaTeX can handle Unicode natively. % Their default I/O uses UTF-8 sequences instead of a byte-wise operation. % Other TeX engines' I/O (pdfTeX, etc.) 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. % \def\setnonasciicharscatcode#1{% \count255=128 \loop\ifnum\count255<256 \global\catcode\count255=#1\relax \advance\count255 by 1 \repeat } \def\setnonasciicharscatcodenonglobal#1{% \count255=128 \loop\ifnum\count255<256 \catcode\count255=#1\relax \advance\count255 by 1 \repeat } % @documentencoding sets the definition of non-ASCII characters % according to the specified encoding. % \def\documentencoding{\parseargusing\filenamecatcodes\documentencodingzzz} \def\documentencodingzzz#1{% % % Encoding being declared for the document. \def\declaredencoding{\csname #1.enc\endcsname}% % % Supported encodings: names converted to tokens in order to be able % to compare them with \ifx. \def\ascii{\csname US-ASCII.enc\endcsname}% \def\latnine{\csname ISO-8859-15.enc\endcsname}% \def\latone{\csname ISO-8859-1.enc\endcsname}% \def\lattwo{\csname ISO-8859-2.enc\endcsname}% \def\utfeight{\csname UTF-8.enc\endcsname}% % \ifx \declaredencoding \ascii \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 \iftxinativeunicodecapable % For native Unicode handling (XeTeX and LuaTeX) \nativeunicodechardefs \else % For treating UTF-8 as byte sequences (TeX, eTeX and pdfTeX) \setnonasciicharscatcode\active % since we already invoked \utfeightchardefs at the top level % (below), do not re-invoke it, otherwise our check for duplicated % definitions gets triggered. Making non-ascii chars active is % sufficient. \fi % \else \message{Ignoring unknown document encoding: #1.}% % \fi % utfeight \fi % latnine \fi % latone \fi % lattwo \fi % ascii % \ifx\XeTeXrevision\thisisundefined \else \ifx \declaredencoding \utfeight \else \ifx \declaredencoding \ascii \else \message{Warning: XeTeX with non-UTF-8 encodings cannot handle % non-ASCII characters in auxiliary files.}% \fi \fi \fi } % 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, sorry: #1.}} % Take account of \c (plain) vs. \, (Texinfo) difference. \def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi} % First, make active non-ASCII characters in order for them to be % correctly categorized when TeX reads the replacement text of % 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{% \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. \def\latninechardefs{% % Encoding is almost identical to Latin1. \latonechardefs % \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{% \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. % % This code to support UTF-8 is based on LaTeX's utf8.def, with some % changes for Texinfo conventions. It is included here under the GPL by % permission from Frank Mittelbach and the LaTeX team. % \newcount\countUTFx \newcount\countUTFy \newcount\countUTFz \gdef\UTFviiiTwoOctets#1#2{\expandafter \UTFviiiDefined\csname u8:#1\string #2\endcsname} % \gdef\UTFviiiThreeOctets#1#2#3{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname} % \gdef\UTFviiiFourOctets#1#2#3#4{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname} \gdef\UTFviiiDefined#1{% \ifx #1\relax \message{\linenumber Unicode char \string #1 not defined for Texinfo}% \else \expandafter #1% \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{% \gdef~{% \ifpassthroughchars $% \else\expandafter\UTFviiiTwoOctets\expandafter$\fi}}% \UTFviiiLoop \countUTFx = "E0 \countUTFy = "F0 \def\UTFviiiTmp{% \gdef~{% \ifpassthroughchars $% \else\expandafter\UTFviiiThreeOctets\expandafter$\fi}}% \UTFviiiLoop \countUTFx = "F0 \countUTFy = "F4 \def\UTFviiiTmp{% \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 % All Unicode characters can be used if native Unicode handling is % active. However, if the font does not have the glyph, % letters are missing. \begingroup \uccode`\.="#1\relax \uppercase{.} \endgroup \else \errhelp = \EMsimple \errmessage{Unicode character U+#1 not supported, sorry}% \fi \else \csname uni:#1\endcsname \fi } % These macros are used here to construct the name of a control % sequence to be defined. \def\UTFviiiTwoOctetsName#1#2{% \csname u8:#1\string #2\endcsname}% \def\UTFviiiThreeOctetsName#1#2#3{% \csname u8:#1\string #2\string #3\endcsname}% \def\UTFviiiFourOctetsName#1#2#3#4{% \csname u8:#1\string #2\string #3\string #4\endcsname}% % For UTF-8 byte sequences (TeX, e-TeX and pdfTeX), % provide a definition macro to replace a Unicode character; % this gets used by the @U command % \begingroup \catcode`\"=12 \catcode`\<=12 \catcode`\.=12 \catcode`\,=12 \catcode`\;=12 \catcode`\!=12 \catcode`\~=13 \gdef\DeclareUnicodeCharacterUTFviii#1#2{% \countUTFz = "#1\relax \begingroup \parseXMLCharref % Give \u8:... its definition. The sequence of seven \expandafter's % expands after the \gdef three times, e.g. % % 1. \UTFviiTwoOctetsName B1 B2 % 2. \csname u8:B1 \string B2 \endcsname % 3. \u8: B1 B2 (a single control sequence token) % \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 % to the corresponding UTF-8 sequence. \gdef\parseXMLCharref{% \ifnum\countUTFz < "A0\relax \errhelp = \EMsimple \errmessage{Cannot define Unicode char value < 00A0}% \else\ifnum\countUTFz < "800\relax \parseUTFviiiA,% \parseUTFviiiB C\UTFviiiTwoOctetsName.,% \else\ifnum\countUTFz < "10000\relax \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiB E\UTFviiiThreeOctetsName.{,;}% \else \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiA!% \parseUTFviiiB F\UTFviiiFourOctetsName.{!,;}% \fi\fi\fi } % Extract a byte from the end of the UTF-8 representation of \countUTFx. % It must be a non-initial byte in the sequence. % Change \uccode of #1 for it to be used in \parseUTFviiiB as one % of the bytes. \gdef\parseUTFviiiA#1{% \countUTFx = \countUTFz \divide\countUTFz by 64 \countUTFy = \countUTFz % Save to be the future value of \countUTFz. \multiply\countUTFz by 64 % \countUTFz is now \countUTFx with the last 5 bits cleared. Subtract % in order to get the last five bits. \advance\countUTFx by -\countUTFz % Convert this to the byte in the UTF-8 sequence. \advance\countUTFx by 128 \uccode `#1\countUTFx \countUTFz = \countUTFy} % Used to put a UTF-8 byte sequence into \UTFviiiTmp % #1 is the increment for \countUTFz to yield a the first byte of the UTF-8 % sequence. % #2 is one of the \UTFviii*OctetsName macros. % #3 is always a full stop (.) % #4 is a template for the other bytes in the sequence. The values for these % bytes is substituted in here with \uppercase using the \uccode's. \gdef\parseUTFviiiB#1#2#3#4{% \advance\countUTFz by "#10\relax \uccode `#3\countUTFz \uppercase{\gdef\UTFviiiTmp{#2#3#4}}} \endgroup % For native Unicode handling (XeTeX and LuaTeX), % provide a definition macro that sets a catcode to `other' non-globally % \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{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{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{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{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{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{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{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{% \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 handling (XeTeX and LuaTeX), % provide a definition macro to replace/pass-through a 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 handling (XeTeX and LuaTeX) character replacing definition. % It activates the setting that replaces Unicode characters. \def\nativeunicodechardefs{% \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterNative \unicodechardefs } % For native Unicode handling (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 } % @U command definitions for native Unicode handling (XeTeX and LuaTeX). \def\nativeunicodechardefsatu{% \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterNativeAtU \unicodechardefs } % US-ASCII character definitions. \def\asciichardefs{% nothing need be done \relax } % Define all Unicode characters we know about. This makes UTF-8 the default % input encoding and allows @U to work. \iftxinativeunicodecapable \nativeunicodechardefsatu \else \utfeightchardefs \fi \message{formatting,} \newdimen\defaultparindent \defaultparindent = 15pt \chapheadingskip = 15pt plus 4pt minus 2pt \secheadingskip = 12pt plus 3pt minus 2pt \subsecheadingskip = 9pt plus 2pt minus 2pt % Prevent underfull vbox error messages. \vbadness = 10000 % Don't be very finicky about underfull hboxes, either. \hbadness = 6666 % Following George Bush, get rid of widows and orphans. \widowpenalty=10000 \clubpenalty=10000 % Use TeX 3.0's \emergencystretch to help line breaking, but if we're % using an old version of TeX, don't do anything. We want the amount of % stretch added to depend on the line length, hence the dependence on % \hsize. We call this whenever the paper size is set. % \def\setemergencystretch{% \ifx\emergencystretch\thisisundefined % Allow us to assign to \emergencystretch anyway. \def\emergencystretch{\dimen0}% \else \emergencystretch = .15\hsize \fi } % Parameters in order: 1) textheight; 2) textwidth; % 3) voffset; 4) hoffset; 5) binding offset; 6) topskip; % 7) physical page height; 8) physical page width. % % We also call \setleading{\textleading}, so the caller should define % \textleading. The caller should also set \parskip. % \def\internalpagesizes#1#2#3#4#5#6#7#8{% \voffset = #3\relax \topskip = #6\relax \splittopskip = \topskip % \vsize = #1\relax \advance\vsize by \topskip \outervsize = \vsize \advance\outervsize by 2\topandbottommargin \txipageheight = \vsize % \hsize = #2\relax \outerhsize = \hsize \advance\outerhsize by 0.5in \txipagewidth = \hsize % \normaloffset = #4\relax \bindingoffset = #5\relax % \ifpdf \pdfpageheight #7\relax \pdfpagewidth #8\relax % if we don't reset these, they will remain at "1 true in" of % whatever layout pdftex was dumped with. \pdfhorigin = 1 true in \pdfvorigin = 1 true in \else \ifx\XeTeXrevision\thisisundefined \special{papersize=#8,#7}% \else \pdfpageheight #7\relax \pdfpagewidth #8\relax % XeTeX does not have \pdfhorigin and \pdfvorigin. \fi \fi % \setleading{\textleading} % \parindent = \defaultparindent \setemergencystretch } % @letterpaper (the default). \def\letterpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % If page is nothing but text, make it come out even. \internalpagesizes{607.2pt}{6in}% that's 46 lines {\voffset}{.25in}% {\bindingoffset}{36pt}% {11in}{8.5in}% }} % Use @smallbook to reset parameters for 7x9.25 trim size. \def\smallbook{{\globaldefs = 1 \parskip = 2pt plus 1pt \textleading = 12pt % \internalpagesizes{7.5in}{5in}% {-.2in}{0in}% {\bindingoffset}{16pt}% {9.25in}{7in}% % \lispnarrowing = 0.3in \tolerance = 700 \contentsrightmargin = 0pt \defbodyindent = .5cm }} % Use @smallerbook to reset parameters for 6x9 trim size. % (Just testing, parameters still in flux.) \def\smallerbook{{\globaldefs = 1 \parskip = 1.5pt plus 1pt \textleading = 12pt % \internalpagesizes{7.4in}{4.8in}% {-.2in}{-.4in}% {0pt}{14pt}% {9in}{6in}% % \lispnarrowing = 0.25in \tolerance = 700 \contentsrightmargin = 0pt \defbodyindent = .4cm }} % Use @afourpaper to print on European A4 paper. \def\afourpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % Double-side printing via postscript on Laserjet 4050 % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. % To change the settings for a different printer or situation, adjust % \normaloffset until the front-side and back-side texts align. Then % do the same for \bindingoffset. You can set these for testing in % your texinfo source file like this: % @tex % \global\normaloffset = -6mm % \global\bindingoffset = 10mm % @end tex \internalpagesizes{673.2pt}{160mm}% that's 51 lines {\voffset}{\hoffset}% {\bindingoffset}{44pt}% {297mm}{210mm}% % \tolerance = 700 \contentsrightmargin = 0pt \defbodyindent = 5mm }} % Use @afivepaper to print on European A5 paper. % From romildo@urano.iceb.ufop.br, 2 July 2000. % He also recommends making @example and @lisp be small. \def\afivepaper{{\globaldefs = 1 \parskip = 2pt plus 1pt minus 0.1pt \textleading = 12.5pt % \internalpagesizes{160mm}{120mm}% {\voffset}{\hoffset}% {\bindingoffset}{8pt}% {210mm}{148mm}% % \lispnarrowing = 0.2in \tolerance = 800 \contentsrightmargin = 0pt \defbodyindent = 2mm \tableindent = 12mm }} % A specific text layout, 24x15cm overall, intended for A4 paper. \def\afourlatex{{\globaldefs = 1 \afourpaper \internalpagesizes{237mm}{150mm}% {\voffset}{4.6mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% % % Must explicitly reset to 0 because we call \afourpaper. \globaldefs = 0 }} % Use @afourwide to print on A4 paper in landscape format. \def\afourwide{{\globaldefs = 1 \afourpaper \internalpagesizes{241mm}{165mm}% {\voffset}{-2.95mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% \globaldefs = 0 }} % @pagesizes TEXTHEIGHT[,TEXTWIDTH] % Perhaps we should allow setting the margins, \topskip, \parskip, % and/or leading, also. Or perhaps we should compute them somehow. % \parseargdef\pagesizes{\pagesizesyyy #1,,\finish} \def\pagesizesyyy#1,#2,#3\finish{{% \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi \globaldefs = 1 % \parskip = 3pt plus 2pt minus 1pt \setleading{\textleading}% % \dimen0 = #1\relax \advance\dimen0 by \voffset \advance\dimen0 by 1in % reference point for DVI is 1 inch from top of page % \dimen2 = \hsize \advance\dimen2 by \normaloffset \advance\dimen2 by 1in % reference point is 1 inch from left edge of page % \internalpagesizes{#1}{\hsize}% {\voffset}{\normaloffset}% {\bindingoffset}{44pt}% {\dimen0}{\dimen2}% }} % Set default to letter. % \letterpaper % Default value of \hfuzz, for suppressing warnings about overfull hboxes. \hfuzz = 1pt \message{and turning on texinfo input format.} \def^^L{\par} % remove \outer, so ^L can appear in an @comment % DEL is a comment character, in case @c does not suffice. \catcode`\^^? = 14 % Define macros to output various characters with catcode for normal text. \catcode`\"=\other \def\normaldoublequote{"} \catcode`\$=\other \def\normaldollar{$}%$ font-lock fix \catcode`\+=\other \def\normalplus{+} \catcode`\<=\other \def\normalless{<} \catcode`\>=\other \def\normalgreater{>} \catcode`\^=\other \def\normalcaret{^} \catcode`\_=\other \def\normalunderscore{_} \catcode`\|=\other \def\normalverticalbar{|} \catcode`\~=\other \def\normaltilde{~} % This macro is used to make a character print one way in \tt % (where it can probably be output as-is), and another way in other fonts, % where something hairier probably needs to be done. % % #1 is what to print if we are indeed using \tt; #2 is what to print % otherwise. Since all the Computer Modern typewriter fonts have zero % interword stretch (and shrink), and it is reasonable to expect all % typewriter fonts to have this, we can check that font parameter. % \def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} % Same as above, but check for italic font. Actually this also catches % non-italic slanted fonts since it is impossible to distinguish them from % italic fonts. But since this is only used by $ and it uses \sl anyway % this is not a problem. \def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} % 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\hatchar=`\^ \catcode`\^=\active \def\activehat{{\tt \hatchar}} \let^ = \activehat \catcode`\_=\active \def_{\ifusingtt\normalunderscore\_} \def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } \let\realunder=_ \catcode`\|=\active \def|{{\tt\char124}} \chardef \less=`\< \catcode`\<=\active \def\activeless{{\tt \less}}\let< = \activeless \chardef \gtr=`\> \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. \def\texinfochars{% \let< = \activeless \let> = \activegtr \let~ = \activetilde \let^ = \activehat \markupsetuplqdefault \markupsetuprqdefault \let\b = \strong \let\i = \smartitalic % in principle, all other definitions in \tex have to be undone too. } % Used sometimes to turn off (effectively) the active characters even after % parsing them. \def\turnoffactive{% \normalturnoffactive \otherbackslash } \catcode`\@=0 % \backslashcurfont outputs one backslash character in current font, % as in \char`\\. \global\chardef\backslashcurfont=`\\ % \realbackslash is an actual character `\' with catcode other. {\catcode`\\=\other @gdef@realbackslash{\}} % In Texinfo, backslash is an active character; it prints the backslash % in fixed width font. \catcode`\\=\active % @ for escape char from now on. % 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@ttbackslash{{@tt @ifmmode @mathchar29020 @else @backslashcurfont @fi}} @let@backslashchar = @ttbackslash % @backslashchar{} is for user documents. % \otherbackslash defines an active \ to be a literal `\' character with % catcode other. @gdef@otherbackslash{@let\=@realbackslash} % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of % the literal character `\'. % {@catcode`- = @active @gdef@normalturnoffactive{% @passthroughcharstrue @let-=@normaldash @let"=@normaldoublequote @let$=@normaldollar %$ font-lock fix @let+=@normalplus @let<=@normalless @let>=@normalgreater @let^=@normalcaret @let_=@normalunderscore @let|=@normalverticalbar @let~=@normaltilde @let\=@ttbackslash @markupsetuplqdefault @markupsetuprqdefault @unsepspaces } } % 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. % 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}% % In case the first line has a whole-line command on it @let@originalparsearg@parsearg @def@parsearg{@fixbackslash@originalparsearg} }} {@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% %@par% }}} @gdef@fixbackslash{% @ifx\@eatinput @let\ = @ttbackslash @fi @catcode13=5 % regular end of line @enableemergencynewline @let@c=@comment @let@parsearg@originalparsearg % 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 = `@@ % These (along with & and #) are made active for url-breaking, so need % active definitions as the normal characters. @def@normaldot{.} @def@normalquest{?} @def@normalslash{/} % These look ok in all fonts, so just make them not special. % @hashchar{} gets its own user-level command, because of #line. @catcode`@& = @other @def@normalamp{&} @catcode`@# = @other @def@normalhash{#} @catcode`@% = @other @def@normalpercent{%} @let @hashchar = @normalhash @c Finally, make ` and ' active, so that txicodequoteundirected and @c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}. If we @c don't make ` and ' active, @code will not get them as active chars. @c Do this last of all since we use ` in the previous @catcode assignments. @catcode`@'=@active @catcode`@`=@active @markupsetuplqdefault @markupsetuprqdefault @c Local variables: @c eval: (add-hook 'before-save-hook 'time-stamp) @c page-delimiter: "^\\\\message\\|emacs-page" @c time-stamp-start: "def\\\\texinfoversion{" @c time-stamp-format: "%:y-%02m-%02d.%02H" @c time-stamp-end: "}" @c End: @c vim:sw=2: @enablebackslashhack make-4.3/build-aux/missing0000755000175000017500000001533613611136507012522 00000000000000#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1996-2018 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # 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, 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, see . # 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. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=https://www.perl.org/ flex_URL=https://github.com/westes/flex gnu_software_URL=https://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: make-4.3/build-aux/config.guess0000755000175000017500000013647113601415416013445 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2019 Free Software Foundation, Inc. timestamp='2019-12-21' # 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 # the Free Software Foundation; either version 3 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, see . # # 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. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess # # Please send patches to . me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2019 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." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. tmp= # shellcheck disable=SC2172 trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 set_cc_for_build() { # prevent multiple calls if $tmp is already set test "$tmp" && return 0 : "${TMPDIR=/tmp}" # shellcheck disable=SC2039 { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } dummy=$tmp/dummy case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in ,,) echo "int x;" > "$dummy.c" for driver in cc gcc c89 c99 ; do if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD="$driver" break fi done if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac } # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if test -f /.attbin/uname ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "$UNAME_SYSTEM" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu set_cc_for_build cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`" # If ldd exists, use it to detect musl libc. if command -v ldd >/dev/null && \ ldd --version 2>&1 | grep -q ^musl then LIBC=musl fi ;; esac # Note: order is significant - the case branches are not exclusive. case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # 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=`(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) and ABI. case "$UNAME_MACHINE_ARCH" in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) 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 # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "$UNAME_VERSION" in Debian*) release='-gnu' ;; *) 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}${abi-}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE" exit ;; *:OpenBSD:*:*) 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 ;; *:MidnightBSD:*:*) echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE" exit ;; *:ekkoBSD:*:*) echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE" exit ;; *:SolidBSD:*:*) echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE" exit ;; *:OS108:*:*) echo "$UNAME_MACHINE"-unknown-os108_"$UNAME_RELEASE" exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd"$UNAME_RELEASE" exit ;; *:MirBSD:*:*) echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE" exit ;; *:Sortix:*:*) echo "$UNAME_MACHINE"-unknown-sortix exit ;; *:Twizzler:*:*) echo "$UNAME_MACHINE"-unknown-twizzler exit ;; *:Redox:*:*) echo "$UNAME_MACHINE"-unknown-redox exit ;; mips:OSF1:*.*) echo mips-dec-osf1 exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. 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 ;; "EV4.5 (21064)") UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") UNAME_MACHINE=alpha ;; "EV5 (21164)") UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") 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`" # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo "$UNAME_MACHINE"-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo "$UNAME_MACHINE"-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix"$UNAME_RELEASE" exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux"$UNAME_RELEASE" exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) set_cc_for_build 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 (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`" exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos"$UNAME_RELEASE" 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 case "`/bin/arch`" in sun3) echo m68k-sun-sunos"$UNAME_RELEASE" ;; sun4) echo sparc-sun-sunos"$UNAME_RELEASE" ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos"$UNAME_RELEASE" exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint"$UNAME_RELEASE" exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint"$UNAME_RELEASE" exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint"$UNAME_RELEASE" exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint"$UNAME_RELEASE" exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint"$UNAME_RELEASE" exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint"$UNAME_RELEASE" exit ;; m68k:machten:*:*) echo m68k-apple-machten"$UNAME_RELEASE" exit ;; powerpc:machten:*:*) echo powerpc-apple-machten"$UNAME_RELEASE" exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix"$UNAME_RELEASE" exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix"$UNAME_RELEASE" exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix"$UNAME_RELEASE" exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos"$UNAME_RELEASE" exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ] then if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \ [ "$TARGET_BINARY_INTERFACE"x = x ] then echo m88k-dg-dgux"$UNAME_RELEASE" else echo m88k-dg-dguxbcs"$UNAME_RELEASE" fi else echo i586-dg-dgux"$UNAME_RELEASE" fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`" exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV" exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi 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 echo "$IBM_ARCH"-ibm-aix"$IBM_REV" exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd"$UNAME_RELEASE" # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` case "$UNAME_MACHINE" in 9000/31?) HP_ARCH=m68000 ;; 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then 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 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 esac ;; esac fi if [ "$HP_ARCH" = "" ]; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (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 ] then set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH=hppa2.0w else HP_ARCH=hppa64 fi fi echo "$HP_ARCH"-hp-hpux"$HPUX_REV" exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux"$HPUX_REV" exit ;; 3050*:HI-UX:*:*) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo "$UNAME_MACHINE"-unknown-osf1mk else echo "$UNAME_MACHINE"-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) 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_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/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE" exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi"$UNAME_RELEASE" exit ;; *:BSD/OS:*:*) echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE" exit ;; arm:FreeBSD:*:*) UNAME_PROCESSOR=`uname -p` set_cc_for_build if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabi else echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabihf fi exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case "$UNAME_PROCESSOR" in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" exit ;; i*:CYGWIN*:*) echo "$UNAME_MACHINE"-pc-cygwin exit ;; *:MINGW64*:*) echo "$UNAME_MACHINE"-pc-mingw64 exit ;; *:MINGW*:*) echo "$UNAME_MACHINE"-pc-mingw32 exit ;; *:MSYS*:*) echo "$UNAME_MACHINE"-pc-msys exit ;; i*:PW*:*) echo "$UNAME_MACHINE"-pc-pw32 exit ;; *:Interix*:*) case "$UNAME_MACHINE" in x86) echo i586-pc-interix"$UNAME_RELEASE" exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix"$UNAME_RELEASE" exit ;; IA64) echo ia64-unknown-interix"$UNAME_RELEASE" exit ;; esac ;; i*:UWIN*:*) echo "$UNAME_MACHINE"-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-pc-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; *:GNU:*:*) # the GNU system echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`" exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC" exit ;; *:Minix:*:*) echo "$UNAME_MACHINE"-unknown-minix exit ;; aarch64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; arm*:Linux:*:*) set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi else echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf fi fi exit ;; avr32*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; cris:Linux:*:*) echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; 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 ;; hexagon:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; i*86:Linux:*:*) echo "$UNAME_MACHINE"-pc-linux-"$LIBC" exit ;; 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 ;; m68*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; mips:Linux:*:* | mips64:Linux:*:*) set_cc_for_build IS_GLIBC=0 test x"${LIBC}" = xgnu && IS_GLIBC=1 sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef mips #undef mipsel #undef mips64 #undef mips64el #if ${IS_GLIBC} && defined(_ABI64) LIBCABI=gnuabi64 #else #if ${IS_GLIBC} && defined(_ABIN32) LIBCABI=gnuabin32 #else LIBCABI=${LIBC} #endif #endif #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa64r6 #else #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa32r6 #else #if defined(__mips64) CPU=mips64 #else CPU=mips #endif #endif #endif #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) MIPS_ENDIAN=el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) MIPS_ENDIAN= #else MIPS_ENDIAN= #endif #endif EOF eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'`" test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } ;; mips64el:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-"$LIBC" exit ;; or32:Linux:*:* | or1k*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; padre:Linux:*:*) echo sparc-unknown-linux-"$LIBC" exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-"$LIBC" exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;; PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;; *) echo hppa-unknown-linux-"$LIBC" ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-"$LIBC" exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-"$LIBC" exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-"$LIBC" exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-"$LIBC" exit ;; riscv32:Linux:*:* | riscv64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo "$UNAME_MACHINE"-ibm-linux-"$LIBC" exit ;; sh64*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sh*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; tile*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; vax:Linux:*:*) echo "$UNAME_MACHINE"-dec-linux-"$LIBC" exit ;; x86_64:Linux:*:*) echo "$UNAME_MACHINE"-pc-linux-"$LIBC" exit ;; xtensa*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION" exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo "$UNAME_MACHINE"-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo "$UNAME_MACHINE"-unknown-stop exit ;; i*86:atheos:*:*) echo "$UNAME_MACHINE"-unknown-atheos exit ;; i*86:syllable:*:*) echo "$UNAME_MACHINE"-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos"$UNAME_RELEASE" exit ;; i*86:*DOS:*:*) echo "$UNAME_MACHINE"-pc-msdosdjgpp exit ;; i*86:*:4.*:*) UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL" else echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL" fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}" exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL" else echo "$UNAME_MACHINE"-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # 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 configure will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv"$UNAME_RELEASE" # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos"$UNAME_RELEASE" exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos"$UNAME_RELEASE" exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos"$UNAME_RELEASE" exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos"$UNAME_RELEASE" exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv"$UNAME_RELEASE" exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo "$UNAME_MACHINE"-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo "$UNAME_MACHINE"-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux"$UNAME_RELEASE" exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv"$UNAME_RELEASE" else echo mips-unknown-sysv"$UNAME_RELEASE" fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux"$UNAME_RELEASE" exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux"$UNAME_RELEASE" exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux"$UNAME_RELEASE" exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux"$UNAME_RELEASE" exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux"$UNAME_RELEASE" exit ;; 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 ;; *:Rhapsody:*:*) echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE" exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac if command -v xcode-select > /dev/null 2> /dev/null && \ ! xcode-select --print-path > /dev/null 2> /dev/null ; then # Avoid executing cc if there is no toolchain installed as # cc will be a stub that puts up a graphical alert # prompting the user to install developer tools. CC_FOR_BUILD=no_compiler_found else set_cc_for_build fi 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) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc fi elif test "$UNAME_PROCESSOR" = i386 ; then # uname -m returns i386 or x86_64 UNAME_PROCESSOR=$UNAME_MACHINE fi echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE" exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE" exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-*:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk"$UNAME_RELEASE" exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk"$UNAME_RELEASE" exit ;; NSR-*:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk"$UNAME_RELEASE" exit ;; NSV-*:NONSTOP_KERNEL:*:*) echo nsv-tandem-nsk"$UNAME_RELEASE" exit ;; NSX-*:NONSTOP_KERNEL:*:*) echo nsx-tandem-nsk"$UNAME_RELEASE" exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE" exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. # shellcheck disable=SC2154 if test "$cputype" = 386; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo "$UNAME_MACHINE"-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux"$UNAME_RELEASE" exit ;; *:DragonFly:*:*) echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "$UNAME_MACHINE" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`" exit ;; i*86:rdos:*:*) echo "$UNAME_MACHINE"-pc-rdos exit ;; i*86:AROS:*:*) echo "$UNAME_MACHINE"-pc-aros exit ;; x86_64:VMkernel:*:*) echo "$UNAME_MACHINE"-unknown-esx exit ;; amd64:Isilon\ OneFS:*:*) echo x86_64-unknown-onefs exit ;; *:Unleashed:*:*) echo "$UNAME_MACHINE"-unknown-unleashed"$UNAME_RELEASE" exit ;; esac # No uname command or uname output not recognized. set_cc_for_build cat > "$dummy.c" < #include #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #include #if defined(_SIZE_T_) || defined(SIGLOST) #include #endif #endif #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) #if !defined (ultrix) #include #if defined (BSD) #if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); #else #if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); #else printf ("vax-dec-bsd\n"); exit (0); #endif #endif #else printf ("vax-dec-bsd\n"); exit (0); #endif #else #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname un; uname (&un); printf ("vax-dec-ultrix%s\n", un.release); exit (0); #else printf ("vax-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname *un; uname (&un); printf ("mips-dec-ultrix%s\n", un.release); exit (0); #else printf ("mips-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } echo "$0: unable to guess system type" >&2 case "$UNAME_MACHINE:$UNAME_SYSTEM" in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <&2 </dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = "$UNAME_MACHINE" UNAME_RELEASE = "$UNAME_RELEASE" UNAME_SYSTEM = "$UNAME_SYSTEM" UNAME_VERSION = "$UNAME_VERSION" EOF exit 1 # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: make-4.3/build-aux/compile0000755000175000017500000001632713611136507012502 00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1999-2018 Free Software Foundation, Inc. # Written by Tom Tromey . # # 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, 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, see . # 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. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: make-4.3/build-aux/config.rpath0000755000175000017500000004421613611136462013432 00000000000000#! /bin/sh # Output a system dependent set of variables, describing how to set the # run time search path of shared libraries in an executable. # # Copyright 1996-2014 Free Software Foundation, Inc. # Taken from GNU libtool, 2001 # Originally by Gordon Matzigkeit , 1996 # # 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. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld # should be set by the caller. # # The set of defined variables is at the end of this script. # Known limitations: # - On IRIX 6.5 with CC="cc", the run time search patch must not be longer # than 256 bytes, otherwise the compiler driver will dump core. The only # 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, # which needs '.lib'). libext=a shrext=.so host="$1" host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # Code taken from libtool.m4's _LT_CC_BASENAME. for cc_temp in $CC""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` # Code taken from libtool.m4's _LT_COMPILER_PIC. wl= if test "$GCC" = yes; then wl='-Wl,' else case "$host_os" in aix*) wl='-Wl,' ;; mingw* | cygwin* | pw32* | os2* | cegcc*) ;; hpux9* | hpux10* | hpux11*) wl='-Wl,' ;; irix5* | irix6* | nonstopux*) wl='-Wl,' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in ecc*) wl='-Wl,' ;; icc* | ifort*) wl='-Wl,' ;; lf95*) wl='-Wl,' ;; 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,' ;; esac ;; esac ;; newsos6) ;; *nto* | *qnx*) ;; osf3* | osf4* | osf5*) wl='-Wl,' ;; rdos*) ;; solaris*) case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) wl='-Qoption ld ' ;; *) wl='-Wl,' ;; esac ;; sunos4*) wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3*) wl='-Wl,' ;; sysv4*MP*) ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) wl='-Wl,' ;; unicos*) wl='-Wl,' ;; uts4*) ;; esac fi # Code taken from libtool.m4's _LT_LINKER_SHLIBS. hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no case "$host_os" in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. # Unlike libtool, we use -rpath here, not --rpath, since the documented # option of GNU ld is called -rpath, not --rpath. hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' case "$host_os" in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no fi ;; amigaos*) 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 : else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then : else ld_shlibs=no fi ;; haiku*) ;; interix[3-9]*) hardcode_direct=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; netbsd*) ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' else ld_shlibs=no fi ;; esac ;; sunos4*) hardcode_direct=yes ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then hardcode_libdir_flag_spec= fi else case "$host_os" in aix3*) # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac fi hardcode_direct=yes hardcode_libdir_separator=':' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac fi # Begin _LT_AC_SYS_LIBPATH_AIX. echo 'int main () { return 0; }' > conftest.c ${CC} ${LDFLAGS} conftest.c -o conftest aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` fi if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib" fi rm -f conftest.c conftest # End _LT_AC_SYS_LIBPATH_AIX. if test "$aix_use_runtimelinking" = yes; then hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' else hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" fi fi ;; amigaos*) case "$host_cpu" in powerpc) ;; m68k) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' libext=lib ;; darwin* | rhapsody*) hardcode_direct=no if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then : else ld_shlibs=no fi ;; dgux*) hardcode_libdir_flag_spec='-L$libdir' ;; freebsd2.[01]*) hardcode_direct=yes hardcode_minus_L=yes ;; freebsd* | dragonfly*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; hpux9*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; hpux10*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no ;; *) hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; netbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; newsos6) hardcode_direct=yes 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 if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then hardcode_libdir_flag_spec='${wl}-rpath,$libdir' else case "$host_os" in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) hardcode_libdir_flag_spec='-R$libdir' ;; *) hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; osf3*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) if test "$GCC" = yes; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else # Both cc and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; solaris*) hardcode_libdir_flag_spec='-R$libdir' ;; sunos4*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes ;; sysv4) case $host_vendor in sni) hardcode_direct=yes # is this really true??? ;; siemens) hardcode_direct=no ;; motorola) hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac ;; sysv4.3*) ;; sysv4*MP*) if test -d /usr/nec; then ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) ;; sysv5* | sco3.2v5* | sco5v6*) hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator=':' ;; uts4*) hardcode_libdir_flag_spec='-L$libdir' ;; *) ld_shlibs=no ;; esac fi # Check dynamic linker characteristics # Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER. # Unlike libtool.m4, here we don't care about _all_ names of the library, but # only about the one the linker finds when passed -lNAME. This is the last # element of library_names_spec in libtool.m4, or possibly two of them if the # linker has special search rules. library_names_spec= # the last element of library_names_spec in libtool.m4 libname_spec='lib$name' case "$host_os" in aix3*) library_names_spec='$libname.a' ;; aix[4-9]*) library_names_spec='$libname$shrext' ;; amigaos*) case "$host_cpu" in powerpc*) library_names_spec='$libname$shrext' ;; m68k) library_names_spec='$libname.a' ;; esac ;; beos*) library_names_spec='$libname$shrext' ;; bsdi[45]*) library_names_spec='$libname$shrext' ;; cygwin* | mingw* | pw32* | cegcc*) shrext=.dll library_names_spec='$libname.dll.a $libname.lib' ;; darwin* | rhapsody*) shrext=.dylib library_names_spec='$libname$shrext' ;; dgux*) library_names_spec='$libname$shrext' ;; freebsd[23].*) library_names_spec='$libname$shrext$versuffix' ;; freebsd* | dragonfly*) 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*) shrext=.so ;; hppa*64*) shrext=.sl ;; *) shrext=.sl ;; esac library_names_spec='$libname$shrext' ;; interix[3-9]*) library_names_spec='$libname$shrext' ;; irix5* | irix6* | nonstopux*) library_names_spec='$libname$shrext' case "$host_os" in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; *) libsuff= shlibsuff= ;; esac ;; esac ;; linux*oldld* | linux*aout* | linux*coff*) ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) library_names_spec='$libname$shrext' ;; knetbsd*-gnu) library_names_spec='$libname$shrext' ;; netbsd*) library_names_spec='$libname$shrext' ;; newsos6) library_names_spec='$libname$shrext' ;; *nto* | *qnx*) library_names_spec='$libname$shrext' ;; openbsd*) library_names_spec='$libname$shrext$versuffix' ;; os2*) libname_spec='$name' shrext=.dll library_names_spec='$libname.a' ;; osf3* | osf4* | osf5*) library_names_spec='$libname$shrext' ;; rdos*) ;; solaris*) library_names_spec='$libname$shrext' ;; sunos4*) library_names_spec='$libname$shrext$versuffix' ;; sysv4 | sysv4.3*) library_names_spec='$libname$shrext' ;; sysv4*MP*) library_names_spec='$libname$shrext' ;; 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' ;; esac sed_quote_subst='s/\(["`$\\]\)/\\\1/g' escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` shlibext=`echo "$shrext" | sed -e 's,^\.,,'` escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <. # # 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. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # https://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 # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2019 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." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; *local*) # First pass through any local machine types. echo "$1" exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Split fields of configuration type # shellcheck disable=SC2162 IFS="-" read field1 field2 field3 field4 <&2 exit 1 ;; *-*-*-*) basic_machine=$field1-$field2 os=$field3-$field4 ;; *-*-*) # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two # parts maybe_os=$field2-$field3 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* \ | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ | storm-chaos* | os2-emx* | rtmk-nova*) basic_machine=$field1 os=$maybe_os ;; android-linux) basic_machine=$field1-unknown os=linux-android ;; *) basic_machine=$field1-$field2 os=$field3 ;; esac ;; *-*) # A lone config we happen to match not fitting any pattern case $field1-$field2 in decstation-3100) basic_machine=mips-dec os= ;; *-*) # Second component is usually, but not always the OS case $field2 in # Prevent following clause from handling this valid os sun*os*) basic_machine=$field1 os=$field2 ;; # Manufacturers dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ | unicom* | ibm* | next | hp | isi* | apollo | altos* \ | convergent* | ncr* | news | 32* | 3600* | 3100* \ | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ | ultra | tti* | harris | dolphin | highlevel | gould \ | cbm | ns | masscomp | apple | axis | knuth | cray \ | microblaze* | sim | cisco \ | oki | wec | wrs | winbond) basic_machine=$field1-$field2 os= ;; *) basic_machine=$field1 os=$field2 ;; esac ;; esac ;; *) # Convert single-component short-hands not valid as part of # multi-component configurations. case $field1 in 386bsd) basic_machine=i386-pc os=bsd ;; a29khif) basic_machine=a29k-amd os=udi ;; adobe68k) basic_machine=m68010-adobe os=scout ;; alliant) basic_machine=fx80-alliant os= ;; altos | altos3068) basic_machine=m68k-altos os= ;; am29k) basic_machine=a29k-none os=bsd ;; amdahl) basic_machine=580-amdahl os=sysv ;; amiga) basic_machine=m68k-unknown os= ;; amigaos | amigados) basic_machine=m68k-unknown os=amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=sysv4 ;; apollo68) basic_machine=m68k-apollo os=sysv ;; apollo68bsd) basic_machine=m68k-apollo os=bsd ;; aros) basic_machine=i386-pc os=aros ;; aux) basic_machine=m68k-apple os=aux ;; balance) basic_machine=ns32k-sequent os=dynix ;; blackfin) basic_machine=bfin-unknown os=linux ;; cegcc) basic_machine=arm-unknown os=cegcc ;; convex-c1) basic_machine=c1-convex os=bsd ;; convex-c2) basic_machine=c2-convex os=bsd ;; convex-c32) basic_machine=c32-convex os=bsd ;; convex-c34) basic_machine=c34-convex os=bsd ;; convex-c38) basic_machine=c38-convex os=bsd ;; cray) basic_machine=j90-cray os=unicos ;; crds | unos) basic_machine=m68k-crds os= ;; da30) basic_machine=m68k-da30 os= ;; decstation | pmax | pmin | dec3100 | decstatn) basic_machine=mips-dec os= ;; delta88) basic_machine=m88k-motorola os=sysv3 ;; dicos) basic_machine=i686-pc os=dicos ;; djgpp) basic_machine=i586-pc os=msdosdjgpp ;; ebmon29k) basic_machine=a29k-amd os=ebmon ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=ose ;; gmicro) basic_machine=tron-gmicro os=sysv ;; go32) basic_machine=i386-pc os=go32 ;; h8300hms) basic_machine=h8300-hitachi os=hms ;; h8300xray) basic_machine=h8300-hitachi os=xray ;; h8500hms) basic_machine=h8500-hitachi os=hms ;; harris) basic_machine=m88k-harris os=sysv3 ;; hp300 | hp300hpux) basic_machine=m68k-hp os=hpux ;; hp300bsd) basic_machine=m68k-hp os=bsd ;; hppaosf) basic_machine=hppa1.1-hp os=osf ;; hppro) basic_machine=hppa1.1-hp os=proelf ;; i386mach) basic_machine=i386-mach os=mach ;; isi68 | isi) basic_machine=m68k-isi os=sysv ;; m68knommu) basic_machine=m68k-unknown os=linux ;; magnum | m3230) basic_machine=mips-mips os=sysv ;; merlin) basic_machine=ns32k-utek os=sysv ;; mingw64) basic_machine=x86_64-pc os=mingw64 ;; mingw32) basic_machine=i686-pc os=mingw32 ;; mingw32ce) basic_machine=arm-unknown os=mingw32ce ;; monitor) basic_machine=m68k-rom68k os=coff ;; morphos) basic_machine=powerpc-unknown os=morphos ;; moxiebox) basic_machine=moxie-unknown os=moxiebox ;; msdos) basic_machine=i386-pc os=msdos ;; msys) basic_machine=i686-pc os=msys ;; mvs) basic_machine=i370-ibm os=mvs ;; nacl) basic_machine=le32-unknown os=nacl ;; ncr3000) basic_machine=i486-ncr os=sysv4 ;; netbsd386) basic_machine=i386-pc os=netbsd ;; netwinder) basic_machine=armv4l-rebel os=linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=newsos ;; news1000) basic_machine=m68030-sony os=newsos ;; necv70) basic_machine=v70-nec os=sysv ;; nh3000) basic_machine=m68k-harris os=cxux ;; nh[45]000) basic_machine=m88k-harris os=cxux ;; nindy960) basic_machine=i960-intel os=nindy ;; mon960) basic_machine=i960-intel os=mon960 ;; nonstopux) basic_machine=mips-compaq os=nonstopux ;; os400) basic_machine=powerpc-ibm os=os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=ose ;; os68k) basic_machine=m68k-none os=os68k ;; paragon) basic_machine=i860-intel os=osf ;; parisc) basic_machine=hppa-unknown os=linux ;; pw32) basic_machine=i586-unknown os=pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=rdos ;; rdos32) basic_machine=i386-pc os=rdos ;; rom68k) basic_machine=m68k-rom68k os=coff ;; sa29200) basic_machine=a29k-amd os=udi ;; sei) basic_machine=mips-sei os=seiux ;; sequent) basic_machine=i386-sequent os= ;; sps7) basic_machine=m68k-bull os=sysv2 ;; st2000) basic_machine=m68k-tandem os= ;; stratus) basic_machine=i860-stratus os=sysv4 ;; sun2) basic_machine=m68000-sun os= ;; sun2os3) basic_machine=m68000-sun os=sunos3 ;; sun2os4) basic_machine=m68000-sun os=sunos4 ;; sun3) basic_machine=m68k-sun os= ;; sun3os3) basic_machine=m68k-sun os=sunos3 ;; sun3os4) basic_machine=m68k-sun os=sunos4 ;; sun4) basic_machine=sparc-sun os= ;; sun4os3) basic_machine=sparc-sun os=sunos3 ;; sun4os4) basic_machine=sparc-sun os=sunos4 ;; sun4sol2) basic_machine=sparc-sun os=solaris2 ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun os= ;; sv1) basic_machine=sv1-cray os=unicos ;; symmetry) basic_machine=i386-sequent os=dynix ;; t3e) basic_machine=alphaev5-cray os=unicos ;; t90) basic_machine=t90-cray os=unicos ;; toad1) basic_machine=pdp10-xkl os=tops20 ;; tpf) basic_machine=s390x-ibm os=tpf ;; udi29k) basic_machine=a29k-amd os=udi ;; ultra3) basic_machine=a29k-nyu os=sym1 ;; v810 | necv810) basic_machine=v810-nec os=none ;; vaxv) basic_machine=vax-dec os=sysv ;; vms) basic_machine=vax-dec os=vms ;; vsta) basic_machine=i386-pc os=vsta ;; vxworks960) basic_machine=i960-wrs os=vxworks ;; vxworks68) basic_machine=m68k-wrs os=vxworks ;; vxworks29k) basic_machine=a29k-wrs os=vxworks ;; xbox) basic_machine=i686-pc os=mingw32 ;; ymp) basic_machine=ymp-cray os=unicos ;; *) basic_machine=$1 os= ;; esac ;; esac # Decode 1-component or ad-hoc basic machines case $basic_machine in # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) cpu=hppa1.1 vendor=winbond ;; op50n) cpu=hppa1.1 vendor=oki ;; op60c) cpu=hppa1.1 vendor=oki ;; ibm*) cpu=i370 vendor=ibm ;; orion105) cpu=clipper vendor=highlevel ;; mac | mpw | mac-mpw) cpu=m68k vendor=apple ;; pmac | pmac-mpw) cpu=powerpc vendor=apple ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) cpu=m68000 vendor=att ;; 3b*) cpu=we32k vendor=att ;; bluegene*) cpu=powerpc vendor=ibm os=cnk ;; decsystem10* | dec10*) cpu=pdp10 vendor=dec os=tops10 ;; decsystem20* | dec20*) cpu=pdp10 vendor=dec os=tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) cpu=m68k vendor=motorola ;; dpx2*) cpu=m68k vendor=bull os=sysv3 ;; encore | umax | mmax) cpu=ns32k vendor=encore ;; elxsi) cpu=elxsi vendor=elxsi os=${os:-bsd} ;; fx2800) cpu=i860 vendor=alliant ;; genix) cpu=ns32k vendor=ns ;; h3050r* | hiux*) cpu=hppa1.1 vendor=hitachi os=hiuxwe2 ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) cpu=m68000 vendor=hp ;; hp9k3[2-9][0-9]) cpu=m68k vendor=hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) cpu=hppa1.1 vendor=hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; i*86v32) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc os=sysv32 ;; i*86v4*) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc os=sysv4 ;; i*86v) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc os=sysv ;; i*86sol2) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc os=solaris2 ;; j90 | j90-cray) cpu=j90 vendor=cray os=${os:-unicos} ;; iris | iris4d) cpu=mips vendor=sgi case $os in irix*) ;; *) os=irix4 ;; esac ;; miniframe) cpu=m68000 vendor=convergent ;; *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) cpu=m68k vendor=atari os=mint ;; news-3600 | risc-news) cpu=mips vendor=sony os=newsos ;; next | m*-next) cpu=m68k vendor=next case $os in openstep*) ;; nextstep*) ;; ns2*) os=nextstep2 ;; *) os=nextstep3 ;; esac ;; np1) cpu=np1 vendor=gould ;; op50n-* | op60c-*) cpu=hppa1.1 vendor=oki os=proelf ;; pa-hitachi) cpu=hppa1.1 vendor=hitachi os=hiuxwe2 ;; pbd) cpu=sparc vendor=tti ;; pbb) cpu=m68k vendor=tti ;; pc532) cpu=ns32k vendor=pc532 ;; pn) cpu=pn vendor=gould ;; power) cpu=power vendor=ibm ;; ps2) cpu=i386 vendor=ibm ;; rm[46]00) cpu=mips vendor=siemens ;; rtpc | rtpc-*) cpu=romp vendor=ibm ;; sde) cpu=mipsisa32 vendor=sde os=${os:-elf} ;; simso-wrs) cpu=sparclite vendor=wrs os=vxworks ;; tower | tower-32) cpu=m68k vendor=ncr ;; vpp*|vx|vx-*) cpu=f301 vendor=fujitsu ;; w65) cpu=w65 vendor=wdc ;; w89k-*) cpu=hppa1.1 vendor=winbond os=proelf ;; none) cpu=none vendor=none ;; leon|leon[3-9]) cpu=sparc vendor=$basic_machine ;; leon-*|leon[3-9]-*) cpu=sparc vendor=`echo "$basic_machine" | sed 's/-.*//'` ;; *-*) # shellcheck disable=SC2162 IFS="-" read cpu vendor <&2 exit 1 ;; esac ;; esac # Here we canonicalize certain aliases for manufacturers. case $vendor in digital*) vendor=dec ;; commodore*) vendor=cbm ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x$os != x ] then case $os in # First match some system type aliases that might get confused # with valid system types. # solaris* is a basic system type, with this one exception. auroraux) os=auroraux ;; bluegene*) os=cnk ;; solaris1 | solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; solaris) os=solaris2 ;; unixware*) os=sysv4.2uw ;; gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # es1800 is here to avoid being matched by es* (a different OS) es1800*) os=ose ;; # Some version numbers need modification chorusos*) os=chorusos ;; isc) os=isc2.2 ;; sco6) os=sco5v6 ;; sco5) os=sco3.2v5 ;; sco4) os=sco3.2v4 ;; sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` ;; sco3.2v[4-9]* | sco5v6*) # Don't forget version if it is 3.2v4 or newer. ;; scout) # Don't match below ;; sco*) os=sco3.2v2 ;; psos*) os=psos ;; # Now accept the basic system types. # The portable systems comes first. # Each alternative MUST end in a * to match a version number. # sysv* is not here because it comes later, after sysvr4. gnu* | bsd* | mach* | minix* | genix* | ultrix* | irix* \ | *vms* | esix* | aix* | cnk* | sunos | sunos[34]*\ | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \ | sym* | kopensolaris* | plan9* \ | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \ | aos* | aros* | cloudabi* | sortix* | twizzler* \ | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \ | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \ | knetbsd* | mirbsd* | netbsd* \ | bitrig* | openbsd* | solidbsd* | libertybsd* | os108* \ | ekkobsd* | kfreebsd* | freebsd* | riscix* | lynxos* \ | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \ | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \ | udi* | eabi* | lites* | ieee* | go32* | aux* | hcos* \ | chorusrdb* | cegcc* | glidix* \ | cygwin* | msys* | pe* | moss* | proelf* | rtems* \ | midipix* | mingw32* | mingw64* | linux-gnu* | linux-android* \ | linux-newlib* | linux-musl* | linux-uclibc* \ | uxpv* | beos* | mpeix* | udk* | moxiebox* \ | interix* | uwin* | mks* | rhapsody* | darwin* \ | openstep* | oskit* | conix* | pw32* | nonstopux* \ | storm-chaos* | tops10* | tenex* | tops20* | its* \ | os2* | vos* | palmos* | uclinux* | nucleus* \ | morphos* | superux* | rtmk* | windiss* \ | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \ | skyos* | haiku* | rdos* | toppers* | drops* | es* \ | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \ | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \ | nsk* | powerunix) # Remember, each alternative MUST END IN *, to match a version number. ;; qnx*) case $cpu in x86 | i*86) ;; *) os=nto-$os ;; esac ;; hiux*) os=hiuxwe2 ;; nto-qnx*) ;; nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; sim | xray | os68k* | v88r* \ | windows* | osx | abug | netware* | os9* \ | macos* | mpw* | magic* | mmixware* | mon960* | lnews*) ;; linux-dietlibc) os=linux-dietlibc ;; linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; lynx*178) os=lynxos178 ;; lynx*5) os=lynxos5 ;; lynx*) os=lynxos ;; mac*) os=`echo "$os" | sed -e 's|mac|macos|'` ;; opened*) os=openedition ;; os400*) os=os400 ;; sunos5*) os=`echo "$os" | sed -e 's|sunos5|solaris2|'` ;; sunos6*) os=`echo "$os" | sed -e 's|sunos6|solaris3|'` ;; wince*) os=wince ;; utek*) os=bsd ;; dynix*) os=bsd ;; acis*) os=aos ;; atheos*) os=atheos ;; syllable*) os=syllable ;; 386bsd) os=bsd ;; ctix* | uts*) os=sysv ;; nova*) os=rtmk-nova ;; ns2) os=nextstep2 ;; # Preserve the version number of sinix5. sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; sinix*) os=sysv4 ;; tpf*) os=tpf ;; triton*) os=sysv3 ;; oss*) os=sysv3 ;; svr4*) os=sysv4 ;; svr3) os=sysv3 ;; sysvr4) os=sysv4 ;; # This must come after sysvr4. sysv*) ;; ose*) os=ose ;; *mint | mint[0-9]* | *MiNT | MiNT[0-9]*) os=mint ;; zvmoe) os=zvmoe ;; dicos*) os=dicos ;; pikeos*) # Until real need of OS specific support for # particular features comes up, bare metal # configurations are quite functional. case $cpu in arm*) os=eabi ;; *) os=elf ;; esac ;; nacl*) ;; ios) ;; none) ;; *-eabi) ;; *) echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $cpu-$vendor in score-*) os=elf ;; spu-*) os=elf ;; *-acorn) os=riscix1.2 ;; arm*-rebel) os=linux ;; arm*-semi) os=aout ;; c4x-* | tic4x-*) os=coff ;; c8051-*) os=elf ;; clipper-intergraph) os=clix ;; hexagon-*) os=elf ;; tic54x-*) os=coff ;; tic55x-*) os=coff ;; tic6x-*) os=coff ;; # This must come before the *-dec entry. pdp10-*) os=tops20 ;; pdp11-*) os=none ;; *-dec | vax-*) os=ultrix4.2 ;; m68*-apollo) os=domain ;; i386-sun) os=sunos4.0.2 ;; m68000-sun) os=sunos3 ;; m68*-cisco) os=aout ;; mep-*) os=elf ;; mips*-cisco) os=elf ;; mips*-*) os=elf ;; or32-*) os=coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=sysv3 ;; sparc-* | *-sun) os=sunos4.1.1 ;; pru-*) os=elf ;; *-be) os=beos ;; *-ibm) os=aix ;; *-knuth) os=mmixware ;; *-wec) os=proelf ;; *-winbond) os=proelf ;; *-oki) os=proelf ;; *-hp) os=hpux ;; *-hitachi) os=hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=sysv ;; *-cbm) os=amigaos ;; *-dg) os=dgux ;; *-dolphin) os=sysv3 ;; m68k-ccur) os=rtu ;; m88k-omron*) os=luna ;; *-next) os=nextstep ;; *-sequent) os=ptx ;; *-crds) os=unos ;; *-ns) os=genix ;; i370-*) os=mvs ;; *-gould) os=sysv ;; *-highlevel) os=bsd ;; *-encore) os=bsd ;; *-sgi) os=irix ;; *-siemens) os=sysv4 ;; *-masscomp) os=rtu ;; f30[01]-fujitsu | f700-fujitsu) os=uxpv ;; *-rom68k) os=coff ;; *-*bug) os=coff ;; *-apple) os=macos ;; *-atari*) os=mint ;; *-wrs) os=vxworks ;; *) os=none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. case $vendor in unknown) case $os in riscix*) vendor=acorn ;; sunos*) vendor=sun ;; cnk*|-aix*) vendor=ibm ;; beos*) vendor=be ;; hpux*) vendor=hp ;; mpeix*) vendor=hp ;; hiux*) vendor=hitachi ;; unos*) vendor=crds ;; dgux*) vendor=dg ;; luna*) vendor=omron ;; genix*) vendor=ns ;; clix*) vendor=intergraph ;; mvs* | opened*) vendor=ibm ;; os400*) vendor=ibm ;; ptx*) vendor=sequent ;; tpf*) vendor=ibm ;; vxsim* | vxworks* | windiss*) vendor=wrs ;; aux*) vendor=apple ;; hms*) vendor=hitachi ;; mpw* | macos*) vendor=apple ;; *mint | mint[0-9]* | *MiNT | MiNT[0-9]*) vendor=atari ;; vos*) vendor=stratus ;; esac ;; esac echo "$cpu-$vendor-$os" exit # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: make-4.3/build-aux/mdate-sh0000755000175000017500000001373213576212717012561 00000000000000#!/bin/sh # Get modification time of a file or directory and pretty-print it. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1995-2019 Free Software Foundation, Inc. # written by Ulrich Drepper , June 1995 # # 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, 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, see . # 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. # This file is maintained in Automake, please report # bugs to or send patches to # . if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST fi case $1 in '') echo "$0: No file. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: mdate-sh [--help] [--version] FILE Pretty-print the modification day of FILE, in the format: 1 January 1970 Report bugs to . EOF exit $? ;; -v | --v*) echo "mdate-sh $scriptversion" exit $? ;; esac error () { echo "$0: $1" >&2 exit 1 } # Prevent date giving response in another language. LANG=C export LANG LC_ALL=C export LC_ALL LC_TIME=C export LC_TIME # Use UTC to get reproducible result. TZ=UTC0 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. if test "${TIME_STYLE+set}" = set; then TIME_STYLE=posix-long-iso export TIME_STYLE fi save_arg1=$1 # Find out how to get the extended ls output of a file or directory. if ls -L /dev/null 1>/dev/null 2>&1; then ls_command='ls -L -l -d' else ls_command='ls -l -d' fi # Avoid user/group names that might have spaces, when possible. if ls -n /dev/null 1>/dev/null 2>&1; then ls_command="$ls_command -n" fi # A 'ls -l' line looks as follows on OS/2. # drwxrwx--- 0 Aug 11 2001 foo # This differs from Unix, which adds ownership information. # drwxrwx--- 2 root root 4096 Aug 11 2001 foo # # To find the date, we split the line on spaces and iterate on words # until we find a month. This cannot work with files whose owner is a # user named "Jan", or "Feb", etc. However, it's unlikely that '/' # will be owned by a user whose name is a month. So we first look at # the extended ls output of the root directory to decide how many # words should be skipped to get the date. # On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below. set x`$ls_command /` # Find which argument is the month. month= command= until test $month do test $# -gt 0 || error "failed parsing '$ls_command /' output" shift # Add another shift to the command. command="$command shift;" case $1 in Jan) month=January; nummonth=1;; Feb) month=February; nummonth=2;; Mar) month=March; nummonth=3;; Apr) month=April; nummonth=4;; May) month=May; nummonth=5;; Jun) month=June; nummonth=6;; Jul) month=July; nummonth=7;; Aug) month=August; nummonth=8;; Sep) month=September; nummonth=9;; Oct) month=October; nummonth=10;; Nov) month=November; nummonth=11;; Dec) month=December; nummonth=12;; esac done test -n "$month" || error "failed parsing '$ls_command /' output" # Get the extended ls output of the file or directory. set dummy x`eval "$ls_command \"\\\$save_arg1\""` # Remove all preceding arguments eval $command # Because of the dummy argument above, month is in $2. # # On a POSIX system, we should have # # $# = 5 # $1 = file size # $2 = month # $3 = day # $4 = year or time # $5 = filename # # On Darwin 7.7.0 and 7.6.0, we have # # $# = 4 # $1 = day # $2 = month # $3 = year or time # $4 = filename # Get the month. case $2 in Jan) month=January; nummonth=1;; Feb) month=February; nummonth=2;; Mar) month=March; nummonth=3;; Apr) month=April; nummonth=4;; May) month=May; nummonth=5;; Jun) month=June; nummonth=6;; Jul) month=July; nummonth=7;; Aug) month=August; nummonth=8;; Sep) month=September; nummonth=9;; Oct) month=October; nummonth=10;; Nov) month=November; nummonth=11;; Dec) month=December; nummonth=12;; esac case $3 in ???*) day=$1;; *) day=$3; shift;; esac # Here we have to deal with the problem that the ls output gives either # the time of day or the year. case $3 in *:*) set `date`; eval year=\$$# case $2 in Jan) nummonthtod=1;; Feb) nummonthtod=2;; Mar) nummonthtod=3;; Apr) nummonthtod=4;; May) nummonthtod=5;; Jun) nummonthtod=6;; Jul) nummonthtod=7;; Aug) nummonthtod=8;; Sep) nummonthtod=9;; Oct) nummonthtod=10;; Nov) nummonthtod=11;; Dec) nummonthtod=12;; esac # For the first six month of the year the time notation can also # be used for files modified in the last year. if (expr $nummonth \> $nummonthtod) > /dev/null; then year=`expr $year - 1` fi;; *) year=$3;; esac # The result. echo $day $month $year # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: make-4.3/README.Amiga0000644000175000017500000000544513603564437011136 00000000000000Short: Port of GNU make with SAS/C (no ixemul.library required) Author: GNU, Amiga port by Aaron "Optimizer" Digulla Uploader: Aaron "Optimizer" Digulla (digulla@fh-konstanz.de) Type: dev/c This is a pure Amiga port of GNU make. It needs no extra libraries or anything. It has the following features (in addition to any features of GNU make): - Runs Amiga-Commands with SystemTags() (Execute) - Can run multi-line statements - Allows to use Device-Names in targets: c:make : make.o is ok. To distinguish between device-names and target : or ::, MAKE looks for spaces. If there are any around :, it's taken as a target delimiter, if there are none, it's taken as the name of a device. Note that "make:make.o" tries to create "make.o" on the device "make:". - Replaces @@ by a newline in any command line: if exists make @@\ delete make.bak quiet @@\ rename make make.bak @@\ endif @@\ $(CC) Link Make.o To make works. Note that the @@ must stand alone (i.e., "make@@\" is illegal). Also be careful that there is a space after the "\" (i.e., at the beginning of the next line). - Can be made resident to save space and time - Amiga specific wildcards can be used in $(wildcard ...) BUGS: - The line dummy.h : src/*.c tries to make dummy.h from "src/*.c" (i.e., no wildcard-expansion takes place). You have to use "$(wildcard src/*.c)" instead. COMPILING FROM SCRATCH ---------------------- To recompile, you need SAS/C 6.51. As of GNU make 4.3, the build environment has been cleaned up and alternate make files (including smakefiles) have been removed. If you have an existing version of GNU make available you _should_ be able to run: make -f Basic.mk However this is untested. If you have an Amiga system and would like to collaborate on getting bootstrapping to work properly please contact bug-make@gnu.org. INSTALLATION Copy make somewhere in your search path (e.g., sc:c or sc:bin). If you plan to use recursive makes, install make resident: Resident make Add ------------------------------------------------------------------------------- Copyright (C) 1995-2020 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 . make-4.3/lib/0000755000175000017500000000000013611151240010036 500000000000000make-4.3/lib/fnmatch.c0000644000175000017500000003112213603564437011562 00000000000000/* Copyright (C) 1991, 1992, 1993, 1996, 1997, 1998, 1999 Free Software Foundation, Inc. This file is part of the GNU C Library. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. */ #if HAVE_CONFIG_H # include #endif /* Enable GNU extensions in fnmatch.h. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #include #include #include #if HAVE_STRING_H || defined _LIBC # include #else # include #endif #if defined STDC_HEADERS || defined _LIBC # include #endif /* For platform which support the ISO C amendement 1 functionality we support user defined character classes. */ #if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H) /* Solaris 2.5 has a bug: must be included before . */ # include # include #endif /* Comment out all this code if we are using the GNU C Library, and are not actually compiling the library itself. This code is part of the GNU C Library, but also included in many other GNU distributions. Compiling and linking in this code is a waste when using the GNU C library (especially if it is a shared library). Rather than having every GNU program understand `configure --with-gnu-libc' and omit the object files, it is simpler to just do this in the source for each such file. */ #if defined _LIBC || !defined __GNU_LIBRARY__ # if defined STDC_HEADERS || !defined isascii # define ISASCII(c) 1 # else # define ISASCII(c) isascii(c) # endif # ifdef isblank # define ISBLANK(c) (ISASCII (c) && isblank (c)) # else # define ISBLANK(c) ((c) == ' ' || (c) == '\t') # endif # ifdef isgraph # define ISGRAPH(c) (ISASCII (c) && isgraph (c)) # else # define ISGRAPH(c) (ISASCII (c) && isprint (c) && !isspace (c)) # endif # define ISPRINT(c) (ISASCII (c) && isprint (c)) # define ISDIGIT(c) (ISASCII (c) && isdigit (c)) # define ISALNUM(c) (ISASCII (c) && isalnum (c)) # define ISALPHA(c) (ISASCII (c) && isalpha (c)) # define ISCNTRL(c) (ISASCII (c) && iscntrl (c)) # define ISLOWER(c) (ISASCII (c) && islower (c)) # define ISPUNCT(c) (ISASCII (c) && ispunct (c)) # define ISSPACE(c) (ISASCII (c) && isspace (c)) # define ISUPPER(c) (ISASCII (c) && isupper (c)) # define ISXDIGIT(c) (ISASCII (c) && isxdigit (c)) # define STREQ(s1, s2) ((strcmp (s1, s2) == 0)) # if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H) /* The GNU C library provides support for user-defined character classes and the functions from ISO C amendement 1. */ # ifdef CHARCLASS_NAME_MAX # define CHAR_CLASS_MAX_LENGTH CHARCLASS_NAME_MAX # else /* This shouldn't happen but some implementation might still have this problem. Use a reasonable default value. */ # define CHAR_CLASS_MAX_LENGTH 256 # endif # ifdef _LIBC # define IS_CHAR_CLASS(string) __wctype (string) # else # define IS_CHAR_CLASS(string) wctype (string) # endif # else # define CHAR_CLASS_MAX_LENGTH 6 /* Namely, `xdigit'. */ # define IS_CHAR_CLASS(string) \ (STREQ (string, "alpha") || STREQ (string, "upper") \ || STREQ (string, "lower") || STREQ (string, "digit") \ || STREQ (string, "alnum") || STREQ (string, "xdigit") \ || STREQ (string, "space") || STREQ (string, "print") \ || STREQ (string, "punct") || STREQ (string, "graph") \ || STREQ (string, "cntrl") || STREQ (string, "blank")) # endif /* Avoid depending on library functions or files whose names are inconsistent. */ # if !defined _LIBC && !defined getenv extern char *getenv (); # endif # ifndef errno extern int errno; # endif /* This function doesn't exist on most systems. */ # if !defined HAVE___STRCHRNUL && !defined _LIBC static char * __strchrnul (s, c) const char *s; int c; { char *result = strchr (s, c); if (result == NULL) result = strchr (s, '\0'); return result; } # endif # ifndef internal_function /* Inside GNU libc we mark some function in a special way. In other environments simply ignore the marking. */ # define internal_function # endif /* Match STRING against the filename pattern PATTERN, returning zero if it matches, nonzero if not. */ static int internal_fnmatch __P ((const char *pattern, const char *string, int no_leading_period, int flags)) internal_function; static int internal_function internal_fnmatch (pattern, string, no_leading_period, flags) const char *pattern; const char *string; int no_leading_period; int flags; { register const char *p = pattern, *n = string; register unsigned char c; /* Note that this evaluates C many times. */ # ifdef _LIBC # define FOLD(c) ((flags & FNM_CASEFOLD) ? tolower (c) : (c)) # else # define FOLD(c) ((flags & FNM_CASEFOLD) && ISUPPER (c) ? tolower (c) : (c)) # endif while ((c = *p++) != '\0') { c = FOLD (c); switch (c) { case '?': if (*n == '\0') return FNM_NOMATCH; else if (*n == '/' && (flags & FNM_FILE_NAME)) return FNM_NOMATCH; else if (*n == '.' && no_leading_period && (n == string || (n[-1] == '/' && (flags & FNM_FILE_NAME)))) return FNM_NOMATCH; break; case '\\': if (!(flags & FNM_NOESCAPE)) { c = *p++; if (c == '\0') /* Trailing \ loses. */ return FNM_NOMATCH; c = FOLD (c); } if (FOLD ((unsigned char) *n) != c) return FNM_NOMATCH; break; case '*': if (*n == '.' && no_leading_period && (n == string || (n[-1] == '/' && (flags & FNM_FILE_NAME)))) return FNM_NOMATCH; for (c = *p++; c == '?' || c == '*'; c = *p++) { if (*n == '/' && (flags & FNM_FILE_NAME)) /* A slash does not match a wildcard under FNM_FILE_NAME. */ return FNM_NOMATCH; else if (c == '?') { /* A ? needs to match one character. */ if (*n == '\0') /* There isn't another character; no match. */ return FNM_NOMATCH; else /* One character of the string is consumed in matching this ? wildcard, so *??? won't match if there are less than three characters. */ ++n; } } if (c == '\0') /* The wildcard(s) is/are the last element of the pattern. If the name is a file name and contains another slash this does mean it cannot match. */ return ((flags & FNM_FILE_NAME) && strchr (n, '/') != NULL ? FNM_NOMATCH : 0); else { const char *endp; endp = __strchrnul (n, (flags & FNM_FILE_NAME) ? '/' : '\0'); if (c == '[') { int flags2 = ((flags & FNM_FILE_NAME) ? flags : (flags & ~FNM_PERIOD)); for (--p; n < endp; ++n) if (internal_fnmatch (p, n, (no_leading_period && (n == string || (n[-1] == '/' && (flags & FNM_FILE_NAME)))), flags2) == 0) return 0; } else if (c == '/' && (flags & FNM_FILE_NAME)) { while (*n != '\0' && *n != '/') ++n; if (*n == '/' && (internal_fnmatch (p, n + 1, flags & FNM_PERIOD, flags) == 0)) return 0; } else { int flags2 = ((flags & FNM_FILE_NAME) ? flags : (flags & ~FNM_PERIOD)); if (c == '\\' && !(flags & FNM_NOESCAPE)) c = *p; c = FOLD (c); for (--p; n < endp; ++n) if (FOLD ((unsigned char) *n) == c && (internal_fnmatch (p, n, (no_leading_period && (n == string || (n[-1] == '/' && (flags & FNM_FILE_NAME)))), flags2) == 0)) return 0; } } /* If we come here no match is possible with the wildcard. */ return FNM_NOMATCH; case '[': { /* Nonzero if the sense of the character class is inverted. */ static int posixly_correct; register int not; char cold; if (posixly_correct == 0) posixly_correct = getenv ("POSIXLY_CORRECT") != NULL ? 1 : -1; if (*n == '\0') return FNM_NOMATCH; if (*n == '.' && no_leading_period && (n == string || (n[-1] == '/' && (flags & FNM_FILE_NAME)))) return FNM_NOMATCH; if (*n == '/' && (flags & FNM_FILE_NAME)) /* `/' cannot be matched. */ return FNM_NOMATCH; not = (*p == '!' || (posixly_correct < 0 && *p == '^')); if (not) ++p; c = *p++; for (;;) { unsigned char fn = FOLD ((unsigned char) *n); if (!(flags & FNM_NOESCAPE) && c == '\\') { if (*p == '\0') return FNM_NOMATCH; c = FOLD ((unsigned char) *p); ++p; if (c == fn) goto matched; } else if (c == '[' && *p == ':') { /* Leave room for the null. */ char str[CHAR_CLASS_MAX_LENGTH + 1]; size_t c1 = 0; # if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H) wctype_t wt; # endif const char *startp = p; for (;;) { if (c1 == CHAR_CLASS_MAX_LENGTH) /* The name is too long and therefore the pattern is ill-formed. */ return FNM_NOMATCH; c = *++p; if (c == ':' && p[1] == ']') { p += 2; break; } if (c < 'a' || c >= 'z') { /* This cannot possibly be a character class name. Match it as a normal range. */ p = startp; c = '['; goto normal_bracket; } str[c1++] = c; } str[c1] = '\0'; # if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H) wt = IS_CHAR_CLASS (str); if (wt == 0) /* Invalid character class name. */ return FNM_NOMATCH; if (__iswctype (__btowc ((unsigned char) *n), wt)) goto matched; # else if ((STREQ (str, "alnum") && ISALNUM ((unsigned char) *n)) || (STREQ (str, "alpha") && ISALPHA ((unsigned char) *n)) || (STREQ (str, "blank") && ISBLANK ((unsigned char) *n)) || (STREQ (str, "cntrl") && ISCNTRL ((unsigned char) *n)) || (STREQ (str, "digit") && ISDIGIT ((unsigned char) *n)) || (STREQ (str, "graph") && ISGRAPH ((unsigned char) *n)) || (STREQ (str, "lower") && ISLOWER ((unsigned char) *n)) || (STREQ (str, "print") && ISPRINT ((unsigned char) *n)) || (STREQ (str, "punct") && ISPUNCT ((unsigned char) *n)) || (STREQ (str, "space") && ISSPACE ((unsigned char) *n)) || (STREQ (str, "upper") && ISUPPER ((unsigned char) *n)) || (STREQ (str, "xdigit") && ISXDIGIT ((unsigned char) *n))) goto matched; # endif } else if (c == '\0') /* [ (unterminated) loses. */ return FNM_NOMATCH; else { normal_bracket: if (FOLD (c) == fn) goto matched; cold = c; c = *p++; if (c == '-' && *p != ']') { /* It is a range. */ unsigned char cend = *p++; if (!(flags & FNM_NOESCAPE) && cend == '\\') cend = *p++; if (cend == '\0') return FNM_NOMATCH; if (cold <= fn && fn <= FOLD (cend)) goto matched; c = *p++; } } if (c == ']') break; } if (!not) return FNM_NOMATCH; break; matched: /* Skip the rest of the [...] that already matched. */ while (c != ']') { if (c == '\0') /* [... (unterminated) loses. */ return FNM_NOMATCH; c = *p++; if (!(flags & FNM_NOESCAPE) && c == '\\') { if (*p == '\0') return FNM_NOMATCH; /* XXX 1003.2d11 is unclear if this is right. */ ++p; } else if (c == '[' && *p == ':') { do if (*++p == '\0') return FNM_NOMATCH; while (*p != ':' || p[1] == ']'); p += 2; c = *p; } } if (not) return FNM_NOMATCH; } break; default: if (c != FOLD ((unsigned char) *n)) return FNM_NOMATCH; } ++n; } if (*n == '\0') return 0; if ((flags & FNM_LEADING_DIR) && *n == '/') /* The FNM_LEADING_DIR flag says that "foo*" matches "foobar/frobozz". */ return 0; return FNM_NOMATCH; # undef FOLD } int fnmatch (pattern, string, flags) const char *pattern; const char *string; int flags; { return internal_fnmatch (pattern, string, flags & FNM_PERIOD, flags); } #endif /* _LIBC or not __GNU_LIBRARY__. */ make-4.3/lib/getprogname.h0000644000175000017500000000217413611136471012454 00000000000000/* Program name management. Copyright (C) 2016-2020 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 the Free Software Foundation; either version 3 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, see . */ #ifndef _GL_GETPROGNAME_H #define _GL_GETPROGNAME_H #include #ifdef __cplusplus extern "C" { #endif /* Return the base name of the executing program. On native Windows this will usually end in ".exe" or ".EXE". */ #ifndef HAVE_GETPROGNAME extern char const *getprogname (void) # ifdef HAVE_DECL_PROGRAM_INVOCATION_NAME _GL_ATTRIBUTE_PURE # endif ; #endif #ifdef __cplusplus } #endif #endif make-4.3/lib/xconcat-filename.c0000644000175000017500000000265513611136472013361 00000000000000/* Construct a full filename from a directory and a relative filename. Copyright (C) 2001-2004, 2006-2020 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 the Free Software Foundation; either version 3 of the License, or 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, see . */ /* Written by Bruno Haible . */ #include /* Specification. */ #include "concat-filename.h" #include "xalloc.h" /* Concatenate a directory filename, a relative filename and an optional suffix. The directory may end with the directory separator. The second argument may not start with the directory separator (it is relative). Return a freshly allocated filename. */ char * xconcatenated_filename (const char *directory, const char *filename, const char *suffix) { char *result; result = concatenated_filename (directory, filename, suffix); if (result == NULL) xalloc_die (); return result; } make-4.3/lib/xalloc-oversized.h0000644000175000017500000000442513611136472013440 00000000000000/* xalloc-oversized.h -- memory allocation size checking Copyright (C) 1990-2000, 2003-2004, 2006-2020 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 the Free Software Foundation; either version 3 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, see . */ #ifndef XALLOC_OVERSIZED_H_ #define XALLOC_OVERSIZED_H_ #include #include /* True if N * S would overflow in a size_t calculation, or would generate a value larger than PTRDIFF_MAX. This expands to a constant expression if N and S are both constants. By gnulib convention, SIZE_MAX represents overflow in size calculations, so the conservative size_t-based dividend to use here is SIZE_MAX - 1. */ #define __xalloc_oversized(n, s) \ ((size_t) (PTRDIFF_MAX < SIZE_MAX ? PTRDIFF_MAX : SIZE_MAX - 1) / (s) < (n)) #if PTRDIFF_MAX < SIZE_MAX typedef ptrdiff_t __xalloc_count_type; #else typedef size_t __xalloc_count_type; #endif /* Return 1 if an array of N objects, each of size S, cannot exist reliably due to size or ptrdiff_t arithmetic overflow. S must be positive and N must be nonnegative. This is a macro, not a function, so that it works correctly even when SIZE_MAX < N. */ #if 7 <= __GNUC__ # define xalloc_oversized(n, s) \ __builtin_mul_overflow_p (n, s, (__xalloc_count_type) 1) #elif 5 <= __GNUC__ && !defined __ICC && !__STRICT_ANSI__ # define xalloc_oversized(n, s) \ (__builtin_constant_p (n) && __builtin_constant_p (s) \ ? __xalloc_oversized (n, s) \ : ({ __xalloc_count_type __xalloc_count; \ __builtin_mul_overflow (n, s, &__xalloc_count); })) /* Other compilers use integer division; this may be slower but is more portable. */ #else # define xalloc_oversized(n, s) __xalloc_oversized (n, s) #endif #endif /* !XALLOC_OVERSIZED_H_ */ make-4.3/lib/exitfail.h0000644000175000017500000000140313611136471011743 00000000000000/* Failure exit status Copyright (C) 2002, 2009-2020 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 the Free Software Foundation; either version 3 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, see . */ extern int volatile exit_failure; make-4.3/lib/getloadavg.c0000644000175000017500000006323613611136471012262 00000000000000/* Get the system load averages. Copyright (C) 1985-1989, 1991-1995, 1997, 1999-2000, 2003-2020 Free Software Foundation, Inc. NOTE: The canonical source of this file is maintained with gnulib. Bugs can be reported to bug-gnulib@gnu.org. 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 3 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, see . */ /* Compile-time symbols that this file uses: HAVE_PSTAT_GETDYNAMIC Define this if your system has the pstat_getdynamic function. I think it is unique to HPUX9. The best way to get the definition is through the AC_FUNC_GETLOADAVG macro that comes with autoconf 2.13 or newer. If that isn't an option, then just put AC_CHECK_FUNCS(pstat_getdynamic) in your configure.ac file. HAVE_LIBPERFSTAT Define this if your system has the perfstat_cpu_total function in libperfstat (AIX). FIXUP_KERNEL_SYMBOL_ADDR() Adjust address in returned struct nlist. KERNEL_FILE Name of the kernel file to nlist. LDAV_CVT() Scale the load average from the kernel. Returns a double. LDAV_SYMBOL Name of kernel symbol giving load average. LOAD_AVE_TYPE Type of the load average array in the kernel. Must be defined unless one of apollo, DGUX, NeXT, or UMAX is defined; or we have libkstat; otherwise, no load average is available. HAVE_NLIST_H nlist.h is available. NLIST_STRUCT defaults to this. NLIST_STRUCT Include nlist.h, not a.out.h. N_NAME_POINTER The nlist n_name element is a pointer, not an array. HAVE_STRUCT_NLIST_N_UN_N_NAME 'n_un.n_name' is member of 'struct nlist'. LINUX_LDAV_FILE [__linux__, __ANDROID__, __CYGWIN__]: File containing load averages. Specific system predefines this file uses, aside from setting default values if not emacs: apollo BSD Real BSD, not just BSD-like. DGUX eunice UNIX emulator under VMS. hpux __MSDOS__ No-op for MSDOS. NeXT sgi UMAX UMAX4_3 VMS _WIN32 Native Windows (possibly also defined on Cygwin) __linux__, __ANDROID__ Linux: assumes /proc file system mounted. Support from Michael K. Johnson. __CYGWIN__ Cygwin emulates linux /proc/loadavg. __NetBSD__ NetBSD: assumes /kern file system mounted. In addition, to avoid nesting many #ifdefs, we internally set LDAV_DONE to indicate that the load average has been computed. We also #define LDAV_PRIVILEGED if a program will require special installation to be able to call getloadavg. */ #include /* Specification. */ #include #include #include #include # include # if HAVE_SYS_PARAM_H # include # endif # include "intprops.h" # if defined _WIN32 && ! defined __CYGWIN__ && ! defined WINDOWS32 # define WINDOWS32 # endif # ifdef NeXT /* NeXT in the 2.{0,1,2} releases defines BSD in , which conflicts with the definition understood in this file, that this really is BSD. */ # undef BSD /* NeXT defines FSCALE in . However, we take FSCALE being defined to mean that the nlist method should be used, which is not true. */ # undef FSCALE # endif /* Same issues as for NeXT apply to the HURD-based GNU system. */ # ifdef __GNU__ # undef BSD # undef FSCALE # endif /* __GNU__ */ /* Set values that are different from the defaults, which are set a little farther down with #ifndef. */ /* Some shorthands. */ # if defined (HPUX) && !defined (hpux) # define hpux # endif # if defined (__hpux) && !defined (hpux) # define hpux # endif # if defined (__sun) && !defined (sun) # define sun # endif # if defined (hp300) && !defined (hpux) # define MORE_BSD # endif # if defined (__SVR4) && !defined (SVR4) # define SVR4 # endif # if (defined (sun) && defined (SVR4)) || defined (SOLARIS2) # define SUNOS_5 # endif # if defined (__osf__) && (defined (__alpha) || defined (__alpha__)) # define OSF_ALPHA # include # include # include # include /* Tru64 4.0D's table.h redefines sys */ # undef sys # endif # if defined (__osf__) && (defined (mips) || defined (__mips__)) # define OSF_MIPS # include # endif /* VAX C can't handle multi-line #ifs, or lines longer than 256 chars. */ # ifndef LOAD_AVE_TYPE # ifdef MORE_BSD # define LOAD_AVE_TYPE long # endif # ifdef sun # define LOAD_AVE_TYPE long # endif # ifdef sgi # define LOAD_AVE_TYPE long # endif # ifdef SVR4 # define LOAD_AVE_TYPE long # endif # ifdef OSF_ALPHA # define LOAD_AVE_TYPE long # endif # if defined _AIX && ! defined HAVE_LIBPERFSTAT # define LOAD_AVE_TYPE long # endif # endif /* No LOAD_AVE_TYPE. */ # ifdef OSF_ALPHA /* defines an incorrect value for FSCALE on Alpha OSF/1, according to ghazi@noc.rutgers.edu. */ # undef FSCALE # define FSCALE 1024.0 # endif # ifndef FSCALE /* SunOS and some others define FSCALE in sys/param.h. */ # ifdef MORE_BSD # define FSCALE 2048.0 # endif # if defined (MIPS) || defined (SVR4) # define FSCALE 256 # endif # if defined (sgi) /* Sometimes both MIPS and sgi are defined, so FSCALE was just defined above under #ifdef MIPS. But we want the sgi value. */ # undef FSCALE # define FSCALE 1000.0 # endif # if defined _AIX && !defined HAVE_LIBPERFSTAT # define FSCALE 65536.0 # endif # endif /* Not FSCALE. */ # if !defined (LDAV_CVT) && defined (FSCALE) # define LDAV_CVT(n) (((double) (n)) / FSCALE) # endif # ifndef NLIST_STRUCT # if HAVE_NLIST_H # define NLIST_STRUCT # endif # endif # if defined (sgi) || (defined (mips) && !defined (BSD)) # define FIXUP_KERNEL_SYMBOL_ADDR(nl) ((nl)[0].n_value &= ~(1 << 31)) # endif # if !defined (KERNEL_FILE) && defined (hpux) # define KERNEL_FILE "/hp-ux" # endif # if !defined (KERNEL_FILE) && (defined (MIPS) || defined (SVR4) || defined (ISC) || defined (sgi)) # define KERNEL_FILE "/unix" # endif # if !defined (LDAV_SYMBOL) && (defined (hpux) || defined (SVR4) || defined (ISC) || defined (sgi) || (defined (_AIX) && !defined(HAVE_LIBPERFSTAT))) # define LDAV_SYMBOL "avenrun" # endif # ifdef HAVE_UNISTD_H # include # endif /* LOAD_AVE_TYPE should only get defined if we're going to use the nlist method. */ # if !defined (LOAD_AVE_TYPE) && (defined (BSD) || defined (LDAV_CVT) || defined (KERNEL_FILE) || defined (LDAV_SYMBOL)) # define LOAD_AVE_TYPE double # endif # ifdef LOAD_AVE_TYPE # ifndef __VMS # if !(defined __linux__ || defined __ANDROID__) # ifndef NLIST_STRUCT # include # else /* NLIST_STRUCT */ # include # endif /* NLIST_STRUCT */ # ifdef SUNOS_5 # include # include # endif # if defined (hpux) && defined (HAVE_PSTAT_GETDYNAMIC) # include # endif # ifndef KERNEL_FILE # define KERNEL_FILE "/vmunix" # endif /* KERNEL_FILE */ # ifndef LDAV_SYMBOL # define LDAV_SYMBOL "_avenrun" # endif /* LDAV_SYMBOL */ # endif /* __linux__ || __ANDROID__ */ # else /* __VMS */ # ifndef eunice # include # include # else /* eunice */ # include # endif /* eunice */ # endif /* __VMS */ # ifndef LDAV_CVT # define LDAV_CVT(n) ((double) (n)) # endif /* !LDAV_CVT */ # endif /* LOAD_AVE_TYPE */ # if defined HAVE_LIBPERFSTAT # include # include # include # ifndef SBITS # define SBITS 16 # endif # endif # if defined (__GNU__) && !defined (NeXT) /* Note that NeXT Openstep defines __GNU__ even though it should not. */ /* GNU system acts much like NeXT, for load average purposes, but not exactly. */ # define NeXT # define host_self mach_host_self # endif # ifdef NeXT # ifdef HAVE_MACH_MACH_H # include # else # include # endif # endif /* NeXT */ # ifdef sgi # include # endif /* sgi */ # ifdef UMAX # include # include # include # include # ifdef UMAX_43 # include # include # include # include # include # else /* Not UMAX_43. */ # include # include # include # include # include # include # endif /* Not UMAX_43. */ # endif /* UMAX */ # ifdef DGUX # include # endif # if (defined __linux__ || defined __ANDROID__ \ || defined __CYGWIN__ || defined SUNOS_5 \ || (defined LOAD_AVE_TYPE && ! defined __VMS)) # include # endif /* Avoid static vars inside a function since in HPUX they dump as pure. */ # ifdef NeXT static processor_set_t default_set; static bool getloadavg_initialized; # endif /* NeXT */ # ifdef UMAX static unsigned int cpus = 0; static unsigned int samples; # endif /* UMAX */ # ifdef DGUX static struct dg_sys_info_load_info load_info; /* what-a-mouthful! */ # endif /* DGUX */ # if !defined (HAVE_LIBKSTAT) && defined (LOAD_AVE_TYPE) /* File descriptor open to /dev/kmem or VMS load ave driver. */ static int channel; /* True if channel is valid. */ static bool getloadavg_initialized; /* Offset in kmem to seek to read load average, or 0 means invalid. */ static long offset; # if ! defined __VMS && ! defined sgi && ! (defined __linux__ || defined __ANDROID__) static struct nlist name_list[2]; # endif # ifdef SUNOS_5 static kvm_t *kd; # endif /* SUNOS_5 */ # endif /* LOAD_AVE_TYPE && !HAVE_LIBKSTAT */ /* Put the 1 minute, 5 minute and 15 minute load averages into the first NELEM elements of LOADAVG. Return the number written (never more than 3, but may be less than NELEM), or -1 (setting errno) if an error occurred. */ int getloadavg (double loadavg[], int nelem) { int elem = 0; /* Return value. */ # ifdef NO_GET_LOAD_AVG # define LDAV_DONE errno = ENOSYS; elem = -1; # endif # if !defined (LDAV_DONE) && defined (HAVE_LIBKSTAT) /* Solaris <= 2.6 */ /* Use libkstat because we don't have to be root. */ # define LDAV_DONE kstat_ctl_t *kc; kstat_t *ksp; kstat_named_t *kn; int saved_errno; kc = kstat_open (); if (kc == NULL) return -1; ksp = kstat_lookup (kc, "unix", 0, "system_misc"); if (ksp == NULL) return -1; if (kstat_read (kc, ksp, 0) == -1) return -1; kn = kstat_data_lookup (ksp, "avenrun_1min"); if (kn == NULL) { /* Return -1 if no load average information is available. */ nelem = 0; elem = -1; } if (nelem >= 1) loadavg[elem++] = (double) kn->value.ul / FSCALE; if (nelem >= 2) { kn = kstat_data_lookup (ksp, "avenrun_5min"); if (kn != NULL) { loadavg[elem++] = (double) kn->value.ul / FSCALE; if (nelem >= 3) { kn = kstat_data_lookup (ksp, "avenrun_15min"); if (kn != NULL) loadavg[elem++] = (double) kn->value.ul / FSCALE; } } } saved_errno = errno; kstat_close (kc); errno = saved_errno; # endif /* HAVE_LIBKSTAT */ # if !defined (LDAV_DONE) && defined (hpux) && defined (HAVE_PSTAT_GETDYNAMIC) /* HP-UX */ /* Use pstat_getdynamic() because we don't have to be root. */ # define LDAV_DONE # undef LOAD_AVE_TYPE struct pst_dynamic dyn_info; if (pstat_getdynamic (&dyn_info, sizeof (dyn_info), 0, 0) < 0) return -1; if (nelem > 0) loadavg[elem++] = dyn_info.psd_avg_1_min; if (nelem > 1) loadavg[elem++] = dyn_info.psd_avg_5_min; if (nelem > 2) loadavg[elem++] = dyn_info.psd_avg_15_min; # endif /* hpux && HAVE_PSTAT_GETDYNAMIC */ # if ! defined LDAV_DONE && defined HAVE_LIBPERFSTAT /* AIX */ # define LDAV_DONE # undef LOAD_AVE_TYPE /* Use perfstat_cpu_total because we don't have to be root. */ { perfstat_cpu_total_t cpu_stats; int result = perfstat_cpu_total (NULL, &cpu_stats, sizeof cpu_stats, 1); if (result == -1) return result; loadavg[0] = cpu_stats.loadavg[0] / (double)(1 << SBITS); loadavg[1] = cpu_stats.loadavg[1] / (double)(1 << SBITS); loadavg[2] = cpu_stats.loadavg[2] / (double)(1 << SBITS); elem = 3; } # endif # if !defined (LDAV_DONE) && (defined __linux__ || defined __ANDROID__ || defined __CYGWIN__) /* Linux without glibc, Android, Cygwin */ # define LDAV_DONE # undef LOAD_AVE_TYPE # ifndef LINUX_LDAV_FILE # define LINUX_LDAV_FILE "/proc/loadavg" # endif char ldavgbuf[3 * (INT_STRLEN_BOUND (int) + sizeof ".00 ")]; char const *ptr = ldavgbuf; int fd, count, saved_errno; fd = open (LINUX_LDAV_FILE, O_RDONLY); if (fd == -1) return -1; count = read (fd, ldavgbuf, sizeof ldavgbuf - 1); saved_errno = errno; (void) close (fd); errno = saved_errno; if (count <= 0) return -1; ldavgbuf[count] = '\0'; for (elem = 0; elem < nelem; elem++) { double numerator = 0; double denominator = 1; while (*ptr == ' ') ptr++; /* Finish if this number is missing, and report an error if all were missing. */ if (! ('0' <= *ptr && *ptr <= '9')) { if (elem == 0) { errno = ENOTSUP; return -1; } break; } while ('0' <= *ptr && *ptr <= '9') numerator = 10 * numerator + (*ptr++ - '0'); if (*ptr == '.') for (ptr++; '0' <= *ptr && *ptr <= '9'; ptr++) numerator = 10 * numerator + (*ptr - '0'), denominator *= 10; loadavg[elem++] = numerator / denominator; } return elem; # endif /* __linux__ || __ANDROID__ || __CYGWIN__ */ # if !defined (LDAV_DONE) && defined (__NetBSD__) /* NetBSD < 0.9 */ # define LDAV_DONE # undef LOAD_AVE_TYPE # ifndef NETBSD_LDAV_FILE # define NETBSD_LDAV_FILE "/kern/loadavg" # endif unsigned long int load_ave[3], scale; int count; FILE *fp; fp = fopen (NETBSD_LDAV_FILE, "r"); if (fp == NULL) return -1; count = fscanf (fp, "%lu %lu %lu %lu\n", &load_ave[0], &load_ave[1], &load_ave[2], &scale); (void) fclose (fp); if (count != 4) { errno = ENOTSUP; return -1; } for (elem = 0; elem < nelem; elem++) loadavg[elem] = (double) load_ave[elem] / (double) scale; return elem; # endif /* __NetBSD__ */ # if !defined (LDAV_DONE) && defined (NeXT) /* NeXTStep */ # define LDAV_DONE /* The NeXT code was adapted from iscreen 3.2. */ host_t host; struct processor_set_basic_info info; unsigned int info_count; /* We only know how to get the 1-minute average for this system, so even if the caller asks for more than 1, we only return 1. */ if (!getloadavg_initialized) { if (processor_set_default (host_self (), &default_set) == KERN_SUCCESS) getloadavg_initialized = true; } if (getloadavg_initialized) { info_count = PROCESSOR_SET_BASIC_INFO_COUNT; if (processor_set_info (default_set, PROCESSOR_SET_BASIC_INFO, &host, (processor_set_info_t) &info, &info_count) != KERN_SUCCESS) getloadavg_initialized = false; else { if (nelem > 0) loadavg[elem++] = (double) info.load_average / LOAD_SCALE; } } if (!getloadavg_initialized) { errno = ENOTSUP; return -1; } # endif /* NeXT */ # if !defined (LDAV_DONE) && defined (UMAX) # define LDAV_DONE /* UMAX 4.2, which runs on the Encore Multimax multiprocessor, does not have a /dev/kmem. Information about the workings of the running kernel can be gathered with inq_stats system calls. We only know how to get the 1-minute average for this system. */ struct proc_summary proc_sum_data; struct stat_descr proc_info; double load; register unsigned int i, j; if (cpus == 0) { register unsigned int c, i; struct cpu_config conf; struct stat_descr desc; desc.sd_next = 0; desc.sd_subsys = SUBSYS_CPU; desc.sd_type = CPUTYPE_CONFIG; desc.sd_addr = (char *) &conf; desc.sd_size = sizeof conf; if (inq_stats (1, &desc)) return -1; c = 0; for (i = 0; i < conf.config_maxclass; ++i) { struct class_stats stats; memset (&stats, 0, sizeof stats); desc.sd_type = CPUTYPE_CLASS; desc.sd_objid = i; desc.sd_addr = (char *) &stats; desc.sd_size = sizeof stats; if (inq_stats (1, &desc)) return -1; c += stats.class_numcpus; } cpus = c; samples = cpus < 2 ? 3 : (2 * cpus / 3); } proc_info.sd_next = 0; proc_info.sd_subsys = SUBSYS_PROC; proc_info.sd_type = PROCTYPE_SUMMARY; proc_info.sd_addr = (char *) &proc_sum_data; proc_info.sd_size = sizeof (struct proc_summary); proc_info.sd_sizeused = 0; if (inq_stats (1, &proc_info) != 0) return -1; load = proc_sum_data.ps_nrunnable; j = 0; for (i = samples - 1; i > 0; --i) { load += proc_sum_data.ps_nrun[j]; if (j++ == PS_NRUNSIZE) j = 0; } if (nelem > 0) loadavg[elem++] = load / samples / cpus; # endif /* UMAX */ # if !defined (LDAV_DONE) && defined (DGUX) # define LDAV_DONE /* This call can return -1 for an error, but with good args it's not supposed to fail. The first argument is for no apparent reason of type 'long int *'. */ dg_sys_info ((long int *) &load_info, DG_SYS_INFO_LOAD_INFO_TYPE, DG_SYS_INFO_LOAD_VERSION_0); if (nelem > 0) loadavg[elem++] = load_info.one_minute; if (nelem > 1) loadavg[elem++] = load_info.five_minute; if (nelem > 2) loadavg[elem++] = load_info.fifteen_minute; # endif /* DGUX */ # if !defined (LDAV_DONE) && defined (apollo) # define LDAV_DONE /* Apollo code from lisch@mentorg.com (Ray Lischner). This system call is not documented. The load average is obtained as three long integers, for the load average over the past minute, five minutes, and fifteen minutes. Each value is a scaled integer, with 16 bits of integer part and 16 bits of fraction part. I'm not sure which operating system first supported this system call, but I know that SR10.2 supports it. */ extern void proc1_$get_loadav (); unsigned long load_ave[3]; proc1_$get_loadav (load_ave); if (nelem > 0) loadavg[elem++] = load_ave[0] / 65536.0; if (nelem > 1) loadavg[elem++] = load_ave[1] / 65536.0; if (nelem > 2) loadavg[elem++] = load_ave[2] / 65536.0; # endif /* apollo */ # if !defined (LDAV_DONE) && defined (OSF_MIPS) # define LDAV_DONE struct tbl_loadavg load_ave; table (TBL_LOADAVG, 0, &load_ave, 1, sizeof (load_ave)); loadavg[elem++] = (load_ave.tl_lscale == 0 ? load_ave.tl_avenrun.d[0] : (load_ave.tl_avenrun.l[0] / (double) load_ave.tl_lscale)); # endif /* OSF_MIPS */ # if !defined (LDAV_DONE) && (defined (__MSDOS__) || defined (WINDOWS32)) /* DJGPP */ # define LDAV_DONE /* A faithful emulation is going to have to be saved for a rainy day. */ for ( ; elem < nelem; elem++) { loadavg[elem] = 0.0; } # endif /* __MSDOS__ || WINDOWS32 */ # if !defined (LDAV_DONE) && defined (OSF_ALPHA) /* OSF/1 */ # define LDAV_DONE struct tbl_loadavg load_ave; table (TBL_LOADAVG, 0, &load_ave, 1, sizeof (load_ave)); for (elem = 0; elem < nelem; elem++) loadavg[elem] = (load_ave.tl_lscale == 0 ? load_ave.tl_avenrun.d[elem] : (load_ave.tl_avenrun.l[elem] / (double) load_ave.tl_lscale)); # endif /* OSF_ALPHA */ # if ! defined LDAV_DONE && defined __VMS /* VMS */ /* VMS specific code -- read from the Load Ave driver. */ LOAD_AVE_TYPE load_ave[3]; static bool getloadavg_initialized; # ifdef eunice struct { int dsc$w_length; char *dsc$a_pointer; } descriptor; # endif /* Ensure that there is a channel open to the load ave device. */ if (!getloadavg_initialized) { /* Attempt to open the channel. */ # ifdef eunice descriptor.dsc$w_length = 18; descriptor.dsc$a_pointer = "$$VMS_LOAD_AVERAGE"; # else $DESCRIPTOR (descriptor, "LAV0:"); # endif if (sys$assign (&descriptor, &channel, 0, 0) & 1) getloadavg_initialized = true; } /* Read the load average vector. */ if (getloadavg_initialized && !(sys$qiow (0, channel, IO$_READVBLK, 0, 0, 0, load_ave, 12, 0, 0, 0, 0) & 1)) { sys$dassgn (channel); getloadavg_initialized = false; } if (!getloadavg_initialized) { errno = ENOTSUP; return -1; } # endif /* ! defined LDAV_DONE && defined __VMS */ # if ! defined LDAV_DONE && defined LOAD_AVE_TYPE && ! defined __VMS /* IRIX, other old systems */ /* UNIX-specific code -- read the average from /dev/kmem. */ # define LDAV_PRIVILEGED /* This code requires special installation. */ LOAD_AVE_TYPE load_ave[3]; /* Get the address of LDAV_SYMBOL. */ if (offset == 0) { # ifndef sgi # if ! defined NLIST_STRUCT || ! defined N_NAME_POINTER strcpy (name_list[0].n_name, LDAV_SYMBOL); strcpy (name_list[1].n_name, ""); # else /* NLIST_STRUCT */ # ifdef HAVE_STRUCT_NLIST_N_UN_N_NAME name_list[0].n_un.n_name = LDAV_SYMBOL; name_list[1].n_un.n_name = 0; # else /* not HAVE_STRUCT_NLIST_N_UN_N_NAME */ name_list[0].n_name = LDAV_SYMBOL; name_list[1].n_name = 0; # endif /* not HAVE_STRUCT_NLIST_N_UN_N_NAME */ # endif /* NLIST_STRUCT */ # ifndef SUNOS_5 if ( # if !defined (_AIX) nlist (KERNEL_FILE, name_list) # else /* _AIX */ knlist (name_list, 1, sizeof (name_list[0])) # endif >= 0) /* Omit "&& name_list[0].n_type != 0 " -- it breaks on Sun386i. */ { # ifdef FIXUP_KERNEL_SYMBOL_ADDR FIXUP_KERNEL_SYMBOL_ADDR (name_list); # endif offset = name_list[0].n_value; } # endif /* !SUNOS_5 */ # else /* sgi */ ptrdiff_t ldav_off = sysmp (MP_KERNADDR, MPKA_AVENRUN); if (ldav_off != -1) offset = (long int) ldav_off & 0x7fffffff; # endif /* sgi */ } /* Make sure we have /dev/kmem open. */ if (!getloadavg_initialized) { # ifndef SUNOS_5 /* Set the channel to close on exec, so it does not litter any child's descriptor table. */ # ifndef O_CLOEXEC # define O_CLOEXEC 0 # endif int fd = open ("/dev/kmem", O_RDONLY | O_CLOEXEC); if (0 <= fd) { # if F_DUPFD_CLOEXEC if (fd <= STDERR_FILENO) { int fd1 = fcntl (fd, F_DUPFD_CLOEXEC, STDERR_FILENO + 1); close (fd); fd = fd1; } # endif if (0 <= fd) { channel = fd; getloadavg_initialized = true; } } # else /* SUNOS_5 */ /* We pass 0 for the kernel, corefile, and swapfile names to use the currently running kernel. */ kd = kvm_open (0, 0, 0, O_RDONLY, 0); if (kd != NULL) { /* nlist the currently running kernel. */ kvm_nlist (kd, name_list); offset = name_list[0].n_value; getloadavg_initialized = true; } # endif /* SUNOS_5 */ } /* If we can, get the load average values. */ if (offset && getloadavg_initialized) { /* Try to read the load. */ # ifndef SUNOS_5 if (lseek (channel, offset, 0) == -1L || read (channel, (char *) load_ave, sizeof (load_ave)) != sizeof (load_ave)) { close (channel); getloadavg_initialized = false; } # else /* SUNOS_5 */ if (kvm_read (kd, offset, (char *) load_ave, sizeof (load_ave)) != sizeof (load_ave)) { kvm_close (kd); getloadavg_initialized = false; } # endif /* SUNOS_5 */ } if (offset == 0 || !getloadavg_initialized) { errno = ENOTSUP; return -1; } # endif /* ! defined LDAV_DONE && defined LOAD_AVE_TYPE && ! defined __VMS */ # if !defined (LDAV_DONE) && defined (LOAD_AVE_TYPE) /* Including VMS. */ if (nelem > 0) loadavg[elem++] = LDAV_CVT (load_ave[0]); if (nelem > 1) loadavg[elem++] = LDAV_CVT (load_ave[1]); if (nelem > 2) loadavg[elem++] = LDAV_CVT (load_ave[2]); # define LDAV_DONE # endif /* !LDAV_DONE && LOAD_AVE_TYPE */ # if !defined LDAV_DONE errno = ENOSYS; elem = -1; # endif return elem; } make-4.3/lib/limits.in.h0000644000175000017500000000740013611136472012050 00000000000000/* A GNU-like . Copyright 2016-2020 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 the Free Software Foundation; either version 3, 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, see . */ #ifndef _@GUARD_PREFIX@_LIMITS_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_LIMITS_H@ #ifndef _@GUARD_PREFIX@_LIMITS_H #define _@GUARD_PREFIX@_LIMITS_H #ifndef LLONG_MIN # if defined LONG_LONG_MIN /* HP-UX 11.31 */ # define LLONG_MIN LONG_LONG_MIN # elif defined LONGLONG_MIN /* IRIX 6.5 */ # define LLONG_MIN LONGLONG_MIN # elif defined __GNUC__ # define LLONG_MIN (- __LONG_LONG_MAX__ - 1LL) # endif #endif #ifndef LLONG_MAX # if defined LONG_LONG_MAX /* HP-UX 11.31 */ # define LLONG_MAX LONG_LONG_MAX # elif defined LONGLONG_MAX /* IRIX 6.5 */ # define LLONG_MAX LONGLONG_MAX # elif defined __GNUC__ # define LLONG_MAX __LONG_LONG_MAX__ # endif #endif #ifndef ULLONG_MAX # if defined ULONG_LONG_MAX /* HP-UX 11.31 */ # define ULLONG_MAX ULONG_LONG_MAX # elif defined ULONGLONG_MAX /* IRIX 6.5 */ # define ULLONG_MAX ULONGLONG_MAX # elif defined __GNUC__ # define ULLONG_MAX (__LONG_LONG_MAX__ * 2ULL + 1ULL) # endif #endif /* The number of usable bits in an unsigned or signed integer type with minimum value MIN and maximum value MAX, as an int expression suitable in #if. Cover all known practical hosts. This implementation exploits the fact that MAX is 1 less than a power of 2, and merely counts the number of 1 bits in MAX; "COBn" means "count the number of 1 bits in the low-order n bits"). */ #define _GL_INTEGER_WIDTH(min, max) (((min) < 0) + _GL_COB128 (max)) #define _GL_COB128(n) (_GL_COB64 ((n) >> 31 >> 31 >> 2) + _GL_COB64 (n)) #define _GL_COB64(n) (_GL_COB32 ((n) >> 31 >> 1) + _GL_COB32 (n)) #define _GL_COB32(n) (_GL_COB16 ((n) >> 16) + _GL_COB16 (n)) #define _GL_COB16(n) (_GL_COB8 ((n) >> 8) + _GL_COB8 (n)) #define _GL_COB8(n) (_GL_COB4 ((n) >> 4) + _GL_COB4 (n)) #define _GL_COB4(n) (!!((n) & 8) + !!((n) & 4) + !!((n) & 2) + !!((n) & 1)) #ifndef WORD_BIT /* Assume 'int' is 32 bits wide. */ # define WORD_BIT 32 #endif #ifndef LONG_BIT /* Assume 'long' is 32 or 64 bits wide. */ # if LONG_MAX == INT_MAX # define LONG_BIT 32 # else # define LONG_BIT 64 # endif #endif /* Macros specified by ISO/IEC TS 18661-1:2014. */ #if (! defined ULLONG_WIDTH \ && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__)) # define CHAR_WIDTH _GL_INTEGER_WIDTH (CHAR_MIN, CHAR_MAX) # define SCHAR_WIDTH _GL_INTEGER_WIDTH (SCHAR_MIN, SCHAR_MAX) # define UCHAR_WIDTH _GL_INTEGER_WIDTH (0, UCHAR_MAX) # define SHRT_WIDTH _GL_INTEGER_WIDTH (SHRT_MIN, SHRT_MAX) # define USHRT_WIDTH _GL_INTEGER_WIDTH (0, USHRT_MAX) # define INT_WIDTH _GL_INTEGER_WIDTH (INT_MIN, INT_MAX) # define UINT_WIDTH _GL_INTEGER_WIDTH (0, UINT_MAX) # define LONG_WIDTH _GL_INTEGER_WIDTH (LONG_MIN, LONG_MAX) # define ULONG_WIDTH _GL_INTEGER_WIDTH (0, ULONG_MAX) # define LLONG_WIDTH _GL_INTEGER_WIDTH (LLONG_MIN, LLONG_MAX) # define ULLONG_WIDTH _GL_INTEGER_WIDTH (0, ULLONG_MAX) #endif /* !ULLONG_WIDTH && (_GNU_SOURCE || __STDC_WANT_IEC_60559_BFP_EXT__) */ #endif /* _@GUARD_PREFIX@_LIMITS_H */ #endif /* _@GUARD_PREFIX@_LIMITS_H */ make-4.3/lib/stripslash.c0000644000175000017500000000304213611136472012327 00000000000000/* stripslash.c -- remove redundant trailing slashes from a file name Copyright (C) 1990, 2001, 2003-2006, 2009-2020 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 the Free Software Foundation; either version 3 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, see . */ #include #include "dirname.h" /* Remove trailing slashes from FILE. Return true if a trailing slash was removed. This is useful when using file name completion from a shell that adds a "/" after directory names (such as tcsh and bash), because on symlinks to directories, several system calls have different semantics according to whether a trailing slash is present. */ bool strip_trailing_slashes (char *file) { char *base = last_component (file); char *base_lim; bool had_slash; /* last_component returns "" for file system roots, but we need to turn "///" into "/". */ if (! *base) base = file; base_lim = base + base_len (base); had_slash = (*base_lim != '\0'); *base_lim = '\0'; return had_slash; } make-4.3/lib/glob.in.h0000644000175000017500000001644713603564437011514 00000000000000/* Copyright (C) 1991, 1992, 1995, 1996, 1997, 1998 Free Software Foundation, Inc. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. The GNU C Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _GLOB_H #define _GLOB_H 1 #ifdef __cplusplus extern "C" { #endif #undef __ptr_t #if defined __cplusplus || (defined __STDC__ && __STDC__) || defined WINDOWS32 # if !defined __GLIBC__ # undef __P # undef __PMT # define __P(protos) protos # define __PMT(protos) protos # if !defined __GNUC__ || __GNUC__ < 2 # undef __const # define __const const # endif # endif # define __ptr_t void * #else /* Not C++ or ANSI C. */ # undef __P # undef __PMT # define __P(protos) () # define __PMT(protos) () # undef __const # define __const # define __ptr_t char * #endif /* C++ or ANSI C. */ /* We need `size_t' for the following definitions. */ #ifndef __size_t # if defined __FreeBSD__ # define __size_t size_t # else # if defined __GNUC__ && __GNUC__ >= 2 typedef __SIZE_TYPE__ __size_t; # else /* This is a guess. */ /*hb * Conflicts with DECCs already defined type __size_t. * Defining an own type with a name beginning with '__' is no good. * Anyway if DECC is used and __SIZE_T is defined then __size_t is * already defined (and I hope it's exactly the one we need here). */ # if !(defined __DECC && defined __SIZE_T) typedef unsigned long int __size_t; # endif # endif # endif #else /* The GNU CC stddef.h version defines __size_t as empty. We need a real definition. */ # undef __size_t # define __size_t size_t #endif /* Bits set in the FLAGS argument to `glob'. */ #define GLOB_ERR (1 << 0)/* Return on read errors. */ #define GLOB_MARK (1 << 1)/* Append a slash to each name. */ #define GLOB_NOSORT (1 << 2)/* Don't sort the names. */ #define GLOB_DOOFFS (1 << 3)/* Insert PGLOB->gl_offs NULLs. */ #define GLOB_NOCHECK (1 << 4)/* If nothing matches, return the pattern. */ #define GLOB_APPEND (1 << 5)/* Append to results of a previous call. */ #define GLOB_NOESCAPE (1 << 6)/* Backslashes don't quote metacharacters. */ #define GLOB_PERIOD (1 << 7)/* Leading `.' can be matched by metachars. */ #if (!defined _POSIX_C_SOURCE || _POSIX_C_SOURCE < 2 || defined _BSD_SOURCE \ || defined _GNU_SOURCE) # define GLOB_MAGCHAR (1 << 8)/* Set in gl_flags if any metachars seen. */ # define GLOB_ALTDIRFUNC (1 << 9)/* Use gl_opendir et al functions. */ # define GLOB_BRACE (1 << 10)/* Expand "{a,b}" to "a" "b". */ # define GLOB_NOMAGIC (1 << 11)/* If no magic chars, return the pattern. */ # define GLOB_TILDE (1 << 12)/* Expand ~user and ~ to home directories. */ # define GLOB_ONLYDIR (1 << 13)/* Match only directories. */ # define GLOB_TILDE_CHECK (1 << 14)/* Like GLOB_TILDE but return an error if the user name is not available. */ # define __GLOB_FLAGS (GLOB_ERR|GLOB_MARK|GLOB_NOSORT|GLOB_DOOFFS| \ GLOB_NOESCAPE|GLOB_NOCHECK|GLOB_APPEND| \ GLOB_PERIOD|GLOB_ALTDIRFUNC|GLOB_BRACE| \ GLOB_NOMAGIC|GLOB_TILDE|GLOB_ONLYDIR|GLOB_TILDE_CHECK) #else # define __GLOB_FLAGS (GLOB_ERR|GLOB_MARK|GLOB_NOSORT|GLOB_DOOFFS| \ GLOB_NOESCAPE|GLOB_NOCHECK|GLOB_APPEND| \ GLOB_PERIOD) #endif /* Error returns from `glob'. */ #define GLOB_NOSPACE 1 /* Ran out of memory. */ #define GLOB_ABORTED 2 /* Read error. */ #define GLOB_NOMATCH 3 /* No matches found. */ #define GLOB_NOSYS 4 /* Not implemented. */ #ifdef _GNU_SOURCE /* Previous versions of this file defined GLOB_ABEND instead of GLOB_ABORTED. Provide a compatibility definition here. */ # define GLOB_ABEND GLOB_ABORTED #endif /* Structure describing a globbing run. */ #if !defined _AMIGA && !defined VMS /* Buggy compiler. */ struct stat; #endif typedef struct { __size_t gl_pathc; /* Count of paths matched by the pattern. */ char **gl_pathv; /* List of matched pathnames. */ __size_t gl_offs; /* Slots to reserve in `gl_pathv'. */ int gl_flags; /* Set to FLAGS, maybe | GLOB_MAGCHAR. */ /* If the GLOB_ALTDIRFUNC flag is set, the following functions are used instead of the normal file access functions. */ void (*gl_closedir) __PMT ((void *)); struct dirent *(*gl_readdir) __PMT ((void *)); __ptr_t (*gl_opendir) __PMT ((__const char *)); int (*gl_lstat) __PMT ((__const char *, struct stat *)); #if defined(VMS) && defined(__DECC) && !defined(_POSIX_C_SOURCE) int (*gl_stat) __PMT ((__const char *, struct stat *, ...)); #else int (*gl_stat) __PMT ((__const char *, struct stat *)); #endif } glob_t; #ifdef _LARGEFILE64_SOURCE struct stat64; typedef struct { __size_t gl_pathc; char **gl_pathv; __size_t gl_offs; int gl_flags; /* If the GLOB_ALTDIRFUNC flag is set, the following functions are used instead of the normal file access functions. */ void (*gl_closedir) __PMT ((void *)); struct dirent64 *(*gl_readdir) __PMT ((void *)); __ptr_t (*gl_opendir) __PMT ((__const char *)); int (*gl_lstat) __PMT ((__const char *, struct stat64 *)); int (*gl_stat) __PMT ((__const char *, struct stat64 *)); } glob64_t; #endif #if _FILE_OFFSET_BITS == 64 && __GNUC__ < 2 # define glob glob64 # define globfree globfree64 #else # ifdef _LARGEFILE64_SOURCE extern int glob64 __P ((__const char *__pattern, int __flags, int (*__errfunc) (__const char *, int), glob64_t *__pglob)); extern void globfree64 __P ((glob64_t *__pglob)); # endif #endif /* Do glob searching for PATTERN, placing results in PGLOB. The bits defined above may be set in FLAGS. If a directory cannot be opened or read and ERRFUNC is not nil, it is called with the pathname that caused the error, and the `errno' value from the failing call; if it returns non-zero `glob' returns GLOB_ABEND; if it returns zero, the error is ignored. If memory cannot be allocated for PGLOB, GLOB_NOSPACE is returned. Otherwise, `glob' returns zero. */ #if _FILE_OFFSET_BITS != 64 || __GNUC__ < 2 extern int glob __P ((__const char *__pattern, int __flags, int (*__errfunc) (__const char *, int), glob_t *__pglob)); /* Free storage allocated in PGLOB by a previous `glob' call. */ extern void globfree __P ((glob_t *__pglob)); #else extern int glob __P ((__const char *__pattern, int __flags, int (*__errfunc) (__const char *, int), glob_t *__pglob)) __asm__ ("glob64"); extern void globfree __P ((glob_t *__pglob)) __asm__ ("globfree64"); #endif #ifdef _GNU_SOURCE /* Return nonzero if PATTERN contains any metacharacters. Metacharacters can be quoted with backslashes if QUOTE is nonzero. This function is not part of the interface specified by POSIX.2 but several programs want to use it. */ extern int glob_pattern_p __P ((__const char *__pattern, int __quote)); #endif #ifdef __cplusplus } #endif #endif /* glob.h */ make-4.3/lib/findprog-in.c0000644000175000017500000002030513611136471012347 00000000000000/* Locating a program in a given path. Copyright (C) 2001-2004, 2006-2020 Free Software Foundation, Inc. Written by Bruno Haible , 2001, 2019. 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 3 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, see . */ #include /* Specification. */ #include "findprog.h" #include #include #include #include #include #include "filename.h" #include "concat-filename.h" #include "xalloc.h" #if (defined _WIN32 && !defined __CYGWIN__) || defined __EMX__ || defined __DJGPP__ /* Native Windows, OS/2, DOS */ # define NATIVE_SLASH '\\' #else /* Unix */ # define NATIVE_SLASH '/' #endif /* Separator in PATH like lists of pathnames. */ #if (defined _WIN32 && !defined __CYGWIN__) || defined __EMX__ || defined __DJGPP__ /* Native Windows, OS/2, DOS */ # define PATH_SEPARATOR ';' #else /* Unix */ # define PATH_SEPARATOR ':' #endif /* The list of suffixes that the execlp/execvp function tries when searching for the program. */ static const char * const suffixes[] = { #if defined _WIN32 && !defined __CYGWIN__ /* Native Windows */ "", ".com", ".exe", ".bat", ".cmd" /* Note: Files without any suffix are not considered executable. */ /* Note: The cmd.exe program does a different lookup: It searches according to the PATHEXT environment variable. See . Also, it executes files ending .bat and .cmd directly without letting the kernel interpret the program file. */ #elif defined __CYGWIN__ "", ".exe", ".com" #elif defined __EMX__ "", ".exe" #elif defined __DJGPP__ "", ".com", ".exe", ".bat" #else /* Unix */ "" #endif }; const char * find_in_given_path (const char *progname, const char *path, bool optimize_for_exec) { { bool has_slash = false; { const char *p; for (p = progname; *p != '\0'; p++) if (ISSLASH (*p)) { has_slash = true; break; } } if (has_slash) { /* If progname contains a slash, it is either absolute or relative to the current directory. PATH is not used. */ if (optimize_for_exec) /* The execl/execv/execlp/execvp functions will try the various suffixes anyway and fail if no executable is found. */ return progname; else { /* Try the various suffixes and see whether one of the files with such a suffix is actually executable. */ int failure_errno; size_t i; #if defined _WIN32 && !defined __CYGWIN__ /* Native Windows */ const char *progbasename; { const char *p; progbasename = progname; for (p = progname; *p != '\0'; p++) if (ISSLASH (*p)) progbasename = p + 1; } #endif /* Try all platform-dependent suffixes. */ failure_errno = ENOENT; for (i = 0; i < sizeof (suffixes) / sizeof (suffixes[0]); i++) { const char *suffix = suffixes[i]; #if defined _WIN32 && !defined __CYGWIN__ /* Native Windows */ /* File names without a '.' are not considered executable, and for file names with a '.' no additional suffix is tried. */ if ((*suffix != '\0') != (strchr (progbasename, '.') != NULL)) #endif { /* Concatenate progname and suffix. */ char *progpathname = xconcatenated_filename ("", progname, suffix); /* On systems which have the eaccess() system call, let's use it. On other systems, let's hope that this program is not installed setuid or setgid, so that it is ok to call access() despite its design flaw. */ if (eaccess (progpathname, X_OK) == 0) { /* Found! */ if (strcmp (progpathname, progname) == 0) { free (progpathname); return progname; } else return progpathname; } if (errno != ENOENT) failure_errno = errno; free (progpathname); } } errno = failure_errno; return NULL; } } } if (path == NULL) /* If PATH is not set, the default search path is implementation dependent. In practice, it is treated like an empty PATH. */ path = ""; { int failure_errno; /* Make a copy, to prepare for destructive modifications. */ char *path_copy = xstrdup (path); char *path_rest; char *cp; failure_errno = ENOENT; for (path_rest = path_copy; ; path_rest = cp + 1) { const char *dir; bool last; size_t i; /* Extract next directory in PATH. */ dir = path_rest; for (cp = path_rest; *cp != '\0' && *cp != PATH_SEPARATOR; cp++) ; last = (*cp == '\0'); *cp = '\0'; /* Empty PATH components designate the current directory. */ if (dir == cp) dir = "."; /* Try all platform-dependent suffixes. */ for (i = 0; i < sizeof (suffixes) / sizeof (suffixes[0]); i++) { const char *suffix = suffixes[i]; #if defined _WIN32 && !defined __CYGWIN__ /* Native Windows */ /* File names without a '.' are not considered executable, and for file names with a '.' no additional suffix is tried. */ if ((*suffix != '\0') != (strchr (progname, '.') != NULL)) #endif { /* Concatenate dir, progname, and suffix. */ char *progpathname = xconcatenated_filename (dir, progname, suffix); /* On systems which have the eaccess() system call, let's use it. On other systems, let's hope that this program is not installed setuid or setgid, so that it is ok to call access() despite its design flaw. */ if (eaccess (progpathname, X_OK) == 0) { /* Found! */ if (strcmp (progpathname, progname) == 0) { free (progpathname); /* Add the "./" prefix for real, that xconcatenated_filename() optimized away. This avoids a second PATH search when the caller uses execl/execv/execlp/execvp. */ progpathname = XNMALLOC (2 + strlen (progname) + 1, char); progpathname[0] = '.'; progpathname[1] = NATIVE_SLASH; memcpy (progpathname + 2, progname, strlen (progname) + 1); } free (path_copy); return progpathname; } if (errno != ENOENT) failure_errno = errno; free (progpathname); } } if (last) break; } /* Not found in PATH. */ free (path_copy); errno = failure_errno; return NULL; } } make-4.3/lib/close.c0000644000175000017500000000277013611136471011246 00000000000000/* close replacement. Copyright (C) 2008-2020 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 the Free Software Foundation; either version 3 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, see . */ #include /* Specification. */ #include #include #include "fd-hook.h" #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif #undef close #if HAVE_MSVC_INVALID_PARAMETER_HANDLER static int close_nothrow (int fd) { int result; TRY_MSVC_INVAL { result = close (fd); } CATCH_MSVC_INVAL { result = -1; errno = EBADF; } DONE_MSVC_INVAL; return result; } #else # define close_nothrow close #endif /* Override close() to call into other gnulib modules. */ int rpl_close (int fd) { #if WINDOWS_SOCKETS int retval = execute_all_close_hooks (close_nothrow, fd); #else int retval = close_nothrow (fd); #endif #if REPLACE_FCHDIR if (retval >= 0) _gl_unregister_fd (fd); #endif return retval; } make-4.3/lib/Makefile.in0000644000175000017500000026127513611136510012043 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in 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. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2002-2020 Free Software Foundation, Inc. # # 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 # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This file 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 file. If not, see . # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that # contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. # Reproduce by: # gnulib-tool --import --local-dir=gl \ # --lib=libgnu \ # --source-base=lib \ # --m4-base=m4 \ # --doc-base=doc \ # --tests-base=tests \ # --aux-dir=build-aux \ # --no-conditional-dependencies \ # --no-libtool \ # --macro-prefix=gl \ # alloca \ # fdl \ # findprog-in \ # getloadavg \ # host-cpu-c-abi \ # make-glob \ # strerror VPATH = @srcdir@ 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 \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @USE_SYSTEM_GLOB_FALSE@am__append_1 = fnmatch.c glob.c @USE_SYSTEM_GLOB_FALSE@am__append_2 = fnmatch.h glob.h @USE_SYSTEM_GLOB_FALSE@am__append_3 = fnmatch.h fnmatch.h-t glob.h \ @USE_SYSTEM_GLOB_FALSE@ glob.h-t subdir = lib ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/access.m4 \ $(top_srcdir)/m4/acinclude.m4 $(top_srcdir)/m4/alloca.m4 \ $(top_srcdir)/m4/asm-underscore.m4 $(top_srcdir)/m4/close.m4 \ $(top_srcdir)/m4/dirname.m4 $(top_srcdir)/m4/dospaths.m4 \ $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \ $(top_srcdir)/m4/eaccess.m4 $(top_srcdir)/m4/errno_h.m4 \ $(top_srcdir)/m4/error.m4 $(top_srcdir)/m4/extensions.m4 \ $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/fcntl-o.m4 \ $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ $(top_srcdir)/m4/findprog-in.m4 \ $(top_srcdir)/m4/getdtablesize.m4 \ $(top_srcdir)/m4/getloadavg.m4 $(top_srcdir)/m4/getprogname.m4 \ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gnulib-common.m4 \ $(top_srcdir)/m4/gnulib-comp.m4 \ $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/include_next.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/limits-h.m4 $(top_srcdir)/m4/longlong.m4 \ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/msvc-inval.m4 \ $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/off_t.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stdbool.m4 \ $(top_srcdir)/m4/stddef_h.m4 $(top_srcdir)/m4/stdint.m4 \ $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ $(top_srcdir)/m4/stpcpy.m4 $(top_srcdir)/m4/strerror.m4 \ $(top_srcdir)/m4/string_h.m4 $(top_srcdir)/m4/sys_socket_h.m4 \ $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/unistd_h.m4 \ $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_t.m4 \ $(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/xalloc.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) LTLIBRARIES = $(noinst_LTLIBRARIES) AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libgnu_a_AR = $(AR) $(ARFLAGS) am__DEPENDENCIES_1 = am__libgnu_a_SOURCES_DIST = concat-filename.c dirname-lgpl.c \ basename-lgpl.c stripslash.c exitfail.c fd-hook.c findprog.h \ findprog-in.c getprogname.h getprogname.c gettext.h fnmatch.c \ glob.c unistd.c xmalloc.c xalloc-die.c xconcat-filename.c @USE_SYSTEM_GLOB_FALSE@am__objects_1 = fnmatch.$(OBJEXT) \ @USE_SYSTEM_GLOB_FALSE@ glob.$(OBJEXT) am_libgnu_a_OBJECTS = concat-filename.$(OBJEXT) dirname-lgpl.$(OBJEXT) \ basename-lgpl.$(OBJEXT) stripslash.$(OBJEXT) \ exitfail.$(OBJEXT) fd-hook.$(OBJEXT) findprog-in.$(OBJEXT) \ getprogname.$(OBJEXT) $(am__objects_1) unistd.$(OBJEXT) \ xmalloc.$(OBJEXT) xalloc-die.$(OBJEXT) \ xconcat-filename.$(OBJEXT) libgnu_a_OBJECTS = $(am_libgnu_a_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/access.Po ./$(DEPDIR)/alloca.Po \ ./$(DEPDIR)/basename-lgpl.Po ./$(DEPDIR)/close.Po \ ./$(DEPDIR)/concat-filename.Po ./$(DEPDIR)/dirname-lgpl.Po \ ./$(DEPDIR)/dup2.Po ./$(DEPDIR)/error.Po \ ./$(DEPDIR)/exitfail.Po ./$(DEPDIR)/fcntl.Po \ ./$(DEPDIR)/fd-hook.Po ./$(DEPDIR)/findprog-in.Po \ ./$(DEPDIR)/fnmatch.Po ./$(DEPDIR)/getdtablesize.Po \ ./$(DEPDIR)/getloadavg.Po ./$(DEPDIR)/getprogname.Po \ ./$(DEPDIR)/glob.Po ./$(DEPDIR)/malloc.Po \ ./$(DEPDIR)/msvc-inval.Po ./$(DEPDIR)/msvc-nothrow.Po \ ./$(DEPDIR)/stpcpy.Po ./$(DEPDIR)/strerror-override.Po \ ./$(DEPDIR)/strerror.Po ./$(DEPDIR)/stripslash.Po \ ./$(DEPDIR)/unistd.Po ./$(DEPDIR)/xalloc-die.Po \ ./$(DEPDIR)/xconcat-filename.Po ./$(DEPDIR)/xmalloc.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgnu_a_SOURCES) $(EXTRA_libgnu_a_SOURCES) DIST_SOURCES = $(am__libgnu_a_SOURCES_DIST) $(EXTRA_libgnu_a_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/build-aux/depcomp alloca.c DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_LDFLAGS = @AM_LDFLAGS@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ GETLOADAVG_LIBS = @GETLOADAVG_LIBS@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIB_ACCESS = @GNULIB_ACCESS@ GNULIB_ATOLL = @GNULIB_ATOLL@ GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_COPY_FILE_RANGE = @GNULIB_COPY_FILE_RANGE@ GNULIB_CREAT = @GNULIB_CREAT@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FCLOSE = @GNULIB_FCLOSE@ GNULIB_FCNTL = @GNULIB_FCNTL@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FDOPEN = @GNULIB_FDOPEN@ GNULIB_FFLUSH = @GNULIB_FFLUSH@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FGETC = @GNULIB_FGETC@ GNULIB_FGETS = @GNULIB_FGETS@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ GNULIB_FPURGE = @GNULIB_FPURGE@ GNULIB_FPUTC = @GNULIB_FPUTC@ GNULIB_FPUTS = @GNULIB_FPUTS@ GNULIB_FREAD = @GNULIB_FREAD@ GNULIB_FREOPEN = @GNULIB_FREOPEN@ GNULIB_FSCANF = @GNULIB_FSCANF@ GNULIB_FSEEK = @GNULIB_FSEEK@ GNULIB_FSEEKO = @GNULIB_FSEEKO@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTELL = @GNULIB_FTELL@ GNULIB_FTELLO = @GNULIB_FTELLO@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_FWRITE = @GNULIB_FWRITE@ GNULIB_GETC = @GNULIB_GETC@ GNULIB_GETCHAR = @GNULIB_GETCHAR@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETPASS = @GNULIB_GETPASS@ GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GRANTPT = @GNULIB_GRANTPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_ISATTY = @GNULIB_ISATTY@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MBTOWC = @GNULIB_MBTOWC@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_OPEN = @GNULIB_OPEN@ GNULIB_OPENAT = @GNULIB_OPENAT@ GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POPEN = @GNULIB_POPEN@ GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PRINTF = @GNULIB_PRINTF@ GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ GNULIB_PTSNAME = @GNULIB_PTSNAME@ GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ GNULIB_PUTC = @GNULIB_PUTC@ GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ GNULIB_PUTENV = @GNULIB_PUTENV@ GNULIB_PUTS = @GNULIB_PUTS@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_QSORT_R = @GNULIB_QSORT_R@ GNULIB_RANDOM = @GNULIB_RANDOM@ GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ GNULIB_REALPATH = @GNULIB_REALPATH@ GNULIB_REMOVE = @GNULIB_REMOVE@ GNULIB_RENAME = @GNULIB_RENAME@ GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_RPMATCH = @GNULIB_RPMATCH@ GNULIB_SCANF = @GNULIB_SCANF@ GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ GNULIB_SETENV = @GNULIB_SETENV@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOD = @GNULIB_STRTOD@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRTOLD = @GNULIB_STRTOLD@ GNULIB_STRTOLL = @GNULIB_STRTOLL@ GNULIB_STRTOULL = @GNULIB_STRTOULL@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ GNULIB_UNSETENV = @GNULIB_UNSETENV@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ GNULIB_VFSCANF = @GNULIB_VFSCANF@ GNULIB_VPRINTF = @GNULIB_VPRINTF@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ GNULIB_WCTOMB = @GNULIB_WCTOMB@ GNULIB_WRITE = @GNULIB_WRITE@ GNULIB__EXIT = @GNULIB__EXIT@ GREP = @GREP@ GUILE_CFLAGS = @GUILE_CFLAGS@ GUILE_LIBS = @GUILE_LIBS@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ HOST_CPU = @HOST_CPU@ HOST_CPU_C_ABI = @HOST_CPU_C_ABI@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LDFLAGS = @LDFLAGS@ LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@ LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIMITS_H = @LIMITS_H@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_HOST = @MAKE_HOST@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REMOTE = @REMOTE@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_CALLOC = @REPLACE_CALLOC@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_MALLOC = @REPLACE_MALLOC@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOC = @REPLACE_REALLOC@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ USE_NLS = @USE_NLS@ USE_SYSTEM_GLOB = @USE_SYSTEM_GLOB@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = 1.11 gnits SUBDIRS = noinst_HEADERS = noinst_LIBRARIES = libgnu.a noinst_LTLIBRARIES = EXTRA_DIST = access.c alloca.c alloca.in.h close.c concat-filename.h \ dirname.h dosname.h dup2.c errno.in.h error.c error.h \ exitfail.h fcntl.c fcntl.in.h fd-hook.h filename.h \ getdtablesize.c getloadavg.c intprops.h limits.in.h \ fnmatch.in.h glob.in.h malloc.c msvc-inval.c msvc-inval.h \ msvc-nothrow.c msvc-nothrow.h _Noreturn.h arg-nonnull.h \ c++defs.h warn-on-use.h stdbool.in.h stddef.in.h stdint.in.h \ stdio.in.h stdlib.in.h stpcpy.c strerror.c strerror-override.c \ strerror-override.h string.in.h sys_types.in.h unistd.in.h \ verify.h xalloc.h xalloc-oversized.h concat-filename.h BUILT_SOURCES = $(ALLOCA_H) $(ERRNO_H) fcntl.h $(LIMITS_H) \ $(am__append_2) $(STDBOOL_H) $(STDDEF_H) $(STDINT_H) stdio.h \ stdlib.h string.h sys/types.h unistd.h SUFFIXES = MOSTLYCLEANFILES = core *.stackdump alloca.h alloca.h-t errno.h \ errno.h-t fcntl.h fcntl.h-t limits.h limits.h-t \ $(am__append_3) stdbool.h stdbool.h-t stddef.h stddef.h-t \ stdint.h stdint.h-t stdio.h stdio.h-t stdlib.h stdlib.h-t \ string.h string.h-t sys/types.h sys/types.h-t unistd.h \ unistd.h-t MOSTLYCLEANDIRS = CLEANFILES = DISTCLEANFILES = MAINTAINERCLEANFILES = # No GNU Make output. AM_CPPFLAGS = AM_CFLAGS = libgnu_a_SOURCES = concat-filename.c dirname-lgpl.c basename-lgpl.c \ stripslash.c exitfail.c fd-hook.c findprog.h findprog-in.c \ getprogname.h getprogname.c gettext.h $(am__append_1) unistd.c \ xmalloc.c xalloc-die.c xconcat-filename.c libgnu_a_LIBADD = $(gl_LIBOBJS) @ALLOCA@ libgnu_a_DEPENDENCIES = $(gl_LIBOBJS) @ALLOCA@ EXTRA_libgnu_a_SOURCES = access.c alloca.c close.c dup2.c error.c \ fcntl.c getdtablesize.c getloadavg.c malloc.c msvc-inval.c \ msvc-nothrow.c stpcpy.c strerror.c strerror-override.c # Use this preprocessor expression to decide whether #include_next works. # Do not rely on a 'configure'-time test for this, since the expression # might appear in an installed header, which is used by some other compiler. HAVE_INCLUDE_NEXT = (__GNUC__ || 60000000 <= __DECC_VER) # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. _NORETURN_H = $(srcdir)/_Noreturn.h # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. ARG_NONNULL_H = $(srcdir)/arg-nonnull.h # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. CXXDEFS_H = $(srcdir)/c++defs.h # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. WARN_ON_USE_H = $(srcdir)/warn-on-use.h all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits lib/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnits lib/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgnu.a: $(libgnu_a_OBJECTS) $(libgnu_a_DEPENDENCIES) $(EXTRA_libgnu_a_DEPENDENCIES) $(AM_V_at)-rm -f libgnu.a $(AM_V_AR)$(libgnu_a_AR) libgnu.a $(libgnu_a_OBJECTS) $(libgnu_a_LIBADD) $(AM_V_at)$(RANLIB) libgnu.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/access.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alloca.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basename-lgpl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/close.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/concat-filename.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dirname-lgpl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dup2.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exitfail.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcntl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fd-hook.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/findprog-in.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fnmatch.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getdtablesize.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getloadavg.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getprogname.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glob.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/malloc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msvc-inval.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msvc-nothrow.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stpcpy.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strerror-override.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strerror.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stripslash.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unistd.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xalloc-die.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xconcat-filename.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmalloc.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(HEADERS) installdirs: installdirs-recursive installdirs-am: install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic clean-noinstLIBRARIES clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/access.Po -rm -f ./$(DEPDIR)/alloca.Po -rm -f ./$(DEPDIR)/basename-lgpl.Po -rm -f ./$(DEPDIR)/close.Po -rm -f ./$(DEPDIR)/concat-filename.Po -rm -f ./$(DEPDIR)/dirname-lgpl.Po -rm -f ./$(DEPDIR)/dup2.Po -rm -f ./$(DEPDIR)/error.Po -rm -f ./$(DEPDIR)/exitfail.Po -rm -f ./$(DEPDIR)/fcntl.Po -rm -f ./$(DEPDIR)/fd-hook.Po -rm -f ./$(DEPDIR)/findprog-in.Po -rm -f ./$(DEPDIR)/fnmatch.Po -rm -f ./$(DEPDIR)/getdtablesize.Po -rm -f ./$(DEPDIR)/getloadavg.Po -rm -f ./$(DEPDIR)/getprogname.Po -rm -f ./$(DEPDIR)/glob.Po -rm -f ./$(DEPDIR)/malloc.Po -rm -f ./$(DEPDIR)/msvc-inval.Po -rm -f ./$(DEPDIR)/msvc-nothrow.Po -rm -f ./$(DEPDIR)/stpcpy.Po -rm -f ./$(DEPDIR)/strerror-override.Po -rm -f ./$(DEPDIR)/strerror.Po -rm -f ./$(DEPDIR)/stripslash.Po -rm -f ./$(DEPDIR)/unistd.Po -rm -f ./$(DEPDIR)/xalloc-die.Po -rm -f ./$(DEPDIR)/xconcat-filename.Po -rm -f ./$(DEPDIR)/xmalloc.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/access.Po -rm -f ./$(DEPDIR)/alloca.Po -rm -f ./$(DEPDIR)/basename-lgpl.Po -rm -f ./$(DEPDIR)/close.Po -rm -f ./$(DEPDIR)/concat-filename.Po -rm -f ./$(DEPDIR)/dirname-lgpl.Po -rm -f ./$(DEPDIR)/dup2.Po -rm -f ./$(DEPDIR)/error.Po -rm -f ./$(DEPDIR)/exitfail.Po -rm -f ./$(DEPDIR)/fcntl.Po -rm -f ./$(DEPDIR)/fd-hook.Po -rm -f ./$(DEPDIR)/findprog-in.Po -rm -f ./$(DEPDIR)/fnmatch.Po -rm -f ./$(DEPDIR)/getdtablesize.Po -rm -f ./$(DEPDIR)/getloadavg.Po -rm -f ./$(DEPDIR)/getprogname.Po -rm -f ./$(DEPDIR)/glob.Po -rm -f ./$(DEPDIR)/malloc.Po -rm -f ./$(DEPDIR)/msvc-inval.Po -rm -f ./$(DEPDIR)/msvc-nothrow.Po -rm -f ./$(DEPDIR)/stpcpy.Po -rm -f ./$(DEPDIR)/strerror-override.Po -rm -f ./$(DEPDIR)/strerror.Po -rm -f ./$(DEPDIR)/stripslash.Po -rm -f ./$(DEPDIR)/unistd.Po -rm -f ./$(DEPDIR)/xalloc-die.Po -rm -f ./$(DEPDIR)/xconcat-filename.Po -rm -f ./$(DEPDIR)/xmalloc.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-local pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) all check install install-am \ install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-generic \ clean-noinstLIBRARIES clean-noinstLTLIBRARIES cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ 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 \ mostlyclean-local pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am .PRECIOUS: Makefile # We need the following in order to create when the system # doesn't have one that works with the given compiler. @GL_GENERATE_ALLOCA_H_TRUE@alloca.h: alloca.in.h $(top_builddir)/config.status @GL_GENERATE_ALLOCA_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ @GL_GENERATE_ALLOCA_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ @GL_GENERATE_ALLOCA_H_TRUE@ sed -e 's|@''HAVE_ALLOCA_H''@|$(HAVE_ALLOCA_H)|g' < $(srcdir)/alloca.in.h; \ @GL_GENERATE_ALLOCA_H_TRUE@ } > $@-t && \ @GL_GENERATE_ALLOCA_H_TRUE@ mv -f $@-t $@ @GL_GENERATE_ALLOCA_H_FALSE@alloca.h: $(top_builddir)/config.status @GL_GENERATE_ALLOCA_H_FALSE@ rm -f $@ # We need the following in order to create when the system # doesn't have one that is POSIX compliant. @GL_GENERATE_ERRNO_H_TRUE@errno.h: errno.in.h $(top_builddir)/config.status @GL_GENERATE_ERRNO_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ @GL_GENERATE_ERRNO_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ @GL_GENERATE_ERRNO_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ < $(srcdir)/errno.in.h; \ @GL_GENERATE_ERRNO_H_TRUE@ } > $@-t && \ @GL_GENERATE_ERRNO_H_TRUE@ mv $@-t $@ @GL_GENERATE_ERRNO_H_FALSE@errno.h: $(top_builddir)/config.status @GL_GENERATE_ERRNO_H_FALSE@ rm -f $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. fcntl.h: fcntl.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_FCNTL_H''@|$(NEXT_FCNTL_H)|g' \ -e 's/@''GNULIB_CREAT''@/$(GNULIB_CREAT)/g' \ -e 's/@''GNULIB_FCNTL''@/$(GNULIB_FCNTL)/g' \ -e 's/@''GNULIB_NONBLOCKING''@/$(GNULIB_NONBLOCKING)/g' \ -e 's/@''GNULIB_OPEN''@/$(GNULIB_OPEN)/g' \ -e 's/@''GNULIB_OPENAT''@/$(GNULIB_OPENAT)/g' \ -e 's|@''HAVE_FCNTL''@|$(HAVE_FCNTL)|g' \ -e 's|@''HAVE_OPENAT''@|$(HAVE_OPENAT)|g' \ -e 's|@''REPLACE_CREAT''@|$(REPLACE_CREAT)|g' \ -e 's|@''REPLACE_FCNTL''@|$(REPLACE_FCNTL)|g' \ -e 's|@''REPLACE_OPEN''@|$(REPLACE_OPEN)|g' \ -e 's|@''REPLACE_OPENAT''@|$(REPLACE_OPENAT)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/fcntl.in.h; \ } > $@-t && \ mv $@-t $@ # We need the following in order to create when the system # doesn't have one that is compatible with GNU. @GL_GENERATE_LIMITS_H_TRUE@limits.h: limits.in.h $(top_builddir)/config.status @GL_GENERATE_LIMITS_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ @GL_GENERATE_LIMITS_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ @GL_GENERATE_LIMITS_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''NEXT_LIMITS_H''@|$(NEXT_LIMITS_H)|g' \ @GL_GENERATE_LIMITS_H_TRUE@ < $(srcdir)/limits.in.h; \ @GL_GENERATE_LIMITS_H_TRUE@ } > $@-t && \ @GL_GENERATE_LIMITS_H_TRUE@ mv $@-t $@ @GL_GENERATE_LIMITS_H_FALSE@limits.h: $(top_builddir)/config.status @GL_GENERATE_LIMITS_H_FALSE@ rm -f $@ @USE_SYSTEM_GLOB_FALSE@fnmatch.h: fnmatch.in.h $(top_builddir)/config.status @USE_SYSTEM_GLOB_FALSE@ $(AM_V_GEN)rm -f $@-t $@ && \ @USE_SYSTEM_GLOB_FALSE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ @USE_SYSTEM_GLOB_FALSE@ cat $(srcdir)/fnmatch.in.h; \ @USE_SYSTEM_GLOB_FALSE@ } > $@-t && \ @USE_SYSTEM_GLOB_FALSE@ mv -f $@-t $@ @USE_SYSTEM_GLOB_FALSE@glob.h: glob.in.h $(top_builddir)/config.status @USE_SYSTEM_GLOB_FALSE@ $(AM_V_GEN)rm -f $@-t $@ && \ @USE_SYSTEM_GLOB_FALSE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ @USE_SYSTEM_GLOB_FALSE@ cat $(srcdir)/glob.in.h; \ @USE_SYSTEM_GLOB_FALSE@ } > $@-t && \ @USE_SYSTEM_GLOB_FALSE@ mv -f $@-t $@ # We need the following in order to create when the system # doesn't have one that works. @GL_GENERATE_STDBOOL_H_TRUE@stdbool.h: stdbool.in.h $(top_builddir)/config.status @GL_GENERATE_STDBOOL_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ @GL_GENERATE_STDBOOL_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ @GL_GENERATE_STDBOOL_H_TRUE@ sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \ @GL_GENERATE_STDBOOL_H_TRUE@ } > $@-t && \ @GL_GENERATE_STDBOOL_H_TRUE@ mv $@-t $@ @GL_GENERATE_STDBOOL_H_FALSE@stdbool.h: $(top_builddir)/config.status @GL_GENERATE_STDBOOL_H_FALSE@ rm -f $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. @GL_GENERATE_STDDEF_H_TRUE@stddef.h: stddef.in.h $(top_builddir)/config.status @GL_GENERATE_STDDEF_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ @GL_GENERATE_STDDEF_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ @GL_GENERATE_STDDEF_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''HAVE_MAX_ALIGN_T''@|$(HAVE_MAX_ALIGN_T)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ < $(srcdir)/stddef.in.h; \ @GL_GENERATE_STDDEF_H_TRUE@ } > $@-t && \ @GL_GENERATE_STDDEF_H_TRUE@ mv $@-t $@ @GL_GENERATE_STDDEF_H_FALSE@stddef.h: $(top_builddir)/config.status @GL_GENERATE_STDDEF_H_FALSE@ rm -f $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. @GL_GENERATE_STDINT_H_TRUE@stdint.h: stdint.in.h $(top_builddir)/config.status @GL_GENERATE_STDINT_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ @GL_GENERATE_STDINT_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ @GL_GENERATE_STDINT_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_C99_STDINT_H''@/$(HAVE_C99_STDINT_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ < $(srcdir)/stdint.in.h; \ @GL_GENERATE_STDINT_H_TRUE@ } > $@-t && \ @GL_GENERATE_STDINT_H_TRUE@ mv $@-t $@ @GL_GENERATE_STDINT_H_FALSE@stdint.h: $(top_builddir)/config.status @GL_GENERATE_STDINT_H_FALSE@ rm -f $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \ -e 's/@''GNULIB_DPRINTF''@/$(GNULIB_DPRINTF)/g' \ -e 's/@''GNULIB_FCLOSE''@/$(GNULIB_FCLOSE)/g' \ -e 's/@''GNULIB_FDOPEN''@/$(GNULIB_FDOPEN)/g' \ -e 's/@''GNULIB_FFLUSH''@/$(GNULIB_FFLUSH)/g' \ -e 's/@''GNULIB_FGETC''@/$(GNULIB_FGETC)/g' \ -e 's/@''GNULIB_FGETS''@/$(GNULIB_FGETS)/g' \ -e 's/@''GNULIB_FOPEN''@/$(GNULIB_FOPEN)/g' \ -e 's/@''GNULIB_FPRINTF''@/$(GNULIB_FPRINTF)/g' \ -e 's/@''GNULIB_FPRINTF_POSIX''@/$(GNULIB_FPRINTF_POSIX)/g' \ -e 's/@''GNULIB_FPURGE''@/$(GNULIB_FPURGE)/g' \ -e 's/@''GNULIB_FPUTC''@/$(GNULIB_FPUTC)/g' \ -e 's/@''GNULIB_FPUTS''@/$(GNULIB_FPUTS)/g' \ -e 's/@''GNULIB_FREAD''@/$(GNULIB_FREAD)/g' \ -e 's/@''GNULIB_FREOPEN''@/$(GNULIB_FREOPEN)/g' \ -e 's/@''GNULIB_FSCANF''@/$(GNULIB_FSCANF)/g' \ -e 's/@''GNULIB_FSEEK''@/$(GNULIB_FSEEK)/g' \ -e 's/@''GNULIB_FSEEKO''@/$(GNULIB_FSEEKO)/g' \ -e 's/@''GNULIB_FTELL''@/$(GNULIB_FTELL)/g' \ -e 's/@''GNULIB_FTELLO''@/$(GNULIB_FTELLO)/g' \ -e 's/@''GNULIB_FWRITE''@/$(GNULIB_FWRITE)/g' \ -e 's/@''GNULIB_GETC''@/$(GNULIB_GETC)/g' \ -e 's/@''GNULIB_GETCHAR''@/$(GNULIB_GETCHAR)/g' \ -e 's/@''GNULIB_GETDELIM''@/$(GNULIB_GETDELIM)/g' \ -e 's/@''GNULIB_GETLINE''@/$(GNULIB_GETLINE)/g' \ -e 's/@''GNULIB_OBSTACK_PRINTF''@/$(GNULIB_OBSTACK_PRINTF)/g' \ -e 's/@''GNULIB_OBSTACK_PRINTF_POSIX''@/$(GNULIB_OBSTACK_PRINTF_POSIX)/g' \ -e 's/@''GNULIB_PCLOSE''@/$(GNULIB_PCLOSE)/g' \ -e 's/@''GNULIB_PERROR''@/$(GNULIB_PERROR)/g' \ -e 's/@''GNULIB_POPEN''@/$(GNULIB_POPEN)/g' \ -e 's/@''GNULIB_PRINTF''@/$(GNULIB_PRINTF)/g' \ -e 's/@''GNULIB_PRINTF_POSIX''@/$(GNULIB_PRINTF_POSIX)/g' \ -e 's/@''GNULIB_PUTC''@/$(GNULIB_PUTC)/g' \ -e 's/@''GNULIB_PUTCHAR''@/$(GNULIB_PUTCHAR)/g' \ -e 's/@''GNULIB_PUTS''@/$(GNULIB_PUTS)/g' \ -e 's/@''GNULIB_REMOVE''@/$(GNULIB_REMOVE)/g' \ -e 's/@''GNULIB_RENAME''@/$(GNULIB_RENAME)/g' \ -e 's/@''GNULIB_RENAMEAT''@/$(GNULIB_RENAMEAT)/g' \ -e 's/@''GNULIB_SCANF''@/$(GNULIB_SCANF)/g' \ -e 's/@''GNULIB_SNPRINTF''@/$(GNULIB_SNPRINTF)/g' \ -e 's/@''GNULIB_SPRINTF_POSIX''@/$(GNULIB_SPRINTF_POSIX)/g' \ -e 's/@''GNULIB_STDIO_H_NONBLOCKING''@/$(GNULIB_STDIO_H_NONBLOCKING)/g' \ -e 's/@''GNULIB_STDIO_H_SIGPIPE''@/$(GNULIB_STDIO_H_SIGPIPE)/g' \ -e 's/@''GNULIB_TMPFILE''@/$(GNULIB_TMPFILE)/g' \ -e 's/@''GNULIB_VASPRINTF''@/$(GNULIB_VASPRINTF)/g' \ -e 's/@''GNULIB_VDPRINTF''@/$(GNULIB_VDPRINTF)/g' \ -e 's/@''GNULIB_VFPRINTF''@/$(GNULIB_VFPRINTF)/g' \ -e 's/@''GNULIB_VFPRINTF_POSIX''@/$(GNULIB_VFPRINTF_POSIX)/g' \ -e 's/@''GNULIB_VFSCANF''@/$(GNULIB_VFSCANF)/g' \ -e 's/@''GNULIB_VSCANF''@/$(GNULIB_VSCANF)/g' \ -e 's/@''GNULIB_VPRINTF''@/$(GNULIB_VPRINTF)/g' \ -e 's/@''GNULIB_VPRINTF_POSIX''@/$(GNULIB_VPRINTF_POSIX)/g' \ -e 's/@''GNULIB_VSNPRINTF''@/$(GNULIB_VSNPRINTF)/g' \ -e 's/@''GNULIB_VSPRINTF_POSIX''@/$(GNULIB_VSPRINTF_POSIX)/g' \ < $(srcdir)/stdio.in.h | \ sed -e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \ -e 's|@''HAVE_DECL_FSEEKO''@|$(HAVE_DECL_FSEEKO)|g' \ -e 's|@''HAVE_DECL_FTELLO''@|$(HAVE_DECL_FTELLO)|g' \ -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \ -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \ -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \ -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \ -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \ -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \ -e 's|@''HAVE_FSEEKO''@|$(HAVE_FSEEKO)|g' \ -e 's|@''HAVE_FTELLO''@|$(HAVE_FTELLO)|g' \ -e 's|@''HAVE_PCLOSE''@|$(HAVE_PCLOSE)|g' \ -e 's|@''HAVE_POPEN''@|$(HAVE_POPEN)|g' \ -e 's|@''HAVE_RENAMEAT''@|$(HAVE_RENAMEAT)|g' \ -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \ -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \ -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \ -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \ -e 's|@''REPLACE_FDOPEN''@|$(REPLACE_FDOPEN)|g' \ -e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \ -e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \ -e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \ -e 's|@''REPLACE_FPURGE''@|$(REPLACE_FPURGE)|g' \ -e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \ -e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \ -e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \ -e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \ -e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \ -e 's|@''REPLACE_GETDELIM''@|$(REPLACE_GETDELIM)|g' \ -e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \ -e 's|@''REPLACE_OBSTACK_PRINTF''@|$(REPLACE_OBSTACK_PRINTF)|g' \ -e 's|@''REPLACE_PERROR''@|$(REPLACE_PERROR)|g' \ -e 's|@''REPLACE_POPEN''@|$(REPLACE_POPEN)|g' \ -e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \ -e 's|@''REPLACE_REMOVE''@|$(REPLACE_REMOVE)|g' \ -e 's|@''REPLACE_RENAME''@|$(REPLACE_RENAME)|g' \ -e 's|@''REPLACE_RENAMEAT''@|$(REPLACE_RENAMEAT)|g' \ -e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \ -e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \ -e 's|@''REPLACE_STDIO_READ_FUNCS''@|$(REPLACE_STDIO_READ_FUNCS)|g' \ -e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \ -e 's|@''REPLACE_TMPFILE''@|$(REPLACE_TMPFILE)|g' \ -e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \ -e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \ -e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \ -e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \ -e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \ -e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \ -e 's|@''ASM_SYMBOL_PREFIX''@|$(ASM_SYMBOL_PREFIX)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ } > $@-t && \ mv $@-t $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \ $(_NORETURN_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \ -e 's/@''GNULIB__EXIT''@/$(GNULIB__EXIT)/g' \ -e 's/@''GNULIB_ATOLL''@/$(GNULIB_ATOLL)/g' \ -e 's/@''GNULIB_CALLOC_POSIX''@/$(GNULIB_CALLOC_POSIX)/g' \ -e 's/@''GNULIB_CANONICALIZE_FILE_NAME''@/$(GNULIB_CANONICALIZE_FILE_NAME)/g' \ -e 's/@''GNULIB_GETLOADAVG''@/$(GNULIB_GETLOADAVG)/g' \ -e 's/@''GNULIB_GETSUBOPT''@/$(GNULIB_GETSUBOPT)/g' \ -e 's/@''GNULIB_GRANTPT''@/$(GNULIB_GRANTPT)/g' \ -e 's/@''GNULIB_MALLOC_POSIX''@/$(GNULIB_MALLOC_POSIX)/g' \ -e 's/@''GNULIB_MBTOWC''@/$(GNULIB_MBTOWC)/g' \ -e 's/@''GNULIB_MKDTEMP''@/$(GNULIB_MKDTEMP)/g' \ -e 's/@''GNULIB_MKOSTEMP''@/$(GNULIB_MKOSTEMP)/g' \ -e 's/@''GNULIB_MKOSTEMPS''@/$(GNULIB_MKOSTEMPS)/g' \ -e 's/@''GNULIB_MKSTEMP''@/$(GNULIB_MKSTEMP)/g' \ -e 's/@''GNULIB_MKSTEMPS''@/$(GNULIB_MKSTEMPS)/g' \ -e 's/@''GNULIB_POSIX_OPENPT''@/$(GNULIB_POSIX_OPENPT)/g' \ -e 's/@''GNULIB_PTSNAME''@/$(GNULIB_PTSNAME)/g' \ -e 's/@''GNULIB_PTSNAME_R''@/$(GNULIB_PTSNAME_R)/g' \ -e 's/@''GNULIB_PUTENV''@/$(GNULIB_PUTENV)/g' \ -e 's/@''GNULIB_QSORT_R''@/$(GNULIB_QSORT_R)/g' \ -e 's/@''GNULIB_RANDOM''@/$(GNULIB_RANDOM)/g' \ -e 's/@''GNULIB_RANDOM_R''@/$(GNULIB_RANDOM_R)/g' \ -e 's/@''GNULIB_REALLOC_POSIX''@/$(GNULIB_REALLOC_POSIX)/g' \ -e 's/@''GNULIB_REALLOCARRAY''@/$(GNULIB_REALLOCARRAY)/g' \ -e 's/@''GNULIB_REALPATH''@/$(GNULIB_REALPATH)/g' \ -e 's/@''GNULIB_RPMATCH''@/$(GNULIB_RPMATCH)/g' \ -e 's/@''GNULIB_SECURE_GETENV''@/$(GNULIB_SECURE_GETENV)/g' \ -e 's/@''GNULIB_SETENV''@/$(GNULIB_SETENV)/g' \ -e 's/@''GNULIB_STRTOD''@/$(GNULIB_STRTOD)/g' \ -e 's/@''GNULIB_STRTOLD''@/$(GNULIB_STRTOLD)/g' \ -e 's/@''GNULIB_STRTOLL''@/$(GNULIB_STRTOLL)/g' \ -e 's/@''GNULIB_STRTOULL''@/$(GNULIB_STRTOULL)/g' \ -e 's/@''GNULIB_SYSTEM_POSIX''@/$(GNULIB_SYSTEM_POSIX)/g' \ -e 's/@''GNULIB_UNLOCKPT''@/$(GNULIB_UNLOCKPT)/g' \ -e 's/@''GNULIB_UNSETENV''@/$(GNULIB_UNSETENV)/g' \ -e 's/@''GNULIB_WCTOMB''@/$(GNULIB_WCTOMB)/g' \ < $(srcdir)/stdlib.in.h | \ sed -e 's|@''HAVE__EXIT''@|$(HAVE__EXIT)|g' \ -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \ -e 's|@''HAVE_CANONICALIZE_FILE_NAME''@|$(HAVE_CANONICALIZE_FILE_NAME)|g' \ -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \ -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \ -e 's|@''HAVE_GRANTPT''@|$(HAVE_GRANTPT)|g' \ -e 's|@''HAVE_INITSTATE''@|$(HAVE_INITSTATE)|g' \ -e 's|@''HAVE_DECL_INITSTATE''@|$(HAVE_DECL_INITSTATE)|g' \ -e 's|@''HAVE_MBTOWC''@|$(HAVE_MBTOWC)|g' \ -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \ -e 's|@''HAVE_MKOSTEMP''@|$(HAVE_MKOSTEMP)|g' \ -e 's|@''HAVE_MKOSTEMPS''@|$(HAVE_MKOSTEMPS)|g' \ -e 's|@''HAVE_MKSTEMP''@|$(HAVE_MKSTEMP)|g' \ -e 's|@''HAVE_MKSTEMPS''@|$(HAVE_MKSTEMPS)|g' \ -e 's|@''HAVE_POSIX_OPENPT''@|$(HAVE_POSIX_OPENPT)|g' \ -e 's|@''HAVE_PTSNAME''@|$(HAVE_PTSNAME)|g' \ -e 's|@''HAVE_PTSNAME_R''@|$(HAVE_PTSNAME_R)|g' \ -e 's|@''HAVE_QSORT_R''@|$(HAVE_QSORT_R)|g' \ -e 's|@''HAVE_RANDOM''@|$(HAVE_RANDOM)|g' \ -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \ -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \ -e 's|@''HAVE_REALLOCARRAY''@|$(HAVE_REALLOCARRAY)|g' \ -e 's|@''HAVE_REALPATH''@|$(HAVE_REALPATH)|g' \ -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \ -e 's|@''HAVE_SECURE_GETENV''@|$(HAVE_SECURE_GETENV)|g' \ -e 's|@''HAVE_DECL_SETENV''@|$(HAVE_DECL_SETENV)|g' \ -e 's|@''HAVE_SETSTATE''@|$(HAVE_SETSTATE)|g' \ -e 's|@''HAVE_DECL_SETSTATE''@|$(HAVE_DECL_SETSTATE)|g' \ -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \ -e 's|@''HAVE_STRTOLD''@|$(HAVE_STRTOLD)|g' \ -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \ -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \ -e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \ -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \ -e 's|@''HAVE_UNLOCKPT''@|$(HAVE_UNLOCKPT)|g' \ -e 's|@''HAVE_DECL_UNSETENV''@|$(HAVE_DECL_UNSETENV)|g' \ -e 's|@''REPLACE_CALLOC''@|$(REPLACE_CALLOC)|g' \ -e 's|@''REPLACE_CANONICALIZE_FILE_NAME''@|$(REPLACE_CANONICALIZE_FILE_NAME)|g' \ -e 's|@''REPLACE_INITSTATE''@|$(REPLACE_INITSTATE)|g' \ -e 's|@''REPLACE_MALLOC''@|$(REPLACE_MALLOC)|g' \ -e 's|@''REPLACE_MBTOWC''@|$(REPLACE_MBTOWC)|g' \ -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \ -e 's|@''REPLACE_PTSNAME''@|$(REPLACE_PTSNAME)|g' \ -e 's|@''REPLACE_PTSNAME_R''@|$(REPLACE_PTSNAME_R)|g' \ -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \ -e 's|@''REPLACE_QSORT_R''@|$(REPLACE_QSORT_R)|g' \ -e 's|@''REPLACE_RANDOM''@|$(REPLACE_RANDOM)|g' \ -e 's|@''REPLACE_RANDOM_R''@|$(REPLACE_RANDOM_R)|g' \ -e 's|@''REPLACE_REALLOC''@|$(REPLACE_REALLOC)|g' \ -e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \ -e 's|@''REPLACE_SETENV''@|$(REPLACE_SETENV)|g' \ -e 's|@''REPLACE_SETSTATE''@|$(REPLACE_SETSTATE)|g' \ -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \ -e 's|@''REPLACE_STRTOLD''@|$(REPLACE_STRTOLD)|g' \ -e 's|@''REPLACE_UNSETENV''@|$(REPLACE_UNSETENV)|g' \ -e 's|@''REPLACE_WCTOMB''@|$(REPLACE_WCTOMB)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _Noreturn/r $(_NORETURN_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ } > $@-t && \ mv $@-t $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \ -e 's/@''GNULIB_EXPLICIT_BZERO''@/$(GNULIB_EXPLICIT_BZERO)/g' \ -e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \ -e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/g' \ -e 's/@''GNULIB_MBSLEN''@/$(GNULIB_MBSLEN)/g' \ -e 's/@''GNULIB_MBSNLEN''@/$(GNULIB_MBSNLEN)/g' \ -e 's/@''GNULIB_MBSCHR''@/$(GNULIB_MBSCHR)/g' \ -e 's/@''GNULIB_MBSRCHR''@/$(GNULIB_MBSRCHR)/g' \ -e 's/@''GNULIB_MBSSTR''@/$(GNULIB_MBSSTR)/g' \ -e 's/@''GNULIB_MBSCASECMP''@/$(GNULIB_MBSCASECMP)/g' \ -e 's/@''GNULIB_MBSNCASECMP''@/$(GNULIB_MBSNCASECMP)/g' \ -e 's/@''GNULIB_MBSPCASECMP''@/$(GNULIB_MBSPCASECMP)/g' \ -e 's/@''GNULIB_MBSCASESTR''@/$(GNULIB_MBSCASESTR)/g' \ -e 's/@''GNULIB_MBSCSPN''@/$(GNULIB_MBSCSPN)/g' \ -e 's/@''GNULIB_MBSPBRK''@/$(GNULIB_MBSPBRK)/g' \ -e 's/@''GNULIB_MBSSPN''@/$(GNULIB_MBSSPN)/g' \ -e 's/@''GNULIB_MBSSEP''@/$(GNULIB_MBSSEP)/g' \ -e 's/@''GNULIB_MBSTOK_R''@/$(GNULIB_MBSTOK_R)/g' \ -e 's/@''GNULIB_MEMCHR''@/$(GNULIB_MEMCHR)/g' \ -e 's/@''GNULIB_MEMMEM''@/$(GNULIB_MEMMEM)/g' \ -e 's/@''GNULIB_MEMPCPY''@/$(GNULIB_MEMPCPY)/g' \ -e 's/@''GNULIB_MEMRCHR''@/$(GNULIB_MEMRCHR)/g' \ -e 's/@''GNULIB_RAWMEMCHR''@/$(GNULIB_RAWMEMCHR)/g' \ -e 's/@''GNULIB_STPCPY''@/$(GNULIB_STPCPY)/g' \ -e 's/@''GNULIB_STPNCPY''@/$(GNULIB_STPNCPY)/g' \ -e 's/@''GNULIB_STRCHRNUL''@/$(GNULIB_STRCHRNUL)/g' \ -e 's/@''GNULIB_STRDUP''@/$(GNULIB_STRDUP)/g' \ -e 's/@''GNULIB_STRNCAT''@/$(GNULIB_STRNCAT)/g' \ -e 's/@''GNULIB_STRNDUP''@/$(GNULIB_STRNDUP)/g' \ -e 's/@''GNULIB_STRNLEN''@/$(GNULIB_STRNLEN)/g' \ -e 's/@''GNULIB_STRPBRK''@/$(GNULIB_STRPBRK)/g' \ -e 's/@''GNULIB_STRSEP''@/$(GNULIB_STRSEP)/g' \ -e 's/@''GNULIB_STRSTR''@/$(GNULIB_STRSTR)/g' \ -e 's/@''GNULIB_STRCASESTR''@/$(GNULIB_STRCASESTR)/g' \ -e 's/@''GNULIB_STRTOK_R''@/$(GNULIB_STRTOK_R)/g' \ -e 's/@''GNULIB_STRERROR''@/$(GNULIB_STRERROR)/g' \ -e 's/@''GNULIB_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \ -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \ -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \ < $(srcdir)/string.in.h | \ sed -e 's|@''HAVE_EXPLICIT_BZERO''@|$(HAVE_EXPLICIT_BZERO)|g' \ -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \ -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \ -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \ -e 's|@''HAVE_MEMCHR''@|$(HAVE_MEMCHR)|g' \ -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \ -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \ -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \ -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \ -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \ -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \ -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \ -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \ -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \ -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \ -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \ -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \ -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \ -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \ -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \ -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \ -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \ -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \ -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \ -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \ -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \ -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \ -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \ -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \ -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \ -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \ -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \ -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ < $(srcdir)/string.in.h; \ } > $@-t && \ mv $@-t $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. sys/types.h: sys_types.in.h $(top_builddir)/config.status $(AM_V_at)$(MKDIR_P) sys $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ -e 's|@''WINDOWS_STAT_INODES''@|$(WINDOWS_STAT_INODES)|g' \ < $(srcdir)/sys_types.in.h; \ } > $@-t && \ mv $@-t $@ # We need the following in order to create an empty placeholder for # when the system doesn't have one. unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ -e 's/@''GNULIB_ACCESS''@/$(GNULIB_ACCESS)/g' \ -e 's/@''GNULIB_CHDIR''@/$(GNULIB_CHDIR)/g' \ -e 's/@''GNULIB_CHOWN''@/$(GNULIB_CHOWN)/g' \ -e 's/@''GNULIB_CLOSE''@/$(GNULIB_CLOSE)/g' \ -e 's/@''GNULIB_COPY_FILE_RANGE''@/$(GNULIB_COPY_FILE_RANGE)/g' \ -e 's/@''GNULIB_DUP''@/$(GNULIB_DUP)/g' \ -e 's/@''GNULIB_DUP2''@/$(GNULIB_DUP2)/g' \ -e 's/@''GNULIB_DUP3''@/$(GNULIB_DUP3)/g' \ -e 's/@''GNULIB_ENVIRON''@/$(GNULIB_ENVIRON)/g' \ -e 's/@''GNULIB_EUIDACCESS''@/$(GNULIB_EUIDACCESS)/g' \ -e 's/@''GNULIB_FACCESSAT''@/$(GNULIB_FACCESSAT)/g' \ -e 's/@''GNULIB_FCHDIR''@/$(GNULIB_FCHDIR)/g' \ -e 's/@''GNULIB_FCHOWNAT''@/$(GNULIB_FCHOWNAT)/g' \ -e 's/@''GNULIB_FDATASYNC''@/$(GNULIB_FDATASYNC)/g' \ -e 's/@''GNULIB_FSYNC''@/$(GNULIB_FSYNC)/g' \ -e 's/@''GNULIB_FTRUNCATE''@/$(GNULIB_FTRUNCATE)/g' \ -e 's/@''GNULIB_GETCWD''@/$(GNULIB_GETCWD)/g' \ -e 's/@''GNULIB_GETDOMAINNAME''@/$(GNULIB_GETDOMAINNAME)/g' \ -e 's/@''GNULIB_GETDTABLESIZE''@/$(GNULIB_GETDTABLESIZE)/g' \ -e 's/@''GNULIB_GETGROUPS''@/$(GNULIB_GETGROUPS)/g' \ -e 's/@''GNULIB_GETHOSTNAME''@/$(GNULIB_GETHOSTNAME)/g' \ -e 's/@''GNULIB_GETLOGIN''@/$(GNULIB_GETLOGIN)/g' \ -e 's/@''GNULIB_GETLOGIN_R''@/$(GNULIB_GETLOGIN_R)/g' \ -e 's/@''GNULIB_GETPAGESIZE''@/$(GNULIB_GETPAGESIZE)/g' \ -e 's/@''GNULIB_GETPASS''@/$(GNULIB_GETPASS)/g' \ -e 's/@''GNULIB_GETUSERSHELL''@/$(GNULIB_GETUSERSHELL)/g' \ -e 's/@''GNULIB_GROUP_MEMBER''@/$(GNULIB_GROUP_MEMBER)/g' \ -e 's/@''GNULIB_ISATTY''@/$(GNULIB_ISATTY)/g' \ -e 's/@''GNULIB_LCHOWN''@/$(GNULIB_LCHOWN)/g' \ -e 's/@''GNULIB_LINK''@/$(GNULIB_LINK)/g' \ -e 's/@''GNULIB_LINKAT''@/$(GNULIB_LINKAT)/g' \ -e 's/@''GNULIB_LSEEK''@/$(GNULIB_LSEEK)/g' \ -e 's/@''GNULIB_PIPE''@/$(GNULIB_PIPE)/g' \ -e 's/@''GNULIB_PIPE2''@/$(GNULIB_PIPE2)/g' \ -e 's/@''GNULIB_PREAD''@/$(GNULIB_PREAD)/g' \ -e 's/@''GNULIB_PWRITE''@/$(GNULIB_PWRITE)/g' \ -e 's/@''GNULIB_READ''@/$(GNULIB_READ)/g' \ -e 's/@''GNULIB_READLINK''@/$(GNULIB_READLINK)/g' \ -e 's/@''GNULIB_READLINKAT''@/$(GNULIB_READLINKAT)/g' \ -e 's/@''GNULIB_RMDIR''@/$(GNULIB_RMDIR)/g' \ -e 's/@''GNULIB_SETHOSTNAME''@/$(GNULIB_SETHOSTNAME)/g' \ -e 's/@''GNULIB_SLEEP''@/$(GNULIB_SLEEP)/g' \ -e 's/@''GNULIB_SYMLINK''@/$(GNULIB_SYMLINK)/g' \ -e 's/@''GNULIB_SYMLINKAT''@/$(GNULIB_SYMLINKAT)/g' \ -e 's/@''GNULIB_TRUNCATE''@/$(GNULIB_TRUNCATE)/g' \ -e 's/@''GNULIB_TTYNAME_R''@/$(GNULIB_TTYNAME_R)/g' \ -e 's/@''GNULIB_UNISTD_H_GETOPT''@/0$(GNULIB_GL_UNISTD_H_GETOPT)/g' \ -e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GNULIB_UNISTD_H_NONBLOCKING)/g' \ -e 's/@''GNULIB_UNISTD_H_SIGPIPE''@/$(GNULIB_UNISTD_H_SIGPIPE)/g' \ -e 's/@''GNULIB_UNLINK''@/$(GNULIB_UNLINK)/g' \ -e 's/@''GNULIB_UNLINKAT''@/$(GNULIB_UNLINKAT)/g' \ -e 's/@''GNULIB_USLEEP''@/$(GNULIB_USLEEP)/g' \ -e 's/@''GNULIB_WRITE''@/$(GNULIB_WRITE)/g' \ < $(srcdir)/unistd.in.h | \ sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \ -e 's|@''HAVE_COPY_FILE_RANGE''@|$(HAVE_COPY_FILE_RANGE)|g' \ -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \ -e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \ -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \ -e 's|@''HAVE_FACCESSAT''@|$(HAVE_FACCESSAT)|g' \ -e 's|@''HAVE_FCHDIR''@|$(HAVE_FCHDIR)|g' \ -e 's|@''HAVE_FCHOWNAT''@|$(HAVE_FCHOWNAT)|g' \ -e 's|@''HAVE_FDATASYNC''@|$(HAVE_FDATASYNC)|g' \ -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \ -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \ -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \ -e 's|@''HAVE_GETGROUPS''@|$(HAVE_GETGROUPS)|g' \ -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \ -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \ -e 's|@''HAVE_GETPASS''@|$(HAVE_GETPASS)|g' \ -e 's|@''HAVE_GROUP_MEMBER''@|$(HAVE_GROUP_MEMBER)|g' \ -e 's|@''HAVE_LCHOWN''@|$(HAVE_LCHOWN)|g' \ -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \ -e 's|@''HAVE_LINKAT''@|$(HAVE_LINKAT)|g' \ -e 's|@''HAVE_PIPE''@|$(HAVE_PIPE)|g' \ -e 's|@''HAVE_PIPE2''@|$(HAVE_PIPE2)|g' \ -e 's|@''HAVE_PREAD''@|$(HAVE_PREAD)|g' \ -e 's|@''HAVE_PWRITE''@|$(HAVE_PWRITE)|g' \ -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \ -e 's|@''HAVE_READLINKAT''@|$(HAVE_READLINKAT)|g' \ -e 's|@''HAVE_SETHOSTNAME''@|$(HAVE_SETHOSTNAME)|g' \ -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \ -e 's|@''HAVE_SYMLINK''@|$(HAVE_SYMLINK)|g' \ -e 's|@''HAVE_SYMLINKAT''@|$(HAVE_SYMLINKAT)|g' \ -e 's|@''HAVE_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \ -e 's|@''HAVE_USLEEP''@|$(HAVE_USLEEP)|g' \ -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \ -e 's|@''HAVE_DECL_FCHDIR''@|$(HAVE_DECL_FCHDIR)|g' \ -e 's|@''HAVE_DECL_FDATASYNC''@|$(HAVE_DECL_FDATASYNC)|g' \ -e 's|@''HAVE_DECL_GETDOMAINNAME''@|$(HAVE_DECL_GETDOMAINNAME)|g' \ -e 's|@''HAVE_DECL_GETLOGIN''@|$(HAVE_DECL_GETLOGIN)|g' \ -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \ -e 's|@''HAVE_DECL_GETPAGESIZE''@|$(HAVE_DECL_GETPAGESIZE)|g' \ -e 's|@''HAVE_DECL_GETUSERSHELL''@|$(HAVE_DECL_GETUSERSHELL)|g' \ -e 's|@''HAVE_DECL_SETHOSTNAME''@|$(HAVE_DECL_SETHOSTNAME)|g' \ -e 's|@''HAVE_DECL_TRUNCATE''@|$(HAVE_DECL_TRUNCATE)|g' \ -e 's|@''HAVE_DECL_TTYNAME_R''@|$(HAVE_DECL_TTYNAME_R)|g' \ -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \ -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \ | \ sed -e 's|@''REPLACE_ACCESS''@|$(REPLACE_ACCESS)|g' \ -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \ -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \ -e 's|@''REPLACE_DUP''@|$(REPLACE_DUP)|g' \ -e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \ -e 's|@''REPLACE_FACCESSAT''@|$(REPLACE_FACCESSAT)|g' \ -e 's|@''REPLACE_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \ -e 's|@''REPLACE_FTRUNCATE''@|$(REPLACE_FTRUNCATE)|g' \ -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \ -e 's|@''REPLACE_GETDOMAINNAME''@|$(REPLACE_GETDOMAINNAME)|g' \ -e 's|@''REPLACE_GETDTABLESIZE''@|$(REPLACE_GETDTABLESIZE)|g' \ -e 's|@''REPLACE_GETLOGIN_R''@|$(REPLACE_GETLOGIN_R)|g' \ -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \ -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \ -e 's|@''REPLACE_GETPASS''@|$(REPLACE_GETPASS)|g' \ -e 's|@''REPLACE_ISATTY''@|$(REPLACE_ISATTY)|g' \ -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \ -e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \ -e 's|@''REPLACE_LINKAT''@|$(REPLACE_LINKAT)|g' \ -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \ -e 's|@''REPLACE_PREAD''@|$(REPLACE_PREAD)|g' \ -e 's|@''REPLACE_PWRITE''@|$(REPLACE_PWRITE)|g' \ -e 's|@''REPLACE_READ''@|$(REPLACE_READ)|g' \ -e 's|@''REPLACE_READLINK''@|$(REPLACE_READLINK)|g' \ -e 's|@''REPLACE_READLINKAT''@|$(REPLACE_READLINKAT)|g' \ -e 's|@''REPLACE_RMDIR''@|$(REPLACE_RMDIR)|g' \ -e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \ -e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \ -e 's|@''REPLACE_SYMLINKAT''@|$(REPLACE_SYMLINKAT)|g' \ -e 's|@''REPLACE_TRUNCATE''@|$(REPLACE_TRUNCATE)|g' \ -e 's|@''REPLACE_TTYNAME_R''@|$(REPLACE_TTYNAME_R)|g' \ -e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \ -e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \ -e 's|@''REPLACE_USLEEP''@|$(REPLACE_USLEEP)|g' \ -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \ -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \ -e 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ } > $@-t && \ mv $@-t $@ mostlyclean-local: mostlyclean-generic @for dir in '' $(MOSTLYCLEANDIRS); do \ if test -n "$$dir" && test -d $$dir; then \ echo "rmdir $$dir"; rmdir $$dir; \ fi; \ done; \ : # 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. .NOEXPORT: make-4.3/lib/xmalloc.c0000644000175000017500000000640113611136472011574 00000000000000/* xmalloc.c -- malloc with out of memory checking Copyright (C) 1990-2000, 2002-2006, 2008-2020 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 the Free Software Foundation; either version 3 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, see . */ #include #define XALLOC_INLINE _GL_EXTERN_INLINE #include "xalloc.h" #include #include /* 1 if calloc is known to be compatible with GNU calloc. This matters if we are not also using the calloc module, which defines HAVE_CALLOC_GNU and supports the GNU API even on non-GNU platforms. */ #if defined HAVE_CALLOC_GNU || (defined __GLIBC__ && !defined __UCLIBC__) enum { HAVE_GNU_CALLOC = 1 }; #else enum { HAVE_GNU_CALLOC = 0 }; #endif /* Allocate N bytes of memory dynamically, with error checking. */ void * xmalloc (size_t n) { void *p = malloc (n); if (!p && n != 0) xalloc_die (); return p; } /* Change the size of an allocated block of memory P to N bytes, with error checking. */ void * xrealloc (void *p, size_t n) { if (!n && p) { /* The GNU and C99 realloc behaviors disagree here. Act like GNU, even if the underlying realloc is C99. */ free (p); return NULL; } p = realloc (p, n); if (!p && n) xalloc_die (); return p; } /* If P is null, allocate a block of at least *PN bytes; otherwise, reallocate P so that it contains more than *PN bytes. *PN must be nonzero unless P is null. Set *PN to the new block's size, and return the pointer to the new block. *PN is never set to zero, and the returned pointer is never null. */ void * x2realloc (void *p, size_t *pn) { return x2nrealloc (p, pn, 1); } /* Allocate N bytes of zeroed memory dynamically, with error checking. There's no need for xnzalloc (N, S), since it would be equivalent to xcalloc (N, S). */ void * xzalloc (size_t n) { return xcalloc (n, 1); } /* Allocate zeroed memory for N elements of S bytes, with error checking. S must be nonzero. */ void * xcalloc (size_t n, size_t s) { void *p; /* Test for overflow, since objects with size greater than PTRDIFF_MAX cause pointer subtraction to go awry. Omit size-zero tests if HAVE_GNU_CALLOC, since GNU calloc never returns NULL if successful. */ if (xalloc_oversized (n, s) || (! (p = calloc (n, s)) && (HAVE_GNU_CALLOC || n != 0))) xalloc_die (); return p; } /* Clone an object P of size S, with error checking. There's no need for xnmemdup (P, N, S), since xmemdup (P, N * S) works without any need for an arithmetic overflow check. */ void * xmemdup (void const *p, size_t s) { return memcpy (xmalloc (s), p, s); } /* Clone STRING. */ char * xstrdup (char const *string) { return xmemdup (string, strlen (string) + 1); } make-4.3/lib/xalloc.h0000644000175000017500000001705313611136472011431 00000000000000/* xalloc.h -- malloc with out-of-memory checking Copyright (C) 1990-2000, 2003-2004, 2006-2020 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 the Free Software Foundation; either version 3 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, see . */ #ifndef XALLOC_H_ #define XALLOC_H_ #include #include #include "xalloc-oversized.h" #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef XALLOC_INLINE # define XALLOC_INLINE _GL_INLINE #endif #ifdef __cplusplus extern "C" { #endif #if ! defined __clang__ && \ (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) # define _GL_ATTRIBUTE_ALLOC_SIZE(args) __attribute__ ((__alloc_size__ args)) #else # define _GL_ATTRIBUTE_ALLOC_SIZE(args) #endif /* This function is always triggered when memory is exhausted. It must be defined by the application, either explicitly or by using gnulib's xalloc-die module. This is the function to call when one wants the program to die because of a memory allocation failure. */ extern _Noreturn void xalloc_die (void); void *xmalloc (size_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((1)); void *xzalloc (size_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((1)); void *xcalloc (size_t n, size_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((1, 2)); void *xrealloc (void *p, size_t s) _GL_ATTRIBUTE_ALLOC_SIZE ((2)); void *x2realloc (void *p, size_t *pn); void *xmemdup (void const *p, size_t s) _GL_ATTRIBUTE_ALLOC_SIZE ((2)); char *xstrdup (char const *str) _GL_ATTRIBUTE_MALLOC; /* In the following macros, T must be an elementary or structure/union or typedef'ed type, or a pointer to such a type. To apply one of the following macros to a function pointer or array type, you need to typedef it first and use the typedef name. */ /* Allocate an object of type T dynamically, with error checking. */ /* extern t *XMALLOC (typename t); */ #define XMALLOC(t) ((t *) xmalloc (sizeof (t))) /* Allocate memory for N elements of type T, with error checking. */ /* extern t *XNMALLOC (size_t n, typename t); */ #define XNMALLOC(n, t) \ ((t *) (sizeof (t) == 1 ? xmalloc (n) : xnmalloc (n, sizeof (t)))) /* Allocate an object of type T dynamically, with error checking, and zero it. */ /* extern t *XZALLOC (typename t); */ #define XZALLOC(t) ((t *) xzalloc (sizeof (t))) /* Allocate memory for N elements of type T, with error checking, and zero it. */ /* extern t *XCALLOC (size_t n, typename t); */ #define XCALLOC(n, t) \ ((t *) (sizeof (t) == 1 ? xzalloc (n) : xcalloc (n, sizeof (t)))) /* Allocate an array of N objects, each with S bytes of memory, dynamically, with error checking. S must be nonzero. */ XALLOC_INLINE void *xnmalloc (size_t n, size_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((1, 2)); XALLOC_INLINE void * xnmalloc (size_t n, size_t s) { if (xalloc_oversized (n, s)) xalloc_die (); return xmalloc (n * s); } /* Change the size of an allocated block of memory P to an array of N objects each of S bytes, with error checking. S must be nonzero. */ XALLOC_INLINE void *xnrealloc (void *p, size_t n, size_t s) _GL_ATTRIBUTE_ALLOC_SIZE ((2, 3)); XALLOC_INLINE void * xnrealloc (void *p, size_t n, size_t s) { if (xalloc_oversized (n, s)) xalloc_die (); return xrealloc (p, n * s); } /* If P is null, allocate a block of at least *PN such objects; otherwise, reallocate P so that it contains more than *PN objects each of S bytes. S must be nonzero. Set *PN to the new number of objects, and return the pointer to the new block. *PN is never set to zero, and the returned pointer is never null. Repeated reallocations are guaranteed to make progress, either by allocating an initial block with a nonzero size, or by allocating a larger block. In the following implementation, nonzero sizes are increased by a factor of approximately 1.5 so that repeated reallocations have O(N) overall cost rather than O(N**2) cost, but the specification for this function does not guarantee that rate. Here is an example of use: int *p = NULL; size_t used = 0; size_t allocated = 0; void append_int (int value) { if (used == allocated) p = x2nrealloc (p, &allocated, sizeof *p); p[used++] = value; } This causes x2nrealloc to allocate a block of some nonzero size the first time it is called. To have finer-grained control over the initial size, set *PN to a nonzero value before calling this function with P == NULL. For example: int *p = NULL; size_t used = 0; size_t allocated = 0; size_t allocated1 = 1000; void append_int (int value) { if (used == allocated) { p = x2nrealloc (p, &allocated1, sizeof *p); allocated = allocated1; } p[used++] = value; } */ XALLOC_INLINE void * x2nrealloc (void *p, size_t *pn, size_t s) { size_t n = *pn; if (! p) { if (! n) { /* The approximate size to use for initial small allocation requests, when the invoking code specifies an old size of zero. This is the largest "small" request for the GNU C library malloc. */ enum { DEFAULT_MXFAST = 64 * sizeof (size_t) / 4 }; n = DEFAULT_MXFAST / s; n += !n; } if (xalloc_oversized (n, s)) xalloc_die (); } else { /* Set N = floor (1.5 * N) + 1 so that progress is made even if N == 0. Check for overflow, so that N * S stays in both ptrdiff_t and size_t range. The check may be slightly conservative, but an exact check isn't worth the trouble. */ if ((PTRDIFF_MAX < SIZE_MAX ? PTRDIFF_MAX : SIZE_MAX) / 3 * 2 / s <= n) xalloc_die (); n += n / 2 + 1; } *pn = n; return xrealloc (p, n * s); } /* Return a pointer to a new buffer of N bytes. This is like xmalloc, except it returns char *. */ XALLOC_INLINE char *xcharalloc (size_t n) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((1)); XALLOC_INLINE char * xcharalloc (size_t n) { return XNMALLOC (n, char); } #ifdef __cplusplus } /* C++ does not allow conversions from void * to other pointer types without a cast. Use templates to work around the problem when possible. */ template inline T * xrealloc (T *p, size_t s) { return (T *) xrealloc ((void *) p, s); } template inline T * xnrealloc (T *p, size_t n, size_t s) { return (T *) xnrealloc ((void *) p, n, s); } template inline T * x2realloc (T *p, size_t *pn) { return (T *) x2realloc ((void *) p, pn); } template inline T * x2nrealloc (T *p, size_t *pn, size_t s) { return (T *) x2nrealloc ((void *) p, pn, s); } template inline T * xmemdup (T const *p, size_t s) { return (T *) xmemdup ((void const *) p, s); } #endif _GL_INLINE_HEADER_END #endif /* !XALLOC_H_ */ make-4.3/lib/dosname.h0000644000175000017500000000367413611136471011600 00000000000000/* File names on MS-DOS/Windows systems. Copyright (C) 2000-2001, 2004-2006, 2009-2020 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 the Free Software Foundation; either version 3 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, see . From Paul Eggert and Jim Meyering. */ #ifndef _DOSNAME_H #define _DOSNAME_H #if (defined _WIN32 || defined __CYGWIN__ \ || defined __EMX__ || defined __MSDOS__ || defined __DJGPP__) /* This internal macro assumes ASCII, but all hosts that support drive letters use ASCII. */ # define _IS_DRIVE_LETTER(C) (((unsigned int) (C) | ('a' - 'A')) - 'a' \ <= 'z' - 'a') # define FILE_SYSTEM_PREFIX_LEN(Filename) \ (_IS_DRIVE_LETTER ((Filename)[0]) && (Filename)[1] == ':' ? 2 : 0) # ifndef __CYGWIN__ # define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 1 # endif # define ISSLASH(C) ((C) == '/' || (C) == '\\') #else # define FILE_SYSTEM_PREFIX_LEN(Filename) 0 # define ISSLASH(C) ((C) == '/') #endif #ifndef FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE # define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 #endif #if FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE # define IS_ABSOLUTE_FILE_NAME(F) ISSLASH ((F)[FILE_SYSTEM_PREFIX_LEN (F)]) # else # define IS_ABSOLUTE_FILE_NAME(F) \ (ISSLASH ((F)[0]) || FILE_SYSTEM_PREFIX_LEN (F) != 0) #endif #define IS_RELATIVE_FILE_NAME(F) (! IS_ABSOLUTE_FILE_NAME (F)) #endif /* DOSNAME_H_ */ make-4.3/lib/_Noreturn.h0000644000175000017500000000352013611136471012113 00000000000000/* A C macro for declaring that a function does not return. Copyright (C) 2011-2020 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 the Free Software Foundation; either version 3 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, see . */ #ifndef _Noreturn # if (defined __cplusplus \ && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \ || (defined _MSC_VER && 1900 <= _MSC_VER)) \ && 0) /* [[noreturn]] is not practically usable, because with it the syntax extern _Noreturn void func (...); would not be valid; such a declaration would only be valid with 'extern' and '_Noreturn' swapped, or without the 'extern' keyword. However, some AIX system header files and several gnulib header files use precisely this syntax with 'extern'. */ # define _Noreturn [[noreturn]] # elif ((!defined __cplusplus || defined __clang__) \ && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ || 4 < __GNUC__ + (7 <= __GNUC_MINOR__))) /* _Noreturn works as-is. */ # elif 2 < __GNUC__ + (8 <= __GNUC_MINOR__) || 0x5110 <= __SUNPRO_C # define _Noreturn __attribute__ ((__noreturn__)) # elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0) # define _Noreturn __declspec (noreturn) # else # define _Noreturn # endif #endif make-4.3/lib/findprog.h0000644000175000017500000000562013611136471011753 00000000000000/* Locating a program in PATH. Copyright (C) 2001-2003, 2009-2020 Free Software Foundation, Inc. Written by Bruno Haible , 2001. 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 3 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, see . */ #ifndef _FINDPROG_H #define _FINDPROG_H #include #ifdef __cplusplus extern "C" { #endif /* Looks up a program in the PATH. Attempts to determine the pathname that would be called by execlp/execvp of PROGNAME. If successful, it returns a pathname containing a slash (either absolute or relative to the current directory). Otherwise, it returns PROGNAME unmodified. Because of the latter case, callers should use execlp/execvp, not execl/execv on the returned pathname. The returned string is freshly malloc()ed if it is != PROGNAME. */ extern const char *find_in_path (const char *progname); /* Looks up a program in the given PATH-like string. The PATH argument consists of a list of directories, separated by ':' or (on native Windows) by ';'. An empty PATH element designates the current directory. A null PATH is equivalent to an empty PATH, that is, to the singleton list that contains only the current directory. Determines the pathname that would be called by execlp/execvp of PROGNAME. - If successful, it returns a pathname containing a slash (either absolute or relative to the current directory). The returned string can be used with either execl/execv or execlp/execvp. It is freshly malloc()ed if it is != PROGNAME. - Otherwise, it sets errno and returns NULL. Specific errno values include: - ENOENT: means that the program's file was not found. - EACCES: means that the program's file cannot be accessed (due to some issue with one of the ancestor directories) or lacks the execute permissions. If OPTIMIZE_FOR_EXEC is true, the function saves some work, under the assumption that the resulting pathname will not be accessed directly, only through execl/execv or execlp/execvp. Here, a "slash" means: - On POSIX systems excluding Cygwin: a '/', - On Windows, OS/2, DOS platforms: a '/' or '\'. */ extern const char *find_in_given_path (const char *progname, const char *path, bool optimize_for_exec); #ifdef __cplusplus } #endif #endif /* _FINDPROG_H */ make-4.3/lib/fd-hook.c0000644000175000017500000000700413611136471011463 00000000000000/* Hook for making file descriptor functions close(), ioctl() extensible. Copyright (C) 2009-2020 Free Software Foundation, Inc. Written by Bruno Haible , 2009. 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 3 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, see . */ #include /* Specification. */ #include "fd-hook.h" #include /* Currently, this entire code is only needed for the handling of sockets on native Windows platforms. */ #if WINDOWS_SOCKETS /* The first and last link in the doubly linked list. Initially the list is empty. */ static struct fd_hook anchor = { &anchor, &anchor, NULL, NULL }; int execute_close_hooks (const struct fd_hook *remaining_list, gl_close_fn primary, int fd) { if (remaining_list == &anchor) /* End of list reached. */ return primary (fd); else return remaining_list->private_close_fn (remaining_list->private_next, primary, fd); } int execute_all_close_hooks (gl_close_fn primary, int fd) { return execute_close_hooks (anchor.private_next, primary, fd); } int execute_ioctl_hooks (const struct fd_hook *remaining_list, gl_ioctl_fn primary, int fd, int request, void *arg) { if (remaining_list == &anchor) /* End of list reached. */ return primary (fd, request, arg); else return remaining_list->private_ioctl_fn (remaining_list->private_next, primary, fd, request, arg); } int execute_all_ioctl_hooks (gl_ioctl_fn primary, int fd, int request, void *arg) { return execute_ioctl_hooks (anchor.private_next, primary, fd, request, arg); } void register_fd_hook (close_hook_fn close_hook, ioctl_hook_fn ioctl_hook, struct fd_hook *link) { if (close_hook == NULL) close_hook = execute_close_hooks; if (ioctl_hook == NULL) ioctl_hook = execute_ioctl_hooks; if (link->private_next == NULL && link->private_prev == NULL) { /* Add the link to the doubly linked list. */ link->private_next = anchor.private_next; link->private_prev = &anchor; link->private_close_fn = close_hook; link->private_ioctl_fn = ioctl_hook; anchor.private_next->private_prev = link; anchor.private_next = link; } else { /* The link is already in use. */ if (link->private_close_fn != close_hook || link->private_ioctl_fn != ioctl_hook) abort (); } } void unregister_fd_hook (struct fd_hook *link) { struct fd_hook *next = link->private_next; struct fd_hook *prev = link->private_prev; if (next != NULL && prev != NULL) { /* The link is in use. Remove it from the doubly linked list. */ prev->private_next = next; next->private_prev = prev; /* Clear the link, to mark it unused. */ link->private_next = NULL; link->private_prev = NULL; link->private_close_fn = NULL; link->private_ioctl_fn = NULL; } } #endif make-4.3/lib/stdbool.in.h0000644000175000017500000001175013611136472012220 00000000000000/* Copyright (C) 2001-2003, 2006-2020 Free Software Foundation, Inc. Written by Bruno Haible , 2001. 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 3, 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, see . */ #ifndef _GL_STDBOOL_H #define _GL_STDBOOL_H /* ISO C 99 for platforms that lack it. */ /* Usage suggestions: Programs that use should be aware of some limitations and standards compliance issues. Standards compliance: - must be #included before 'bool', 'false', 'true' can be used. - You cannot assume that sizeof (bool) == 1. - Programs should not undefine the macros bool, true, and false, as C99 lists that as an "obsolescent feature". Limitations of this substitute, when used in a C89 environment: - must be #included before the '_Bool' type can be used. - You cannot assume that _Bool is a typedef; it might be a macro. - Bit-fields of type 'bool' are not supported. Portable code should use 'unsigned int foo : 1;' rather than 'bool foo : 1;'. - In C99, casts and automatic conversions to '_Bool' or 'bool' are performed in such a way that every nonzero value gets converted to 'true', and zero gets converted to 'false'. This doesn't work with this substitute. With this substitute, only the values 0 and 1 give the expected result when converted to _Bool' or 'bool'. - C99 allows the use of (_Bool)0.0 in constant expressions, but this substitute cannot always provide this property. Also, it is suggested that programs use 'bool' rather than '_Bool'; this isn't required, but 'bool' is more common. */ /* 7.16. Boolean type and values */ /* BeOS already #defines false 0, true 1. We use the same definitions below, but temporarily we have to #undef them. */ #if defined __BEOS__ && !defined __HAIKU__ # include /* defines bool but not _Bool */ # undef false # undef true #endif #ifdef __cplusplus # define _Bool bool # define bool bool #else # if defined __BEOS__ && !defined __HAIKU__ /* A compiler known to have 'bool'. */ /* If the compiler already has both 'bool' and '_Bool', we can assume they are the same types. */ # if !@HAVE__BOOL@ typedef bool _Bool; # endif # else # if !defined __GNUC__ /* If @HAVE__BOOL@: Some HP-UX cc and AIX IBM C compiler versions have compiler bugs when the built-in _Bool type is used. See https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html https://lists.gnu.org/r/bug-coreutils/2005-11/msg00161.html https://lists.gnu.org/r/bug-coreutils/2005-10/msg00086.html Similar bugs are likely with other compilers as well; this file wouldn't be used if was working. So we override the _Bool type. If !@HAVE__BOOL@: Need to define _Bool ourselves. As 'signed char' or as an enum type? Use of a typedef, with SunPRO C, leads to a stupid "warning: _Bool is a keyword in ISO C99". Use of an enum type, with IRIX cc, leads to a stupid "warning(1185): enumerated type mixed with another type". Even the existence of an enum type, without a typedef, "Invalid enumerator. (badenum)" with HP-UX cc on Tru64. The only benefit of the enum, debuggability, is not important with these compilers. So use 'signed char' and no enum. */ # define _Bool signed char # else /* With this compiler, trust the _Bool type if the compiler has it. */ # if !@HAVE__BOOL@ /* For the sake of symbolic names in gdb, define true and false as enum constants, not only as macros. It is tempting to write typedef enum { false = 0, true = 1 } _Bool; so that gdb prints values of type 'bool' symbolically. But then values of type '_Bool' might promote to 'int' or 'unsigned int' (see ISO C 99 6.7.2.2.(4)); however, '_Bool' must promote to 'int' (see ISO C 99 6.3.1.1.(2)). So add a negative value to the enum; this ensures that '_Bool' promotes to 'int'. */ typedef enum { _Bool_must_promote_to_int = -1, false = 0, true = 1 } _Bool; # endif # endif # endif # define bool _Bool #endif /* The other macros must be usable in preprocessor directives. */ #ifdef __cplusplus # define false false # define true true #else # define false 0 # define true 1 #endif #define __bool_true_false_are_defined 1 #endif /* _GL_STDBOOL_H */ make-4.3/lib/msvc-inval.h0000644000175000017500000002116513611136472012225 00000000000000/* Invalid parameter handler for MSVC runtime libraries. Copyright (C) 2011-2020 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 the Free Software Foundation; either version 3, 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, see . */ #ifndef _MSVC_INVAL_H #define _MSVC_INVAL_H /* With MSVC runtime libraries with the "invalid parameter handler" concept, functions like fprintf(), dup2(), or close() crash when the caller passes an invalid argument. But POSIX wants error codes (such as EINVAL or EBADF) instead. This file defines macros that turn such an invalid parameter notification into a non-local exit. An error code can then be produced at the target of this exit. You can thus write code like TRY_MSVC_INVAL { } CATCH_MSVC_INVAL { } DONE_MSVC_INVAL; This entire block expands to a single statement. The handling of invalid parameters can be done in three ways: * The default way, which is reasonable for programs (not libraries): AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [DEFAULT_HANDLING]) * The way for libraries that make "hairy" calls (like close(-1), or fclose(fp) where fileno(fp) is closed, or simply getdtablesize()): AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [HAIRY_LIBRARY_HANDLING]) * The way for libraries that make no "hairy" calls: AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [SANE_LIBRARY_HANDLING]) */ #define DEFAULT_HANDLING 0 #define HAIRY_LIBRARY_HANDLING 1 #define SANE_LIBRARY_HANDLING 2 #if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ && !(MSVC_INVALID_PARAMETER_HANDLING == SANE_LIBRARY_HANDLING) /* A native Windows platform with the "invalid parameter handler" concept, and either DEFAULT_HANDLING or HAIRY_LIBRARY_HANDLING. */ # if MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING /* Default handling. */ # ifdef __cplusplus extern "C" { # endif /* Ensure that the invalid parameter handler in installed that just returns. Because we assume no other part of the program installs a different invalid parameter handler, this solution is multithread-safe. */ extern void gl_msvc_inval_ensure_handler (void); # ifdef __cplusplus } # endif # define TRY_MSVC_INVAL \ do \ { \ gl_msvc_inval_ensure_handler (); \ if (1) # define CATCH_MSVC_INVAL \ else # define DONE_MSVC_INVAL \ } \ while (0) # else /* Handling for hairy libraries. */ # include /* Gnulib can define its own status codes, as described in the page "Raising Software Exceptions" on microsoft.com . Our status codes are composed of - 0xE0000000, mandatory for all user-defined status codes, - 0x474E550, a API identifier ("GNU"), - 0, 1, 2, ..., used to distinguish different status codes from the same API. */ # define STATUS_GNULIB_INVALID_PARAMETER (0xE0000000 + 0x474E550 + 0) # if defined _MSC_VER /* A compiler that supports __try/__except, as described in the page "try-except statement" on microsoft.com . With __try/__except, we can use the multithread-safe exception handling. */ # ifdef __cplusplus extern "C" { # endif /* Ensure that the invalid parameter handler in installed that raises a software exception with code STATUS_GNULIB_INVALID_PARAMETER. Because we assume no other part of the program installs a different invalid parameter handler, this solution is multithread-safe. */ extern void gl_msvc_inval_ensure_handler (void); # ifdef __cplusplus } # endif # define TRY_MSVC_INVAL \ do \ { \ gl_msvc_inval_ensure_handler (); \ __try # define CATCH_MSVC_INVAL \ __except (GetExceptionCode () == STATUS_GNULIB_INVALID_PARAMETER \ ? EXCEPTION_EXECUTE_HANDLER \ : EXCEPTION_CONTINUE_SEARCH) # define DONE_MSVC_INVAL \ } \ while (0) # else /* Any compiler. We can only use setjmp/longjmp. */ # include # ifdef __cplusplus extern "C" { # endif struct gl_msvc_inval_per_thread { /* The restart that will resume execution at the code between CATCH_MSVC_INVAL and DONE_MSVC_INVAL. It is enabled only between TRY_MSVC_INVAL and CATCH_MSVC_INVAL. */ jmp_buf restart; /* Tells whether the contents of restart is valid. */ int restart_valid; }; /* Ensure that the invalid parameter handler in installed that passes control to the gl_msvc_inval_restart if it is valid, or raises a software exception with code STATUS_GNULIB_INVALID_PARAMETER otherwise. Because we assume no other part of the program installs a different invalid parameter handler, this solution is multithread-safe. */ extern void gl_msvc_inval_ensure_handler (void); /* Return a pointer to the per-thread data for the current thread. */ extern struct gl_msvc_inval_per_thread *gl_msvc_inval_current (void); # ifdef __cplusplus } # endif # define TRY_MSVC_INVAL \ do \ { \ struct gl_msvc_inval_per_thread *msvc_inval_current; \ gl_msvc_inval_ensure_handler (); \ msvc_inval_current = gl_msvc_inval_current (); \ /* First, initialize gl_msvc_inval_restart. */ \ if (setjmp (msvc_inval_current->restart) == 0) \ { \ /* Then, mark it as valid. */ \ msvc_inval_current->restart_valid = 1; # define CATCH_MSVC_INVAL \ /* Execution completed. \ Mark gl_msvc_inval_restart as invalid. */ \ msvc_inval_current->restart_valid = 0; \ } \ else \ { \ /* Execution triggered an invalid parameter notification. \ Mark gl_msvc_inval_restart as invalid. */ \ msvc_inval_current->restart_valid = 0; # define DONE_MSVC_INVAL \ } \ } \ while (0) # endif # endif #else /* A platform that does not need to the invalid parameter handler, or when SANE_LIBRARY_HANDLING is desired. */ /* The braces here avoid GCC warnings like "warning: suggest explicit braces to avoid ambiguous 'else'". */ # define TRY_MSVC_INVAL \ do \ { \ if (1) # define CATCH_MSVC_INVAL \ else # define DONE_MSVC_INVAL \ } \ while (0) #endif #endif /* _MSVC_INVAL_H */ make-4.3/lib/verify.h0000644000175000017500000002711113611136472011447 00000000000000/* Compile-time assert-like macros. Copyright (C) 2005-2006, 2009-2020 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 the Free Software Foundation; either version 3 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, see . */ /* Written by Paul Eggert, Bruno Haible, and Jim Meyering. */ #ifndef _GL_VERIFY_H #define _GL_VERIFY_H /* Define _GL_HAVE__STATIC_ASSERT to 1 if _Static_assert (R, DIAGNOSTIC) works as per C11. This is supported by GCC 4.6.0 and later, in C mode. Define _GL_HAVE__STATIC_ASSERT1 to 1 if _Static_assert (R) works as per C2X, and define _GL_HAVE_STATIC_ASSERT1 if static_assert (R) works as per C++17. This is supported by GCC 9.1 and later. Support compilers claiming conformance to the relevant standard, and also support GCC when not pedantic. If we were willing to slow 'configure' down we could also use it with other compilers, but since this affects only the quality of diagnostics, why bother? */ #ifndef __cplusplus # if (201112L <= __STDC_VERSION__ \ || (!defined __STRICT_ANSI__ && 4 < __GNUC__ + (6 <= __GNUC_MINOR__))) # define _GL_HAVE__STATIC_ASSERT 1 # endif # if (202000L <= __STDC_VERSION__ \ || (!defined __STRICT_ANSI__ && 9 <= __GNUC__)) # define _GL_HAVE__STATIC_ASSERT1 1 # endif #else # if 201703L <= __cplusplus || 9 <= __GNUC__ # define _GL_HAVE_STATIC_ASSERT1 1 # endif #endif /* FreeBSD 9.1 , included by and lots of other system headers, defines a conflicting _Static_assert that is no better than ours; override it. */ #ifndef _GL_HAVE__STATIC_ASSERT # include # undef _Static_assert #endif /* Each of these macros verifies that its argument R is nonzero. To be portable, R should be an integer constant expression. Unlike assert (R), there is no run-time overhead. If _Static_assert works, verify (R) uses it directly. Similarly, _GL_VERIFY_TRUE works by packaging a _Static_assert inside a struct that is an operand of sizeof. The code below uses several ideas for C++ compilers, and for C compilers that do not support _Static_assert: * The first step is ((R) ? 1 : -1). Given an expression R, of integral or boolean or floating-point type, this yields an expression of integral type, whose value is later verified to be constant and nonnegative. * Next this expression W is wrapped in a type struct _gl_verify_type { unsigned int _gl_verify_error_if_negative: W; }. If W is negative, this yields a compile-time error. No compiler can deal with a bit-field of negative size. One might think that an array size check would have the same effect, that is, that the type struct { unsigned int dummy[W]; } would work as well. However, inside a function, some compilers (such as C++ compilers and GNU C) allow local parameters and variables inside array size expressions. With these compilers, an array size check would not properly diagnose this misuse of the verify macro: void function (int n) { verify (n < 0); } * For the verify macro, the struct _gl_verify_type will need to somehow be embedded into a declaration. To be portable, this declaration must declare an object, a constant, a function, or a typedef name. If the declared entity uses the type directly, such as in struct dummy {...}; typedef struct {...} dummy; extern struct {...} *dummy; extern void dummy (struct {...} *); extern struct {...} *dummy (void); two uses of the verify macro would yield colliding declarations if the entity names are not disambiguated. A workaround is to attach the current line number to the entity name: #define _GL_CONCAT0(x, y) x##y #define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) extern struct {...} * _GL_CONCAT (dummy, __LINE__); But this has the problem that two invocations of verify from within the same macro would collide, since the __LINE__ value would be the same for both invocations. (The GCC __COUNTER__ macro solves this problem, but is not portable.) A solution is to use the sizeof operator. It yields a number, getting rid of the identity of the type. Declarations like extern int dummy [sizeof (struct {...})]; extern void dummy (int [sizeof (struct {...})]); extern int (*dummy (void)) [sizeof (struct {...})]; can be repeated. * Should the implementation use a named struct or an unnamed struct? Which of the following alternatives can be used? extern int dummy [sizeof (struct {...})]; extern int dummy [sizeof (struct _gl_verify_type {...})]; extern void dummy (int [sizeof (struct {...})]); extern void dummy (int [sizeof (struct _gl_verify_type {...})]); extern int (*dummy (void)) [sizeof (struct {...})]; extern int (*dummy (void)) [sizeof (struct _gl_verify_type {...})]; In the second and sixth case, the struct type is exported to the outer scope; two such declarations therefore collide. GCC warns about the first, third, and fourth cases. So the only remaining possibility is the fifth case: extern int (*dummy (void)) [sizeof (struct {...})]; * GCC warns about duplicate declarations of the dummy function if -Wredundant-decls is used. GCC 4.3 and later have a builtin __COUNTER__ macro that can let us generate unique identifiers for each dummy function, to suppress this warning. * This implementation exploits the fact that older versions of GCC, which do not support _Static_assert, also do not warn about the last declaration mentioned above. * GCC warns if -Wnested-externs is enabled and 'verify' is used within a function body; but inside a function, you can always arrange to use verify_expr instead. * In C++, any struct definition inside sizeof is invalid. Use a template type to work around the problem. */ /* Concatenate two preprocessor tokens. */ #define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) #define _GL_CONCAT0(x, y) x##y /* _GL_COUNTER is an integer, preferably one that changes each time we use it. Use __COUNTER__ if it works, falling back on __LINE__ otherwise. __LINE__ isn't perfect, but it's better than a constant. */ #if defined __COUNTER__ && __COUNTER__ != __COUNTER__ # define _GL_COUNTER __COUNTER__ #else # define _GL_COUNTER __LINE__ #endif /* Generate a symbol with the given prefix, making it unique if possible. */ #define _GL_GENSYM(prefix) _GL_CONCAT (prefix, _GL_COUNTER) /* Verify requirement R at compile-time, as an integer constant expression that returns 1. If R is false, fail at compile-time, preferably with a diagnostic that includes the string-literal DIAGNOSTIC. */ #define _GL_VERIFY_TRUE(R, DIAGNOSTIC) \ (!!sizeof (_GL_VERIFY_TYPE (R, DIAGNOSTIC))) #ifdef __cplusplus # if !GNULIB_defined_struct__gl_verify_type template struct _gl_verify_type { unsigned int _gl_verify_error_if_negative: w; }; # define GNULIB_defined_struct__gl_verify_type 1 # endif # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ _gl_verify_type<(R) ? 1 : -1> #elif defined _GL_HAVE__STATIC_ASSERT # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ struct { \ _Static_assert (R, DIAGNOSTIC); \ int _gl_dummy; \ } #else # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ struct { unsigned int _gl_verify_error_if_negative: (R) ? 1 : -1; } #endif /* Verify requirement R at compile-time, as a declaration without a trailing ';'. If R is false, fail at compile-time. This macro requires three or more arguments but uses at most the first two, so that the _Static_assert macro optionally defined below supports both the C11 two-argument syntax and the C2X one-argument syntax. Unfortunately, unlike C11, this implementation must appear as an ordinary declaration, and cannot appear inside struct { ... }. */ #if defined _GL_HAVE__STATIC_ASSERT # define _GL_VERIFY(R, DIAGNOSTIC, ...) _Static_assert (R, DIAGNOSTIC) #else # define _GL_VERIFY(R, DIAGNOSTIC, ...) \ extern int (*_GL_GENSYM (_gl_verify_function) (void)) \ [_GL_VERIFY_TRUE (R, DIAGNOSTIC)] #endif /* _GL_STATIC_ASSERT_H is defined if this code is copied into assert.h. */ #ifdef _GL_STATIC_ASSERT_H # if !defined _GL_HAVE__STATIC_ASSERT1 && !defined _Static_assert # define _Static_assert(...) \ _GL_VERIFY (__VA_ARGS__, "static assertion failed", -) # endif # if !defined _GL_HAVE_STATIC_ASSERT1 && !defined static_assert # define static_assert _Static_assert /* C11 requires this #define. */ # endif #endif /* @assert.h omit start@ */ #if 3 < __GNUC__ + (3 < __GNUC_MINOR__ + (4 <= __GNUC_PATCHLEVEL__)) # define _GL_HAS_BUILTIN_TRAP 1 #elif defined __has_builtin # define _GL_HAS_BUILTIN_TRAP __has_builtin (__builtin_trap) #else # define _GL_HAS_BUILTIN_TRAP 0 #endif #if 4 < __GNUC__ + (5 <= __GNUC_MINOR__) # define _GL_HAS_BUILTIN_UNREACHABLE 1 #elif defined __has_builtin # define _GL_HAS_BUILTIN_UNREACHABLE __has_builtin (__builtin_unreachable) #else # define _GL_HAS_BUILTIN_UNREACHABLE 0 #endif /* Each of these macros verifies that its argument R is nonzero. To be portable, R should be an integer constant expression. Unlike assert (R), there is no run-time overhead. There are two macros, since no single macro can be used in all contexts in C. verify_expr (R, E) is for scalar contexts, including integer constant expression contexts. verify (R) is for declaration contexts, e.g., the top level. */ /* Verify requirement R at compile-time. Return the value of the expression E. */ #define verify_expr(R, E) \ (_GL_VERIFY_TRUE (R, "verify_expr (" #R ", " #E ")") ? (E) : (E)) /* Verify requirement R at compile-time, as a declaration without a trailing ';'. verify (R) acts like static_assert (R) except that it is portable to C11/C++14 and earlier, it can issue better diagnostics, and its name is shorter and may be more convenient. */ #ifdef __PGI /* PGI barfs if R is long. */ # define verify(R) _GL_VERIFY (R, "verify (...)", -) #else # define verify(R) _GL_VERIFY (R, "verify (" #R ")", -) #endif /* Assume that R always holds. Behavior is undefined if R is false, fails to evaluate, or has side effects. Although assuming R can help a compiler generate better code or diagnostics, performance can suffer if R uses hard-to-optimize features such as function calls not inlined by the compiler. */ #if _GL_HAS_BUILTIN_UNREACHABLE # define assume(R) ((R) ? (void) 0 : __builtin_unreachable ()) #elif 1200 <= _MSC_VER # define assume(R) __assume (R) #elif (defined GCC_LINT || defined lint) && _GL_HAS_BUILTIN_TRAP /* Doing it this way helps various packages when configured with --enable-gcc-warnings, which compiles with -Dlint. It's nicer when 'assume' silences warnings even with older GCCs. */ # define assume(R) ((R) ? (void) 0 : __builtin_trap ()) #else /* Some tools grok NOTREACHED, e.g., Oracle Studio 12.6. */ # define assume(R) ((R) ? (void) 0 : /*NOTREACHED*/ (void) 0) #endif /* @assert.h omit end@ */ #endif make-4.3/lib/fnmatch.in.h0000644000175000017500000000556313603564437012206 00000000000000/* Copyright (C) 1991, 1992, 1993, 1996, 1997, 1998, 1999 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. The GNU C Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _FNMATCH_H #define _FNMATCH_H 1 #ifdef __cplusplus extern "C" { #endif #if defined __cplusplus || (defined __STDC__ && __STDC__) || defined WINDOWS32 # if !defined __GLIBC__ # undef __P # define __P(protos) protos # endif #else /* Not C++ or ANSI C. */ # undef __P # define __P(protos) () /* We can get away without defining `const' here only because in this file it is used only inside the prototype for `fnmatch', which is elided in non-ANSI C where `const' is problematical. */ #endif /* C++ or ANSI C. */ #ifndef const # if (defined __STDC__ && __STDC__) || defined __cplusplus || defined WINDOWS32 # define __const const # else # define __const # endif #endif /* We #undef these before defining them because some losing systems (HP-UX A.08.07 for example) define these in . */ #undef FNM_PATHNAME #undef FNM_NOESCAPE #undef FNM_PERIOD /* Bits set in the FLAGS argument to `fnmatch'. */ #define FNM_PATHNAME (1 << 0) /* No wildcard can ever match `/'. */ #define FNM_NOESCAPE (1 << 1) /* Backslashes don't quote special chars. */ #define FNM_PERIOD (1 << 2) /* Leading `.' is matched only explicitly. */ #if !defined _POSIX_C_SOURCE || _POSIX_C_SOURCE < 2 || defined _GNU_SOURCE # define FNM_FILE_NAME FNM_PATHNAME /* Preferred GNU name. */ # define FNM_LEADING_DIR (1 << 3) /* Ignore `/...' after a match. */ # define FNM_CASEFOLD (1 << 4) /* Compare without regard to case. */ #endif /* Value returned by `fnmatch' if STRING does not match PATTERN. */ #define FNM_NOMATCH 1 /* This value is returned if the implementation does not support `fnmatch'. Since this is not the case here it will never be returned but the conformance test suites still require the symbol to be defined. */ #ifdef _XOPEN_SOURCE # define FNM_NOSYS (-1) #endif /* Match NAME against the filename pattern PATTERN, returning zero if it matches, FNM_NOMATCH if not. */ extern int fnmatch __P ((__const char *__pattern, __const char *__name, int __flags)); #ifdef __cplusplus } #endif #endif /* fnmatch.h */ make-4.3/lib/alloca.c0000644000175000017500000003447313611136471011401 00000000000000/* alloca.c -- allocate automatically reclaimed memory (Mostly) portable public-domain implementation -- D A Gwyn This implementation of the PWB library alloca function, which is used to allocate space off the run-time stack so that it is automatically reclaimed upon procedure exit, was inspired by discussions with J. Q. Johnson of Cornell. J.Otto Tennant contributed the Cray support. There are some preprocessor constants that can be defined when compiling for your specific system, for improved efficiency; however, the defaults should be okay. The general concept of this implementation is to keep track of all alloca-allocated blocks, and reclaim any that are found to be deeper in the stack than the current invocation. This heuristic does not reclaim storage as soon as it becomes invalid, but it will do so eventually. As a special case, alloca(0) reclaims storage without allocating any. It is a good idea to use alloca(0) in your main control loop, etc. to force garbage collection. */ #include #include #include #include #ifdef emacs # include "lisp.h" # include "blockinput.h" # ifdef EMACS_FREE # undef free # define free EMACS_FREE # endif #else # define memory_full() abort () #endif /* If compiling with GCC 2, this file's not needed. */ #if !defined (__GNUC__) || __GNUC__ < 2 /* If someone has defined alloca as a macro, there must be some other way alloca is supposed to work. */ # ifndef alloca # ifdef emacs # ifdef static /* actually, only want this if static is defined as "" -- this is for usg, in which emacs must undefine static in order to make unexec workable */ # ifndef STACK_DIRECTION you lose -- must know STACK_DIRECTION at compile-time /* Using #error here is not wise since this file should work for old and obscure compilers. */ # endif /* STACK_DIRECTION undefined */ # endif /* static */ # endif /* emacs */ /* If your stack is a linked list of frames, you have to provide an "address metric" ADDRESS_FUNCTION macro. */ # if defined (CRAY) && defined (CRAY_STACKSEG_END) long i00afunc (); # define ADDRESS_FUNCTION(arg) (char *) i00afunc (&(arg)) # else # define ADDRESS_FUNCTION(arg) &(arg) # endif /* Define STACK_DIRECTION if you know the direction of stack growth for your system; otherwise it will be automatically deduced at run-time. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ # ifndef STACK_DIRECTION # define STACK_DIRECTION 0 /* Direction unknown. */ # endif # if STACK_DIRECTION != 0 # define STACK_DIR STACK_DIRECTION /* Known at compile-time. */ # else /* STACK_DIRECTION == 0; need run-time code. */ static int stack_dir; /* 1 or -1 once known. */ # define STACK_DIR stack_dir static int find_stack_direction (int *addr, int depth) { int dir, dummy = 0; if (! addr) addr = &dummy; *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; dir = depth ? find_stack_direction (addr, depth - 1) : 0; return dir + dummy; } # endif /* STACK_DIRECTION == 0 */ /* An "alloca header" is used to: (a) chain together all alloca'ed blocks; (b) keep track of stack depth. It is very important that sizeof(header) agree with malloc alignment chunk size. The following default should work okay. */ # ifndef ALIGN_SIZE # define ALIGN_SIZE sizeof(double) # endif typedef union hdr { char align[ALIGN_SIZE]; /* To force sizeof(header). */ struct { union hdr *next; /* For chaining headers. */ char *deep; /* For stack depth measure. */ } h; } header; static header *last_alloca_header = NULL; /* -> last alloca header. */ /* Return a pointer to at least SIZE bytes of storage, which will be automatically reclaimed upon exit from the procedure that called alloca. Originally, this space was supposed to be taken from the current stack frame of the caller, but that method cannot be made to work for some implementations of C, for example under Gould's UTX/32. */ void * alloca (size_t size) { auto char probe; /* Probes stack depth: */ register char *depth = ADDRESS_FUNCTION (probe); # if STACK_DIRECTION == 0 if (STACK_DIR == 0) /* Unknown growth direction. */ STACK_DIR = find_stack_direction (NULL, (size & 1) + 20); # endif /* Reclaim garbage, defined as all alloca'd storage that was allocated from deeper in the stack than currently. */ { register header *hp; /* Traverses linked list. */ # ifdef emacs BLOCK_INPUT; # endif for (hp = last_alloca_header; hp != NULL;) if ((STACK_DIR > 0 && hp->h.deep > depth) || (STACK_DIR < 0 && hp->h.deep < depth)) { register header *np = hp->h.next; free (hp); /* Collect garbage. */ hp = np; /* -> next header. */ } else break; /* Rest are not deeper. */ last_alloca_header = hp; /* -> last valid storage. */ # ifdef emacs UNBLOCK_INPUT; # endif } if (size == 0) return NULL; /* No allocation required. */ /* Allocate combined header + user data storage. */ { /* Address of header. */ register header *new; size_t combined_size = sizeof (header) + size; if (combined_size < sizeof (header)) memory_full (); new = malloc (combined_size); if (! new) memory_full (); new->h.next = last_alloca_header; new->h.deep = depth; last_alloca_header = new; /* User storage begins just after header. */ return (void *) (new + 1); } } # if defined (CRAY) && defined (CRAY_STACKSEG_END) # ifdef DEBUG_I00AFUNC # include # endif # ifndef CRAY_STACK # define CRAY_STACK # ifndef CRAY2 /* Stack structures for CRAY-1, CRAY X-MP, and CRAY Y-MP */ struct stack_control_header { long shgrow:32; /* Number of times stack has grown. */ long shaseg:32; /* Size of increments to stack. */ long shhwm:32; /* High water mark of stack. */ long shsize:32; /* Current size of stack (all segments). */ }; /* The stack segment linkage control information occurs at the high-address end of a stack segment. (The stack grows from low addresses to high addresses.) The initial part of the stack segment linkage control information is 0200 (octal) words. This provides for register storage for the routine which overflows the stack. */ struct stack_segment_linkage { long ss[0200]; /* 0200 overflow words. */ long sssize:32; /* Number of words in this segment. */ long ssbase:32; /* Offset to stack base. */ long:32; long sspseg:32; /* Offset to linkage control of previous segment of stack. */ long:32; long sstcpt:32; /* Pointer to task common address block. */ long sscsnm; /* Private control structure number for microtasking. */ long ssusr1; /* Reserved for user. */ long ssusr2; /* Reserved for user. */ long sstpid; /* Process ID for pid based multi-tasking. */ long ssgvup; /* Pointer to multitasking thread giveup. */ long sscray[7]; /* Reserved for Cray Research. */ long ssa0; long ssa1; long ssa2; long ssa3; long ssa4; long ssa5; long ssa6; long ssa7; long sss0; long sss1; long sss2; long sss3; long sss4; long sss5; long sss6; long sss7; }; # else /* CRAY2 */ /* The following structure defines the vector of words returned by the STKSTAT library routine. */ struct stk_stat { long now; /* Current total stack size. */ long maxc; /* Amount of contiguous space which would be required to satisfy the maximum stack demand to date. */ long high_water; /* Stack high-water mark. */ long overflows; /* Number of stack overflow ($STKOFEN) calls. */ long hits; /* Number of internal buffer hits. */ long extends; /* Number of block extensions. */ long stko_mallocs; /* Block allocations by $STKOFEN. */ long underflows; /* Number of stack underflow calls ($STKRETN). */ long stko_free; /* Number of deallocations by $STKRETN. */ long stkm_free; /* Number of deallocations by $STKMRET. */ long segments; /* Current number of stack segments. */ long maxs; /* Maximum number of stack segments so far. */ long pad_size; /* Stack pad size. */ long current_address; /* Current stack segment address. */ long current_size; /* Current stack segment size. This number is actually corrupted by STKSTAT to include the fifteen word trailer area. */ long initial_address; /* Address of initial segment. */ long initial_size; /* Size of initial segment. */ }; /* The following structure describes the data structure which trails any stack segment. I think that the description in 'asdef' is out of date. I only describe the parts that I am sure about. */ struct stk_trailer { long this_address; /* Address of this block. */ long this_size; /* Size of this block (does not include this trailer). */ long unknown2; long unknown3; long link; /* Address of trailer block of previous segment. */ long unknown5; long unknown6; long unknown7; long unknown8; long unknown9; long unknown10; long unknown11; long unknown12; long unknown13; long unknown14; }; # endif /* CRAY2 */ # endif /* not CRAY_STACK */ # ifdef CRAY2 /* Determine a "stack measure" for an arbitrary ADDRESS. I doubt that "lint" will like this much. */ static long i00afunc (long *address) { struct stk_stat status; struct stk_trailer *trailer; long *block, size; long result = 0; /* We want to iterate through all of the segments. The first step is to get the stack status structure. We could do this more quickly and more directly, perhaps, by referencing the $LM00 common block, but I know that this works. */ STKSTAT (&status); /* Set up the iteration. */ trailer = (struct stk_trailer *) (status.current_address + status.current_size - 15); /* There must be at least one stack segment. Therefore it is a fatal error if "trailer" is null. */ if (trailer == NULL) abort (); /* Discard segments that do not contain our argument address. */ while (trailer != NULL) { block = (long *) trailer->this_address; size = trailer->this_size; if (block == NULL || size == 0) abort (); trailer = (struct stk_trailer *) trailer->link; if ((block <= address) && (address < (block + size))) break; } /* Set the result to the offset in this segment and add the sizes of all predecessor segments. */ result = address - block; if (trailer == NULL) { return result; } do { if (trailer->this_size <= 0) abort (); result += trailer->this_size; trailer = (struct stk_trailer *) trailer->link; } while (trailer != NULL); /* We are done. Note that if you present a bogus address (one not in any segment), you will get a different number back, formed from subtracting the address of the first block. This is probably not what you want. */ return (result); } # else /* not CRAY2 */ /* Stack address function for a CRAY-1, CRAY X-MP, or CRAY Y-MP. Determine the number of the cell within the stack, given the address of the cell. The purpose of this routine is to linearize, in some sense, stack addresses for alloca. */ static long i00afunc (long address) { long stkl = 0; long size, pseg, this_segment, stack; long result = 0; struct stack_segment_linkage *ssptr; /* Register B67 contains the address of the end of the current stack segment. If you (as a subprogram) store your registers on the stack and find that you are past the contents of B67, you have overflowed the segment. B67 also points to the stack segment linkage control area, which is what we are really interested in. */ stkl = CRAY_STACKSEG_END (); ssptr = (struct stack_segment_linkage *) stkl; /* If one subtracts 'size' from the end of the segment, one has the address of the first word of the segment. If this is not the first segment, 'pseg' will be nonzero. */ pseg = ssptr->sspseg; size = ssptr->sssize; this_segment = stkl - size; /* It is possible that calling this routine itself caused a stack overflow. Discard stack segments which do not contain the target address. */ while (!(this_segment <= address && address <= stkl)) { # ifdef DEBUG_I00AFUNC fprintf (stderr, "%011o %011o %011o\n", this_segment, address, stkl); # endif if (pseg == 0) break; stkl = stkl - pseg; ssptr = (struct stack_segment_linkage *) stkl; size = ssptr->sssize; pseg = ssptr->sspseg; this_segment = stkl - size; } result = address - this_segment; /* If you subtract pseg from the current end of the stack, you get the address of the previous stack segment's end. This seems a little convoluted to me, but I'll bet you save a cycle somewhere. */ while (pseg != 0) { # ifdef DEBUG_I00AFUNC fprintf (stderr, "%011o %011o\n", pseg, size); # endif stkl = stkl - pseg; ssptr = (struct stack_segment_linkage *) stkl; size = ssptr->sssize; pseg = ssptr->sspseg; result += size; } return (result); } # endif /* not CRAY2 */ # endif /* CRAY */ # endif /* no alloca */ #endif /* not GCC 2 */ make-4.3/lib/getdtablesize.c0000644000175000017500000000654413611136471012772 00000000000000/* getdtablesize() function: Return maximum possible file descriptor value + 1. Copyright (C) 2008-2020 Free Software Foundation, Inc. Written by Bruno Haible , 2008. 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 3 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, see . */ #include /* Specification. */ #include #if defined _WIN32 && ! defined __CYGWIN__ # include # if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" # endif # if HAVE_MSVC_INVALID_PARAMETER_HANDLER static int _setmaxstdio_nothrow (int newmax) { int result; TRY_MSVC_INVAL { result = _setmaxstdio (newmax); } CATCH_MSVC_INVAL { result = -1; } DONE_MSVC_INVAL; return result; } # else # define _setmaxstdio_nothrow _setmaxstdio # endif /* Cache for the previous getdtablesize () result. Safe to cache because Windows also lacks setrlimit. */ static int dtablesize; int getdtablesize (void) { if (dtablesize == 0) { /* We are looking for the number N such that the valid file descriptors are 0..N-1. It can be obtained through a loop as follows: { int fd; for (fd = 3; fd < 65536; fd++) if (dup2 (0, fd) == -1) break; return fd; } On Windows XP, the result is 2048. The drawback of this loop is that it allocates memory for a libc internal array that is never freed. The number N can also be obtained as the upper bound for _getmaxstdio (). _getmaxstdio () returns the maximum number of open FILE objects. The sanity check in _setmaxstdio reveals the maximum number of file descriptors. This too allocates memory, but it is freed when we call _setmaxstdio with the original value. */ int orig_max_stdio = _getmaxstdio (); unsigned int bound; for (bound = 0x10000; _setmaxstdio_nothrow (bound) < 0; bound = bound / 2) ; _setmaxstdio_nothrow (orig_max_stdio); dtablesize = bound; } return dtablesize; } #else # include # include # ifndef RLIM_SAVED_CUR # define RLIM_SAVED_CUR RLIM_INFINITY # endif # ifndef RLIM_SAVED_MAX # define RLIM_SAVED_MAX RLIM_INFINITY # endif # ifdef __CYGWIN__ /* Cygwin 1.7.25 auto-increases the RLIMIT_NOFILE soft limit until it hits the compile-time constant hard limit of 3200. We might as well just report the hard limit. */ # define rlim_cur rlim_max # endif int getdtablesize (void) { struct rlimit lim; if (getrlimit (RLIMIT_NOFILE, &lim) == 0 && 0 <= lim.rlim_cur && lim.rlim_cur <= INT_MAX && lim.rlim_cur != RLIM_INFINITY && lim.rlim_cur != RLIM_SAVED_CUR && lim.rlim_cur != RLIM_SAVED_MAX) return lim.rlim_cur; return INT_MAX; } #endif make-4.3/lib/getprogname.c0000644000175000017500000002020113611136471012436 00000000000000/* Program name management. Copyright (C) 2016-2020 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 the Free Software Foundation; either version 3 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, see . */ #include /* Specification. */ #include "getprogname.h" #include /* get program_invocation_name declaration */ #include /* get __argv declaration */ #ifdef _AIX # include # include # include #endif #ifdef __MVS__ # ifndef _OPEN_SYS # define _OPEN_SYS # endif # include # include #endif #ifdef __hpux # include # include # include # include #endif #ifdef __sgi # include # include # include # include # include #endif #include "dirname.h" #ifndef HAVE_GETPROGNAME /* not Mac OS X, FreeBSD, NetBSD, OpenBSD >= 5.4, Cygwin */ char const * getprogname (void) { # if HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME /* glibc, BeOS */ /* https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html */ return program_invocation_short_name; # elif HAVE_DECL_PROGRAM_INVOCATION_NAME /* glibc, BeOS */ /* https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html */ return last_component (program_invocation_name); # elif HAVE_GETEXECNAME /* Solaris */ /* https://docs.oracle.com/cd/E19253-01/816-5168/6mbb3hrb1/index.html */ const char *p = getexecname (); if (!p) p = "?"; return last_component (p); # elif HAVE_DECL___ARGV /* mingw, MSVC */ /* https://docs.microsoft.com/en-us/cpp/c-runtime-library/argc-argv-wargv */ const char *p = __argv && __argv[0] ? __argv[0] : "?"; return last_component (p); # elif HAVE_VAR___PROGNAME /* OpenBSD, Android, QNX */ /* https://man.openbsd.org/style.9 */ /* http://www.qnx.de/developers/docs/6.5.0/index.jsp?topic=%2Fcom.qnx.doc.neutrino_lib_ref%2Fp%2F__progname.html */ /* Be careful to declare this only when we absolutely need it (OpenBSD 5.1), rather than when it's available. Otherwise, its mere declaration makes program_invocation_short_name malfunction (have zero length) with Fedora 25's glibc. */ extern char *__progname; const char *p = __progname; # if defined __ANDROID__ return last_component (p); # else return p && p[0] ? p : "?"; # endif # elif _AIX /* AIX */ /* Idea by Bastien ROUCARIÈS, https://lists.gnu.org/r/bug-gnulib/2010-12/msg00095.html Reference: https://www.ibm.com/support/knowledgecenter/en/ssw_aix_61/com.ibm.aix.basetrf1/getprocs.htm */ static char *p; static int first = 1; if (first) { first = 0; pid_t pid = getpid (); struct procentry64 procs; p = (0 < getprocs64 (&procs, sizeof procs, NULL, 0, &pid, 1) ? strdup (procs.pi_comm) : NULL); if (!p) p = "?"; } return p; # elif defined __hpux static char *p; static int first = 1; if (first) { first = 0; pid_t pid = getpid (); struct pst_status status; if (pstat_getproc (&status, sizeof status, 0, pid) > 0) { char *ucomm = status.pst_ucomm; char *cmd = status.pst_cmd; if (strlen (ucomm) < PST_UCOMMLEN - 1) p = ucomm; else { /* ucomm is truncated to length PST_UCOMMLEN - 1. Look at cmd instead. */ char *space = strchr (cmd, ' '); if (space != NULL) *space = '\0'; p = strrchr (cmd, '/'); if (p != NULL) p++; else p = cmd; if (strlen (p) > PST_UCOMMLEN - 1 && memcmp (p, ucomm, PST_UCOMMLEN - 1) == 0) /* p is less truncated than ucomm. */ ; else p = ucomm; } p = strdup (p); } else { # if !defined __LP64__ /* Support for 32-bit programs running in 64-bit HP-UX. The documented way to do this is to use the same source code as above, but in a compilation unit where '#define _PSTAT64 1' is in effect. I prefer a single compilation unit; the struct size and the offsets are not going to change. */ char status64[1216]; if (__pstat_getproc64 (status64, sizeof status64, 0, pid) > 0) { char *ucomm = status64 + 288; char *cmd = status64 + 168; if (strlen (ucomm) < PST_UCOMMLEN - 1) p = ucomm; else { /* ucomm is truncated to length PST_UCOMMLEN - 1. Look at cmd instead. */ char *space = strchr (cmd, ' '); if (space != NULL) *space = '\0'; p = strrchr (cmd, '/'); if (p != NULL) p++; else p = cmd; if (strlen (p) > PST_UCOMMLEN - 1 && memcmp (p, ucomm, PST_UCOMMLEN - 1) == 0) /* p is less truncated than ucomm. */ ; else p = ucomm; } p = strdup (p); } else # endif p = NULL; } if (!p) p = "?"; } return p; # elif __MVS__ /* z/OS */ /* https://www.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos.v2r1.bpxbd00/rtwgetp.htm */ static char *p = "?"; static int first = 1; if (first) { pid_t pid = getpid (); int token; W_PSPROC buf; first = 0; memset (&buf, 0, sizeof(buf)); buf.ps_cmdptr = (char *) malloc (buf.ps_cmdlen = PS_CMDBLEN_LONG); buf.ps_conttyptr = (char *) malloc (buf.ps_conttylen = PS_CONTTYBLEN); buf.ps_pathptr = (char *) malloc (buf.ps_pathlen = PS_PATHBLEN); if (buf.ps_cmdptr && buf.ps_conttyptr && buf.ps_pathptr) { for (token = 0; token >= 0; token = w_getpsent (token, &buf, sizeof(buf))) { if (token > 0 && buf.ps_pid == pid) { char *s = strdup (last_component (buf.ps_pathptr)); if (s) p = s; break; } } } free (buf.ps_cmdptr); free (buf.ps_conttyptr); free (buf.ps_pathptr); } return p; # elif defined __sgi /* IRIX */ char filename[50]; int fd; sprintf (filename, "/proc/pinfo/%d", (int) getpid ()); fd = open (filename, O_RDONLY); if (0 <= fd) { prpsinfo_t buf; int ioctl_ok = 0 <= ioctl (fd, PIOCPSINFO, &buf); close (fd); if (ioctl_ok) { char *name = buf.pr_fname; size_t namesize = sizeof buf.pr_fname; /* It may not be NUL-terminated. */ char *namenul = memchr (name, '\0', namesize); size_t namelen = namenul ? namenul - name : namesize; char *namecopy = malloc (namelen + 1); if (namecopy) { namecopy[namelen] = '\0'; return memcpy (namecopy, name, namelen); } } } return NULL; # else # error "getprogname module not ported to this OS" # endif } #endif /* * Hey Emacs! * Local Variables: * coding: utf-8 * End: */ make-4.3/lib/msvc-inval.c0000644000175000017500000000751213611136472012220 00000000000000/* Invalid parameter handler for MSVC runtime libraries. Copyright (C) 2011-2020 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 the Free Software Foundation; either version 3, 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, see . */ #include /* Specification. */ #include "msvc-inval.h" #if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ && !(MSVC_INVALID_PARAMETER_HANDLING == SANE_LIBRARY_HANDLING) /* Get _invalid_parameter_handler type and _set_invalid_parameter_handler declaration. */ # include # if MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING static void __cdecl gl_msvc_invalid_parameter_handler (const wchar_t *expression, const wchar_t *function, const wchar_t *file, unsigned int line, uintptr_t dummy) { } # else /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include # if defined _MSC_VER static void __cdecl gl_msvc_invalid_parameter_handler (const wchar_t *expression, const wchar_t *function, const wchar_t *file, unsigned int line, uintptr_t dummy) { RaiseException (STATUS_GNULIB_INVALID_PARAMETER, 0, 0, NULL); } # else /* An index to thread-local storage. */ static DWORD tls_index; static int tls_initialized /* = 0 */; /* Used as a fallback only. */ static struct gl_msvc_inval_per_thread not_per_thread; struct gl_msvc_inval_per_thread * gl_msvc_inval_current (void) { if (!tls_initialized) { tls_index = TlsAlloc (); tls_initialized = 1; } if (tls_index == TLS_OUT_OF_INDEXES) /* TlsAlloc had failed. */ return ¬_per_thread; else { struct gl_msvc_inval_per_thread *pointer = (struct gl_msvc_inval_per_thread *) TlsGetValue (tls_index); if (pointer == NULL) { /* First call. Allocate a new 'struct gl_msvc_inval_per_thread'. */ pointer = (struct gl_msvc_inval_per_thread *) malloc (sizeof (struct gl_msvc_inval_per_thread)); if (pointer == NULL) /* Could not allocate memory. Use the global storage. */ pointer = ¬_per_thread; TlsSetValue (tls_index, pointer); } return pointer; } } static void __cdecl gl_msvc_invalid_parameter_handler (const wchar_t *expression, const wchar_t *function, const wchar_t *file, unsigned int line, uintptr_t dummy) { struct gl_msvc_inval_per_thread *current = gl_msvc_inval_current (); if (current->restart_valid) longjmp (current->restart, 1); else /* An invalid parameter notification from outside the gnulib code. Give the caller a chance to intervene. */ RaiseException (STATUS_GNULIB_INVALID_PARAMETER, 0, 0, NULL); } # endif # endif static int gl_msvc_inval_initialized /* = 0 */; void gl_msvc_inval_ensure_handler (void) { if (gl_msvc_inval_initialized == 0) { _set_invalid_parameter_handler (gl_msvc_invalid_parameter_handler); gl_msvc_inval_initialized = 1; } } #endif make-4.3/lib/unistd.in.h0000644000175000017500000016312413611136472012063 00000000000000/* Substitute for and wrapper around . Copyright (C) 2003-2020 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 the Free Software Foundation; either version 3, 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, see . */ #ifndef _@GUARD_PREFIX@_UNISTD_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if @HAVE_UNISTD_H@ && defined _GL_INCLUDING_UNISTD_H /* Special invocation convention: - On Mac OS X 10.3.9 we have a sequence of nested includes -> -> -> In this situation, the functions are not yet declared, therefore we cannot provide the C++ aliases. */ #@INCLUDE_NEXT@ @NEXT_UNISTD_H@ #else /* Normal invocation convention. */ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_UNISTD_H@ # define _GL_INCLUDING_UNISTD_H # @INCLUDE_NEXT@ @NEXT_UNISTD_H@ # undef _GL_INCLUDING_UNISTD_H #endif /* Get all possible declarations of gethostname(). */ #if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ \ && !defined _GL_INCLUDING_WINSOCK2_H # define _GL_INCLUDING_WINSOCK2_H # include # undef _GL_INCLUDING_WINSOCK2_H #endif #if !defined _@GUARD_PREFIX@_UNISTD_H && !defined _GL_INCLUDING_WINSOCK2_H #define _@GUARD_PREFIX@_UNISTD_H /* NetBSD 5.0 mis-defines NULL. Also get size_t. */ /* But avoid namespace pollution on glibc systems. */ #ifndef __GLIBC__ # include #endif /* mingw doesn't define the SEEK_* or *_FILENO macros in . */ /* MSVC declares 'unlink' in , not in . We must include it before we #define unlink rpl_unlink. */ /* Cygwin 1.7.1 declares symlinkat in , not in . */ /* But avoid namespace pollution on glibc systems. */ #if (!(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET) \ || ((@GNULIB_UNLINK@ || defined GNULIB_POSIXCHECK) \ && (defined _WIN32 && ! defined __CYGWIN__)) \ || ((@GNULIB_SYMLINKAT@ || defined GNULIB_POSIXCHECK) \ && defined __CYGWIN__)) \ && ! defined __GLIBC__ # include #endif /* Cygwin 1.7.1 and Android 4.3 declare unlinkat in , not in . */ /* But avoid namespace pollution on glibc systems. */ #if (@GNULIB_UNLINKAT@ || defined GNULIB_POSIXCHECK) \ && (defined __CYGWIN__ || defined __ANDROID__) \ && ! defined __GLIBC__ # include #endif /* mingw fails to declare _exit in . */ /* mingw, MSVC, BeOS, Haiku declare environ in , not in . */ /* Solaris declares getcwd not only in but also in . */ /* OSF Tru64 Unix cannot see gnulib rpl_strtod when system is included here. */ /* But avoid namespace pollution on glibc systems. */ #if !defined __GLIBC__ && !defined __osf__ # define __need_system_stdlib_h # include # undef __need_system_stdlib_h #endif /* Native Windows platforms declare chdir, getcwd, rmdir in and/or , not in . They also declare access(), chmod(), close(), dup(), dup2(), isatty(), lseek(), read(), unlink(), write() in . */ #if ((@GNULIB_CHDIR@ || @GNULIB_GETCWD@ || @GNULIB_RMDIR@ \ || defined GNULIB_POSIXCHECK) \ && (defined _WIN32 && ! defined __CYGWIN__)) # include /* mingw32, mingw64 */ # include /* mingw64, MSVC 9 */ #elif (@GNULIB_CLOSE@ || @GNULIB_DUP@ || @GNULIB_DUP2@ || @GNULIB_ISATTY@ \ || @GNULIB_LSEEK@ || @GNULIB_READ@ || @GNULIB_UNLINK@ || @GNULIB_WRITE@ \ || defined GNULIB_POSIXCHECK) \ && (defined _WIN32 && ! defined __CYGWIN__) # include #endif /* AIX and OSF/1 5.1 declare getdomainname in , not in . NonStop Kernel declares gethostname in , not in . */ /* But avoid namespace pollution on glibc systems. */ #if ((@GNULIB_GETDOMAINNAME@ && (defined _AIX || defined __osf__)) \ || (@GNULIB_GETHOSTNAME@ && defined __TANDEM)) \ && !defined __GLIBC__ # include #endif /* Android 4.3 declares fchownat in , not in . */ /* But avoid namespace pollution on glibc systems. */ #if (@GNULIB_FCHOWNAT@ || defined GNULIB_POSIXCHECK) && defined __ANDROID__ \ && !defined __GLIBC__ # include #endif /* MSVC defines off_t in . May also define off_t to a 64-bit type on native Windows. */ /* But avoid namespace pollution on glibc systems. */ #ifndef __GLIBC__ /* Get off_t, ssize_t. */ # include #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Get getopt(), optarg, optind, opterr, optopt. */ #if @GNULIB_UNISTD_H_GETOPT@ && !defined _GL_SYSTEM_GETOPT # include # include #endif #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef _GL_UNISTD_INLINE # define _GL_UNISTD_INLINE _GL_INLINE #endif /* Hide some function declarations from . */ #if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ # if !defined _@GUARD_PREFIX@_SYS_SOCKET_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef socket # define socket socket_used_without_including_sys_socket_h # undef connect # define connect connect_used_without_including_sys_socket_h # undef accept # define accept accept_used_without_including_sys_socket_h # undef bind # define bind bind_used_without_including_sys_socket_h # undef getpeername # define getpeername getpeername_used_without_including_sys_socket_h # undef getsockname # define getsockname getsockname_used_without_including_sys_socket_h # undef getsockopt # define getsockopt getsockopt_used_without_including_sys_socket_h # undef listen # define listen listen_used_without_including_sys_socket_h # undef recv # define recv recv_used_without_including_sys_socket_h # undef send # define send send_used_without_including_sys_socket_h # undef recvfrom # define recvfrom recvfrom_used_without_including_sys_socket_h # undef sendto # define sendto sendto_used_without_including_sys_socket_h # undef setsockopt # define setsockopt setsockopt_used_without_including_sys_socket_h # undef shutdown # define shutdown shutdown_used_without_including_sys_socket_h # else _GL_WARN_ON_USE (socket, "socket() used without including "); _GL_WARN_ON_USE (connect, "connect() used without including "); _GL_WARN_ON_USE (accept, "accept() used without including "); _GL_WARN_ON_USE (bind, "bind() used without including "); _GL_WARN_ON_USE (getpeername, "getpeername() used without including "); _GL_WARN_ON_USE (getsockname, "getsockname() used without including "); _GL_WARN_ON_USE (getsockopt, "getsockopt() used without including "); _GL_WARN_ON_USE (listen, "listen() used without including "); _GL_WARN_ON_USE (recv, "recv() used without including "); _GL_WARN_ON_USE (send, "send() used without including "); _GL_WARN_ON_USE (recvfrom, "recvfrom() used without including "); _GL_WARN_ON_USE (sendto, "sendto() used without including "); _GL_WARN_ON_USE (setsockopt, "setsockopt() used without including "); _GL_WARN_ON_USE (shutdown, "shutdown() used without including "); # endif # endif # if !defined _@GUARD_PREFIX@_SYS_SELECT_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef select # define select select_used_without_including_sys_select_h # else _GL_WARN_ON_USE (select, "select() used without including "); # endif # endif #endif /* OS/2 EMX lacks these macros. */ #ifndef STDIN_FILENO # define STDIN_FILENO 0 #endif #ifndef STDOUT_FILENO # define STDOUT_FILENO 1 #endif #ifndef STDERR_FILENO # define STDERR_FILENO 2 #endif /* Ensure *_OK macros exist. */ #ifndef F_OK # define F_OK 0 # define X_OK 1 # define W_OK 2 # define R_OK 4 #endif /* Declare overridden functions. */ #if @GNULIB_ACCESS@ # if @REPLACE_ACCESS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef access # define access rpl_access # endif _GL_FUNCDECL_RPL (access, int, (const char *file, int mode) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (access, int, (const char *file, int mode)); # else _GL_CXXALIAS_SYS (access, int, (const char *file, int mode)); # endif _GL_CXXALIASWARN (access); #elif defined GNULIB_POSIXCHECK # undef access # if HAVE_RAW_DECL_ACCESS /* The access() function is a security risk. */ _GL_WARN_ON_USE (access, "access does not always support X_OK - " "use gnulib module access for portability; " "also, this function is a security risk - " "use the gnulib module faccessat instead"); # endif #endif #if @GNULIB_CHDIR@ _GL_CXXALIAS_SYS (chdir, int, (const char *file) _GL_ARG_NONNULL ((1))); _GL_CXXALIASWARN (chdir); #elif defined GNULIB_POSIXCHECK # undef chdir # if HAVE_RAW_DECL_CHDIR _GL_WARN_ON_USE (chown, "chdir is not always in - " "use gnulib module chdir for portability"); # endif #endif #if @GNULIB_CHOWN@ /* Change the owner of FILE to UID (if UID is not -1) and the group of FILE to GID (if GID is not -1). Follow symbolic links. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification . */ # if @REPLACE_DUP2@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define dup2 rpl_dup2 # endif _GL_FUNCDECL_RPL (dup2, int, (int oldfd, int newfd)); _GL_CXXALIAS_RPL (dup2, int, (int oldfd, int newfd)); # else # if !@HAVE_DUP2@ _GL_FUNCDECL_SYS (dup2, int, (int oldfd, int newfd)); # endif _GL_CXXALIAS_SYS (dup2, int, (int oldfd, int newfd)); # endif _GL_CXXALIASWARN (dup2); #elif defined GNULIB_POSIXCHECK # undef dup2 # if HAVE_RAW_DECL_DUP2 _GL_WARN_ON_USE (dup2, "dup2 is unportable - " "use gnulib module dup2 for portability"); # endif #endif #if @GNULIB_DUP3@ /* Copy the file descriptor OLDFD into file descriptor NEWFD, with the specified flags. The flags are a bitmask, possibly including O_CLOEXEC (defined in ) and O_TEXT, O_BINARY (defined in "binary-io.h"). Close NEWFD first if it is open. Return newfd if successful, otherwise -1 and errno set. See the Linux man page at . */ # if @HAVE_DUP3@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define dup3 rpl_dup3 # endif _GL_FUNCDECL_RPL (dup3, int, (int oldfd, int newfd, int flags)); _GL_CXXALIAS_RPL (dup3, int, (int oldfd, int newfd, int flags)); # else _GL_FUNCDECL_SYS (dup3, int, (int oldfd, int newfd, int flags)); _GL_CXXALIAS_SYS (dup3, int, (int oldfd, int newfd, int flags)); # endif _GL_CXXALIASWARN (dup3); #elif defined GNULIB_POSIXCHECK # undef dup3 # if HAVE_RAW_DECL_DUP3 _GL_WARN_ON_USE (dup3, "dup3 is unportable - " "use gnulib module dup3 for portability"); # endif #endif #if @GNULIB_ENVIRON@ # if defined __CYGWIN__ && !defined __i386__ /* The 'environ' variable is defined in a DLL. Therefore its declaration needs the '__declspec(dllimport)' attribute, but the system's lacks it. This leads to a link error on 64-bit Cygwin when the option -Wl,--disable-auto-import is in use. */ _GL_EXTERN_C __declspec(dllimport) char **environ; # endif # if !@HAVE_DECL_ENVIRON@ /* Set of environment variables and values. An array of strings of the form "VARIABLE=VALUE", terminated with a NULL. */ # if defined __APPLE__ && defined __MACH__ # include # if !TARGET_OS_IPHONE && !TARGET_IPHONE_SIMULATOR # define _GL_USE_CRT_EXTERNS # endif # endif # ifdef _GL_USE_CRT_EXTERNS # include # define environ (*_NSGetEnviron ()) # else # ifdef __cplusplus extern "C" { # endif extern char **environ; # ifdef __cplusplus } # endif # endif # endif #elif defined GNULIB_POSIXCHECK # if HAVE_RAW_DECL_ENVIRON _GL_UNISTD_INLINE char *** _GL_WARN_ON_USE_ATTRIBUTE ("environ is unportable - " "use gnulib module environ for portability") rpl_environ (void) { return &environ; } # undef environ # define environ (*rpl_environ ()) # endif #endif #if @GNULIB_EUIDACCESS@ /* Like access(), except that it uses the effective user id and group id of the current process. */ # if !@HAVE_EUIDACCESS@ _GL_FUNCDECL_SYS (euidaccess, int, (const char *filename, int mode) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (euidaccess, int, (const char *filename, int mode)); _GL_CXXALIASWARN (euidaccess); # if defined GNULIB_POSIXCHECK /* Like access(), this function is a security risk. */ _GL_WARN_ON_USE (euidaccess, "the euidaccess function is a security risk - " "use the gnulib module faccessat instead"); # endif #elif defined GNULIB_POSIXCHECK # undef euidaccess # if HAVE_RAW_DECL_EUIDACCESS _GL_WARN_ON_USE (euidaccess, "euidaccess is unportable - " "use gnulib module euidaccess for portability"); # endif #endif #if @GNULIB_FACCESSAT@ # if @REPLACE_FACCESSAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef faccessat # define faccessat rpl_faccessat # endif _GL_FUNCDECL_RPL (faccessat, int, (int fd, char const *name, int mode, int flag) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (faccessat, int, (int fd, char const *name, int mode, int flag)); # else # if !@HAVE_FACCESSAT@ _GL_FUNCDECL_SYS (faccessat, int, (int fd, char const *file, int mode, int flag) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (faccessat, int, (int fd, char const *file, int mode, int flag)); # endif _GL_CXXALIASWARN (faccessat); #elif defined GNULIB_POSIXCHECK # undef faccessat # if HAVE_RAW_DECL_FACCESSAT _GL_WARN_ON_USE (faccessat, "faccessat is not portable - " "use gnulib module faccessat for portability"); # endif #endif #if @GNULIB_FCHDIR@ /* Change the process' current working directory to the directory on which the given file descriptor is open. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification . */ # if ! @HAVE_FCHDIR@ _GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/)); /* Gnulib internal hooks needed to maintain the fchdir metadata. */ _GL_EXTERN_C int _gl_register_fd (int fd, const char *filename) _GL_ARG_NONNULL ((2)); _GL_EXTERN_C void _gl_unregister_fd (int fd); _GL_EXTERN_C int _gl_register_dup (int oldfd, int newfd); _GL_EXTERN_C const char *_gl_directory_name (int fd); # else # if !@HAVE_DECL_FCHDIR@ _GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/)); # endif # endif _GL_CXXALIAS_SYS (fchdir, int, (int /*fd*/)); _GL_CXXALIASWARN (fchdir); #elif defined GNULIB_POSIXCHECK # undef fchdir # if HAVE_RAW_DECL_FCHDIR _GL_WARN_ON_USE (fchdir, "fchdir is unportable - " "use gnulib module fchdir for portability"); # endif #endif #if @GNULIB_FCHOWNAT@ # if @REPLACE_FCHOWNAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fchownat # define fchownat rpl_fchownat # endif _GL_FUNCDECL_RPL (fchownat, int, (int fd, char const *file, uid_t owner, gid_t group, int flag) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (fchownat, int, (int fd, char const *file, uid_t owner, gid_t group, int flag)); # else # if !@HAVE_FCHOWNAT@ _GL_FUNCDECL_SYS (fchownat, int, (int fd, char const *file, uid_t owner, gid_t group, int flag) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (fchownat, int, (int fd, char const *file, uid_t owner, gid_t group, int flag)); # endif _GL_CXXALIASWARN (fchownat); #elif defined GNULIB_POSIXCHECK # undef fchownat # if HAVE_RAW_DECL_FCHOWNAT _GL_WARN_ON_USE (fchownat, "fchownat is not portable - " "use gnulib module openat for portability"); # endif #endif #if @GNULIB_FDATASYNC@ /* Synchronize changes to a file. Return 0 if successful, otherwise -1 and errno set. See POSIX:2008 specification . */ # if !@HAVE_FDATASYNC@ || !@HAVE_DECL_FDATASYNC@ _GL_FUNCDECL_SYS (fdatasync, int, (int fd)); # endif _GL_CXXALIAS_SYS (fdatasync, int, (int fd)); _GL_CXXALIASWARN (fdatasync); #elif defined GNULIB_POSIXCHECK # undef fdatasync # if HAVE_RAW_DECL_FDATASYNC _GL_WARN_ON_USE (fdatasync, "fdatasync is unportable - " "use gnulib module fdatasync for portability"); # endif #endif #if @GNULIB_FSYNC@ /* Synchronize changes, including metadata, to a file. Return 0 if successful, otherwise -1 and errno set. See POSIX:2008 specification . */ # if !@HAVE_FSYNC@ _GL_FUNCDECL_SYS (fsync, int, (int fd)); # endif _GL_CXXALIAS_SYS (fsync, int, (int fd)); _GL_CXXALIASWARN (fsync); #elif defined GNULIB_POSIXCHECK # undef fsync # if HAVE_RAW_DECL_FSYNC _GL_WARN_ON_USE (fsync, "fsync is unportable - " "use gnulib module fsync for portability"); # endif #endif #if @GNULIB_FTRUNCATE@ /* Change the size of the file to which FD is opened to become equal to LENGTH. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification . */ # if @REPLACE_FTRUNCATE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ftruncate # define ftruncate rpl_ftruncate # endif _GL_FUNCDECL_RPL (ftruncate, int, (int fd, off_t length)); _GL_CXXALIAS_RPL (ftruncate, int, (int fd, off_t length)); # else # if !@HAVE_FTRUNCATE@ _GL_FUNCDECL_SYS (ftruncate, int, (int fd, off_t length)); # endif _GL_CXXALIAS_SYS (ftruncate, int, (int fd, off_t length)); # endif _GL_CXXALIASWARN (ftruncate); #elif defined GNULIB_POSIXCHECK # undef ftruncate # if HAVE_RAW_DECL_FTRUNCATE _GL_WARN_ON_USE (ftruncate, "ftruncate is unportable - " "use gnulib module ftruncate for portability"); # endif #endif #if @GNULIB_GETCWD@ /* Get the name of the current working directory, and put it in SIZE bytes of BUF. Return BUF if successful, or NULL if the directory couldn't be determined or SIZE was too small. See the POSIX:2008 specification . Additionally, the gnulib module 'getcwd' guarantees the following GNU extension: If BUF is NULL, an array is allocated with 'malloc'; the array is SIZE bytes long, unless SIZE == 0, in which case it is as big as necessary. */ # if @REPLACE_GETCWD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define getcwd rpl_getcwd # endif _GL_FUNCDECL_RPL (getcwd, char *, (char *buf, size_t size)); _GL_CXXALIAS_RPL (getcwd, char *, (char *buf, size_t size)); # else /* Need to cast, because on mingw, the second parameter is int size. */ _GL_CXXALIAS_SYS_CAST (getcwd, char *, (char *buf, size_t size)); # endif _GL_CXXALIASWARN (getcwd); #elif defined GNULIB_POSIXCHECK # undef getcwd # if HAVE_RAW_DECL_GETCWD _GL_WARN_ON_USE (getcwd, "getcwd is unportable - " "use gnulib module getcwd for portability"); # endif #endif #if @GNULIB_GETDOMAINNAME@ /* Return the NIS domain name of the machine. WARNING! The NIS domain name is unrelated to the fully qualified host name of the machine. It is also unrelated to email addresses. WARNING! The NIS domain name is usually the empty string or "(none)" when not using NIS. Put up to LEN bytes of the NIS domain name into NAME. Null terminate it if the name is shorter than LEN. If the NIS domain name is longer than LEN, set errno = EINVAL and return -1. Return 0 if successful, otherwise set errno and return -1. */ # if @REPLACE_GETDOMAINNAME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getdomainname # define getdomainname rpl_getdomainname # endif _GL_FUNCDECL_RPL (getdomainname, int, (char *name, size_t len) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (getdomainname, int, (char *name, size_t len)); # else # if !@HAVE_DECL_GETDOMAINNAME@ _GL_FUNCDECL_SYS (getdomainname, int, (char *name, size_t len) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (getdomainname, int, (char *name, size_t len)); # endif _GL_CXXALIASWARN (getdomainname); #elif defined GNULIB_POSIXCHECK # undef getdomainname # if HAVE_RAW_DECL_GETDOMAINNAME _GL_WARN_ON_USE (getdomainname, "getdomainname is unportable - " "use gnulib module getdomainname for portability"); # endif #endif #if @GNULIB_GETDTABLESIZE@ /* Return the maximum number of file descriptors in the current process. In POSIX, this is same as sysconf (_SC_OPEN_MAX). */ # if @REPLACE_GETDTABLESIZE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getdtablesize # define getdtablesize rpl_getdtablesize # endif _GL_FUNCDECL_RPL (getdtablesize, int, (void)); _GL_CXXALIAS_RPL (getdtablesize, int, (void)); # else # if !@HAVE_GETDTABLESIZE@ _GL_FUNCDECL_SYS (getdtablesize, int, (void)); # endif /* Need to cast, because on AIX, the parameter list is (...). */ _GL_CXXALIAS_SYS_CAST (getdtablesize, int, (void)); # endif _GL_CXXALIASWARN (getdtablesize); #elif defined GNULIB_POSIXCHECK # undef getdtablesize # if HAVE_RAW_DECL_GETDTABLESIZE _GL_WARN_ON_USE (getdtablesize, "getdtablesize is unportable - " "use gnulib module getdtablesize for portability"); # endif #endif #if @GNULIB_GETGROUPS@ /* Return the supplemental groups that the current process belongs to. It is unspecified whether the effective group id is in the list. If N is 0, return the group count; otherwise, N describes how many entries are available in GROUPS. Return -1 and set errno if N is not 0 and not large enough. Fails with ENOSYS on some systems. */ # if @REPLACE_GETGROUPS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getgroups # define getgroups rpl_getgroups # endif _GL_FUNCDECL_RPL (getgroups, int, (int n, gid_t *groups)); _GL_CXXALIAS_RPL (getgroups, int, (int n, gid_t *groups)); # else # if !@HAVE_GETGROUPS@ _GL_FUNCDECL_SYS (getgroups, int, (int n, gid_t *groups)); # endif _GL_CXXALIAS_SYS (getgroups, int, (int n, gid_t *groups)); # endif _GL_CXXALIASWARN (getgroups); #elif defined GNULIB_POSIXCHECK # undef getgroups # if HAVE_RAW_DECL_GETGROUPS _GL_WARN_ON_USE (getgroups, "getgroups is unportable - " "use gnulib module getgroups for portability"); # endif #endif #if @GNULIB_GETHOSTNAME@ /* Return the standard host name of the machine. WARNING! The host name may or may not be fully qualified. Put up to LEN bytes of the host name into NAME. Null terminate it if the name is shorter than LEN. If the host name is longer than LEN, set errno = EINVAL and return -1. Return 0 if successful, otherwise set errno and return -1. */ # if @UNISTD_H_HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef gethostname # define gethostname rpl_gethostname # endif _GL_FUNCDECL_RPL (gethostname, int, (char *name, size_t len) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (gethostname, int, (char *name, size_t len)); # else # if !@HAVE_GETHOSTNAME@ _GL_FUNCDECL_SYS (gethostname, int, (char *name, size_t len) _GL_ARG_NONNULL ((1))); # endif /* Need to cast, because on Solaris 10 and OSF/1 5.1 systems, the second parameter is int len. */ _GL_CXXALIAS_SYS_CAST (gethostname, int, (char *name, size_t len)); # endif _GL_CXXALIASWARN (gethostname); #elif @UNISTD_H_HAVE_WINSOCK2_H@ # undef gethostname # define gethostname gethostname_used_without_requesting_gnulib_module_gethostname #elif defined GNULIB_POSIXCHECK # undef gethostname # if HAVE_RAW_DECL_GETHOSTNAME _GL_WARN_ON_USE (gethostname, "gethostname is unportable - " "use gnulib module gethostname for portability"); # endif #endif #if @GNULIB_GETLOGIN@ /* Returns the user's login name, or NULL if it cannot be found. Upon error, returns NULL with errno set. See . Most programs don't need to use this function, because the information is available through environment variables: ${LOGNAME-$USER} on Unix platforms, $USERNAME on native Windows platforms. */ # if !@HAVE_DECL_GETLOGIN@ _GL_FUNCDECL_SYS (getlogin, char *, (void)); # endif _GL_CXXALIAS_SYS (getlogin, char *, (void)); _GL_CXXALIASWARN (getlogin); #elif defined GNULIB_POSIXCHECK # undef getlogin # if HAVE_RAW_DECL_GETLOGIN _GL_WARN_ON_USE (getlogin, "getlogin is unportable - " "use gnulib module getlogin for portability"); # endif #endif #if @GNULIB_GETLOGIN_R@ /* Copies the user's login name to NAME. The array pointed to by NAME has room for SIZE bytes. Returns 0 if successful. Upon error, an error number is returned, or -1 in the case that the login name cannot be found but no specific error is provided (this case is hopefully rare but is left open by the POSIX spec). See . Most programs don't need to use this function, because the information is available through environment variables: ${LOGNAME-$USER} on Unix platforms, $USERNAME on native Windows platforms. */ # if @REPLACE_GETLOGIN_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define getlogin_r rpl_getlogin_r # endif _GL_FUNCDECL_RPL (getlogin_r, int, (char *name, size_t size) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (getlogin_r, int, (char *name, size_t size)); # else # if !@HAVE_DECL_GETLOGIN_R@ _GL_FUNCDECL_SYS (getlogin_r, int, (char *name, size_t size) _GL_ARG_NONNULL ((1))); # endif /* Need to cast, because on Solaris 10 systems, the second argument is int size. */ _GL_CXXALIAS_SYS_CAST (getlogin_r, int, (char *name, size_t size)); # endif _GL_CXXALIASWARN (getlogin_r); #elif defined GNULIB_POSIXCHECK # undef getlogin_r # if HAVE_RAW_DECL_GETLOGIN_R _GL_WARN_ON_USE (getlogin_r, "getlogin_r is unportable - " "use gnulib module getlogin_r for portability"); # endif #endif #if @GNULIB_GETPAGESIZE@ # if @REPLACE_GETPAGESIZE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define getpagesize rpl_getpagesize # endif _GL_FUNCDECL_RPL (getpagesize, int, (void)); _GL_CXXALIAS_RPL (getpagesize, int, (void)); # else /* On HP-UX, getpagesize exists, but it is not declared in even if the compiler options -D_HPUX_SOURCE -D_XOPEN_SOURCE=600 are used. */ # if defined __hpux _GL_FUNCDECL_SYS (getpagesize, int, (void)); # endif # if !@HAVE_GETPAGESIZE@ # if !defined getpagesize /* This is for POSIX systems. */ # if !defined _gl_getpagesize && defined _SC_PAGESIZE # if ! (defined __VMS && __VMS_VER < 70000000) # define _gl_getpagesize() sysconf (_SC_PAGESIZE) # endif # endif /* This is for older VMS. */ # if !defined _gl_getpagesize && defined __VMS # ifdef __ALPHA # define _gl_getpagesize() 8192 # else # define _gl_getpagesize() 512 # endif # endif /* This is for BeOS. */ # if !defined _gl_getpagesize && @HAVE_OS_H@ # include # if defined B_PAGE_SIZE # define _gl_getpagesize() B_PAGE_SIZE # endif # endif /* This is for AmigaOS4.0. */ # if !defined _gl_getpagesize && defined __amigaos4__ # define _gl_getpagesize() 2048 # endif /* This is for older Unix systems. */ # if !defined _gl_getpagesize && @HAVE_SYS_PARAM_H@ # include # ifdef EXEC_PAGESIZE # define _gl_getpagesize() EXEC_PAGESIZE # else # ifdef NBPG # ifndef CLSIZE # define CLSIZE 1 # endif # define _gl_getpagesize() (NBPG * CLSIZE) # else # ifdef NBPC # define _gl_getpagesize() NBPC # endif # endif # endif # endif # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define getpagesize() _gl_getpagesize () # else # if !GNULIB_defined_getpagesize_function _GL_UNISTD_INLINE int getpagesize () { return _gl_getpagesize (); } # define GNULIB_defined_getpagesize_function 1 # endif # endif # endif # endif /* Need to cast, because on Cygwin 1.5.x systems, the return type is size_t. */ _GL_CXXALIAS_SYS_CAST (getpagesize, int, (void)); # endif # if @HAVE_DECL_GETPAGESIZE@ _GL_CXXALIASWARN (getpagesize); # endif #elif defined GNULIB_POSIXCHECK # undef getpagesize # if HAVE_RAW_DECL_GETPAGESIZE _GL_WARN_ON_USE (getpagesize, "getpagesize is unportable - " "use gnulib module getpagesize for portability"); # endif #endif #if @GNULIB_GETPASS@ /* Function getpass() from module 'getpass': Read a password from /dev/tty or stdin. Function getpass() from module 'getpass-gnu': Read a password of arbitrary length from /dev/tty or stdin. */ # if @REPLACE_GETPASS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getpass # define getpass rpl_getpass # endif _GL_FUNCDECL_RPL (getpass, char *, (const char *prompt) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (getpass, char *, (const char *prompt)); # else # if !@HAVE_GETPASS@ _GL_FUNCDECL_SYS (getpass, char *, (const char *prompt) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (getpass, char *, (const char *prompt)); # endif _GL_CXXALIASWARN (getpass); #elif defined GNULIB_POSIXCHECK # undef getpass # if HAVE_RAW_DECL_GETPASS _GL_WARN_ON_USE (getpass, "getpass is unportable - " "use gnulib module getpass or getpass-gnu for portability"); # endif #endif #if @GNULIB_GETUSERSHELL@ /* Return the next valid login shell on the system, or NULL when the end of the list has been reached. */ # if !@HAVE_DECL_GETUSERSHELL@ _GL_FUNCDECL_SYS (getusershell, char *, (void)); # endif _GL_CXXALIAS_SYS (getusershell, char *, (void)); _GL_CXXALIASWARN (getusershell); #elif defined GNULIB_POSIXCHECK # undef getusershell # if HAVE_RAW_DECL_GETUSERSHELL _GL_WARN_ON_USE (getusershell, "getusershell is unportable - " "use gnulib module getusershell for portability"); # endif #endif #if @GNULIB_GETUSERSHELL@ /* Rewind to pointer that is advanced at each getusershell() call. */ # if !@HAVE_DECL_GETUSERSHELL@ _GL_FUNCDECL_SYS (setusershell, void, (void)); # endif _GL_CXXALIAS_SYS (setusershell, void, (void)); _GL_CXXALIASWARN (setusershell); #elif defined GNULIB_POSIXCHECK # undef setusershell # if HAVE_RAW_DECL_SETUSERSHELL _GL_WARN_ON_USE (setusershell, "setusershell is unportable - " "use gnulib module getusershell for portability"); # endif #endif #if @GNULIB_GETUSERSHELL@ /* Free the pointer that is advanced at each getusershell() call and associated resources. */ # if !@HAVE_DECL_GETUSERSHELL@ _GL_FUNCDECL_SYS (endusershell, void, (void)); # endif _GL_CXXALIAS_SYS (endusershell, void, (void)); _GL_CXXALIASWARN (endusershell); #elif defined GNULIB_POSIXCHECK # undef endusershell # if HAVE_RAW_DECL_ENDUSERSHELL _GL_WARN_ON_USE (endusershell, "endusershell is unportable - " "use gnulib module getusershell for portability"); # endif #endif #if @GNULIB_GROUP_MEMBER@ /* Determine whether group id is in calling user's group list. */ # if !@HAVE_GROUP_MEMBER@ _GL_FUNCDECL_SYS (group_member, int, (gid_t gid)); # endif _GL_CXXALIAS_SYS (group_member, int, (gid_t gid)); _GL_CXXALIASWARN (group_member); #elif defined GNULIB_POSIXCHECK # undef group_member # if HAVE_RAW_DECL_GROUP_MEMBER _GL_WARN_ON_USE (group_member, "group_member is unportable - " "use gnulib module group-member for portability"); # endif #endif #if @GNULIB_ISATTY@ # if @REPLACE_ISATTY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef isatty # define isatty rpl_isatty # endif _GL_FUNCDECL_RPL (isatty, int, (int fd)); _GL_CXXALIAS_RPL (isatty, int, (int fd)); # else _GL_CXXALIAS_SYS (isatty, int, (int fd)); # endif _GL_CXXALIASWARN (isatty); #elif defined GNULIB_POSIXCHECK # undef isatty # if HAVE_RAW_DECL_ISATTY _GL_WARN_ON_USE (isatty, "isatty has portability problems on native Windows - " "use gnulib module isatty for portability"); # endif #endif #if @GNULIB_LCHOWN@ /* Change the owner of FILE to UID (if UID is not -1) and the group of FILE to GID (if GID is not -1). Do not follow symbolic links. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification . */ # if @REPLACE_LCHOWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef lchown # define lchown rpl_lchown # endif _GL_FUNCDECL_RPL (lchown, int, (char const *file, uid_t owner, gid_t group) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (lchown, int, (char const *file, uid_t owner, gid_t group)); # else # if !@HAVE_LCHOWN@ _GL_FUNCDECL_SYS (lchown, int, (char const *file, uid_t owner, gid_t group) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (lchown, int, (char const *file, uid_t owner, gid_t group)); # endif _GL_CXXALIASWARN (lchown); #elif defined GNULIB_POSIXCHECK # undef lchown # if HAVE_RAW_DECL_LCHOWN _GL_WARN_ON_USE (lchown, "lchown is unportable to pre-POSIX.1-2001 systems - " "use gnulib module lchown for portability"); # endif #endif #if @GNULIB_LINK@ /* Create a new hard link for an existing file. Return 0 if successful, otherwise -1 and errno set. See POSIX:2008 specification . */ # if @REPLACE_LINK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define link rpl_link # endif _GL_FUNCDECL_RPL (link, int, (const char *path1, const char *path2) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (link, int, (const char *path1, const char *path2)); # else # if !@HAVE_LINK@ _GL_FUNCDECL_SYS (link, int, (const char *path1, const char *path2) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (link, int, (const char *path1, const char *path2)); # endif _GL_CXXALIASWARN (link); #elif defined GNULIB_POSIXCHECK # undef link # if HAVE_RAW_DECL_LINK _GL_WARN_ON_USE (link, "link is unportable - " "use gnulib module link for portability"); # endif #endif #if @GNULIB_LINKAT@ /* Create a new hard link for an existing file, relative to two directories. FLAG controls whether symlinks are followed. Return 0 if successful, otherwise -1 and errno set. */ # if @REPLACE_LINKAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef linkat # define linkat rpl_linkat # endif _GL_FUNCDECL_RPL (linkat, int, (int fd1, const char *path1, int fd2, const char *path2, int flag) _GL_ARG_NONNULL ((2, 4))); _GL_CXXALIAS_RPL (linkat, int, (int fd1, const char *path1, int fd2, const char *path2, int flag)); # else # if !@HAVE_LINKAT@ _GL_FUNCDECL_SYS (linkat, int, (int fd1, const char *path1, int fd2, const char *path2, int flag) _GL_ARG_NONNULL ((2, 4))); # endif _GL_CXXALIAS_SYS (linkat, int, (int fd1, const char *path1, int fd2, const char *path2, int flag)); # endif _GL_CXXALIASWARN (linkat); #elif defined GNULIB_POSIXCHECK # undef linkat # if HAVE_RAW_DECL_LINKAT _GL_WARN_ON_USE (linkat, "linkat is unportable - " "use gnulib module linkat for portability"); # endif #endif #if @GNULIB_LSEEK@ /* Set the offset of FD relative to SEEK_SET, SEEK_CUR, or SEEK_END. Return the new offset if successful, otherwise -1 and errno set. See the POSIX:2008 specification . */ # if @REPLACE_LSEEK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define lseek rpl_lseek # endif _GL_FUNCDECL_RPL (lseek, off_t, (int fd, off_t offset, int whence)); _GL_CXXALIAS_RPL (lseek, off_t, (int fd, off_t offset, int whence)); # else _GL_CXXALIAS_SYS (lseek, off_t, (int fd, off_t offset, int whence)); # endif _GL_CXXALIASWARN (lseek); #elif defined GNULIB_POSIXCHECK # undef lseek # if HAVE_RAW_DECL_LSEEK _GL_WARN_ON_USE (lseek, "lseek does not fail with ESPIPE on pipes on some " "systems - use gnulib module lseek for portability"); # endif #endif #if @GNULIB_PIPE@ /* Create a pipe, defaulting to O_BINARY mode. Store the read-end as fd[0] and the write-end as fd[1]. Return 0 upon success, or -1 with errno set upon failure. */ # if !@HAVE_PIPE@ _GL_FUNCDECL_SYS (pipe, int, (int fd[2]) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pipe, int, (int fd[2])); _GL_CXXALIASWARN (pipe); #elif defined GNULIB_POSIXCHECK # undef pipe # if HAVE_RAW_DECL_PIPE _GL_WARN_ON_USE (pipe, "pipe is unportable - " "use gnulib module pipe-posix for portability"); # endif #endif #if @GNULIB_PIPE2@ /* Create a pipe, applying the given flags when opening the read-end of the pipe and the write-end of the pipe. The flags are a bitmask, possibly including O_CLOEXEC (defined in ) and O_TEXT, O_BINARY (defined in "binary-io.h"). Store the read-end as fd[0] and the write-end as fd[1]. Return 0 upon success, or -1 with errno set upon failure. See also the Linux man page at . */ # if @HAVE_PIPE2@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define pipe2 rpl_pipe2 # endif _GL_FUNCDECL_RPL (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pipe2, int, (int fd[2], int flags)); # else _GL_FUNCDECL_SYS (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_SYS (pipe2, int, (int fd[2], int flags)); # endif _GL_CXXALIASWARN (pipe2); #elif defined GNULIB_POSIXCHECK # undef pipe2 # if HAVE_RAW_DECL_PIPE2 _GL_WARN_ON_USE (pipe2, "pipe2 is unportable - " "use gnulib module pipe2 for portability"); # endif #endif #if @GNULIB_PREAD@ /* Read at most BUFSIZE bytes from FD into BUF, starting at OFFSET. Return the number of bytes placed into BUF if successful, otherwise set errno and return -1. 0 indicates EOF. See the POSIX:2008 specification . */ # if @REPLACE_PREAD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pread # define pread rpl_pread # endif _GL_FUNCDECL_RPL (pread, ssize_t, (int fd, void *buf, size_t bufsize, off_t offset) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (pread, ssize_t, (int fd, void *buf, size_t bufsize, off_t offset)); # else # if !@HAVE_PREAD@ _GL_FUNCDECL_SYS (pread, ssize_t, (int fd, void *buf, size_t bufsize, off_t offset) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (pread, ssize_t, (int fd, void *buf, size_t bufsize, off_t offset)); # endif _GL_CXXALIASWARN (pread); #elif defined GNULIB_POSIXCHECK # undef pread # if HAVE_RAW_DECL_PREAD _GL_WARN_ON_USE (pread, "pread is unportable - " "use gnulib module pread for portability"); # endif #endif #if @GNULIB_PWRITE@ /* Write at most BUFSIZE bytes from BUF into FD, starting at OFFSET. Return the number of bytes written if successful, otherwise set errno and return -1. 0 indicates nothing written. See the POSIX:2008 specification . */ # if @REPLACE_PWRITE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pwrite # define pwrite rpl_pwrite # endif _GL_FUNCDECL_RPL (pwrite, ssize_t, (int fd, const void *buf, size_t bufsize, off_t offset) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (pwrite, ssize_t, (int fd, const void *buf, size_t bufsize, off_t offset)); # else # if !@HAVE_PWRITE@ _GL_FUNCDECL_SYS (pwrite, ssize_t, (int fd, const void *buf, size_t bufsize, off_t offset) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (pwrite, ssize_t, (int fd, const void *buf, size_t bufsize, off_t offset)); # endif _GL_CXXALIASWARN (pwrite); #elif defined GNULIB_POSIXCHECK # undef pwrite # if HAVE_RAW_DECL_PWRITE _GL_WARN_ON_USE (pwrite, "pwrite is unportable - " "use gnulib module pwrite for portability"); # endif #endif #if @GNULIB_READ@ /* Read up to COUNT bytes from file descriptor FD into the buffer starting at BUF. See the POSIX:2008 specification . */ # if @REPLACE_READ@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef read # define read rpl_read # endif _GL_FUNCDECL_RPL (read, ssize_t, (int fd, void *buf, size_t count) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (read, ssize_t, (int fd, void *buf, size_t count)); # else /* Need to cast, because on mingw, the third parameter is unsigned int count and the return type is 'int'. */ _GL_CXXALIAS_SYS_CAST (read, ssize_t, (int fd, void *buf, size_t count)); # endif _GL_CXXALIASWARN (read); #endif #if @GNULIB_READLINK@ /* Read the contents of the symbolic link FILE and place the first BUFSIZE bytes of it into BUF. Return the number of bytes placed into BUF if successful, otherwise -1 and errno set. See the POSIX:2008 specification . */ # if @REPLACE_READLINK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define readlink rpl_readlink # endif _GL_FUNCDECL_RPL (readlink, ssize_t, (const char *file, char *buf, size_t bufsize) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (readlink, ssize_t, (const char *file, char *buf, size_t bufsize)); # else # if !@HAVE_READLINK@ _GL_FUNCDECL_SYS (readlink, ssize_t, (const char *file, char *buf, size_t bufsize) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (readlink, ssize_t, (const char *file, char *buf, size_t bufsize)); # endif _GL_CXXALIASWARN (readlink); #elif defined GNULIB_POSIXCHECK # undef readlink # if HAVE_RAW_DECL_READLINK _GL_WARN_ON_USE (readlink, "readlink is unportable - " "use gnulib module readlink for portability"); # endif #endif #if @GNULIB_READLINKAT@ # if @REPLACE_READLINKAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define readlinkat rpl_readlinkat # endif _GL_FUNCDECL_RPL (readlinkat, ssize_t, (int fd, char const *file, char *buf, size_t len) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (readlinkat, ssize_t, (int fd, char const *file, char *buf, size_t len)); # else # if !@HAVE_READLINKAT@ _GL_FUNCDECL_SYS (readlinkat, ssize_t, (int fd, char const *file, char *buf, size_t len) _GL_ARG_NONNULL ((2, 3))); # endif _GL_CXXALIAS_SYS (readlinkat, ssize_t, (int fd, char const *file, char *buf, size_t len)); # endif _GL_CXXALIASWARN (readlinkat); #elif defined GNULIB_POSIXCHECK # undef readlinkat # if HAVE_RAW_DECL_READLINKAT _GL_WARN_ON_USE (readlinkat, "readlinkat is not portable - " "use gnulib module readlinkat for portability"); # endif #endif #if @GNULIB_RMDIR@ /* Remove the directory DIR. */ # if @REPLACE_RMDIR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define rmdir rpl_rmdir # endif _GL_FUNCDECL_RPL (rmdir, int, (char const *name) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (rmdir, int, (char const *name)); # else _GL_CXXALIAS_SYS (rmdir, int, (char const *name)); # endif _GL_CXXALIASWARN (rmdir); #elif defined GNULIB_POSIXCHECK # undef rmdir # if HAVE_RAW_DECL_RMDIR _GL_WARN_ON_USE (rmdir, "rmdir is unportable - " "use gnulib module rmdir for portability"); # endif #endif #if @GNULIB_SETHOSTNAME@ /* Set the host name of the machine. The host name may or may not be fully qualified. Put LEN bytes of NAME into the host name. Return 0 if successful, otherwise, set errno and return -1. Platforms with no ability to set the hostname return -1 and set errno = ENOSYS. */ # if !@HAVE_SETHOSTNAME@ || !@HAVE_DECL_SETHOSTNAME@ _GL_FUNCDECL_SYS (sethostname, int, (const char *name, size_t len) _GL_ARG_NONNULL ((1))); # endif /* Need to cast, because on Solaris 11 2011-10, Mac OS X 10.5, IRIX 6.5 and FreeBSD 6.4 the second parameter is int. On Solaris 11 2011-10, the first parameter is not const. */ _GL_CXXALIAS_SYS_CAST (sethostname, int, (const char *name, size_t len)); _GL_CXXALIASWARN (sethostname); #elif defined GNULIB_POSIXCHECK # undef sethostname # if HAVE_RAW_DECL_SETHOSTNAME _GL_WARN_ON_USE (sethostname, "sethostname is unportable - " "use gnulib module sethostname for portability"); # endif #endif #if @GNULIB_SLEEP@ /* Pause the execution of the current thread for N seconds. Returns the number of seconds left to sleep. See the POSIX:2008 specification . */ # if @REPLACE_SLEEP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef sleep # define sleep rpl_sleep # endif _GL_FUNCDECL_RPL (sleep, unsigned int, (unsigned int n)); _GL_CXXALIAS_RPL (sleep, unsigned int, (unsigned int n)); # else # if !@HAVE_SLEEP@ _GL_FUNCDECL_SYS (sleep, unsigned int, (unsigned int n)); # endif _GL_CXXALIAS_SYS (sleep, unsigned int, (unsigned int n)); # endif _GL_CXXALIASWARN (sleep); #elif defined GNULIB_POSIXCHECK # undef sleep # if HAVE_RAW_DECL_SLEEP _GL_WARN_ON_USE (sleep, "sleep is unportable - " "use gnulib module sleep for portability"); # endif #endif #if @GNULIB_SYMLINK@ # if @REPLACE_SYMLINK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef symlink # define symlink rpl_symlink # endif _GL_FUNCDECL_RPL (symlink, int, (char const *contents, char const *file) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (symlink, int, (char const *contents, char const *file)); # else # if !@HAVE_SYMLINK@ _GL_FUNCDECL_SYS (symlink, int, (char const *contents, char const *file) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (symlink, int, (char const *contents, char const *file)); # endif _GL_CXXALIASWARN (symlink); #elif defined GNULIB_POSIXCHECK # undef symlink # if HAVE_RAW_DECL_SYMLINK _GL_WARN_ON_USE (symlink, "symlink is not portable - " "use gnulib module symlink for portability"); # endif #endif #if @GNULIB_SYMLINKAT@ # if @REPLACE_SYMLINKAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef symlinkat # define symlinkat rpl_symlinkat # endif _GL_FUNCDECL_RPL (symlinkat, int, (char const *contents, int fd, char const *file) _GL_ARG_NONNULL ((1, 3))); _GL_CXXALIAS_RPL (symlinkat, int, (char const *contents, int fd, char const *file)); # else # if !@HAVE_SYMLINKAT@ _GL_FUNCDECL_SYS (symlinkat, int, (char const *contents, int fd, char const *file) _GL_ARG_NONNULL ((1, 3))); # endif _GL_CXXALIAS_SYS (symlinkat, int, (char const *contents, int fd, char const *file)); # endif _GL_CXXALIASWARN (symlinkat); #elif defined GNULIB_POSIXCHECK # undef symlinkat # if HAVE_RAW_DECL_SYMLINKAT _GL_WARN_ON_USE (symlinkat, "symlinkat is not portable - " "use gnulib module symlinkat for portability"); # endif #endif #if @GNULIB_TRUNCATE@ /* Change the size of the file designated by FILENAME to become equal to LENGTH. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification . */ # if @REPLACE_TRUNCATE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef truncate # define truncate rpl_truncate # endif _GL_FUNCDECL_RPL (truncate, int, (const char *filename, off_t length) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (truncate, int, (const char *filename, off_t length)); # else # if !@HAVE_DECL_TRUNCATE@ _GL_FUNCDECL_SYS (truncate, int, (const char *filename, off_t length) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (truncate, int, (const char *filename, off_t length)); # endif _GL_CXXALIASWARN (truncate); #elif defined GNULIB_POSIXCHECK # undef truncate # if HAVE_RAW_DECL_TRUNCATE _GL_WARN_ON_USE (truncate, "truncate is unportable - " "use gnulib module truncate for portability"); # endif #endif #if @GNULIB_TTYNAME_R@ /* Store at most BUFLEN characters of the pathname of the terminal FD is open on in BUF. Return 0 on success, otherwise an error number. */ # if @REPLACE_TTYNAME_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ttyname_r # define ttyname_r rpl_ttyname_r # endif _GL_FUNCDECL_RPL (ttyname_r, int, (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (ttyname_r, int, (int fd, char *buf, size_t buflen)); # else # if !@HAVE_DECL_TTYNAME_R@ _GL_FUNCDECL_SYS (ttyname_r, int, (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (ttyname_r, int, (int fd, char *buf, size_t buflen)); # endif _GL_CXXALIASWARN (ttyname_r); #elif defined GNULIB_POSIXCHECK # undef ttyname_r # if HAVE_RAW_DECL_TTYNAME_R _GL_WARN_ON_USE (ttyname_r, "ttyname_r is not portable - " "use gnulib module ttyname_r for portability"); # endif #endif #if @GNULIB_UNLINK@ # if @REPLACE_UNLINK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef unlink # define unlink rpl_unlink # endif _GL_FUNCDECL_RPL (unlink, int, (char const *file) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (unlink, int, (char const *file)); # else _GL_CXXALIAS_SYS (unlink, int, (char const *file)); # endif _GL_CXXALIASWARN (unlink); #elif defined GNULIB_POSIXCHECK # undef unlink # if HAVE_RAW_DECL_UNLINK _GL_WARN_ON_USE (unlink, "unlink is not portable - " "use gnulib module unlink for portability"); # endif #endif #if @GNULIB_UNLINKAT@ # if @REPLACE_UNLINKAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef unlinkat # define unlinkat rpl_unlinkat # endif _GL_FUNCDECL_RPL (unlinkat, int, (int fd, char const *file, int flag) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (unlinkat, int, (int fd, char const *file, int flag)); # else # if !@HAVE_UNLINKAT@ _GL_FUNCDECL_SYS (unlinkat, int, (int fd, char const *file, int flag) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (unlinkat, int, (int fd, char const *file, int flag)); # endif _GL_CXXALIASWARN (unlinkat); #elif defined GNULIB_POSIXCHECK # undef unlinkat # if HAVE_RAW_DECL_UNLINKAT _GL_WARN_ON_USE (unlinkat, "unlinkat is not portable - " "use gnulib module openat for portability"); # endif #endif #if @GNULIB_USLEEP@ /* Pause the execution of the current thread for N microseconds. Returns 0 on completion, or -1 on range error. See the POSIX:2001 specification . */ # if @REPLACE_USLEEP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef usleep # define usleep rpl_usleep # endif _GL_FUNCDECL_RPL (usleep, int, (useconds_t n)); _GL_CXXALIAS_RPL (usleep, int, (useconds_t n)); # else # if !@HAVE_USLEEP@ _GL_FUNCDECL_SYS (usleep, int, (useconds_t n)); # endif /* Need to cast, because on Haiku, the first parameter is unsigned int n. */ _GL_CXXALIAS_SYS_CAST (usleep, int, (useconds_t n)); # endif _GL_CXXALIASWARN (usleep); #elif defined GNULIB_POSIXCHECK # undef usleep # if HAVE_RAW_DECL_USLEEP _GL_WARN_ON_USE (usleep, "usleep is unportable - " "use gnulib module usleep for portability"); # endif #endif #if @GNULIB_WRITE@ /* Write up to COUNT bytes starting at BUF to file descriptor FD. See the POSIX:2008 specification . */ # if @REPLACE_WRITE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef write # define write rpl_write # endif _GL_FUNCDECL_RPL (write, ssize_t, (int fd, const void *buf, size_t count) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (write, ssize_t, (int fd, const void *buf, size_t count)); # else /* Need to cast, because on mingw, the third parameter is unsigned int count and the return type is 'int'. */ _GL_CXXALIAS_SYS_CAST (write, ssize_t, (int fd, const void *buf, size_t count)); # endif _GL_CXXALIASWARN (write); #endif _GL_INLINE_HEADER_END #endif /* _@GUARD_PREFIX@_UNISTD_H */ #endif /* _GL_INCLUDING_UNISTD_H */ #endif /* _@GUARD_PREFIX@_UNISTD_H */ make-4.3/lib/xalloc-die.c0000644000175000017500000000243513611136472012161 00000000000000/* Report a memory allocation failure and exit. Copyright (C) 1997-2000, 2002-2004, 2006, 2009-2020 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 the Free Software Foundation; either version 3 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, see . */ #include #include "xalloc.h" #include #include "error.h" #include "exitfail.h" #include "gettext.h" #define _(msgid) gettext (msgid) void xalloc_die (void) { error (exit_failure, 0, "%s", _("memory exhausted")); /* _Noreturn cannot be given to error, since it may return if its first argument is 0. To help compilers understand the xalloc_die does not return, call abort. Also, the abort is a safety feature if exit_failure is 0 (which shouldn't happen). */ abort (); } make-4.3/lib/gettext.h0000644000175000017500000002476413611136471011641 00000000000000/* Convenience header for conditional use of GNU . Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2020 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 the Free Software Foundation; either version 3, 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, see . */ #ifndef _LIBGETTEXT_H #define _LIBGETTEXT_H 1 /* NLS can be disabled through the configure --disable-nls option or through "#define ENABLE NLS 0" before including this file. */ #if defined ENABLE_NLS && ENABLE_NLS /* Get declarations of GNU message catalog functions. */ # include /* You can set the DEFAULT_TEXT_DOMAIN macro to specify the domain used by the gettext() and ngettext() macros. This is an alternative to calling textdomain(), and is useful for libraries. */ # ifdef DEFAULT_TEXT_DOMAIN # undef gettext # define gettext(Msgid) \ dgettext (DEFAULT_TEXT_DOMAIN, Msgid) # undef ngettext # define ngettext(Msgid1, Msgid2, N) \ dngettext (DEFAULT_TEXT_DOMAIN, Msgid1, Msgid2, N) # endif #else /* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which chokes if dcgettext is defined as a macro. So include it now, to make later inclusions of a NOP. We don't include as well because people using "gettext.h" will not include , and also including would fail on SunOS 4, whereas is OK. */ #if defined(__sun) # include #endif /* Many header files from the libstdc++ coming with g++ 3.3 or newer include , which chokes if dcgettext is defined as a macro. So include it now, to make later inclusions of a NOP. */ #if defined(__cplusplus) && defined(__GNUG__) && (__GNUC__ >= 3) # include # if (__GLIBC__ >= 2 && !defined __UCLIBC__) || _GLIBCXX_HAVE_LIBINTL_H # include # endif #endif /* Disabled NLS. The casts to 'const char *' serve the purpose of producing warnings for invalid uses of the value returned from these functions. On pre-ANSI systems without 'const', the config.h file is supposed to contain "#define const". */ # undef gettext # define gettext(Msgid) ((const char *) (Msgid)) # undef dgettext # define dgettext(Domainname, Msgid) ((void) (Domainname), gettext (Msgid)) # undef dcgettext # define dcgettext(Domainname, Msgid, Category) \ ((void) (Category), dgettext (Domainname, Msgid)) # undef ngettext # define ngettext(Msgid1, Msgid2, N) \ ((N) == 1 \ ? ((void) (Msgid2), (const char *) (Msgid1)) \ : ((void) (Msgid1), (const char *) (Msgid2))) # undef dngettext # define dngettext(Domainname, Msgid1, Msgid2, N) \ ((void) (Domainname), ngettext (Msgid1, Msgid2, N)) # undef dcngettext # define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \ ((void) (Category), dngettext (Domainname, Msgid1, Msgid2, N)) # undef textdomain # define textdomain(Domainname) ((const char *) (Domainname)) # undef bindtextdomain # define bindtextdomain(Domainname, Dirname) \ ((void) (Domainname), (const char *) (Dirname)) # undef bind_textdomain_codeset # define bind_textdomain_codeset(Domainname, Codeset) \ ((void) (Domainname), (const char *) (Codeset)) #endif /* Prefer gnulib's setlocale override over libintl's setlocale override. */ #ifdef GNULIB_defined_setlocale # undef setlocale # define setlocale rpl_setlocale #endif /* A pseudo function call that serves as a marker for the automated extraction of messages, but does not call gettext(). The run-time translation is done at a different place in the code. The argument, String, should be a literal string. Concatenated strings and other string expressions won't work. The macro's expansion is not parenthesized, so that it is suitable as initializer for static 'char[]' or 'const char[]' variables. */ #define gettext_noop(String) String /* The separator between msgctxt and msgid in a .mo file. */ #define GETTEXT_CONTEXT_GLUE "\004" /* Pseudo function calls, taking a MSGCTXT and a MSGID instead of just a MSGID. MSGCTXT and MSGID must be string literals. MSGCTXT should be short and rarely need to change. The letter 'p' stands for 'particular' or 'special'. */ #ifdef DEFAULT_TEXT_DOMAIN # define pgettext(Msgctxt, Msgid) \ pgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) #else # define pgettext(Msgctxt, Msgid) \ pgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) #endif #define dpgettext(Domainname, Msgctxt, Msgid) \ pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) #define dcpgettext(Domainname, Msgctxt, Msgid, Category) \ pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, Category) #ifdef DEFAULT_TEXT_DOMAIN # define npgettext(Msgctxt, Msgid, MsgidPlural, N) \ npgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) #else # define npgettext(Msgctxt, Msgid, MsgidPlural, N) \ npgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) #endif #define dnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N) \ npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) #define dcnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N, Category) \ npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, Category) #ifdef __GNUC__ __inline #else #ifdef __cplusplus inline #endif #endif static const char * pgettext_aux (const char *domain, const char *msg_ctxt_id, const char *msgid, int category) { const char *translation = dcgettext (domain, msg_ctxt_id, category); if (translation == msg_ctxt_id) return msgid; else return translation; } #ifdef __GNUC__ __inline #else #ifdef __cplusplus inline #endif #endif static const char * npgettext_aux (const char *domain, const char *msg_ctxt_id, const char *msgid, const char *msgid_plural, unsigned long int n, int category) { const char *translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category); if (translation == msg_ctxt_id || translation == msgid_plural) return (n == 1 ? msgid : msgid_plural); else return translation; } /* The same thing extended for non-constant arguments. Here MSGCTXT and MSGID can be arbitrary expressions. But for string literals these macros are less efficient than those above. */ #include /* GNULIB_NO_VLA can be defined to disable use of VLAs even if supported. This relates to the -Wvla and -Wvla-larger-than warnings, enabled in the default GCC many warnings set. This allows programs to disable use of VLAs, which may be unintended, or may be awkward to support portably, or may have security implications due to non-deterministic stack usage. */ #if (!defined GNULIB_NO_VLA \ && (((__GNUC__ >= 3 || __GNUG__ >= 2) && !defined __STRICT_ANSI__) \ /* || (__STDC_VERSION__ == 199901L && !defined __HP_cc) || (__STDC_VERSION__ >= 201112L && !defined __STDC_NO_VLA__) */ )) # define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 1 #else # define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 0 #endif #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS #include #endif #define pgettext_expr(Msgctxt, Msgid) \ dcpgettext_expr (NULL, Msgctxt, Msgid, LC_MESSAGES) #define dpgettext_expr(Domainname, Msgctxt, Msgid) \ dcpgettext_expr (Domainname, Msgctxt, Msgid, LC_MESSAGES) #ifdef __GNUC__ __inline #else #ifdef __cplusplus inline #endif #endif static const char * dcpgettext_expr (const char *domain, const char *msgctxt, const char *msgid, int category) { size_t msgctxt_len = strlen (msgctxt) + 1; size_t msgid_len = strlen (msgid) + 1; const char *translation; #if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS char msg_ctxt_id[msgctxt_len + msgid_len]; #else char buf[1024]; char *msg_ctxt_id = (msgctxt_len + msgid_len <= sizeof (buf) ? buf : (char *) malloc (msgctxt_len + msgid_len)); if (msg_ctxt_id != NULL) #endif { int found_translation; memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1); msg_ctxt_id[msgctxt_len - 1] = '\004'; memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len); translation = dcgettext (domain, msg_ctxt_id, category); found_translation = (translation != msg_ctxt_id); #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS if (msg_ctxt_id != buf) free (msg_ctxt_id); #endif if (found_translation) return translation; } return msgid; } #define npgettext_expr(Msgctxt, Msgid, MsgidPlural, N) \ dcnpgettext_expr (NULL, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES) #define dnpgettext_expr(Domainname, Msgctxt, Msgid, MsgidPlural, N) \ dcnpgettext_expr (Domainname, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES) #ifdef __GNUC__ __inline #else #ifdef __cplusplus inline #endif #endif static const char * dcnpgettext_expr (const char *domain, const char *msgctxt, const char *msgid, const char *msgid_plural, unsigned long int n, int category) { size_t msgctxt_len = strlen (msgctxt) + 1; size_t msgid_len = strlen (msgid) + 1; const char *translation; #if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS char msg_ctxt_id[msgctxt_len + msgid_len]; #else char buf[1024]; char *msg_ctxt_id = (msgctxt_len + msgid_len <= sizeof (buf) ? buf : (char *) malloc (msgctxt_len + msgid_len)); if (msg_ctxt_id != NULL) #endif { int found_translation; memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1); msg_ctxt_id[msgctxt_len - 1] = '\004'; memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len); translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category); found_translation = !(translation == msg_ctxt_id || translation == msgid_plural); #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS if (msg_ctxt_id != buf) free (msg_ctxt_id); #endif if (found_translation) return translation; } return (n == 1 ? msgid : msgid_plural); } #endif /* _LIBGETTEXT_H */ make-4.3/lib/dirname.h0000644000175000017500000000302513611136471011557 00000000000000/* Take file names apart into directory and base names. Copyright (C) 1998, 2001, 2003-2006, 2009-2020 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 the Free Software Foundation; either version 3 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, see . */ #ifndef DIRNAME_H_ # define DIRNAME_H_ 1 # include # include # include "dosname.h" # ifndef DIRECTORY_SEPARATOR # define DIRECTORY_SEPARATOR '/' # endif # ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT # define DOUBLE_SLASH_IS_DISTINCT_ROOT 0 # endif #ifdef __cplusplus extern "C" { #endif # if GNULIB_DIRNAME char *base_name (char const *file) _GL_ATTRIBUTE_MALLOC; char *dir_name (char const *file); # endif char *mdir_name (char const *file); size_t base_len (char const *file) _GL_ATTRIBUTE_PURE; size_t dir_len (char const *file) _GL_ATTRIBUTE_PURE; char *last_component (char const *file) _GL_ATTRIBUTE_PURE; bool strip_trailing_slashes (char *file); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* not DIRNAME_H_ */ make-4.3/lib/strerror.c0000644000175000017500000000405313611136472012020 00000000000000/* strerror.c --- POSIX compatible system error routine Copyright (C) 2007-2020 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 the Free Software Foundation; either version 3 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, see . */ #include /* Specification. */ #include #include #include #include #include #include "intprops.h" #include "strerror-override.h" #include "verify.h" /* Use the system functions, not the gnulib overrides in this file. */ #undef sprintf char * strerror (int n) #undef strerror { static char buf[STACKBUF_LEN]; size_t len; /* Cast away const, due to the historical signature of strerror; callers should not be modifying the string. */ const char *msg = strerror_override (n); if (msg) return (char *) msg; msg = strerror (n); /* Our strerror_r implementation might use the system's strerror buffer, so all other clients of strerror have to see the error copied into a buffer that we manage. This is not thread-safe, even if the system strerror is, but portable programs shouldn't be using strerror if they care about thread-safety. */ if (!msg || !*msg) { static char const fmt[] = "Unknown error %d"; verify (sizeof buf >= sizeof (fmt) + INT_STRLEN_BOUND (n)); sprintf (buf, fmt, n); errno = EINVAL; return buf; } /* Fix STACKBUF_LEN if this ever aborts. */ len = strlen (msg); if (sizeof buf <= len) abort (); memcpy (buf, msg, len + 1); return buf; } make-4.3/lib/c++defs.h0000644000175000017500000003413013611136471011353 00000000000000/* C++ compatible function declaration macros. Copyright (C) 2010-2020 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 the Free Software Foundation; either version 3 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, see . */ #ifndef _GL_CXXDEFS_H #define _GL_CXXDEFS_H /* Begin/end the GNULIB_NAMESPACE namespace. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { # define _GL_END_NAMESPACE } #else # define _GL_BEGIN_NAMESPACE # define _GL_END_NAMESPACE #endif /* The three most frequent use cases of these macros are: * For providing a substitute for a function that is missing on some platforms, but is declared and works fine on the platforms on which it exists: #if @GNULIB_FOO@ # if !@HAVE_FOO@ _GL_FUNCDECL_SYS (foo, ...); # endif _GL_CXXALIAS_SYS (foo, ...); _GL_CXXALIASWARN (foo); #elif defined GNULIB_POSIXCHECK ... #endif * For providing a replacement for a function that exists on all platforms, but is broken/insufficient and needs to be replaced on some platforms: #if @GNULIB_FOO@ # if @REPLACE_FOO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef foo # define foo rpl_foo # endif _GL_FUNCDECL_RPL (foo, ...); _GL_CXXALIAS_RPL (foo, ...); # else _GL_CXXALIAS_SYS (foo, ...); # endif _GL_CXXALIASWARN (foo); #elif defined GNULIB_POSIXCHECK ... #endif * For providing a replacement for a function that exists on some platforms but is broken/insufficient and needs to be replaced on some of them and is additionally either missing or undeclared on some other platforms: #if @GNULIB_FOO@ # if @REPLACE_FOO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef foo # define foo rpl_foo # endif _GL_FUNCDECL_RPL (foo, ...); _GL_CXXALIAS_RPL (foo, ...); # else # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ _GL_FUNCDECL_SYS (foo, ...); # endif _GL_CXXALIAS_SYS (foo, ...); # endif _GL_CXXALIASWARN (foo); #elif defined GNULIB_POSIXCHECK ... #endif */ /* _GL_EXTERN_C declaration; performs the declaration with C linkage. */ #if defined __cplusplus # define _GL_EXTERN_C extern "C" #else # define _GL_EXTERN_C extern #endif /* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); declares a replacement function, named rpl_func, with the given prototype, consisting of return type, parameters, and attributes. Example: _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) _GL_ARG_NONNULL ((1))); */ #define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) #define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ _GL_EXTERN_C rettype rpl_func parameters_and_attributes /* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); declares the system function, named func, with the given prototype, consisting of return type, parameters, and attributes. Example: _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) _GL_ARG_NONNULL ((1))); */ #define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ _GL_EXTERN_C rettype func parameters_and_attributes /* _GL_CXXALIAS_RPL (func, rettype, parameters); declares a C++ alias called GNULIB_NAMESPACE::func that redirects to rpl_func, if GNULIB_NAMESPACE is defined. Example: _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); Wrapping rpl_func in an object with an inline conversion operator avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is actually used in the program. */ #define _GL_CXXALIAS_RPL(func,rettype,parameters) \ _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return ::rpl_func; \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); except that the C function rpl_func may have a slightly different declaration. A cast is used to silence the "invalid conversion" error that would otherwise occur. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return reinterpret_cast(::rpl_func); \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_SYS (func, rettype, parameters); declares a C++ alias called GNULIB_NAMESPACE::func that redirects to the system provided function func, if GNULIB_NAMESPACE is defined. Example: _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); Wrapping func in an object with an inline conversion operator avoids a reference to func unless GNULIB_NAMESPACE::func is actually used in the program. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_SYS(func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return ::func; \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_SYS(func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); is like _GL_CXXALIAS_SYS (func, rettype, parameters); except that the C function func may have a slightly different declaration. A cast is used to silence the "invalid conversion" error that would otherwise occur. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return reinterpret_cast(::func); \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); is like _GL_CXXALIAS_SYS (func, rettype, parameters); except that the C function is picked among a set of overloaded functions, namely the one with rettype2 and parameters2. Two consecutive casts are used to silence the "cannot find a match" and "invalid conversion" errors that would otherwise occur. */ #if defined __cplusplus && defined GNULIB_NAMESPACE /* The outer cast must be a reinterpret_cast. The inner cast: When the function is defined as a set of overloaded functions, it works as a static_cast<>, choosing the designated variant. When the function is defined as a single variant, it works as a reinterpret_cast<>. The parenthesized cast syntax works both ways. */ # define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return reinterpret_cast((rettype2 (*) parameters2)(::func)); \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIASWARN (func); causes a warning to be emitted when ::func is used but not when GNULIB_NAMESPACE::func is used. func must be defined without overloaded variants. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIASWARN(func) \ _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) # define _GL_CXXALIASWARN_1(func,namespace) \ _GL_CXXALIASWARN_2 (func, namespace) /* To work around GCC bug , we enable the warning only when not optimizing. */ # if !__OPTIMIZE__ # define _GL_CXXALIASWARN_2(func,namespace) \ _GL_WARN_ON_USE (func, \ "The symbol ::" #func " refers to the system function. " \ "Use " #namespace "::" #func " instead.") # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING # define _GL_CXXALIASWARN_2(func,namespace) \ extern __typeof__ (func) func # else # define _GL_CXXALIASWARN_2(func,namespace) \ _GL_EXTERN_C int _gl_cxxalias_dummy # endif #else # define _GL_CXXALIASWARN(func) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); causes a warning to be emitted when the given overloaded variant of ::func is used but not when GNULIB_NAMESPACE::func is used. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ GNULIB_NAMESPACE) # define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) /* To work around GCC bug , we enable the warning only when not optimizing. */ # if !__OPTIMIZE__ # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \ "The symbol ::" #func " refers to the system function. " \ "Use " #namespace "::" #func " instead.") # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ extern __typeof__ (func) func # else # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ _GL_EXTERN_C int _gl_cxxalias_dummy # endif #else # define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif #endif /* _GL_CXXDEFS_H */ make-4.3/lib/stdio.in.h0000644000175000017500000014644613611136472011707 00000000000000/* A GNU-like . Copyright (C) 2004, 2007-2020 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 the Free Software Foundation; either version 3, 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, see . */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_FILE || defined __need___FILE || defined _GL_ALREADY_INCLUDING_STDIO_H /* Special invocation convention: - Inside glibc header files. - On OSF/1 5.1 we have a sequence of nested includes -> -> -> -> -> -> -> . In this situation, the functions are not yet declared, therefore we cannot provide the C++ aliases. */ #@INCLUDE_NEXT@ @NEXT_STDIO_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_STDIO_H #define _GL_ALREADY_INCLUDING_STDIO_H /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_STDIO_H@ #undef _GL_ALREADY_INCLUDING_STDIO_H #ifndef _@GUARD_PREFIX@_STDIO_H #define _@GUARD_PREFIX@_STDIO_H /* Get va_list. Needed on many systems, including glibc 2.8. */ #include #include /* Get off_t and ssize_t. Needed on many systems, including glibc 2.8 and eglibc 2.11.2. May also define off_t to a 64-bit type on native Windows. */ #include /* The __attribute__ feature is available in gcc versions 2.5 and later. The __-protected variants of the attributes 'format' and 'printf' are accepted by gcc versions 2.6.4 (effectively 2.7) and later. We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because gnulib and libintl do '#define printf __printf__' when they override the 'printf' function. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) # define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) #else # define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ #endif /* _GL_ATTRIBUTE_FORMAT_PRINTF indicates to GCC that the function takes a format string and arguments, where the format string directives are the ones standardized by ISO C99 and POSIX. */ #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) # define _GL_ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__gnu_printf__, formatstring_parameter, first_argument)) #else # define _GL_ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__printf__, formatstring_parameter, first_argument)) #endif /* _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_PRINTF, except that it indicates to GCC that the supported format string directives are the ones of the system printf(), rather than the ones standardized by ISO C99 and POSIX. */ #if GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU # define _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT_PRINTF (formatstring_parameter, first_argument) #else # define _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__printf__, formatstring_parameter, first_argument)) #endif /* _GL_ATTRIBUTE_FORMAT_SCANF indicates to GCC that the function takes a format string and arguments, where the format string directives are the ones standardized by ISO C99 and POSIX. */ #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) # define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__gnu_scanf__, formatstring_parameter, first_argument)) #else # define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument)) #endif /* _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_SCANF, except that it indicates to GCC that the supported format string directives are the ones of the system scanf(), rather than the ones standardized by ISO C99 and POSIX. */ #define _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument)) /* Solaris 10 and NetBSD 7.0 declare renameat in , not in . */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_RENAMEAT@ || defined GNULIB_POSIXCHECK) && (defined __sun || defined __NetBSD__) \ && ! defined __GLIBC__ # include #endif /* Android 4.3 declares renameat in , not in . */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_RENAMEAT@ || defined GNULIB_POSIXCHECK) && defined __ANDROID__ \ && ! defined __GLIBC__ # include #endif /* MSVC declares 'perror' in , not in . We must include it before we #define perror rpl_perror. */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_PERROR@ || defined GNULIB_POSIXCHECK) \ && (defined _WIN32 && ! defined __CYGWIN__) \ && ! defined __GLIBC__ # include #endif /* MSVC declares 'remove' in , not in . We must include it before we #define remove rpl_remove. */ /* MSVC declares 'rename' in , not in . We must include it before we #define rename rpl_rename. */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_REMOVE@ || @GNULIB_RENAME@ || defined GNULIB_POSIXCHECK) \ && (defined _WIN32 && ! defined __CYGWIN__) \ && ! defined __GLIBC__ # include #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Macros for stringification. */ #define _GL_STDIO_STRINGIZE(token) #token #define _GL_STDIO_MACROEXPAND_AND_STRINGIZE(token) _GL_STDIO_STRINGIZE(token) /* When also using extern inline, suppress the use of static inline in standard headers of problematic Apple configurations, as Libc at least through Libc-825.26 (2013-04-09) mishandles it; see, e.g., . Perhaps Apple will fix this some day. */ #if (defined _GL_EXTERN_INLINE_IN_USE && defined __APPLE__ \ && defined __GNUC__ && defined __STDC__) # undef putc_unlocked #endif #if @GNULIB_DPRINTF@ # if @REPLACE_DPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define dprintf rpl_dprintf # endif _GL_FUNCDECL_RPL (dprintf, int, (int fd, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (dprintf, int, (int fd, const char *format, ...)); # else # if !@HAVE_DPRINTF@ _GL_FUNCDECL_SYS (dprintf, int, (int fd, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (dprintf, int, (int fd, const char *format, ...)); # endif _GL_CXXALIASWARN (dprintf); #elif defined GNULIB_POSIXCHECK # undef dprintf # if HAVE_RAW_DECL_DPRINTF _GL_WARN_ON_USE (dprintf, "dprintf is unportable - " "use gnulib module dprintf for portability"); # endif #endif #if @GNULIB_FCLOSE@ /* Close STREAM and its underlying file descriptor. */ # if @REPLACE_FCLOSE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define fclose rpl_fclose # endif _GL_FUNCDECL_RPL (fclose, int, (FILE *stream) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fclose, int, (FILE *stream)); # else _GL_CXXALIAS_SYS (fclose, int, (FILE *stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fclose); # endif #elif defined GNULIB_POSIXCHECK # undef fclose /* Assume fclose is always declared. */ _GL_WARN_ON_USE (fclose, "fclose is not always POSIX compliant - " "use gnulib module fclose for portable POSIX compliance"); #endif #if @GNULIB_FDOPEN@ # if @REPLACE_FDOPEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fdopen # define fdopen rpl_fdopen # endif _GL_FUNCDECL_RPL (fdopen, FILE *, (int fd, const char *mode) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (fdopen, FILE *, (int fd, const char *mode)); # else _GL_CXXALIAS_SYS (fdopen, FILE *, (int fd, const char *mode)); # endif _GL_CXXALIASWARN (fdopen); #elif defined GNULIB_POSIXCHECK # undef fdopen /* Assume fdopen is always declared. */ _GL_WARN_ON_USE (fdopen, "fdopen on native Windows platforms is not POSIX compliant - " "use gnulib module fdopen for portability"); #endif #if @GNULIB_FFLUSH@ /* Flush all pending data on STREAM according to POSIX rules. Both output and seekable input streams are supported. Note! LOSS OF DATA can occur if fflush is applied on an input stream that is _not_seekable_ or on an update stream that is _not_seekable_ and in which the most recent operation was input. Seekability can be tested with lseek(fileno(fp),0,SEEK_CUR). */ # if @REPLACE_FFLUSH@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define fflush rpl_fflush # endif _GL_FUNCDECL_RPL (fflush, int, (FILE *gl_stream)); _GL_CXXALIAS_RPL (fflush, int, (FILE *gl_stream)); # else _GL_CXXALIAS_SYS (fflush, int, (FILE *gl_stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fflush); # endif #elif defined GNULIB_POSIXCHECK # undef fflush /* Assume fflush is always declared. */ _GL_WARN_ON_USE (fflush, "fflush is not always POSIX compliant - " "use gnulib module fflush for portable POSIX compliance"); #endif #if @GNULIB_FGETC@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fgetc # define fgetc rpl_fgetc # endif _GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fgetc, int, (FILE *stream)); # else _GL_CXXALIAS_SYS (fgetc, int, (FILE *stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fgetc); # endif #endif #if @GNULIB_FGETS@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fgets # define fgets rpl_fgets # endif _GL_FUNCDECL_RPL (fgets, char *, (char *s, int n, FILE *stream) _GL_ARG_NONNULL ((1, 3))); _GL_CXXALIAS_RPL (fgets, char *, (char *s, int n, FILE *stream)); # else _GL_CXXALIAS_SYS (fgets, char *, (char *s, int n, FILE *stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fgets); # endif #endif #if @GNULIB_FOPEN@ # if @REPLACE_FOPEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fopen # define fopen rpl_fopen # endif _GL_FUNCDECL_RPL (fopen, FILE *, (const char *filename, const char *mode) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (fopen, FILE *, (const char *filename, const char *mode)); # else _GL_CXXALIAS_SYS (fopen, FILE *, (const char *filename, const char *mode)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fopen); # endif #elif defined GNULIB_POSIXCHECK # undef fopen /* Assume fopen is always declared. */ _GL_WARN_ON_USE (fopen, "fopen on native Windows platforms is not POSIX compliant - " "use gnulib module fopen for portability"); #endif #if @GNULIB_FPRINTF_POSIX@ || @GNULIB_FPRINTF@ # if (@GNULIB_FPRINTF_POSIX@ && @REPLACE_FPRINTF@) \ || (@GNULIB_FPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define fprintf rpl_fprintf # endif # define GNULIB_overrides_fprintf 1 # if @GNULIB_FPRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ _GL_FUNCDECL_RPL (fprintf, int, (FILE *fp, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) _GL_ARG_NONNULL ((1, 2))); # else _GL_FUNCDECL_RPL (fprintf, int, (FILE *fp, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 3) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_RPL (fprintf, int, (FILE *fp, const char *format, ...)); # else _GL_CXXALIAS_SYS (fprintf, int, (FILE *fp, const char *format, ...)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fprintf); # endif #endif #if !@GNULIB_FPRINTF_POSIX@ && defined GNULIB_POSIXCHECK # if !GNULIB_overrides_fprintf # undef fprintf # endif /* Assume fprintf is always declared. */ _GL_WARN_ON_USE (fprintf, "fprintf is not always POSIX compliant - " "use gnulib module fprintf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_FPURGE@ /* Discard all pending buffered I/O data on STREAM. STREAM must not be wide-character oriented. When discarding pending output, the file position is set back to where it was before the write calls. When discarding pending input, the file position is advanced to match the end of the previously read input. Return 0 if successful. Upon error, return -1 and set errno. */ # if @REPLACE_FPURGE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define fpurge rpl_fpurge # endif _GL_FUNCDECL_RPL (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fpurge, int, (FILE *gl_stream)); # else # if !@HAVE_DECL_FPURGE@ _GL_FUNCDECL_SYS (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (fpurge, int, (FILE *gl_stream)); # endif _GL_CXXALIASWARN (fpurge); #elif defined GNULIB_POSIXCHECK # undef fpurge # if HAVE_RAW_DECL_FPURGE _GL_WARN_ON_USE (fpurge, "fpurge is not always present - " "use gnulib module fpurge for portability"); # endif #endif #if @GNULIB_FPUTC@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fputc # define fputc rpl_fputc # endif _GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (fputc, int, (int c, FILE *stream)); # else _GL_CXXALIAS_SYS (fputc, int, (int c, FILE *stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fputc); # endif #endif #if @GNULIB_FPUTS@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fputs # define fputs rpl_fputs # endif _GL_FUNCDECL_RPL (fputs, int, (const char *string, FILE *stream) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (fputs, int, (const char *string, FILE *stream)); # else _GL_CXXALIAS_SYS (fputs, int, (const char *string, FILE *stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fputs); # endif #endif #if @GNULIB_FREAD@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fread # define fread rpl_fread # endif _GL_FUNCDECL_RPL (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream) _GL_ARG_NONNULL ((4))); _GL_CXXALIAS_RPL (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream)); # else _GL_CXXALIAS_SYS (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fread); # endif #endif #if @GNULIB_FREOPEN@ # if @REPLACE_FREOPEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef freopen # define freopen rpl_freopen # endif _GL_FUNCDECL_RPL (freopen, FILE *, (const char *filename, const char *mode, FILE *stream) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (freopen, FILE *, (const char *filename, const char *mode, FILE *stream)); # else _GL_CXXALIAS_SYS (freopen, FILE *, (const char *filename, const char *mode, FILE *stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (freopen); # endif #elif defined GNULIB_POSIXCHECK # undef freopen /* Assume freopen is always declared. */ _GL_WARN_ON_USE (freopen, "freopen on native Windows platforms is not POSIX compliant - " "use gnulib module freopen for portability"); #endif #if @GNULIB_FSCANF@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fscanf # define fscanf rpl_fscanf # endif _GL_FUNCDECL_RPL (fscanf, int, (FILE *stream, const char *format, ...) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 3) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (fscanf, int, (FILE *stream, const char *format, ...)); # else _GL_CXXALIAS_SYS (fscanf, int, (FILE *stream, const char *format, ...)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fscanf); # endif #endif /* Set up the following warnings, based on which modules are in use. GNU Coding Standards discourage the use of fseek, since it imposes an arbitrary limitation on some 32-bit hosts. Remember that the fseek module depends on the fseeko module, so we only have three cases to consider: 1. The developer is not using either module. Issue a warning under GNULIB_POSIXCHECK for both functions, to remind them that both functions have bugs on some systems. _GL_NO_LARGE_FILES has no impact on this warning. 2. The developer is using both modules. They may be unaware of the arbitrary limitations of fseek, so issue a warning under GNULIB_POSIXCHECK. On the other hand, they may be using both modules intentionally, so the developer can define _GL_NO_LARGE_FILES in the compilation units where the use of fseek is safe, to silence the warning. 3. The developer is using the fseeko module, but not fseek. Gnulib guarantees that fseek will still work around platform bugs in that case, but we presume that the developer is aware of the pitfalls of fseek and was trying to avoid it, so issue a warning even when GNULIB_POSIXCHECK is undefined. Again, _GL_NO_LARGE_FILES can be defined to silence the warning in particular compilation units. In C++ compilations with GNULIB_NAMESPACE, in order to avoid that fseek gets defined as a macro, it is recommended that the developer uses the fseek module, even if he is not calling the fseek function. Most gnulib clients that perform stream operations should fall into category 3. */ #if @GNULIB_FSEEK@ # if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES # define _GL_FSEEK_WARN /* Category 2, above. */ # undef fseek # endif # if @REPLACE_FSEEK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fseek # define fseek rpl_fseek # endif _GL_FUNCDECL_RPL (fseek, int, (FILE *fp, long offset, int whence) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fseek, int, (FILE *fp, long offset, int whence)); # else _GL_CXXALIAS_SYS (fseek, int, (FILE *fp, long offset, int whence)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fseek); # endif #endif #if @GNULIB_FSEEKO@ # if !@GNULIB_FSEEK@ && !defined _GL_NO_LARGE_FILES # define _GL_FSEEK_WARN /* Category 3, above. */ # undef fseek # endif # if @REPLACE_FSEEKO@ /* Provide an fseeko function that is aware of a preceding fflush(), and which detects pipes. */ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fseeko # define fseeko rpl_fseeko # endif _GL_FUNCDECL_RPL (fseeko, int, (FILE *fp, off_t offset, int whence) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fseeko, int, (FILE *fp, off_t offset, int whence)); # else # if ! @HAVE_DECL_FSEEKO@ _GL_FUNCDECL_SYS (fseeko, int, (FILE *fp, off_t offset, int whence) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (fseeko, int, (FILE *fp, off_t offset, int whence)); # endif _GL_CXXALIASWARN (fseeko); #elif defined GNULIB_POSIXCHECK # define _GL_FSEEK_WARN /* Category 1, above. */ # undef fseek # undef fseeko # if HAVE_RAW_DECL_FSEEKO _GL_WARN_ON_USE (fseeko, "fseeko is unportable - " "use gnulib module fseeko for portability"); # endif #endif #ifdef _GL_FSEEK_WARN # undef _GL_FSEEK_WARN /* Here, either fseek is undefined (but C89 guarantees that it is declared), or it is defined as rpl_fseek (declared above). */ _GL_WARN_ON_USE (fseek, "fseek cannot handle files larger than 4 GB " "on 32-bit platforms - " "use fseeko function for handling of large files"); #endif /* ftell, ftello. See the comments on fseek/fseeko. */ #if @GNULIB_FTELL@ # if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES # define _GL_FTELL_WARN /* Category 2, above. */ # undef ftell # endif # if @REPLACE_FTELL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ftell # define ftell rpl_ftell # endif _GL_FUNCDECL_RPL (ftell, long, (FILE *fp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (ftell, long, (FILE *fp)); # else _GL_CXXALIAS_SYS (ftell, long, (FILE *fp)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (ftell); # endif #endif #if @GNULIB_FTELLO@ # if !@GNULIB_FTELL@ && !defined _GL_NO_LARGE_FILES # define _GL_FTELL_WARN /* Category 3, above. */ # undef ftell # endif # if @REPLACE_FTELLO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ftello # define ftello rpl_ftello # endif _GL_FUNCDECL_RPL (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (ftello, off_t, (FILE *fp)); # else # if ! @HAVE_DECL_FTELLO@ _GL_FUNCDECL_SYS (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (ftello, off_t, (FILE *fp)); # endif _GL_CXXALIASWARN (ftello); #elif defined GNULIB_POSIXCHECK # define _GL_FTELL_WARN /* Category 1, above. */ # undef ftell # undef ftello # if HAVE_RAW_DECL_FTELLO _GL_WARN_ON_USE (ftello, "ftello is unportable - " "use gnulib module ftello for portability"); # endif #endif #ifdef _GL_FTELL_WARN # undef _GL_FTELL_WARN /* Here, either ftell is undefined (but C89 guarantees that it is declared), or it is defined as rpl_ftell (declared above). */ _GL_WARN_ON_USE (ftell, "ftell cannot handle files larger than 4 GB " "on 32-bit platforms - " "use ftello function for handling of large files"); #endif #if @GNULIB_FWRITE@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fwrite # define fwrite rpl_fwrite # endif _GL_FUNCDECL_RPL (fwrite, size_t, (const void *ptr, size_t s, size_t n, FILE *stream) _GL_ARG_NONNULL ((1, 4))); _GL_CXXALIAS_RPL (fwrite, size_t, (const void *ptr, size_t s, size_t n, FILE *stream)); # else _GL_CXXALIAS_SYS (fwrite, size_t, (const void *ptr, size_t s, size_t n, FILE *stream)); /* Work around bug 11959 when fortifying glibc 2.4 through 2.15 , which sometimes causes an unwanted diagnostic for fwrite calls. This affects only function declaration attributes under certain versions of gcc and clang, and is not needed for C++. */ # if (0 < __USE_FORTIFY_LEVEL \ && __GLIBC__ == 2 && 4 <= __GLIBC_MINOR__ && __GLIBC_MINOR__ <= 15 \ && 3 < __GNUC__ + (4 <= __GNUC_MINOR__) \ && !defined __cplusplus) # undef fwrite # undef fwrite_unlocked extern size_t __REDIRECT (rpl_fwrite, (const void *__restrict, size_t, size_t, FILE *__restrict), fwrite); extern size_t __REDIRECT (rpl_fwrite_unlocked, (const void *__restrict, size_t, size_t, FILE *__restrict), fwrite_unlocked); # define fwrite rpl_fwrite # define fwrite_unlocked rpl_fwrite_unlocked # endif # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fwrite); # endif #endif #if @GNULIB_GETC@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getc # define getc rpl_fgetc # endif _GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL_1 (getc, rpl_fgetc, int, (FILE *stream)); # else _GL_CXXALIAS_SYS (getc, int, (FILE *stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (getc); # endif #endif #if @GNULIB_GETCHAR@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getchar # define getchar rpl_getchar # endif _GL_FUNCDECL_RPL (getchar, int, (void)); _GL_CXXALIAS_RPL (getchar, int, (void)); # else _GL_CXXALIAS_SYS (getchar, int, (void)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (getchar); # endif #endif #if @GNULIB_GETDELIM@ /* Read input, up to (and including) the next occurrence of DELIMITER, from STREAM, store it in *LINEPTR (and NUL-terminate it). *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE bytes of space. It is realloc'd as necessary. Return the number of bytes read and stored at *LINEPTR (not including the NUL terminator), or -1 on error or EOF. */ # if @REPLACE_GETDELIM@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getdelim # define getdelim rpl_getdelim # endif _GL_FUNCDECL_RPL (getdelim, ssize_t, (char **lineptr, size_t *linesize, int delimiter, FILE *stream) _GL_ARG_NONNULL ((1, 2, 4))); _GL_CXXALIAS_RPL (getdelim, ssize_t, (char **lineptr, size_t *linesize, int delimiter, FILE *stream)); # else # if !@HAVE_DECL_GETDELIM@ _GL_FUNCDECL_SYS (getdelim, ssize_t, (char **lineptr, size_t *linesize, int delimiter, FILE *stream) _GL_ARG_NONNULL ((1, 2, 4))); # endif _GL_CXXALIAS_SYS (getdelim, ssize_t, (char **lineptr, size_t *linesize, int delimiter, FILE *stream)); # endif _GL_CXXALIASWARN (getdelim); #elif defined GNULIB_POSIXCHECK # undef getdelim # if HAVE_RAW_DECL_GETDELIM _GL_WARN_ON_USE (getdelim, "getdelim is unportable - " "use gnulib module getdelim for portability"); # endif #endif #if @GNULIB_GETLINE@ /* Read a line, up to (and including) the next newline, from STREAM, store it in *LINEPTR (and NUL-terminate it). *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE bytes of space. It is realloc'd as necessary. Return the number of bytes read and stored at *LINEPTR (not including the NUL terminator), or -1 on error or EOF. */ # if @REPLACE_GETLINE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getline # define getline rpl_getline # endif _GL_FUNCDECL_RPL (getline, ssize_t, (char **lineptr, size_t *linesize, FILE *stream) _GL_ARG_NONNULL ((1, 2, 3))); _GL_CXXALIAS_RPL (getline, ssize_t, (char **lineptr, size_t *linesize, FILE *stream)); # else # if !@HAVE_DECL_GETLINE@ _GL_FUNCDECL_SYS (getline, ssize_t, (char **lineptr, size_t *linesize, FILE *stream) _GL_ARG_NONNULL ((1, 2, 3))); # endif _GL_CXXALIAS_SYS (getline, ssize_t, (char **lineptr, size_t *linesize, FILE *stream)); # endif # if @HAVE_DECL_GETLINE@ _GL_CXXALIASWARN (getline); # endif #elif defined GNULIB_POSIXCHECK # undef getline # if HAVE_RAW_DECL_GETLINE _GL_WARN_ON_USE (getline, "getline is unportable - " "use gnulib module getline for portability"); # endif #endif /* It is very rare that the developer ever has full control of stdin, so any use of gets warrants an unconditional warning; besides, C11 removed it. */ #undef gets #if HAVE_RAW_DECL_GETS && !defined __cplusplus _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); #endif #if @GNULIB_OBSTACK_PRINTF@ || @GNULIB_OBSTACK_PRINTF_POSIX@ struct obstack; /* Grow an obstack with formatted output. Return the number of bytes added to OBS. No trailing nul byte is added, and the object should be closed with obstack_finish before use. Upon memory allocation error, call obstack_alloc_failed_handler. Upon other error, return -1. */ # if @REPLACE_OBSTACK_PRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define obstack_printf rpl_obstack_printf # endif _GL_FUNCDECL_RPL (obstack_printf, int, (struct obstack *obs, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (obstack_printf, int, (struct obstack *obs, const char *format, ...)); # else # if !@HAVE_DECL_OBSTACK_PRINTF@ _GL_FUNCDECL_SYS (obstack_printf, int, (struct obstack *obs, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (obstack_printf, int, (struct obstack *obs, const char *format, ...)); # endif _GL_CXXALIASWARN (obstack_printf); # if @REPLACE_OBSTACK_PRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define obstack_vprintf rpl_obstack_vprintf # endif _GL_FUNCDECL_RPL (obstack_vprintf, int, (struct obstack *obs, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (obstack_vprintf, int, (struct obstack *obs, const char *format, va_list args)); # else # if !@HAVE_DECL_OBSTACK_PRINTF@ _GL_FUNCDECL_SYS (obstack_vprintf, int, (struct obstack *obs, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (obstack_vprintf, int, (struct obstack *obs, const char *format, va_list args)); # endif _GL_CXXALIASWARN (obstack_vprintf); #endif #if @GNULIB_PCLOSE@ # if !@HAVE_PCLOSE@ _GL_FUNCDECL_SYS (pclose, int, (FILE *stream) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pclose, int, (FILE *stream)); _GL_CXXALIASWARN (pclose); #elif defined GNULIB_POSIXCHECK # undef pclose # if HAVE_RAW_DECL_PCLOSE _GL_WARN_ON_USE (pclose, "pclose is unportable - " "use gnulib module pclose for more portability"); # endif #endif #if @GNULIB_PERROR@ /* Print a message to standard error, describing the value of ERRNO, (if STRING is not NULL and not empty) prefixed with STRING and ": ", and terminated with a newline. */ # if @REPLACE_PERROR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define perror rpl_perror # endif _GL_FUNCDECL_RPL (perror, void, (const char *string)); _GL_CXXALIAS_RPL (perror, void, (const char *string)); # else _GL_CXXALIAS_SYS (perror, void, (const char *string)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (perror); # endif #elif defined GNULIB_POSIXCHECK # undef perror /* Assume perror is always declared. */ _GL_WARN_ON_USE (perror, "perror is not always POSIX compliant - " "use gnulib module perror for portability"); #endif #if @GNULIB_POPEN@ # if @REPLACE_POPEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef popen # define popen rpl_popen # endif _GL_FUNCDECL_RPL (popen, FILE *, (const char *cmd, const char *mode) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (popen, FILE *, (const char *cmd, const char *mode)); # else # if !@HAVE_POPEN@ _GL_FUNCDECL_SYS (popen, FILE *, (const char *cmd, const char *mode) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (popen, FILE *, (const char *cmd, const char *mode)); # endif _GL_CXXALIASWARN (popen); #elif defined GNULIB_POSIXCHECK # undef popen # if HAVE_RAW_DECL_POPEN _GL_WARN_ON_USE (popen, "popen is buggy on some platforms - " "use gnulib module popen or pipe for more portability"); # endif #endif #if @GNULIB_PRINTF_POSIX@ || @GNULIB_PRINTF@ # if (@GNULIB_PRINTF_POSIX@ && @REPLACE_PRINTF@) \ || (@GNULIB_PRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) # if defined __GNUC__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) /* Don't break __attribute__((format(printf,M,N))). */ # define printf __printf__ # endif # if @GNULIB_PRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ _GL_FUNCDECL_RPL_1 (__printf__, int, (const char *format, ...) __asm__ (@ASM_SYMBOL_PREFIX@ _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf)) _GL_ATTRIBUTE_FORMAT_PRINTF (1, 2) _GL_ARG_NONNULL ((1))); # else _GL_FUNCDECL_RPL_1 (__printf__, int, (const char *format, ...) __asm__ (@ASM_SYMBOL_PREFIX@ _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf)) _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 2) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_RPL_1 (printf, __printf__, int, (const char *format, ...)); # else # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define printf rpl_printf # endif _GL_FUNCDECL_RPL (printf, int, (const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (1, 2) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (printf, int, (const char *format, ...)); # endif # define GNULIB_overrides_printf 1 # else _GL_CXXALIAS_SYS (printf, int, (const char *format, ...)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (printf); # endif #endif #if !@GNULIB_PRINTF_POSIX@ && defined GNULIB_POSIXCHECK # if !GNULIB_overrides_printf # undef printf # endif /* Assume printf is always declared. */ _GL_WARN_ON_USE (printf, "printf is not always POSIX compliant - " "use gnulib module printf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_PUTC@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef putc # define putc rpl_fputc # endif _GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL_1 (putc, rpl_fputc, int, (int c, FILE *stream)); # else _GL_CXXALIAS_SYS (putc, int, (int c, FILE *stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (putc); # endif #endif #if @GNULIB_PUTCHAR@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef putchar # define putchar rpl_putchar # endif _GL_FUNCDECL_RPL (putchar, int, (int c)); _GL_CXXALIAS_RPL (putchar, int, (int c)); # else _GL_CXXALIAS_SYS (putchar, int, (int c)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (putchar); # endif #endif #if @GNULIB_PUTS@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef puts # define puts rpl_puts # endif _GL_FUNCDECL_RPL (puts, int, (const char *string) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (puts, int, (const char *string)); # else _GL_CXXALIAS_SYS (puts, int, (const char *string)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (puts); # endif #endif #if @GNULIB_REMOVE@ # if @REPLACE_REMOVE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef remove # define remove rpl_remove # endif _GL_FUNCDECL_RPL (remove, int, (const char *name) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (remove, int, (const char *name)); # else _GL_CXXALIAS_SYS (remove, int, (const char *name)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (remove); # endif #elif defined GNULIB_POSIXCHECK # undef remove /* Assume remove is always declared. */ _GL_WARN_ON_USE (remove, "remove cannot handle directories on some platforms - " "use gnulib module remove for more portability"); #endif #if @GNULIB_RENAME@ # if @REPLACE_RENAME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef rename # define rename rpl_rename # endif _GL_FUNCDECL_RPL (rename, int, (const char *old_filename, const char *new_filename) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (rename, int, (const char *old_filename, const char *new_filename)); # else _GL_CXXALIAS_SYS (rename, int, (const char *old_filename, const char *new_filename)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (rename); # endif #elif defined GNULIB_POSIXCHECK # undef rename /* Assume rename is always declared. */ _GL_WARN_ON_USE (rename, "rename is buggy on some platforms - " "use gnulib module rename for more portability"); #endif #if @GNULIB_RENAMEAT@ # if @REPLACE_RENAMEAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef renameat # define renameat rpl_renameat # endif _GL_FUNCDECL_RPL (renameat, int, (int fd1, char const *file1, int fd2, char const *file2) _GL_ARG_NONNULL ((2, 4))); _GL_CXXALIAS_RPL (renameat, int, (int fd1, char const *file1, int fd2, char const *file2)); # else # if !@HAVE_RENAMEAT@ _GL_FUNCDECL_SYS (renameat, int, (int fd1, char const *file1, int fd2, char const *file2) _GL_ARG_NONNULL ((2, 4))); # endif _GL_CXXALIAS_SYS (renameat, int, (int fd1, char const *file1, int fd2, char const *file2)); # endif _GL_CXXALIASWARN (renameat); #elif defined GNULIB_POSIXCHECK # undef renameat # if HAVE_RAW_DECL_RENAMEAT _GL_WARN_ON_USE (renameat, "renameat is not portable - " "use gnulib module renameat for portability"); # endif #endif #if @GNULIB_SCANF@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if defined __GNUC__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef scanf /* Don't break __attribute__((format(scanf,M,N))). */ # define scanf __scanf__ # endif _GL_FUNCDECL_RPL_1 (__scanf__, int, (const char *format, ...) __asm__ (@ASM_SYMBOL_PREFIX@ _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_scanf)) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL_1 (scanf, __scanf__, int, (const char *format, ...)); # else # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef scanf # define scanf rpl_scanf # endif _GL_FUNCDECL_RPL (scanf, int, (const char *format, ...) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (scanf, int, (const char *format, ...)); # endif # else _GL_CXXALIAS_SYS (scanf, int, (const char *format, ...)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (scanf); # endif #endif #if @GNULIB_SNPRINTF@ # if @REPLACE_SNPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define snprintf rpl_snprintf # endif _GL_FUNCDECL_RPL (snprintf, int, (char *str, size_t size, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (3, 4) _GL_ARG_NONNULL ((3))); _GL_CXXALIAS_RPL (snprintf, int, (char *str, size_t size, const char *format, ...)); # else # if !@HAVE_DECL_SNPRINTF@ _GL_FUNCDECL_SYS (snprintf, int, (char *str, size_t size, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (3, 4) _GL_ARG_NONNULL ((3))); # endif _GL_CXXALIAS_SYS (snprintf, int, (char *str, size_t size, const char *format, ...)); # endif _GL_CXXALIASWARN (snprintf); #elif defined GNULIB_POSIXCHECK # undef snprintf # if HAVE_RAW_DECL_SNPRINTF _GL_WARN_ON_USE (snprintf, "snprintf is unportable - " "use gnulib module snprintf for portability"); # endif #endif /* Some people would argue that all sprintf uses should be warned about (for example, OpenBSD issues a link warning for it), since it can cause security holes due to buffer overruns. However, we believe that sprintf can be used safely, and is more efficient than snprintf in those safe cases; and as proof of our belief, we use sprintf in several gnulib modules. So this header intentionally avoids adding a warning to sprintf except when GNULIB_POSIXCHECK is defined. */ #if @GNULIB_SPRINTF_POSIX@ # if @REPLACE_SPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define sprintf rpl_sprintf # endif _GL_FUNCDECL_RPL (sprintf, int, (char *str, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (sprintf, int, (char *str, const char *format, ...)); # else _GL_CXXALIAS_SYS (sprintf, int, (char *str, const char *format, ...)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (sprintf); # endif #elif defined GNULIB_POSIXCHECK # undef sprintf /* Assume sprintf is always declared. */ _GL_WARN_ON_USE (sprintf, "sprintf is not always POSIX compliant - " "use gnulib module sprintf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_TMPFILE@ # if @REPLACE_TMPFILE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define tmpfile rpl_tmpfile # endif _GL_FUNCDECL_RPL (tmpfile, FILE *, (void)); _GL_CXXALIAS_RPL (tmpfile, FILE *, (void)); # else _GL_CXXALIAS_SYS (tmpfile, FILE *, (void)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (tmpfile); # endif #elif defined GNULIB_POSIXCHECK # undef tmpfile # if HAVE_RAW_DECL_TMPFILE _GL_WARN_ON_USE (tmpfile, "tmpfile is not usable on mingw - " "use gnulib module tmpfile for portability"); # endif #endif #if @GNULIB_VASPRINTF@ /* Write formatted output to a string dynamically allocated with malloc(). If the memory allocation succeeds, store the address of the string in *RESULT and return the number of resulting bytes, excluding the trailing NUL. Upon memory allocation error, or some other error, return -1. */ # if @REPLACE_VASPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define asprintf rpl_asprintf # endif _GL_FUNCDECL_RPL (asprintf, int, (char **result, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (asprintf, int, (char **result, const char *format, ...)); # else # if !@HAVE_VASPRINTF@ _GL_FUNCDECL_SYS (asprintf, int, (char **result, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (asprintf, int, (char **result, const char *format, ...)); # endif _GL_CXXALIASWARN (asprintf); # if @REPLACE_VASPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vasprintf rpl_vasprintf # endif _GL_FUNCDECL_RPL (vasprintf, int, (char **result, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (vasprintf, int, (char **result, const char *format, va_list args)); # else # if !@HAVE_VASPRINTF@ _GL_FUNCDECL_SYS (vasprintf, int, (char **result, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (vasprintf, int, (char **result, const char *format, va_list args)); # endif _GL_CXXALIASWARN (vasprintf); #endif #if @GNULIB_VDPRINTF@ # if @REPLACE_VDPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vdprintf rpl_vdprintf # endif _GL_FUNCDECL_RPL (vdprintf, int, (int fd, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (vdprintf, int, (int fd, const char *format, va_list args)); # else # if !@HAVE_VDPRINTF@ _GL_FUNCDECL_SYS (vdprintf, int, (int fd, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) _GL_ARG_NONNULL ((2))); # endif /* Need to cast, because on Solaris, the third parameter will likely be __va_list args. */ _GL_CXXALIAS_SYS_CAST (vdprintf, int, (int fd, const char *format, va_list args)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (vdprintf); # endif #elif defined GNULIB_POSIXCHECK # undef vdprintf # if HAVE_RAW_DECL_VDPRINTF _GL_WARN_ON_USE (vdprintf, "vdprintf is unportable - " "use gnulib module vdprintf for portability"); # endif #endif #if @GNULIB_VFPRINTF_POSIX@ || @GNULIB_VFPRINTF@ # if (@GNULIB_VFPRINTF_POSIX@ && @REPLACE_VFPRINTF@) \ || (@GNULIB_VFPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vfprintf rpl_vfprintf # endif # define GNULIB_overrides_vfprintf 1 # if @GNULIB_VFPRINTF_POSIX@ _GL_FUNCDECL_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) _GL_ARG_NONNULL ((1, 2))); # else _GL_FUNCDECL_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 0) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args)); # else /* Need to cast, because on Solaris, the third parameter is __va_list args and GCC's fixincludes did not change this to __gnuc_va_list. */ _GL_CXXALIAS_SYS_CAST (vfprintf, int, (FILE *fp, const char *format, va_list args)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (vfprintf); # endif #endif #if !@GNULIB_VFPRINTF_POSIX@ && defined GNULIB_POSIXCHECK # if !GNULIB_overrides_vfprintf # undef vfprintf # endif /* Assume vfprintf is always declared. */ _GL_WARN_ON_USE (vfprintf, "vfprintf is not always POSIX compliant - " "use gnulib module vfprintf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_VFSCANF@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef vfscanf # define vfscanf rpl_vfscanf # endif _GL_FUNCDECL_RPL (vfscanf, int, (FILE *stream, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 0) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (vfscanf, int, (FILE *stream, const char *format, va_list args)); # else _GL_CXXALIAS_SYS (vfscanf, int, (FILE *stream, const char *format, va_list args)); # endif _GL_CXXALIASWARN (vfscanf); #endif #if @GNULIB_VPRINTF_POSIX@ || @GNULIB_VPRINTF@ # if (@GNULIB_VPRINTF_POSIX@ && @REPLACE_VPRINTF@) \ || (@GNULIB_VPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vprintf rpl_vprintf # endif # define GNULIB_overrides_vprintf 1 # if @GNULIB_VPRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ _GL_FUNCDECL_RPL (vprintf, int, (const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (1, 0) _GL_ARG_NONNULL ((1))); # else _GL_FUNCDECL_RPL (vprintf, int, (const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 0) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_RPL (vprintf, int, (const char *format, va_list args)); # else /* Need to cast, because on Solaris, the second parameter is __va_list args and GCC's fixincludes did not change this to __gnuc_va_list. */ _GL_CXXALIAS_SYS_CAST (vprintf, int, (const char *format, va_list args)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (vprintf); # endif #endif #if !@GNULIB_VPRINTF_POSIX@ && defined GNULIB_POSIXCHECK # if !GNULIB_overrides_vprintf # undef vprintf # endif /* Assume vprintf is always declared. */ _GL_WARN_ON_USE (vprintf, "vprintf is not always POSIX compliant - " "use gnulib module vprintf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_VSCANF@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef vscanf # define vscanf rpl_vscanf # endif _GL_FUNCDECL_RPL (vscanf, int, (const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 0) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (vscanf, int, (const char *format, va_list args)); # else _GL_CXXALIAS_SYS (vscanf, int, (const char *format, va_list args)); # endif _GL_CXXALIASWARN (vscanf); #endif #if @GNULIB_VSNPRINTF@ # if @REPLACE_VSNPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vsnprintf rpl_vsnprintf # endif _GL_FUNCDECL_RPL (vsnprintf, int, (char *str, size_t size, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0) _GL_ARG_NONNULL ((3))); _GL_CXXALIAS_RPL (vsnprintf, int, (char *str, size_t size, const char *format, va_list args)); # else # if !@HAVE_DECL_VSNPRINTF@ _GL_FUNCDECL_SYS (vsnprintf, int, (char *str, size_t size, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0) _GL_ARG_NONNULL ((3))); # endif _GL_CXXALIAS_SYS (vsnprintf, int, (char *str, size_t size, const char *format, va_list args)); # endif _GL_CXXALIASWARN (vsnprintf); #elif defined GNULIB_POSIXCHECK # undef vsnprintf # if HAVE_RAW_DECL_VSNPRINTF _GL_WARN_ON_USE (vsnprintf, "vsnprintf is unportable - " "use gnulib module vsnprintf for portability"); # endif #endif #if @GNULIB_VSPRINTF_POSIX@ # if @REPLACE_VSPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vsprintf rpl_vsprintf # endif _GL_FUNCDECL_RPL (vsprintf, int, (char *str, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (vsprintf, int, (char *str, const char *format, va_list args)); # else /* Need to cast, because on Solaris, the third parameter is __va_list args and GCC's fixincludes did not change this to __gnuc_va_list. */ _GL_CXXALIAS_SYS_CAST (vsprintf, int, (char *str, const char *format, va_list args)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (vsprintf); # endif #elif defined GNULIB_POSIXCHECK # undef vsprintf /* Assume vsprintf is always declared. */ _GL_WARN_ON_USE (vsprintf, "vsprintf is not always POSIX compliant - " "use gnulib module vsprintf-posix for portable " "POSIX compliance"); #endif #endif /* _@GUARD_PREFIX@_STDIO_H */ #endif /* _@GUARD_PREFIX@_STDIO_H */ #endif make-4.3/lib/basename-lgpl.c0000644000175000017500000000406213611136471012644 00000000000000/* basename.c -- return the last element in a file name Copyright (C) 1990, 1998-2001, 2003-2006, 2009-2020 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 the Free Software Foundation; either version 3 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, see . */ #include #include "dirname.h" #include /* Return the address of the last file name component of NAME. If NAME has no relative file name components because it is a file system root, return the empty string. */ char * last_component (char const *name) { char const *base = name + FILE_SYSTEM_PREFIX_LEN (name); char const *p; bool saw_slash = false; while (ISSLASH (*base)) base++; for (p = base; *p; p++) { if (ISSLASH (*p)) saw_slash = true; else if (saw_slash) { base = p; saw_slash = false; } } return (char *) base; } /* Return the length of the basename NAME. Typically NAME is the value returned by base_name or last_component. Act like strlen (NAME), except omit all trailing slashes. */ size_t base_len (char const *name) { size_t len; size_t prefix_len = FILE_SYSTEM_PREFIX_LEN (name); for (len = strlen (name); 1 < len && ISSLASH (name[len - 1]); len--) continue; if (DOUBLE_SLASH_IS_DISTINCT_ROOT && len == 1 && ISSLASH (name[0]) && ISSLASH (name[1]) && ! name[2]) return 2; if (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE && prefix_len && len == prefix_len && ISSLASH (name[prefix_len])) return prefix_len + 1; return len; } make-4.3/lib/concat-filename.c0000644000175000017500000000473213611136471013166 00000000000000/* Construct a full filename from a directory and a relative filename. Copyright (C) 2001-2004, 2006-2020 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 the Free Software Foundation; either version 3 of the License, or 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, see . */ /* Written by Bruno Haible . */ #include /* Specification. */ #include "concat-filename.h" #include #include #include #include "filename.h" /* Concatenate a directory filename, a relative filename and an optional suffix. The directory may end with the directory separator. The second argument may not start with the directory separator (it is relative). Return a freshly allocated filename. Return NULL and set errno upon memory allocation failure. */ char * concatenated_filename (const char *directory, const char *filename, const char *suffix) { char *result; char *p; if (strcmp (directory, ".") == 0) { /* No need to prepend the directory. */ result = (char *) malloc (strlen (filename) + (suffix != NULL ? strlen (suffix) : 0) + 1); if (result == NULL) return NULL; /* errno is set here */ p = result; } else { size_t directory_len = strlen (directory); int need_slash = (directory_len > FILE_SYSTEM_PREFIX_LEN (directory) && !ISSLASH (directory[directory_len - 1])); result = (char *) malloc (directory_len + need_slash + strlen (filename) + (suffix != NULL ? strlen (suffix) : 0) + 1); if (result == NULL) return NULL; /* errno is set here */ memcpy (result, directory, directory_len); p = result + directory_len; if (need_slash) *p++ = '/'; } p = stpcpy (p, filename); if (suffix != NULL) stpcpy (p, suffix); return result; } make-4.3/lib/error.c0000644000175000017500000002470613611136471011275 00000000000000/* Error handler for noninteractive utilities Copyright (C) 1990-1998, 2000-2007, 2009-2020 Free Software Foundation, Inc. This file is part of the GNU C Library. 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 3 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, see . */ /* Written by David MacKenzie . */ #if !_LIBC # include #endif #include "error.h" #include #include #include #include #if !_LIBC && ENABLE_NLS # include "gettext.h" # define _(msgid) gettext (msgid) #endif #ifdef _LIBC # include # include # include # include # define mbsrtowcs __mbsrtowcs # define USE_UNLOCKED_IO 0 # define _GL_ATTRIBUTE_FORMAT_PRINTF(a, b) # define _GL_ARG_NONNULL(a) #else # include "getprogname.h" #endif #if USE_UNLOCKED_IO # include "unlocked-io.h" #endif #ifndef _ # define _(String) String #endif /* If NULL, error will flush stdout, then print on stderr the program name, a colon and a space. Otherwise, error will call this function without parameters instead. */ void (*error_print_progname) (void); /* This variable is incremented each time 'error' is called. */ unsigned int error_message_count; #ifdef _LIBC /* In the GNU C library, there is a predefined variable for this. */ # define program_name program_invocation_name # include # include # include /* In GNU libc we want do not want to use the common name 'error' directly. Instead make it a weak alias. */ extern void __error (int status, int errnum, const char *message, ...) __attribute__ ((__format__ (__printf__, 3, 4))); extern void __error_at_line (int status, int errnum, const char *file_name, unsigned int line_number, const char *message, ...) __attribute__ ((__format__ (__printf__, 5, 6))); # define error __error # define error_at_line __error_at_line # include # define fflush(s) _IO_fflush (s) # undef putc # define putc(c, fp) _IO_putc (c, fp) # include #else /* not _LIBC */ # include # include # if defined _WIN32 && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include # endif # endif /* The gnulib override of fcntl is not needed in this file. */ # undef fcntl # if !(GNULIB_STRERROR_R_POSIX || HAVE_DECL_STRERROR_R) # ifndef HAVE_DECL_STRERROR_R "this configure-time declaration test was not run" # endif # if STRERROR_R_CHAR_P char *strerror_r (int errnum, char *buf, size_t buflen); # else int strerror_r (int errnum, char *buf, size_t buflen); # endif # endif # define program_name getprogname () # if GNULIB_STRERROR_R_POSIX || HAVE_STRERROR_R || defined strerror_r # define __strerror_r strerror_r # endif /* GNULIB_STRERROR_R_POSIX || HAVE_STRERROR_R || defined strerror_r */ #endif /* not _LIBC */ #if !_LIBC /* Return non-zero if FD is open. */ static int is_open (int fd) { # if defined _WIN32 && ! defined __CYGWIN__ /* On native Windows: The initial state of unassigned standard file descriptors is that they are open but point to an INVALID_HANDLE_VALUE. There is no fcntl, and the gnulib replacement fcntl does not support F_GETFL. */ return (HANDLE) _get_osfhandle (fd) != INVALID_HANDLE_VALUE; # else # ifndef F_GETFL # error Please port fcntl to your platform # endif return 0 <= fcntl (fd, F_GETFL); # endif } #endif static void flush_stdout (void) { #if !_LIBC int stdout_fd; # if GNULIB_FREOPEN_SAFER /* Use of gnulib's freopen-safer module normally ensures that fileno (stdout) == 1 whenever stdout is open. */ stdout_fd = STDOUT_FILENO; # else /* POSIX states that fileno (stdout) after fclose is unspecified. But in practice it is not a problem, because stdout is statically allocated and the fd of a FILE stream is stored as a field in its allocated memory. */ stdout_fd = fileno (stdout); # endif /* POSIX states that fflush (stdout) after fclose is unspecified; it is safe in glibc, but not on all other platforms. fflush (NULL) is always defined, but too draconian. */ if (0 <= stdout_fd && is_open (stdout_fd)) #endif fflush (stdout); } static void print_errno_message (int errnum) { char const *s; #if _LIBC || GNULIB_STRERROR_R_POSIX || defined HAVE_STRERROR_R char errbuf[1024]; # if _LIBC || (!GNULIB_STRERROR_R_POSIX && STRERROR_R_CHAR_P) s = __strerror_r (errnum, errbuf, sizeof errbuf); # else if (__strerror_r (errnum, errbuf, sizeof errbuf) == 0) s = errbuf; else s = 0; # endif #else s = strerror (errnum); #endif #if !_LIBC if (! s) s = _("Unknown system error"); #endif #if _LIBC __fxprintf (NULL, ": %s", s); #else fprintf (stderr, ": %s", s); #endif } static void _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0) _GL_ARG_NONNULL ((3)) error_tail (int status, int errnum, const char *message, va_list args) { #if _LIBC if (_IO_fwide (stderr, 0) > 0) { size_t len = strlen (message) + 1; wchar_t *wmessage = NULL; mbstate_t st; size_t res; const char *tmp; bool use_malloc = false; while (1) { if (__libc_use_alloca (len * sizeof (wchar_t))) wmessage = (wchar_t *) alloca (len * sizeof (wchar_t)); else { if (!use_malloc) wmessage = NULL; wchar_t *p = (wchar_t *) realloc (wmessage, len * sizeof (wchar_t)); if (p == NULL) { free (wmessage); fputws_unlocked (L"out of memory\n", stderr); return; } wmessage = p; use_malloc = true; } memset (&st, '\0', sizeof (st)); tmp = message; res = mbsrtowcs (wmessage, &tmp, len, &st); if (res != len) break; if (__builtin_expect (len >= SIZE_MAX / sizeof (wchar_t) / 2, 0)) { /* This really should not happen if everything is fine. */ res = (size_t) -1; break; } len *= 2; } if (res == (size_t) -1) { /* The string cannot be converted. */ if (use_malloc) { free (wmessage); use_malloc = false; } wmessage = (wchar_t *) L"???"; } __vfwprintf (stderr, wmessage, args); if (use_malloc) free (wmessage); } else #endif vfprintf (stderr, message, args); ++error_message_count; if (errnum) print_errno_message (errnum); #if _LIBC __fxprintf (NULL, "\n"); #else putc ('\n', stderr); #endif fflush (stderr); if (status) exit (status); } /* Print the program name and error message MESSAGE, which is a printf-style format string with optional args. If ERRNUM is nonzero, print its corresponding system error message. Exit with status STATUS if it is nonzero. */ void error (int status, int errnum, const char *message, ...) { va_list args; #if defined _LIBC && defined __libc_ptf_call /* We do not want this call to be cut short by a thread cancellation. Therefore disable cancellation for now. */ int state = PTHREAD_CANCEL_ENABLE; __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state), 0); #endif flush_stdout (); #ifdef _LIBC _IO_flockfile (stderr); #endif if (error_print_progname) (*error_print_progname) (); else { #if _LIBC __fxprintf (NULL, "%s: ", program_name); #else fprintf (stderr, "%s: ", program_name); #endif } va_start (args, message); error_tail (status, errnum, message, args); va_end (args); #ifdef _LIBC _IO_funlockfile (stderr); # ifdef __libc_ptf_call __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0); # endif #endif } /* Sometimes we want to have at most one error per line. This variable controls whether this mode is selected or not. */ int error_one_per_line; void error_at_line (int status, int errnum, const char *file_name, unsigned int line_number, const char *message, ...) { va_list args; if (error_one_per_line) { static const char *old_file_name; static unsigned int old_line_number; if (old_line_number == line_number && (file_name == old_file_name || (old_file_name != NULL && file_name != NULL && strcmp (old_file_name, file_name) == 0))) /* Simply return and print nothing. */ return; old_file_name = file_name; old_line_number = line_number; } #if defined _LIBC && defined __libc_ptf_call /* We do not want this call to be cut short by a thread cancellation. Therefore disable cancellation for now. */ int state = PTHREAD_CANCEL_ENABLE; __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state), 0); #endif flush_stdout (); #ifdef _LIBC _IO_flockfile (stderr); #endif if (error_print_progname) (*error_print_progname) (); else { #if _LIBC __fxprintf (NULL, "%s:", program_name); #else fprintf (stderr, "%s:", program_name); #endif } #if _LIBC __fxprintf (NULL, file_name != NULL ? "%s:%u: " : " ", file_name, line_number); #else fprintf (stderr, file_name != NULL ? "%s:%u: " : " ", file_name, line_number); #endif va_start (args, message); error_tail (status, errnum, message, args); va_end (args); #ifdef _LIBC _IO_funlockfile (stderr); # ifdef __libc_ptf_call __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0); # endif #endif } #ifdef _LIBC /* Make the weak alias. */ # undef error # undef error_at_line weak_alias (__error, error) weak_alias (__error_at_line, error_at_line) #endif make-4.3/lib/strerror-override.h0000644000175000017500000000374413611136472013650 00000000000000/* strerror-override.h --- POSIX compatible system error routine Copyright (C) 2010-2020 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 the Free Software Foundation; either version 3 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, see . */ #ifndef _GL_STRERROR_OVERRIDE_H # define _GL_STRERROR_OVERRIDE_H # include # include /* Reasonable buffer size that should never trigger ERANGE; if this proves too small, we intentionally abort(), to remind us to fix this value. */ # define STACKBUF_LEN 256 /* If ERRNUM maps to an errno value defined by gnulib, return a string describing the error. Otherwise return NULL. */ # if REPLACE_STRERROR_0 \ || GNULIB_defined_ESOCK \ || GNULIB_defined_ESTREAMS \ || GNULIB_defined_EWINSOCK \ || GNULIB_defined_ENOMSG \ || GNULIB_defined_EIDRM \ || GNULIB_defined_ENOLINK \ || GNULIB_defined_EPROTO \ || GNULIB_defined_EMULTIHOP \ || GNULIB_defined_EBADMSG \ || GNULIB_defined_EOVERFLOW \ || GNULIB_defined_ENOTSUP \ || GNULIB_defined_ENETRESET \ || GNULIB_defined_ECONNABORTED \ || GNULIB_defined_ESTALE \ || GNULIB_defined_EDQUOT \ || GNULIB_defined_ECANCELED \ || GNULIB_defined_EOWNERDEAD \ || GNULIB_defined_ENOTRECOVERABLE \ || GNULIB_defined_EILSEQ extern const char *strerror_override (int errnum) _GL_ATTRIBUTE_CONST; # else # define strerror_override(ignored) NULL # endif #endif /* _GL_STRERROR_OVERRIDE_H */ make-4.3/lib/access.c0000644000175000017500000000172313611136471011377 00000000000000/* Test the access rights of a file. Copyright (C) 2019-2020 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 the Free Software Foundation; either version 3 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, see . */ #include /* Specification. */ #include #include #include int access (const char *file, int mode) { if ((mode & X_OK) != 0) mode = (mode & ~X_OK) | R_OK; return _access (file, mode); } make-4.3/lib/errno.in.h0000644000175000017500000001640613611136471011701 00000000000000/* A POSIX-like . Copyright (C) 2008-2020 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 the Free Software Foundation; either version 3, 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, see . */ #ifndef _@GUARD_PREFIX@_ERRNO_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_ERRNO_H@ #ifndef _@GUARD_PREFIX@_ERRNO_H #define _@GUARD_PREFIX@_ERRNO_H /* On native Windows platforms, many macros are not defined. */ # if defined _WIN32 && ! defined __CYGWIN__ /* These are the same values as defined by MSVC 10, for interoperability. */ # ifndef ENOMSG # define ENOMSG 122 # define GNULIB_defined_ENOMSG 1 # endif # ifndef EIDRM # define EIDRM 111 # define GNULIB_defined_EIDRM 1 # endif # ifndef ENOLINK # define ENOLINK 121 # define GNULIB_defined_ENOLINK 1 # endif # ifndef EPROTO # define EPROTO 134 # define GNULIB_defined_EPROTO 1 # endif # ifndef EBADMSG # define EBADMSG 104 # define GNULIB_defined_EBADMSG 1 # endif # ifndef EOVERFLOW # define EOVERFLOW 132 # define GNULIB_defined_EOVERFLOW 1 # endif # ifndef ENOTSUP # define ENOTSUP 129 # define GNULIB_defined_ENOTSUP 1 # endif # ifndef ENETRESET # define ENETRESET 117 # define GNULIB_defined_ENETRESET 1 # endif # ifndef ECONNABORTED # define ECONNABORTED 106 # define GNULIB_defined_ECONNABORTED 1 # endif # ifndef ECANCELED # define ECANCELED 105 # define GNULIB_defined_ECANCELED 1 # endif # ifndef EOWNERDEAD # define EOWNERDEAD 133 # define GNULIB_defined_EOWNERDEAD 1 # endif # ifndef ENOTRECOVERABLE # define ENOTRECOVERABLE 127 # define GNULIB_defined_ENOTRECOVERABLE 1 # endif # ifndef EINPROGRESS # define EINPROGRESS 112 # define EALREADY 103 # define ENOTSOCK 128 # define EDESTADDRREQ 109 # define EMSGSIZE 115 # define EPROTOTYPE 136 # define ENOPROTOOPT 123 # define EPROTONOSUPPORT 135 # define EOPNOTSUPP 130 # define EAFNOSUPPORT 102 # define EADDRINUSE 100 # define EADDRNOTAVAIL 101 # define ENETDOWN 116 # define ENETUNREACH 118 # define ECONNRESET 108 # define ENOBUFS 119 # define EISCONN 113 # define ENOTCONN 126 # define ETIMEDOUT 138 # define ECONNREFUSED 107 # define ELOOP 114 # define EHOSTUNREACH 110 # define EWOULDBLOCK 140 # define GNULIB_defined_ESOCK 1 # endif # ifndef ETXTBSY # define ETXTBSY 139 # define ENODATA 120 /* not required by POSIX */ # define ENOSR 124 /* not required by POSIX */ # define ENOSTR 125 /* not required by POSIX */ # define ETIME 137 /* not required by POSIX */ # define EOTHER 131 /* not required by POSIX */ # define GNULIB_defined_ESTREAMS 1 # endif /* These are intentionally the same values as the WSA* error numbers, defined in . */ # define ESOCKTNOSUPPORT 10044 /* not required by POSIX */ # define EPFNOSUPPORT 10046 /* not required by POSIX */ # define ESHUTDOWN 10058 /* not required by POSIX */ # define ETOOMANYREFS 10059 /* not required by POSIX */ # define EHOSTDOWN 10064 /* not required by POSIX */ # define EPROCLIM 10067 /* not required by POSIX */ # define EUSERS 10068 /* not required by POSIX */ # define EDQUOT 10069 # define ESTALE 10070 # define EREMOTE 10071 /* not required by POSIX */ # define GNULIB_defined_EWINSOCK 1 # endif /* On OSF/1 5.1, when _XOPEN_SOURCE_EXTENDED is not defined, the macros EMULTIHOP, ENOLINK, EOVERFLOW are not defined. */ # if @EMULTIHOP_HIDDEN@ # define EMULTIHOP @EMULTIHOP_VALUE@ # define GNULIB_defined_EMULTIHOP 1 # endif # if @ENOLINK_HIDDEN@ # define ENOLINK @ENOLINK_VALUE@ # define GNULIB_defined_ENOLINK 1 # endif # if @EOVERFLOW_HIDDEN@ # define EOVERFLOW @EOVERFLOW_VALUE@ # define GNULIB_defined_EOVERFLOW 1 # endif /* On OpenBSD 4.0 and on native Windows, the macros ENOMSG, EIDRM, ENOLINK, EPROTO, EMULTIHOP, EBADMSG, EOVERFLOW, ENOTSUP, ECANCELED are not defined. Likewise, on NonStop Kernel, EDQUOT is not defined. Define them here. Values >= 2000 seem safe to use: Solaris ESTALE = 151, HP-UX EWOULDBLOCK = 246, IRIX EDQUOT = 1133. Note: When one of these systems defines some of these macros some day, binaries will have to be recompiled so that they recognizes the new errno values from the system. */ # ifndef ENOMSG # define ENOMSG 2000 # define GNULIB_defined_ENOMSG 1 # endif # ifndef EIDRM # define EIDRM 2001 # define GNULIB_defined_EIDRM 1 # endif # ifndef ENOLINK # define ENOLINK 2002 # define GNULIB_defined_ENOLINK 1 # endif # ifndef EPROTO # define EPROTO 2003 # define GNULIB_defined_EPROTO 1 # endif # ifndef EMULTIHOP # define EMULTIHOP 2004 # define GNULIB_defined_EMULTIHOP 1 # endif # ifndef EBADMSG # define EBADMSG 2005 # define GNULIB_defined_EBADMSG 1 # endif # ifndef EOVERFLOW # define EOVERFLOW 2006 # define GNULIB_defined_EOVERFLOW 1 # endif # ifndef ENOTSUP # define ENOTSUP 2007 # define GNULIB_defined_ENOTSUP 1 # endif # ifndef ENETRESET # define ENETRESET 2011 # define GNULIB_defined_ENETRESET 1 # endif # ifndef ECONNABORTED # define ECONNABORTED 2012 # define GNULIB_defined_ECONNABORTED 1 # endif # ifndef ESTALE # define ESTALE 2009 # define GNULIB_defined_ESTALE 1 # endif # ifndef EDQUOT # define EDQUOT 2010 # define GNULIB_defined_EDQUOT 1 # endif # ifndef ECANCELED # define ECANCELED 2008 # define GNULIB_defined_ECANCELED 1 # endif /* On many platforms, the macros EOWNERDEAD and ENOTRECOVERABLE are not defined. */ # ifndef EOWNERDEAD # if defined __sun /* Use the same values as defined for Solaris >= 8, for interoperability. */ # define EOWNERDEAD 58 # define ENOTRECOVERABLE 59 # elif defined _WIN32 && ! defined __CYGWIN__ /* We have a conflict here: pthreads-win32 defines these values differently than MSVC 10. It's hairy to decide which one to use. */ # if defined __MINGW32__ && !defined USE_WINDOWS_THREADS /* Use the same values as defined by pthreads-win32, for interoperability. */ # define EOWNERDEAD 43 # define ENOTRECOVERABLE 44 # else /* Use the same values as defined by MSVC 10, for interoperability. */ # define EOWNERDEAD 133 # define ENOTRECOVERABLE 127 # endif # else # define EOWNERDEAD 2013 # define ENOTRECOVERABLE 2014 # endif # define GNULIB_defined_EOWNERDEAD 1 # define GNULIB_defined_ENOTRECOVERABLE 1 # endif # ifndef EILSEQ # define EILSEQ 2015 # define GNULIB_defined_EILSEQ 1 # endif #endif /* _@GUARD_PREFIX@_ERRNO_H */ #endif /* _@GUARD_PREFIX@_ERRNO_H */ make-4.3/lib/warn-on-use.h0000644000175000017500000001351113611136472012315 00000000000000/* A C macro for emitting warnings if a function is used. Copyright (C) 2010-2020 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 the Free Software Foundation; either version 3 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, see . */ /* _GL_WARN_ON_USE (function, "literal string") issues a declaration for FUNCTION which will then trigger a compiler warning containing the text of "literal string" anywhere that function is called, if supported by the compiler. If the compiler does not support this feature, the macro expands to an unused extern declaration. _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the attribute used in _GL_WARN_ON_USE. If the compiler does not support this feature, it expands to empty. These macros are useful for marking a function as a potential portability trap, with the intent that "literal string" include instructions on the replacement function that should be used instead. _GL_WARN_ON_USE is for functions with 'extern' linkage. _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' linkage. However, one of the reasons that a function is a portability trap is if it has the wrong signature. Declaring FUNCTION with a different signature in C is a compilation error, so this macro must use the same type as any existing declaration so that programs that avoid the problematic FUNCTION do not fail to compile merely because they included a header that poisoned the function. But this implies that _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already have a declaration. Use of this macro implies that there must not be any other macro hiding the declaration of FUNCTION; but undefining FUNCTION first is part of the poisoning process anyway (although for symbols that are provided only via a macro, the result is a compilation error rather than a warning containing "literal string"). Also note that in C++, it is only safe to use if FUNCTION has no overloads. For an example, it is possible to poison 'getline' by: - adding a call to gl_WARN_ON_USE_PREPARE([[#include ]], [getline]) in configure.ac, which potentially defines HAVE_RAW_DECL_GETLINE - adding this code to a header that wraps the system : #undef getline #if HAVE_RAW_DECL_GETLINE _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" "not universally present; use the gnulib module getline"); #endif It is not possible to directly poison global variables. But it is possible to write a wrapper accessor function, and poison that (less common usage, like &environ, will cause a compilation error rather than issue the nice warning, but the end result of informing the developer about their portability problem is still achieved): #if HAVE_RAW_DECL_ENVIRON static char *** rpl_environ (void) { return &environ; } _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); # undef environ # define environ (*rpl_environ ()) #endif or better (avoiding contradictory use of 'static' and 'extern'): #if HAVE_RAW_DECL_ENVIRON static char *** _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") rpl_environ (void) { return &environ; } # undef environ # define environ (*rpl_environ ()) #endif */ #ifndef _GL_WARN_ON_USE # if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) /* A compiler attribute is available in gcc versions 4.3.0 and later. */ # define _GL_WARN_ON_USE(function, message) \ extern __typeof__ (function) function __attribute__ ((__warning__ (message))) # define _GL_WARN_ON_USE_ATTRIBUTE(message) \ __attribute__ ((__warning__ (message))) # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING /* Verify the existence of the function. */ # define _GL_WARN_ON_USE(function, message) \ extern __typeof__ (function) function # define _GL_WARN_ON_USE_ATTRIBUTE(message) # else /* Unsupported. */ # define _GL_WARN_ON_USE(function, message) \ _GL_WARN_EXTERN_C int _gl_warn_on_use # define _GL_WARN_ON_USE_ATTRIBUTE(message) # endif #endif /* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string") is like _GL_WARN_ON_USE (function, "string"), except that the function is declared with the given prototype, consisting of return type, parameters, and attributes. This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does not work in this case. */ #ifndef _GL_WARN_ON_USE_CXX # if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) # define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ extern rettype function parameters_and_attributes \ __attribute__ ((__warning__ (msg))) # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING /* Verify the existence of the function. */ # define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ extern rettype function parameters_and_attributes # else /* Unsupported. */ # define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ _GL_WARN_EXTERN_C int _gl_warn_on_use # endif #endif /* _GL_WARN_EXTERN_C declaration; performs the declaration with C linkage. */ #ifndef _GL_WARN_EXTERN_C # if defined __cplusplus # define _GL_WARN_EXTERN_C extern "C" # else # define _GL_WARN_EXTERN_C extern # endif #endif make-4.3/lib/stdint.in.h0000644000175000017500000005535213611136472012065 00000000000000/* Copyright (C) 2001-2002, 2004-2020 Free Software Foundation, Inc. Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood. This file is part of gnulib. 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 3, 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, see . */ /* * ISO C 99 for platforms that lack it. * */ #ifndef _@GUARD_PREFIX@_STDINT_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* When including a system file that in turn includes , use the system , not our substitute. This avoids problems with (for example) VMS, whose includes . */ #define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H /* On Android (Bionic libc), includes this file before having defined 'time_t'. Therefore in this case avoid including other system header files; just include the system's . Ideally we should test __BIONIC__ here, but it is only defined after has been included; hence test __ANDROID__ instead. */ #if defined __ANDROID__ && defined _GL_INCLUDING_SYS_TYPES_H # @INCLUDE_NEXT@ @NEXT_STDINT_H@ #else /* Get those types that are already defined in other system include files, so that we can "#define int8_t signed char" below without worrying about a later system include file containing a "typedef signed char int8_t;" that will get messed up by our macro. Our macros should all be consistent with the system versions, except for the "fast" types and macros, which we recommend against using in public interfaces due to compiler differences. */ #if @HAVE_STDINT_H@ # if defined __sgi && ! defined __c99 /* Bypass IRIX's if in C89 mode, since it merely annoys users with "This header file is to be used only for c99 mode compilations" diagnostics. */ # define __STDINT_H__ # endif /* Some pre-C++11 implementations need this. */ # ifdef __cplusplus # ifndef __STDC_CONSTANT_MACROS # define __STDC_CONSTANT_MACROS 1 # endif # ifndef __STDC_LIMIT_MACROS # define __STDC_LIMIT_MACROS 1 # endif # endif /* Other systems may have an incomplete or buggy . Include it before , since any "#include " in would reinclude us, skipping our contents because _@GUARD_PREFIX@_STDINT_H is defined. The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_STDINT_H@ #endif #if ! defined _@GUARD_PREFIX@_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H #define _@GUARD_PREFIX@_STDINT_H /* Get SCHAR_MIN, SCHAR_MAX, UCHAR_MAX, INT_MIN, INT_MAX, LONG_MIN, LONG_MAX, ULONG_MAX, _GL_INTEGER_WIDTH. */ #include /* Override WINT_MIN and WINT_MAX if gnulib's or overrides wint_t. */ #if @GNULIB_OVERRIDES_WINT_T@ # undef WINT_MIN # undef WINT_MAX # define WINT_MIN 0x0U # define WINT_MAX 0xffffffffU #endif #if ! @HAVE_C99_STDINT_H@ /* defines some of the stdint.h types as well, on glibc, IRIX 6.5, and OpenBSD 3.8 (via ). AIX 5.2 isn't needed and causes troubles. Mac OS X 10.4.6 includes (which is us), but relies on the system definitions, so include after @NEXT_STDINT_H@. */ # if @HAVE_SYS_TYPES_H@ && ! defined _AIX # include # endif # if @HAVE_INTTYPES_H@ /* In OpenBSD 3.8, includes , which defines int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__. also defines intptr_t and uintptr_t. */ # include # elif @HAVE_SYS_INTTYPES_H@ /* Solaris 7 has the types except the *_fast*_t types, and the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX. */ # include # endif # if @HAVE_SYS_BITYPES_H@ && ! defined __BIT_TYPES_DEFINED__ /* Linux libc4 >= 4.6.7 and libc5 have a that defines int{8,16,32,64}_t and __BIT_TYPES_DEFINED__. In libc5 >= 5.2.2 it is included by . */ # include # endif # undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H /* Minimum and maximum values for an integer type under the usual assumption. Return an unspecified value if BITS == 0, adding a check to pacify picky compilers. */ /* These are separate macros, because if you try to merge these macros into a single one, HP-UX cc rejects the resulting expression in constant expressions. */ # define _STDINT_UNSIGNED_MIN(bits, zero) \ (zero) # define _STDINT_SIGNED_MIN(bits, zero) \ (~ _STDINT_MAX (1, bits, zero)) # define _STDINT_MAX(signed, bits, zero) \ (((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1) #if !GNULIB_defined_stdint_types /* 7.18.1.1. Exact-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. */ # undef int8_t # undef uint8_t typedef signed char gl_int8_t; typedef unsigned char gl_uint8_t; # define int8_t gl_int8_t # define uint8_t gl_uint8_t # undef int16_t # undef uint16_t typedef short int gl_int16_t; typedef unsigned short int gl_uint16_t; # define int16_t gl_int16_t # define uint16_t gl_uint16_t # undef int32_t # undef uint32_t typedef int gl_int32_t; typedef unsigned int gl_uint32_t; # define int32_t gl_int32_t # define uint32_t gl_uint32_t /* If the system defines INT64_MAX, assume int64_t works. That way, if the underlying platform defines int64_t to be a 64-bit long long int, the code below won't mistakenly define it to be a 64-bit long int, which would mess up C++ name mangling. We must use #ifdef rather than #if, to avoid an error with HP-UX 10.20 cc. */ # ifdef INT64_MAX # define GL_INT64_T # else /* Do not undefine int64_t if gnulib is not being used with 64-bit types, since otherwise it breaks platforms like Tandem/NSK. */ # if LONG_MAX >> 31 >> 31 == 1 # undef int64_t typedef long int gl_int64_t; # define int64_t gl_int64_t # define GL_INT64_T # elif defined _MSC_VER # undef int64_t typedef __int64 gl_int64_t; # define int64_t gl_int64_t # define GL_INT64_T # else # undef int64_t typedef long long int gl_int64_t; # define int64_t gl_int64_t # define GL_INT64_T # endif # endif # ifdef UINT64_MAX # define GL_UINT64_T # else # if ULONG_MAX >> 31 >> 31 >> 1 == 1 # undef uint64_t typedef unsigned long int gl_uint64_t; # define uint64_t gl_uint64_t # define GL_UINT64_T # elif defined _MSC_VER # undef uint64_t typedef unsigned __int64 gl_uint64_t; # define uint64_t gl_uint64_t # define GL_UINT64_T # else # undef uint64_t typedef unsigned long long int gl_uint64_t; # define uint64_t gl_uint64_t # define GL_UINT64_T # endif # endif /* Avoid collision with Solaris 2.5.1 etc. */ # define _UINT8_T # define _UINT32_T # define _UINT64_T /* 7.18.1.2. Minimum-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types are the same as the corresponding N_t types. */ # undef int_least8_t # undef uint_least8_t # undef int_least16_t # undef uint_least16_t # undef int_least32_t # undef uint_least32_t # undef int_least64_t # undef uint_least64_t # define int_least8_t int8_t # define uint_least8_t uint8_t # define int_least16_t int16_t # define uint_least16_t uint16_t # define int_least32_t int32_t # define uint_least32_t uint32_t # ifdef GL_INT64_T # define int_least64_t int64_t # endif # ifdef GL_UINT64_T # define uint_least64_t uint64_t # endif /* 7.18.1.3. Fastest minimum-width integer types */ /* Note: Other substitutes may define these types differently. It is not recommended to use these types in public header files. */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types are taken from the same list of types. The following code normally uses types consistent with glibc, as that lessens the chance of incompatibility with older GNU hosts. */ # undef int_fast8_t # undef uint_fast8_t # undef int_fast16_t # undef uint_fast16_t # undef int_fast32_t # undef uint_fast32_t # undef int_fast64_t # undef uint_fast64_t typedef signed char gl_int_fast8_t; typedef unsigned char gl_uint_fast8_t; # ifdef __sun /* Define types compatible with SunOS 5.10, so that code compiled under earlier SunOS versions works with code compiled under SunOS 5.10. */ typedef int gl_int_fast32_t; typedef unsigned int gl_uint_fast32_t; # else typedef long int gl_int_fast32_t; typedef unsigned long int gl_uint_fast32_t; # endif typedef gl_int_fast32_t gl_int_fast16_t; typedef gl_uint_fast32_t gl_uint_fast16_t; # define int_fast8_t gl_int_fast8_t # define uint_fast8_t gl_uint_fast8_t # define int_fast16_t gl_int_fast16_t # define uint_fast16_t gl_uint_fast16_t # define int_fast32_t gl_int_fast32_t # define uint_fast32_t gl_uint_fast32_t # ifdef GL_INT64_T # define int_fast64_t int64_t # endif # ifdef GL_UINT64_T # define uint_fast64_t uint64_t # endif /* 7.18.1.4. Integer types capable of holding object pointers */ /* kLIBC's defines _INTPTR_T_DECLARED and needs its own definitions of intptr_t and uintptr_t (which use int and unsigned) to avoid clashes with declarations of system functions like sbrk. Similarly, mingw 5.22 defines _INTPTR_T_DEFINED and _UINTPTR_T_DEFINED and needs its own definitions of intptr_t and uintptr_t to avoid conflicting declarations of system functions like _findclose in . */ # if !((defined __KLIBC__ && defined _INTPTR_T_DECLARED) \ || (defined __MINGW32__ && defined _INTPTR_T_DEFINED && defined _UINTPTR_T_DEFINED)) # undef intptr_t # undef uintptr_t # ifdef _WIN64 typedef long long int gl_intptr_t; typedef unsigned long long int gl_uintptr_t; # else typedef long int gl_intptr_t; typedef unsigned long int gl_uintptr_t; # endif # define intptr_t gl_intptr_t # define uintptr_t gl_uintptr_t # endif /* 7.18.1.5. Greatest-width integer types */ /* Note: These types are compiler dependent. It may be unwise to use them in public header files. */ /* If the system defines INTMAX_MAX, assume that intmax_t works, and similarly for UINTMAX_MAX and uintmax_t. This avoids problems with assuming one type where another is used by the system. */ # ifndef INTMAX_MAX # undef INTMAX_C # undef intmax_t # if LONG_MAX >> 30 == 1 typedef long long int gl_intmax_t; # define intmax_t gl_intmax_t # elif defined GL_INT64_T # define intmax_t int64_t # else typedef long int gl_intmax_t; # define intmax_t gl_intmax_t # endif # endif # ifndef UINTMAX_MAX # undef UINTMAX_C # undef uintmax_t # if ULONG_MAX >> 31 == 1 typedef unsigned long long int gl_uintmax_t; # define uintmax_t gl_uintmax_t # elif defined GL_UINT64_T # define uintmax_t uint64_t # else typedef unsigned long int gl_uintmax_t; # define uintmax_t gl_uintmax_t # endif # endif /* Verify that intmax_t and uintmax_t have the same size. Too much code breaks if this is not the case. If this check fails, the reason is likely to be found in the autoconf macros. */ typedef int _verify_intmax_size[sizeof (intmax_t) == sizeof (uintmax_t) ? 1 : -1]; # define GNULIB_defined_stdint_types 1 # endif /* !GNULIB_defined_stdint_types */ /* 7.18.2. Limits of specified-width integer types */ /* 7.18.2.1. Limits of exact-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. */ # undef INT8_MIN # undef INT8_MAX # undef UINT8_MAX # define INT8_MIN (~ INT8_MAX) # define INT8_MAX 127 # define UINT8_MAX 255 # undef INT16_MIN # undef INT16_MAX # undef UINT16_MAX # define INT16_MIN (~ INT16_MAX) # define INT16_MAX 32767 # define UINT16_MAX 65535 # undef INT32_MIN # undef INT32_MAX # undef UINT32_MAX # define INT32_MIN (~ INT32_MAX) # define INT32_MAX 2147483647 # define UINT32_MAX 4294967295U # if defined GL_INT64_T && ! defined INT64_MAX /* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0 evaluates the latter incorrectly in preprocessor expressions. */ # define INT64_MIN (- INTMAX_C (1) << 63) # define INT64_MAX INTMAX_C (9223372036854775807) # endif # if defined GL_UINT64_T && ! defined UINT64_MAX # define UINT64_MAX UINTMAX_C (18446744073709551615) # endif /* 7.18.2.2. Limits of minimum-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types are the same as the corresponding N_t types. */ # undef INT_LEAST8_MIN # undef INT_LEAST8_MAX # undef UINT_LEAST8_MAX # define INT_LEAST8_MIN INT8_MIN # define INT_LEAST8_MAX INT8_MAX # define UINT_LEAST8_MAX UINT8_MAX # undef INT_LEAST16_MIN # undef INT_LEAST16_MAX # undef UINT_LEAST16_MAX # define INT_LEAST16_MIN INT16_MIN # define INT_LEAST16_MAX INT16_MAX # define UINT_LEAST16_MAX UINT16_MAX # undef INT_LEAST32_MIN # undef INT_LEAST32_MAX # undef UINT_LEAST32_MAX # define INT_LEAST32_MIN INT32_MIN # define INT_LEAST32_MAX INT32_MAX # define UINT_LEAST32_MAX UINT32_MAX # undef INT_LEAST64_MIN # undef INT_LEAST64_MAX # ifdef GL_INT64_T # define INT_LEAST64_MIN INT64_MIN # define INT_LEAST64_MAX INT64_MAX # endif # undef UINT_LEAST64_MAX # ifdef GL_UINT64_T # define UINT_LEAST64_MAX UINT64_MAX # endif /* 7.18.2.3. Limits of fastest minimum-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types are taken from the same list of types. */ # undef INT_FAST8_MIN # undef INT_FAST8_MAX # undef UINT_FAST8_MAX # define INT_FAST8_MIN SCHAR_MIN # define INT_FAST8_MAX SCHAR_MAX # define UINT_FAST8_MAX UCHAR_MAX # undef INT_FAST16_MIN # undef INT_FAST16_MAX # undef UINT_FAST16_MAX # define INT_FAST16_MIN INT_FAST32_MIN # define INT_FAST16_MAX INT_FAST32_MAX # define UINT_FAST16_MAX UINT_FAST32_MAX # undef INT_FAST32_MIN # undef INT_FAST32_MAX # undef UINT_FAST32_MAX # ifdef __sun # define INT_FAST32_MIN INT_MIN # define INT_FAST32_MAX INT_MAX # define UINT_FAST32_MAX UINT_MAX # else # define INT_FAST32_MIN LONG_MIN # define INT_FAST32_MAX LONG_MAX # define UINT_FAST32_MAX ULONG_MAX # endif # undef INT_FAST64_MIN # undef INT_FAST64_MAX # ifdef GL_INT64_T # define INT_FAST64_MIN INT64_MIN # define INT_FAST64_MAX INT64_MAX # endif # undef UINT_FAST64_MAX # ifdef GL_UINT64_T # define UINT_FAST64_MAX UINT64_MAX # endif /* 7.18.2.4. Limits of integer types capable of holding object pointers */ # undef INTPTR_MIN # undef INTPTR_MAX # undef UINTPTR_MAX # ifdef _WIN64 # define INTPTR_MIN LLONG_MIN # define INTPTR_MAX LLONG_MAX # define UINTPTR_MAX ULLONG_MAX # else # define INTPTR_MIN LONG_MIN # define INTPTR_MAX LONG_MAX # define UINTPTR_MAX ULONG_MAX # endif /* 7.18.2.5. Limits of greatest-width integer types */ # ifndef INTMAX_MAX # undef INTMAX_MIN # ifdef INT64_MAX # define INTMAX_MIN INT64_MIN # define INTMAX_MAX INT64_MAX # else # define INTMAX_MIN INT32_MIN # define INTMAX_MAX INT32_MAX # endif # endif # ifndef UINTMAX_MAX # ifdef UINT64_MAX # define UINTMAX_MAX UINT64_MAX # else # define UINTMAX_MAX UINT32_MAX # endif # endif /* 7.18.3. Limits of other integer types */ /* ptrdiff_t limits */ # undef PTRDIFF_MIN # undef PTRDIFF_MAX # if @APPLE_UNIVERSAL_BUILD@ # ifdef _LP64 # define PTRDIFF_MIN _STDINT_SIGNED_MIN (64, 0l) # define PTRDIFF_MAX _STDINT_MAX (1, 64, 0l) # else # define PTRDIFF_MIN _STDINT_SIGNED_MIN (32, 0) # define PTRDIFF_MAX _STDINT_MAX (1, 32, 0) # endif # else # define PTRDIFF_MIN \ _STDINT_SIGNED_MIN (@BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) # define PTRDIFF_MAX \ _STDINT_MAX (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) # endif /* sig_atomic_t limits */ # undef SIG_ATOMIC_MIN # undef SIG_ATOMIC_MAX # if @HAVE_SIGNED_SIG_ATOMIC_T@ # define SIG_ATOMIC_MIN \ _STDINT_SIGNED_MIN (@BITSIZEOF_SIG_ATOMIC_T@, 0@SIG_ATOMIC_T_SUFFIX@) # else # define SIG_ATOMIC_MIN \ _STDINT_UNSIGNED_MIN (@BITSIZEOF_SIG_ATOMIC_T@, 0@SIG_ATOMIC_T_SUFFIX@) # endif # define SIG_ATOMIC_MAX \ _STDINT_MAX (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \ 0@SIG_ATOMIC_T_SUFFIX@) /* size_t limit */ # undef SIZE_MAX # if @APPLE_UNIVERSAL_BUILD@ # ifdef _LP64 # define SIZE_MAX _STDINT_MAX (0, 64, 0ul) # else # define SIZE_MAX _STDINT_MAX (0, 32, 0ul) # endif # else # define SIZE_MAX _STDINT_MAX (0, @BITSIZEOF_SIZE_T@, 0@SIZE_T_SUFFIX@) # endif /* wchar_t limits */ /* Get WCHAR_MIN, WCHAR_MAX. This include is not on the top, above, because on OSF/1 4.0 we have a sequence of nested includes -> -> -> , and the latter includes and assumes its types are already defined. */ # if @HAVE_WCHAR_H@ && ! (defined WCHAR_MIN && defined WCHAR_MAX) /* BSD/OS 4.0.1 has a bug: , and must be included before . */ # include # include # include # define _GL_JUST_INCLUDE_SYSTEM_WCHAR_H # include # undef _GL_JUST_INCLUDE_SYSTEM_WCHAR_H # endif # undef WCHAR_MIN # undef WCHAR_MAX # if @HAVE_SIGNED_WCHAR_T@ # define WCHAR_MIN \ _STDINT_SIGNED_MIN (@BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) # else # define WCHAR_MIN \ _STDINT_UNSIGNED_MIN (@BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) # endif # define WCHAR_MAX \ _STDINT_MAX (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) /* wint_t limits */ /* If gnulib's or overrides wint_t, @WINT_T_SUFFIX@ is not accurate, therefore use the definitions from above. */ # if !@GNULIB_OVERRIDES_WINT_T@ # undef WINT_MIN # undef WINT_MAX # if @HAVE_SIGNED_WINT_T@ # define WINT_MIN \ _STDINT_SIGNED_MIN (@BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) # else # define WINT_MIN \ _STDINT_UNSIGNED_MIN (@BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) # endif # define WINT_MAX \ _STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) # endif /* 7.18.4. Macros for integer constants */ /* 7.18.4.1. Macros for minimum-width integer constants */ /* According to ISO C 99 Technical Corrigendum 1 */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits, and int is 32 bits. */ # undef INT8_C # undef UINT8_C # define INT8_C(x) x # define UINT8_C(x) x # undef INT16_C # undef UINT16_C # define INT16_C(x) x # define UINT16_C(x) x # undef INT32_C # undef UINT32_C # define INT32_C(x) x # define UINT32_C(x) x ## U # undef INT64_C # undef UINT64_C # if LONG_MAX >> 31 >> 31 == 1 # define INT64_C(x) x##L # elif defined _MSC_VER # define INT64_C(x) x##i64 # else # define INT64_C(x) x##LL # endif # if ULONG_MAX >> 31 >> 31 >> 1 == 1 # define UINT64_C(x) x##UL # elif defined _MSC_VER # define UINT64_C(x) x##ui64 # else # define UINT64_C(x) x##ULL # endif /* 7.18.4.2. Macros for greatest-width integer constants */ # ifndef INTMAX_C # if LONG_MAX >> 30 == 1 # define INTMAX_C(x) x##LL # elif defined GL_INT64_T # define INTMAX_C(x) INT64_C(x) # else # define INTMAX_C(x) x##L # endif # endif # ifndef UINTMAX_C # if ULONG_MAX >> 31 == 1 # define UINTMAX_C(x) x##ULL # elif defined GL_UINT64_T # define UINTMAX_C(x) UINT64_C(x) # else # define UINTMAX_C(x) x##UL # endif # endif #endif /* !@HAVE_C99_STDINT_H@ */ /* Macros specified by ISO/IEC TS 18661-1:2014. */ #if (!defined UINTMAX_WIDTH \ && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__)) # ifdef INT8_MAX # define INT8_WIDTH _GL_INTEGER_WIDTH (INT8_MIN, INT8_MAX) # endif # ifdef UINT8_MAX # define UINT8_WIDTH _GL_INTEGER_WIDTH (0, UINT8_MAX) # endif # ifdef INT16_MAX # define INT16_WIDTH _GL_INTEGER_WIDTH (INT16_MIN, INT16_MAX) # endif # ifdef UINT16_MAX # define UINT16_WIDTH _GL_INTEGER_WIDTH (0, UINT16_MAX) # endif # ifdef INT32_MAX # define INT32_WIDTH _GL_INTEGER_WIDTH (INT32_MIN, INT32_MAX) # endif # ifdef UINT32_MAX # define UINT32_WIDTH _GL_INTEGER_WIDTH (0, UINT32_MAX) # endif # ifdef INT64_MAX # define INT64_WIDTH _GL_INTEGER_WIDTH (INT64_MIN, INT64_MAX) # endif # ifdef UINT64_MAX # define UINT64_WIDTH _GL_INTEGER_WIDTH (0, UINT64_MAX) # endif # define INT_LEAST8_WIDTH _GL_INTEGER_WIDTH (INT_LEAST8_MIN, INT_LEAST8_MAX) # define UINT_LEAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST8_MAX) # define INT_LEAST16_WIDTH _GL_INTEGER_WIDTH (INT_LEAST16_MIN, INT_LEAST16_MAX) # define UINT_LEAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST16_MAX) # define INT_LEAST32_WIDTH _GL_INTEGER_WIDTH (INT_LEAST32_MIN, INT_LEAST32_MAX) # define UINT_LEAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST32_MAX) # define INT_LEAST64_WIDTH _GL_INTEGER_WIDTH (INT_LEAST64_MIN, INT_LEAST64_MAX) # define UINT_LEAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST64_MAX) # define INT_FAST8_WIDTH _GL_INTEGER_WIDTH (INT_FAST8_MIN, INT_FAST8_MAX) # define UINT_FAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST8_MAX) # define INT_FAST16_WIDTH _GL_INTEGER_WIDTH (INT_FAST16_MIN, INT_FAST16_MAX) # define UINT_FAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST16_MAX) # define INT_FAST32_WIDTH _GL_INTEGER_WIDTH (INT_FAST32_MIN, INT_FAST32_MAX) # define UINT_FAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST32_MAX) # define INT_FAST64_WIDTH _GL_INTEGER_WIDTH (INT_FAST64_MIN, INT_FAST64_MAX) # define UINT_FAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST64_MAX) # define INTPTR_WIDTH _GL_INTEGER_WIDTH (INTPTR_MIN, INTPTR_MAX) # define UINTPTR_WIDTH _GL_INTEGER_WIDTH (0, UINTPTR_MAX) # define INTMAX_WIDTH _GL_INTEGER_WIDTH (INTMAX_MIN, INTMAX_MAX) # define UINTMAX_WIDTH _GL_INTEGER_WIDTH (0, UINTMAX_MAX) # define PTRDIFF_WIDTH _GL_INTEGER_WIDTH (PTRDIFF_MIN, PTRDIFF_MAX) # define SIZE_WIDTH _GL_INTEGER_WIDTH (0, SIZE_MAX) # define WCHAR_WIDTH _GL_INTEGER_WIDTH (WCHAR_MIN, WCHAR_MAX) # ifdef WINT_MAX # define WINT_WIDTH _GL_INTEGER_WIDTH (WINT_MIN, WINT_MAX) # endif # ifdef SIG_ATOMIC_MAX # define SIG_ATOMIC_WIDTH _GL_INTEGER_WIDTH (SIG_ATOMIC_MIN, SIG_ATOMIC_MAX) # endif #endif /* !WINT_WIDTH && (_GNU_SOURCE || __STDC_WANT_IEC_60559_BFP_EXT__) */ #endif /* _@GUARD_PREFIX@_STDINT_H */ #endif /* !(defined __ANDROID__ && ...) */ #endif /* !defined _@GUARD_PREFIX@_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */ make-4.3/lib/exitfail.c0000644000175000017500000000153413611136471011743 00000000000000/* Failure exit status Copyright (C) 2002-2003, 2005-2007, 2009-2020 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 the Free Software Foundation; either version 3 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, see . */ #include #include "exitfail.h" #include int volatile exit_failure = EXIT_FAILURE; make-4.3/lib/stdlib.in.h0000644000175000017500000011410113611136472012025 00000000000000/* A GNU-like . Copyright (C) 1995, 2001-2004, 2006-2020 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 the Free Software Foundation; either version 3 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, see . */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_system_stdlib_h || defined __need_malloc_and_calloc /* Special invocation conventions inside some gnulib header files, and inside some glibc header files, respectively. */ #@INCLUDE_NEXT@ @NEXT_STDLIB_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_STDLIB_H /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_STDLIB_H@ #ifndef _@GUARD_PREFIX@_STDLIB_H #define _@GUARD_PREFIX@_STDLIB_H /* NetBSD 5.0 mis-defines NULL. */ #include /* MirBSD 10 defines WEXITSTATUS in , not in . */ #if @GNULIB_SYSTEM_POSIX@ && !defined WEXITSTATUS # include #endif /* Solaris declares getloadavg() in . */ #if (@GNULIB_GETLOADAVG@ || defined GNULIB_POSIXCHECK) && @HAVE_SYS_LOADAVG_H@ /* OpenIndiana has a bug: must be included before . */ # include # include #endif /* Native Windows platforms declare mktemp() in . */ #if 0 && (defined _WIN32 && ! defined __CYGWIN__) # include #endif #if @GNULIB_RANDOM_R@ /* OSF/1 5.1 declares 'struct random_data' in , which is included from if _REENTRANT is defined. Include it whenever we need 'struct random_data'. */ # if @HAVE_RANDOM_H@ # include # endif # if !@HAVE_STRUCT_RANDOM_DATA@ || @REPLACE_RANDOM_R@ || !@HAVE_RANDOM_R@ # include # endif # if !@HAVE_STRUCT_RANDOM_DATA@ /* Define 'struct random_data'. But allow multiple gnulib generated replacements to coexist. */ # if !GNULIB_defined_struct_random_data struct random_data { int32_t *fptr; /* Front pointer. */ int32_t *rptr; /* Rear pointer. */ int32_t *state; /* Array of state values. */ int rand_type; /* Type of random number generator. */ int rand_deg; /* Degree of random number generator. */ int rand_sep; /* Distance between front and rear. */ int32_t *end_ptr; /* Pointer behind state table. */ }; # define GNULIB_defined_struct_random_data 1 # endif # endif #endif #if (@GNULIB_MKSTEMP@ || @GNULIB_MKSTEMPS@ || @GNULIB_MKOSTEMP@ || @GNULIB_MKOSTEMPS@ || @GNULIB_GETSUBOPT@ || defined GNULIB_POSIXCHECK) && ! defined __GLIBC__ && !(defined _WIN32 && ! defined __CYGWIN__) /* On Mac OS X 10.3, only declares mkstemp. */ /* On Mac OS X 10.5, only declares mkstemps. */ /* On Mac OS X 10.13, only declares mkostemp and mkostemps. */ /* On Cygwin 1.7.1, only declares getsubopt. */ /* But avoid namespace pollution on glibc systems and native Windows. */ # include #endif /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __pure__ was added in gcc 2.96. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) #else # define _GL_ATTRIBUTE_PURE /* empty */ #endif /* The definition of _Noreturn is copied here. */ /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Some systems do not define EXIT_*, despite otherwise supporting C89. */ #ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 #endif /* Tandem/NSK and other platforms that define EXIT_FAILURE as -1 interfere with proper operation of xargs. */ #ifndef EXIT_FAILURE # define EXIT_FAILURE 1 #elif EXIT_FAILURE != 1 # undef EXIT_FAILURE # define EXIT_FAILURE 1 #endif #if @GNULIB__EXIT@ /* Terminate the current process with the given return code, without running the 'atexit' handlers. */ # if !@HAVE__EXIT@ _GL_FUNCDECL_SYS (_Exit, _Noreturn void, (int status)); # endif _GL_CXXALIAS_SYS (_Exit, void, (int status)); _GL_CXXALIASWARN (_Exit); #elif defined GNULIB_POSIXCHECK # undef _Exit # if HAVE_RAW_DECL__EXIT _GL_WARN_ON_USE (_Exit, "_Exit is unportable - " "use gnulib module _Exit for portability"); # endif #endif #if @GNULIB_ATOLL@ /* Parse a signed decimal integer. Returns the value of the integer. Errors are not detected. */ # if !@HAVE_ATOLL@ _GL_FUNCDECL_SYS (atoll, long long, (const char *string) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (atoll, long long, (const char *string)); _GL_CXXALIASWARN (atoll); #elif defined GNULIB_POSIXCHECK # undef atoll # if HAVE_RAW_DECL_ATOLL _GL_WARN_ON_USE (atoll, "atoll is unportable - " "use gnulib module atoll for portability"); # endif #endif #if @GNULIB_CALLOC_POSIX@ # if @REPLACE_CALLOC@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef calloc # define calloc rpl_calloc # endif _GL_FUNCDECL_RPL (calloc, void *, (size_t nmemb, size_t size)); _GL_CXXALIAS_RPL (calloc, void *, (size_t nmemb, size_t size)); # else _GL_CXXALIAS_SYS (calloc, void *, (size_t nmemb, size_t size)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (calloc); # endif #elif defined GNULIB_POSIXCHECK # undef calloc /* Assume calloc is always declared. */ _GL_WARN_ON_USE (calloc, "calloc is not POSIX compliant everywhere - " "use gnulib module calloc-posix for portability"); #endif #if @GNULIB_CANONICALIZE_FILE_NAME@ # if @REPLACE_CANONICALIZE_FILE_NAME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define canonicalize_file_name rpl_canonicalize_file_name # endif _GL_FUNCDECL_RPL (canonicalize_file_name, char *, (const char *name) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (canonicalize_file_name, char *, (const char *name)); # else # if !@HAVE_CANONICALIZE_FILE_NAME@ _GL_FUNCDECL_SYS (canonicalize_file_name, char *, (const char *name) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (canonicalize_file_name, char *, (const char *name)); # endif _GL_CXXALIASWARN (canonicalize_file_name); #elif defined GNULIB_POSIXCHECK # undef canonicalize_file_name # if HAVE_RAW_DECL_CANONICALIZE_FILE_NAME _GL_WARN_ON_USE (canonicalize_file_name, "canonicalize_file_name is unportable - " "use gnulib module canonicalize-lgpl for portability"); # endif #endif #if @GNULIB_GETLOADAVG@ /* Store max(NELEM,3) load average numbers in LOADAVG[]. The three numbers are the load average of the last 1 minute, the last 5 minutes, and the last 15 minutes, respectively. LOADAVG is an array of NELEM numbers. */ # if !@HAVE_DECL_GETLOADAVG@ _GL_FUNCDECL_SYS (getloadavg, int, (double loadavg[], int nelem) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (getloadavg, int, (double loadavg[], int nelem)); _GL_CXXALIASWARN (getloadavg); #elif defined GNULIB_POSIXCHECK # undef getloadavg # if HAVE_RAW_DECL_GETLOADAVG _GL_WARN_ON_USE (getloadavg, "getloadavg is not portable - " "use gnulib module getloadavg for portability"); # endif #endif #if @GNULIB_GETSUBOPT@ /* Assuming *OPTIONP is a comma separated list of elements of the form "token" or "token=value", getsubopt parses the first of these elements. If the first element refers to a "token" that is member of the given NULL-terminated array of tokens: - It replaces the comma with a NUL byte, updates *OPTIONP to point past the first option and the comma, sets *VALUEP to the value of the element (or NULL if it doesn't contain an "=" sign), - It returns the index of the "token" in the given array of tokens. Otherwise it returns -1, and *OPTIONP and *VALUEP are undefined. For more details see the POSIX specification. https://pubs.opengroup.org/onlinepubs/9699919799/functions/getsubopt.html */ # if !@HAVE_GETSUBOPT@ _GL_FUNCDECL_SYS (getsubopt, int, (char **optionp, char *const *tokens, char **valuep) _GL_ARG_NONNULL ((1, 2, 3))); # endif _GL_CXXALIAS_SYS (getsubopt, int, (char **optionp, char *const *tokens, char **valuep)); _GL_CXXALIASWARN (getsubopt); #elif defined GNULIB_POSIXCHECK # undef getsubopt # if HAVE_RAW_DECL_GETSUBOPT _GL_WARN_ON_USE (getsubopt, "getsubopt is unportable - " "use gnulib module getsubopt for portability"); # endif #endif #if @GNULIB_GRANTPT@ /* Change the ownership and access permission of the slave side of the pseudo-terminal whose master side is specified by FD. */ # if !@HAVE_GRANTPT@ _GL_FUNCDECL_SYS (grantpt, int, (int fd)); # endif _GL_CXXALIAS_SYS (grantpt, int, (int fd)); _GL_CXXALIASWARN (grantpt); #elif defined GNULIB_POSIXCHECK # undef grantpt # if HAVE_RAW_DECL_GRANTPT _GL_WARN_ON_USE (grantpt, "grantpt is not portable - " "use gnulib module grantpt for portability"); # endif #endif /* If _GL_USE_STDLIB_ALLOC is nonzero, the including module does not rely on GNU or POSIX semantics for malloc and realloc (for example, by never specifying a zero size), so it does not need malloc or realloc to be redefined. */ #if @GNULIB_MALLOC_POSIX@ # if @REPLACE_MALLOC@ # if !((defined __cplusplus && defined GNULIB_NAMESPACE) \ || _GL_USE_STDLIB_ALLOC) # undef malloc # define malloc rpl_malloc # endif _GL_FUNCDECL_RPL (malloc, void *, (size_t size)); _GL_CXXALIAS_RPL (malloc, void *, (size_t size)); # else _GL_CXXALIAS_SYS (malloc, void *, (size_t size)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (malloc); # endif #elif defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC # undef malloc /* Assume malloc is always declared. */ _GL_WARN_ON_USE (malloc, "malloc is not POSIX compliant everywhere - " "use gnulib module malloc-posix for portability"); #endif /* Convert a multibyte character to a wide character. */ #if @GNULIB_MBTOWC@ # if @REPLACE_MBTOWC@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbtowc # define mbtowc rpl_mbtowc # endif _GL_FUNCDECL_RPL (mbtowc, int, (wchar_t *pwc, const char *s, size_t n)); _GL_CXXALIAS_RPL (mbtowc, int, (wchar_t *pwc, const char *s, size_t n)); # else # if !@HAVE_MBTOWC@ _GL_FUNCDECL_SYS (mbtowc, int, (wchar_t *pwc, const char *s, size_t n)); # endif _GL_CXXALIAS_SYS (mbtowc, int, (wchar_t *pwc, const char *s, size_t n)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mbtowc); # endif #elif defined GNULIB_POSIXCHECK # undef mbtowc # if HAVE_RAW_DECL_MBTOWC _GL_WARN_ON_USE (mbtowc, "mbtowc is not portable - " "use gnulib module mbtowc for portability"); # endif #endif #if @GNULIB_MKDTEMP@ /* Create a unique temporary directory from TEMPLATE. The last six characters of TEMPLATE must be "XXXXXX"; they are replaced with a string that makes the directory name unique. Returns TEMPLATE, or a null pointer if it cannot get a unique name. The directory is created mode 700. */ # if !@HAVE_MKDTEMP@ _GL_FUNCDECL_SYS (mkdtemp, char *, (char * /*template*/) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkdtemp, char *, (char * /*template*/)); _GL_CXXALIASWARN (mkdtemp); #elif defined GNULIB_POSIXCHECK # undef mkdtemp # if HAVE_RAW_DECL_MKDTEMP _GL_WARN_ON_USE (mkdtemp, "mkdtemp is unportable - " "use gnulib module mkdtemp for portability"); # endif #endif #if @GNULIB_MKOSTEMP@ /* Create a unique temporary file from TEMPLATE. The last six characters of TEMPLATE must be "XXXXXX"; they are replaced with a string that makes the file name unique. The flags are a bitmask, possibly including O_CLOEXEC (defined in ) and O_TEXT, O_BINARY (defined in "binary-io.h"). The file is then created, with the specified flags, ensuring it didn't exist before. The file is created read-write (mask at least 0600 & ~umask), but it may be world-readable and world-writable (mask 0666 & ~umask), depending on the implementation. Returns the open file descriptor if successful, otherwise -1 and errno set. */ # if !@HAVE_MKOSTEMP@ _GL_FUNCDECL_SYS (mkostemp, int, (char * /*template*/, int /*flags*/) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkostemp, int, (char * /*template*/, int /*flags*/)); _GL_CXXALIASWARN (mkostemp); #elif defined GNULIB_POSIXCHECK # undef mkostemp # if HAVE_RAW_DECL_MKOSTEMP _GL_WARN_ON_USE (mkostemp, "mkostemp is unportable - " "use gnulib module mkostemp for portability"); # endif #endif #if @GNULIB_MKOSTEMPS@ /* Create a unique temporary file from TEMPLATE. The last six characters of TEMPLATE before a suffix of length SUFFIXLEN must be "XXXXXX"; they are replaced with a string that makes the file name unique. The flags are a bitmask, possibly including O_CLOEXEC (defined in ) and O_TEXT, O_BINARY (defined in "binary-io.h"). The file is then created, with the specified flags, ensuring it didn't exist before. The file is created read-write (mask at least 0600 & ~umask), but it may be world-readable and world-writable (mask 0666 & ~umask), depending on the implementation. Returns the open file descriptor if successful, otherwise -1 and errno set. */ # if !@HAVE_MKOSTEMPS@ _GL_FUNCDECL_SYS (mkostemps, int, (char * /*template*/, int /*suffixlen*/, int /*flags*/) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkostemps, int, (char * /*template*/, int /*suffixlen*/, int /*flags*/)); _GL_CXXALIASWARN (mkostemps); #elif defined GNULIB_POSIXCHECK # undef mkostemps # if HAVE_RAW_DECL_MKOSTEMPS _GL_WARN_ON_USE (mkostemps, "mkostemps is unportable - " "use gnulib module mkostemps for portability"); # endif #endif #if @GNULIB_MKSTEMP@ /* Create a unique temporary file from TEMPLATE. The last six characters of TEMPLATE must be "XXXXXX"; they are replaced with a string that makes the file name unique. The file is then created, ensuring it didn't exist before. The file is created read-write (mask at least 0600 & ~umask), but it may be world-readable and world-writable (mask 0666 & ~umask), depending on the implementation. Returns the open file descriptor if successful, otherwise -1 and errno set. */ # if @REPLACE_MKSTEMP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mkstemp rpl_mkstemp # endif _GL_FUNCDECL_RPL (mkstemp, int, (char * /*template*/) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mkstemp, int, (char * /*template*/)); # else # if ! @HAVE_MKSTEMP@ _GL_FUNCDECL_SYS (mkstemp, int, (char * /*template*/) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkstemp, int, (char * /*template*/)); # endif _GL_CXXALIASWARN (mkstemp); #elif defined GNULIB_POSIXCHECK # undef mkstemp # if HAVE_RAW_DECL_MKSTEMP _GL_WARN_ON_USE (mkstemp, "mkstemp is unportable - " "use gnulib module mkstemp for portability"); # endif #endif #if @GNULIB_MKSTEMPS@ /* Create a unique temporary file from TEMPLATE. The last six characters of TEMPLATE prior to a suffix of length SUFFIXLEN must be "XXXXXX"; they are replaced with a string that makes the file name unique. The file is then created, ensuring it didn't exist before. The file is created read-write (mask at least 0600 & ~umask), but it may be world-readable and world-writable (mask 0666 & ~umask), depending on the implementation. Returns the open file descriptor if successful, otherwise -1 and errno set. */ # if !@HAVE_MKSTEMPS@ _GL_FUNCDECL_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/)); _GL_CXXALIASWARN (mkstemps); #elif defined GNULIB_POSIXCHECK # undef mkstemps # if HAVE_RAW_DECL_MKSTEMPS _GL_WARN_ON_USE (mkstemps, "mkstemps is unportable - " "use gnulib module mkstemps for portability"); # endif #endif #if @GNULIB_POSIX_OPENPT@ /* Return an FD open to the master side of a pseudo-terminal. Flags should include O_RDWR, and may also include O_NOCTTY. */ # if !@HAVE_POSIX_OPENPT@ _GL_FUNCDECL_SYS (posix_openpt, int, (int flags)); # endif _GL_CXXALIAS_SYS (posix_openpt, int, (int flags)); _GL_CXXALIASWARN (posix_openpt); #elif defined GNULIB_POSIXCHECK # undef posix_openpt # if HAVE_RAW_DECL_POSIX_OPENPT _GL_WARN_ON_USE (posix_openpt, "posix_openpt is not portable - " "use gnulib module posix_openpt for portability"); # endif #endif #if @GNULIB_PTSNAME@ /* Return the pathname of the pseudo-terminal slave associated with the master FD is open on, or NULL on errors. */ # if @REPLACE_PTSNAME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ptsname # define ptsname rpl_ptsname # endif _GL_FUNCDECL_RPL (ptsname, char *, (int fd)); _GL_CXXALIAS_RPL (ptsname, char *, (int fd)); # else # if !@HAVE_PTSNAME@ _GL_FUNCDECL_SYS (ptsname, char *, (int fd)); # endif _GL_CXXALIAS_SYS (ptsname, char *, (int fd)); # endif _GL_CXXALIASWARN (ptsname); #elif defined GNULIB_POSIXCHECK # undef ptsname # if HAVE_RAW_DECL_PTSNAME _GL_WARN_ON_USE (ptsname, "ptsname is not portable - " "use gnulib module ptsname for portability"); # endif #endif #if @GNULIB_PTSNAME_R@ /* Set the pathname of the pseudo-terminal slave associated with the master FD is open on and return 0, or set errno and return non-zero on errors. */ # if @REPLACE_PTSNAME_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ptsname_r # define ptsname_r rpl_ptsname_r # endif _GL_FUNCDECL_RPL (ptsname_r, int, (int fd, char *buf, size_t len)); _GL_CXXALIAS_RPL (ptsname_r, int, (int fd, char *buf, size_t len)); # else # if !@HAVE_PTSNAME_R@ _GL_FUNCDECL_SYS (ptsname_r, int, (int fd, char *buf, size_t len)); # endif _GL_CXXALIAS_SYS (ptsname_r, int, (int fd, char *buf, size_t len)); # endif _GL_CXXALIASWARN (ptsname_r); #elif defined GNULIB_POSIXCHECK # undef ptsname_r # if HAVE_RAW_DECL_PTSNAME_R _GL_WARN_ON_USE (ptsname_r, "ptsname_r is not portable - " "use gnulib module ptsname_r for portability"); # endif #endif #if @GNULIB_PUTENV@ # if @REPLACE_PUTENV@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef putenv # define putenv rpl_putenv # endif _GL_FUNCDECL_RPL (putenv, int, (char *string) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (putenv, int, (char *string)); # else _GL_CXXALIAS_SYS (putenv, int, (char *string)); # endif _GL_CXXALIASWARN (putenv); #endif #if @GNULIB_QSORT_R@ /* Sort an array of NMEMB elements, starting at address BASE, each element occupying SIZE bytes, in ascending order according to the comparison function COMPARE. */ # if @REPLACE_QSORT_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef qsort_r # define qsort_r rpl_qsort_r # endif _GL_FUNCDECL_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size, int (*compare) (void const *, void const *, void *), void *arg) _GL_ARG_NONNULL ((1, 4))); _GL_CXXALIAS_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size, int (*compare) (void const *, void const *, void *), void *arg)); # else # if !@HAVE_QSORT_R@ _GL_FUNCDECL_SYS (qsort_r, void, (void *base, size_t nmemb, size_t size, int (*compare) (void const *, void const *, void *), void *arg) _GL_ARG_NONNULL ((1, 4))); # endif _GL_CXXALIAS_SYS (qsort_r, void, (void *base, size_t nmemb, size_t size, int (*compare) (void const *, void const *, void *), void *arg)); # endif _GL_CXXALIASWARN (qsort_r); #elif defined GNULIB_POSIXCHECK # undef qsort_r # if HAVE_RAW_DECL_QSORT_R _GL_WARN_ON_USE (qsort_r, "qsort_r is not portable - " "use gnulib module qsort_r for portability"); # endif #endif #if @GNULIB_RANDOM_R@ # if !@HAVE_RANDOM_R@ # ifndef RAND_MAX # define RAND_MAX 2147483647 # endif # endif #endif #if @GNULIB_RANDOM@ # if @REPLACE_RANDOM@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef random # define random rpl_random # endif _GL_FUNCDECL_RPL (random, long, (void)); _GL_CXXALIAS_RPL (random, long, (void)); # else # if !@HAVE_RANDOM@ _GL_FUNCDECL_SYS (random, long, (void)); # endif /* Need to cast, because on Haiku, the return type is int. */ _GL_CXXALIAS_SYS_CAST (random, long, (void)); # endif _GL_CXXALIASWARN (random); #elif defined GNULIB_POSIXCHECK # undef random # if HAVE_RAW_DECL_RANDOM _GL_WARN_ON_USE (random, "random is unportable - " "use gnulib module random for portability"); # endif #endif #if @GNULIB_RANDOM@ # if @REPLACE_RANDOM@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef srandom # define srandom rpl_srandom # endif _GL_FUNCDECL_RPL (srandom, void, (unsigned int seed)); _GL_CXXALIAS_RPL (srandom, void, (unsigned int seed)); # else # if !@HAVE_RANDOM@ _GL_FUNCDECL_SYS (srandom, void, (unsigned int seed)); # endif /* Need to cast, because on FreeBSD, the first parameter is unsigned long seed. */ _GL_CXXALIAS_SYS_CAST (srandom, void, (unsigned int seed)); # endif _GL_CXXALIASWARN (srandom); #elif defined GNULIB_POSIXCHECK # undef srandom # if HAVE_RAW_DECL_SRANDOM _GL_WARN_ON_USE (srandom, "srandom is unportable - " "use gnulib module random for portability"); # endif #endif #if @GNULIB_RANDOM@ # if @REPLACE_INITSTATE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef initstate # define initstate rpl_initstate # endif _GL_FUNCDECL_RPL (initstate, char *, (unsigned int seed, char *buf, size_t buf_size) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (initstate, char *, (unsigned int seed, char *buf, size_t buf_size)); # else # if !@HAVE_INITSTATE@ || !@HAVE_DECL_INITSTATE@ _GL_FUNCDECL_SYS (initstate, char *, (unsigned int seed, char *buf, size_t buf_size) _GL_ARG_NONNULL ((2))); # endif /* Need to cast, because on FreeBSD, the first parameter is unsigned long seed. */ _GL_CXXALIAS_SYS_CAST (initstate, char *, (unsigned int seed, char *buf, size_t buf_size)); # endif _GL_CXXALIASWARN (initstate); #elif defined GNULIB_POSIXCHECK # undef initstate # if HAVE_RAW_DECL_INITSTATE _GL_WARN_ON_USE (initstate, "initstate is unportable - " "use gnulib module random for portability"); # endif #endif #if @GNULIB_RANDOM@ # if @REPLACE_SETSTATE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef setstate # define setstate rpl_setstate # endif _GL_FUNCDECL_RPL (setstate, char *, (char *arg_state) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (setstate, char *, (char *arg_state)); # else # if !@HAVE_SETSTATE@ || !@HAVE_DECL_SETSTATE@ _GL_FUNCDECL_SYS (setstate, char *, (char *arg_state) _GL_ARG_NONNULL ((1))); # endif /* Need to cast, because on Mac OS X 10.13, HP-UX, Solaris the first parameter is const char *arg_state. */ _GL_CXXALIAS_SYS_CAST (setstate, char *, (char *arg_state)); # endif _GL_CXXALIASWARN (setstate); #elif defined GNULIB_POSIXCHECK # undef setstate # if HAVE_RAW_DECL_SETSTATE _GL_WARN_ON_USE (setstate, "setstate is unportable - " "use gnulib module random for portability"); # endif #endif #if @GNULIB_RANDOM_R@ # if @REPLACE_RANDOM_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef random_r # define random_r rpl_random_r # endif _GL_FUNCDECL_RPL (random_r, int, (struct random_data *buf, int32_t *result) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (random_r, int, (struct random_data *buf, int32_t *result)); # else # if !@HAVE_RANDOM_R@ _GL_FUNCDECL_SYS (random_r, int, (struct random_data *buf, int32_t *result) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (random_r, int, (struct random_data *buf, int32_t *result)); # endif _GL_CXXALIASWARN (random_r); #elif defined GNULIB_POSIXCHECK # undef random_r # if HAVE_RAW_DECL_RANDOM_R _GL_WARN_ON_USE (random_r, "random_r is unportable - " "use gnulib module random_r for portability"); # endif #endif #if @GNULIB_RANDOM_R@ # if @REPLACE_RANDOM_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef srandom_r # define srandom_r rpl_srandom_r # endif _GL_FUNCDECL_RPL (srandom_r, int, (unsigned int seed, struct random_data *rand_state) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (srandom_r, int, (unsigned int seed, struct random_data *rand_state)); # else # if !@HAVE_RANDOM_R@ _GL_FUNCDECL_SYS (srandom_r, int, (unsigned int seed, struct random_data *rand_state) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (srandom_r, int, (unsigned int seed, struct random_data *rand_state)); # endif _GL_CXXALIASWARN (srandom_r); #elif defined GNULIB_POSIXCHECK # undef srandom_r # if HAVE_RAW_DECL_SRANDOM_R _GL_WARN_ON_USE (srandom_r, "srandom_r is unportable - " "use gnulib module random_r for portability"); # endif #endif #if @GNULIB_RANDOM_R@ # if @REPLACE_RANDOM_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef initstate_r # define initstate_r rpl_initstate_r # endif _GL_FUNCDECL_RPL (initstate_r, int, (unsigned int seed, char *buf, size_t buf_size, struct random_data *rand_state) _GL_ARG_NONNULL ((2, 4))); _GL_CXXALIAS_RPL (initstate_r, int, (unsigned int seed, char *buf, size_t buf_size, struct random_data *rand_state)); # else # if !@HAVE_RANDOM_R@ _GL_FUNCDECL_SYS (initstate_r, int, (unsigned int seed, char *buf, size_t buf_size, struct random_data *rand_state) _GL_ARG_NONNULL ((2, 4))); # endif /* Need to cast, because on Haiku, the third parameter is unsigned long buf_size. */ _GL_CXXALIAS_SYS_CAST (initstate_r, int, (unsigned int seed, char *buf, size_t buf_size, struct random_data *rand_state)); # endif _GL_CXXALIASWARN (initstate_r); #elif defined GNULIB_POSIXCHECK # undef initstate_r # if HAVE_RAW_DECL_INITSTATE_R _GL_WARN_ON_USE (initstate_r, "initstate_r is unportable - " "use gnulib module random_r for portability"); # endif #endif #if @GNULIB_RANDOM_R@ # if @REPLACE_RANDOM_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef setstate_r # define setstate_r rpl_setstate_r # endif _GL_FUNCDECL_RPL (setstate_r, int, (char *arg_state, struct random_data *rand_state) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (setstate_r, int, (char *arg_state, struct random_data *rand_state)); # else # if !@HAVE_RANDOM_R@ _GL_FUNCDECL_SYS (setstate_r, int, (char *arg_state, struct random_data *rand_state) _GL_ARG_NONNULL ((1, 2))); # endif /* Need to cast, because on Haiku, the first parameter is void *arg_state. */ _GL_CXXALIAS_SYS_CAST (setstate_r, int, (char *arg_state, struct random_data *rand_state)); # endif _GL_CXXALIASWARN (setstate_r); #elif defined GNULIB_POSIXCHECK # undef setstate_r # if HAVE_RAW_DECL_SETSTATE_R _GL_WARN_ON_USE (setstate_r, "setstate_r is unportable - " "use gnulib module random_r for portability"); # endif #endif #if @GNULIB_REALLOC_POSIX@ # if @REPLACE_REALLOC@ # if !((defined __cplusplus && defined GNULIB_NAMESPACE) \ || _GL_USE_STDLIB_ALLOC) # undef realloc # define realloc rpl_realloc # endif _GL_FUNCDECL_RPL (realloc, void *, (void *ptr, size_t size)); _GL_CXXALIAS_RPL (realloc, void *, (void *ptr, size_t size)); # else _GL_CXXALIAS_SYS (realloc, void *, (void *ptr, size_t size)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (realloc); # endif #elif defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC # undef realloc /* Assume realloc is always declared. */ _GL_WARN_ON_USE (realloc, "realloc is not POSIX compliant everywhere - " "use gnulib module realloc-posix for portability"); #endif #if @GNULIB_REALLOCARRAY@ # if ! @HAVE_REALLOCARRAY@ _GL_FUNCDECL_SYS (reallocarray, void *, (void *ptr, size_t nmemb, size_t size)); # endif _GL_CXXALIAS_SYS (reallocarray, void *, (void *ptr, size_t nmemb, size_t size)); _GL_CXXALIASWARN (reallocarray); #elif defined GNULIB_POSIXCHECK # undef reallocarray # if HAVE_RAW_DECL_REALLOCARRAY _GL_WARN_ON_USE (reallocarray, "reallocarray is not portable - " "use gnulib module reallocarray for portability"); # endif #endif #if @GNULIB_REALPATH@ # if @REPLACE_REALPATH@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define realpath rpl_realpath # endif _GL_FUNCDECL_RPL (realpath, char *, (const char *name, char *resolved) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (realpath, char *, (const char *name, char *resolved)); # else # if !@HAVE_REALPATH@ _GL_FUNCDECL_SYS (realpath, char *, (const char *name, char *resolved) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (realpath, char *, (const char *name, char *resolved)); # endif _GL_CXXALIASWARN (realpath); #elif defined GNULIB_POSIXCHECK # undef realpath # if HAVE_RAW_DECL_REALPATH _GL_WARN_ON_USE (realpath, "realpath is unportable - use gnulib module " "canonicalize or canonicalize-lgpl for portability"); # endif #endif #if @GNULIB_RPMATCH@ /* Test a user response to a question. Return 1 if it is affirmative, 0 if it is negative, or -1 if not clear. */ # if !@HAVE_RPMATCH@ _GL_FUNCDECL_SYS (rpmatch, int, (const char *response) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (rpmatch, int, (const char *response)); _GL_CXXALIASWARN (rpmatch); #elif defined GNULIB_POSIXCHECK # undef rpmatch # if HAVE_RAW_DECL_RPMATCH _GL_WARN_ON_USE (rpmatch, "rpmatch is unportable - " "use gnulib module rpmatch for portability"); # endif #endif #if @GNULIB_SECURE_GETENV@ /* Look up NAME in the environment, returning 0 in insecure situations. */ # if !@HAVE_SECURE_GETENV@ _GL_FUNCDECL_SYS (secure_getenv, char *, (char const *name) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (secure_getenv, char *, (char const *name)); _GL_CXXALIASWARN (secure_getenv); #elif defined GNULIB_POSIXCHECK # undef secure_getenv # if HAVE_RAW_DECL_SECURE_GETENV _GL_WARN_ON_USE (secure_getenv, "secure_getenv is unportable - " "use gnulib module secure_getenv for portability"); # endif #endif #if @GNULIB_SETENV@ /* Set NAME to VALUE in the environment. If REPLACE is nonzero, overwrite an existing value. */ # if @REPLACE_SETENV@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef setenv # define setenv rpl_setenv # endif _GL_FUNCDECL_RPL (setenv, int, (const char *name, const char *value, int replace) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (setenv, int, (const char *name, const char *value, int replace)); # else # if !@HAVE_DECL_SETENV@ _GL_FUNCDECL_SYS (setenv, int, (const char *name, const char *value, int replace) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (setenv, int, (const char *name, const char *value, int replace)); # endif # if !(@REPLACE_SETENV@ && !@HAVE_DECL_SETENV@) _GL_CXXALIASWARN (setenv); # endif #elif defined GNULIB_POSIXCHECK # undef setenv # if HAVE_RAW_DECL_SETENV _GL_WARN_ON_USE (setenv, "setenv is unportable - " "use gnulib module setenv for portability"); # endif #endif #if @GNULIB_STRTOD@ /* Parse a double from STRING, updating ENDP if appropriate. */ # if @REPLACE_STRTOD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strtod rpl_strtod # endif # define GNULIB_defined_strtod_function 1 _GL_FUNCDECL_RPL (strtod, double, (const char *str, char **endp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strtod, double, (const char *str, char **endp)); # else # if !@HAVE_STRTOD@ _GL_FUNCDECL_SYS (strtod, double, (const char *str, char **endp) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtod, double, (const char *str, char **endp)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (strtod); # endif #elif defined GNULIB_POSIXCHECK # undef strtod # if HAVE_RAW_DECL_STRTOD _GL_WARN_ON_USE (strtod, "strtod is unportable - " "use gnulib module strtod for portability"); # endif #endif #if @GNULIB_STRTOLD@ /* Parse a 'long double' from STRING, updating ENDP if appropriate. */ # if @REPLACE_STRTOLD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strtold rpl_strtold # endif # define GNULIB_defined_strtold_function 1 _GL_FUNCDECL_RPL (strtold, long double, (const char *str, char **endp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strtold, long double, (const char *str, char **endp)); # else # if !@HAVE_STRTOLD@ _GL_FUNCDECL_SYS (strtold, long double, (const char *str, char **endp) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtold, long double, (const char *str, char **endp)); # endif _GL_CXXALIASWARN (strtold); #elif defined GNULIB_POSIXCHECK # undef strtold # if HAVE_RAW_DECL_STRTOLD _GL_WARN_ON_USE (strtold, "strtold is unportable - " "use gnulib module strtold for portability"); # endif #endif #if @GNULIB_STRTOLL@ /* Parse a signed integer whose textual representation starts at STRING. The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, it may be decimal or octal (with prefix "0") or hexadecimal (with prefix "0x"). If ENDPTR is not NULL, the address of the first byte after the integer is stored in *ENDPTR. Upon overflow, the return value is LLONG_MAX or LLONG_MIN, and errno is set to ERANGE. */ # if !@HAVE_STRTOLL@ _GL_FUNCDECL_SYS (strtoll, long long, (const char *string, char **endptr, int base) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtoll, long long, (const char *string, char **endptr, int base)); _GL_CXXALIASWARN (strtoll); #elif defined GNULIB_POSIXCHECK # undef strtoll # if HAVE_RAW_DECL_STRTOLL _GL_WARN_ON_USE (strtoll, "strtoll is unportable - " "use gnulib module strtoll for portability"); # endif #endif #if @GNULIB_STRTOULL@ /* Parse an unsigned integer whose textual representation starts at STRING. The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, it may be decimal or octal (with prefix "0") or hexadecimal (with prefix "0x"). If ENDPTR is not NULL, the address of the first byte after the integer is stored in *ENDPTR. Upon overflow, the return value is ULLONG_MAX, and errno is set to ERANGE. */ # if !@HAVE_STRTOULL@ _GL_FUNCDECL_SYS (strtoull, unsigned long long, (const char *string, char **endptr, int base) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtoull, unsigned long long, (const char *string, char **endptr, int base)); _GL_CXXALIASWARN (strtoull); #elif defined GNULIB_POSIXCHECK # undef strtoull # if HAVE_RAW_DECL_STRTOULL _GL_WARN_ON_USE (strtoull, "strtoull is unportable - " "use gnulib module strtoull for portability"); # endif #endif #if @GNULIB_UNLOCKPT@ /* Unlock the slave side of the pseudo-terminal whose master side is specified by FD, so that it can be opened. */ # if !@HAVE_UNLOCKPT@ _GL_FUNCDECL_SYS (unlockpt, int, (int fd)); # endif _GL_CXXALIAS_SYS (unlockpt, int, (int fd)); _GL_CXXALIASWARN (unlockpt); #elif defined GNULIB_POSIXCHECK # undef unlockpt # if HAVE_RAW_DECL_UNLOCKPT _GL_WARN_ON_USE (unlockpt, "unlockpt is not portable - " "use gnulib module unlockpt for portability"); # endif #endif #if @GNULIB_UNSETENV@ /* Remove the variable NAME from the environment. */ # if @REPLACE_UNSETENV@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef unsetenv # define unsetenv rpl_unsetenv # endif _GL_FUNCDECL_RPL (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (unsetenv, int, (const char *name)); # else # if !@HAVE_DECL_UNSETENV@ _GL_FUNCDECL_SYS (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (unsetenv, int, (const char *name)); # endif # if !(@REPLACE_UNSETENV@ && !@HAVE_DECL_UNSETENV@) _GL_CXXALIASWARN (unsetenv); # endif #elif defined GNULIB_POSIXCHECK # undef unsetenv # if HAVE_RAW_DECL_UNSETENV _GL_WARN_ON_USE (unsetenv, "unsetenv is unportable - " "use gnulib module unsetenv for portability"); # endif #endif /* Convert a wide character to a multibyte character. */ #if @GNULIB_WCTOMB@ # if @REPLACE_WCTOMB@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wctomb # define wctomb rpl_wctomb # endif _GL_FUNCDECL_RPL (wctomb, int, (char *s, wchar_t wc)); _GL_CXXALIAS_RPL (wctomb, int, (char *s, wchar_t wc)); # else _GL_CXXALIAS_SYS (wctomb, int, (char *s, wchar_t wc)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wctomb); # endif #endif #endif /* _@GUARD_PREFIX@_STDLIB_H */ #endif /* _@GUARD_PREFIX@_STDLIB_H */ #endif make-4.3/lib/dirname-lgpl.c0000644000175000017500000000612113611136471012506 00000000000000/* dirname.c -- return all but the last element in a file name Copyright (C) 1990, 1998, 2000-2001, 2003-2006, 2009-2020 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 the Free Software Foundation; either version 3 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, see . */ #include #include "dirname.h" #include #include /* Return the length of the prefix of FILE that will be used by dir_name. If FILE is in the working directory, this returns zero even though 'dir_name (FILE)' will return ".". Works properly even if there are trailing slashes (by effectively ignoring them). */ size_t dir_len (char const *file) { size_t prefix_length = FILE_SYSTEM_PREFIX_LEN (file); size_t length; /* Advance prefix_length beyond important leading slashes. */ prefix_length += (prefix_length != 0 ? (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE && ISSLASH (file[prefix_length])) : (ISSLASH (file[0]) ? ((DOUBLE_SLASH_IS_DISTINCT_ROOT && ISSLASH (file[1]) && ! ISSLASH (file[2]) ? 2 : 1)) : 0)); /* Strip the basename and any redundant slashes before it. */ for (length = last_component (file) - file; prefix_length < length; length--) if (! ISSLASH (file[length - 1])) break; return length; } /* In general, we can't use the builtin 'dirname' function if available, since it has different meanings in different environments. In some environments the builtin 'dirname' modifies its argument. Return the leading directories part of FILE, allocated with malloc. Works properly even if there are trailing slashes (by effectively ignoring them). Return NULL on failure. If lstat (FILE) would succeed, then { chdir (dir_name (FILE)); lstat (base_name (FILE)); } will access the same file. Likewise, if the sequence { chdir (dir_name (FILE)); rename (base_name (FILE), "foo"); } succeeds, you have renamed FILE to "foo" in the same directory FILE was in. */ char * mdir_name (char const *file) { size_t length = dir_len (file); bool append_dot = (length == 0 || (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE && length == FILE_SYSTEM_PREFIX_LEN (file) && file[2] != '\0' && ! ISSLASH (file[2]))); char *dir = malloc (length + append_dot + 1); if (!dir) return NULL; memcpy (dir, file, length); if (append_dot) dir[length++] = '.'; dir[length] = '\0'; return dir; } make-4.3/lib/dup2.c0000644000175000017500000001156413611136471011014 00000000000000/* Duplicate an open file descriptor to a specified file descriptor. Copyright (C) 1999, 2004-2007, 2009-2020 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 the Free Software Foundation; either version 3 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, see . */ /* written by Paul Eggert */ #include /* Specification. */ #include #include #include #if HAVE_DUP2 # undef dup2 # if defined _WIN32 && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include # if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" # endif /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include # endif # if HAVE_MSVC_INVALID_PARAMETER_HANDLER static int dup2_nothrow (int fd, int desired_fd) { int result; TRY_MSVC_INVAL { result = dup2 (fd, desired_fd); } CATCH_MSVC_INVAL { errno = EBADF; result = -1; } DONE_MSVC_INVAL; return result; } # else # define dup2_nothrow dup2 # endif static int ms_windows_dup2 (int fd, int desired_fd) { int result; /* If fd is closed, mingw hangs on dup2 (fd, fd). If fd is open, dup2 (fd, fd) returns 0, but all further attempts to use fd in future dup2 calls will hang. */ if (fd == desired_fd) { if ((HANDLE) _get_osfhandle (fd) == INVALID_HANDLE_VALUE) { errno = EBADF; return -1; } return fd; } /* Wine 1.0.1 return 0 when desired_fd is negative but not -1: https://bugs.winehq.org/show_bug.cgi?id=21289 */ if (desired_fd < 0) { errno = EBADF; return -1; } result = dup2_nothrow (fd, desired_fd); if (result == 0) result = desired_fd; return result; } # define dup2 ms_windows_dup2 # elif defined __KLIBC__ # include static int klibc_dup2dirfd (int fd, int desired_fd) { int tempfd; int dupfd; tempfd = open ("NUL", O_RDONLY); if (tempfd == -1) return -1; if (tempfd == desired_fd) { close (tempfd); char path[_MAX_PATH]; if (__libc_Back_ioFHToPath (fd, path, sizeof (path))) return -1; return open(path, O_RDONLY); } dupfd = klibc_dup2dirfd (fd, desired_fd); close (tempfd); return dupfd; } static int klibc_dup2 (int fd, int desired_fd) { int dupfd; struct stat sbuf; dupfd = dup2 (fd, desired_fd); if (dupfd == -1 && errno == ENOTSUP \ && !fstat (fd, &sbuf) && S_ISDIR (sbuf.st_mode)) { close (desired_fd); return klibc_dup2dirfd (fd, desired_fd); } return dupfd; } # define dup2 klibc_dup2 # endif int rpl_dup2 (int fd, int desired_fd) { int result; # ifdef F_GETFL /* On Linux kernels 2.6.26-2.6.29, dup2 (fd, fd) returns -EBADF. On Cygwin 1.5.x, dup2 (1, 1) returns 0. On Cygwin 1.7.17, dup2 (1, -1) dumps core. On Cygwin 1.7.25, dup2 (1, 256) can dump core. On Haiku, dup2 (fd, fd) mistakenly clears FD_CLOEXEC. */ # if HAVE_SETDTABLESIZE setdtablesize (desired_fd + 1); # endif if (desired_fd < 0) fd = desired_fd; if (fd == desired_fd) return fcntl (fd, F_GETFL) == -1 ? -1 : fd; # endif result = dup2 (fd, desired_fd); /* Correct an errno value on FreeBSD 6.1 and Cygwin 1.5.x. */ if (result == -1 && errno == EMFILE) errno = EBADF; # if REPLACE_FCHDIR if (fd != desired_fd && result != -1) result = _gl_register_dup (fd, result); # endif return result; } #else /* !HAVE_DUP2 */ /* On older platforms, dup2 did not exist. */ # ifndef F_DUPFD static int dupfd (int fd, int desired_fd) { int duplicated_fd = dup (fd); if (duplicated_fd < 0 || duplicated_fd == desired_fd) return duplicated_fd; else { int r = dupfd (fd, desired_fd); int e = errno; close (duplicated_fd); errno = e; return r; } } # endif int dup2 (int fd, int desired_fd) { int result = fcntl (fd, F_GETFL) < 0 ? -1 : fd; if (result == -1 || fd == desired_fd) return result; close (desired_fd); # ifdef F_DUPFD result = fcntl (fd, F_DUPFD, desired_fd); # if REPLACE_FCHDIR if (0 <= result) result = _gl_register_dup (fd, result); # endif # else result = dupfd (fd, desired_fd); # endif if (result == -1 && (errno == EMFILE || errno == EINVAL)) errno = EBADF; return result; } #endif /* !HAVE_DUP2 */ make-4.3/lib/alloca.in.h0000644000175000017500000000451513611136471012005 00000000000000/* Memory allocation on the stack. Copyright (C) 1995, 1999, 2001-2004, 2006-2020 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 the Free Software Foundation; either version 3, 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, see . */ /* Avoid using the symbol _ALLOCA_H here, as Bison assumes _ALLOCA_H means there is a real alloca function. */ #ifndef _GL_ALLOCA_H #define _GL_ALLOCA_H /* alloca (N) returns a pointer to N bytes of memory allocated on the stack, which will last until the function returns. Use of alloca should be avoided: - inside arguments of function calls - undefined behaviour, - in inline functions - the allocation may actually last until the calling function returns, - for huge N (say, N >= 65536) - you never know how large (or small) the stack is, and when the stack cannot fulfill the memory allocation request, the program just crashes. */ #ifndef alloca # ifdef __GNUC__ /* Some version of mingw have an that causes trouble when included after 'alloca' gets defined as a macro. As a workaround, include this first and define 'alloca' as a macro afterwards. */ # if (defined _WIN32 && ! defined __CYGWIN__) && @HAVE_ALLOCA_H@ # include_next # endif # define alloca __builtin_alloca # elif defined _AIX # define alloca __alloca # elif defined _MSC_VER # include # define alloca _alloca # elif defined __DECC && defined __VMS # define alloca __ALLOCA # elif defined __TANDEM && defined _TNS_E_TARGET # ifdef __cplusplus extern "C" # endif void *_alloca (unsigned short); # pragma intrinsic (_alloca) # define alloca _alloca # elif defined __MVS__ # include # else # include # ifdef __cplusplus extern "C" # endif void *alloca (size_t); # endif #endif #endif /* _GL_ALLOCA_H */ make-4.3/lib/fcntl.c0000644000175000017500000004434313611136471011251 00000000000000/* Provide file descriptor control. Copyright (C) 2009-2020 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 the Free Software Foundation; either version 3 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, see . */ /* Written by Eric Blake . */ #include /* Specification. */ #include #include #include #include #include #include #ifdef __KLIBC__ # define INCL_DOS # include #endif #if defined _WIN32 && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include # endif /* Upper bound on getdtablesize(). See lib/getdtablesize.c. */ # define OPEN_MAX_MAX 0x10000 /* Duplicate OLDFD into the first available slot of at least NEWFD, which must be positive, with FLAGS determining whether the duplicate will be inheritable. */ static int dupfd (int oldfd, int newfd, int flags) { /* Mingw has no way to create an arbitrary fd. Iterate until all file descriptors less than newfd are filled up. */ HANDLE curr_process = GetCurrentProcess (); HANDLE old_handle = (HANDLE) _get_osfhandle (oldfd); unsigned char fds_to_close[OPEN_MAX_MAX / CHAR_BIT]; unsigned int fds_to_close_bound = 0; int result; BOOL inherit = flags & O_CLOEXEC ? FALSE : TRUE; int mode; if (newfd < 0 || getdtablesize () <= newfd) { errno = EINVAL; return -1; } if (old_handle == INVALID_HANDLE_VALUE || (mode = setmode (oldfd, O_BINARY)) == -1) { /* oldfd is not open, or is an unassigned standard file descriptor. */ errno = EBADF; return -1; } setmode (oldfd, mode); flags |= mode; for (;;) { HANDLE new_handle; int duplicated_fd; unsigned int index; if (!DuplicateHandle (curr_process, /* SourceProcessHandle */ old_handle, /* SourceHandle */ curr_process, /* TargetProcessHandle */ (PHANDLE) &new_handle, /* TargetHandle */ (DWORD) 0, /* DesiredAccess */ inherit, /* InheritHandle */ DUPLICATE_SAME_ACCESS)) /* Options */ { switch (GetLastError ()) { case ERROR_TOO_MANY_OPEN_FILES: errno = EMFILE; break; case ERROR_INVALID_HANDLE: case ERROR_INVALID_TARGET_HANDLE: case ERROR_DIRECT_ACCESS_HANDLE: errno = EBADF; break; case ERROR_INVALID_PARAMETER: case ERROR_INVALID_FUNCTION: case ERROR_INVALID_ACCESS: errno = EINVAL; break; default: errno = EACCES; break; } result = -1; break; } duplicated_fd = _open_osfhandle ((intptr_t) new_handle, flags); if (duplicated_fd < 0) { CloseHandle (new_handle); result = -1; break; } if (newfd <= duplicated_fd) { result = duplicated_fd; break; } /* Set the bit duplicated_fd in fds_to_close[]. */ index = (unsigned int) duplicated_fd / CHAR_BIT; if (fds_to_close_bound <= index) { if (sizeof fds_to_close <= index) /* Need to increase OPEN_MAX_MAX. */ abort (); memset (fds_to_close + fds_to_close_bound, '\0', index + 1 - fds_to_close_bound); fds_to_close_bound = index + 1; } fds_to_close[index] |= 1 << ((unsigned int) duplicated_fd % CHAR_BIT); } /* Close the previous fds that turned out to be too small. */ { int saved_errno = errno; unsigned int duplicated_fd; for (duplicated_fd = 0; duplicated_fd < fds_to_close_bound * CHAR_BIT; duplicated_fd++) if ((fds_to_close[duplicated_fd / CHAR_BIT] >> (duplicated_fd % CHAR_BIT)) & 1) close (duplicated_fd); errno = saved_errno; } # if REPLACE_FCHDIR if (0 <= result) result = _gl_register_dup (oldfd, result); # endif return result; } #endif /* W32 */ /* Forward declarations, because we '#undef fcntl' in the middle of this compilation unit. */ /* Our implementation of fcntl (fd, F_DUPFD, target). */ static int rpl_fcntl_DUPFD (int fd, int target); /* Our implementation of fcntl (fd, F_DUPFD_CLOEXEC, target). */ static int rpl_fcntl_DUPFD_CLOEXEC (int fd, int target); #ifdef __KLIBC__ /* Adds support for fcntl on directories. */ static int klibc_fcntl (int fd, int action, /* arg */...); #endif /* Perform the specified ACTION on the file descriptor FD, possibly using the argument ARG further described below. This replacement handles the following actions, and forwards all others on to the native fcntl. An unrecognized ACTION returns -1 with errno set to EINVAL. F_DUPFD - duplicate FD, with int ARG being the minimum target fd. If successful, return the duplicate, which will be inheritable; otherwise return -1 and set errno. F_DUPFD_CLOEXEC - duplicate FD, with int ARG being the minimum target fd. If successful, return the duplicate, which will not be inheritable; otherwise return -1 and set errno. F_GETFD - ARG need not be present. If successful, return a non-negative value containing the descriptor flags of FD (only FD_CLOEXEC is portable, but other flags may be present); otherwise return -1 and set errno. */ int fcntl (int fd, int action, /* arg */...) #undef fcntl #ifdef __KLIBC__ # define fcntl klibc_fcntl #endif { va_list arg; int result = -1; va_start (arg, action); switch (action) { case F_DUPFD: { int target = va_arg (arg, int); result = rpl_fcntl_DUPFD (fd, target); break; } case F_DUPFD_CLOEXEC: { int target = va_arg (arg, int); result = rpl_fcntl_DUPFD_CLOEXEC (fd, target); break; } #if !HAVE_FCNTL case F_GETFD: { # if defined _WIN32 && ! defined __CYGWIN__ HANDLE handle = (HANDLE) _get_osfhandle (fd); DWORD flags; if (handle == INVALID_HANDLE_VALUE || GetHandleInformation (handle, &flags) == 0) errno = EBADF; else result = (flags & HANDLE_FLAG_INHERIT) ? 0 : FD_CLOEXEC; # else /* !W32 */ /* Use dup2 to reject invalid file descriptors. No way to access this information, so punt. */ if (0 <= dup2 (fd, fd)) result = 0; # endif /* !W32 */ break; } /* F_GETFD */ #endif /* !HAVE_FCNTL */ /* Implementing F_SETFD on mingw is not trivial - there is no API for changing the O_NOINHERIT bit on an fd, and merely changing the HANDLE_FLAG_INHERIT bit on the underlying handle can lead to odd state. It may be possible by duplicating the handle, using _open_osfhandle with the right flags, then using dup2 to move the duplicate onto the original, but that is not supported for now. */ default: { #if HAVE_FCNTL switch (action) { #ifdef F_BARRIERFSYNC /* macOS */ case F_BARRIERFSYNC: #endif #ifdef F_CHKCLEAN /* macOS */ case F_CHKCLEAN: #endif #ifdef F_CLOSEM /* NetBSD, HP-UX */ case F_CLOSEM: #endif #ifdef F_FLUSH_DATA /* macOS */ case F_FLUSH_DATA: #endif #ifdef F_FREEZE_FS /* macOS */ case F_FREEZE_FS: #endif #ifdef F_FULLFSYNC /* macOS */ case F_FULLFSYNC: #endif #ifdef F_GETCONFINED /* macOS */ case F_GETCONFINED: #endif #ifdef F_GETDEFAULTPROTLEVEL /* macOS */ case F_GETDEFAULTPROTLEVEL: #endif #ifdef F_GETFD /* POSIX */ case F_GETFD: #endif #ifdef F_GETFL /* POSIX */ case F_GETFL: #endif #ifdef F_GETLEASE /* Linux */ case F_GETLEASE: #endif #ifdef F_GETNOSIGPIPE /* macOS */ case F_GETNOSIGPIPE: #endif #ifdef F_GETOWN /* POSIX */ case F_GETOWN: #endif #ifdef F_GETPIPE_SZ /* Linux */ case F_GETPIPE_SZ: #endif #ifdef F_GETPROTECTIONCLASS /* macOS */ case F_GETPROTECTIONCLASS: #endif #ifdef F_GETPROTECTIONLEVEL /* macOS */ case F_GETPROTECTIONLEVEL: #endif #ifdef F_GET_SEALS /* Linux */ case F_GET_SEALS: #endif #ifdef F_GETSIG /* Linux */ case F_GETSIG: #endif #ifdef F_MAXFD /* NetBSD */ case F_MAXFD: #endif #ifdef F_RECYCLE /* macOS */ case F_RECYCLE: #endif #ifdef F_SETFIFOENH /* HP-UX */ case F_SETFIFOENH: #endif #ifdef F_THAW_FS /* macOS */ case F_THAW_FS: #endif /* These actions take no argument. */ result = fcntl (fd, action); break; #ifdef F_ADD_SEALS /* Linux */ case F_ADD_SEALS: #endif #ifdef F_BADFD /* Solaris */ case F_BADFD: #endif #ifdef F_CHECK_OPENEVT /* macOS */ case F_CHECK_OPENEVT: #endif #ifdef F_DUP2FD /* FreeBSD, AIX, Solaris */ case F_DUP2FD: #endif #ifdef F_DUP2FD_CLOEXEC /* FreeBSD, Solaris */ case F_DUP2FD_CLOEXEC: #endif #ifdef F_DUP2FD_CLOFORK /* Solaris */ case F_DUP2FD_CLOFORK: #endif #ifdef F_DUPFD /* POSIX */ case F_DUPFD: #endif #ifdef F_DUPFD_CLOEXEC /* POSIX */ case F_DUPFD_CLOEXEC: #endif #ifdef F_DUPFD_CLOFORK /* Solaris */ case F_DUPFD_CLOFORK: #endif #ifdef F_GETXFL /* Solaris */ case F_GETXFL: #endif #ifdef F_GLOBAL_NOCACHE /* macOS */ case F_GLOBAL_NOCACHE: #endif #ifdef F_MAKECOMPRESSED /* macOS */ case F_MAKECOMPRESSED: #endif #ifdef F_MOVEDATAEXTENTS /* macOS */ case F_MOVEDATAEXTENTS: #endif #ifdef F_NOCACHE /* macOS */ case F_NOCACHE: #endif #ifdef F_NODIRECT /* macOS */ case F_NODIRECT: #endif #ifdef F_NOTIFY /* Linux */ case F_NOTIFY: #endif #ifdef F_OPLKACK /* IRIX */ case F_OPLKACK: #endif #ifdef F_OPLKREG /* IRIX */ case F_OPLKREG: #endif #ifdef F_RDAHEAD /* macOS */ case F_RDAHEAD: #endif #ifdef F_SETBACKINGSTORE /* macOS */ case F_SETBACKINGSTORE: #endif #ifdef F_SETCONFINED /* macOS */ case F_SETCONFINED: #endif #ifdef F_SETFD /* POSIX */ case F_SETFD: #endif #ifdef F_SETFL /* POSIX */ case F_SETFL: #endif #ifdef F_SETLEASE /* Linux */ case F_SETLEASE: #endif #ifdef F_SETNOSIGPIPE /* macOS */ case F_SETNOSIGPIPE: #endif #ifdef F_SETOWN /* POSIX */ case F_SETOWN: #endif #ifdef F_SETPIPE_SZ /* Linux */ case F_SETPIPE_SZ: #endif #ifdef F_SETPROTECTIONCLASS /* macOS */ case F_SETPROTECTIONCLASS: #endif #ifdef F_SETSIG /* Linux */ case F_SETSIG: #endif #ifdef F_SINGLE_WRITER /* macOS */ case F_SINGLE_WRITER: #endif /* These actions take an 'int' argument. */ { int x = va_arg (arg, int); result = fcntl (fd, action, x); } break; default: /* Other actions take a pointer argument. */ { void *p = va_arg (arg, void *); result = fcntl (fd, action, p); } break; } #else errno = EINVAL; #endif break; } } va_end (arg); return result; } static int rpl_fcntl_DUPFD (int fd, int target) { int result; #if !HAVE_FCNTL result = dupfd (fd, target, 0); #elif FCNTL_DUPFD_BUGGY || REPLACE_FCHDIR /* Detect invalid target; needed for cygwin 1.5.x. */ if (target < 0 || getdtablesize () <= target) { result = -1; errno = EINVAL; } else { /* Haiku alpha 2 loses fd flags on original. */ int flags = fcntl (fd, F_GETFD); if (flags < 0) result = -1; else { result = fcntl (fd, F_DUPFD, target); if (0 <= result && fcntl (fd, F_SETFD, flags) == -1) { int saved_errno = errno; close (result); result = -1; errno = saved_errno; } # if REPLACE_FCHDIR if (0 <= result) result = _gl_register_dup (fd, result); # endif } } #else result = fcntl (fd, F_DUPFD, target); #endif return result; } static int rpl_fcntl_DUPFD_CLOEXEC (int fd, int target) { int result; #if !HAVE_FCNTL result = dupfd (fd, target, O_CLOEXEC); #else /* HAVE_FCNTL */ # if defined __HAIKU__ /* On Haiku, the system fcntl (fd, F_DUPFD_CLOEXEC, target) sets the FD_CLOEXEC flag on fd, not on target. Therefore avoid the system fcntl in this case. */ # define have_dupfd_cloexec -1 # else /* Try the system call first, if the headers claim it exists (that is, if GNULIB_defined_F_DUPFD_CLOEXEC is 0), since we may be running with a glibc that has the macro but with an older kernel that does not support it. Cache the information on whether the system call really works, but avoid caching failure if the corresponding F_DUPFD fails for any reason. 0 = unknown, 1 = yes, -1 = no. */ static int have_dupfd_cloexec = GNULIB_defined_F_DUPFD_CLOEXEC ? -1 : 0; if (0 <= have_dupfd_cloexec) { result = fcntl (fd, F_DUPFD_CLOEXEC, target); if (0 <= result || errno != EINVAL) { have_dupfd_cloexec = 1; # if REPLACE_FCHDIR if (0 <= result) result = _gl_register_dup (fd, result); # endif } else { result = rpl_fcntl_DUPFD (fd, target); if (result >= 0) have_dupfd_cloexec = -1; } } else # endif result = rpl_fcntl_DUPFD (fd, target); if (0 <= result && have_dupfd_cloexec == -1) { int flags = fcntl (result, F_GETFD); if (flags < 0 || fcntl (result, F_SETFD, flags | FD_CLOEXEC) == -1) { int saved_errno = errno; close (result); errno = saved_errno; result = -1; } } #endif /* HAVE_FCNTL */ return result; } #undef fcntl #ifdef __KLIBC__ static int klibc_fcntl (int fd, int action, /* arg */...) { va_list arg_ptr; int arg; struct stat sbuf; int result; va_start (arg_ptr, action); arg = va_arg (arg_ptr, int); result = fcntl (fd, action, arg); /* EPERM for F_DUPFD, ENOTSUP for others */ if (result == -1 && (errno == EPERM || errno == ENOTSUP) && !fstat (fd, &sbuf) && S_ISDIR (sbuf.st_mode)) { ULONG ulMode; switch (action) { case F_DUPFD: /* Find available fd */ while (fcntl (arg, F_GETFL) != -1 || errno != EBADF) arg++; result = dup2 (fd, arg); break; /* Using underlying APIs is right ? */ case F_GETFD: if (DosQueryFHState (fd, &ulMode)) break; result = (ulMode & OPEN_FLAGS_NOINHERIT) ? FD_CLOEXEC : 0; break; case F_SETFD: if (arg & ~FD_CLOEXEC) break; if (DosQueryFHState (fd, &ulMode)) break; if (arg & FD_CLOEXEC) ulMode |= OPEN_FLAGS_NOINHERIT; else ulMode &= ~OPEN_FLAGS_NOINHERIT; /* Filter supported flags. */ ulMode &= (OPEN_FLAGS_WRITE_THROUGH | OPEN_FLAGS_FAIL_ON_ERROR | OPEN_FLAGS_NO_CACHE | OPEN_FLAGS_NOINHERIT); if (DosSetFHState (fd, ulMode)) break; result = 0; break; case F_GETFL: result = 0; break; case F_SETFL: if (arg != 0) break; result = 0; break; default: errno = EINVAL; break; } } va_end (arg_ptr); return result; } #endif make-4.3/lib/glob.c0000644000175000017500000010627513603564437011101 00000000000000/* Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999 Free Software Foundation, Inc. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. */ /* AIX requires this to be the first thing in the file. */ #if defined _AIX && !defined __GNUC__ #pragma alloca #endif #ifdef HAVE_CONFIG_H # include #endif /* Enable GNU extensions in glob.h. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #include #include #include /* Outcomment the following line for production quality code. */ /* #define NDEBUG 1 */ #include #include /* Needed on stupid SunOS for assert. */ /* Comment out all this code if we are using the GNU C Library, and are not actually compiling the library itself. This code is part of the GNU C Library, but also included in many other GNU distributions. Compiling and linking in this code is a waste when using the GNU C library (especially if it is a shared library). Rather than having every GNU program understand `configure --with-gnu-libc' and omit the object files, it is simpler to just do this in the source for each such file. */ #define GLOB_INTERFACE_VERSION 1 #if !defined _LIBC && defined __GNU_LIBRARY__ && __GNU_LIBRARY__ > 1 # include # if _GNU_GLOB_INTERFACE_VERSION == GLOB_INTERFACE_VERSION # define ELIDE_CODE # endif #endif #ifndef ELIDE_CODE #if defined STDC_HEADERS || defined __GNU_LIBRARY__ # include #endif #if defined HAVE_UNISTD_H || defined _LIBC # include # ifndef POSIX # ifdef _POSIX_VERSION # define POSIX # endif # endif #endif #if !defined _AMIGA && !defined VMS && !defined WINDOWS32 # include #endif #if !defined __GNU_LIBRARY__ && !defined STDC_HEADERS extern int errno; #endif #ifndef __set_errno # define __set_errno(val) errno = (val) #endif #ifndef NULL # define NULL 0 #endif #if defined HAVE_DIRENT_H || defined __GNU_LIBRARY__ # include # define NAMLEN(dirent) strlen((dirent)->d_name) #else # define dirent direct # define NAMLEN(dirent) (dirent)->d_namlen # ifdef HAVE_SYS_NDIR_H # include # endif # ifdef HAVE_SYS_DIR_H # include # endif # ifdef HAVE_NDIR_H # include # endif # ifdef HAVE_VMSDIR_H # include "vmsdir.h" # endif /* HAVE_VMSDIR_H */ #endif /* In GNU systems, defines this macro for us. */ #ifdef _D_NAMLEN # undef NAMLEN # define NAMLEN(d) _D_NAMLEN(d) #endif /* When used in the GNU libc the symbol _DIRENT_HAVE_D_TYPE is available if the `d_type' member for `struct dirent' is available. */ #if defined(_DIRENT_HAVE_D_TYPE) || defined(HAVE_STRUCT_DIRENT_D_TYPE) # define HAVE_D_TYPE 1 #endif #if (defined POSIX || defined WINDOWS32) && !defined __GNU_LIBRARY__ /* Posix does not require that the d_ino field be present, and some systems do not provide it. */ # define REAL_DIR_ENTRY(dp) 1 #else # define REAL_DIR_ENTRY(dp) (dp->d_ino != 0) #endif /* POSIX */ #if defined STDC_HEADERS || defined __GNU_LIBRARY__ # include # include # define ANSI_STRING #else /* No standard headers. */ extern char *getenv (); # ifdef HAVE_STRING_H # include # define ANSI_STRING # else # include # endif # ifdef HAVE_MEMORY_H # include # endif extern char *malloc (), *realloc (); extern void free (); extern void qsort (); extern void abort (), exit (); #endif /* Standard headers. */ #ifndef ANSI_STRING # ifndef bzero extern void bzero (); # endif # ifndef bcopy extern void bcopy (); # endif # define memcpy(d, s, n) bcopy ((s), (d), (n)) # define strrchr rindex /* memset is only used for zero here, but let's be paranoid. */ # define memset(s, better_be_zero, n) \ ((void) ((better_be_zero) == 0 ? (bzero((s), (n)), 0) : (abort(), 0))) #endif /* Not ANSI_STRING. */ #if !defined HAVE_STRCOLL && !defined _LIBC # define strcoll strcmp #endif #if !defined HAVE_MEMPCPY && __GLIBC__ - 0 == 2 && __GLIBC_MINOR__ >= 1 # define HAVE_MEMPCPY 1 # undef mempcpy # define mempcpy(Dest, Src, Len) __mempcpy (Dest, Src, Len) #endif #if !defined __GNU_LIBRARY__ && !defined __DJGPP__ # ifdef __GNUC__ __inline # endif # ifndef __SASC # ifdef WINDOWS32 static void * my_realloc (void *p, unsigned int n) # else static char * my_realloc (p, n) char *p; unsigned int n; # endif { /* These casts are the for sake of the broken Ultrix compiler, which warns of illegal pointer combinations otherwise. */ if (p == NULL) return (char *) malloc (n); return (char *) realloc (p, n); } # define realloc my_realloc # endif /* __SASC */ #endif /* __GNU_LIBRARY__ || __DJGPP__ */ #if !defined __alloca && !defined __GNU_LIBRARY__ # ifdef __GNUC__ # undef alloca # define alloca(n) __builtin_alloca (n) # else /* Not GCC. */ # ifdef HAVE_ALLOCA_H # include # else /* Not HAVE_ALLOCA_H. */ # ifndef _AIX # ifdef WINDOWS32 # include # else extern char *alloca (); # endif /* WINDOWS32 */ # endif /* Not _AIX. */ # endif /* sparc or HAVE_ALLOCA_H. */ # endif /* GCC. */ #endif #ifndef __GNU_LIBRARY__ # define __stat stat # ifdef STAT_MACROS_BROKEN # undef S_ISDIR # endif # ifndef S_ISDIR # define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR) # endif #endif #ifdef _LIBC # undef strdup # define strdup(str) __strdup (str) # define sysconf(id) __sysconf (id) # define closedir(dir) __closedir (dir) # define opendir(name) __opendir (name) # define readdir(str) __readdir (str) # define getpwnam_r(name, bufp, buf, len, res) \ __getpwnam_r (name, bufp, buf, len, res) # ifndef __stat # define __stat(fname, buf) __xstat (_STAT_VER, fname, buf) # endif #endif #if !(defined STDC_HEADERS || defined __GNU_LIBRARY__) # undef size_t # define size_t unsigned int #endif /* Some system header files erroneously define these. We want our own definitions from to take precedence. */ #ifndef __GNU_LIBRARY__ # undef FNM_PATHNAME # undef FNM_NOESCAPE # undef FNM_PERIOD #endif #include /* Some system header files erroneously define these. We want our own definitions from to take precedence. */ #ifndef __GNU_LIBRARY__ # undef GLOB_ERR # undef GLOB_MARK # undef GLOB_NOSORT # undef GLOB_DOOFFS # undef GLOB_NOCHECK # undef GLOB_APPEND # undef GLOB_NOESCAPE # undef GLOB_PERIOD #endif #include #if !defined __alloca # define __alloca alloca #endif #if !defined __stat # define __stat stat #endif #ifdef HAVE_GETLOGIN_R extern int getlogin_r __P ((char *, size_t)); #else extern char *getlogin __P ((void)); #endif static #if __GNUC__ - 0 >= 2 inline #endif const char *next_brace_sub __P ((const char *begin)); static int glob_in_dir __P ((const char *pattern, const char *directory, int flags, int (*errfunc) (const char *, int), glob_t *pglob)); static int prefix_array __P ((const char *prefix, char **array, size_t n)); static int collated_compare __P ((const __ptr_t, const __ptr_t)); #if !defined _LIBC || !defined NO_GLOB_PATTERN_P int __glob_pattern_p __P ((const char *pattern, int quote)); #endif /* Find the end of the sub-pattern in a brace expression. We define this as an inline function if the compiler permits. */ static #if __GNUC__ - 0 >= 2 inline #endif const char * next_brace_sub (begin) const char *begin; { unsigned int depth = 0; const char *cp = begin; while (1) { if (depth == 0) { if (*cp != ',' && *cp != '}' && *cp != '\0') { if (*cp == '{') ++depth; ++cp; continue; } } else { while (*cp != '\0' && (*cp != '}' || depth > 0)) { if (*cp == '}') --depth; ++cp; } if (*cp == '\0') /* An incorrectly terminated brace expression. */ return NULL; continue; } break; } return cp; } /* Do glob searching for PATTERN, placing results in PGLOB. The bits defined above may be set in FLAGS. If a directory cannot be opened or read and ERRFUNC is not nil, it is called with the pathname that caused the error, and the `errno' value from the failing call; if it returns non-zero `glob' returns GLOB_ABORTED; if it returns zero, the error is ignored. If memory cannot be allocated for PGLOB, GLOB_NOSPACE is returned. Otherwise, `glob' returns zero. */ int glob (pattern, flags, errfunc, pglob) const char *pattern; int flags; int (*errfunc) __P ((const char *, int)); glob_t *pglob; { const char *filename; const char *dirname; size_t dirlen; int status; size_t oldcount; if (pattern == NULL || pglob == NULL || (flags & ~__GLOB_FLAGS) != 0) { __set_errno (EINVAL); return -1; } /* POSIX requires all slashes to be matched. This means that with a trailing slash we must match only directories. */ if (pattern[0] && pattern[strlen (pattern) - 1] == '/') flags |= GLOB_ONLYDIR; if (flags & GLOB_BRACE) { const char *begin = strchr (pattern, '{'); if (begin != NULL) { /* Allocate working buffer large enough for our work. Note that we have at least an opening and closing brace. */ size_t firstc; char *alt_start; const char *p; const char *next; const char *rest; size_t rest_len; #ifdef __GNUC__ char onealt[strlen (pattern) - 1]; #else char *onealt = (char *) malloc (strlen (pattern) - 1); if (onealt == NULL) { if (!(flags & GLOB_APPEND)) globfree (pglob); return GLOB_NOSPACE; } #endif /* We know the prefix for all sub-patterns. */ #ifdef HAVE_MEMPCPY alt_start = mempcpy (onealt, pattern, begin - pattern); #else memcpy (onealt, pattern, begin - pattern); alt_start = &onealt[begin - pattern]; #endif /* Find the first sub-pattern and at the same time find the rest after the closing brace. */ next = next_brace_sub (begin + 1); if (next == NULL) { /* It is an illegal expression. */ #ifndef __GNUC__ free (onealt); #endif return glob (pattern, flags & ~GLOB_BRACE, errfunc, pglob); } /* Now find the end of the whole brace expression. */ rest = next; while (*rest != '}') { rest = next_brace_sub (rest + 1); if (rest == NULL) { /* It is an illegal expression. */ #ifndef __GNUC__ free (onealt); #endif return glob (pattern, flags & ~GLOB_BRACE, errfunc, pglob); } } /* Please note that we now can be sure the brace expression is well-formed. */ rest_len = strlen (++rest) + 1; /* We have a brace expression. BEGIN points to the opening {, NEXT points past the terminator of the first element, and END points past the final }. We will accumulate result names from recursive runs for each brace alternative in the buffer using GLOB_APPEND. */ if (!(flags & GLOB_APPEND)) { /* This call is to set a new vector, so clear out the vector so we can append to it. */ pglob->gl_pathc = 0; pglob->gl_pathv = NULL; } firstc = pglob->gl_pathc; p = begin + 1; while (1) { int result; /* Construct the new glob expression. */ #ifdef HAVE_MEMPCPY mempcpy (mempcpy (alt_start, p, next - p), rest, rest_len); #else memcpy (alt_start, p, next - p); memcpy (&alt_start[next - p], rest, rest_len); #endif result = glob (onealt, ((flags & ~(GLOB_NOCHECK|GLOB_NOMAGIC)) | GLOB_APPEND), errfunc, pglob); /* If we got an error, return it. */ if (result && result != GLOB_NOMATCH) { #ifndef __GNUC__ free (onealt); #endif if (!(flags & GLOB_APPEND)) globfree (pglob); return result; } if (*next == '}') /* We saw the last entry. */ break; p = next + 1; next = next_brace_sub (p); assert (next != NULL); } #ifndef __GNUC__ free (onealt); #endif if (pglob->gl_pathc != firstc) /* We found some entries. */ return 0; else if (!(flags & (GLOB_NOCHECK|GLOB_NOMAGIC))) return GLOB_NOMATCH; } } /* Find the filename. */ filename = strrchr (pattern, '/'); #if defined __MSDOS__ || defined WINDOWS32 /* The case of "d:pattern". Since `:' is not allowed in file names, we can safely assume that wherever it happens in pattern, it signals the filename part. This is so we could some day support patterns like "[a-z]:foo". */ if (filename == NULL) filename = strchr (pattern, ':'); #endif /* __MSDOS__ || WINDOWS32 */ if (filename == NULL) { /* This can mean two things: a simple name or "~name". The later case is nothing but a notation for a directory. */ if ((flags & (GLOB_TILDE|GLOB_TILDE_CHECK)) && pattern[0] == '~') { dirname = pattern; dirlen = strlen (pattern); /* Set FILENAME to NULL as a special flag. This is ugly but other solutions would require much more code. We test for this special case below. */ filename = NULL; } else { filename = pattern; #ifdef _AMIGA dirname = ""; #else dirname = "."; #endif dirlen = 0; } } else if (filename == pattern) { /* "/pattern". */ dirname = "/"; dirlen = 1; ++filename; } else { char *newp; dirlen = filename - pattern; #if defined __MSDOS__ || defined WINDOWS32 if (*filename == ':' || (filename > pattern + 1 && filename[-1] == ':')) { char *drive_spec; ++dirlen; drive_spec = (char *) __alloca (dirlen + 1); #ifdef HAVE_MEMPCPY *((char *) mempcpy (drive_spec, pattern, dirlen)) = '\0'; #else memcpy (drive_spec, pattern, dirlen); drive_spec[dirlen] = '\0'; #endif /* For now, disallow wildcards in the drive spec, to prevent infinite recursion in glob. */ if (__glob_pattern_p (drive_spec, !(flags & GLOB_NOESCAPE))) return GLOB_NOMATCH; /* If this is "d:pattern", we need to copy `:' to DIRNAME as well. If it's "d:/pattern", don't remove the slash from "d:/", since "d:" and "d:/" are not the same.*/ } #endif newp = (char *) __alloca (dirlen + 1); #ifdef HAVE_MEMPCPY *((char *) mempcpy (newp, pattern, dirlen)) = '\0'; #else memcpy (newp, pattern, dirlen); newp[dirlen] = '\0'; #endif dirname = newp; ++filename; if (filename[0] == '\0' #if defined __MSDOS__ || defined WINDOWS32 && dirname[dirlen - 1] != ':' && (dirlen < 3 || dirname[dirlen - 2] != ':' || dirname[dirlen - 1] != '/') #endif && dirlen > 1) /* "pattern/". Expand "pattern", appending slashes. */ { int val = glob (dirname, flags | GLOB_MARK, errfunc, pglob); if (val == 0) pglob->gl_flags = ((pglob->gl_flags & ~GLOB_MARK) | (flags & GLOB_MARK)); return val; } } if (!(flags & GLOB_APPEND)) { pglob->gl_pathc = 0; pglob->gl_pathv = NULL; } oldcount = pglob->gl_pathc; #ifndef VMS if ((flags & (GLOB_TILDE|GLOB_TILDE_CHECK)) && dirname[0] == '~') { if (dirname[1] == '\0' || dirname[1] == '/') { /* Look up home directory. */ #ifdef VMS /* This isn't obvious, RTLs of DECC and VAXC know about "HOME" */ const char *home_dir = getenv ("SYS$LOGIN"); #else const char *home_dir = getenv ("HOME"); #endif # ifdef _AMIGA if (home_dir == NULL || home_dir[0] == '\0') home_dir = "SYS:"; # else # ifdef WINDOWS32 if (home_dir == NULL || home_dir[0] == '\0') home_dir = "c:/users/default"; /* poor default */ # else # ifdef VMS /* Again, this isn't obvious, if "HOME" isn't known "SYS$LOGIN" should be set */ if (home_dir == NULL || home_dir[0] == '\0') home_dir = "SYS$DISK:[]"; # else if (home_dir == NULL || home_dir[0] == '\0') { int success; char *name; # if defined HAVE_GETLOGIN_R || defined _LIBC size_t buflen = sysconf (_SC_LOGIN_NAME_MAX) + 1; if (buflen == 0) /* `sysconf' does not support _SC_LOGIN_NAME_MAX. Try a moderate value. */ buflen = 20; name = (char *) __alloca (buflen); success = getlogin_r (name, buflen) >= 0; # else success = (name = getlogin ()) != NULL; # endif if (success) { struct passwd *p; # if defined HAVE_GETPWNAM_R || defined _LIBC size_t pwbuflen = sysconf (_SC_GETPW_R_SIZE_MAX); char *pwtmpbuf; struct passwd pwbuf; int save = errno; if (pwbuflen == -1) /* `sysconf' does not support _SC_GETPW_R_SIZE_MAX. Try a moderate value. */ pwbuflen = 1024; pwtmpbuf = (char *) __alloca (pwbuflen); while (getpwnam_r (name, &pwbuf, pwtmpbuf, pwbuflen, &p) != 0) { if (errno != ERANGE) { p = NULL; break; } pwbuflen *= 2; pwtmpbuf = (char *) __alloca (pwbuflen); __set_errno (save); } # else p = getpwnam (name); # endif if (p != NULL) home_dir = p->pw_dir; } } if (home_dir == NULL || home_dir[0] == '\0') { if (flags & GLOB_TILDE_CHECK) return GLOB_NOMATCH; else home_dir = "~"; /* No luck. */ } # endif /* VMS */ # endif /* WINDOWS32 */ # endif /* Now construct the full directory. */ if (dirname[1] == '\0') dirname = home_dir; else { char *newp; size_t home_len = strlen (home_dir); newp = (char *) __alloca (home_len + dirlen); # ifdef HAVE_MEMPCPY mempcpy (mempcpy (newp, home_dir, home_len), &dirname[1], dirlen); # else memcpy (newp, home_dir, home_len); memcpy (&newp[home_len], &dirname[1], dirlen); # endif dirname = newp; } } # if !defined _AMIGA && !defined WINDOWS32 && !defined VMS else { char *end_name = strchr (dirname, '/'); const char *user_name; const char *home_dir; if (end_name == NULL) user_name = dirname + 1; else { char *newp; newp = (char *) __alloca (end_name - dirname); # ifdef HAVE_MEMPCPY *((char *) mempcpy (newp, dirname + 1, end_name - dirname)) = '\0'; # else memcpy (newp, dirname + 1, end_name - dirname); newp[end_name - dirname - 1] = '\0'; # endif user_name = newp; } /* Look up specific user's home directory. */ { struct passwd *p; # if defined HAVE_GETPWNAM_R || defined _LIBC size_t buflen = sysconf (_SC_GETPW_R_SIZE_MAX); char *pwtmpbuf; struct passwd pwbuf; int save = errno; if (buflen == -1) /* `sysconf' does not support _SC_GETPW_R_SIZE_MAX. Try a moderate value. */ buflen = 1024; pwtmpbuf = (char *) __alloca (buflen); while (getpwnam_r (user_name, &pwbuf, pwtmpbuf, buflen, &p) != 0) { if (errno != ERANGE) { p = NULL; break; } buflen *= 2; pwtmpbuf = __alloca (buflen); __set_errno (save); } # else p = getpwnam (user_name); # endif if (p != NULL) home_dir = p->pw_dir; else home_dir = NULL; } /* If we found a home directory use this. */ if (home_dir != NULL) { char *newp; size_t home_len = strlen (home_dir); size_t rest_len = end_name == NULL ? 0 : strlen (end_name); newp = (char *) __alloca (home_len + rest_len + 1); # ifdef HAVE_MEMPCPY *((char *) mempcpy (mempcpy (newp, home_dir, home_len), end_name, rest_len)) = '\0'; # else memcpy (newp, home_dir, home_len); memcpy (&newp[home_len], end_name, rest_len); newp[home_len + rest_len] = '\0'; # endif dirname = newp; } else if (flags & GLOB_TILDE_CHECK) /* We have to regard it as an error if we cannot find the home directory. */ return GLOB_NOMATCH; } # endif /* Not Amiga && not WINDOWS32 && not VMS. */ } #endif /* Not VMS. */ /* Now test whether we looked for "~" or "~NAME". In this case we can give the answer now. */ if (filename == NULL) { struct stat st; /* Return the directory if we don't check for error or if it exists. */ if ((flags & GLOB_NOCHECK) || (((flags & GLOB_ALTDIRFUNC) ? (*pglob->gl_stat) (dirname, &st) : __stat (dirname, &st)) == 0 && S_ISDIR (st.st_mode))) { pglob->gl_pathv = (char **) realloc (pglob->gl_pathv, (pglob->gl_pathc + ((flags & GLOB_DOOFFS) ? pglob->gl_offs : 0) + 1 + 1) * sizeof (char *)); if (pglob->gl_pathv == NULL) return GLOB_NOSPACE; if (flags & GLOB_DOOFFS) while (pglob->gl_pathc < pglob->gl_offs) pglob->gl_pathv[pglob->gl_pathc++] = NULL; #if defined HAVE_STRDUP || defined _LIBC pglob->gl_pathv[pglob->gl_pathc] = strdup (dirname); #else { size_t len = strlen (dirname) + 1; char *dircopy = malloc (len); if (dircopy != NULL) pglob->gl_pathv[pglob->gl_pathc] = memcpy (dircopy, dirname, len); } #endif if (pglob->gl_pathv[pglob->gl_pathc] == NULL) { free (pglob->gl_pathv); return GLOB_NOSPACE; } pglob->gl_pathv[++pglob->gl_pathc] = NULL; pglob->gl_flags = flags; return 0; } /* Not found. */ return GLOB_NOMATCH; } if (__glob_pattern_p (dirname, !(flags & GLOB_NOESCAPE))) { /* The directory name contains metacharacters, so we have to glob for the directory, and then glob for the pattern in each directory found. */ glob_t dirs; register size_t i; status = glob (dirname, ((flags & (GLOB_ERR | GLOB_NOCHECK | GLOB_NOESCAPE)) | GLOB_NOSORT | GLOB_ONLYDIR), errfunc, &dirs); if (status != 0) return status; /* We have successfully globbed the preceding directory name. For each name we found, call glob_in_dir on it and FILENAME, appending the results to PGLOB. */ for (i = 0; i < dirs.gl_pathc; ++i) { int old_pathc; #ifdef SHELL { /* Make globbing interruptible in the bash shell. */ extern int interrupt_state; if (interrupt_state) { globfree (&dirs); globfree (&files); return GLOB_ABORTED; } } #endif /* SHELL. */ old_pathc = pglob->gl_pathc; status = glob_in_dir (filename, dirs.gl_pathv[i], ((flags | GLOB_APPEND) & ~(GLOB_NOCHECK | GLOB_ERR)), errfunc, pglob); if (status == GLOB_NOMATCH) /* No matches in this directory. Try the next. */ continue; if (status != 0) { globfree (&dirs); globfree (pglob); return status; } /* Stick the directory on the front of each name. */ if (prefix_array (dirs.gl_pathv[i], &pglob->gl_pathv[old_pathc], pglob->gl_pathc - old_pathc)) { globfree (&dirs); globfree (pglob); return GLOB_NOSPACE; } } flags |= GLOB_MAGCHAR; /* We have ignored the GLOB_NOCHECK flag in the `glob_in_dir' calls. But if we have not found any matching entry and thie GLOB_NOCHECK flag was set we must return the list consisting of the disrectory names followed by the filename. */ if (pglob->gl_pathc == oldcount) { /* No matches. */ if (flags & GLOB_NOCHECK) { size_t filename_len = strlen (filename) + 1; char **new_pathv; struct stat st; /* This is an pessimistic guess about the size. */ pglob->gl_pathv = (char **) realloc (pglob->gl_pathv, (pglob->gl_pathc + ((flags & GLOB_DOOFFS) ? pglob->gl_offs : 0) + dirs.gl_pathc + 1) * sizeof (char *)); if (pglob->gl_pathv == NULL) { globfree (&dirs); return GLOB_NOSPACE; } if (flags & GLOB_DOOFFS) while (pglob->gl_pathc < pglob->gl_offs) pglob->gl_pathv[pglob->gl_pathc++] = NULL; for (i = 0; i < dirs.gl_pathc; ++i) { const char *dir = dirs.gl_pathv[i]; size_t dir_len = strlen (dir); /* First check whether this really is a directory. */ if (((flags & GLOB_ALTDIRFUNC) ? (*pglob->gl_stat) (dir, &st) : __stat (dir, &st)) != 0 || !S_ISDIR (st.st_mode)) /* No directory, ignore this entry. */ continue; pglob->gl_pathv[pglob->gl_pathc] = malloc (dir_len + 1 + filename_len); if (pglob->gl_pathv[pglob->gl_pathc] == NULL) { globfree (&dirs); globfree (pglob); return GLOB_NOSPACE; } #ifdef HAVE_MEMPCPY mempcpy (mempcpy (mempcpy (pglob->gl_pathv[pglob->gl_pathc], dir, dir_len), "/", 1), filename, filename_len); #else memcpy (pglob->gl_pathv[pglob->gl_pathc], dir, dir_len); pglob->gl_pathv[pglob->gl_pathc][dir_len] = '/'; memcpy (&pglob->gl_pathv[pglob->gl_pathc][dir_len + 1], filename, filename_len); #endif ++pglob->gl_pathc; } pglob->gl_pathv[pglob->gl_pathc] = NULL; pglob->gl_flags = flags; /* Now we know how large the gl_pathv vector must be. */ new_pathv = (char **) realloc (pglob->gl_pathv, ((pglob->gl_pathc + 1) * sizeof (char *))); if (new_pathv != NULL) pglob->gl_pathv = new_pathv; } else return GLOB_NOMATCH; } globfree (&dirs); } else { status = glob_in_dir (filename, dirname, flags, errfunc, pglob); if (status != 0) return status; if (dirlen > 0) { /* Stick the directory on the front of each name. */ size_t ignore = oldcount; if ((flags & GLOB_DOOFFS) && ignore < pglob->gl_offs) ignore = pglob->gl_offs; if (prefix_array (dirname, &pglob->gl_pathv[ignore], pglob->gl_pathc - ignore)) { globfree (pglob); return GLOB_NOSPACE; } } } if (flags & GLOB_MARK) { /* Append slashes to directory names. */ size_t i; struct stat st; for (i = oldcount; i < pglob->gl_pathc; ++i) if (((flags & GLOB_ALTDIRFUNC) ? (*pglob->gl_stat) (pglob->gl_pathv[i], &st) : __stat (pglob->gl_pathv[i], &st)) == 0 && S_ISDIR (st.st_mode)) { size_t len = strlen (pglob->gl_pathv[i]) + 2; char *new = realloc (pglob->gl_pathv[i], len); if (new == NULL) { globfree (pglob); return GLOB_NOSPACE; } strcpy (&new[len - 2], "/"); pglob->gl_pathv[i] = new; } } if (!(flags & GLOB_NOSORT)) { /* Sort the vector. */ int non_sort = oldcount; if ((flags & GLOB_DOOFFS) && pglob->gl_offs > oldcount) non_sort = pglob->gl_offs; qsort ((__ptr_t) &pglob->gl_pathv[non_sort], pglob->gl_pathc - non_sort, sizeof (char *), collated_compare); } return 0; } /* Free storage allocated in PGLOB by a previous `glob' call. */ void globfree (pglob) register glob_t *pglob; { if (pglob->gl_pathv != NULL) { register size_t i; for (i = 0; i < pglob->gl_pathc; ++i) if (pglob->gl_pathv[i] != NULL) free ((__ptr_t) pglob->gl_pathv[i]); free ((__ptr_t) pglob->gl_pathv); } } /* Do a collated comparison of A and B. */ static int collated_compare (a, b) const __ptr_t a; const __ptr_t b; { const char *const s1 = *(const char *const * const) a; const char *const s2 = *(const char *const * const) b; if (s1 == s2) return 0; if (s1 == NULL) return 1; if (s2 == NULL) return -1; return strcoll (s1, s2); } /* Prepend DIRNAME to each of N members of ARRAY, replacing ARRAY's elements in place. Return nonzero if out of memory, zero if successful. A slash is inserted between DIRNAME and each elt of ARRAY, unless DIRNAME is just "/". Each old element of ARRAY is freed. */ static int prefix_array (dirname, array, n) const char *dirname; char **array; size_t n; { register size_t i; size_t dirlen = strlen (dirname); #if defined __MSDOS__ || defined WINDOWS32 int sep_char = '/'; # define DIRSEP_CHAR sep_char #else # define DIRSEP_CHAR '/' #endif if (dirlen == 1 && dirname[0] == '/') /* DIRNAME is just "/", so normal prepending would get us "//foo". We want "/foo" instead, so don't prepend any chars from DIRNAME. */ dirlen = 0; #if defined __MSDOS__ || defined WINDOWS32 else if (dirlen > 1) { if (dirname[dirlen - 1] == '/' && dirname[dirlen - 2] == ':') /* DIRNAME is "d:/". Don't prepend the slash from DIRNAME. */ --dirlen; else if (dirname[dirlen - 1] == ':') { /* DIRNAME is "d:". Use `:' instead of `/'. */ --dirlen; sep_char = ':'; } } #endif for (i = 0; i < n; ++i) { size_t eltlen = strlen (array[i]) + 1; char *new = (char *) malloc (dirlen + 1 + eltlen); if (new == NULL) { while (i > 0) free ((__ptr_t) array[--i]); return 1; } #ifdef HAVE_MEMPCPY { char *endp = (char *) mempcpy (new, dirname, dirlen); *endp++ = DIRSEP_CHAR; mempcpy (endp, array[i], eltlen); } #else memcpy (new, dirname, dirlen); new[dirlen] = DIRSEP_CHAR; memcpy (&new[dirlen + 1], array[i], eltlen); #endif free ((__ptr_t) array[i]); array[i] = new; } return 0; } /* We must not compile this function twice. */ #if !defined _LIBC || !defined NO_GLOB_PATTERN_P /* Return nonzero if PATTERN contains any metacharacters. Metacharacters can be quoted with backslashes if QUOTE is nonzero. */ int __glob_pattern_p (pattern, quote) const char *pattern; int quote; { register const char *p; int open = 0; for (p = pattern; *p != '\0'; ++p) switch (*p) { case '?': case '*': return 1; case '\\': if (quote && p[1] != '\0') ++p; break; case '[': open = 1; break; case ']': if (open) return 1; break; } return 0; } # ifdef _LIBC weak_alias (__glob_pattern_p, glob_pattern_p) # endif #endif /* Like `glob', but PATTERN is a final pathname component, and matches are searched for in DIRECTORY. The GLOB_NOSORT bit in FLAGS is ignored. No sorting is ever done. The GLOB_APPEND flag is assumed to be set (always appends). */ static int glob_in_dir (pattern, directory, flags, errfunc, pglob) const char *pattern; const char *directory; int flags; int (*errfunc) __P ((const char *, int)); glob_t *pglob; { __ptr_t stream = NULL; struct globlink { struct globlink *next; char *name; }; struct globlink *names = NULL; size_t nfound; int meta; int save; #ifdef VMS if (*directory == 0) directory = "[]"; #endif meta = __glob_pattern_p (pattern, !(flags & GLOB_NOESCAPE)); if (meta == 0) { if (flags & (GLOB_NOCHECK|GLOB_NOMAGIC)) /* We need not do any tests. The PATTERN contains no meta characters and we must not return an error therefore the result will always contain exactly one name. */ flags |= GLOB_NOCHECK; else { /* Since we use the normal file functions we can also use stat() to verify the file is there. */ struct stat st; size_t patlen = strlen (pattern); size_t dirlen = strlen (directory); char *fullname = (char *) __alloca (dirlen + 1 + patlen + 1); # ifdef HAVE_MEMPCPY mempcpy (mempcpy (mempcpy (fullname, directory, dirlen), "/", 1), pattern, patlen + 1); # else memcpy (fullname, directory, dirlen); fullname[dirlen] = '/'; memcpy (&fullname[dirlen + 1], pattern, patlen + 1); # endif if (((flags & GLOB_ALTDIRFUNC) ? (*pglob->gl_stat) (fullname, &st) : __stat (fullname, &st)) == 0) /* We found this file to be existing. Now tell the rest of the function to copy this name into the result. */ flags |= GLOB_NOCHECK; } nfound = 0; } else { if (pattern[0] == '\0') { /* This is a special case for matching directories like in "*a/". */ names = (struct globlink *) __alloca (sizeof (struct globlink)); names->name = (char *) malloc (1); if (names->name == NULL) goto memory_error; names->name[0] = '\0'; names->next = NULL; nfound = 1; meta = 0; } else { stream = ((flags & GLOB_ALTDIRFUNC) ? (*pglob->gl_opendir) (directory) : (__ptr_t) opendir (directory)); if (stream == NULL) { if (errno != ENOTDIR && ((errfunc != NULL && (*errfunc) (directory, errno)) || (flags & GLOB_ERR))) return GLOB_ABORTED; nfound = 0; meta = 0; } else { int fnm_flags = ((!(flags & GLOB_PERIOD) ? FNM_PERIOD : 0) | ((flags & GLOB_NOESCAPE) ? FNM_NOESCAPE : 0) #if defined HAVE_CASE_INSENSITIVE_FS | FNM_CASEFOLD #endif ); nfound = 0; flags |= GLOB_MAGCHAR; while (1) { const char *name; size_t len; struct dirent *d = ((flags & GLOB_ALTDIRFUNC) ? (*pglob->gl_readdir) (stream) : readdir ((DIR *) stream)); if (d == NULL) break; if (! REAL_DIR_ENTRY (d)) continue; #ifdef HAVE_D_TYPE /* If we shall match only directories use the information provided by the dirent call if possible. */ if ((flags & GLOB_ONLYDIR) && d->d_type != DT_UNKNOWN && d->d_type != DT_DIR && d->d_type != DT_LNK) continue; #endif name = d->d_name; if (fnmatch (pattern, name, fnm_flags) == 0) { struct globlink *new = (struct globlink *) __alloca (sizeof (struct globlink)); len = NAMLEN (d); new->name = (char *) malloc (len + 1); if (new->name == NULL) goto memory_error; #ifdef HAVE_MEMPCPY *((char *) mempcpy ((__ptr_t) new->name, name, len)) = '\0'; #else memcpy ((__ptr_t) new->name, name, len); new->name[len] = '\0'; #endif new->next = names; names = new; ++nfound; } } } } } if (nfound == 0 && (flags & GLOB_NOCHECK)) { size_t len = strlen (pattern); nfound = 1; names = (struct globlink *) __alloca (sizeof (struct globlink)); names->next = NULL; names->name = (char *) malloc (len + 1); if (names->name == NULL) goto memory_error; #ifdef HAVE_MEMPCPY *((char *) mempcpy (names->name, pattern, len)) = '\0'; #else memcpy (names->name, pattern, len); names->name[len] = '\0'; #endif } if (nfound != 0) { pglob->gl_pathv = (char **) realloc (pglob->gl_pathv, (pglob->gl_pathc + ((flags & GLOB_DOOFFS) ? pglob->gl_offs : 0) + nfound + 1) * sizeof (char *)); if (pglob->gl_pathv == NULL) goto memory_error; if (flags & GLOB_DOOFFS) while (pglob->gl_pathc < pglob->gl_offs) pglob->gl_pathv[pglob->gl_pathc++] = NULL; for (; names != NULL; names = names->next) pglob->gl_pathv[pglob->gl_pathc++] = names->name; pglob->gl_pathv[pglob->gl_pathc] = NULL; pglob->gl_flags = flags; } save = errno; if (stream != NULL) { if (flags & GLOB_ALTDIRFUNC) (*pglob->gl_closedir) (stream); else closedir ((DIR *) stream); } __set_errno (save); return nfound == 0 ? GLOB_NOMATCH : 0; memory_error: { save = errno; if (flags & GLOB_ALTDIRFUNC) (*pglob->gl_closedir) (stream); else closedir ((DIR *) stream); __set_errno (save); } while (names != NULL) { if (names->name != NULL) free ((__ptr_t) names->name); names = names->next; } return GLOB_NOSPACE; } #endif /* Not ELIDE_CODE. */ make-4.3/lib/malloc.c0000644000175000017500000000273313611136472011410 00000000000000/* malloc() function that is glibc compatible. Copyright (C) 1997-1998, 2006-2007, 2009-2020 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 the Free Software Foundation; either version 3, 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, see . */ /* written by Jim Meyering and Bruno Haible */ #define _GL_USE_STDLIB_ALLOC 1 #include /* Only the AC_FUNC_MALLOC macro defines 'malloc' already in config.h. */ #ifdef malloc # define NEED_MALLOC_GNU 1 # undef malloc /* Whereas the gnulib module 'malloc-gnu' defines HAVE_MALLOC_GNU. */ #elif GNULIB_MALLOC_GNU && !HAVE_MALLOC_GNU # define NEED_MALLOC_GNU 1 #endif #include #include /* Allocate an N-byte block of memory from the heap. If N is zero, allocate a 1-byte block. */ void * rpl_malloc (size_t n) { void *result; #if NEED_MALLOC_GNU if (n == 0) n = 1; #endif result = malloc (n); #if !HAVE_MALLOC_POSIX if (result == NULL) errno = ENOMEM; #endif return result; } make-4.3/lib/fcntl.in.h0000644000175000017500000002553313611136471011663 00000000000000/* Like , but with non-working flags defined to 0. Copyright (C) 2006-2020 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 the Free Software Foundation; either version 3 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, see . */ /* written by Paul Eggert */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_system_fcntl_h /* Special invocation convention. */ /* Needed before . May also define off_t to a 64-bit type on native Windows. */ #include /* On some systems other than glibc, is a prerequisite of . On glibc systems, we would like to avoid namespace pollution. But on glibc systems, includes inside an extern "C" { ... } block, which leads to errors in C++ mode with the overridden from gnulib. These errors are known to be gone with g++ version >= 4.3. */ #if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && (defined __ICC || !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)))) # include #endif #@INCLUDE_NEXT@ @NEXT_FCNTL_H@ /* Native Windows platforms declare open(), creat() in . */ #if (@GNULIB_CREAT@ || @GNULIB_OPEN@ || defined GNULIB_POSIXCHECK) \ && (defined _WIN32 && ! defined __CYGWIN__) # include #endif #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_FCNTL_H /* Needed before . May also define off_t to a 64-bit type on native Windows. */ #include /* On some systems other than glibc, is a prerequisite of . On glibc systems, we would like to avoid namespace pollution. But on glibc systems, includes inside an extern "C" { ... } block, which leads to errors in C++ mode with the overridden from gnulib. These errors are known to be gone with g++ version >= 4.3. */ #if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && (defined __ICC || !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)))) # include #endif /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_FCNTL_H@ /* Native Windows platforms declare open(), creat() in . */ #if (@GNULIB_CREAT@ || @GNULIB_OPEN@ || defined GNULIB_POSIXCHECK) \ && (defined _WIN32 && ! defined __CYGWIN__) # include #endif #ifndef _@GUARD_PREFIX@_FCNTL_H #define _@GUARD_PREFIX@_FCNTL_H #ifndef __GLIBC__ /* Avoid namespace pollution on glibc systems. */ # include #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Declare overridden functions. */ #if @GNULIB_CREAT@ # if @REPLACE_CREAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef creat # define creat rpl_creat # endif _GL_FUNCDECL_RPL (creat, int, (const char *filename, mode_t mode) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (creat, int, (const char *filename, mode_t mode)); # else _GL_CXXALIAS_SYS (creat, int, (const char *filename, mode_t mode)); # endif _GL_CXXALIASWARN (creat); #elif defined GNULIB_POSIXCHECK # undef creat /* Assume creat is always declared. */ _GL_WARN_ON_USE (creat, "creat is not always POSIX compliant - " "use gnulib module creat for portability"); #endif #if @GNULIB_FCNTL@ # if @REPLACE_FCNTL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fcntl # define fcntl rpl_fcntl # endif _GL_FUNCDECL_RPL (fcntl, int, (int fd, int action, ...)); _GL_CXXALIAS_RPL (fcntl, int, (int fd, int action, ...)); # else # if !@HAVE_FCNTL@ _GL_FUNCDECL_SYS (fcntl, int, (int fd, int action, ...)); # endif _GL_CXXALIAS_SYS (fcntl, int, (int fd, int action, ...)); # endif _GL_CXXALIASWARN (fcntl); #elif defined GNULIB_POSIXCHECK # undef fcntl # if HAVE_RAW_DECL_FCNTL _GL_WARN_ON_USE (fcntl, "fcntl is not always POSIX compliant - " "use gnulib module fcntl for portability"); # endif #endif #if @GNULIB_OPEN@ # if @REPLACE_OPEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef open # define open rpl_open # endif _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); # else _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); # endif /* On HP-UX 11, in C++ mode, open() is defined as an inline function with a default argument. _GL_CXXALIASWARN does not work in this case. */ # if !defined __hpux _GL_CXXALIASWARN (open); # endif #elif defined GNULIB_POSIXCHECK # undef open /* Assume open is always declared. */ _GL_WARN_ON_USE (open, "open is not always POSIX compliant - " "use gnulib module open for portability"); #endif #if @GNULIB_OPENAT@ # if @REPLACE_OPENAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef openat # define openat rpl_openat # endif _GL_FUNCDECL_RPL (openat, int, (int fd, char const *file, int flags, /* mode_t mode */ ...) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (openat, int, (int fd, char const *file, int flags, /* mode_t mode */ ...)); # else # if !@HAVE_OPENAT@ _GL_FUNCDECL_SYS (openat, int, (int fd, char const *file, int flags, /* mode_t mode */ ...) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (openat, int, (int fd, char const *file, int flags, /* mode_t mode */ ...)); # endif _GL_CXXALIASWARN (openat); #elif defined GNULIB_POSIXCHECK # undef openat # if HAVE_RAW_DECL_OPENAT _GL_WARN_ON_USE (openat, "openat is not portable - " "use gnulib module openat for portability"); # endif #endif /* Fix up the FD_* macros, only known to be missing on mingw. */ #ifndef FD_CLOEXEC # define FD_CLOEXEC 1 #endif /* Fix up the supported F_* macros. Intentionally leave other F_* macros undefined. Only known to be missing on mingw. */ #ifndef F_DUPFD_CLOEXEC # define F_DUPFD_CLOEXEC 0x40000000 /* Witness variable: 1 if gnulib defined F_DUPFD_CLOEXEC, 0 otherwise. */ # define GNULIB_defined_F_DUPFD_CLOEXEC 1 #else # define GNULIB_defined_F_DUPFD_CLOEXEC 0 #endif #ifndef F_DUPFD # define F_DUPFD 1 #endif #ifndef F_GETFD # define F_GETFD 2 #endif /* Fix up the O_* macros. */ /* AIX 7.1 with XL C 12.1 defines O_CLOEXEC, O_NOFOLLOW, and O_TTY_INIT to values outside 'int' range, so omit these misdefinitions. But avoid namespace pollution on non-AIX systems. */ #ifdef _AIX # include # if defined O_CLOEXEC && ! (INT_MIN <= O_CLOEXEC && O_CLOEXEC <= INT_MAX) # undef O_CLOEXEC # endif # if defined O_NOFOLLOW && ! (INT_MIN <= O_NOFOLLOW && O_NOFOLLOW <= INT_MAX) # undef O_NOFOLLOW # endif # if defined O_TTY_INIT && ! (INT_MIN <= O_TTY_INIT && O_TTY_INIT <= INT_MAX) # undef O_TTY_INIT # endif #endif #if !defined O_DIRECT && defined O_DIRECTIO /* Tru64 spells it 'O_DIRECTIO'. */ # define O_DIRECT O_DIRECTIO #endif #if !defined O_CLOEXEC && defined O_NOINHERIT /* Mingw spells it 'O_NOINHERIT'. */ # define O_CLOEXEC O_NOINHERIT #endif #ifndef O_CLOEXEC # define O_CLOEXEC 0x40000000 /* Try to not collide with system O_* flags. */ # define GNULIB_defined_O_CLOEXEC 1 #else # define GNULIB_defined_O_CLOEXEC 0 #endif #ifndef O_DIRECT # define O_DIRECT 0 #endif #ifndef O_DIRECTORY # define O_DIRECTORY 0 #endif #ifndef O_DSYNC # define O_DSYNC 0 #endif #ifndef O_EXEC # define O_EXEC O_RDONLY /* This is often close enough in older systems. */ #endif #ifndef O_IGNORE_CTTY # define O_IGNORE_CTTY 0 #endif #ifndef O_NDELAY # define O_NDELAY 0 #endif #ifndef O_NOATIME # define O_NOATIME 0 #endif #ifndef O_NONBLOCK # define O_NONBLOCK O_NDELAY #endif /* If the gnulib module 'nonblocking' is in use, guarantee a working non-zero value of O_NONBLOCK. Otherwise, O_NONBLOCK is defined (above) to O_NDELAY or to 0 as fallback. */ #if @GNULIB_NONBLOCKING@ # if O_NONBLOCK # define GNULIB_defined_O_NONBLOCK 0 # else # define GNULIB_defined_O_NONBLOCK 1 # undef O_NONBLOCK # define O_NONBLOCK 0x40000000 # endif #endif #ifndef O_NOCTTY # define O_NOCTTY 0 #endif #ifndef O_NOFOLLOW # define O_NOFOLLOW 0 #endif #ifndef O_NOLINK # define O_NOLINK 0 #endif #ifndef O_NOLINKS # define O_NOLINKS 0 #endif #ifndef O_NOTRANS # define O_NOTRANS 0 #endif #ifndef O_RSYNC # define O_RSYNC 0 #endif #ifndef O_SEARCH # define O_SEARCH O_RDONLY /* This is often close enough in older systems. */ #endif #ifndef O_SYNC # define O_SYNC 0 #endif #ifndef O_TTY_INIT # define O_TTY_INIT 0 #endif #if ~O_ACCMODE & (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH) # undef O_ACCMODE # define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH) #endif /* For systems that distinguish between text and binary I/O. O_BINARY is usually declared in fcntl.h */ #if !defined O_BINARY && defined _O_BINARY /* For MSC-compatible compilers. */ # define O_BINARY _O_BINARY # define O_TEXT _O_TEXT #endif #if defined __BEOS__ || defined __HAIKU__ /* BeOS 5 and Haiku have O_BINARY and O_TEXT, but they have no effect. */ # undef O_BINARY # undef O_TEXT #endif #ifndef O_BINARY # define O_BINARY 0 # define O_TEXT 0 #endif /* Fix up the AT_* macros. */ /* Work around a bug in Solaris 9 and 10: AT_FDCWD is positive. Its value exceeds INT_MAX, so its use as an int doesn't conform to the C standard, and GCC and Sun C complain in some cases. If the bug is present, undef AT_FDCWD here, so it can be redefined below. */ #if 0 < AT_FDCWD && AT_FDCWD == 0xffd19553 # undef AT_FDCWD #endif /* Use the same bit pattern as Solaris 9, but with the proper signedness. The bit pattern is important, in case this actually is Solaris with the above workaround. */ #ifndef AT_FDCWD # define AT_FDCWD (-3041965) #endif /* Use the same values as Solaris 9. This shouldn't matter, but there's no real reason to differ. */ #ifndef AT_SYMLINK_NOFOLLOW # define AT_SYMLINK_NOFOLLOW 4096 #endif #ifndef AT_REMOVEDIR # define AT_REMOVEDIR 1 #endif /* Solaris 9 lacks these two, so just pick unique values. */ #ifndef AT_SYMLINK_FOLLOW # define AT_SYMLINK_FOLLOW 2 #endif #ifndef AT_EACCESS # define AT_EACCESS 4 #endif #endif /* _@GUARD_PREFIX@_FCNTL_H */ #endif /* _@GUARD_PREFIX@_FCNTL_H */ #endif make-4.3/lib/Makefile.am0000644000175000017500000013042013611136476012030 00000000000000## DO NOT EDIT! GENERATED AUTOMATICALLY! ## Process this file with automake to produce Makefile.in. # Copyright (C) 2002-2020 Free Software Foundation, Inc. # # 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 # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This file 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 file. If not, see . # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that # contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. # Reproduce by: # gnulib-tool --import --local-dir=gl \ # --lib=libgnu \ # --source-base=lib \ # --m4-base=m4 \ # --doc-base=doc \ # --tests-base=tests \ # --aux-dir=build-aux \ # --no-conditional-dependencies \ # --no-libtool \ # --macro-prefix=gl \ # alloca \ # fdl \ # findprog-in \ # getloadavg \ # host-cpu-c-abi \ # make-glob \ # strerror AUTOMAKE_OPTIONS = 1.11 gnits SUBDIRS = noinst_HEADERS = noinst_LIBRARIES = noinst_LTLIBRARIES = EXTRA_DIST = BUILT_SOURCES = SUFFIXES = MOSTLYCLEANFILES = core *.stackdump MOSTLYCLEANDIRS = CLEANFILES = DISTCLEANFILES = MAINTAINERCLEANFILES = # No GNU Make output. AM_CPPFLAGS = AM_CFLAGS = noinst_LIBRARIES += libgnu.a libgnu_a_SOURCES = libgnu_a_LIBADD = $(gl_LIBOBJS) libgnu_a_DEPENDENCIES = $(gl_LIBOBJS) EXTRA_libgnu_a_SOURCES = ## begin gnulib module absolute-header # Use this preprocessor expression to decide whether #include_next works. # Do not rely on a 'configure'-time test for this, since the expression # might appear in an installed header, which is used by some other compiler. HAVE_INCLUDE_NEXT = (__GNUC__ || 60000000 <= __DECC_VER) ## end gnulib module absolute-header ## begin gnulib module access EXTRA_DIST += access.c EXTRA_libgnu_a_SOURCES += access.c ## end gnulib module access ## begin gnulib module alloca libgnu_a_LIBADD += @ALLOCA@ libgnu_a_DEPENDENCIES += @ALLOCA@ EXTRA_DIST += alloca.c EXTRA_libgnu_a_SOURCES += alloca.c ## end gnulib module alloca ## begin gnulib module alloca-opt BUILT_SOURCES += $(ALLOCA_H) # We need the following in order to create when the system # doesn't have one that works with the given compiler. if GL_GENERATE_ALLOCA_H alloca.h: alloca.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''HAVE_ALLOCA_H''@|$(HAVE_ALLOCA_H)|g' < $(srcdir)/alloca.in.h; \ } > $@-t && \ mv -f $@-t $@ else alloca.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += alloca.h alloca.h-t EXTRA_DIST += alloca.in.h ## end gnulib module alloca-opt ## begin gnulib module close EXTRA_DIST += close.c EXTRA_libgnu_a_SOURCES += close.c ## end gnulib module close ## begin gnulib module concat-filename libgnu_a_SOURCES += concat-filename.c EXTRA_DIST += concat-filename.h ## end gnulib module concat-filename ## begin gnulib module dirname-lgpl libgnu_a_SOURCES += dirname-lgpl.c basename-lgpl.c stripslash.c EXTRA_DIST += dirname.h ## end gnulib module dirname-lgpl ## begin gnulib module dosname EXTRA_DIST += dosname.h ## end gnulib module dosname ## begin gnulib module dup2 EXTRA_DIST += dup2.c EXTRA_libgnu_a_SOURCES += dup2.c ## end gnulib module dup2 ## begin gnulib module errno BUILT_SOURCES += $(ERRNO_H) # We need the following in order to create when the system # doesn't have one that is POSIX compliant. if GL_GENERATE_ERRNO_H errno.h: errno.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \ -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \ -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \ -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \ -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \ -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \ -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \ < $(srcdir)/errno.in.h; \ } > $@-t && \ mv $@-t $@ else errno.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += errno.h errno.h-t EXTRA_DIST += errno.in.h ## end gnulib module errno ## begin gnulib module error EXTRA_DIST += error.c error.h EXTRA_libgnu_a_SOURCES += error.c ## end gnulib module error ## begin gnulib module exitfail libgnu_a_SOURCES += exitfail.c EXTRA_DIST += exitfail.h ## end gnulib module exitfail ## begin gnulib module fcntl EXTRA_DIST += fcntl.c EXTRA_libgnu_a_SOURCES += fcntl.c ## end gnulib module fcntl ## begin gnulib module fcntl-h BUILT_SOURCES += fcntl.h # We need the following in order to create when the system # doesn't have one that works with the given compiler. fcntl.h: fcntl.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_FCNTL_H''@|$(NEXT_FCNTL_H)|g' \ -e 's/@''GNULIB_CREAT''@/$(GNULIB_CREAT)/g' \ -e 's/@''GNULIB_FCNTL''@/$(GNULIB_FCNTL)/g' \ -e 's/@''GNULIB_NONBLOCKING''@/$(GNULIB_NONBLOCKING)/g' \ -e 's/@''GNULIB_OPEN''@/$(GNULIB_OPEN)/g' \ -e 's/@''GNULIB_OPENAT''@/$(GNULIB_OPENAT)/g' \ -e 's|@''HAVE_FCNTL''@|$(HAVE_FCNTL)|g' \ -e 's|@''HAVE_OPENAT''@|$(HAVE_OPENAT)|g' \ -e 's|@''REPLACE_CREAT''@|$(REPLACE_CREAT)|g' \ -e 's|@''REPLACE_FCNTL''@|$(REPLACE_FCNTL)|g' \ -e 's|@''REPLACE_OPEN''@|$(REPLACE_OPEN)|g' \ -e 's|@''REPLACE_OPENAT''@|$(REPLACE_OPENAT)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $(srcdir)/fcntl.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += fcntl.h fcntl.h-t EXTRA_DIST += fcntl.in.h ## end gnulib module fcntl-h ## begin gnulib module fd-hook libgnu_a_SOURCES += fd-hook.c EXTRA_DIST += fd-hook.h ## end gnulib module fd-hook ## begin gnulib module filename EXTRA_DIST += filename.h ## end gnulib module filename ## begin gnulib module findprog-in libgnu_a_SOURCES += findprog.h findprog-in.c ## end gnulib module findprog-in ## begin gnulib module getdtablesize EXTRA_DIST += getdtablesize.c EXTRA_libgnu_a_SOURCES += getdtablesize.c ## end gnulib module getdtablesize ## begin gnulib module getloadavg EXTRA_DIST += getloadavg.c EXTRA_libgnu_a_SOURCES += getloadavg.c ## end gnulib module getloadavg ## begin gnulib module getprogname libgnu_a_SOURCES += getprogname.h getprogname.c ## end gnulib module getprogname ## begin gnulib module gettext-h libgnu_a_SOURCES += gettext.h ## end gnulib module gettext-h ## begin gnulib module intprops EXTRA_DIST += intprops.h ## end gnulib module intprops ## begin gnulib module limits-h BUILT_SOURCES += $(LIMITS_H) # We need the following in order to create when the system # doesn't have one that is compatible with GNU. if GL_GENERATE_LIMITS_H limits.h: limits.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_LIMITS_H''@|$(NEXT_LIMITS_H)|g' \ < $(srcdir)/limits.in.h; \ } > $@-t && \ mv $@-t $@ else limits.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += limits.h limits.h-t EXTRA_DIST += limits.in.h ## end gnulib module limits-h ## begin gnulib module make-glob if !USE_SYSTEM_GLOB libgnu_a_SOURCES += fnmatch.c BUILT_SOURCES += fnmatch.h fnmatch.h: fnmatch.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ cat $(srcdir)/fnmatch.in.h; \ } > $@-t && \ mv -f $@-t $@ MOSTLYCLEANFILES += fnmatch.h fnmatch.h-t libgnu_a_SOURCES += glob.c BUILT_SOURCES += glob.h glob.h: glob.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ cat $(srcdir)/glob.in.h; \ } > $@-t && \ mv -f $@-t $@ MOSTLYCLEANFILES += glob.h glob.h-t endif EXTRA_DIST += fnmatch.in.h glob.in.h ## end gnulib module make-glob ## begin gnulib module malloc-posix EXTRA_DIST += malloc.c EXTRA_libgnu_a_SOURCES += malloc.c ## end gnulib module malloc-posix ## begin gnulib module msvc-inval EXTRA_DIST += msvc-inval.c msvc-inval.h EXTRA_libgnu_a_SOURCES += msvc-inval.c ## end gnulib module msvc-inval ## begin gnulib module msvc-nothrow EXTRA_DIST += msvc-nothrow.c msvc-nothrow.h EXTRA_libgnu_a_SOURCES += msvc-nothrow.c ## end gnulib module msvc-nothrow ## begin gnulib module snippet/_Noreturn # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. _NORETURN_H=$(srcdir)/_Noreturn.h EXTRA_DIST += _Noreturn.h ## end gnulib module snippet/_Noreturn ## begin gnulib module snippet/arg-nonnull # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. ARG_NONNULL_H=$(srcdir)/arg-nonnull.h EXTRA_DIST += arg-nonnull.h ## end gnulib module snippet/arg-nonnull ## begin gnulib module snippet/c++defs # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. CXXDEFS_H=$(srcdir)/c++defs.h EXTRA_DIST += c++defs.h ## end gnulib module snippet/c++defs ## begin gnulib module snippet/warn-on-use # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. WARN_ON_USE_H=$(srcdir)/warn-on-use.h EXTRA_DIST += warn-on-use.h ## end gnulib module snippet/warn-on-use ## begin gnulib module stdbool BUILT_SOURCES += $(STDBOOL_H) # We need the following in order to create when the system # doesn't have one that works. if GL_GENERATE_STDBOOL_H stdbool.h: stdbool.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \ } > $@-t && \ mv $@-t $@ else stdbool.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += stdbool.h stdbool.h-t EXTRA_DIST += stdbool.in.h ## end gnulib module stdbool ## begin gnulib module stddef BUILT_SOURCES += $(STDDEF_H) # We need the following in order to create when the system # doesn't have one that works with the given compiler. if GL_GENERATE_STDDEF_H stddef.h: stddef.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \ -e 's|@''HAVE_MAX_ALIGN_T''@|$(HAVE_MAX_ALIGN_T)|g' \ -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \ -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \ < $(srcdir)/stddef.in.h; \ } > $@-t && \ mv $@-t $@ else stddef.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += stddef.h stddef.h-t EXTRA_DIST += stddef.in.h ## end gnulib module stddef ## begin gnulib module stdint BUILT_SOURCES += $(STDINT_H) # We need the following in order to create when the system # doesn't have one that works with the given compiler. if GL_GENERATE_STDINT_H stdint.h: stdint.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \ -e 's/@''HAVE_C99_STDINT_H''@/$(HAVE_C99_STDINT_H)/g' \ -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \ -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \ -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \ -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \ -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \ -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \ -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \ -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \ -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \ -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \ -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \ -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \ -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \ -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \ -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \ -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \ -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \ -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \ < $(srcdir)/stdint.in.h; \ } > $@-t && \ mv $@-t $@ else stdint.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += stdint.h stdint.h-t EXTRA_DIST += stdint.in.h ## end gnulib module stdint ## begin gnulib module stdio BUILT_SOURCES += stdio.h # We need the following in order to create when the system # doesn't have one that works with the given compiler. stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \ -e 's/@''GNULIB_DPRINTF''@/$(GNULIB_DPRINTF)/g' \ -e 's/@''GNULIB_FCLOSE''@/$(GNULIB_FCLOSE)/g' \ -e 's/@''GNULIB_FDOPEN''@/$(GNULIB_FDOPEN)/g' \ -e 's/@''GNULIB_FFLUSH''@/$(GNULIB_FFLUSH)/g' \ -e 's/@''GNULIB_FGETC''@/$(GNULIB_FGETC)/g' \ -e 's/@''GNULIB_FGETS''@/$(GNULIB_FGETS)/g' \ -e 's/@''GNULIB_FOPEN''@/$(GNULIB_FOPEN)/g' \ -e 's/@''GNULIB_FPRINTF''@/$(GNULIB_FPRINTF)/g' \ -e 's/@''GNULIB_FPRINTF_POSIX''@/$(GNULIB_FPRINTF_POSIX)/g' \ -e 's/@''GNULIB_FPURGE''@/$(GNULIB_FPURGE)/g' \ -e 's/@''GNULIB_FPUTC''@/$(GNULIB_FPUTC)/g' \ -e 's/@''GNULIB_FPUTS''@/$(GNULIB_FPUTS)/g' \ -e 's/@''GNULIB_FREAD''@/$(GNULIB_FREAD)/g' \ -e 's/@''GNULIB_FREOPEN''@/$(GNULIB_FREOPEN)/g' \ -e 's/@''GNULIB_FSCANF''@/$(GNULIB_FSCANF)/g' \ -e 's/@''GNULIB_FSEEK''@/$(GNULIB_FSEEK)/g' \ -e 's/@''GNULIB_FSEEKO''@/$(GNULIB_FSEEKO)/g' \ -e 's/@''GNULIB_FTELL''@/$(GNULIB_FTELL)/g' \ -e 's/@''GNULIB_FTELLO''@/$(GNULIB_FTELLO)/g' \ -e 's/@''GNULIB_FWRITE''@/$(GNULIB_FWRITE)/g' \ -e 's/@''GNULIB_GETC''@/$(GNULIB_GETC)/g' \ -e 's/@''GNULIB_GETCHAR''@/$(GNULIB_GETCHAR)/g' \ -e 's/@''GNULIB_GETDELIM''@/$(GNULIB_GETDELIM)/g' \ -e 's/@''GNULIB_GETLINE''@/$(GNULIB_GETLINE)/g' \ -e 's/@''GNULIB_OBSTACK_PRINTF''@/$(GNULIB_OBSTACK_PRINTF)/g' \ -e 's/@''GNULIB_OBSTACK_PRINTF_POSIX''@/$(GNULIB_OBSTACK_PRINTF_POSIX)/g' \ -e 's/@''GNULIB_PCLOSE''@/$(GNULIB_PCLOSE)/g' \ -e 's/@''GNULIB_PERROR''@/$(GNULIB_PERROR)/g' \ -e 's/@''GNULIB_POPEN''@/$(GNULIB_POPEN)/g' \ -e 's/@''GNULIB_PRINTF''@/$(GNULIB_PRINTF)/g' \ -e 's/@''GNULIB_PRINTF_POSIX''@/$(GNULIB_PRINTF_POSIX)/g' \ -e 's/@''GNULIB_PUTC''@/$(GNULIB_PUTC)/g' \ -e 's/@''GNULIB_PUTCHAR''@/$(GNULIB_PUTCHAR)/g' \ -e 's/@''GNULIB_PUTS''@/$(GNULIB_PUTS)/g' \ -e 's/@''GNULIB_REMOVE''@/$(GNULIB_REMOVE)/g' \ -e 's/@''GNULIB_RENAME''@/$(GNULIB_RENAME)/g' \ -e 's/@''GNULIB_RENAMEAT''@/$(GNULIB_RENAMEAT)/g' \ -e 's/@''GNULIB_SCANF''@/$(GNULIB_SCANF)/g' \ -e 's/@''GNULIB_SNPRINTF''@/$(GNULIB_SNPRINTF)/g' \ -e 's/@''GNULIB_SPRINTF_POSIX''@/$(GNULIB_SPRINTF_POSIX)/g' \ -e 's/@''GNULIB_STDIO_H_NONBLOCKING''@/$(GNULIB_STDIO_H_NONBLOCKING)/g' \ -e 's/@''GNULIB_STDIO_H_SIGPIPE''@/$(GNULIB_STDIO_H_SIGPIPE)/g' \ -e 's/@''GNULIB_TMPFILE''@/$(GNULIB_TMPFILE)/g' \ -e 's/@''GNULIB_VASPRINTF''@/$(GNULIB_VASPRINTF)/g' \ -e 's/@''GNULIB_VDPRINTF''@/$(GNULIB_VDPRINTF)/g' \ -e 's/@''GNULIB_VFPRINTF''@/$(GNULIB_VFPRINTF)/g' \ -e 's/@''GNULIB_VFPRINTF_POSIX''@/$(GNULIB_VFPRINTF_POSIX)/g' \ -e 's/@''GNULIB_VFSCANF''@/$(GNULIB_VFSCANF)/g' \ -e 's/@''GNULIB_VSCANF''@/$(GNULIB_VSCANF)/g' \ -e 's/@''GNULIB_VPRINTF''@/$(GNULIB_VPRINTF)/g' \ -e 's/@''GNULIB_VPRINTF_POSIX''@/$(GNULIB_VPRINTF_POSIX)/g' \ -e 's/@''GNULIB_VSNPRINTF''@/$(GNULIB_VSNPRINTF)/g' \ -e 's/@''GNULIB_VSPRINTF_POSIX''@/$(GNULIB_VSPRINTF_POSIX)/g' \ < $(srcdir)/stdio.in.h | \ sed -e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \ -e 's|@''HAVE_DECL_FSEEKO''@|$(HAVE_DECL_FSEEKO)|g' \ -e 's|@''HAVE_DECL_FTELLO''@|$(HAVE_DECL_FTELLO)|g' \ -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \ -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \ -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \ -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \ -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \ -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \ -e 's|@''HAVE_FSEEKO''@|$(HAVE_FSEEKO)|g' \ -e 's|@''HAVE_FTELLO''@|$(HAVE_FTELLO)|g' \ -e 's|@''HAVE_PCLOSE''@|$(HAVE_PCLOSE)|g' \ -e 's|@''HAVE_POPEN''@|$(HAVE_POPEN)|g' \ -e 's|@''HAVE_RENAMEAT''@|$(HAVE_RENAMEAT)|g' \ -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \ -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \ -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \ -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \ -e 's|@''REPLACE_FDOPEN''@|$(REPLACE_FDOPEN)|g' \ -e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \ -e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \ -e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \ -e 's|@''REPLACE_FPURGE''@|$(REPLACE_FPURGE)|g' \ -e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \ -e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \ -e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \ -e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \ -e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \ -e 's|@''REPLACE_GETDELIM''@|$(REPLACE_GETDELIM)|g' \ -e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \ -e 's|@''REPLACE_OBSTACK_PRINTF''@|$(REPLACE_OBSTACK_PRINTF)|g' \ -e 's|@''REPLACE_PERROR''@|$(REPLACE_PERROR)|g' \ -e 's|@''REPLACE_POPEN''@|$(REPLACE_POPEN)|g' \ -e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \ -e 's|@''REPLACE_REMOVE''@|$(REPLACE_REMOVE)|g' \ -e 's|@''REPLACE_RENAME''@|$(REPLACE_RENAME)|g' \ -e 's|@''REPLACE_RENAMEAT''@|$(REPLACE_RENAMEAT)|g' \ -e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \ -e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \ -e 's|@''REPLACE_STDIO_READ_FUNCS''@|$(REPLACE_STDIO_READ_FUNCS)|g' \ -e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \ -e 's|@''REPLACE_TMPFILE''@|$(REPLACE_TMPFILE)|g' \ -e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \ -e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \ -e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \ -e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \ -e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \ -e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \ -e 's|@''ASM_SYMBOL_PREFIX''@|$(ASM_SYMBOL_PREFIX)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += stdio.h stdio.h-t EXTRA_DIST += stdio.in.h ## end gnulib module stdio ## begin gnulib module stdlib BUILT_SOURCES += stdlib.h # We need the following in order to create when the system # doesn't have one that works with the given compiler. stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \ $(_NORETURN_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \ -e 's/@''GNULIB__EXIT''@/$(GNULIB__EXIT)/g' \ -e 's/@''GNULIB_ATOLL''@/$(GNULIB_ATOLL)/g' \ -e 's/@''GNULIB_CALLOC_POSIX''@/$(GNULIB_CALLOC_POSIX)/g' \ -e 's/@''GNULIB_CANONICALIZE_FILE_NAME''@/$(GNULIB_CANONICALIZE_FILE_NAME)/g' \ -e 's/@''GNULIB_GETLOADAVG''@/$(GNULIB_GETLOADAVG)/g' \ -e 's/@''GNULIB_GETSUBOPT''@/$(GNULIB_GETSUBOPT)/g' \ -e 's/@''GNULIB_GRANTPT''@/$(GNULIB_GRANTPT)/g' \ -e 's/@''GNULIB_MALLOC_POSIX''@/$(GNULIB_MALLOC_POSIX)/g' \ -e 's/@''GNULIB_MBTOWC''@/$(GNULIB_MBTOWC)/g' \ -e 's/@''GNULIB_MKDTEMP''@/$(GNULIB_MKDTEMP)/g' \ -e 's/@''GNULIB_MKOSTEMP''@/$(GNULIB_MKOSTEMP)/g' \ -e 's/@''GNULIB_MKOSTEMPS''@/$(GNULIB_MKOSTEMPS)/g' \ -e 's/@''GNULIB_MKSTEMP''@/$(GNULIB_MKSTEMP)/g' \ -e 's/@''GNULIB_MKSTEMPS''@/$(GNULIB_MKSTEMPS)/g' \ -e 's/@''GNULIB_POSIX_OPENPT''@/$(GNULIB_POSIX_OPENPT)/g' \ -e 's/@''GNULIB_PTSNAME''@/$(GNULIB_PTSNAME)/g' \ -e 's/@''GNULIB_PTSNAME_R''@/$(GNULIB_PTSNAME_R)/g' \ -e 's/@''GNULIB_PUTENV''@/$(GNULIB_PUTENV)/g' \ -e 's/@''GNULIB_QSORT_R''@/$(GNULIB_QSORT_R)/g' \ -e 's/@''GNULIB_RANDOM''@/$(GNULIB_RANDOM)/g' \ -e 's/@''GNULIB_RANDOM_R''@/$(GNULIB_RANDOM_R)/g' \ -e 's/@''GNULIB_REALLOC_POSIX''@/$(GNULIB_REALLOC_POSIX)/g' \ -e 's/@''GNULIB_REALLOCARRAY''@/$(GNULIB_REALLOCARRAY)/g' \ -e 's/@''GNULIB_REALPATH''@/$(GNULIB_REALPATH)/g' \ -e 's/@''GNULIB_RPMATCH''@/$(GNULIB_RPMATCH)/g' \ -e 's/@''GNULIB_SECURE_GETENV''@/$(GNULIB_SECURE_GETENV)/g' \ -e 's/@''GNULIB_SETENV''@/$(GNULIB_SETENV)/g' \ -e 's/@''GNULIB_STRTOD''@/$(GNULIB_STRTOD)/g' \ -e 's/@''GNULIB_STRTOLD''@/$(GNULIB_STRTOLD)/g' \ -e 's/@''GNULIB_STRTOLL''@/$(GNULIB_STRTOLL)/g' \ -e 's/@''GNULIB_STRTOULL''@/$(GNULIB_STRTOULL)/g' \ -e 's/@''GNULIB_SYSTEM_POSIX''@/$(GNULIB_SYSTEM_POSIX)/g' \ -e 's/@''GNULIB_UNLOCKPT''@/$(GNULIB_UNLOCKPT)/g' \ -e 's/@''GNULIB_UNSETENV''@/$(GNULIB_UNSETENV)/g' \ -e 's/@''GNULIB_WCTOMB''@/$(GNULIB_WCTOMB)/g' \ < $(srcdir)/stdlib.in.h | \ sed -e 's|@''HAVE__EXIT''@|$(HAVE__EXIT)|g' \ -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \ -e 's|@''HAVE_CANONICALIZE_FILE_NAME''@|$(HAVE_CANONICALIZE_FILE_NAME)|g' \ -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \ -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \ -e 's|@''HAVE_GRANTPT''@|$(HAVE_GRANTPT)|g' \ -e 's|@''HAVE_INITSTATE''@|$(HAVE_INITSTATE)|g' \ -e 's|@''HAVE_DECL_INITSTATE''@|$(HAVE_DECL_INITSTATE)|g' \ -e 's|@''HAVE_MBTOWC''@|$(HAVE_MBTOWC)|g' \ -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \ -e 's|@''HAVE_MKOSTEMP''@|$(HAVE_MKOSTEMP)|g' \ -e 's|@''HAVE_MKOSTEMPS''@|$(HAVE_MKOSTEMPS)|g' \ -e 's|@''HAVE_MKSTEMP''@|$(HAVE_MKSTEMP)|g' \ -e 's|@''HAVE_MKSTEMPS''@|$(HAVE_MKSTEMPS)|g' \ -e 's|@''HAVE_POSIX_OPENPT''@|$(HAVE_POSIX_OPENPT)|g' \ -e 's|@''HAVE_PTSNAME''@|$(HAVE_PTSNAME)|g' \ -e 's|@''HAVE_PTSNAME_R''@|$(HAVE_PTSNAME_R)|g' \ -e 's|@''HAVE_QSORT_R''@|$(HAVE_QSORT_R)|g' \ -e 's|@''HAVE_RANDOM''@|$(HAVE_RANDOM)|g' \ -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \ -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \ -e 's|@''HAVE_REALLOCARRAY''@|$(HAVE_REALLOCARRAY)|g' \ -e 's|@''HAVE_REALPATH''@|$(HAVE_REALPATH)|g' \ -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \ -e 's|@''HAVE_SECURE_GETENV''@|$(HAVE_SECURE_GETENV)|g' \ -e 's|@''HAVE_DECL_SETENV''@|$(HAVE_DECL_SETENV)|g' \ -e 's|@''HAVE_SETSTATE''@|$(HAVE_SETSTATE)|g' \ -e 's|@''HAVE_DECL_SETSTATE''@|$(HAVE_DECL_SETSTATE)|g' \ -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \ -e 's|@''HAVE_STRTOLD''@|$(HAVE_STRTOLD)|g' \ -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \ -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \ -e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \ -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \ -e 's|@''HAVE_UNLOCKPT''@|$(HAVE_UNLOCKPT)|g' \ -e 's|@''HAVE_DECL_UNSETENV''@|$(HAVE_DECL_UNSETENV)|g' \ -e 's|@''REPLACE_CALLOC''@|$(REPLACE_CALLOC)|g' \ -e 's|@''REPLACE_CANONICALIZE_FILE_NAME''@|$(REPLACE_CANONICALIZE_FILE_NAME)|g' \ -e 's|@''REPLACE_INITSTATE''@|$(REPLACE_INITSTATE)|g' \ -e 's|@''REPLACE_MALLOC''@|$(REPLACE_MALLOC)|g' \ -e 's|@''REPLACE_MBTOWC''@|$(REPLACE_MBTOWC)|g' \ -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \ -e 's|@''REPLACE_PTSNAME''@|$(REPLACE_PTSNAME)|g' \ -e 's|@''REPLACE_PTSNAME_R''@|$(REPLACE_PTSNAME_R)|g' \ -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \ -e 's|@''REPLACE_QSORT_R''@|$(REPLACE_QSORT_R)|g' \ -e 's|@''REPLACE_RANDOM''@|$(REPLACE_RANDOM)|g' \ -e 's|@''REPLACE_RANDOM_R''@|$(REPLACE_RANDOM_R)|g' \ -e 's|@''REPLACE_REALLOC''@|$(REPLACE_REALLOC)|g' \ -e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \ -e 's|@''REPLACE_SETENV''@|$(REPLACE_SETENV)|g' \ -e 's|@''REPLACE_SETSTATE''@|$(REPLACE_SETSTATE)|g' \ -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \ -e 's|@''REPLACE_STRTOLD''@|$(REPLACE_STRTOLD)|g' \ -e 's|@''REPLACE_UNSETENV''@|$(REPLACE_UNSETENV)|g' \ -e 's|@''REPLACE_WCTOMB''@|$(REPLACE_WCTOMB)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _Noreturn/r $(_NORETURN_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += stdlib.h stdlib.h-t EXTRA_DIST += stdlib.in.h ## end gnulib module stdlib ## begin gnulib module stpcpy EXTRA_DIST += stpcpy.c EXTRA_libgnu_a_SOURCES += stpcpy.c ## end gnulib module stpcpy ## begin gnulib module strerror EXTRA_DIST += strerror.c EXTRA_libgnu_a_SOURCES += strerror.c ## end gnulib module strerror ## begin gnulib module strerror-override EXTRA_DIST += strerror-override.c strerror-override.h EXTRA_libgnu_a_SOURCES += strerror-override.c ## end gnulib module strerror-override ## begin gnulib module string BUILT_SOURCES += string.h # We need the following in order to create when the system # doesn't have one that works with the given compiler. string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \ -e 's/@''GNULIB_EXPLICIT_BZERO''@/$(GNULIB_EXPLICIT_BZERO)/g' \ -e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \ -e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/g' \ -e 's/@''GNULIB_MBSLEN''@/$(GNULIB_MBSLEN)/g' \ -e 's/@''GNULIB_MBSNLEN''@/$(GNULIB_MBSNLEN)/g' \ -e 's/@''GNULIB_MBSCHR''@/$(GNULIB_MBSCHR)/g' \ -e 's/@''GNULIB_MBSRCHR''@/$(GNULIB_MBSRCHR)/g' \ -e 's/@''GNULIB_MBSSTR''@/$(GNULIB_MBSSTR)/g' \ -e 's/@''GNULIB_MBSCASECMP''@/$(GNULIB_MBSCASECMP)/g' \ -e 's/@''GNULIB_MBSNCASECMP''@/$(GNULIB_MBSNCASECMP)/g' \ -e 's/@''GNULIB_MBSPCASECMP''@/$(GNULIB_MBSPCASECMP)/g' \ -e 's/@''GNULIB_MBSCASESTR''@/$(GNULIB_MBSCASESTR)/g' \ -e 's/@''GNULIB_MBSCSPN''@/$(GNULIB_MBSCSPN)/g' \ -e 's/@''GNULIB_MBSPBRK''@/$(GNULIB_MBSPBRK)/g' \ -e 's/@''GNULIB_MBSSPN''@/$(GNULIB_MBSSPN)/g' \ -e 's/@''GNULIB_MBSSEP''@/$(GNULIB_MBSSEP)/g' \ -e 's/@''GNULIB_MBSTOK_R''@/$(GNULIB_MBSTOK_R)/g' \ -e 's/@''GNULIB_MEMCHR''@/$(GNULIB_MEMCHR)/g' \ -e 's/@''GNULIB_MEMMEM''@/$(GNULIB_MEMMEM)/g' \ -e 's/@''GNULIB_MEMPCPY''@/$(GNULIB_MEMPCPY)/g' \ -e 's/@''GNULIB_MEMRCHR''@/$(GNULIB_MEMRCHR)/g' \ -e 's/@''GNULIB_RAWMEMCHR''@/$(GNULIB_RAWMEMCHR)/g' \ -e 's/@''GNULIB_STPCPY''@/$(GNULIB_STPCPY)/g' \ -e 's/@''GNULIB_STPNCPY''@/$(GNULIB_STPNCPY)/g' \ -e 's/@''GNULIB_STRCHRNUL''@/$(GNULIB_STRCHRNUL)/g' \ -e 's/@''GNULIB_STRDUP''@/$(GNULIB_STRDUP)/g' \ -e 's/@''GNULIB_STRNCAT''@/$(GNULIB_STRNCAT)/g' \ -e 's/@''GNULIB_STRNDUP''@/$(GNULIB_STRNDUP)/g' \ -e 's/@''GNULIB_STRNLEN''@/$(GNULIB_STRNLEN)/g' \ -e 's/@''GNULIB_STRPBRK''@/$(GNULIB_STRPBRK)/g' \ -e 's/@''GNULIB_STRSEP''@/$(GNULIB_STRSEP)/g' \ -e 's/@''GNULIB_STRSTR''@/$(GNULIB_STRSTR)/g' \ -e 's/@''GNULIB_STRCASESTR''@/$(GNULIB_STRCASESTR)/g' \ -e 's/@''GNULIB_STRTOK_R''@/$(GNULIB_STRTOK_R)/g' \ -e 's/@''GNULIB_STRERROR''@/$(GNULIB_STRERROR)/g' \ -e 's/@''GNULIB_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \ -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \ -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \ < $(srcdir)/string.in.h | \ sed -e 's|@''HAVE_EXPLICIT_BZERO''@|$(HAVE_EXPLICIT_BZERO)|g' \ -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \ -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \ -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \ -e 's|@''HAVE_MEMCHR''@|$(HAVE_MEMCHR)|g' \ -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \ -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \ -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \ -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \ -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \ -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \ -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \ -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \ -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \ -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \ -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \ -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \ -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \ -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \ -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \ -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \ -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \ -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \ -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \ -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \ -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \ -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \ -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \ -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \ -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \ -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \ -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \ -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ < $(srcdir)/string.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += string.h string.h-t EXTRA_DIST += string.in.h ## end gnulib module string ## begin gnulib module sys_types BUILT_SOURCES += sys/types.h # We need the following in order to create when the system # doesn't have one that works with the given compiler. sys/types.h: sys_types.in.h $(top_builddir)/config.status $(AM_V_at)$(MKDIR_P) sys $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ -e 's|@''WINDOWS_STAT_INODES''@|$(WINDOWS_STAT_INODES)|g' \ < $(srcdir)/sys_types.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += sys/types.h sys/types.h-t EXTRA_DIST += sys_types.in.h ## end gnulib module sys_types ## begin gnulib module unistd BUILT_SOURCES += unistd.h libgnu_a_SOURCES += unistd.c # We need the following in order to create an empty placeholder for # when the system doesn't have one. unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ -e 's/@''GNULIB_ACCESS''@/$(GNULIB_ACCESS)/g' \ -e 's/@''GNULIB_CHDIR''@/$(GNULIB_CHDIR)/g' \ -e 's/@''GNULIB_CHOWN''@/$(GNULIB_CHOWN)/g' \ -e 's/@''GNULIB_CLOSE''@/$(GNULIB_CLOSE)/g' \ -e 's/@''GNULIB_COPY_FILE_RANGE''@/$(GNULIB_COPY_FILE_RANGE)/g' \ -e 's/@''GNULIB_DUP''@/$(GNULIB_DUP)/g' \ -e 's/@''GNULIB_DUP2''@/$(GNULIB_DUP2)/g' \ -e 's/@''GNULIB_DUP3''@/$(GNULIB_DUP3)/g' \ -e 's/@''GNULIB_ENVIRON''@/$(GNULIB_ENVIRON)/g' \ -e 's/@''GNULIB_EUIDACCESS''@/$(GNULIB_EUIDACCESS)/g' \ -e 's/@''GNULIB_FACCESSAT''@/$(GNULIB_FACCESSAT)/g' \ -e 's/@''GNULIB_FCHDIR''@/$(GNULIB_FCHDIR)/g' \ -e 's/@''GNULIB_FCHOWNAT''@/$(GNULIB_FCHOWNAT)/g' \ -e 's/@''GNULIB_FDATASYNC''@/$(GNULIB_FDATASYNC)/g' \ -e 's/@''GNULIB_FSYNC''@/$(GNULIB_FSYNC)/g' \ -e 's/@''GNULIB_FTRUNCATE''@/$(GNULIB_FTRUNCATE)/g' \ -e 's/@''GNULIB_GETCWD''@/$(GNULIB_GETCWD)/g' \ -e 's/@''GNULIB_GETDOMAINNAME''@/$(GNULIB_GETDOMAINNAME)/g' \ -e 's/@''GNULIB_GETDTABLESIZE''@/$(GNULIB_GETDTABLESIZE)/g' \ -e 's/@''GNULIB_GETGROUPS''@/$(GNULIB_GETGROUPS)/g' \ -e 's/@''GNULIB_GETHOSTNAME''@/$(GNULIB_GETHOSTNAME)/g' \ -e 's/@''GNULIB_GETLOGIN''@/$(GNULIB_GETLOGIN)/g' \ -e 's/@''GNULIB_GETLOGIN_R''@/$(GNULIB_GETLOGIN_R)/g' \ -e 's/@''GNULIB_GETPAGESIZE''@/$(GNULIB_GETPAGESIZE)/g' \ -e 's/@''GNULIB_GETPASS''@/$(GNULIB_GETPASS)/g' \ -e 's/@''GNULIB_GETUSERSHELL''@/$(GNULIB_GETUSERSHELL)/g' \ -e 's/@''GNULIB_GROUP_MEMBER''@/$(GNULIB_GROUP_MEMBER)/g' \ -e 's/@''GNULIB_ISATTY''@/$(GNULIB_ISATTY)/g' \ -e 's/@''GNULIB_LCHOWN''@/$(GNULIB_LCHOWN)/g' \ -e 's/@''GNULIB_LINK''@/$(GNULIB_LINK)/g' \ -e 's/@''GNULIB_LINKAT''@/$(GNULIB_LINKAT)/g' \ -e 's/@''GNULIB_LSEEK''@/$(GNULIB_LSEEK)/g' \ -e 's/@''GNULIB_PIPE''@/$(GNULIB_PIPE)/g' \ -e 's/@''GNULIB_PIPE2''@/$(GNULIB_PIPE2)/g' \ -e 's/@''GNULIB_PREAD''@/$(GNULIB_PREAD)/g' \ -e 's/@''GNULIB_PWRITE''@/$(GNULIB_PWRITE)/g' \ -e 's/@''GNULIB_READ''@/$(GNULIB_READ)/g' \ -e 's/@''GNULIB_READLINK''@/$(GNULIB_READLINK)/g' \ -e 's/@''GNULIB_READLINKAT''@/$(GNULIB_READLINKAT)/g' \ -e 's/@''GNULIB_RMDIR''@/$(GNULIB_RMDIR)/g' \ -e 's/@''GNULIB_SETHOSTNAME''@/$(GNULIB_SETHOSTNAME)/g' \ -e 's/@''GNULIB_SLEEP''@/$(GNULIB_SLEEP)/g' \ -e 's/@''GNULIB_SYMLINK''@/$(GNULIB_SYMLINK)/g' \ -e 's/@''GNULIB_SYMLINKAT''@/$(GNULIB_SYMLINKAT)/g' \ -e 's/@''GNULIB_TRUNCATE''@/$(GNULIB_TRUNCATE)/g' \ -e 's/@''GNULIB_TTYNAME_R''@/$(GNULIB_TTYNAME_R)/g' \ -e 's/@''GNULIB_UNISTD_H_GETOPT''@/0$(GNULIB_GL_UNISTD_H_GETOPT)/g' \ -e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GNULIB_UNISTD_H_NONBLOCKING)/g' \ -e 's/@''GNULIB_UNISTD_H_SIGPIPE''@/$(GNULIB_UNISTD_H_SIGPIPE)/g' \ -e 's/@''GNULIB_UNLINK''@/$(GNULIB_UNLINK)/g' \ -e 's/@''GNULIB_UNLINKAT''@/$(GNULIB_UNLINKAT)/g' \ -e 's/@''GNULIB_USLEEP''@/$(GNULIB_USLEEP)/g' \ -e 's/@''GNULIB_WRITE''@/$(GNULIB_WRITE)/g' \ < $(srcdir)/unistd.in.h | \ sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \ -e 's|@''HAVE_COPY_FILE_RANGE''@|$(HAVE_COPY_FILE_RANGE)|g' \ -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \ -e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \ -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \ -e 's|@''HAVE_FACCESSAT''@|$(HAVE_FACCESSAT)|g' \ -e 's|@''HAVE_FCHDIR''@|$(HAVE_FCHDIR)|g' \ -e 's|@''HAVE_FCHOWNAT''@|$(HAVE_FCHOWNAT)|g' \ -e 's|@''HAVE_FDATASYNC''@|$(HAVE_FDATASYNC)|g' \ -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \ -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \ -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \ -e 's|@''HAVE_GETGROUPS''@|$(HAVE_GETGROUPS)|g' \ -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \ -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \ -e 's|@''HAVE_GETPASS''@|$(HAVE_GETPASS)|g' \ -e 's|@''HAVE_GROUP_MEMBER''@|$(HAVE_GROUP_MEMBER)|g' \ -e 's|@''HAVE_LCHOWN''@|$(HAVE_LCHOWN)|g' \ -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \ -e 's|@''HAVE_LINKAT''@|$(HAVE_LINKAT)|g' \ -e 's|@''HAVE_PIPE''@|$(HAVE_PIPE)|g' \ -e 's|@''HAVE_PIPE2''@|$(HAVE_PIPE2)|g' \ -e 's|@''HAVE_PREAD''@|$(HAVE_PREAD)|g' \ -e 's|@''HAVE_PWRITE''@|$(HAVE_PWRITE)|g' \ -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \ -e 's|@''HAVE_READLINKAT''@|$(HAVE_READLINKAT)|g' \ -e 's|@''HAVE_SETHOSTNAME''@|$(HAVE_SETHOSTNAME)|g' \ -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \ -e 's|@''HAVE_SYMLINK''@|$(HAVE_SYMLINK)|g' \ -e 's|@''HAVE_SYMLINKAT''@|$(HAVE_SYMLINKAT)|g' \ -e 's|@''HAVE_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \ -e 's|@''HAVE_USLEEP''@|$(HAVE_USLEEP)|g' \ -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \ -e 's|@''HAVE_DECL_FCHDIR''@|$(HAVE_DECL_FCHDIR)|g' \ -e 's|@''HAVE_DECL_FDATASYNC''@|$(HAVE_DECL_FDATASYNC)|g' \ -e 's|@''HAVE_DECL_GETDOMAINNAME''@|$(HAVE_DECL_GETDOMAINNAME)|g' \ -e 's|@''HAVE_DECL_GETLOGIN''@|$(HAVE_DECL_GETLOGIN)|g' \ -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \ -e 's|@''HAVE_DECL_GETPAGESIZE''@|$(HAVE_DECL_GETPAGESIZE)|g' \ -e 's|@''HAVE_DECL_GETUSERSHELL''@|$(HAVE_DECL_GETUSERSHELL)|g' \ -e 's|@''HAVE_DECL_SETHOSTNAME''@|$(HAVE_DECL_SETHOSTNAME)|g' \ -e 's|@''HAVE_DECL_TRUNCATE''@|$(HAVE_DECL_TRUNCATE)|g' \ -e 's|@''HAVE_DECL_TTYNAME_R''@|$(HAVE_DECL_TTYNAME_R)|g' \ -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \ -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \ | \ sed -e 's|@''REPLACE_ACCESS''@|$(REPLACE_ACCESS)|g' \ -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \ -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \ -e 's|@''REPLACE_DUP''@|$(REPLACE_DUP)|g' \ -e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \ -e 's|@''REPLACE_FACCESSAT''@|$(REPLACE_FACCESSAT)|g' \ -e 's|@''REPLACE_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \ -e 's|@''REPLACE_FTRUNCATE''@|$(REPLACE_FTRUNCATE)|g' \ -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \ -e 's|@''REPLACE_GETDOMAINNAME''@|$(REPLACE_GETDOMAINNAME)|g' \ -e 's|@''REPLACE_GETDTABLESIZE''@|$(REPLACE_GETDTABLESIZE)|g' \ -e 's|@''REPLACE_GETLOGIN_R''@|$(REPLACE_GETLOGIN_R)|g' \ -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \ -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \ -e 's|@''REPLACE_GETPASS''@|$(REPLACE_GETPASS)|g' \ -e 's|@''REPLACE_ISATTY''@|$(REPLACE_ISATTY)|g' \ -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \ -e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \ -e 's|@''REPLACE_LINKAT''@|$(REPLACE_LINKAT)|g' \ -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \ -e 's|@''REPLACE_PREAD''@|$(REPLACE_PREAD)|g' \ -e 's|@''REPLACE_PWRITE''@|$(REPLACE_PWRITE)|g' \ -e 's|@''REPLACE_READ''@|$(REPLACE_READ)|g' \ -e 's|@''REPLACE_READLINK''@|$(REPLACE_READLINK)|g' \ -e 's|@''REPLACE_READLINKAT''@|$(REPLACE_READLINKAT)|g' \ -e 's|@''REPLACE_RMDIR''@|$(REPLACE_RMDIR)|g' \ -e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \ -e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \ -e 's|@''REPLACE_SYMLINKAT''@|$(REPLACE_SYMLINKAT)|g' \ -e 's|@''REPLACE_TRUNCATE''@|$(REPLACE_TRUNCATE)|g' \ -e 's|@''REPLACE_TTYNAME_R''@|$(REPLACE_TTYNAME_R)|g' \ -e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \ -e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \ -e 's|@''REPLACE_USLEEP''@|$(REPLACE_USLEEP)|g' \ -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \ -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \ -e 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += unistd.h unistd.h-t EXTRA_DIST += unistd.in.h ## end gnulib module unistd ## begin gnulib module verify EXTRA_DIST += verify.h ## end gnulib module verify ## begin gnulib module xalloc libgnu_a_SOURCES += xmalloc.c EXTRA_DIST += xalloc.h ## end gnulib module xalloc ## begin gnulib module xalloc-die libgnu_a_SOURCES += xalloc-die.c ## end gnulib module xalloc-die ## begin gnulib module xalloc-oversized EXTRA_DIST += xalloc-oversized.h ## end gnulib module xalloc-oversized ## begin gnulib module xconcat-filename libgnu_a_SOURCES += xconcat-filename.c EXTRA_DIST += concat-filename.h ## end gnulib module xconcat-filename mostlyclean-local: mostlyclean-generic @for dir in '' $(MOSTLYCLEANDIRS); do \ if test -n "$$dir" && test -d $$dir; then \ echo "rmdir $$dir"; rmdir $$dir; \ fi; \ done; \ : make-4.3/lib/msvc-nothrow.h0000644000175000017500000000276213611136472012616 00000000000000/* Wrappers that don't throw invalid parameter notifications with MSVC runtime libraries. Copyright (C) 2011-2020 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 the Free Software Foundation; either version 3, 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, see . */ #ifndef _MSVC_NOTHROW_H #define _MSVC_NOTHROW_H /* With MSVC runtime libraries with the "invalid parameter handler" concept, functions like fprintf(), dup2(), or close() crash when the caller passes an invalid argument. But POSIX wants error codes (such as EINVAL or EBADF) instead. This file defines wrappers that turn such an invalid parameter notification into an error code. */ #if defined _WIN32 && ! defined __CYGWIN__ /* Get original declaration of _get_osfhandle. */ # include # if HAVE_MSVC_INVALID_PARAMETER_HANDLER /* Override _get_osfhandle. */ extern intptr_t _gl_nothrow_get_osfhandle (int fd); # define _get_osfhandle _gl_nothrow_get_osfhandle # endif #endif #endif /* _MSVC_NOTHROW_H */ make-4.3/lib/stpcpy.c0000644000175000017500000000254313611136472011462 00000000000000/* stpcpy.c -- copy a string and return pointer to end of new string Copyright (C) 1992, 1995, 1997-1998, 2006, 2009-2020 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@prep.ai.mit.edu. 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 3 of the License, or 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, see . */ #include #include #undef __stpcpy #ifdef _LIBC # undef stpcpy #endif #ifndef weak_alias # define __stpcpy stpcpy #endif /* Copy SRC to DEST, returning the address of the terminating '\0' in DEST. */ char * __stpcpy (char *dest, const char *src) { register char *d = dest; register const char *s = src; do *d++ = *s; while (*s++ != '\0'); return d - 1; } #ifdef weak_alias weak_alias (__stpcpy, stpcpy) #endif make-4.3/lib/filename.h0000644000175000017500000000362613611136471011727 00000000000000/* Basic filename support macros. Copyright (C) 2001-2004, 2007-2020 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 the Free Software Foundation; either version 3 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, see . */ #ifndef _FILENAME_H #define _FILENAME_H #ifdef __cplusplus extern "C" { #endif /* Pathname support. ISSLASH(C) tests whether C is a directory separator character. IS_ABSOLUTE_PATH(P) tests whether P is an absolute path. If it is not, it may be concatenated to a directory pathname. IS_PATH_WITH_DIR(P) tests whether P contains a directory specification. */ #if defined _WIN32 || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ /* Native Windows, Cygwin, OS/2, DOS */ # define ISSLASH(C) ((C) == '/' || (C) == '\\') # define HAS_DEVICE(P) \ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \ && (P)[1] == ':') # define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P)) # define IS_PATH_WITH_DIR(P) \ (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P)) # define FILE_SYSTEM_PREFIX_LEN(P) (HAS_DEVICE (P) ? 2 : 0) #else /* Unix */ # define ISSLASH(C) ((C) == '/') # define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0]) # define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL) # define FILE_SYSTEM_PREFIX_LEN(P) 0 #endif #ifdef __cplusplus } #endif #endif /* _FILENAME_H */ make-4.3/lib/fd-hook.h0000644000175000017500000001134313611136471011471 00000000000000/* Hook for making file descriptor functions close(), ioctl() extensible. Copyright (C) 2009-2020 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 the Free Software Foundation; either version 3 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, see . */ #ifndef FD_HOOK_H #define FD_HOOK_H #ifdef __cplusplus extern "C" { #endif /* Currently, this entire code is only needed for the handling of sockets on native Windows platforms. */ #if WINDOWS_SOCKETS /* Type of function that closes FD. */ typedef int (*gl_close_fn) (int fd); /* Type of function that applies a control request to FD. */ typedef int (*gl_ioctl_fn) (int fd, int request, void *arg); /* An element of the list of file descriptor hooks. In CLOS (Common Lisp Object System) speak, it consists of an "around" method for the close() function and an "around" method for the ioctl() function. The fields of this structure are considered private. */ struct fd_hook { /* Doubly linked list. */ struct fd_hook *private_next; struct fd_hook *private_prev; /* Function that treats the types of FD that it knows about and calls execute_close_hooks (REMAINING_LIST, PRIMARY, FD) as a fallback. */ int (*private_close_fn) (const struct fd_hook *remaining_list, gl_close_fn primary, int fd); /* Function that treats the types of FD that it knows about and calls execute_ioctl_hooks (REMAINING_LIST, PRIMARY, FD, REQUEST, ARG) as a fallback. */ int (*private_ioctl_fn) (const struct fd_hook *remaining_list, gl_ioctl_fn primary, int fd, int request, void *arg); }; /* This type of function closes FD, applying special knowledge for the FD types it knows about, and calls execute_close_hooks (REMAINING_LIST, PRIMARY, FD) for the other FD types. In CLOS speak, REMAINING_LIST is the remaining list of "around" methods, and PRIMARY is the "primary" method for close(). */ typedef int (*close_hook_fn) (const struct fd_hook *remaining_list, gl_close_fn primary, int fd); /* Execute the close hooks in REMAINING_LIST, with PRIMARY as "primary" method. Return 0 or -1, like close() would do. */ extern int execute_close_hooks (const struct fd_hook *remaining_list, gl_close_fn primary, int fd); /* Execute all close hooks, with PRIMARY as "primary" method. Return 0 or -1, like close() would do. */ extern int execute_all_close_hooks (gl_close_fn primary, int fd); /* This type of function applies a control request to FD, applying special knowledge for the FD types it knows about, and calls execute_ioctl_hooks (REMAINING_LIST, PRIMARY, FD, REQUEST, ARG) for the other FD types. In CLOS speak, REMAINING_LIST is the remaining list of "around" methods, and PRIMARY is the "primary" method for ioctl(). */ typedef int (*ioctl_hook_fn) (const struct fd_hook *remaining_list, gl_ioctl_fn primary, int fd, int request, void *arg); /* Execute the ioctl hooks in REMAINING_LIST, with PRIMARY as "primary" method. Return 0 or -1, like ioctl() would do. */ extern int execute_ioctl_hooks (const struct fd_hook *remaining_list, gl_ioctl_fn primary, int fd, int request, void *arg); /* Execute all ioctl hooks, with PRIMARY as "primary" method. Return 0 or -1, like ioctl() would do. */ extern int execute_all_ioctl_hooks (gl_ioctl_fn primary, int fd, int request, void *arg); /* Add a function pair to the list of file descriptor hooks. CLOSE_HOOK and IOCTL_HOOK may be NULL, indicating no change. The LINK variable points to a piece of memory which is guaranteed to be accessible until the corresponding call to unregister_fd_hook. */ extern void register_fd_hook (close_hook_fn close_hook, ioctl_hook_fn ioctl_hook, struct fd_hook *link); /* Removes a hook from the list of file descriptor hooks. */ extern void unregister_fd_hook (struct fd_hook *link); #endif #ifdef __cplusplus } #endif #endif /* FD_HOOK_H */ make-4.3/lib/string.in.h0000644000175000017500000012075713611136472012070 00000000000000/* A GNU-like . Copyright (C) 1995-1996, 2001-2020 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 the Free Software Foundation; either version 3, 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, see . */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined _GL_ALREADY_INCLUDING_STRING_H /* Special invocation convention: - On OS X/NetBSD we have a sequence of nested includes -> -> "string.h" In this situation system _chk variants due to -D_FORTIFY_SOURCE might be used after any replacements defined here. */ #@INCLUDE_NEXT@ @NEXT_STRING_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_STRING_H #define _GL_ALREADY_INCLUDING_STRING_H /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_STRING_H@ #undef _GL_ALREADY_INCLUDING_STRING_H #ifndef _@GUARD_PREFIX@_STRING_H #define _@GUARD_PREFIX@_STRING_H /* NetBSD 5.0 mis-defines NULL. */ #include /* MirBSD defines mbslen as a macro. */ #if @GNULIB_MBSLEN@ && defined __MirBSD__ # include #endif /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __pure__ was added in gcc 2.96. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) #else # define _GL_ATTRIBUTE_PURE /* empty */ #endif /* NetBSD 5.0 declares strsignal in , not in . */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_STRSIGNAL@ || defined GNULIB_POSIXCHECK) && defined __NetBSD__ \ && ! defined __GLIBC__ # include #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Clear a block of memory. The compiler will not delete a call to this function, even if the block is dead after the call. */ #if @GNULIB_EXPLICIT_BZERO@ # if ! @HAVE_EXPLICIT_BZERO@ _GL_FUNCDECL_SYS (explicit_bzero, void, (void *__dest, size_t __n) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (explicit_bzero, void, (void *__dest, size_t __n)); _GL_CXXALIASWARN (explicit_bzero); #elif defined GNULIB_POSIXCHECK # undef explicit_bzero # if HAVE_RAW_DECL_EXPLICIT_BZERO _GL_WARN_ON_USE (explicit_bzero, "explicit_bzero is unportable - " "use gnulib module explicit_bzero for portability"); # endif #endif /* Find the index of the least-significant set bit. */ #if @GNULIB_FFSL@ # if !@HAVE_FFSL@ _GL_FUNCDECL_SYS (ffsl, int, (long int i)); # endif _GL_CXXALIAS_SYS (ffsl, int, (long int i)); _GL_CXXALIASWARN (ffsl); #elif defined GNULIB_POSIXCHECK # undef ffsl # if HAVE_RAW_DECL_FFSL _GL_WARN_ON_USE (ffsl, "ffsl is not portable - use the ffsl module"); # endif #endif /* Find the index of the least-significant set bit. */ #if @GNULIB_FFSLL@ # if !@HAVE_FFSLL@ _GL_FUNCDECL_SYS (ffsll, int, (long long int i)); # endif _GL_CXXALIAS_SYS (ffsll, int, (long long int i)); _GL_CXXALIASWARN (ffsll); #elif defined GNULIB_POSIXCHECK # undef ffsll # if HAVE_RAW_DECL_FFSLL _GL_WARN_ON_USE (ffsll, "ffsll is not portable - use the ffsll module"); # endif #endif /* Return the first instance of C within N bytes of S, or NULL. */ #if @GNULIB_MEMCHR@ # if @REPLACE_MEMCHR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define memchr rpl_memchr # endif _GL_FUNCDECL_RPL (memchr, void *, (void const *__s, int __c, size_t __n) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (memchr, void *, (void const *__s, int __c, size_t __n)); # else # if ! @HAVE_MEMCHR@ _GL_FUNCDECL_SYS (memchr, void *, (void const *__s, int __c, size_t __n) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif /* On some systems, this function is defined as an overloaded function: extern "C" { const void * std::memchr (const void *, int, size_t); } extern "C++" { void * std::memchr (void *, int, size_t); } */ _GL_CXXALIAS_SYS_CAST2 (memchr, void *, (void const *__s, int __c, size_t __n), void const *, (void const *__s, int __c, size_t __n)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (memchr, void *, (void *__s, int __c, size_t __n)); _GL_CXXALIASWARN1 (memchr, void const *, (void const *__s, int __c, size_t __n)); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (memchr); # endif #elif defined GNULIB_POSIXCHECK # undef memchr /* Assume memchr is always declared. */ _GL_WARN_ON_USE (memchr, "memchr has platform-specific bugs - " "use gnulib module memchr for portability" ); #endif /* Return the first occurrence of NEEDLE in HAYSTACK. */ #if @GNULIB_MEMMEM@ # if @REPLACE_MEMMEM@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define memmem rpl_memmem # endif _GL_FUNCDECL_RPL (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 3))); _GL_CXXALIAS_RPL (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len)); # else # if ! @HAVE_DECL_MEMMEM@ _GL_FUNCDECL_SYS (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 3))); # endif _GL_CXXALIAS_SYS (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len)); # endif _GL_CXXALIASWARN (memmem); #elif defined GNULIB_POSIXCHECK # undef memmem # if HAVE_RAW_DECL_MEMMEM _GL_WARN_ON_USE (memmem, "memmem is unportable and often quadratic - " "use gnulib module memmem-simple for portability, " "and module memmem for speed" ); # endif #endif /* Copy N bytes of SRC to DEST, return pointer to bytes after the last written byte. */ #if @GNULIB_MEMPCPY@ # if ! @HAVE_MEMPCPY@ _GL_FUNCDECL_SYS (mempcpy, void *, (void *restrict __dest, void const *restrict __src, size_t __n) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (mempcpy, void *, (void *restrict __dest, void const *restrict __src, size_t __n)); _GL_CXXALIASWARN (mempcpy); #elif defined GNULIB_POSIXCHECK # undef mempcpy # if HAVE_RAW_DECL_MEMPCPY _GL_WARN_ON_USE (mempcpy, "mempcpy is unportable - " "use gnulib module mempcpy for portability"); # endif #endif /* Search backwards through a block for a byte (specified as an int). */ #if @GNULIB_MEMRCHR@ # if ! @HAVE_DECL_MEMRCHR@ _GL_FUNCDECL_SYS (memrchr, void *, (void const *, int, size_t) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const void * std::memrchr (const void *, int, size_t); } extern "C++" { void * std::memrchr (void *, int, size_t); } */ _GL_CXXALIAS_SYS_CAST2 (memrchr, void *, (void const *, int, size_t), void const *, (void const *, int, size_t)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (memrchr, void *, (void *, int, size_t)); _GL_CXXALIASWARN1 (memrchr, void const *, (void const *, int, size_t)); # else _GL_CXXALIASWARN (memrchr); # endif #elif defined GNULIB_POSIXCHECK # undef memrchr # if HAVE_RAW_DECL_MEMRCHR _GL_WARN_ON_USE (memrchr, "memrchr is unportable - " "use gnulib module memrchr for portability"); # endif #endif /* Find the first occurrence of C in S. More efficient than memchr(S,C,N), at the expense of undefined behavior if C does not occur within N bytes. */ #if @GNULIB_RAWMEMCHR@ # if ! @HAVE_RAWMEMCHR@ _GL_FUNCDECL_SYS (rawmemchr, void *, (void const *__s, int __c_in) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const void * std::rawmemchr (const void *, int); } extern "C++" { void * std::rawmemchr (void *, int); } */ _GL_CXXALIAS_SYS_CAST2 (rawmemchr, void *, (void const *__s, int __c_in), void const *, (void const *__s, int __c_in)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (rawmemchr, void *, (void *__s, int __c_in)); _GL_CXXALIASWARN1 (rawmemchr, void const *, (void const *__s, int __c_in)); # else _GL_CXXALIASWARN (rawmemchr); # endif #elif defined GNULIB_POSIXCHECK # undef rawmemchr # if HAVE_RAW_DECL_RAWMEMCHR _GL_WARN_ON_USE (rawmemchr, "rawmemchr is unportable - " "use gnulib module rawmemchr for portability"); # endif #endif /* Copy SRC to DST, returning the address of the terminating '\0' in DST. */ #if @GNULIB_STPCPY@ # if ! @HAVE_STPCPY@ _GL_FUNCDECL_SYS (stpcpy, char *, (char *restrict __dst, char const *restrict __src) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (stpcpy, char *, (char *restrict __dst, char const *restrict __src)); _GL_CXXALIASWARN (stpcpy); #elif defined GNULIB_POSIXCHECK # undef stpcpy # if HAVE_RAW_DECL_STPCPY _GL_WARN_ON_USE (stpcpy, "stpcpy is unportable - " "use gnulib module stpcpy for portability"); # endif #endif /* Copy no more than N bytes of SRC to DST, returning a pointer past the last non-NUL byte written into DST. */ #if @GNULIB_STPNCPY@ # if @REPLACE_STPNCPY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef stpncpy # define stpncpy rpl_stpncpy # endif _GL_FUNCDECL_RPL (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n)); # else # if ! @HAVE_STPNCPY@ _GL_FUNCDECL_SYS (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n)); # endif _GL_CXXALIASWARN (stpncpy); #elif defined GNULIB_POSIXCHECK # undef stpncpy # if HAVE_RAW_DECL_STPNCPY _GL_WARN_ON_USE (stpncpy, "stpncpy is unportable - " "use gnulib module stpncpy for portability"); # endif #endif #if defined GNULIB_POSIXCHECK /* strchr() does not work with multibyte strings if the locale encoding is GB18030 and the character to be searched is a digit. */ # undef strchr /* Assume strchr is always declared. */ _GL_WARN_ON_USE (strchr, "strchr cannot work correctly on character strings " "in some multibyte locales - " "use mbschr if you care about internationalization"); #endif /* Find the first occurrence of C in S or the final NUL byte. */ #if @GNULIB_STRCHRNUL@ # if @REPLACE_STRCHRNUL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strchrnul rpl_strchrnul # endif _GL_FUNCDECL_RPL (strchrnul, char *, (const char *__s, int __c_in) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strchrnul, char *, (const char *str, int ch)); # else # if ! @HAVE_STRCHRNUL@ _GL_FUNCDECL_SYS (strchrnul, char *, (char const *__s, int __c_in) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const char * std::strchrnul (const char *, int); } extern "C++" { char * std::strchrnul (char *, int); } */ _GL_CXXALIAS_SYS_CAST2 (strchrnul, char *, (char const *__s, int __c_in), char const *, (char const *__s, int __c_in)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (strchrnul, char *, (char *__s, int __c_in)); _GL_CXXALIASWARN1 (strchrnul, char const *, (char const *__s, int __c_in)); # else _GL_CXXALIASWARN (strchrnul); # endif #elif defined GNULIB_POSIXCHECK # undef strchrnul # if HAVE_RAW_DECL_STRCHRNUL _GL_WARN_ON_USE (strchrnul, "strchrnul is unportable - " "use gnulib module strchrnul for portability"); # endif #endif /* Duplicate S, returning an identical malloc'd string. */ #if @GNULIB_STRDUP@ # if @REPLACE_STRDUP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strdup # define strdup rpl_strdup # endif _GL_FUNCDECL_RPL (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strdup, char *, (char const *__s)); # else # if defined __cplusplus && defined GNULIB_NAMESPACE && defined strdup /* strdup exists as a function and as a macro. Get rid of the macro. */ # undef strdup # endif # if !(@HAVE_DECL_STRDUP@ || defined strdup) _GL_FUNCDECL_SYS (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strdup, char *, (char const *__s)); # endif _GL_CXXALIASWARN (strdup); #elif defined GNULIB_POSIXCHECK # undef strdup # if HAVE_RAW_DECL_STRDUP _GL_WARN_ON_USE (strdup, "strdup is unportable - " "use gnulib module strdup for portability"); # endif #endif /* Append no more than N characters from SRC onto DEST. */ #if @GNULIB_STRNCAT@ # if @REPLACE_STRNCAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strncat # define strncat rpl_strncat # endif _GL_FUNCDECL_RPL (strncat, char *, (char *dest, const char *src, size_t n) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (strncat, char *, (char *dest, const char *src, size_t n)); # else _GL_CXXALIAS_SYS (strncat, char *, (char *dest, const char *src, size_t n)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (strncat); # endif #elif defined GNULIB_POSIXCHECK # undef strncat # if HAVE_RAW_DECL_STRNCAT _GL_WARN_ON_USE (strncat, "strncat is unportable - " "use gnulib module strncat for portability"); # endif #endif /* Return a newly allocated copy of at most N bytes of STRING. */ #if @GNULIB_STRNDUP@ # if @REPLACE_STRNDUP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strndup # define strndup rpl_strndup # endif _GL_FUNCDECL_RPL (strndup, char *, (char const *__s, size_t __n) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strndup, char *, (char const *__s, size_t __n)); # else # if ! @HAVE_DECL_STRNDUP@ _GL_FUNCDECL_SYS (strndup, char *, (char const *__s, size_t __n) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strndup, char *, (char const *__s, size_t __n)); # endif _GL_CXXALIASWARN (strndup); #elif defined GNULIB_POSIXCHECK # undef strndup # if HAVE_RAW_DECL_STRNDUP _GL_WARN_ON_USE (strndup, "strndup is unportable - " "use gnulib module strndup for portability"); # endif #endif /* Find the length (number of bytes) of STRING, but scan at most MAXLEN bytes. If no '\0' terminator is found in that many bytes, return MAXLEN. */ #if @GNULIB_STRNLEN@ # if @REPLACE_STRNLEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strnlen # define strnlen rpl_strnlen # endif _GL_FUNCDECL_RPL (strnlen, size_t, (char const *__s, size_t __maxlen) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strnlen, size_t, (char const *__s, size_t __maxlen)); # else # if ! @HAVE_DECL_STRNLEN@ _GL_FUNCDECL_SYS (strnlen, size_t, (char const *__s, size_t __maxlen) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strnlen, size_t, (char const *__s, size_t __maxlen)); # endif _GL_CXXALIASWARN (strnlen); #elif defined GNULIB_POSIXCHECK # undef strnlen # if HAVE_RAW_DECL_STRNLEN _GL_WARN_ON_USE (strnlen, "strnlen is unportable - " "use gnulib module strnlen for portability"); # endif #endif #if defined GNULIB_POSIXCHECK /* strcspn() assumes the second argument is a list of single-byte characters. Even in this simple case, it does not work with multibyte strings if the locale encoding is GB18030 and one of the characters to be searched is a digit. */ # undef strcspn /* Assume strcspn is always declared. */ _GL_WARN_ON_USE (strcspn, "strcspn cannot work correctly on character strings " "in multibyte locales - " "use mbscspn if you care about internationalization"); #endif /* Find the first occurrence in S of any character in ACCEPT. */ #if @GNULIB_STRPBRK@ # if ! @HAVE_STRPBRK@ _GL_FUNCDECL_SYS (strpbrk, char *, (char const *__s, char const *__accept) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); # endif /* On some systems, this function is defined as an overloaded function: extern "C" { const char * strpbrk (const char *, const char *); } extern "C++" { char * strpbrk (char *, const char *); } */ _GL_CXXALIAS_SYS_CAST2 (strpbrk, char *, (char const *__s, char const *__accept), const char *, (char const *__s, char const *__accept)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (strpbrk, char *, (char *__s, char const *__accept)); _GL_CXXALIASWARN1 (strpbrk, char const *, (char const *__s, char const *__accept)); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (strpbrk); # endif # if defined GNULIB_POSIXCHECK /* strpbrk() assumes the second argument is a list of single-byte characters. Even in this simple case, it does not work with multibyte strings if the locale encoding is GB18030 and one of the characters to be searched is a digit. */ # undef strpbrk _GL_WARN_ON_USE (strpbrk, "strpbrk cannot work correctly on character strings " "in multibyte locales - " "use mbspbrk if you care about internationalization"); # endif #elif defined GNULIB_POSIXCHECK # undef strpbrk # if HAVE_RAW_DECL_STRPBRK _GL_WARN_ON_USE (strpbrk, "strpbrk is unportable - " "use gnulib module strpbrk for portability"); # endif #endif #if defined GNULIB_POSIXCHECK /* strspn() assumes the second argument is a list of single-byte characters. Even in this simple case, it cannot work with multibyte strings. */ # undef strspn /* Assume strspn is always declared. */ _GL_WARN_ON_USE (strspn, "strspn cannot work correctly on character strings " "in multibyte locales - " "use mbsspn if you care about internationalization"); #endif #if defined GNULIB_POSIXCHECK /* strrchr() does not work with multibyte strings if the locale encoding is GB18030 and the character to be searched is a digit. */ # undef strrchr /* Assume strrchr is always declared. */ _GL_WARN_ON_USE (strrchr, "strrchr cannot work correctly on character strings " "in some multibyte locales - " "use mbsrchr if you care about internationalization"); #endif /* Search the next delimiter (char listed in DELIM) starting at *STRINGP. If one is found, overwrite it with a NUL, and advance *STRINGP to point to the next char after it. Otherwise, set *STRINGP to NULL. If *STRINGP was already NULL, nothing happens. Return the old value of *STRINGP. This is a variant of strtok() that is multithread-safe and supports empty fields. Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. Caveat: It doesn't work with multibyte strings unless all of the delimiter characters are ASCII characters < 0x30. See also strtok_r(). */ #if @GNULIB_STRSEP@ # if ! @HAVE_STRSEP@ _GL_FUNCDECL_SYS (strsep, char *, (char **restrict __stringp, char const *restrict __delim) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (strsep, char *, (char **restrict __stringp, char const *restrict __delim)); _GL_CXXALIASWARN (strsep); # if defined GNULIB_POSIXCHECK # undef strsep _GL_WARN_ON_USE (strsep, "strsep cannot work correctly on character strings " "in multibyte locales - " "use mbssep if you care about internationalization"); # endif #elif defined GNULIB_POSIXCHECK # undef strsep # if HAVE_RAW_DECL_STRSEP _GL_WARN_ON_USE (strsep, "strsep is unportable - " "use gnulib module strsep for portability"); # endif #endif #if @GNULIB_STRSTR@ # if @REPLACE_STRSTR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strstr rpl_strstr # endif _GL_FUNCDECL_RPL (strstr, char *, (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (strstr, char *, (const char *haystack, const char *needle)); # else /* On some systems, this function is defined as an overloaded function: extern "C++" { const char * strstr (const char *, const char *); } extern "C++" { char * strstr (char *, const char *); } */ _GL_CXXALIAS_SYS_CAST2 (strstr, char *, (const char *haystack, const char *needle), const char *, (const char *haystack, const char *needle)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (strstr, char *, (char *haystack, const char *needle)); _GL_CXXALIASWARN1 (strstr, const char *, (const char *haystack, const char *needle)); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (strstr); # endif #elif defined GNULIB_POSIXCHECK /* strstr() does not work with multibyte strings if the locale encoding is different from UTF-8: POSIX says that it operates on "strings", and "string" in POSIX is defined as a sequence of bytes, not of characters. */ # undef strstr /* Assume strstr is always declared. */ _GL_WARN_ON_USE (strstr, "strstr is quadratic on many systems, and cannot " "work correctly on character strings in most " "multibyte locales - " "use mbsstr if you care about internationalization, " "or use strstr if you care about speed"); #endif /* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive comparison. */ #if @GNULIB_STRCASESTR@ # if @REPLACE_STRCASESTR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strcasestr rpl_strcasestr # endif _GL_FUNCDECL_RPL (strcasestr, char *, (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (strcasestr, char *, (const char *haystack, const char *needle)); # else # if ! @HAVE_STRCASESTR@ _GL_FUNCDECL_SYS (strcasestr, char *, (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const char * strcasestr (const char *, const char *); } extern "C++" { char * strcasestr (char *, const char *); } */ _GL_CXXALIAS_SYS_CAST2 (strcasestr, char *, (const char *haystack, const char *needle), const char *, (const char *haystack, const char *needle)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (strcasestr, char *, (char *haystack, const char *needle)); _GL_CXXALIASWARN1 (strcasestr, const char *, (const char *haystack, const char *needle)); # else _GL_CXXALIASWARN (strcasestr); # endif #elif defined GNULIB_POSIXCHECK /* strcasestr() does not work with multibyte strings: It is a glibc extension, and glibc implements it only for unibyte locales. */ # undef strcasestr # if HAVE_RAW_DECL_STRCASESTR _GL_WARN_ON_USE (strcasestr, "strcasestr does work correctly on character " "strings in multibyte locales - " "use mbscasestr if you care about " "internationalization, or use c-strcasestr if you want " "a locale independent function"); # endif #endif /* Parse S into tokens separated by characters in DELIM. If S is NULL, the saved pointer in SAVE_PTR is used as the next starting point. For example: char s[] = "-abc-=-def"; char *sp; x = strtok_r(s, "-", &sp); // x = "abc", sp = "=-def" x = strtok_r(NULL, "-=", &sp); // x = "def", sp = NULL x = strtok_r(NULL, "=", &sp); // x = NULL // s = "abc\0-def\0" This is a variant of strtok() that is multithread-safe. For the POSIX documentation for this function, see: https://pubs.opengroup.org/onlinepubs/9699919799/functions/strtok.html Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. Caveat: It doesn't work with multibyte strings unless all of the delimiter characters are ASCII characters < 0x30. See also strsep(). */ #if @GNULIB_STRTOK_R@ # if @REPLACE_STRTOK_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strtok_r # define strtok_r rpl_strtok_r # endif _GL_FUNCDECL_RPL (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr)); # else # if @UNDEFINE_STRTOK_R@ || defined GNULIB_POSIXCHECK # undef strtok_r # endif # if ! @HAVE_DECL_STRTOK_R@ _GL_FUNCDECL_SYS (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr) _GL_ARG_NONNULL ((2, 3))); # endif _GL_CXXALIAS_SYS (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr)); # endif _GL_CXXALIASWARN (strtok_r); # if defined GNULIB_POSIXCHECK _GL_WARN_ON_USE (strtok_r, "strtok_r cannot work correctly on character " "strings in multibyte locales - " "use mbstok_r if you care about internationalization"); # endif #elif defined GNULIB_POSIXCHECK # undef strtok_r # if HAVE_RAW_DECL_STRTOK_R _GL_WARN_ON_USE (strtok_r, "strtok_r is unportable - " "use gnulib module strtok_r for portability"); # endif #endif /* The following functions are not specified by POSIX. They are gnulib extensions. */ #if @GNULIB_MBSLEN@ /* Return the number of multibyte characters in the character string STRING. This considers multibyte characters, unlike strlen, which counts bytes. */ # ifdef __MirBSD__ /* MirBSD defines mbslen as a macro. Override it. */ # undef mbslen # endif # if @HAVE_MBSLEN@ /* AIX, OSF/1, MirBSD define mbslen already in libc. */ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbslen rpl_mbslen # endif _GL_FUNCDECL_RPL (mbslen, size_t, (const char *string) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mbslen, size_t, (const char *string)); # else _GL_FUNCDECL_SYS (mbslen, size_t, (const char *string) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_SYS (mbslen, size_t, (const char *string)); # endif _GL_CXXALIASWARN (mbslen); #endif #if @GNULIB_MBSNLEN@ /* Return the number of multibyte characters in the character string starting at STRING and ending at STRING + LEN. */ _GL_EXTERN_C size_t mbsnlen (const char *string, size_t len) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1)); #endif #if @GNULIB_MBSCHR@ /* Locate the first single-byte character C in the character string STRING, and return a pointer to it. Return NULL if C is not found in STRING. Unlike strchr(), this function works correctly in multibyte locales with encodings such as GB18030. */ # if defined __hpux # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbschr rpl_mbschr /* avoid collision with HP-UX function */ # endif _GL_FUNCDECL_RPL (mbschr, char *, (const char *string, int c) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mbschr, char *, (const char *string, int c)); # else _GL_FUNCDECL_SYS (mbschr, char *, (const char *string, int c) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_SYS (mbschr, char *, (const char *string, int c)); # endif _GL_CXXALIASWARN (mbschr); #endif #if @GNULIB_MBSRCHR@ /* Locate the last single-byte character C in the character string STRING, and return a pointer to it. Return NULL if C is not found in STRING. Unlike strrchr(), this function works correctly in multibyte locales with encodings such as GB18030. */ # if defined __hpux || defined __INTERIX # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbsrchr rpl_mbsrchr /* avoid collision with system function */ # endif _GL_FUNCDECL_RPL (mbsrchr, char *, (const char *string, int c) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mbsrchr, char *, (const char *string, int c)); # else _GL_FUNCDECL_SYS (mbsrchr, char *, (const char *string, int c) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_SYS (mbsrchr, char *, (const char *string, int c)); # endif _GL_CXXALIASWARN (mbsrchr); #endif #if @GNULIB_MBSSTR@ /* Find the first occurrence of the character string NEEDLE in the character string HAYSTACK. Return NULL if NEEDLE is not found in HAYSTACK. Unlike strstr(), this function works correctly in multibyte locales with encodings different from UTF-8. */ _GL_EXTERN_C char * mbsstr (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSCASECMP@ /* Compare the character strings S1 and S2, ignoring case, returning less than, equal to or greater than zero if S1 is lexicographically less than, equal to or greater than S2. Note: This function may, in multibyte locales, return 0 for strings of different lengths! Unlike strcasecmp(), this function works correctly in multibyte locales. */ _GL_EXTERN_C int mbscasecmp (const char *s1, const char *s2) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSNCASECMP@ /* Compare the initial segment of the character string S1 consisting of at most N characters with the initial segment of the character string S2 consisting of at most N characters, ignoring case, returning less than, equal to or greater than zero if the initial segment of S1 is lexicographically less than, equal to or greater than the initial segment of S2. Note: This function may, in multibyte locales, return 0 for initial segments of different lengths! Unlike strncasecmp(), this function works correctly in multibyte locales. But beware that N is not a byte count but a character count! */ _GL_EXTERN_C int mbsncasecmp (const char *s1, const char *s2, size_t n) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSPCASECMP@ /* Compare the initial segment of the character string STRING consisting of at most mbslen (PREFIX) characters with the character string PREFIX, ignoring case. If the two match, return a pointer to the first byte after this prefix in STRING. Otherwise, return NULL. Note: This function may, in multibyte locales, return non-NULL if STRING is of smaller length than PREFIX! Unlike strncasecmp(), this function works correctly in multibyte locales. */ _GL_EXTERN_C char * mbspcasecmp (const char *string, const char *prefix) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSCASESTR@ /* Find the first occurrence of the character string NEEDLE in the character string HAYSTACK, using case-insensitive comparison. Note: This function may, in multibyte locales, return success even if strlen (haystack) < strlen (needle) ! Unlike strcasestr(), this function works correctly in multibyte locales. */ _GL_EXTERN_C char * mbscasestr (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSCSPN@ /* Find the first occurrence in the character string STRING of any character in the character string ACCEPT. Return the number of bytes from the beginning of the string to this occurrence, or to the end of the string if none exists. Unlike strcspn(), this function works correctly in multibyte locales. */ _GL_EXTERN_C size_t mbscspn (const char *string, const char *accept) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSPBRK@ /* Find the first occurrence in the character string STRING of any character in the character string ACCEPT. Return the pointer to it, or NULL if none exists. Unlike strpbrk(), this function works correctly in multibyte locales. */ # if defined __hpux # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */ # endif _GL_FUNCDECL_RPL (mbspbrk, char *, (const char *string, const char *accept) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (mbspbrk, char *, (const char *string, const char *accept)); # else _GL_FUNCDECL_SYS (mbspbrk, char *, (const char *string, const char *accept) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_SYS (mbspbrk, char *, (const char *string, const char *accept)); # endif _GL_CXXALIASWARN (mbspbrk); #endif #if @GNULIB_MBSSPN@ /* Find the first occurrence in the character string STRING of any character not in the character string REJECT. Return the number of bytes from the beginning of the string to this occurrence, or to the end of the string if none exists. Unlike strspn(), this function works correctly in multibyte locales. */ _GL_EXTERN_C size_t mbsspn (const char *string, const char *reject) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSSEP@ /* Search the next delimiter (multibyte character listed in the character string DELIM) starting at the character string *STRINGP. If one is found, overwrite it with a NUL, and advance *STRINGP to point to the next multibyte character after it. Otherwise, set *STRINGP to NULL. If *STRINGP was already NULL, nothing happens. Return the old value of *STRINGP. This is a variant of mbstok_r() that supports empty fields. Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. See also mbstok_r(). */ _GL_EXTERN_C char * mbssep (char **stringp, const char *delim) _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSTOK_R@ /* Parse the character string STRING into tokens separated by characters in the character string DELIM. If STRING is NULL, the saved pointer in SAVE_PTR is used as the next starting point. For example: char s[] = "-abc-=-def"; char *sp; x = mbstok_r(s, "-", &sp); // x = "abc", sp = "=-def" x = mbstok_r(NULL, "-=", &sp); // x = "def", sp = NULL x = mbstok_r(NULL, "=", &sp); // x = NULL // s = "abc\0-def\0" Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. See also mbssep(). */ _GL_EXTERN_C char * mbstok_r (char *string, const char *delim, char **save_ptr) _GL_ARG_NONNULL ((2, 3)); #endif /* Map any int, typically from errno, into an error message. */ #if @GNULIB_STRERROR@ # if @REPLACE_STRERROR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strerror # define strerror rpl_strerror # endif _GL_FUNCDECL_RPL (strerror, char *, (int)); _GL_CXXALIAS_RPL (strerror, char *, (int)); # else _GL_CXXALIAS_SYS (strerror, char *, (int)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (strerror); # endif #elif defined GNULIB_POSIXCHECK # undef strerror /* Assume strerror is always declared. */ _GL_WARN_ON_USE (strerror, "strerror is unportable - " "use gnulib module strerror to guarantee non-NULL result"); #endif /* Map any int, typically from errno, into an error message. Multithread-safe. Uses the POSIX declaration, not the glibc declaration. */ #if @GNULIB_STRERROR_R@ # if @REPLACE_STRERROR_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strerror_r # define strerror_r rpl_strerror_r # endif _GL_FUNCDECL_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen)); # else # if !@HAVE_DECL_STRERROR_R@ _GL_FUNCDECL_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen)); # endif # if @HAVE_DECL_STRERROR_R@ _GL_CXXALIASWARN (strerror_r); # endif #elif defined GNULIB_POSIXCHECK # undef strerror_r # if HAVE_RAW_DECL_STRERROR_R _GL_WARN_ON_USE (strerror_r, "strerror_r is unportable - " "use gnulib module strerror_r-posix for portability"); # endif #endif #if @GNULIB_STRSIGNAL@ # if @REPLACE_STRSIGNAL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strsignal rpl_strsignal # endif _GL_FUNCDECL_RPL (strsignal, char *, (int __sig)); _GL_CXXALIAS_RPL (strsignal, char *, (int __sig)); # else # if ! @HAVE_DECL_STRSIGNAL@ _GL_FUNCDECL_SYS (strsignal, char *, (int __sig)); # endif /* Need to cast, because on Cygwin 1.5.x systems, the return type is 'const char *'. */ _GL_CXXALIAS_SYS_CAST (strsignal, char *, (int __sig)); # endif _GL_CXXALIASWARN (strsignal); #elif defined GNULIB_POSIXCHECK # undef strsignal # if HAVE_RAW_DECL_STRSIGNAL _GL_WARN_ON_USE (strsignal, "strsignal is unportable - " "use gnulib module strsignal for portability"); # endif #endif #if @GNULIB_STRVERSCMP@ # if !@HAVE_STRVERSCMP@ _GL_FUNCDECL_SYS (strverscmp, int, (const char *, const char *) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (strverscmp, int, (const char *, const char *)); _GL_CXXALIASWARN (strverscmp); #elif defined GNULIB_POSIXCHECK # undef strverscmp # if HAVE_RAW_DECL_STRVERSCMP _GL_WARN_ON_USE (strverscmp, "strverscmp is unportable - " "use gnulib module strverscmp for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_STRING_H */ #endif /* _@GUARD_PREFIX@_STRING_H */ #endif make-4.3/lib/strerror-override.c0000644000175000017500000002146613611136472013644 00000000000000/* strerror-override.c --- POSIX compatible system error routine Copyright (C) 2010-2020 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 the Free Software Foundation; either version 3 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, see . */ /* Written by Bruno Haible , 2010. */ #include #include "strerror-override.h" #include #if GNULIB_defined_EWINSOCK /* native Windows platforms */ # if HAVE_WINSOCK2_H # include # endif #endif /* If ERRNUM maps to an errno value defined by gnulib, return a string describing the error. Otherwise return NULL. */ const char * strerror_override (int errnum) { /* These error messages are taken from glibc/sysdeps/gnu/errlist.c. */ switch (errnum) { #if REPLACE_STRERROR_0 case 0: return "Success"; #endif #if GNULIB_defined_ESOCK /* native Windows platforms with older */ case EINPROGRESS: return "Operation now in progress"; case EALREADY: return "Operation already in progress"; case ENOTSOCK: return "Socket operation on non-socket"; case EDESTADDRREQ: return "Destination address required"; case EMSGSIZE: return "Message too long"; case EPROTOTYPE: return "Protocol wrong type for socket"; case ENOPROTOOPT: return "Protocol not available"; case EPROTONOSUPPORT: return "Protocol not supported"; case EOPNOTSUPP: return "Operation not supported"; case EAFNOSUPPORT: return "Address family not supported by protocol"; case EADDRINUSE: return "Address already in use"; case EADDRNOTAVAIL: return "Cannot assign requested address"; case ENETDOWN: return "Network is down"; case ENETUNREACH: return "Network is unreachable"; case ECONNRESET: return "Connection reset by peer"; case ENOBUFS: return "No buffer space available"; case EISCONN: return "Transport endpoint is already connected"; case ENOTCONN: return "Transport endpoint is not connected"; case ETIMEDOUT: return "Connection timed out"; case ECONNREFUSED: return "Connection refused"; case ELOOP: return "Too many levels of symbolic links"; case EHOSTUNREACH: return "No route to host"; case EWOULDBLOCK: return "Operation would block"; #endif #if GNULIB_defined_ESTREAMS /* native Windows platforms with older */ case ETXTBSY: return "Text file busy"; case ENODATA: return "No data available"; case ENOSR: return "Out of streams resources"; case ENOSTR: return "Device not a stream"; case ETIME: return "Timer expired"; case EOTHER: return "Other error"; #endif #if GNULIB_defined_EWINSOCK /* native Windows platforms */ case ESOCKTNOSUPPORT: return "Socket type not supported"; case EPFNOSUPPORT: return "Protocol family not supported"; case ESHUTDOWN: return "Cannot send after transport endpoint shutdown"; case ETOOMANYREFS: return "Too many references: cannot splice"; case EHOSTDOWN: return "Host is down"; case EPROCLIM: return "Too many processes"; case EUSERS: return "Too many users"; case EDQUOT: return "Disk quota exceeded"; case ESTALE: return "Stale NFS file handle"; case EREMOTE: return "Object is remote"; # if HAVE_WINSOCK2_H /* WSA_INVALID_HANDLE maps to EBADF */ /* WSA_NOT_ENOUGH_MEMORY maps to ENOMEM */ /* WSA_INVALID_PARAMETER maps to EINVAL */ case WSA_OPERATION_ABORTED: return "Overlapped operation aborted"; case WSA_IO_INCOMPLETE: return "Overlapped I/O event object not in signaled state"; case WSA_IO_PENDING: return "Overlapped operations will complete later"; /* WSAEINTR maps to EINTR */ /* WSAEBADF maps to EBADF */ /* WSAEACCES maps to EACCES */ /* WSAEFAULT maps to EFAULT */ /* WSAEINVAL maps to EINVAL */ /* WSAEMFILE maps to EMFILE */ /* WSAEWOULDBLOCK maps to EWOULDBLOCK */ /* WSAEINPROGRESS maps to EINPROGRESS */ /* WSAEALREADY maps to EALREADY */ /* WSAENOTSOCK maps to ENOTSOCK */ /* WSAEDESTADDRREQ maps to EDESTADDRREQ */ /* WSAEMSGSIZE maps to EMSGSIZE */ /* WSAEPROTOTYPE maps to EPROTOTYPE */ /* WSAENOPROTOOPT maps to ENOPROTOOPT */ /* WSAEPROTONOSUPPORT maps to EPROTONOSUPPORT */ /* WSAESOCKTNOSUPPORT is ESOCKTNOSUPPORT */ /* WSAEOPNOTSUPP maps to EOPNOTSUPP */ /* WSAEPFNOSUPPORT is EPFNOSUPPORT */ /* WSAEAFNOSUPPORT maps to EAFNOSUPPORT */ /* WSAEADDRINUSE maps to EADDRINUSE */ /* WSAEADDRNOTAVAIL maps to EADDRNOTAVAIL */ /* WSAENETDOWN maps to ENETDOWN */ /* WSAENETUNREACH maps to ENETUNREACH */ /* WSAENETRESET maps to ENETRESET */ /* WSAECONNABORTED maps to ECONNABORTED */ /* WSAECONNRESET maps to ECONNRESET */ /* WSAENOBUFS maps to ENOBUFS */ /* WSAEISCONN maps to EISCONN */ /* WSAENOTCONN maps to ENOTCONN */ /* WSAESHUTDOWN is ESHUTDOWN */ /* WSAETOOMANYREFS is ETOOMANYREFS */ /* WSAETIMEDOUT maps to ETIMEDOUT */ /* WSAECONNREFUSED maps to ECONNREFUSED */ /* WSAELOOP maps to ELOOP */ /* WSAENAMETOOLONG maps to ENAMETOOLONG */ /* WSAEHOSTDOWN is EHOSTDOWN */ /* WSAEHOSTUNREACH maps to EHOSTUNREACH */ /* WSAENOTEMPTY maps to ENOTEMPTY */ /* WSAEPROCLIM is EPROCLIM */ /* WSAEUSERS is EUSERS */ /* WSAEDQUOT is EDQUOT */ /* WSAESTALE is ESTALE */ /* WSAEREMOTE is EREMOTE */ case WSASYSNOTREADY: return "Network subsystem is unavailable"; case WSAVERNOTSUPPORTED: return "Winsock.dll version out of range"; case WSANOTINITIALISED: return "Successful WSAStartup not yet performed"; case WSAEDISCON: return "Graceful shutdown in progress"; case WSAENOMORE: case WSA_E_NO_MORE: return "No more results"; case WSAECANCELLED: case WSA_E_CANCELLED: return "Call was canceled"; case WSAEINVALIDPROCTABLE: return "Procedure call table is invalid"; case WSAEINVALIDPROVIDER: return "Service provider is invalid"; case WSAEPROVIDERFAILEDINIT: return "Service provider failed to initialize"; case WSASYSCALLFAILURE: return "System call failure"; case WSASERVICE_NOT_FOUND: return "Service not found"; case WSATYPE_NOT_FOUND: return "Class type not found"; case WSAEREFUSED: return "Database query was refused"; case WSAHOST_NOT_FOUND: return "Host not found"; case WSATRY_AGAIN: return "Nonauthoritative host not found"; case WSANO_RECOVERY: return "Nonrecoverable error"; case WSANO_DATA: return "Valid name, no data record of requested type"; /* WSA_QOS_* omitted */ # endif #endif #if GNULIB_defined_ENOMSG case ENOMSG: return "No message of desired type"; #endif #if GNULIB_defined_EIDRM case EIDRM: return "Identifier removed"; #endif #if GNULIB_defined_ENOLINK case ENOLINK: return "Link has been severed"; #endif #if GNULIB_defined_EPROTO case EPROTO: return "Protocol error"; #endif #if GNULIB_defined_EMULTIHOP case EMULTIHOP: return "Multihop attempted"; #endif #if GNULIB_defined_EBADMSG case EBADMSG: return "Bad message"; #endif #if GNULIB_defined_EOVERFLOW case EOVERFLOW: return "Value too large for defined data type"; #endif #if GNULIB_defined_ENOTSUP case ENOTSUP: return "Not supported"; #endif #if GNULIB_defined_ENETRESET case ENETRESET: return "Network dropped connection on reset"; #endif #if GNULIB_defined_ECONNABORTED case ECONNABORTED: return "Software caused connection abort"; #endif #if GNULIB_defined_ESTALE case ESTALE: return "Stale NFS file handle"; #endif #if GNULIB_defined_EDQUOT case EDQUOT: return "Disk quota exceeded"; #endif #if GNULIB_defined_ECANCELED case ECANCELED: return "Operation canceled"; #endif #if GNULIB_defined_EOWNERDEAD case EOWNERDEAD: return "Owner died"; #endif #if GNULIB_defined_ENOTRECOVERABLE case ENOTRECOVERABLE: return "State not recoverable"; #endif #if GNULIB_defined_EILSEQ case EILSEQ: return "Invalid or incomplete multibyte or wide character"; #endif default: return NULL; } } make-4.3/lib/unistd.c0000644000175000017500000000014713611136472011444 00000000000000#include #define _GL_UNISTD_INLINE _GL_EXTERN_INLINE #include "unistd.h" typedef int dummy; make-4.3/lib/msvc-nothrow.c0000644000175000017500000000251513611136472012605 00000000000000/* Wrappers that don't throw invalid parameter notifications with MSVC runtime libraries. Copyright (C) 2011-2020 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 the Free Software Foundation; either version 3, 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, see . */ #include /* Specification. */ #include "msvc-nothrow.h" /* Get declarations of the native Windows API functions. */ #define WIN32_LEAN_AND_MEAN #include #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif #undef _get_osfhandle #if HAVE_MSVC_INVALID_PARAMETER_HANDLER intptr_t _gl_nothrow_get_osfhandle (int fd) { intptr_t result; TRY_MSVC_INVAL { result = _get_osfhandle (fd); } CATCH_MSVC_INVAL { result = (intptr_t) INVALID_HANDLE_VALUE; } DONE_MSVC_INVAL; return result; } #endif make-4.3/lib/arg-nonnull.h0000644000175000017500000000230113611136471012370 00000000000000/* A C macro for declaring that specific arguments must not be NULL. Copyright (C) 2009-2020 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 the Free Software Foundation; either version 3 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, see . */ /* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools that the values passed as arguments n, ..., m must be non-NULL pointers. n = 1 stands for the first argument, n = 2 for the second argument etc. */ #ifndef _GL_ARG_NONNULL # if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3 # define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) # else # define _GL_ARG_NONNULL(params) # endif #endif make-4.3/lib/error.h0000644000175000017500000000553313611136471011277 00000000000000/* Declaration for error-reporting function Copyright (C) 1995-1997, 2003, 2006, 2008-2020 Free Software Foundation, Inc. This file is part of the GNU C Library. 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 3 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, see . */ #ifndef _ERROR_H #define _ERROR_H 1 /* The __attribute__ feature is available in gcc versions 2.5 and later. The __-protected variants of the attributes 'format' and 'printf' are accepted by gcc versions 2.6.4 (effectively 2.7) and later. We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because gnulib and libintl do '#define printf __printf__' when they override the 'printf' function. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) # define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) #else # define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ #endif /* On mingw, the flavor of printf depends on whether the extensions module * is in use; the check for determines the witness macro. */ #ifndef _GL_ATTRIBUTE_SPEC_PRINTF # if GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU # define _GL_ATTRIBUTE_SPEC_PRINTF __gnu_printf__ # else # define _GL_ATTRIBUTE_SPEC_PRINTF __printf__ # endif #endif #ifdef __cplusplus extern "C" { #endif /* Print a message with 'fprintf (stderr, FORMAT, ...)'; if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM). If STATUS is nonzero, terminate the program with 'exit (STATUS)'. */ extern void error (int __status, int __errnum, const char *__format, ...) _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF, 3, 4)); extern void error_at_line (int __status, int __errnum, const char *__fname, unsigned int __lineno, const char *__format, ...) _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF, 5, 6)); /* If NULL, error will flush stdout, then print on stderr the program name, a colon and a space. Otherwise, error will call this function without parameters instead. */ extern void (*error_print_progname) (void); /* This variable is incremented each time 'error' is called. */ extern unsigned int error_message_count; /* Sometimes we want to have at most one error per line. This variable controls whether this mode is selected or not. */ extern int error_one_per_line; #ifdef __cplusplus } #endif #endif /* error.h */ make-4.3/lib/sys_types.in.h0000644000175000017500000000613013611136472012610 00000000000000/* Provide a more complete sys/types.h. Copyright (C) 2011-2020 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 the Free Software Foundation; either version 3, 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, see . */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined _WIN32 && !defined __CYGWIN__ \ && (defined __need_off_t || defined __need___off64_t \ || defined __need_ssize_t || defined __need_time_t) /* Special invocation convention inside mingw header files. */ #@INCLUDE_NEXT@ @NEXT_SYS_TYPES_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_SYS_TYPES_H /* The include_next requires a split double-inclusion guard. */ # define _GL_INCLUDING_SYS_TYPES_H #@INCLUDE_NEXT@ @NEXT_SYS_TYPES_H@ # undef _GL_INCLUDING_SYS_TYPES_H #ifndef _@GUARD_PREFIX@_SYS_TYPES_H #define _@GUARD_PREFIX@_SYS_TYPES_H /* Override off_t if Large File Support is requested on native Windows. */ #if @WINDOWS_64_BIT_OFF_T@ /* Same as int64_t in . */ # if defined _MSC_VER # define off_t __int64 # else # define off_t long long int # endif /* Indicator, for gnulib internal purposes. */ # define _GL_WINDOWS_64_BIT_OFF_T 1 #endif /* Override dev_t and ino_t if distinguishable inodes support is requested on native Windows. */ #if @WINDOWS_STAT_INODES@ # if @WINDOWS_STAT_INODES@ == 2 /* Experimental, not useful in Windows 10. */ /* Define dev_t to a 64-bit type. */ # if !defined GNULIB_defined_dev_t typedef unsigned long long int rpl_dev_t; # undef dev_t # define dev_t rpl_dev_t # define GNULIB_defined_dev_t 1 # endif /* Define ino_t to a 128-bit type. */ # if !defined GNULIB_defined_ino_t /* MSVC does not have a 128-bit integer type. GCC has a 128-bit integer type __int128, but only on 64-bit targets. */ typedef struct { unsigned long long int _gl_ino[2]; } rpl_ino_t; # undef ino_t # define ino_t rpl_ino_t # define GNULIB_defined_ino_t 1 # endif # else /* @WINDOWS_STAT_INODES@ == 1 */ /* Define ino_t to a 64-bit type. */ # if !defined GNULIB_defined_ino_t typedef unsigned long long int rpl_ino_t; # undef ino_t # define ino_t rpl_ino_t # define GNULIB_defined_ino_t 1 # endif # endif /* Indicator, for gnulib internal purposes. */ # define _GL_WINDOWS_STAT_INODES @WINDOWS_STAT_INODES@ #endif /* MSVC 9 defines size_t in , not in . */ /* But avoid namespace pollution on glibc systems. */ #if (defined _WIN32 && ! defined __CYGWIN__) && ! defined __GLIBC__ # include #endif #endif /* _@GUARD_PREFIX@_SYS_TYPES_H */ #endif /* _@GUARD_PREFIX@_SYS_TYPES_H */ #endif /* __need_XXX */ make-4.3/lib/concat-filename.h0000644000175000017500000000300513611136471013163 00000000000000/* Construct a full filename from a directory and a relative filename. Copyright (C) 2001-2004, 2007-2020 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 the Free Software Foundation; either version 3 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, see . */ #ifndef _CONCAT_FILENAME_H #define _CONCAT_FILENAME_H #ifdef __cplusplus extern "C" { #endif /* Concatenate a directory filename, a relative filename and an optional suffix. Return a freshly allocated filename. Return NULL and set errno upon memory allocation failure. */ extern char *concatenated_filename (const char *directory, const char *filename, const char *suffix); /* Concatenate a directory filename, a relative filename and an optional suffix. Return a freshly allocated filename. */ extern char *xconcatenated_filename (const char *directory, const char *filename, const char *suffix); #ifdef __cplusplus } #endif #endif /* _CONCAT_FILENAME_H */ make-4.3/lib/stddef.in.h0000644000175000017500000001011113611136472012011 00000000000000/* A substitute for POSIX 2008 , for platforms that have issues. Copyright (C) 2009-2020 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 the Free Software Foundation; either version 3, 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, see . */ /* Written by Eric Blake. */ /* * POSIX 2008 for platforms that have issues. * */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_wchar_t || defined __need_size_t \ || defined __need_ptrdiff_t || defined __need_NULL \ || defined __need_wint_t /* Special invocation convention inside gcc header files. In particular, gcc provides a version of that blindly redefines NULL even when __need_wint_t was defined, even though wint_t is not normally provided by . Hence, we must remember if special invocation has ever been used to obtain wint_t, in which case we need to clean up NULL yet again. */ # if !(defined _@GUARD_PREFIX@_STDDEF_H && defined _GL_STDDEF_WINT_T) # ifdef __need_wint_t # define _GL_STDDEF_WINT_T # endif # @INCLUDE_NEXT@ @NEXT_STDDEF_H@ # endif #else /* Normal invocation convention. */ # ifndef _@GUARD_PREFIX@_STDDEF_H /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_STDDEF_H@ /* On NetBSD 5.0, the definition of NULL lacks proper parentheses. */ # if (@REPLACE_NULL@ \ && (!defined _@GUARD_PREFIX@_STDDEF_H || defined _GL_STDDEF_WINT_T)) # undef NULL # ifdef __cplusplus /* ISO C++ says that the macro NULL must expand to an integer constant expression, hence '((void *) 0)' is not allowed in C++. */ # if __GNUG__ >= 3 /* GNU C++ has a __null macro that behaves like an integer ('int' or 'long') but has the same size as a pointer. Use that, to avoid warnings. */ # define NULL __null # else # define NULL 0L # endif # else # define NULL ((void *) 0) # endif # endif # ifndef _@GUARD_PREFIX@_STDDEF_H # define _@GUARD_PREFIX@_STDDEF_H /* Some platforms lack wchar_t. */ #if !@HAVE_WCHAR_T@ # define wchar_t int #endif /* Some platforms lack max_align_t. The check for _GCC_MAX_ALIGN_T is a hack in case the configure-time test was done with g++ even though we are currently compiling with gcc. On MSVC, max_align_t is defined only in C++ mode, after was included. Its definition is good since it has an alignment of 8 (on x86 and x86_64). */ #if defined _MSC_VER && defined __cplusplus # include #else # if ! (@HAVE_MAX_ALIGN_T@ || defined _GCC_MAX_ALIGN_T) # if !GNULIB_defined_max_align_t /* On the x86, the maximum storage alignment of double, long, etc. is 4, but GCC's C11 ABI for x86 says that max_align_t has an alignment of 8, and the C11 standard allows this. Work around this problem by using __alignof__ (which returns 8 for double) rather than _Alignof (which returns 4), and align each union member accordingly. */ # ifdef __GNUC__ # define _GL_STDDEF_ALIGNAS(type) \ __attribute__ ((__aligned__ (__alignof__ (type)))) # else # define _GL_STDDEF_ALIGNAS(type) /* */ # endif typedef union { char *__p _GL_STDDEF_ALIGNAS (char *); double __d _GL_STDDEF_ALIGNAS (double); long double __ld _GL_STDDEF_ALIGNAS (long double); long int __i _GL_STDDEF_ALIGNAS (long int); } rpl_max_align_t; # define max_align_t rpl_max_align_t # define GNULIB_defined_max_align_t 1 # endif # endif #endif # endif /* _@GUARD_PREFIX@_STDDEF_H */ # endif /* _@GUARD_PREFIX@_STDDEF_H */ #endif /* __need_XXX */ make-4.3/lib/intprops.h0000644000175000017500000006416013611136471012025 00000000000000/* intprops.h -- properties of integer types Copyright (C) 2001-2020 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 the Free Software Foundation; either version 3 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, see . */ /* Written by Paul Eggert. */ #ifndef _GL_INTPROPS_H #define _GL_INTPROPS_H #include /* Return a value with the common real type of E and V and the value of V. Do not evaluate E. */ #define _GL_INT_CONVERT(e, v) ((1 ? 0 : (e)) + (v)) /* Act like _GL_INT_CONVERT (E, -V) but work around a bug in IRIX 6.5 cc; see . */ #define _GL_INT_NEGATE_CONVERT(e, v) ((1 ? 0 : (e)) - (v)) /* The extra casts in the following macros work around compiler bugs, e.g., in Cray C 5.0.3.0. */ /* True if the arithmetic type T is an integer type. bool counts as an integer. */ #define TYPE_IS_INTEGER(t) ((t) 1.5 == 1) /* True if the real type T is signed. */ #define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) /* Return 1 if the real expression E, after promotion, has a signed or floating type. Do not evaluate E. */ #define EXPR_SIGNED(e) (_GL_INT_NEGATE_CONVERT (e, 1) < 0) /* Minimum and maximum values for integer types and expressions. */ /* The width in bits of the integer type or expression T. Do not evaluate T. Padding bits are not supported; this is checked at compile-time below. */ #define TYPE_WIDTH(t) (sizeof (t) * CHAR_BIT) /* The maximum and minimum values for the integer type T. */ #define TYPE_MINIMUM(t) ((t) ~ TYPE_MAXIMUM (t)) #define TYPE_MAXIMUM(t) \ ((t) (! TYPE_SIGNED (t) \ ? (t) -1 \ : ((((t) 1 << (TYPE_WIDTH (t) - 2)) - 1) * 2 + 1))) /* The maximum and minimum values for the type of the expression E, after integer promotion. E is not evaluated. */ #define _GL_INT_MINIMUM(e) \ (EXPR_SIGNED (e) \ ? ~ _GL_SIGNED_INT_MAXIMUM (e) \ : _GL_INT_CONVERT (e, 0)) #define _GL_INT_MAXIMUM(e) \ (EXPR_SIGNED (e) \ ? _GL_SIGNED_INT_MAXIMUM (e) \ : _GL_INT_NEGATE_CONVERT (e, 1)) #define _GL_SIGNED_INT_MAXIMUM(e) \ (((_GL_INT_CONVERT (e, 1) << (TYPE_WIDTH ((e) + 0) - 2)) - 1) * 2 + 1) /* Work around OpenVMS incompatibility with C99. */ #if !defined LLONG_MAX && defined __INT64_MAX # define LLONG_MAX __INT64_MAX # define LLONG_MIN __INT64_MIN #endif /* This include file assumes that signed types are two's complement without padding bits; the above macros have undefined behavior otherwise. If this is a problem for you, please let us know how to fix it for your host. This assumption is tested by the intprops-tests module. */ /* Does the __typeof__ keyword work? This could be done by 'configure', but for now it's easier to do it by hand. */ #if (2 <= __GNUC__ \ || (1210 <= __IBMC__ && defined __IBM__TYPEOF__) \ || (0x5110 <= __SUNPRO_C && !__STDC__)) # define _GL_HAVE___TYPEOF__ 1 #else # define _GL_HAVE___TYPEOF__ 0 #endif /* Return 1 if the integer type or expression T might be signed. Return 0 if it is definitely unsigned. This macro does not evaluate its argument, and expands to an integer constant expression. */ #if _GL_HAVE___TYPEOF__ # define _GL_SIGNED_TYPE_OR_EXPR(t) TYPE_SIGNED (__typeof__ (t)) #else # define _GL_SIGNED_TYPE_OR_EXPR(t) 1 #endif /* Bound on length of the string representing an unsigned integer value representable in B bits. log10 (2.0) < 146/485. The smallest value of B where this bound is not tight is 2621. */ #define INT_BITS_STRLEN_BOUND(b) (((b) * 146 + 484) / 485) /* Bound on length of the string representing an integer type or expression T. Subtract 1 for the sign bit if T is signed, and then add 1 more for a minus sign if needed. Because _GL_SIGNED_TYPE_OR_EXPR sometimes returns 1 when its argument is unsigned, this macro may overestimate the true bound by one byte when applied to unsigned types of size 2, 4, 16, ... bytes. */ #define INT_STRLEN_BOUND(t) \ (INT_BITS_STRLEN_BOUND (TYPE_WIDTH (t) - _GL_SIGNED_TYPE_OR_EXPR (t)) \ + _GL_SIGNED_TYPE_OR_EXPR (t)) /* Bound on buffer size needed to represent an integer type or expression T, including the terminating null. */ #define INT_BUFSIZE_BOUND(t) (INT_STRLEN_BOUND (t) + 1) /* Range overflow checks. The INT__RANGE_OVERFLOW macros return 1 if the corresponding C operators might not yield numerically correct answers due to arithmetic overflow. They do not rely on undefined or implementation-defined behavior. Their implementations are simple and straightforward, but they are a bit harder to use than the INT__OVERFLOW macros described below. Example usage: long int i = ...; long int j = ...; if (INT_MULTIPLY_RANGE_OVERFLOW (i, j, LONG_MIN, LONG_MAX)) printf ("multiply would overflow"); else printf ("product is %ld", i * j); Restrictions on *_RANGE_OVERFLOW macros: These macros do not check for all possible numerical problems or undefined or unspecified behavior: they do not check for division by zero, for bad shift counts, or for shifting negative numbers. These macros may evaluate their arguments zero or multiple times, so the arguments should not have side effects. The arithmetic arguments (including the MIN and MAX arguments) must be of the same integer type after the usual arithmetic conversions, and the type must have minimum value MIN and maximum MAX. Unsigned types should use a zero MIN of the proper type. These macros are tuned for constant MIN and MAX. For commutative operations such as A + B, they are also tuned for constant B. */ /* Return 1 if A + B would overflow in [MIN,MAX] arithmetic. See above for restrictions. */ #define INT_ADD_RANGE_OVERFLOW(a, b, min, max) \ ((b) < 0 \ ? (a) < (min) - (b) \ : (max) - (b) < (a)) /* Return 1 if A - B would overflow in [MIN,MAX] arithmetic. See above for restrictions. */ #define INT_SUBTRACT_RANGE_OVERFLOW(a, b, min, max) \ ((b) < 0 \ ? (max) + (b) < (a) \ : (a) < (min) + (b)) /* Return 1 if - A would overflow in [MIN,MAX] arithmetic. See above for restrictions. */ #define INT_NEGATE_RANGE_OVERFLOW(a, min, max) \ ((min) < 0 \ ? (a) < - (max) \ : 0 < (a)) /* Return 1 if A * B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Avoid && and || as they tickle bugs in Sun C 5.11 2010/08/13 and other compilers; see . */ #define INT_MULTIPLY_RANGE_OVERFLOW(a, b, min, max) \ ((b) < 0 \ ? ((a) < 0 \ ? (a) < (max) / (b) \ : (b) == -1 \ ? 0 \ : (min) / (b) < (a)) \ : (b) == 0 \ ? 0 \ : ((a) < 0 \ ? (a) < (min) / (b) \ : (max) / (b) < (a))) /* Return 1 if A / B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Do not check for division by zero. */ #define INT_DIVIDE_RANGE_OVERFLOW(a, b, min, max) \ ((min) < 0 && (b) == -1 && (a) < - (max)) /* Return 1 if A % B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Do not check for division by zero. Mathematically, % should never overflow, but on x86-like hosts INT_MIN % -1 traps, and the C standard permits this, so treat this as an overflow too. */ #define INT_REMAINDER_RANGE_OVERFLOW(a, b, min, max) \ INT_DIVIDE_RANGE_OVERFLOW (a, b, min, max) /* Return 1 if A << B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Here, MIN and MAX are for A only, and B need not be of the same type as the other arguments. The C standard says that behavior is undefined for shifts unless 0 <= B < wordwidth, and that when A is negative then A << B has undefined behavior and A >> B has implementation-defined behavior, but do not check these other restrictions. */ #define INT_LEFT_SHIFT_RANGE_OVERFLOW(a, b, min, max) \ ((a) < 0 \ ? (a) < (min) >> (b) \ : (max) >> (b) < (a)) /* True if __builtin_add_overflow (A, B, P) and __builtin_sub_overflow (A, B, P) work when P is non-null. */ #if 5 <= __GNUC__ && !defined __ICC # define _GL_HAS_BUILTIN_ADD_OVERFLOW 1 #elif defined __has_builtin # define _GL_HAS_BUILTIN_ADD_OVERFLOW __has_builtin (__builtin_add_overflow) #else # define _GL_HAS_BUILTIN_ADD_OVERFLOW 0 #endif /* True if __builtin_mul_overflow (A, B, P) works when P is non-null. */ #ifdef __clang__ /* Work around Clang bug . */ # define _GL_HAS_BUILTIN_MUL_OVERFLOW 0 #else # define _GL_HAS_BUILTIN_MUL_OVERFLOW _GL_HAS_BUILTIN_ADD_OVERFLOW #endif /* True if __builtin_add_overflow_p (A, B, C) works, and similarly for __builtin_mul_overflow_p and __builtin_mul_overflow_p. */ #define _GL_HAS_BUILTIN_OVERFLOW_P (7 <= __GNUC__) /* The _GL*_OVERFLOW macros have the same restrictions as the *_RANGE_OVERFLOW macros, except that they do not assume that operands (e.g., A and B) have the same type as MIN and MAX. Instead, they assume that the result (e.g., A + B) has that type. */ #if _GL_HAS_BUILTIN_OVERFLOW_P # define _GL_ADD_OVERFLOW(a, b, min, max) \ __builtin_add_overflow_p (a, b, (__typeof__ ((a) + (b))) 0) # define _GL_SUBTRACT_OVERFLOW(a, b, min, max) \ __builtin_sub_overflow_p (a, b, (__typeof__ ((a) - (b))) 0) # define _GL_MULTIPLY_OVERFLOW(a, b, min, max) \ __builtin_mul_overflow_p (a, b, (__typeof__ ((a) * (b))) 0) #else # define _GL_ADD_OVERFLOW(a, b, min, max) \ ((min) < 0 ? INT_ADD_RANGE_OVERFLOW (a, b, min, max) \ : (a) < 0 ? (b) <= (a) + (b) \ : (b) < 0 ? (a) <= (a) + (b) \ : (a) + (b) < (b)) # define _GL_SUBTRACT_OVERFLOW(a, b, min, max) \ ((min) < 0 ? INT_SUBTRACT_RANGE_OVERFLOW (a, b, min, max) \ : (a) < 0 ? 1 \ : (b) < 0 ? (a) - (b) <= (a) \ : (a) < (b)) # define _GL_MULTIPLY_OVERFLOW(a, b, min, max) \ (((min) == 0 && (((a) < 0 && 0 < (b)) || ((b) < 0 && 0 < (a)))) \ || INT_MULTIPLY_RANGE_OVERFLOW (a, b, min, max)) #endif #define _GL_DIVIDE_OVERFLOW(a, b, min, max) \ ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \ : (a) < 0 ? (b) <= (a) + (b) - 1 \ : (b) < 0 && (a) + (b) <= (a)) #define _GL_REMAINDER_OVERFLOW(a, b, min, max) \ ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \ : (a) < 0 ? (a) % (b) != ((max) - (b) + 1) % (b) \ : (b) < 0 && ! _GL_UNSIGNED_NEG_MULTIPLE (a, b, max)) /* Return a nonzero value if A is a mathematical multiple of B, where A is unsigned, B is negative, and MAX is the maximum value of A's type. A's type must be the same as (A % B)'s type. Normally (A % -B == 0) suffices, but things get tricky if -B would overflow. */ #define _GL_UNSIGNED_NEG_MULTIPLE(a, b, max) \ (((b) < -_GL_SIGNED_INT_MAXIMUM (b) \ ? (_GL_SIGNED_INT_MAXIMUM (b) == (max) \ ? (a) \ : (a) % (_GL_INT_CONVERT (a, _GL_SIGNED_INT_MAXIMUM (b)) + 1)) \ : (a) % - (b)) \ == 0) /* Check for integer overflow, and report low order bits of answer. The INT__OVERFLOW macros return 1 if the corresponding C operators might not yield numerically correct answers due to arithmetic overflow. The INT__WRAPV macros compute the low-order bits of the sum, difference, and product of two C integers, and return 1 if these low-order bits are not numerically correct. These macros work correctly on all known practical hosts, and do not rely on undefined behavior due to signed arithmetic overflow. Example usage, assuming A and B are long int: if (INT_MULTIPLY_OVERFLOW (a, b)) printf ("result would overflow\n"); else printf ("result is %ld (no overflow)\n", a * b); Example usage with WRAPV flavor: long int result; bool overflow = INT_MULTIPLY_WRAPV (a, b, &result); printf ("result is %ld (%s)\n", result, overflow ? "after overflow" : "no overflow"); Restrictions on these macros: These macros do not check for all possible numerical problems or undefined or unspecified behavior: they do not check for division by zero, for bad shift counts, or for shifting negative numbers. These macros may evaluate their arguments zero or multiple times, so the arguments should not have side effects. The WRAPV macros are not constant expressions. They support only +, binary -, and *. Because the WRAPV macros convert the result, they report overflow in different circumstances than the OVERFLOW macros do. These macros are tuned for their last input argument being a constant. Return 1 if the integer expressions A * B, A - B, -A, A * B, A / B, A % B, and A << B would overflow, respectively. */ #define INT_ADD_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_ADD_OVERFLOW) #define INT_SUBTRACT_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_SUBTRACT_OVERFLOW) #if _GL_HAS_BUILTIN_OVERFLOW_P # define INT_NEGATE_OVERFLOW(a) INT_SUBTRACT_OVERFLOW (0, a) #else # define INT_NEGATE_OVERFLOW(a) \ INT_NEGATE_RANGE_OVERFLOW (a, _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a)) #endif #define INT_MULTIPLY_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_MULTIPLY_OVERFLOW) #define INT_DIVIDE_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_DIVIDE_OVERFLOW) #define INT_REMAINDER_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_REMAINDER_OVERFLOW) #define INT_LEFT_SHIFT_OVERFLOW(a, b) \ INT_LEFT_SHIFT_RANGE_OVERFLOW (a, b, \ _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a)) /* Return 1 if the expression A B would overflow, where OP_RESULT_OVERFLOW (A, B, MIN, MAX) does the actual test, assuming MIN and MAX are the minimum and maximum for the result type. Arguments should be free of side effects. */ #define _GL_BINARY_OP_OVERFLOW(a, b, op_result_overflow) \ op_result_overflow (a, b, \ _GL_INT_MINIMUM (_GL_INT_CONVERT (a, b)), \ _GL_INT_MAXIMUM (_GL_INT_CONVERT (a, b))) /* Store the low-order bits of A + B, A - B, A * B, respectively, into *R. Return 1 if the result overflows. See above for restrictions. */ #if _GL_HAS_BUILTIN_ADD_OVERFLOW # define INT_ADD_WRAPV(a, b, r) __builtin_add_overflow (a, b, r) # define INT_SUBTRACT_WRAPV(a, b, r) __builtin_sub_overflow (a, b, r) #else # define INT_ADD_WRAPV(a, b, r) \ _GL_INT_OP_WRAPV (a, b, r, +, _GL_INT_ADD_RANGE_OVERFLOW) # define INT_SUBTRACT_WRAPV(a, b, r) \ _GL_INT_OP_WRAPV (a, b, r, -, _GL_INT_SUBTRACT_RANGE_OVERFLOW) #endif #if _GL_HAS_BUILTIN_MUL_OVERFLOW # if (9 < __GNUC__ + (3 <= __GNUC_MINOR__) \ || (__GNUC__ == 8 && 4 <= __GNUC_MINOR__)) # define INT_MULTIPLY_WRAPV(a, b, r) __builtin_mul_overflow (a, b, r) # else /* Work around GCC bug 91450. */ # define INT_MULTIPLY_WRAPV(a, b, r) \ ((!_GL_SIGNED_TYPE_OR_EXPR (*(r)) && EXPR_SIGNED (a) && EXPR_SIGNED (b) \ && _GL_INT_MULTIPLY_RANGE_OVERFLOW (a, b, 0, (__typeof__ (*(r))) -1)) \ ? ((void) __builtin_mul_overflow (a, b, r), 1) \ : __builtin_mul_overflow (a, b, r)) # endif #else # define INT_MULTIPLY_WRAPV(a, b, r) \ _GL_INT_OP_WRAPV (a, b, r, *, _GL_INT_MULTIPLY_RANGE_OVERFLOW) #endif /* Nonzero if this compiler has GCC bug 68193 or Clang bug 25390. See: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68193 https://llvm.org/bugs/show_bug.cgi?id=25390 For now, assume all versions of GCC-like compilers generate bogus warnings for _Generic. This matters only for compilers that lack relevant builtins. */ #if __GNUC__ # define _GL__GENERIC_BOGUS 1 #else # define _GL__GENERIC_BOGUS 0 #endif /* Store the low-order bits of A B into *R, where OP specifies the operation and OVERFLOW the overflow predicate. Return 1 if the result overflows. See above for restrictions. */ #if 201112 <= __STDC_VERSION__ && !_GL__GENERIC_BOGUS # define _GL_INT_OP_WRAPV(a, b, r, op, overflow) \ (_Generic \ (*(r), \ signed char: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ signed char, SCHAR_MIN, SCHAR_MAX), \ unsigned char: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ unsigned char, 0, UCHAR_MAX), \ short int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ short int, SHRT_MIN, SHRT_MAX), \ unsigned short int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ unsigned short int, 0, USHRT_MAX), \ int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ int, INT_MIN, INT_MAX), \ unsigned int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ unsigned int, 0, UINT_MAX), \ long int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ long int, LONG_MIN, LONG_MAX), \ unsigned long int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ unsigned long int, 0, ULONG_MAX), \ long long int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ long long int, LLONG_MIN, LLONG_MAX), \ unsigned long long int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ unsigned long long int, 0, ULLONG_MAX))) #else /* Store the low-order bits of A B into *R, where OP specifies the operation and OVERFLOW the overflow predicate. If *R is signed, its type is ST with bounds SMIN..SMAX; otherwise its type is UT with bounds U..UMAX. ST and UT are narrower than int. Return 1 if the result overflows. See above for restrictions. */ # if _GL_HAVE___TYPEOF__ # define _GL_INT_OP_WRAPV_SMALLISH(a,b,r,op,overflow,st,smin,smax,ut,umax) \ (TYPE_SIGNED (__typeof__ (*(r))) \ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, st, smin, smax) \ : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, ut, 0, umax)) # else # define _GL_INT_OP_WRAPV_SMALLISH(a,b,r,op,overflow,st,smin,smax,ut,umax) \ (overflow (a, b, smin, smax) \ ? (overflow (a, b, 0, umax) \ ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st), 1) \ : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st)) < 0) \ : (overflow (a, b, 0, umax) \ ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st)) >= 0 \ : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st), 0))) # endif # define _GL_INT_OP_WRAPV(a, b, r, op, overflow) \ (sizeof *(r) == sizeof (signed char) \ ? _GL_INT_OP_WRAPV_SMALLISH (a, b, r, op, overflow, \ signed char, SCHAR_MIN, SCHAR_MAX, \ unsigned char, UCHAR_MAX) \ : sizeof *(r) == sizeof (short int) \ ? _GL_INT_OP_WRAPV_SMALLISH (a, b, r, op, overflow, \ short int, SHRT_MIN, SHRT_MAX, \ unsigned short int, USHRT_MAX) \ : sizeof *(r) == sizeof (int) \ ? (EXPR_SIGNED (*(r)) \ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ int, INT_MIN, INT_MAX) \ : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ unsigned int, 0, UINT_MAX)) \ : _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow)) # ifdef LLONG_MAX # define _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow) \ (sizeof *(r) == sizeof (long int) \ ? (EXPR_SIGNED (*(r)) \ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ long int, LONG_MIN, LONG_MAX) \ : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ unsigned long int, 0, ULONG_MAX)) \ : (EXPR_SIGNED (*(r)) \ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ long long int, LLONG_MIN, LLONG_MAX) \ : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ unsigned long long int, 0, ULLONG_MAX))) # else # define _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow) \ (EXPR_SIGNED (*(r)) \ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ long int, LONG_MIN, LONG_MAX) \ : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ unsigned long int, 0, ULONG_MAX)) # endif #endif /* Store the low-order bits of A B into *R, where the operation is given by OP. Use the unsigned type UT for calculation to avoid overflow problems. *R's type is T, with extrema TMIN and TMAX. T must be a signed integer type. Return 1 if the result overflows. */ #define _GL_INT_OP_CALC(a, b, r, op, overflow, ut, t, tmin, tmax) \ (overflow (a, b, tmin, tmax) \ ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t), 1) \ : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t), 0)) /* Return the low-order bits of A B, where the operation is given by OP. Use the unsigned type UT for calculation to avoid undefined behavior on signed integer overflow, and convert the result to type T. UT is at least as wide as T and is no narrower than unsigned int, T is two's complement, and there is no padding or trap representations. Assume that converting UT to T yields the low-order bits, as is done in all known two's-complement C compilers. E.g., see: https://gcc.gnu.org/onlinedocs/gcc/Integers-implementation.html According to the C standard, converting UT to T yields an implementation-defined result or signal for values outside T's range. However, code that works around this theoretical problem runs afoul of a compiler bug in Oracle Studio 12.3 x86. See: https://lists.gnu.org/r/bug-gnulib/2017-04/msg00049.html As the compiler bug is real, don't try to work around the theoretical problem. */ #define _GL_INT_OP_WRAPV_VIA_UNSIGNED(a, b, op, ut, t) \ ((t) ((ut) (a) op (ut) (b))) /* Return true if the numeric values A + B, A - B, A * B fall outside the range TMIN..TMAX. Arguments should be integer expressions without side effects. TMIN should be signed and nonpositive. TMAX should be positive, and should be signed unless TMIN is zero. */ #define _GL_INT_ADD_RANGE_OVERFLOW(a, b, tmin, tmax) \ ((b) < 0 \ ? (((tmin) \ ? ((EXPR_SIGNED (_GL_INT_CONVERT (a, (tmin) - (b))) || (b) < (tmin)) \ && (a) < (tmin) - (b)) \ : (a) <= -1 - (b)) \ || ((EXPR_SIGNED (a) ? 0 <= (a) : (tmax) < (a)) && (tmax) < (a) + (b))) \ : (a) < 0 \ ? (((tmin) \ ? ((EXPR_SIGNED (_GL_INT_CONVERT (b, (tmin) - (a))) || (a) < (tmin)) \ && (b) < (tmin) - (a)) \ : (b) <= -1 - (a)) \ || ((EXPR_SIGNED (_GL_INT_CONVERT (a, b)) || (tmax) < (b)) \ && (tmax) < (a) + (b))) \ : (tmax) < (b) || (tmax) - (b) < (a)) #define _GL_INT_SUBTRACT_RANGE_OVERFLOW(a, b, tmin, tmax) \ (((a) < 0) == ((b) < 0) \ ? ((a) < (b) \ ? !(tmin) || -1 - (tmin) < (b) - (a) - 1 \ : (tmax) < (a) - (b)) \ : (a) < 0 \ ? ((!EXPR_SIGNED (_GL_INT_CONVERT ((a) - (tmin), b)) && (a) - (tmin) < 0) \ || (a) - (tmin) < (b)) \ : ((! (EXPR_SIGNED (_GL_INT_CONVERT (tmax, b)) \ && EXPR_SIGNED (_GL_INT_CONVERT ((tmax) + (b), a))) \ && (tmax) <= -1 - (b)) \ || (tmax) + (b) < (a))) #define _GL_INT_MULTIPLY_RANGE_OVERFLOW(a, b, tmin, tmax) \ ((b) < 0 \ ? ((a) < 0 \ ? (EXPR_SIGNED (_GL_INT_CONVERT (tmax, b)) \ ? (a) < (tmax) / (b) \ : ((INT_NEGATE_OVERFLOW (b) \ ? _GL_INT_CONVERT (b, tmax) >> (TYPE_WIDTH (b) - 1) \ : (tmax) / -(b)) \ <= -1 - (a))) \ : INT_NEGATE_OVERFLOW (_GL_INT_CONVERT (b, tmin)) && (b) == -1 \ ? (EXPR_SIGNED (a) \ ? 0 < (a) + (tmin) \ : 0 < (a) && -1 - (tmin) < (a) - 1) \ : (tmin) / (b) < (a)) \ : (b) == 0 \ ? 0 \ : ((a) < 0 \ ? (INT_NEGATE_OVERFLOW (_GL_INT_CONVERT (a, tmin)) && (a) == -1 \ ? (EXPR_SIGNED (b) ? 0 < (b) + (tmin) : -1 - (tmin) < (b) - 1) \ : (tmin) / (a) < (b)) \ : (tmax) / (b) < (a))) #endif /* _GL_INTPROPS_H */ make-4.3/mk/0000755000175000017500000000000013611151240007677 500000000000000make-4.3/mk/Windows32.mk0000644000175000017500000000675513603564437012005 00000000000000# GNU -*-Makefile-*- to build GNU make on Windows # # Windows overrides for use with Basic.mk. # # Copyright (C) 2017-2020 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 . # TARGET_TYPE can be either "release" or "debug" TARGET_TYPE = release # TOOLCHAIN can be either "msvc" or "gcc" TOOLCHAIN = msvc # Translate a POSIX path into a Windows path. Don't bother with drives. # Used only inside recipes, with DOS/CMD tools that require it. P2W = $(subst /,\,$1) prog_SOURCES += $(loadavg_SOURCES) $(glob_SOURCES) $(w32_SOURCES) BUILT_SOURCES += $(lib)alloca.h $(lib)fnmatch.h $(lib)glob.h w32_LIBS = kernel32 user32 gdi32 winspool comdlg32 advapi32 shell32 ole32 \ oleaut32 uuid odbc32 odbccp32 CPPFLAGS = CFLAGS = LDFLAGS = # --- Visual Studio msvc_CC = cl.exe msvc_LD = link.exe msvc_CPPFLAGS = /DHAVE_CONFIG_H /DWINDOWS32 /DWIN32 /D_CONSOLE msvc_CPPFLAGS += /I$(OUTDIR)src /I$(SRCDIR)/src /I$(SRCDIR)/src/w32/include /I$(OUTDIR)lib /I$(SRCDIR)/lib msvc_CFLAGS = /nologo /MT /W4 /EHsc msvc_CFLAGS += /FR$(OUTDIR) /Fp$(BASE_PROG).pch /Fd$(BASE_PROG).pdb msvc_LDFLAGS = /nologo /SUBSYSTEM:console /PDB:$(BASE_PROG).pdb msvc_LDLIBS = $(addsuffix .lib,$(w32_LIBS)) msvc_C_SOURCE = /c msvc_OUTPUT_OPTION = /Fo$@ msvc_LINK_OUTPUT = /OUT:$@ release_msvc_OUTDIR = ./WinRel/ release_msvc_CPPFLAGS = /D NDEBUG release_msvc_CFLAGS = /O2 debug_msvc_OUTDIR = ./WinDebug/ debug_msvc_CPPFLAGS = /D _DEBUG debug_msvc_CFLAGS = /Zi /Od debug_msvc_LDFLAGS = /DEBUG # --- GCC gcc_CC = gcc gcc_LD = $(gcc_CC) release_gcc_OUTDIR = ./GccRel/ debug_gcc_OUTDIR = ./GccDebug/ gcc_CPPFLAGS = -DHAVE_CONFIG_H -I$(OUTDIR)src -I$(SRCDIR)/src -I$(SRCDIR)/src/w32/include -I$(OUTDIR)lib -I$(SRCDIR)/lib gcc_CFLAGS = -mthreads -Wall -std=gnu99 -gdwarf-2 -g3 gcc_LDFLAGS = -mthreads -gdwarf-2 -g3 gcc_LDLIBS = $(addprefix -l,$(w32_libs)) gcc_C_SOURCE = -c gcc_OUTPUT_OPTION = -o $@ gcc_LINK_OUTPUT = -o $@ debug_gcc_CFLAGS = -O0 release_gcc_CFLAGS = -O2 # --- LINK.cmd = $(LD) $(extra_LDFLAGS) $(LDFLAGS) $(TARGET_ARCH) $1 $(LDLIBS) $(LINK_OUTPUT) CHECK.cmd = cmd /c cd tests \& .\run_make_tests.bat -make ../$(PROG) MKDIR.cmd = cmd /c mkdir $(call P2W,$1) RM.cmd = cmd /c del /F /Q $(call P2W,$1) CP.cmd = cmd /c copy /Y $(call P2W,$1 $2) CC = $($(TOOLCHAIN)_CC) LD = $($(TOOLCHAIN)_LD) C_SOURCE = $($(TOOLCHAIN)_C_SOURCE) OUTPUT_OPTION = $($(TOOLCHAIN)_OUTPUT_OPTION) LINK_OUTPUT = $($(TOOLCHAIN)_LINK_OUTPUT) OUTDIR = $($(TARGET_TYPE)_$(TOOLCHAIN)_OUTDIR) OBJEXT = obj EXEEXT = .exe _CUSTOM = $($(TOOLCHAIN)_$1) $($(TARGET_TYPE)_$1) $($(TARGET_TYPE)_$(TOOLCHAIN)_$1) # I'm not sure why this builds gnumake rather than make...? PROG = $(OUTDIR)gnumake$(EXEEXT) BASE_PROG = $(basename $(PROG)) extra_CPPFLAGS = $(call _CUSTOM,CPPFLAGS) extra_CFLAGS = $(call _CUSTOM,CFLAGS) extra_LDFLAGS = $(call _CUSTOM,LDFLAGS) LDLIBS = $(call _CUSTOM,LDLIBS) $(OUTDIR)src/config.h: $(SRCDIR)/src/config.h.W32 $(call CP.cmd,$<,$@) make-4.3/mk/msdosdjgpp.mk0000644000175000017500000000263213603564437012346 00000000000000# GNU -*-Makefile-*- to build GNU make on MS-DOS with DJGPP # # MS-DOS overrides for use with Basic.mk. # # Copyright (C) 2017-2020 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 . OBJEXT = o EXEEXT = .exe CC = gcc # Translate a POSIX path into a Windows path. Don't bother with drives. # Used only inside recipes, with DOS/CMD tools that require it. P2W = $(subst /,\,$1) prog_SOURCES += $(loadavg_SOURCES) $(glob_SOURCES) BUILT_SOURCES += $(lib)alloca.h $(lib)fnmatch.h $(lib)glob.h INCLUDEDIR = c:/djgpp/include LIBDIR = c:/djgpp/lib LOCALEDIR = c:/djgpp/share MKDIR.cmd = command.com /c mkdir $(call P2W,$1) RM.cmd = command.com /c del /F /Q $(call P2W,$1) CP.cmd = command.com /c copy /Y $(call P2W,$1 $2) $(OUTDIR)src/config.h: $(SRCDIR)/src/configh.dos $(call CP.cmd,$<,$@) make-4.3/mk/VMS.mk0000644000175000017500000000464113603564437010643 00000000000000# GNU -*-Makefile-*- to build GNU make on VMS # # VMS overrides for use with Basic.mk. # # Copyright (C) 2017-2020 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 . src = [.src] lib = [.lib] SRCDIR = [] OBJEXT = .obj EXEEXT = .exe e = s = $e $e c = , defs = HAVE_CONFIG_H ifeq ($(CC),cc) defs += VMS unlink=remove allocated_variable_expand_for_file=alloc_var_expand_for_file else defs += GCC_IS_NATIVE ifeq ($(ARCH),VAX) defs += VAX endif endif extra_CPPFLAGS = /define=($(subst $s,$c,$(patsubst %,"%",$(defs)))) cinclude = /nested=none/include=($(src),$(lib)) ifeq ($(CC),cc) cprefix = /prefix=(all,except=(glob,globfree)) cwarn = /standard=relaxed/warn=(disable=questcompare) endif extra_CFLAGS = $(cinclude)$(cprefix)$(cwarn) #extra_LDFLAGS = /deb extra_LDFLAGS = # If your system needs extra libraries loaded in, define them here. # System V probably need -lPW for alloca. # if on vax, uncomment the following line #LDLIBS = ,c.opt/opt ifeq ($(CC),cc) #LDLIBS =,sys$$library:vaxcrtl.olb/lib else LDLIBS =,gnu_cc_library:libgcc.olb/lib endif # If your system doesn't have alloca, or the one provided is bad, # uncomment this #ALLOCA = $(alloca_SOURCES) # If your system doesn't have alloca.h, or the one provided is bad, # uncomment this #BUILT_SOURCES += $(lib)alloca.h prog_SOURCES += $(ALLOCA) $(glob_SOURCES) $(vms_SOURCES) BUILT_SOURCES += $(lib)fnmatch.h $(lib)glob.h COMPILE.cmd = $(CC) $(extra_CFLAGS)$(CFLAGS)/obj=$@ $(extra_CPPFLAGS)$(CPPFLAGS) $1 LINK.cmd = $(LD)$(extra_LDFLAGS)$(LDFLAGS)/exe=$@ $(subst $s,$c,$1)$(LDLIBS) # Don't know how to do this CHECK.cmd = MKDIR.cmd = create/dir $1 RM.cmd = delete $1 CP.cmd = copy $1 $2 define CLEANSPACE -purge [...] -delete $(PROG); -delete $(src)*.$(OBJEXT); endef $(OUTDIR)$(src)config.h: $(SRCDIR)$(src)config.h.W32 $(call CP.cmd,$<,$@) make-4.3/mk/Amiga.mk0000644000175000017500000000251513603564437011212 00000000000000# GNU -*-Makefile-*- to build GNU make on Amiga # # Amiga overrides for use with Basic.mk. # # Copyright (C) 2017-2020 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 . CC = sc LD = $(CC) Link MKDIR.cmd = makedir $1 RM.cmd = delete $1 CP.cmd = copy $1 To $2 CPPFLAGS = CFLAGS = LDFLAGS = prog_SOURCES += $(alloca_SOURCES) $(loadavg_SOURCES) $(glob_SOURCES) $(amiga_SOURCES) BUILT_SOURCES += $(lib)alloca.h $(lib)fnmatch.h $(lib)glob.h extra_CPPFLAGS = IDir $(OUTDIR)src IDir $(SRCDIR)/src IDir $(OUTDIR)lib IDir $(SRCDIR)/lib C_SOURCE = OUTPUT_OPTION = LDFLAGS = From LIB:cres.o LDLIBS = Lib LIB:sc.lib LIB:amiga.lib LINK_OUTPUT = To $@ $(OUTDIR)src/config.h: $(SRCDIR)/src/config.ami $(call CP.cmd,$<,$@) make-4.3/builddos.bat0000644000175000017500000001226313603564437011532 00000000000000@echo off rem Copyright (C) 1998-2020 Free Software Foundation, Inc. rem This file is part of GNU Make. rem rem GNU Make is free software; you can redistribute it and/or modify it under rem the terms of the GNU General Public License as published by the Free rem Software Foundation; either version 3 of the License, or (at your option) rem any later version. rem rem GNU Make is distributed in the hope that it will be useful, but WITHOUT rem ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or rem FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for. rem more details. rem rem You should have received a copy of the GNU General Public License along rem with this program. If not, see . echo Building Make for MSDOS with DJGPP rem The SmallEnv trick protects against too small environment block, rem in which case the values will be truncated and the whole thing rem goes awry. COMMAND.COM will say "Out of environment space", but rem many people don't care, so we force them to care by refusing to go. rem Where is the srcdir? set XSRC=. if not "%XSRC%"=="." goto SmallEnv if "%1%"=="" goto SrcDone if "%1%"=="." goto SrcDone set XSRC=%1 if not "%XSRC%"=="%1" goto SmallEnv :SrcDone if not exist src mkdir src if not exist lib mkdir lib copy /Y %XSRC%\src\configh.dos .\src\config.h copy /Y %XSRC%\lib\glob.in.h .\lib\glob.h copy /Y %XSRC%\lib\fnmatch.in.h .\lib\fnmatch.h rem Echo ON so they will see what is going on. @echo on gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/commands.c -o commands.o gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/output.c -o output.o gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/job.c -o job.o gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/dir.c -o dir.o gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/file.c -o file.o gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/misc.c -o misc.o gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/main.c -o main.o gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -DINCLUDEDIR=\"c:/djgpp/include\" -O2 -g %XSRC%/src/read.c -o read.o gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -DLIBDIR=\"c:/djgpp/lib\" -O2 -g %XSRC%/src/remake.c -o remake.o gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/rule.c -o rule.o gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/implicit.c -o implicit.o gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/default.c -o default.o gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/variable.c -o variable.o gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/expand.c -o eyxpand.o gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/function.c -o function.o gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/vpath.c -o vpath.o gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/hash.c -o hash.o gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/strcache.c -o strcache.o gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/version.c -o version.o gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/ar.c -o ar.o gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/arscan.c -o arscan.o gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/signame.c -o signame.o gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/remote-stub.c -o remote-stub.o gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/getopt.c -o getopt.o gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/src/getopt1.c -o getopt1.o gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/lib/glob.c -o lib/glob.o gcc -c -I./src -I%XSRC%/src -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/lib/fnmatch.c -o lib/fnmatch.o @echo off echo commands.o > respf.$$$ for %%f in (job output dir file misc main read remake rule implicit default variable) do echo %%f.o >> respf.$$$ for %%f in (expand function vpath hash strcache version ar arscan signame remote-stub getopt getopt1) do echo %%f.o >> respf.$$$ for %%f in (lib\glob lib\fnmatch) do echo %%f.o >> respf.$$$ rem gcc -c -I./src -I%XSRC% -I./lib -I%XSRC%/lib -DHAVE_CONFIG_H -O2 -g %XSRC%/guile.c -o guile.o rem echo guile.o >> respf.$$$ @echo Linking... @echo on gcc -o make.exe @respf.$$$ @echo off if not exist make.exe echo Make.exe build failed... if exist make.exe echo make.exe is now built! if exist make.exe del respf.$$$ if exist make.exe copy /Y Basic.mk Makefile goto End :SmallEnv echo Your environment is too small. Please enlarge it and run me again. :End set XRSC= @echo on make-4.3/makefile.com0000644000175000017500000001230313603564437011505 00000000000000$! $! Makefile.com - builds GNU Make for VMS $! $! P1 = LIST will provide compiler listings. $! P2 = DEBUG will build an image with debug information $! P3 = WALL will enable all warning messages (some are suppressed since $! one macro intentionally causes an error condition) $! $! In case of problems with the install you might contact me at $! zinser@decus.de (preferred) or zinser@sysdev.deutsche-boerse.com $ $! hb $! But don't ask Martin Zinser about the lines, I added/changed. $! In case of an error do some cleanup $ on error then $ goto cleanup $! in case somebody set up her/his own symbol for cc $ set symbol/scope=(nolocal,noglobal) $! $! Just some general constants... $! $ true = 1 $ false = 0 $ tmpnam = "temp_" + f$getjpi("","pid") $ tt = tmpnam + ".txt" $ tc = tmpnam + ".c" $! $! Look for the compiler used $! $ lval = "" $ if f$search("SYS$SYSTEM:DECC$COMPILER.EXE").eqs."" $ then $ if f$trnlnm("SYS").eqs."" then def/nolog sys sys$library: $ ccopt = "" $ else $ ccopt = "/decc/prefix=(all,except=(globfree,glob))" $ if f$trnlnm("SYS").eqs."" $ then $ if f$trnlnm("DECC$LIBRARY_INCLUDE").nes."" $ then $ define sys decc$library_include: $ else $ if f$search("SYS$COMMON:[DECC$LIB.REFERENCE]DECC$RTLDEF.DIR").nes."" - then lval = "SYS$COMMON:[DECC$LIB.REFERENCE.DECC$RTLDEF]," $ if f$search("SYS$COMMON:[DECC$LIB.REFERENCE]SYS$STARLET_C.DIR").nes."" - then lval = lval+"SYS$COMMON:[DECC$LIB.REFERENCE.SYS$STARLET_C]," $ lval=lval+"SYS$LIBRARY:" $ define sys 'lval $ endif $ endif $ endif $! $! $ if (p1 .eqs. "LIST") $ then $ ccopt = ccopt + "/list/show=(expan,inclu)" $ endif $! $! Should we build a debug image $! $ if (p2.eqs."DEBUG") $ then $ ccopt = ccopt + "/noopt/debug" $ lopt = "/debug" $ else $ lopt = "" $ endif $! $! Do we want to see all warnings $! $ if (p3.nes."WALL") $ then $ gosub check_cc_qual $ endif $ filelist = "[.src]ar [.src]arscan [.src]commands [.src]default [.src]dir " + - "[.src]expand [.src]file [.src]function [.src]guile " + - "[.src]hash [.src]implicit [.src]job [.src]load [.src]main " + - "[.src]misc [.src]read [.src]remake [.src]remote-stub " + - "[.src]rule [.src]output [.src]signame [.src]variable " + - "[.src]version [.src]strcache [.src]vpath " + - "[.src]vmsfunctions [.src]vmsify [.src]vms_progname " + - "[.src]vms_exit [.src]vms_export_symbol " + - "[.lib]alloca [.lib]fnmatch [.lib]glob [.src]getopt1 [.src]getopt" $! $ copy [.src]config.h-vms [.src]config.h $ copy [.lib]fnmatch.in.h [.lib]fnmatch.h $ copy [.lib]glob.in.h [.lib]glob.h $ n=0 $ open/write optf make.opt $ loop: $ cfile = f$elem(n," ",filelist) $ if cfile .eqs. " " then goto linkit $ write sys$output "Compiling ''cfile'..." $ call compileit 'cfile' $ n = n + 1 $ goto loop $ linkit: $ close optf $ link/exe=make make.opt/opt'lopt $ goto cleanup $ $ cleanup: $ if f$trnlnm("SYS").nes."" then $ deassign sys $ if f$trnlnm("OPTF").nes."" then $ close optf $ if f$search("make.opt").nes."" then $ del make.opt;* $ exit $! $!----------------------------------------------------------------------------- $! $! Check if this is a define relating to the properties of the C/C++ $! compiler $! $CHECK_CC_QUAL: $ open/write tmpc 'tc $ ccqual = "/warn=(disable=questcompare)" $ write tmpc "#include " $ write tmpc "unsigned int i = 1;" $ write tmpc "int main(){" $ write tmpc "if (i < 0){printf(""Mission impossible\n"");}}" $ close tmpc $ gosub cc_qual_check $ return $! $!----------------------------------------------------------------------------- $! $! Check for properties of C/C++ compiler $! $CC_QUAL_CHECK: $ cc_qual = false $ set message/nofac/noident/nosever/notext $ cc 'ccqual' 'tmpnam' $ if $status then cc_qual = true $ set message/fac/ident/sever/text $ delete/nolog 'tmpnam'.*;* $ if cc_qual then ccopt = ccopt + ccqual $ return $!----------------------------------------------------------------------------- $! $ compileit : subroutine $ ploc = f$locate("]",p1) $! filnam = p1 $ if ploc .lt. f$length(p1) $ then $ objdir = f$extract(0, ploc+1, p1) $ write optf p1 $ else $ objdir := [] $ write optf objdir+p1 $ endif $ cc'ccopt'/nested=none/include=([],[.src],[.lib])/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-2020 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 . make-4.3/doc/0000755000175000017500000000000013611151241010036 500000000000000make-4.3/doc/make.info-10000644000175000017500000111226613611136535011730 00000000000000This is make.info, produced by makeinfo version 6.6 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.75, last updated 19 January 2020, of 'The GNU Make Manual', for GNU 'make' version 4.3. 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, 2015, 2016, 2017, 2018, 2019, 2020 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with the Front-Cover Texts being "A GNU Manual," and with the Back-Cover Texts as in (a) below. A copy of the license is included in the section entitled "GNU Free Documentation License." (a) The FSF's Back-Cover Text is: "You have the freedom to copy and modify this GNU manual. Buying copies from the FSF supports it in developing GNU and promoting software freedom." INFO-DIR-SECTION Software development START-INFO-DIR-ENTRY * Make: (make). Remake files automatically. END-INFO-DIR-ENTRY  File: make.info, Node: Top, Next: Overview, Prev: (dir), Up: (dir) GNU 'make' ********** 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.75, last updated 19 January 2020, of 'The GNU Make Manual', for GNU 'make' version 4.3. 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, 2015, 2016, 2017, 2018, 2019, 2020 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with the Front-Cover Texts being "A GNU Manual," and with the Back-Cover Texts as in (a) below. A copy of the license is included in the section entitled "GNU Free Documentation License." (a) The FSF's Back-Cover Text is: "You have the freedom to copy and modify this GNU manual. Buying copies from the FSF supports it in developing GNU and promoting software freedom." * Menu: * Overview:: Overview of 'make'. * Introduction:: An introduction to 'make'. * Makefiles:: Makefiles tell 'make' what to do. * Rules:: Rules describe when a file must be remade. * Recipes:: Recipes say how to remake a file. * Using Variables:: You can use variables to avoid repetition. * Conditionals:: Use or ignore parts of the makefile based on the values of variables. * Functions:: Many powerful ways to manipulate text. * Invoking make: Running. How to invoke 'make' on the command line. * Implicit Rules:: Use implicit rules to treat many files alike, 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 GNU programs. * Quick Reference:: A quick reference for experienced users. * Error Messages:: A list of common errors generated by 'make'. * Complex Makefile:: A real example of a straightforward, but nontrivial, makefile. * GNU Free Documentation License:: License for copying this manual. * Concept Index:: Index of Concepts. * Name Index:: Index of Functions, Variables, & Directives. -- The Detailed Node Listing -- Overview of 'make' * Preparing:: Preparing and running 'make'. * Reading:: On reading this text. * Bugs:: Problems and bugs. An Introduction to Makefiles * Rule Introduction:: What a rule looks like. * Simple Makefile:: A simple makefile. * How Make Works:: How 'make' processes this makefile. * Variables Simplify:: Variables make makefiles simpler. * make Deduces:: Letting 'make' deduce the recipes. * Combine By Prerequisite:: Another style of makefile. * Cleanup:: Rules for cleaning the directory. Writing Makefiles * Makefile Contents:: What makefiles contain. * Makefile Names:: How to name your makefile. * Include:: How one makefile can use another makefile. * MAKEFILES Variable:: The environment can specify extra makefiles. * Remaking Makefiles:: How makefiles get remade. * Overriding Makefiles:: How to override part of one makefile with another makefile. * Reading Makefiles:: How makefiles are read in. * Parsing Makefiles:: How makefiles are parsed. * Secondary Expansion:: How and when secondary expansion is performed. What Makefiles Contain * Splitting Lines:: Splitting long lines in makefiles Writing Rules * Rule Example:: An example explained. * Rule Syntax:: General syntax explained. * Prerequisite Types:: There are two types of prerequisites. * Wildcards:: Using wildcard characters such as '*'. * Directory Search:: Searching other directories for source files. * Phony Targets:: Using a target that is not a real file's name. * Force Targets:: You can use a target without a recipe or prerequisites to mark other targets as phony. * Empty Targets:: When only the date matters and the files are empty. * Special Targets:: Targets with special built-in meanings. * Multiple Targets:: When to make use of several targets in a rule. * Multiple Rules:: How to use several rules with the same target. * Static Pattern:: Static pattern rules apply to multiple targets and can vary the prerequisites according to the target name. * Double-Colon:: How to use a special kind of rule to allow several independent rules for one target. * Automatic Prerequisites:: How to automatically generate rules giving prerequisites from source files themselves. Using Wildcard Characters in File Names * Wildcard Examples:: Several examples. * Wildcard Pitfall:: Problems to avoid. * Wildcard Function:: How to cause wildcard expansion where it does not normally take place. Searching Directories for Prerequisites * General Search:: Specifying a search path that applies to every prerequisite. * Selective Search:: Specifying a search path for a specified class of names. * Search Algorithm:: When and how search paths are applied. * Recipes/Search:: How to write recipes that work together with search paths. * Implicit/Search:: How search paths affect implicit rules. * Libraries/Search:: Directory search for link libraries. Static Pattern Rules * Static Usage:: The syntax of static pattern rules. * Static versus Implicit:: When are they better than implicit rules? Writing Recipes in Rules * Recipe Syntax:: Recipe syntax features and pitfalls. * Echoing:: How to control when recipes are echoed. * Execution:: How recipes are executed. * Parallel:: How recipes can be executed in parallel. * Errors:: What happens after a recipe execution error. * Interrupts:: What happens when a recipe is interrupted. * Recursion:: Invoking 'make' from makefiles. * Canned Recipes:: Defining canned recipes. * Empty Recipes:: Defining useful, do-nothing recipes. Recipe Syntax * Splitting Recipe Lines:: Breaking long recipe lines for readability. * Variables in Recipes:: Using 'make' variables in recipes. Recipe Execution * One Shell:: One shell for all lines in a recipe. * Choosing the Shell:: How 'make' chooses the shell used to run recipes. Parallel Execution * Parallel Output:: Handling output during parallel execution * Parallel Input:: Handling input during parallel execution Recursive Use of 'make' * MAKE Variable:: The special effects of using '$(MAKE)'. * Variables/Recursion:: How to communicate variables to a sub-'make'. * Options/Recursion:: How to communicate options to a sub-'make'. * -w Option:: How the '-w' or '--print-directory' option helps debug use of recursive 'make' commands. How to Use Variables * Reference:: How to use the value of a variable. * Flavors:: Variables come in two flavors. * Advanced:: Advanced features for referencing a variable. * Values:: All the ways variables get their values. * Setting:: How to set a variable in the makefile. * Appending:: How to append more text to the old value of a variable. * Override Directive:: How to set a variable in the makefile even if the user has set it with a command argument. * Multi-Line:: An alternate way to set a variable to a multi-line string. * Undefine Directive:: How to undefine a variable so that it appears as if it was never set. * Environment:: Variable values can come from the environment. * Target-specific:: Variable values can be defined on a per-target basis. * Pattern-specific:: Target-specific variable values can be applied to a group of targets that match a pattern. * Suppressing Inheritance:: Suppress inheritance of variables. * Special Variables:: Variables with special meaning or behavior. Advanced Features for Reference to Variables * Substitution Refs:: Referencing a variable with substitutions on the value. * Computed Names:: Computing the name of the variable to refer to. Conditional Parts of Makefiles * Conditional Example:: Example of a conditional * Conditional Syntax:: The syntax of conditionals. * Testing Flags:: Conditionals that test flags. Functions for Transforming Text * Syntax of Functions:: How to write a function call. * Text Functions:: General-purpose text manipulation functions. * File Name Functions:: Functions for manipulating file names. * Conditional Functions:: Functions that implement conditions. * Foreach Function:: Repeat some text with controlled variation. * File Function:: Write text to a file. * Call Function:: Expand a user-defined function. * Value Function:: Return the un-expanded value of a variable. * Eval Function:: Evaluate the arguments as makefile syntax. * Origin Function:: Find where a variable got its value. * Flavor Function:: Find out the flavor of a variable. * Make Control Functions:: Functions that control how make runs. * Shell Function:: Substitute the output of a shell command. * Guile Function:: Use GNU Guile embedded scripting language. How to Run 'make' * Makefile Arguments:: How to specify which makefile to use. * Goals:: How to use goal arguments to specify which parts of the makefile to use. * Instead of Execution:: How to use mode flags to specify what kind of thing to do with the recipes in the makefile other than simply execute them. * Avoiding Compilation:: How to avoid recompiling certain files. * Overriding:: How to override a variable to specify an alternate compiler and other things. * Testing:: How to proceed past some errors, to test compilation. * Options Summary:: Summary of Options Using Implicit Rules * Using Implicit:: How to use an existing implicit rule to get the recipes for updating a file. * Catalogue of Rules:: A list of built-in rules. * Implicit Variables:: How to change what predefined rules do. * Chained Rules:: How to use a chain of implicit rules. * Pattern Rules:: How to define new implicit rules. * Last Resort:: How to define a recipe for rules which cannot find any. * Suffix Rules:: The old-fashioned style of implicit rule. * Implicit Rule Search:: The precise algorithm for applying implicit rules. Defining and Redefining Pattern Rules * Pattern Intro:: An introduction to pattern rules. * Pattern Examples:: Examples of pattern rules. * Automatic Variables:: How to use automatic variables in the recipe of implicit rules. * Pattern Match:: How patterns match. * Match-Anything Rules:: Precautions you should take prior to defining rules that can match any target file whatever. * Canceling Rules:: How to override or cancel built-in rules. Using 'make' to Update Archive Files * Archive Members:: Archive members as targets. * Archive Update:: The implicit rule for archive member targets. * Archive Pitfalls:: Dangers to watch out for when using archives. * Archive Suffix Rules:: You can write a special kind of suffix rule for updating archives. Implicit Rule for Archive Member Targets * Archive Symbols:: How to update archive symbol directories. Extending GNU 'make' * Guile Integration:: Using Guile as an embedded scripting language. * Loading Objects:: Loading dynamic objects as extensions. GNU Guile Integration * Guile Types:: Converting Guile types to 'make' strings. * Guile Interface:: Invoking 'make' functions from Guile. * Guile Example:: Example using Guile in 'make'. Loading Dynamic Objects * load Directive:: Loading dynamic objects as extensions. * Remaking Loaded Objects:: How loaded objects get remade. * 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.  File: make.info, Node: Overview, Next: Introduction, Prev: Top, Up: Top 1 Overview of 'make' ******************** The 'make' utility automatically determines which pieces of a large program need to be recompiled, and issues commands to recompile them. This manual describes GNU 'make', which was implemented by Richard Stallman and Roland McGrath. Development since Version 3.76 has been handled by Paul D. Smith. GNU 'make' conforms to section 6.2 of 'IEEE Standard 1003.2-1992' (POSIX.2). Our examples show C programs, since they are most common, but you can use 'make' with any programming language whose compiler can be run with a shell command. Indeed, 'make' is not limited to programs. You can use it to describe any task where some files must be updated automatically from others whenever the others change. * Menu: * Preparing:: Preparing and running 'make'. * Reading:: On reading this text. * Bugs:: Problems and bugs.  File: make.info, Node: Preparing, Next: Reading, Prev: Overview, Up: Overview Preparing and Running Make ========================== To prepare to use 'make', you must write a file called the "makefile" that describes the relationships among files in your program and provides commands for updating each file. In a program, typically, the executable file is updated from object files, which are in turn made by compiling source files. Once a suitable makefile exists, each time you change some source files, this simple shell command: make suffices to perform all necessary recompilations. The 'make' program uses the makefile data base and the last-modification times of the files to decide which of the files need to be updated. For each of those files, it issues the recipes recorded in the data base. You can provide command line arguments to 'make' to control which files should be recompiled, or how. *Note How to Run 'make': Running.  File: make.info, Node: Reading, Next: Bugs, Prev: Preparing, Up: Overview 1.1 How to Read This Manual =========================== If you are new to 'make', or are looking for a general introduction, read the first few sections of each chapter, skipping the later sections. In each chapter, the first few sections contain introductory or general information and the later sections contain specialized or technical information. The exception is the second chapter, *note An Introduction to Makefiles: Introduction, all of which is introductory. If you are familiar with other 'make' programs, see *note Features of GNU 'make': Features, which lists the enhancements GNU 'make' has, and *note Incompatibilities and Missing Features: Missing, which explains the few things GNU 'make' lacks that others have. For a quick summary, see *note Options Summary::, *note Quick Reference::, and *note Special Targets::.  File: make.info, Node: Bugs, Prev: Reading, Up: Overview 1.2 Problems and Bugs ===================== If you have problems with GNU 'make' or think you've found a bug, please report it to the developers; we cannot promise to do anything but we might well want to fix it. Before reporting a bug, make sure you've actually found a real bug. Carefully reread the documentation and see if it really says you can do what you're trying to do. If it's not clear whether you should be able to do something or not, report that too; it's a bug in the documentation! Before reporting a bug or trying to fix it yourself, try to isolate it to the smallest possible makefile that reproduces the problem. Then send us the makefile and the exact results 'make' gave you, including any error or warning messages. Please don't paraphrase these messages: it's best to cut and paste them into your report. When generating this small makefile, be sure to not use any non-free or unusual tools in your recipes: you can almost always emulate what such a tool would do with simple shell commands. Finally, be sure to explain what you expected to occur; this will help us decide whether the problem was really in the documentation. Once you have a precise problem you can report it in one of two ways. Either send electronic mail to: bug-make@gnu.org or use our Web-based project management tool, at: http://savannah.gnu.org/projects/make/ In addition to the information above, please be careful to include the version number of 'make' you are using. You can get this information with the command 'make --version'. Be sure also to include the type of machine and operating system you are using. One way to obtain this information is by looking at the final lines of output from the command 'make --help'.  File: make.info, Node: Introduction, Next: Makefiles, Prev: Overview, Up: Top 2 An Introduction to Makefiles ****************************** You need a file called a "makefile" to tell 'make' what to do. Most often, the makefile tells 'make' how to compile and link a program. In this chapter, we will discuss a simple makefile that describes how to compile and link a text editor which consists of eight C source files and three header files. The makefile can also tell 'make' how to run miscellaneous commands when explicitly asked (for example, to remove certain files as a clean-up operation). To see a more complex example of a makefile, see *note Complex Makefile::. When 'make' recompiles the editor, each changed C source file must be recompiled. If a header file has changed, each C source file that includes the header file must be recompiled to be safe. Each compilation produces an object file corresponding to the source file. Finally, if any source file has been recompiled, all the object files, whether newly made or saved from previous compilations, must be linked together to produce the new executable editor. * Menu: * Rule Introduction:: What a rule looks like. * Simple Makefile:: A simple makefile. * How Make Works:: How 'make' processes this makefile. * Variables Simplify:: Variables make makefiles simpler. * make Deduces:: Letting 'make' deduce the recipes. * Combine By Prerequisite:: Another style of makefile. * Cleanup:: Rules for cleaning the directory.  File: make.info, Node: Rule Introduction, Next: Simple Makefile, Prev: Introduction, Up: Introduction 2.1 What a Rule Looks Like ========================== A simple makefile consists of "rules" with the following shape: TARGET ... : PREREQUISITES ... RECIPE ... ... A "target" is usually the name of a file that is generated by a program; examples of targets are executable or object files. A target can also be the name of an action to carry out, such as 'clean' (*note Phony Targets::). A "prerequisite" is a file that is used as input to create the target. A target often depends on several files. A "recipe" is an action that 'make' carries out. A recipe may have more than one command, either on the same line or each on its own line. *Please note:* you need to put a tab character at the beginning of every recipe line! This is an obscurity that catches the unwary. If you prefer to prefix your recipes with a character other than tab, you can set the '.RECIPEPREFIX' variable to an alternate character (*note Special Variables::). Usually a recipe is in a rule with prerequisites and serves to create a target file if any of the prerequisites change. However, the rule that specifies a recipe for the target need not have prerequisites. For example, the rule containing the delete command associated with the target 'clean' does not have prerequisites. A "rule", then, explains how and when to remake certain files which are the targets of the particular rule. 'make' carries out the recipe on the prerequisites to create or update the target. A rule can also explain how and when to carry out an action. *Note Writing Rules: Rules. A makefile may contain other text besides rules, but a simple makefile need only contain rules. Rules may look somewhat more complicated than shown in this template, but all fit the pattern more or less.  File: make.info, Node: Simple Makefile, Next: How Make Works, Prev: Rule Introduction, Up: Introduction 2.2 A Simple Makefile ===================== Here is a straightforward makefile that describes the way an executable file called 'edit' depends on eight object files which, in turn, depend on eight C source and three header files. In this example, all the C files include 'defs.h', but only those defining editing commands include 'command.h', and only low level files that change the editor buffer include 'buffer.h'. edit : main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o cc -o edit main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o main.o : main.c defs.h cc -c main.c kbd.o : kbd.c defs.h command.h cc -c kbd.c command.o : command.c defs.h command.h cc -c command.c display.o : display.c defs.h buffer.h cc -c display.c insert.o : insert.c defs.h buffer.h cc -c insert.c search.o : search.c defs.h buffer.h cc -c search.c files.o : files.c defs.h buffer.h command.h cc -c files.c utils.o : utils.c defs.h cc -c utils.c clean : rm edit main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o We split each long line into two lines using backslash/newline; this is like using one long line, but is easier to read. *Note Splitting Long Lines: Splitting Lines. To use this makefile to create the executable file called 'edit', type: make To use this makefile to delete the executable file and all the object files from the directory, type: make clean In the example makefile, the targets include the executable file 'edit', and the object files 'main.o' and 'kbd.o'. The prerequisites are files such as 'main.c' and 'defs.h'. In fact, each '.o' file is both a target and a prerequisite. Recipes include 'cc -c main.c' and 'cc -c kbd.c'. When a target is a file, it needs to be recompiled or relinked if any of its prerequisites change. In addition, any prerequisites that are themselves automatically generated should be updated first. In this example, 'edit' depends on each of the eight object files; the object file 'main.o' depends on the source file 'main.c' and on the header file 'defs.h'. A recipe may follow each line that contains a target and prerequisites. These recipes say how to update the target file. A tab character (or whatever character is specified by the '.RECIPEPREFIX' variable; *note Special Variables::) must come at the beginning of every line in the recipe to distinguish recipes from other lines in the makefile. (Bear in mind that 'make' does not know anything about how the recipes work. It is up to you to supply recipes that will update the target file properly. All 'make' does is execute the recipe you have specified when the target file needs to be updated.) The target 'clean' is not a file, but merely the name of an action. Since you normally do not want to carry out the actions in this rule, 'clean' is not a prerequisite of any other rule. Consequently, 'make' never does anything with it unless you tell it specifically. Note that this rule not only is not a prerequisite, it also does not have any prerequisites, so the only purpose of the rule is to run the specified recipe. Targets that do not refer to files but are just actions are called "phony targets". *Note Phony Targets::, for information about this kind of target. *Note Errors in Recipes: Errors, to see how to cause 'make' to ignore errors from 'rm' or any other command.  File: make.info, Node: How Make Works, Next: Variables Simplify, Prev: Simple Makefile, Up: Introduction 2.3 How 'make' Processes a Makefile =================================== By default, 'make' starts with the first target (not targets whose names start with '.'). This is called the "default goal". ("Goals" are the targets that 'make' strives ultimately to update. You can override this behavior using the command line (*note Arguments to Specify the Goals: Goals.) or with the '.DEFAULT_GOAL' special variable (*note Other Special Variables: Special Variables.). In the simple example of the previous section, the default goal is to update the executable program 'edit'; therefore, we put that rule first. Thus, when you give the command: make 'make' reads the makefile in the current directory and begins by processing the first rule. In the example, this rule is for relinking 'edit'; but before 'make' can fully process this rule, it must process the rules for the files that 'edit' depends on, which in this case are the object files. Each of these files is processed according to its own rule. These rules say to update each '.o' file by compiling its source file. The recompilation must be done if the source file, or any of the header files named as prerequisites, is more recent than the object file, or if the object file does not exist. The other rules are processed because their targets appear as prerequisites of the goal. If some other rule is not depended on by the goal (or anything it depends on, etc.), that rule is not processed, unless you tell 'make' to do so (with a command such as 'make clean'). Before recompiling an object file, 'make' considers updating its prerequisites, the source file and header files. This makefile does not specify anything to be done for them--the '.c' and '.h' files are not the targets of any rules--so 'make' does nothing for these files. But 'make' would update automatically generated C programs, such as those made by Bison or Yacc, by their own rules at this time. After recompiling whichever object files need it, 'make' decides whether to relink 'edit'. This must be done if the file 'edit' does not exist, or if any of the object files are newer than it. If an object file was just recompiled, it is now newer than 'edit', so 'edit' is relinked. Thus, if we change the file 'insert.c' and run 'make', 'make' will compile that file to update 'insert.o', and then link 'edit'. If we change the file 'command.h' and run 'make', 'make' will recompile the object files 'kbd.o', 'command.o' and 'files.o' and then link the file 'edit'.  File: make.info, Node: Variables Simplify, Next: make Deduces, Prev: How Make Works, Up: Introduction 2.4 Variables Make Makefiles Simpler ==================================== In our example, we had to list all the object files twice in the rule for 'edit' (repeated here): edit : main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o cc -o edit main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o Such duplication is error-prone; if a new object file is added to the system, we might add it to one list and forget the other. We can eliminate the risk and simplify the makefile by using a variable. "Variables" allow a text string to be defined once and substituted in multiple places later (*note How to Use Variables: Using Variables.). It is standard practice for every makefile to have a variable named 'objects', 'OBJECTS', 'objs', 'OBJS', 'obj', or 'OBJ' which is a list of all object file names. We would define such a variable 'objects' with a line like this in the makefile: objects = main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o Then, each place we want to put a list of the object file names, we can substitute the variable's value by writing '$(objects)' (*note How to Use Variables: Using Variables.). Here is how the complete simple makefile looks when you use a variable for the object files: objects = main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o edit : $(objects) cc -o edit $(objects) main.o : main.c defs.h cc -c main.c kbd.o : kbd.c defs.h command.h cc -c kbd.c command.o : command.c defs.h command.h cc -c command.c display.o : display.c defs.h buffer.h cc -c display.c insert.o : insert.c defs.h buffer.h cc -c insert.c search.o : search.c defs.h buffer.h cc -c search.c files.o : files.c defs.h buffer.h command.h cc -c files.c utils.o : utils.c defs.h cc -c utils.c clean : rm edit $(objects)  File: make.info, Node: make Deduces, Next: Combine By Prerequisite, Prev: Variables Simplify, Up: Introduction 2.5 Letting 'make' Deduce the Recipes ===================================== It is not necessary to spell out the recipes for compiling the individual C source files, because 'make' can figure them out: it has an "implicit rule" for updating a '.o' file from a correspondingly named '.c' file using a 'cc -c' command. For example, it will use the recipe 'cc -c main.c -o main.o' to compile 'main.c' into 'main.o'. We can therefore omit the recipes from the rules for the object files. *Note Using Implicit Rules: Implicit Rules. When a '.c' file is used automatically in this way, it is also automatically added to the list of prerequisites. We can therefore omit the '.c' files from the prerequisites, provided we omit the recipe. Here is the entire example, with both of these changes, and a variable 'objects' as suggested above: objects = main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o edit : $(objects) cc -o edit $(objects) main.o : defs.h kbd.o : defs.h command.h command.o : defs.h command.h display.o : defs.h buffer.h insert.o : defs.h buffer.h search.o : defs.h buffer.h files.o : defs.h buffer.h command.h utils.o : defs.h .PHONY : clean clean : rm edit $(objects) This is how we would write the makefile in actual practice. (The complications associated with 'clean' are described elsewhere. See *note Phony Targets::, and *note Errors in Recipes: Errors.) Because implicit rules are so convenient, they are important. You will see them used frequently.  File: make.info, Node: Combine By Prerequisite, Next: Cleanup, Prev: make Deduces, Up: Introduction 2.6 Another Style of Makefile ============================= When the objects of a makefile are created only by implicit rules, an alternative style of makefile is possible. In this style of makefile, you group entries by their prerequisites instead of by their targets. Here is what one looks like: objects = main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o edit : $(objects) cc -o edit $(objects) $(objects) : defs.h kbd.o command.o files.o : command.h display.o insert.o search.o files.o : buffer.h Here 'defs.h' is given as a prerequisite of all the object files; 'command.h' and 'buffer.h' are prerequisites of the specific object files listed for them. Whether this is better is a matter of taste: it is more compact, but some people dislike it because they find it clearer to put all the information about each target in one place.  File: make.info, Node: Cleanup, Prev: Combine By Prerequisite, Up: Introduction 2.7 Rules for Cleaning the Directory ==================================== Compiling a program is not the only thing you might want to write rules for. Makefiles commonly tell how to do a few other things besides compiling a program: for example, how to delete all the object files and executables so that the directory is 'clean'. Here is how we could write a 'make' rule for cleaning our example editor: clean: rm edit $(objects) In practice, we might want to write the rule in a somewhat more complicated manner to handle unanticipated situations. We would do this: .PHONY : clean clean : -rm edit $(objects) This prevents 'make' from getting confused by an actual file called 'clean' and causes it to continue in spite of errors from 'rm'. (See *note Phony Targets::, and *note Errors in Recipes: Errors.) A rule such as this should not be placed at the beginning of the makefile, because we do not want it to run by default! Thus, in the example makefile, we want the rule for 'edit', which recompiles the editor, to remain the default goal. Since 'clean' is not a prerequisite of 'edit', this rule will not run at all if we give the command 'make' with no arguments. In order to make the rule run, we have to type 'make clean'. *Note How to Run 'make': Running.  File: make.info, Node: Makefiles, Next: Rules, Prev: Introduction, Up: Top 3 Writing Makefiles ******************* The information that tells 'make' how to recompile a system comes from reading a data base called the "makefile". * Menu: * Makefile Contents:: What makefiles contain. * Makefile Names:: How to name your makefile. * Include:: How one makefile can use another makefile. * MAKEFILES Variable:: The environment can specify extra makefiles. * Remaking Makefiles:: How makefiles get remade. * Overriding Makefiles:: How to override part of one makefile with another makefile. * Reading Makefiles:: How makefiles are read in. * Parsing Makefiles:: How makefiles are parsed. * Secondary Expansion:: How and when secondary expansion is performed.  File: make.info, Node: Makefile Contents, Next: Makefile Names, Prev: Makefiles, Up: Makefiles 3.1 What Makefiles Contain ========================== Makefiles contain five kinds of things: "explicit rules", "implicit rules", "variable definitions", "directives", and "comments". Rules, variables, and directives are described at length in later chapters. * An "explicit rule" says when and how to remake one or more files, called the rule's "targets". It lists the other files that the targets depend on, called the "prerequisites" of the target, and may also give a recipe to use to create or update the targets. *Note Writing Rules: Rules. * An "implicit rule" says when and how to remake a class of files based on their names. It describes how a target may depend on a file with a name similar to the target and gives a recipe to create or update such a target. *Note Using Implicit Rules: Implicit Rules. * A "variable definition" is a line that specifies a text string value for a variable that can be substituted into the text later. The simple makefile example shows a variable definition for 'objects' as a list of all object files (*note Variables Make Makefiles Simpler: Variables Simplify.). * A "directive" is an instruction for 'make' to do something special while reading the makefile. These include: * Reading another makefile (*note Including Other Makefiles: Include.). * Deciding (based on the values of variables) whether to use or ignore a part of the makefile (*note Conditional Parts of Makefiles: Conditionals.). * Defining a variable from a verbatim string containing multiple lines (*note Defining Multi-Line Variables: Multi-Line.). * '#' in a line of a makefile starts a "comment". It and the rest of the line are ignored, except that a trailing backslash not escaped by another backslash will continue the comment across multiple lines. A line containing just a comment (with perhaps spaces before it) is effectively blank, and is ignored. If you want a literal '#', escape it with a backslash (e.g., '\#'). Comments may appear on any line in the makefile, although they are treated specially in certain situations. You cannot use comments within variable references or function calls: any instance of '#' will be treated literally (rather than as the start of a comment) inside a variable reference or function call. Comments within a recipe are passed to the shell, just as with any other recipe text. The shell decides how to interpret it: whether or not this is a comment is up to the shell. Within a 'define' directive, comments are not ignored during the definition of the variable, but rather kept intact in the value of the variable. When the variable is expanded they will either be treated as 'make' comments or as recipe text, depending on the context in which the variable is evaluated. * Menu: * Splitting Lines:: Splitting long lines in makefiles  File: make.info, Node: Splitting Lines, Prev: Makefile Contents, Up: Makefile Contents 3.1.1 Splitting Long Lines -------------------------- Makefiles use a "line-based" syntax in which the newline character is special and marks the end of a statement. GNU 'make' has no limit on the length of a statement line, up to the amount of memory in your computer. However, it is difficult to read lines which are too long to display without wrapping or scrolling. So, you can format your makefiles for readability by adding newlines into the middle of a statement: you do this by escaping the internal newlines with a backslash ('\') character. Where we need to make a distinction we will refer to "physical lines" as a single line ending with a newline (regardless of whether it is escaped) and a "logical line" being a complete statement including all escaped newlines up to the first non-escaped newline. The way in which backslash/newline combinations are handled depends on whether the statement is a recipe line or a non-recipe line. Handling of backslash/newline in a recipe line is discussed later (*note Splitting Recipe Lines::). Outside of recipe lines, backslash/newlines are converted into a single space character. Once that is done, all whitespace around the backslash/newline is condensed into a single space: this includes all whitespace preceding the backslash, all whitespace at the beginning of the line after the backslash/newline, and any consecutive backslash/newline combinations. If the '.POSIX' special target is defined then backslash/newline handling is modified slightly to conform to POSIX.2: first, whitespace preceding a backslash is not removed and second, consecutive backslash/newlines are not condensed. Splitting Without Adding Whitespace ................................... If you need to split a line but do _not_ want any whitespace added, you can utilize a subtle trick: replace your backslash/newline pairs with the three characters dollar sign/backslash/newline: var := one$\ word After 'make' removes the backslash/newline and condenses the following line into a single space, this is equivalent to: var := one$ word Then 'make' will perform variable expansion. The variable reference '$ ' refers to a variable with the one-character name " " (space) which does not exist, and so expands to the empty string, giving a final assignment which is the equivalent of: var := oneword  File: make.info, Node: Makefile Names, Next: Include, Prev: Makefile Contents, Up: Makefiles 3.2 What Name to Give Your Makefile =================================== By default, when 'make' looks for the makefile, it tries the following names, in order: 'GNUmakefile', 'makefile' and 'Makefile'. Normally you should call your makefile either 'makefile' or 'Makefile'. (We recommend 'Makefile' because it appears prominently near the beginning of a directory listing, right near other important files such as 'README'.) The first name checked, 'GNUmakefile', is not recommended for most makefiles. You should use this name if you have a makefile that is specific to GNU 'make', and will not be understood by other versions of 'make'. Other 'make' programs look for 'makefile' and 'Makefile', but not 'GNUmakefile'. If 'make' finds none of these names, it does not use any makefile. Then you must specify a goal with a command argument, and 'make' will attempt to figure out how to remake it using only its built-in implicit rules. *Note Using Implicit Rules: Implicit Rules. If you want to use a nonstandard name for your makefile, you can specify the makefile name with the '-f' or '--file' option. The arguments '-f NAME' or '--file=NAME' tell 'make' to read the file NAME as the makefile. If you use more than one '-f' or '--file' option, you can specify several makefiles. All the makefiles are effectively concatenated in the order specified. The default makefile names 'GNUmakefile', 'makefile' and 'Makefile' are not checked automatically if you specify '-f' or '--file'.  File: make.info, Node: Include, Next: MAKEFILES Variable, Prev: Makefile Names, Up: Makefiles 3.3 Including Other Makefiles ============================= The 'include' directive tells 'make' to suspend reading the current makefile and read one or more other makefiles before continuing. The directive is a line in the makefile that looks like this: include FILENAMES... FILENAMES can contain shell file name patterns. If FILENAMES is empty, nothing is included and no error is printed. Extra spaces are allowed and ignored at the beginning of the line, but the first character must not be a tab (or the value of '.RECIPEPREFIX')--if the line begins with a tab, it will be considered a recipe line. Whitespace is required between 'include' and the file names, and between file names; extra whitespace is ignored there and at the end of the directive. A comment starting with '#' is allowed at the end of the line. If the file names contain any variable or function references, they are expanded. *Note How to Use Variables: Using Variables. For example, if you have three '.mk' files, 'a.mk', 'b.mk', and 'c.mk', and '$(bar)' expands to 'bish bash', then the following expression include foo *.mk $(bar) is equivalent to include foo a.mk b.mk c.mk bish bash When 'make' processes an 'include' directive, it suspends reading of the containing makefile and reads from each listed file in turn. When that is finished, 'make' resumes reading the makefile in which the directive appears. One occasion for using 'include' directives is when several programs, handled by individual makefiles in various directories, need to use a common set of variable definitions (*note Setting Variables: Setting.) or pattern rules (*note Defining and Redefining Pattern Rules: Pattern Rules.). Another such occasion is when you want to generate prerequisites from source files automatically; the prerequisites can be put in a file that is included by the main makefile. This practice is generally cleaner than that of somehow appending the prerequisites to the end of the main makefile as has been traditionally done with other versions of 'make'. *Note Automatic Prerequisites::. If the specified name does not start with a slash, and the file is not found in the current directory, several other directories are searched. First, any directories you have specified with the '-I' or '--include-dir' option are searched (*note Summary of Options: Options Summary.). Then the following directories (if they exist) are searched, in this order: 'PREFIX/include' (normally '/usr/local/include' (1)) '/usr/gnu/include', '/usr/local/include', '/usr/include'. If an included makefile cannot be found in any of these directories, a warning message is generated, but it is not an immediately fatal error; processing of the makefile containing the 'include' continues. Once it has finished reading makefiles, 'make' will try to remake any that are out of date or don't exist. *Note How Makefiles Are Remade: Remaking Makefiles. Only after it has tried to find a way to remake a makefile and failed, will 'make' diagnose the missing makefile as a fatal error. If you want 'make' to simply ignore a makefile which does not exist or cannot be remade, with no error message, use the '-include' directive instead of 'include', like this: -include FILENAMES... This acts like 'include' in every way except that there is no error (not even a warning) if any of the FILENAMES (or any prerequisites of any of the FILENAMES) do not exist or cannot be remade. For compatibility with some other 'make' implementations, 'sinclude' is another name for '-include'. ---------- Footnotes ---------- (1) GNU Make compiled for MS-DOS and MS-Windows behaves as if PREFIX has been defined to be the root of the DJGPP tree hierarchy.  File: make.info, Node: MAKEFILES Variable, Next: Remaking Makefiles, Prev: Include, Up: Makefiles 3.4 The Variable 'MAKEFILES' ============================ If the environment variable 'MAKEFILES' is defined, 'make' considers its value as a list of names (separated by whitespace) of additional makefiles to be read before the others. This works much like the 'include' directive: various directories are searched for those files (*note Including Other Makefiles: Include.). In addition, the default goal is never taken from one of these makefiles (or any makefile included by them) and it is not an error if the files listed in 'MAKEFILES' are not found. The main use of 'MAKEFILES' is in communication between recursive invocations of 'make' (*note Recursive Use of 'make': Recursion.). It usually is not desirable to set the environment variable before a top-level invocation of 'make', because it is usually better not to mess with a makefile from outside. However, if you are running 'make' without a specific makefile, a makefile in 'MAKEFILES' can do useful things to help the built-in implicit rules work better, such as defining search paths (*note Directory Search::). Some users are tempted to set 'MAKEFILES' in the environment automatically on login, and program makefiles to expect this to be done. This is a very bad idea, because such makefiles will fail to work if run by anyone else. It is much better to write explicit 'include' directives in the makefiles. *Note Including Other Makefiles: Include.  File: make.info, Node: Remaking Makefiles, Next: Overriding Makefiles, Prev: MAKEFILES Variable, Up: Makefiles 3.5 How Makefiles Are Remade ============================ Sometimes makefiles can be remade from other files, such as RCS or SCCS files. If a makefile can be remade from other files, you probably want 'make' to get an up-to-date version of the makefile to read in. To this end, after reading in all makefiles 'make' will consider each as a goal target and attempt to update it. If a makefile has a rule which says how to update it (found either in that very makefile or in another one) or if an implicit rule applies to it (*note Using Implicit Rules: Implicit Rules.), it will be updated if necessary. After all makefiles have been checked, if any have actually been changed, 'make' starts with a clean slate and reads all the makefiles over again. (It will also attempt to update each of them over again, but normally this will not change them again, since they are already up to date.) Each restart will cause the special variable 'MAKE_RESTARTS' to be updated (*note Special Variables::). If you know that one or more of your makefiles cannot be remade and you want to keep 'make' from performing an implicit rule search on them, perhaps for efficiency reasons, you can use any normal method of preventing implicit rule look-up to do so. For example, you can write an explicit rule with the makefile as the target, and an empty recipe (*note Using Empty Recipes: Empty Recipes.). If the makefiles specify a double-colon rule to remake a file with a recipe but no prerequisites, that file will always be remade (*note Double-Colon::). In the case of makefiles, a makefile that has a double-colon rule with a recipe but no prerequisites will be remade every time 'make' is run, and then again after 'make' starts over and reads the makefiles in again. This would cause an infinite loop: 'make' would constantly remake the makefile, and never do anything else. So, to avoid this, 'make' will *not* attempt to remake makefiles which are specified as targets of a double-colon rule with a recipe but no prerequisites. If you do not specify any makefiles to be read with '-f' or '--file' options, 'make' will try the default makefile names; *note What Name to Give Your Makefile: Makefile Names. Unlike makefiles explicitly requested with '-f' or '--file' options, 'make' is not certain that these makefiles should exist. However, if a default makefile does not exist but can be created by running 'make' rules, you probably want the rules to be run so that the makefile can be used. Therefore, if none of the default makefiles exists, 'make' will try to make each of them in the same order in which they are searched for (*note What Name to Give Your Makefile: Makefile Names.) until it succeeds in making one, or it runs out of names to try. Note that it is not an error if 'make' cannot find or make any makefile; a makefile is not always necessary. When you use the '-t' or '--touch' option (*note Instead of Executing Recipes: Instead of Execution.), you would not want to use an out-of-date makefile to decide which targets to touch. So the '-t' option has no effect on updating makefiles; they are really updated even if '-t' is specified. Likewise, '-q' (or '--question') and '-n' (or '--just-print') do not prevent updating of makefiles, because an out-of-date makefile would result in the wrong output for other targets. Thus, 'make -f mfile -n foo' will update 'mfile', read it in, and then print the recipe to update 'foo' and its prerequisites without running it. The recipe printed for 'foo' will be the one specified in the updated contents of 'mfile'. However, on occasion you might actually wish to prevent updating of even the makefiles. You can do this by specifying the makefiles as goals in the command line as well as specifying them as makefiles. When the makefile name is specified explicitly as a goal, the options '-t' and so on do apply to them. Thus, 'make -f mfile -n mfile foo' would read the makefile 'mfile', print the recipe needed to update it without actually running it, and then print the recipe needed to update 'foo' without running that. The recipe for 'foo' will be the one specified by the existing contents of 'mfile'.  File: make.info, Node: Overriding Makefiles, Next: Reading Makefiles, Prev: Remaking Makefiles, Up: Makefiles 3.6 Overriding Part of Another Makefile ======================================= Sometimes it is useful to have a makefile that is mostly just like another makefile. You can often use the 'include' directive to include one in the other, and add more targets or variable definitions. However, it is invalid for two makefiles to give different recipes for the same target. But there is another way. In the containing makefile (the one that wants to include the other), you can use a match-anything pattern rule to say that to remake any target that cannot be made from the information in the containing makefile, 'make' should look in another makefile. *Note Pattern Rules::, for more information on pattern rules. For example, if you have a makefile called 'Makefile' that says how to make the target 'foo' (and other targets), you can write a makefile called 'GNUmakefile' that contains: foo: frobnicate > foo %: force @$(MAKE) -f Makefile $@ force: ; If you say 'make foo', 'make' will find 'GNUmakefile', read it, and see that to make 'foo', it needs to run the recipe 'frobnicate > foo'. If you say 'make bar', 'make' will find no way to make 'bar' in 'GNUmakefile', so it will use the recipe from the pattern rule: 'make -f Makefile bar'. If 'Makefile' provides a rule for updating 'bar', 'make' will apply the rule. And likewise for any other target that 'GNUmakefile' does not say how to make. The way this works is that the pattern rule has a pattern of just '%', so it matches any target whatever. The rule specifies a prerequisite 'force', to guarantee that the recipe will be run even if the target file already exists. We give the 'force' target an empty recipe to prevent 'make' from searching for an implicit rule to build it--otherwise it would apply the same match-anything rule to 'force' itself and create a prerequisite loop!  File: make.info, Node: Reading Makefiles, Next: Parsing Makefiles, Prev: Overriding Makefiles, Up: Makefiles 3.7 How 'make' Reads a Makefile =============================== GNU 'make' does its work in two distinct phases. During the first phase it reads all the makefiles, included makefiles, etc. and internalizes all the variables and their values and implicit and explicit rules, and builds a dependency graph of all the targets and their prerequisites. During the second phase, 'make' uses this internalized data to determine which targets need to be updated and run the recipes necessary to update them. It's important to understand this two-phase approach because it has a direct impact on how variable and function expansion happens; this is often a source of some confusion when writing makefiles. Below is a summary of the different constructs that can be found in a makefile, and the phase in which expansion happens for each part of the construct. We say that expansion is "immediate" if it happens during the first phase: 'make' will expand that part of the construct as the makefile is parsed. We say that expansion is "deferred" if it is not immediate. Expansion of a deferred construct part is delayed until the expansion is used: either when it is referenced in an immediate context, or when it is needed during the second phase. You may not be familiar with some of these constructs yet. You can reference this section as you become familiar with them, in later chapters. Variable Assignment ------------------- Variable definitions are parsed as follows: IMMEDIATE = DEFERRED IMMEDIATE ?= DEFERRED IMMEDIATE := IMMEDIATE IMMEDIATE ::= IMMEDIATE IMMEDIATE += DEFERRED or IMMEDIATE IMMEDIATE != IMMEDIATE define IMMEDIATE DEFERRED endef define IMMEDIATE = DEFERRED endef define IMMEDIATE ?= DEFERRED endef define IMMEDIATE := IMMEDIATE endef define IMMEDIATE ::= IMMEDIATE endef define IMMEDIATE += DEFERRED or IMMEDIATE endef define IMMEDIATE != IMMEDIATE endef For the append operator '+=', the right-hand side is considered immediate if the variable was previously set as a simple variable (':=' or '::='), and deferred otherwise. For the shell assignment operator '!=', the right-hand side is evaluated immediately and handed to the shell. The result is stored in the variable named on the left, and that variable becomes a simple variable (and will thus be re-evaluated on each reference). Conditional Directives ---------------------- Conditional directives are parsed immediately. This means, for example, that automatic variables cannot be used in conditional directives, as automatic variables are not set until the recipe for that rule is invoked. If you need to use automatic variables in a conditional directive you _must_ move the condition into the recipe and use shell conditional syntax instead. Rule Definition --------------- A rule is always expanded the same way, regardless of the form: IMMEDIATE : IMMEDIATE ; DEFERRED DEFERRED That is, the target and prerequisite sections are expanded immediately, and the recipe used to build the target is always deferred. This is true for explicit rules, pattern rules, suffix rules, static pattern rules, and simple prerequisite definitions.  File: make.info, Node: Parsing Makefiles, Next: Secondary Expansion, Prev: Reading Makefiles, Up: Makefiles 3.8 How Makefiles Are Parsed ============================ GNU 'make' parses makefiles line-by-line. Parsing proceeds using the following steps: 1. Read in a full logical line, including backslash-escaped lines (*note Splitting Long Lines: Splitting Lines.). 2. Remove comments (*note What Makefiles Contain: Makefile Contents.). 3. If the line begins with the recipe prefix character and we are in a rule context, add the line to the current recipe and read the next line (*note Recipe Syntax::). 4. Expand elements of the line which appear in an _immediate_ expansion context (*note How 'make' Reads a Makefile: Reading Makefiles.). 5. Scan the line for a separator character, such as ':' or '=', to determine whether the line is a macro assignment or a rule (*note Recipe Syntax::). 6. Internalize the resulting operation and read the next line. An important consequence of this is that a macro can expand to an entire rule, _if it is one line long_. This will work: myrule = target : ; echo built $(myrule) However, this will not work because 'make' does not re-split lines after it has expanded them: define myrule target: echo built endef $(myrule) The above makefile results in the definition of a target 'target' with prerequisites 'echo' and 'built', as if the makefile contained 'target: echo built', rather than a rule with a recipe. Newlines still present in a line after expansion is complete are ignored as normal whitespace. In order to properly expand a multi-line macro you must use the 'eval' function: this causes the 'make' parser to be run on the results of the expanded macro (*note Eval Function::).  File: make.info, Node: Secondary Expansion, Prev: Parsing Makefiles, Up: Makefiles 3.9 Secondary Expansion ======================= Previously we learned that GNU 'make' works in two distinct phases: a read-in phase and a target-update phase (*note How 'make' Reads a Makefile: Reading Makefiles.). GNU make also has the ability to enable a _second expansion_ of the prerequisites (only) for some or all targets defined in the makefile. In order for this second expansion to occur, the special target '.SECONDEXPANSION' must be defined before the first prerequisite list that makes use of this feature. If that special target is defined then in between the two phases mentioned above, right at the end of the read-in phase, all the prerequisites of the targets defined after the special target are expanded a _second time_. In most circumstances this secondary expansion will have no effect, since all variable and function references will have been expanded during the initial parsing of the makefiles. In order to take advantage of the secondary expansion phase of the parser, then, it's necessary to _escape_ the variable or function reference in the makefile. In this case the first expansion merely un-escapes the reference but doesn't expand it, and expansion is left to the secondary expansion phase. For example, consider this makefile: .SECONDEXPANSION: ONEVAR = onefile TWOVAR = twofile myfile: $(ONEVAR) $$(TWOVAR) After the first expansion phase the prerequisites list of the 'myfile' target will be 'onefile' and '$(TWOVAR)'; the first (unescaped) variable reference to ONEVAR is expanded, while the second (escaped) variable reference is simply unescaped, without being recognized as a variable reference. Now during the secondary expansion the first word is expanded again but since it contains no variable or function references it remains the value 'onefile', while the second word is now a normal reference to the variable TWOVAR, which is expanded to the value 'twofile'. The final result is that there are two prerequisites, 'onefile' and 'twofile'. Obviously, this is not a very interesting case since the same result could more easily have been achieved simply by having both variables appear, unescaped, in the prerequisites list. One difference becomes apparent if the variables are reset; consider this example: .SECONDEXPANSION: AVAR = top onefile: $(AVAR) twofile: $$(AVAR) AVAR = bottom Here the prerequisite of 'onefile' will be expanded immediately, and resolve to the value 'top', while the prerequisite of 'twofile' will not be full expanded until the secondary expansion and yield a value of 'bottom'. This is marginally more exciting, but the true power of this feature only becomes apparent when you discover that secondary expansions always take place within the scope of the automatic variables for that target. This means that you can use variables such as '$@', '$*', etc. during the second expansion and they will have their expected values, just as in the recipe. All you have to do is defer the expansion by escaping the '$'. Also, secondary expansion occurs for both explicit and implicit (pattern) rules. Knowing this, the possible uses for this feature increase dramatically. For example: .SECONDEXPANSION: main_OBJS := main.o try.o test.o lib_OBJS := lib.o api.o main lib: $$($$@_OBJS) Here, after the initial expansion the prerequisites of both the 'main' and 'lib' targets will be '$($@_OBJS)'. During the secondary expansion, the '$@' variable is set to the name of the target and so the expansion for the 'main' target will yield '$(main_OBJS)', or 'main.o try.o test.o', while the secondary expansion for the 'lib' target will yield '$(lib_OBJS)', or 'lib.o api.o'. You can also mix in functions here, as long as they are properly escaped: main_SRCS := main.c try.c test.c lib_SRCS := lib.c api.c .SECONDEXPANSION: main lib: $$(patsubst %.c,%.o,$$($$@_SRCS)) This version allows users to specify source files rather than object files, but gives the same resulting prerequisites list as the previous example. Evaluation of automatic variables during the secondary expansion phase, especially of the target name variable '$$@', behaves similarly to evaluation within recipes. However, there are some subtle differences and "corner cases" which come into play for the different types of rule definitions that 'make' understands. The subtleties of using the different automatic variables are described below. Secondary Expansion of Explicit Rules ------------------------------------- During the secondary expansion of explicit rules, '$$@' and '$$%' evaluate, respectively, to the file name of the target and, when the target is an archive member, the target member name. The '$$<' variable evaluates to the first prerequisite in the first rule for this target. '$$^' and '$$+' evaluate to the list of all prerequisites of rules _that have already appeared_ for the same target ('$$+' with repetitions and '$$^' without). The following example will help illustrate these behaviors: .SECONDEXPANSION: foo: foo.1 bar.1 $$< $$^ $$+ # line #1 foo: foo.2 bar.2 $$< $$^ $$+ # line #2 foo: foo.3 bar.3 $$< $$^ $$+ # line #3 In the first prerequisite list, all three variables ('$$<', '$$^', and '$$+') expand to the empty string. In the second, they will have values 'foo.1', 'foo.1 bar.1', and 'foo.1 bar.1' respectively. In the third they will have values 'foo.1', 'foo.1 bar.1 foo.2 bar.2', and 'foo.1 bar.1 foo.2 bar.2 foo.1 foo.1 bar.1 foo.1 bar.1' respectively. Rules undergo secondary expansion in makefile order, except that the rule with the recipe is always evaluated last. The variables '$$?' and '$$*' are not available and expand to the empty string. Secondary Expansion of Static Pattern Rules ------------------------------------------- Rules for secondary expansion of static pattern rules are identical to those for explicit rules, above, with one exception: for static pattern rules the '$$*' variable is set to the pattern stem. As with explicit rules, '$$?' is not available and expands to the empty string. Secondary Expansion of Implicit Rules ------------------------------------- As 'make' searches for an implicit rule, it substitutes the stem and then performs secondary expansion for every rule with a matching target pattern. The value of the automatic variables is derived in the same fashion as for static pattern rules. As an example: .SECONDEXPANSION: foo: bar foo foz: fo%: bo% %oo: $$< $$^ $$+ $$* When the implicit rule is tried for target 'foo', '$$<' expands to 'bar', '$$^' expands to 'bar boo', '$$+' also expands to 'bar boo', and '$$*' expands to 'f'. Note that the directory prefix (D), as described in *note Implicit Rule Search Algorithm: Implicit Rule Search, is appended (after expansion) to all the patterns in the prerequisites list. As an example: .SECONDEXPANSION: /tmp/foo.o: %.o: $$(addsuffix /%.c,foo bar) foo.h @echo $^ The prerequisite list printed, after the secondary expansion and directory prefix reconstruction, will be '/tmp/foo/foo.c /tmp/bar/foo.c foo.h'. If you are not interested in this reconstruction, you can use '$$*' instead of '%' in the prerequisites list.  File: make.info, Node: Rules, Next: Recipes, Prev: Makefiles, Up: Top 4 Writing Rules *************** A "rule" appears in the makefile and says when and how to remake certain files, called the rule's "targets" (most often only one per rule). It lists the other files that are the "prerequisites" of the target, and the "recipe" to use to create or update the target. The order of rules is not significant, except for determining the "default goal": the target for 'make' to consider, if you do not otherwise specify one. The default goal is the target of the first rule in the first makefile. If the first rule has multiple targets, only the first target is taken as the default. There are two exceptions: a target starting with a period is not a default unless it contains one or more slashes, '/', as well; and, a target that defines a pattern rule has no effect on the default goal. (*Note Defining and Redefining Pattern Rules: Pattern Rules.) Therefore, we usually write the makefile so that the first rule is the one for compiling the entire program or all the programs described by the makefile (often with a target called 'all'). *Note Arguments to Specify the Goals: Goals. * Menu: * Rule Example:: An example explained. * Rule Syntax:: General syntax explained. * Prerequisite Types:: There are two types of prerequisites. * Wildcards:: Using wildcard characters such as '*'. * Directory Search:: Searching other directories for source files. * Phony Targets:: Using a target that is not a real file's name. * Force Targets:: You can use a target without a recipe or prerequisites to mark other targets as phony. * Empty Targets:: When only the date matters and the files are empty. * Special Targets:: Targets with special built-in meanings. * Multiple Targets:: When to make use of several targets in a rule. * Multiple Rules:: How to use several rules with the same target. * Static Pattern:: Static pattern rules apply to multiple targets and can vary the prerequisites according to the target name. * Double-Colon:: How to use a special kind of rule to allow several independent rules for one target. * Automatic Prerequisites:: How to automatically generate rules giving prerequisites from source files themselves.  File: make.info, Node: Rule Example, Next: Rule Syntax, Prev: Rules, Up: Rules 4.1 Rule Example ================ Here is an example of a rule: foo.o : foo.c defs.h # module for twiddling the frobs cc -c -g foo.c Its target is 'foo.o' and its prerequisites are 'foo.c' and 'defs.h'. It has one command in the recipe: 'cc -c -g foo.c'. The recipe starts with a tab to identify it as a recipe. This rule says two things: * How to decide whether 'foo.o' is out of date: it is out of date if it does not exist, or if either 'foo.c' or 'defs.h' is more recent than it. * How to update the file 'foo.o': by running 'cc' as stated. The recipe does not explicitly mention 'defs.h', but we presume that 'foo.c' includes it, and that is why 'defs.h' was added to the prerequisites.  File: make.info, Node: Rule Syntax, Next: Prerequisite Types, Prev: Rule Example, Up: Rules 4.2 Rule Syntax =============== In general, a rule looks like this: TARGETS : PREREQUISITES RECIPE ... or like this: TARGETS : PREREQUISITES ; RECIPE RECIPE ... The TARGETS are file names, separated by spaces. Wildcard characters may be used (*note Using Wildcard Characters in File Names: Wildcards.) and a name of the form 'A(M)' represents member M in archive file A (*note Archive Members as Targets: Archive Members.). Usually there is only one target per rule, but occasionally there is a reason to have more (*note Multiple Targets in a Rule: Multiple Targets.). The RECIPE lines start with a tab character (or the first character in the value of the '.RECIPEPREFIX' variable; *note Special Variables::). The first recipe line may appear on the line after the prerequisites, with a tab character, or may appear on the same line, with a semicolon. Either way, the effect is the same. There are other differences in the syntax of recipes. *Note Writing Recipes in Rules: Recipes. Because dollar signs are used to start 'make' variable references, if you really want a dollar sign in a target or prerequisite you must write two of them, '$$' (*note How to Use Variables: Using Variables.). If you have enabled secondary expansion (*note Secondary Expansion::) and you want a literal dollar sign in the prerequisites list, you must actually write _four_ dollar signs ('$$$$'). You may split a long line by inserting a backslash followed by a newline, but this is not required, as 'make' places no limit on the length of a line in a makefile. A rule tells 'make' two things: when the targets are out of date, and how to update them when necessary. The criterion for being out of date is specified in terms of the PREREQUISITES, which consist of file names separated by spaces. (Wildcards and archive members (*note Archives::) are allowed here too.) A target is out of date if it does not exist or if it is older than any of the prerequisites (by comparison of last-modification times). The idea is that the contents of the target file are computed based on information in the prerequisites, so if any of the prerequisites changes, the contents of the existing target file are no longer necessarily valid. How to update is specified by a RECIPE. This is one or more lines to be executed by the shell (normally 'sh'), but with some extra features (*note Writing Recipes in Rules: Recipes.).  File: make.info, Node: Prerequisite Types, Next: Wildcards, Prev: Rule Syntax, Up: Rules 4.3 Types of Prerequisites ========================== There are actually two different types of prerequisites understood by GNU 'make': normal prerequisites such as described in the previous section, and "order-only" prerequisites. A normal prerequisite makes two statements: first, it imposes an order in which recipes will be invoked: the recipes for all prerequisites of a target will be completed before the recipe for the target is run. Second, it imposes a dependency relationship: if any prerequisite is newer than the target, then the target is considered out-of-date and must be rebuilt. Normally, this is exactly what you want: if a target's prerequisite is updated, then the target should also be updated. Occasionally, however, you have a situation where you want to impose a specific ordering on the rules to be invoked _without_ forcing the target to be updated if one of those rules is executed. In that case, you want to define "order-only" prerequisites. Order-only prerequisites can be specified by placing a pipe symbol ('|') in the prerequisites list: any prerequisites to the left of the pipe symbol are normal; any prerequisites to the right are order-only: TARGETS : NORMAL-PREREQUISITES | ORDER-ONLY-PREREQUISITES The normal prerequisites section may of course be empty. Also, you may still declare multiple lines of prerequisites for the same target: they are appended appropriately (normal prerequisites are appended to the list of normal prerequisites; order-only prerequisites are appended to the list of order-only prerequisites). Note that if you declare the same file to be both a normal and an order-only prerequisite, the normal prerequisite takes precedence (since they have a strict superset of the behavior of an order-only prerequisite). Consider an example where your targets are to be placed in a separate directory, and that directory might not exist before 'make' is run. In this situation, you want the directory to be created before any targets are placed into it but, because the timestamps on directories change whenever a file is added, removed, or renamed, we certainly don't want to rebuild all the targets whenever the directory's timestamp changes. One way to manage this is with order-only prerequisites: make the directory an order-only prerequisite on all the targets: OBJDIR := objdir OBJS := $(addprefix $(OBJDIR)/,foo.o bar.o baz.o) $(OBJDIR)/%.o : %.c $(COMPILE.c) $(OUTPUT_OPTION) $< all: $(OBJS) $(OBJS): | $(OBJDIR) $(OBJDIR): mkdir $(OBJDIR) Now the rule to create the 'objdir' directory will be run, if needed, before any '.o' is built, but no '.o' will be built because the 'objdir' directory timestamp changed.  File: make.info, Node: Wildcards, Next: Directory Search, Prev: Prerequisite Types, Up: Rules 4.4 Using Wildcard Characters in File Names =========================================== A single file name can specify many files using "wildcard characters". The wildcard characters in 'make' are '*', '?' and '[...]', the same as in the Bourne shell. For example, '*.c' specifies a list of all the files (in the working directory) whose names end in '.c'. The character '~' at the beginning of a file name also has special significance. If alone, or followed by a slash, it represents your home directory. For example '~/bin' expands to '/home/you/bin'. If the '~' is followed by a word, the string represents the home directory of the user named by that word. For example '~john/bin' expands to '/home/john/bin'. On systems which don't have a home directory for each user (such as MS-DOS or MS-Windows), this functionality can be simulated by setting the environment variable HOME. Wildcard expansion is performed by 'make' automatically in targets and in prerequisites. In recipes, the shell is responsible for wildcard expansion. In other contexts, wildcard expansion happens only if you request it explicitly with the 'wildcard' function. The special significance of a wildcard character can be turned off by preceding it with a backslash. Thus, 'foo\*bar' would refer to a specific file whose name consists of 'foo', an asterisk, and 'bar'. * Menu: * Wildcard Examples:: Several examples. * Wildcard Pitfall:: Problems to avoid. * Wildcard Function:: How to cause wildcard expansion where it does not normally take place.  File: make.info, Node: Wildcard Examples, Next: Wildcard Pitfall, Prev: Wildcards, Up: Wildcards 4.4.1 Wildcard Examples ----------------------- Wildcards can be used in the recipe of a rule, where they are expanded by the shell. For example, here is a rule to delete all the object files: clean: rm -f *.o Wildcards are also useful in the prerequisites of a rule. With the following rule in the makefile, 'make print' will print all the '.c' files that have changed since the last time you printed them: print: *.c lpr -p $? touch print This rule uses 'print' as an empty target file; see *note Empty Target Files to Record Events: Empty Targets. (The automatic variable '$?' is used to print only those files that have changed; see *note Automatic Variables::.) Wildcard expansion does not happen when you define a variable. Thus, if you write this: objects = *.o then the value of the variable 'objects' is the actual string '*.o'. However, if you use the value of 'objects' in a target or prerequisite, wildcard expansion will take place there. If you use the value of 'objects' in a recipe, the shell may perform wildcard expansion when the recipe runs. To set 'objects' to the expansion, instead use: objects := $(wildcard *.o) *Note Wildcard Function::.  File: make.info, Node: Wildcard Pitfall, Next: Wildcard Function, Prev: Wildcard Examples, Up: Wildcards 4.4.2 Pitfalls of Using Wildcards --------------------------------- Now here is an example of a naive way of using wildcard expansion, that does not do what you would intend. Suppose you would like to say that the executable file 'foo' is made from all the object files in the directory, and you write this: objects = *.o foo : $(objects) cc -o foo $(CFLAGS) $(objects) The value of 'objects' is the actual string '*.o'. Wildcard expansion happens in the rule for 'foo', so that each _existing_ '.o' file becomes a prerequisite of 'foo' and will be recompiled if necessary. But what if you delete all the '.o' files? When a wildcard matches no files, it is left as it is, so then 'foo' will depend on the oddly-named file '*.o'. Since no such file is likely to exist, 'make' will give you an error saying it cannot figure out how to make '*.o'. This is not what you want! Actually it is possible to obtain the desired result with wildcard expansion, but you need more sophisticated techniques, including the 'wildcard' function and string substitution. *Note The Function 'wildcard': Wildcard Function. Microsoft operating systems (MS-DOS and MS-Windows) use backslashes to separate directories in pathnames, like so: c:\foo\bar\baz.c This is equivalent to the Unix-style 'c:/foo/bar/baz.c' (the 'c:' part is the so-called drive letter). When 'make' runs on these systems, it supports backslashes as well as the Unix-style forward slashes in pathnames. However, this support does _not_ include the wildcard expansion, where backslash is a quote character. Therefore, you _must_ use Unix-style slashes in these cases.  File: make.info, Node: Wildcard Function, Prev: Wildcard Pitfall, Up: Wildcards 4.4.3 The Function 'wildcard' ----------------------------- Wildcard expansion happens automatically in rules. But wildcard expansion does not normally take place when a variable is set, or inside the arguments of a function. If you want to do wildcard expansion in such places, you need to use the 'wildcard' function, like this: $(wildcard PATTERN...) This string, used anywhere in a makefile, is replaced by a space-separated list of names of existing files that match one of the given file name patterns. If no existing file name matches a pattern, then that pattern is omitted from the output of the 'wildcard' function. Note that this is different from how unmatched wildcards behave in rules, where they are used verbatim rather than ignored (*note Wildcard Pitfall::). One use of the 'wildcard' function is to get a list of all the C source files in a directory, like this: $(wildcard *.c) We can change the list of C source files into a list of object files by replacing the '.c' suffix with '.o' in the result, like this: $(patsubst %.c,%.o,$(wildcard *.c)) (Here we have used another function, 'patsubst'. *Note Functions for String Substitution and Analysis: Text Functions.) Thus, a makefile to compile all C source files in the directory and then link them together could be written as follows: objects := $(patsubst %.c,%.o,$(wildcard *.c)) foo : $(objects) cc -o foo $(objects) (This takes advantage of the implicit rule for compiling C programs, so there is no need to write explicit rules for compiling the files. *Note The Two Flavors of Variables: Flavors, for an explanation of ':=', which is a variant of '='.)  File: make.info, Node: Directory Search, Next: Phony Targets, Prev: Wildcards, Up: Rules 4.5 Searching Directories for Prerequisites =========================================== For large systems, it is often desirable to put sources in a separate directory from the binaries. The "directory search" features of 'make' facilitate this by searching several directories automatically to find a prerequisite. When you redistribute the files among directories, you do not need to change the individual rules, just the search paths. * Menu: * General Search:: Specifying a search path that applies to every prerequisite. * Selective Search:: Specifying a search path for a specified class of names. * Search Algorithm:: When and how search paths are applied. * Recipes/Search:: How to write recipes that work together with search paths. * Implicit/Search:: How search paths affect implicit rules. * Libraries/Search:: Directory search for link libraries.  File: make.info, Node: General Search, Next: Selective Search, Prev: Directory Search, Up: Directory Search 4.5.1 'VPATH': Search Path for All Prerequisites ------------------------------------------------ The value of the 'make' variable 'VPATH' specifies a list of directories that 'make' should search. Most often, the directories are expected to contain prerequisite files that are not in the current directory; however, 'make' uses 'VPATH' as a search list for both prerequisites and targets of rules. Thus, if a file that is listed as a target or prerequisite does not exist in the current directory, 'make' searches the directories listed in 'VPATH' for a file with that name. If a file is found in one of them, that file may become the prerequisite (see below). Rules may then specify the names of files in the prerequisite list as if they all existed in the current directory. *Note Writing Recipes with Directory Search: Recipes/Search. In the 'VPATH' variable, directory names are separated by colons or blanks. The order in which directories are listed is the order followed by 'make' in its search. (On MS-DOS and MS-Windows, semi-colons are used as separators of directory names in 'VPATH', since the colon can be used in the pathname itself, after the drive letter.) For example, VPATH = src:../headers specifies a path containing two directories, 'src' and '../headers', which 'make' searches in that order. With this value of 'VPATH', the following rule, foo.o : foo.c is interpreted as if it were written like this: foo.o : src/foo.c assuming the file 'foo.c' does not exist in the current directory but is found in the directory 'src'.  File: make.info, Node: Selective Search, Next: Search Algorithm, Prev: General Search, Up: Directory Search 4.5.2 The 'vpath' Directive --------------------------- Similar to the 'VPATH' variable, but more selective, is the 'vpath' directive (note lower case), which allows you to specify a search path for a particular class of file names: those that match a particular pattern. Thus you can supply certain search directories for one class of file names and other directories (or none) for other file names. There are three forms of the 'vpath' directive: 'vpath PATTERN DIRECTORIES' Specify the search path DIRECTORIES for file names that match PATTERN. The search path, DIRECTORIES, is a list of directories to be searched, separated by colons (semi-colons on MS-DOS and MS-Windows) or blanks, just like the search path used in the 'VPATH' variable. 'vpath PATTERN' Clear out the search path associated with PATTERN. 'vpath' Clear all search paths previously specified with 'vpath' directives. A 'vpath' pattern is a string containing a '%' character. The string must match the file name of a prerequisite that is being searched for, the '%' character matching any sequence of zero or more characters (as in pattern rules; *note Defining and Redefining Pattern Rules: Pattern Rules.). For example, '%.h' matches files that end in '.h'. (If there is no '%', the pattern must match the prerequisite exactly, which is not useful very often.) '%' characters in a 'vpath' directive's pattern can be quoted with preceding backslashes ('\'). Backslashes that would otherwise quote '%' characters can be quoted with more backslashes. Backslashes that quote '%' characters or other backslashes are removed from the pattern before it is compared to file names. Backslashes that are not in danger of quoting '%' characters go unmolested. When a prerequisite fails to exist in the current directory, if the PATTERN in a 'vpath' directive matches the name of the prerequisite file, then the DIRECTORIES in that directive are searched just like (and before) the directories in the 'VPATH' variable. For example, vpath %.h ../headers tells 'make' to look for any prerequisite whose name ends in '.h' in the directory '../headers' if the file is not found in the current directory. If several 'vpath' patterns match the prerequisite file's name, then 'make' processes each matching 'vpath' directive one by one, searching all the directories mentioned in each directive. 'make' handles multiple 'vpath' directives in the order in which they appear in the makefile; multiple directives with the same pattern are independent of each other. Thus, vpath %.c foo vpath % blish vpath %.c bar will look for a file ending in '.c' in 'foo', then 'blish', then 'bar', while vpath %.c foo:bar vpath % blish will look for a file ending in '.c' in 'foo', then 'bar', then 'blish'.  File: make.info, Node: Search Algorithm, Next: Recipes/Search, Prev: Selective Search, Up: Directory Search 4.5.3 How Directory Searches are Performed ------------------------------------------ When a prerequisite is found through directory search, regardless of type (general or selective), the pathname located may not be the one that 'make' actually provides you in the prerequisite list. Sometimes the path discovered through directory search is thrown away. The algorithm 'make' uses to decide whether to keep or abandon a path found via directory search is as follows: 1. If a target file does not exist at the path specified in the makefile, directory search is performed. 2. If the directory search is successful, that path is kept and this file is tentatively stored as the target. 3. All prerequisites of this target are examined using this same method. 4. After processing the prerequisites, the target may or may not need to be rebuilt: a. If the target does _not_ need to be rebuilt, the path to the file found during directory search is used for any prerequisite lists which contain this target. In short, if 'make' doesn't need to rebuild the target then you use the path found via directory search. b. If the target _does_ need to be rebuilt (is out-of-date), the pathname found during directory search is _thrown away_, and the target is rebuilt using the file name specified in the makefile. In short, if 'make' must rebuild, then the target is rebuilt locally, not in the directory found via directory search. This algorithm may seem complex, but in practice it is quite often exactly what you want. Other versions of 'make' use a simpler algorithm: if the file does not exist, and it is found via directory search, then that pathname is always used whether or not the target needs to be built. Thus, if the target is rebuilt it is created at the pathname discovered during directory search. If, in fact, this is the behavior you want for some or all of your directories, you can use the 'GPATH' variable to indicate this to 'make'. 'GPATH' has the same syntax and format as 'VPATH' (that is, a space- or colon-delimited list of pathnames). If an out-of-date target is found by directory search in a directory that also appears in 'GPATH', then that pathname is not thrown away. The target is rebuilt using the expanded path.  File: make.info, Node: Recipes/Search, Next: Implicit/Search, Prev: Search Algorithm, Up: Directory Search 4.5.4 Writing Recipes with Directory Search ------------------------------------------- When a prerequisite is found in another directory through directory search, this cannot change the recipe of the rule; they will execute as written. Therefore, you must write the recipe with care so that it will look for the prerequisite in the directory where 'make' finds it. This is done with the "automatic variables" such as '$^' (*note Automatic Variables::). For instance, the value of '$^' is a list of all the prerequisites of the rule, including the names of the directories in which they were found, and the value of '$@' is the target. Thus: foo.o : foo.c cc -c $(CFLAGS) $^ -o $@ (The variable 'CFLAGS' exists so you can specify flags for C compilation by implicit rules; we use it here for consistency so it will affect all C compilations uniformly; *note Variables Used by Implicit Rules: Implicit Variables.) Often the prerequisites include header files as well, which you do not want to mention in the recipe. The automatic variable '$<' is just the first prerequisite: VPATH = src:../headers foo.o : foo.c defs.h hack.h cc -c $(CFLAGS) $< -o $@  File: make.info, Node: Implicit/Search, Next: Libraries/Search, Prev: Recipes/Search, Up: Directory Search 4.5.5 Directory Search and Implicit Rules ----------------------------------------- The search through the directories specified in 'VPATH' or with 'vpath' also happens during consideration of implicit rules (*note Using Implicit Rules: Implicit Rules.). For example, when a file 'foo.o' has no explicit rule, 'make' considers implicit rules, such as the built-in rule to compile 'foo.c' if that file exists. If such a file is lacking in the current directory, the appropriate directories are searched for it. If 'foo.c' exists (or is mentioned in the makefile) in any of the directories, the implicit rule for C compilation is applied. The recipes of implicit rules normally use automatic variables as a matter of necessity; consequently they will use the file names found by directory search with no extra effort.  File: make.info, Node: Libraries/Search, Prev: Implicit/Search, Up: Directory Search 4.5.6 Directory Search for Link Libraries ----------------------------------------- Directory search applies in a special way to libraries used with the linker. This special feature comes into play when you write a prerequisite whose name is of the form '-lNAME'. (You can tell something strange is going on here because the prerequisite is normally the name of a file, and the _file name_ of a library generally looks like 'libNAME.a', not like '-lNAME'.) When a prerequisite's name has the form '-lNAME', 'make' handles it specially by searching for the file 'libNAME.so', and, if it is not found, for the file 'libNAME.a' in the current directory, in directories specified by matching 'vpath' search paths and the 'VPATH' search path, and then in the directories '/lib', '/usr/lib', and 'PREFIX/lib' (normally '/usr/local/lib', but MS-DOS/MS-Windows versions of 'make' behave as if PREFIX is defined to be the root of the DJGPP installation tree). For example, if there is a '/usr/lib/libcurses.a' library on your system (and no '/usr/lib/libcurses.so' file), then foo : foo.c -lcurses cc $^ -o $@ would cause the command 'cc foo.c /usr/lib/libcurses.a -o foo' to be executed when 'foo' is older than 'foo.c' or than '/usr/lib/libcurses.a'. Although the default set of files to be searched for is 'libNAME.so' and 'libNAME.a', this is customizable via the '.LIBPATTERNS' variable. Each word in the value of this variable is a pattern string. When a prerequisite like '-lNAME' is seen, 'make' will replace the percent in each pattern in the list with NAME and perform the above directory searches using each library file name. The default value for '.LIBPATTERNS' is 'lib%.so lib%.a', which provides the default behavior described above. You can turn off link library expansion completely by setting this variable to an empty value.  File: make.info, Node: Phony Targets, Next: Force Targets, Prev: Directory Search, Up: Rules 4.6 Phony Targets ================= A phony target is one that is not really the name of a file; rather it is just a name for a recipe to be executed when you make an explicit request. There are two reasons to use a phony target: to avoid a conflict with a file of the same name, and to improve performance. If you write a rule whose recipe will not create the target file, the recipe will be executed every time the target comes up for remaking. Here is an example: clean: rm *.o temp Because the 'rm' command does not create a file named 'clean', probably no such file will ever exist. Therefore, the 'rm' command will be executed every time you say 'make clean'. In this example, the 'clean' target will not work properly if a file named 'clean' is ever created in this directory. Since it has no prerequisites, 'clean' would always be considered up to date and its recipe would not be executed. To avoid this problem you can explicitly declare the target to be phony by making it a prerequisite of the special target '.PHONY' (*note Special Built-in Target Names: Special Targets.) as follows: .PHONY: clean clean: rm *.o temp Once this is done, 'make clean' will run the recipe regardless of whether there is a file named 'clean'. Phony targets are also useful in conjunction with recursive invocations of 'make' (*note Recursive Use of 'make': Recursion.). In this situation the makefile will often contain a variable which lists a number of sub-directories to be built. A simplistic way to handle this is to define one rule with a recipe that loops over the sub-directories, like this: SUBDIRS = foo bar baz subdirs: for dir in $(SUBDIRS); do \ $(MAKE) -C $$dir; \ done There are problems with this method, however. First, any error detected in a sub-make is ignored by this rule, so it will continue to build the rest of the directories even when one fails. This can be overcome by adding shell commands to note the error and exit, but then it will do so even if 'make' is invoked with the '-k' option, which is unfortunate. Second, and perhaps more importantly, you cannot take advantage of 'make''s ability to build targets in parallel (*note Parallel Execution: Parallel.), since there is only one rule. By declaring the sub-directories as '.PHONY' targets (you must do this as the sub-directory obviously always exists; otherwise it won't be built) you can remove these problems: SUBDIRS = foo bar baz .PHONY: subdirs $(SUBDIRS) subdirs: $(SUBDIRS) $(SUBDIRS): $(MAKE) -C $@ foo: baz Here we've also declared that the 'foo' sub-directory cannot be built until after the 'baz' sub-directory is complete; this kind of relationship declaration is particularly important when attempting parallel builds. The implicit rule search (*note Implicit Rules::) is skipped for '.PHONY' targets. This is why declaring a target as '.PHONY' is good for performance, even if you are not worried about the actual file existing. A phony target should not be a prerequisite of a real target file; if it is, its recipe will be run every time 'make' goes to update that file. As long as a phony target is never a prerequisite of a real target, the phony target recipe will be executed only when the phony target is a specified goal (*note Arguments to Specify the Goals: Goals.). Phony targets can have prerequisites. When one directory contains multiple programs, it is most convenient to describe all of the programs in one makefile './Makefile'. Since the target remade by default will be the first one in the makefile, it is common to make this a phony target named 'all' and give it, as prerequisites, all the individual programs. For example: all : prog1 prog2 prog3 .PHONY : all prog1 : prog1.o utils.o cc -o prog1 prog1.o utils.o prog2 : prog2.o cc -o prog2 prog2.o prog3 : prog3.o sort.o utils.o cc -o prog3 prog3.o sort.o utils.o Now you can say just 'make' to remake all three programs, or specify as arguments the ones to remake (as in 'make prog1 prog3'). Phoniness is not inherited: the prerequisites of a phony target are not themselves phony, unless explicitly declared to be so. When one phony target is a prerequisite of another, it serves as a subroutine of the other. For example, here 'make cleanall' will delete the object files, the difference files, and the file 'program': .PHONY: cleanall cleanobj cleandiff cleanall : cleanobj cleandiff rm program cleanobj : rm *.o cleandiff : rm *.diff  File: make.info, Node: Force Targets, Next: Empty Targets, Prev: Phony Targets, Up: Rules 4.7 Rules without Recipes or Prerequisites ========================================== If a rule has no prerequisites or recipe, and the target of the rule is a nonexistent file, then 'make' imagines this target to have been updated whenever its rule is run. This implies that all targets depending on this one will always have their recipe run. An example will illustrate this: clean: FORCE rm $(objects) FORCE: Here the target 'FORCE' satisfies the special conditions, so the target 'clean' that depends on it is forced to run its recipe. There is nothing special about the name 'FORCE', but that is one name commonly used this way. As you can see, using 'FORCE' this way has the same results as using '.PHONY: clean'. Using '.PHONY' is more explicit and more efficient. However, other versions of 'make' do not support '.PHONY'; thus 'FORCE' appears in many makefiles. *Note Phony Targets::.  File: make.info, Node: Empty Targets, Next: Special Targets, Prev: Force Targets, Up: Rules 4.8 Empty Target Files to Record Events ======================================= The "empty target" is a variant of the phony target; it is used to hold recipes for an action that you request explicitly from time to time. Unlike a phony target, this target file can really exist; but the file's contents do not matter, and usually are empty. The purpose of the empty target file is to record, with its last-modification time, when the rule's recipe was last executed. It does so because one of the commands in the recipe is a 'touch' command to update the target file. The empty target file should have some prerequisites (otherwise it doesn't make sense). When you ask to remake the empty target, the recipe is executed if any prerequisite is more recent than the target; in other words, if a prerequisite has changed since the last time you remade the target. Here is an example: print: foo.c bar.c lpr -p $? touch print With this rule, 'make print' will execute the 'lpr' command if either source file has changed since the last 'make print'. The automatic variable '$?' is used to print only those files that have changed (*note Automatic Variables::).  File: make.info, Node: Special Targets, Next: Multiple Targets, Prev: Empty Targets, Up: Rules 4.9 Special Built-in Target Names ================================= Certain names have special meanings if they appear as targets. '.PHONY' The prerequisites of the special target '.PHONY' are considered to be phony targets. When it is time to consider such a target, 'make' will run its recipe unconditionally, regardless of whether a file with that name exists or what its last-modification time is. *Note Phony Targets: Phony Targets. '.SUFFIXES' The prerequisites of the special target '.SUFFIXES' are the list of suffixes to be used in checking for suffix rules. *Note Old-Fashioned Suffix Rules: Suffix Rules. '.DEFAULT' The recipe specified for '.DEFAULT' is used for any target for which no rules are found (either explicit rules or implicit rules). *Note Last Resort::. If a '.DEFAULT' recipe is specified, every file mentioned as a prerequisite, but not as a target in a rule, will have that recipe executed on its behalf. *Note Implicit Rule Search Algorithm: Implicit Rule Search. '.PRECIOUS' The targets which '.PRECIOUS' depends on are given the following special treatment: if 'make' is killed or interrupted during the execution of their recipes, the target is not deleted. *Note Interrupting or Killing 'make': Interrupts. Also, if the target is an intermediate file, it will not be deleted after it is no longer needed, as is normally done. *Note Chains of Implicit Rules: Chained Rules. In this latter respect it overlaps with the '.SECONDARY' special target. You can also list the target pattern of an implicit rule (such as '%.o') as a prerequisite file of the special target '.PRECIOUS' to preserve intermediate files created by rules whose target patterns match that file's name. '.INTERMEDIATE' The targets which '.INTERMEDIATE' depends on are treated as intermediate files. *Note Chains of Implicit Rules: Chained Rules. '.INTERMEDIATE' with no prerequisites has no effect. '.SECONDARY' The targets which '.SECONDARY' depends on are treated as intermediate files, except that they are never automatically deleted. *Note Chains of Implicit Rules: Chained Rules. '.SECONDARY' with no prerequisites causes all targets to be treated as secondary (i.e., no target is removed because it is considered intermediate). '.SECONDEXPANSION' If '.SECONDEXPANSION' is mentioned as a target anywhere in the makefile, then all prerequisite lists defined _after_ it appears will be expanded a second time after all makefiles have been read in. *Note Secondary Expansion: Secondary Expansion. '.DELETE_ON_ERROR' If '.DELETE_ON_ERROR' is mentioned as a target anywhere in the makefile, then 'make' will delete the target of a rule if it has changed and its recipe exits with a nonzero exit status, just as it does when it receives a signal. *Note Errors in Recipes: Errors. '.IGNORE' If you specify prerequisites for '.IGNORE', then 'make' will ignore errors in execution of the recipe for those particular files. The recipe for '.IGNORE' (if any) is ignored. If mentioned as a target with no prerequisites, '.IGNORE' says to ignore errors in execution of recipes for all files. This usage of '.IGNORE' is supported only for historical compatibility. Since this affects every recipe in the makefile, it is not very useful; we recommend you use the more selective ways to ignore errors in specific recipes. *Note Errors in Recipes: Errors. '.LOW_RESOLUTION_TIME' If you specify prerequisites for '.LOW_RESOLUTION_TIME', 'make' assumes that these files are created by commands that generate low resolution time stamps. The recipe for the '.LOW_RESOLUTION_TIME' target are ignored. The high resolution file time stamps of many modern file systems lessen the chance of 'make' incorrectly concluding that a file is up to date. Unfortunately, some hosts do not provide a way to set a high resolution file time stamp, so commands like 'cp -p' that explicitly set a file's time stamp must discard its sub-second part. If a file is created by such a command, you should list it as a prerequisite of '.LOW_RESOLUTION_TIME' so that 'make' does not mistakenly conclude that the file is out of date. For example: .LOW_RESOLUTION_TIME: dst dst: src cp -p src dst Since 'cp -p' discards the sub-second part of 'src''s time stamp, 'dst' is typically slightly older than 'src' even when it is up to date. The '.LOW_RESOLUTION_TIME' line causes 'make' to consider 'dst' to be up to date if its time stamp is at the start of the same second that 'src''s time stamp is in. Due to a limitation of the archive format, archive member time stamps are always low resolution. You need not list archive members as prerequisites of '.LOW_RESOLUTION_TIME', as 'make' does this automatically. '.SILENT' If you specify prerequisites for '.SILENT', then 'make' will not print the recipe used to remake those particular files before executing them. The recipe for '.SILENT' is ignored. If mentioned as a target with no prerequisites, '.SILENT' says not to print any recipes before executing them. You may also use more selective ways to silence specific recipe command lines. *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::). '.EXPORT_ALL_VARIABLES' Simply by being mentioned as a target, this tells 'make' to export all variables to child processes by default. *Note Communicating Variables to a Sub-'make': Variables/Recursion. '.NOTPARALLEL' If '.NOTPARALLEL' is mentioned as a target, then this invocation of 'make' will be run serially, even if the '-j' option is given. Any recursively invoked 'make' command will still run recipes in parallel (unless its makefile also contains this target). Any prerequisites on this target are ignored. '.ONESHELL' If '.ONESHELL' is mentioned as a target, then when a target is built all lines of the recipe will be given to a single invocation of the shell rather than each line being invoked separately (*note Recipe Execution: Execution.). '.POSIX' If '.POSIX' is mentioned as a target, then the makefile will be parsed and run in POSIX-conforming mode. This does _not_ mean that only POSIX-conforming makefiles will be accepted: all advanced GNU 'make' features are still available. Rather, this target causes 'make' to behave as required by POSIX in those areas where 'make''s default behavior differs. In particular, if this target is mentioned then recipes will be invoked as if the shell had been passed the '-e' flag: the first failing command in a recipe will cause the recipe to fail immediately. Any defined implicit rule suffix also counts as a special target if it appears as a target, and so does the concatenation of two suffixes, such as '.c.o'. These targets are suffix rules, an obsolete way of defining implicit rules (but a way still widely used). In principle, any target name could be special in this way if you break it in two and add both pieces to the suffix list. In practice, suffixes normally begin with '.', so these special target names also begin with '.'. *Note Old-Fashioned Suffix Rules: Suffix Rules.  File: make.info, Node: Multiple Targets, Next: Multiple Rules, Prev: Special Targets, Up: Rules 4.10 Multiple Targets in a Rule =============================== When an explicit rule has multiple targets they can be treated in one of two possible ways: as independent targets or as grouped targets. The manner in which they are treated is determined by the separator that appears after the list of targets. Rules with Independent Targets .............................. Rules that use the standard target separator, ':', define independent targets. This is equivalent to writing the same rule once for each target, with duplicated prerequisites and recipes. Typically, the recipe would use automatic variables such as '$@' to specify which target is being built. Rules with independent targets are useful in two cases: * You want just prerequisites, no recipe. For example: kbd.o command.o files.o: command.h gives an additional prerequisite to each of the three object files mentioned. It is equivalent to writing: kbd.o: command.h command.o: command.h files.o: command.h * Similar recipes work for all the targets. The automatic variable '$@' can be used to substitute the particular target to be remade into the commands (*note Automatic Variables::). For example: bigoutput littleoutput : text.g generate text.g -$(subst output,,$@) > $@ is equivalent to bigoutput : text.g generate text.g -big > bigoutput littleoutput : text.g generate text.g -little > littleoutput Here we assume the hypothetical program 'generate' makes two types of output, one if given '-big' and one if given '-little'. *Note Functions for String Substitution and Analysis: Text Functions, for an explanation of the 'subst' function. Suppose you would like to vary the prerequisites according to the target, much as the variable '$@' allows you to vary the recipe. You cannot do this with multiple targets in an ordinary rule, but you can do it with a "static pattern rule". *Note Static Pattern Rules: Static Pattern. Rules with Grouped Targets .......................... If instead of independent targets you have a recipe that generates multiple files from a single invocation, you can express that relationship by declaring your rule to use _grouped targets_. A grouped target rule uses the separator '&:' (the '&' here is used to imply "all"). When 'make' builds any one of the grouped targets, it understands that all the other targets in the group are also created as a result of the invocation of the recipe. Furthermore, if only some of the grouped targets are out of date or missing 'make' will realize that running the recipe will update all of the targets. As an example, this rule defines a grouped target: foo bar biz &: baz boz echo $^ > foo echo $^ > bar echo $^ > biz During the execution of a grouped target's recipe, the automatic variable '$@' is set to the name of the particular target in the group which triggered the rule. Caution must be used if relying on this variable in the recipe of a grouped target rule. Unlike independent targets, a grouped target rule _must_ include a recipe. However, targets that are members of a grouped target may also appear in independent target rule definitions that do not have recipes. Each target may have only one recipe associated with it. If a grouped target appears in either an independent target rule or in another grouped target rule with a recipe, you will get a warning and the latter recipe will replace the former recipe. Additionally the target will be removed from the previous group and appear only in the new group. If you would like a target to appear in multiple groups, then you must use the double-colon grouped target separator, '&::' when declaring all of the groups containing that target. Grouped double-colon targets are each considered independently, and each grouped double-colon rule's recipe is executed at most once, if at least one of its multiple targets requires updating.  File: make.info, Node: Multiple Rules, Next: Static Pattern, Prev: Multiple Targets, Up: Rules 4.11 Multiple Rules for One Target ================================== One file can be the target of several rules. All the prerequisites mentioned in all the rules are merged into one list of prerequisites for the target. If the target is older than any prerequisite from any rule, the recipe is executed. There can only be one recipe to be executed for a file. If more than one rule gives a recipe for the same file, 'make' uses the last one given and prints an error message. (As a special case, if the file's name begins with a dot, no error message is printed. This odd behavior is only for compatibility with other implementations of 'make'... you should avoid using it). Occasionally it is useful to have the same target invoke multiple recipes which are defined in different parts of your makefile; you can use "double-colon rules" (*note Double-Colon::) for this. An extra rule with just prerequisites can be used to give a few extra prerequisites to many files at once. For example, makefiles often have a variable, such as 'objects', containing a list of all the compiler output files in the system being made. An easy way to say that all of them must be recompiled if 'config.h' changes is to write the following: objects = foo.o bar.o foo.o : defs.h bar.o : defs.h test.h $(objects) : config.h This could be inserted or taken out without changing the rules that really specify how to make the object files, making it a convenient form to use if you wish to add the additional prerequisite intermittently. Another wrinkle is that the additional prerequisites could be specified with a variable that you set with a command line argument to 'make' (*note Overriding Variables: Overriding.). For example, extradeps= $(objects) : $(extradeps) means that the command 'make extradeps=foo.h' will consider 'foo.h' as a prerequisite of each object file, but plain 'make' will not. If none of the explicit rules for a target has a recipe, then 'make' searches for an applicable implicit rule to find one *note Using Implicit Rules: Implicit Rules.).  File: make.info, Node: Static Pattern, Next: Double-Colon, Prev: Multiple Rules, Up: Rules 4.12 Static Pattern Rules ========================= "Static pattern rules" are rules which specify multiple targets and construct the prerequisite names for each target based on the target name. They are more general than ordinary rules with multiple targets because the targets do not have to have identical prerequisites. Their prerequisites must be _analogous_, but not necessarily _identical_. * Menu: * Static Usage:: The syntax of static pattern rules. * Static versus Implicit:: When are they better than implicit rules?  File: make.info, Node: Static Usage, Next: Static versus Implicit, Prev: Static Pattern, Up: Static Pattern 4.12.1 Syntax of Static Pattern Rules ------------------------------------- Here is the syntax of a static pattern rule: TARGETS ...: TARGET-PATTERN: PREREQ-PATTERNS ... RECIPE ... The TARGETS list specifies the targets that the rule applies to. The targets can contain wildcard characters, just like the targets of ordinary rules (*note Using Wildcard Characters in File Names: Wildcards.). The TARGET-PATTERN and PREREQ-PATTERNS say how to compute the prerequisites of each target. Each target is matched against the TARGET-PATTERN to extract a part of the target name, called the "stem". This stem is substituted into each of the PREREQ-PATTERNS to make the prerequisite names (one from each PREREQ-PATTERN). Each pattern normally contains the character '%' just once. When the TARGET-PATTERN matches a target, the '%' can match any part of the target name; this part is called the "stem". The rest of the pattern must match exactly. For example, the target 'foo.o' matches the pattern '%.o', with 'foo' as the stem. The targets 'foo.c' and 'foo.out' do not match that pattern. The prerequisite names for each target are made by substituting the stem for the '%' in each prerequisite pattern. For example, if one prerequisite pattern is '%.c', then substitution of the stem 'foo' gives the prerequisite name 'foo.c'. It is legitimate to write a prerequisite pattern that does not contain '%'; then this prerequisite is the same for all targets. '%' characters in pattern rules can be quoted with preceding backslashes ('\'). Backslashes that would otherwise quote '%' characters can be quoted with more backslashes. Backslashes that quote '%' characters or other backslashes are removed from the pattern before it is compared to file names or has a stem substituted into it. Backslashes that are not in danger of quoting '%' characters go unmolested. For example, the pattern 'the\%weird\\%pattern\\' has 'the%weird\' preceding the operative '%' character, and 'pattern\\' following it. The final two backslashes are left alone because they cannot affect any '%' character. Here is an example, which compiles each of 'foo.o' and 'bar.o' from the corresponding '.c' file: objects = foo.o bar.o all: $(objects) $(objects): %.o: %.c $(CC) -c $(CFLAGS) $< -o $@ Here '$<' is the automatic variable that holds the name of the prerequisite and '$@' is the automatic variable that holds the name of the target; see *note Automatic Variables::. Each target specified must match the target pattern; a warning is issued for each target that does not. If you have a list of files, only some of which will match the pattern, you can use the 'filter' function to remove non-matching file names (*note Functions for String Substitution and Analysis: Text Functions.): files = foo.elc bar.o lose.o $(filter %.o,$(files)): %.o: %.c $(CC) -c $(CFLAGS) $< -o $@ $(filter %.elc,$(files)): %.elc: %.el emacs -f batch-byte-compile $< In this example the result of '$(filter %.o,$(files))' is 'bar.o lose.o', and the first static pattern rule causes each of these object files to be updated by compiling the corresponding C source file. The result of '$(filter %.elc,$(files))' is 'foo.elc', so that file is made from 'foo.el'. Another example shows how to use '$*' in static pattern rules: bigoutput littleoutput : %output : text.g generate text.g -$* > $@ When the 'generate' command is run, '$*' will expand to the stem, either 'big' or 'little'.  File: make.info, Node: Static versus Implicit, Prev: Static Usage, Up: Static Pattern 4.12.2 Static Pattern Rules versus Implicit Rules ------------------------------------------------- A static pattern rule has much in common with an implicit rule defined as a pattern rule (*note Defining and Redefining Pattern Rules: Pattern Rules.). Both have a pattern for the target and patterns for constructing the names of prerequisites. The difference is in how 'make' decides _when_ the rule applies. An implicit rule _can_ apply to any target that matches its pattern, but it _does_ apply only when the target has no recipe otherwise specified, and only when the prerequisites can be found. If more than one implicit rule appears applicable, only one applies; the choice depends on the order of rules. By contrast, a static pattern rule applies to the precise list of targets that you specify in the rule. It cannot apply to any other target and it invariably does apply to each of the targets specified. If two conflicting rules apply, and both have recipes, that's an error. The static pattern rule can be better than an implicit rule for these reasons: * You may wish to override the usual implicit rule for a few files whose names cannot be categorized syntactically but can be given in an explicit list. * If you cannot be sure of the precise contents of the directories you are using, you may not be sure which other irrelevant files might lead 'make' to use the wrong implicit rule. The choice might depend on the order in which the implicit rule search is done. With static pattern rules, there is no uncertainty: each rule applies to precisely the targets specified.  File: make.info, Node: Double-Colon, Next: Automatic Prerequisites, Prev: Static Pattern, Up: Rules 4.13 Double-Colon Rules ======================= "Double-colon" rules are explicit rules written with '::' instead of ':' after the target names. They are handled differently from ordinary rules when the same target appears in more than one rule. Pattern rules with double-colons have an entirely different meaning (*note Match-Anything Rules::). When a target appears in multiple rules, all the rules must be the same type: all ordinary, or all double-colon. If they are double-colon, each of them is independent of the others. Each double-colon rule's recipe is executed if the target is older than any prerequisites of that rule. If there are no prerequisites for that rule, its recipe is always executed (even if the target already exists). This can result in executing none, any, or all of the double-colon rules. Double-colon rules with the same target are in fact completely separate from one another. Each double-colon rule is processed individually, just as rules with different targets are processed. The double-colon rules for a target are executed in the order they appear in the makefile. However, the cases where double-colon rules really make sense are those where the order of executing the recipes would not matter. Double-colon rules are somewhat obscure and not often very useful; they provide a mechanism for cases in which the method used to update a target differs depending on which prerequisite files caused the update, and such cases are rare. Each double-colon rule should specify a recipe; if it does not, an implicit rule will be used if one applies. *Note Using Implicit Rules: Implicit Rules.  File: make.info, Node: Automatic Prerequisites, Prev: Double-Colon, Up: Rules 4.14 Generating Prerequisites Automatically =========================================== In the makefile for a program, many of the rules you need to write often say only that some object file depends on some header file. For example, if 'main.c' uses 'defs.h' via an '#include', you would write: main.o: defs.h You need this rule so that 'make' knows that it must remake 'main.o' whenever 'defs.h' changes. You can see that for a large program you would have to write dozens of such rules in your makefile. And, you must always be very careful to update the makefile every time you add or remove an '#include'. To avoid this hassle, most modern C compilers can write these rules for you, by looking at the '#include' lines in the source files. Usually this is done with the '-M' option to the compiler. For example, the command: cc -M main.c generates the output: main.o : main.c defs.h Thus you no longer have to write all those rules yourself. The compiler will do it for you. Note that such a rule constitutes mentioning 'main.o' in a makefile, so it can never be considered an intermediate file by implicit rule search. This means that 'make' won't ever remove the file after using it; *note Chains of Implicit Rules: Chained Rules. With old 'make' programs, it was traditional practice to use this compiler feature to generate prerequisites on demand with a command like 'make depend'. That command would create a file 'depend' containing all the automatically-generated prerequisites; then the makefile could use 'include' to read them in (*note Include::). In GNU 'make', the feature of remaking makefiles makes this practice obsolete--you need never tell 'make' explicitly to regenerate the prerequisites, because it always regenerates any makefile that is out of date. *Note Remaking Makefiles::. The practice we recommend for automatic prerequisite generation is to have one makefile corresponding to each source file. For each source file 'NAME.c' there is a makefile 'NAME.d' which lists what files the object file 'NAME.o' depends on. That way only the source files that have changed need to be rescanned to produce the new prerequisites. Here is the pattern rule to generate a file of prerequisites (i.e., a makefile) called 'NAME.d' from a C source file called 'NAME.c': %.d: %.c @set -e; rm -f $@; \ $(CC) -M $(CPPFLAGS) $< > $@.$$$$; \ sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \ rm -f $@.$$$$ *Note Pattern Rules::, for information on defining pattern rules. The '-e' flag to the shell causes it to exit immediately if the '$(CC)' command (or any other command) fails (exits with a nonzero status). With the GNU C compiler, you may wish to use the '-MM' flag instead of '-M'. This omits prerequisites on system header files. *Note Options Controlling the Preprocessor: (gcc)Preprocessor Options, for details. The purpose of the 'sed' command is to translate (for example): main.o : main.c defs.h into: main.o main.d : main.c defs.h This makes each '.d' file depend on all the source and header files that the corresponding '.o' file depends on. 'make' then knows it must regenerate the prerequisites whenever any of the source or header files changes. Once you've defined the rule to remake the '.d' files, you then use the 'include' directive to read them all in. *Note Include::. For example: sources = foo.c bar.c include $(sources:.c=.d) (This example uses a substitution variable reference to translate the list of source files 'foo.c bar.c' into a list of prerequisite makefiles, 'foo.d bar.d'. *Note Substitution Refs::, for full information on substitution references.) Since the '.d' files are makefiles like any others, 'make' will remake them as necessary with no further work from you. *Note Remaking Makefiles::. Note that the '.d' files contain target definitions; you should be sure to place the 'include' directive _after_ the first, default goal in your makefiles or run the risk of having a random object file become the default goal. *Note How Make Works::.  File: make.info, Node: Recipes, Next: Using Variables, Prev: Rules, Up: Top 5 Writing Recipes in Rules ************************** The recipe of a rule consists of one or more shell command lines to be executed, one at a time, in the order they appear. Typically, the result of executing these commands is that the target of the rule is brought up to date. Users use many different shell programs, but recipes in makefiles are always interpreted by '/bin/sh' unless the makefile specifies otherwise. *Note Recipe Execution: Execution. * Menu: * Recipe Syntax:: Recipe syntax features and pitfalls. * Echoing:: How to control when recipes are echoed. * Execution:: How recipes are executed. * Parallel:: How recipes can be executed in parallel. * Errors:: What happens after a recipe execution error. * Interrupts:: What happens when a recipe is interrupted. * Recursion:: Invoking 'make' from makefiles. * Canned Recipes:: Defining canned recipes. * Empty Recipes:: Defining useful, do-nothing recipes.  File: make.info, Node: Recipe Syntax, Next: Echoing, Prev: Recipes, Up: Recipes 5.1 Recipe Syntax ================= Makefiles have the unusual property that there are really two distinct syntaxes in one file. Most of the makefile uses 'make' syntax (*note Writing Makefiles: Makefiles.). However, recipes are meant to be interpreted by the shell and so they are written using shell syntax. The 'make' program does not try to understand shell syntax: it performs only a very few specific translations on the content of the recipe before handing it to the shell. Each line in the recipe must start with a tab (or the first character in the value of the '.RECIPEPREFIX' variable; *note Special Variables::), except that the first recipe line may be attached to the target-and-prerequisites line with a semicolon in between. _Any_ line in the makefile that begins with a tab and appears in a "rule context" (that is, after a rule has been started until another rule or variable definition) will be considered part of a recipe for that rule. Blank lines and lines of just comments may appear among the recipe lines; they are ignored. Some consequences of these rules include: * A blank line that begins with a tab is not blank: it's an empty recipe (*note Empty Recipes::). * A comment in a recipe is not a 'make' comment; it will be passed to the shell as-is. Whether the shell treats it as a comment or not depends on your shell. * A variable definition in a "rule context" which is indented by a tab as the first character on the line, will be considered part of a recipe, not a 'make' variable definition, and passed to the shell. * A conditional expression ('ifdef', 'ifeq', etc. *note Syntax of Conditionals: Conditional Syntax.) in a "rule context" which is indented by a tab as the first character on the line, will be considered part of a recipe and be passed to the shell. * Menu: * Splitting Recipe Lines:: Breaking long recipe lines for readability. * Variables in Recipes:: Using 'make' variables in recipes.  File: make.info, Node: Splitting Recipe Lines, Next: Variables in Recipes, Prev: Recipe Syntax, Up: Recipe Syntax 5.1.1 Splitting Recipe Lines ---------------------------- One of the few ways in which 'make' does interpret recipes is checking for a backslash just before the newline. As in normal makefile syntax, a single logical recipe line can be split into multiple physical lines in the makefile by placing a backslash before each newline. A sequence of lines like this is considered a single recipe line, and one instance of the shell will be invoked to run it. However, in contrast to how they are treated in other places in a makefile (*note Splitting Long Lines: Splitting Lines.), backslash/newline pairs are _not_ removed from the recipe. Both the backslash and the newline characters are preserved and passed to the shell. How the backslash/newline is interpreted depends on your shell. If the first character of the next line after the backslash/newline is the recipe prefix character (a tab by default; *note Special Variables::), then that character (and only that character) is removed. Whitespace is never added to the recipe. For example, the recipe for the all target in this makefile: all : @echo no\ space @echo no\ space @echo one \ space @echo one\ space consists of four separate shell commands where the output is: nospace nospace one space one space As a more complex example, this makefile: all : ; @echo 'hello \ world' ; echo "hello \ world" will invoke one shell with a command of: echo 'hello \ world' ; echo "hello \ world" which, according to shell quoting rules, will yield the following output: hello \ world hello world Notice how the backslash/newline pair was removed inside the string quoted with double quotes ('"..."'), but not from the string quoted with single quotes (''...''). This is the way the default shell ('/bin/sh') handles backslash/newline pairs. If you specify a different shell in your makefiles it may treat them differently. Sometimes you want to split a long line inside of single quotes, but you don't want the backslash/newline to appear in the quoted content. This is often the case when passing scripts to languages such as Perl, where extraneous backslashes inside the script can change its meaning or even be a syntax error. One simple way of handling this is to place the quoted string, or even the entire command, into a 'make' variable then use the variable in the recipe. In this situation the newline quoting rules for makefiles will be used, and the backslash/newline will be removed. If we rewrite our example above using this method: HELLO = 'hello \ world' all : ; @echo $(HELLO) we will get output like this: hello world If you like, you can also use target-specific variables (*note Target-specific Variable Values: Target-specific.) to obtain a tighter correspondence between the variable and the recipe that uses it.  File: make.info, Node: Variables in Recipes, Prev: Splitting Recipe Lines, Up: Recipe Syntax 5.1.2 Using Variables in Recipes -------------------------------- The other way in which 'make' processes recipes is by expanding any variable references in them (*note Basics of Variable References: Reference.). This occurs after make has finished reading all the makefiles and the target is determined to be out of date; so, the recipes for targets which are not rebuilt are never expanded. Variable and function references in recipes have identical syntax and semantics to references elsewhere in the makefile. They also have the same quoting rules: if you want a dollar sign to appear in your recipe, you must double it ('$$'). For shells like the default shell, that use dollar signs to introduce variables, it's important to keep clear in your mind whether the variable you want to reference is a 'make' variable (use a single dollar sign) or a shell variable (use two dollar signs). For example: LIST = one two three all: for i in $(LIST); do \ echo $$i; \ done results in the following command being passed to the shell: for i in one two three; do \ echo $i; \ done which generates the expected result: one two three  File: make.info, Node: Echoing, Next: Execution, Prev: Recipe Syntax, Up: Recipes 5.2 Recipe Echoing ================== Normally 'make' prints each line of the recipe before it is executed. We call this "echoing" because it gives the appearance that you are typing the lines yourself. When a line starts with '@', the echoing of that line is suppressed. The '@' is discarded before the line is passed to the shell. Typically you would use this for a command whose only effect is to print something, such as an 'echo' command to indicate progress through the makefile: @echo About to make distribution files When 'make' is given the flag '-n' or '--just-print' it only echoes most recipes, without executing them. *Note Summary of Options: Options Summary. In this case even the recipe lines starting with '@' are printed. This flag is useful for finding out which recipes 'make' thinks are necessary without actually doing them. The '-s' or '--silent' flag to 'make' prevents all echoing, as if all recipes started with '@'. A rule in the makefile for the special target '.SILENT' without prerequisites has the same effect (*note Special Built-in Target Names: Special Targets.).  File: make.info, Node: Execution, Next: Parallel, Prev: Echoing, Up: Recipes 5.3 Recipe Execution ==================== When it is time to execute recipes to update a target, they are executed by invoking a new sub-shell for each line of the recipe, unless the '.ONESHELL' special target is in effect (*note Using One Shell: One Shell.) (In practice, 'make' may take shortcuts that do not affect the results.) *Please note:* this implies that setting shell variables and invoking shell commands such as 'cd' that set a context local to each process will not affect the following lines in the recipe.(1) If you want to use 'cd' to affect the next statement, put both statements in a single recipe line. Then 'make' will invoke one shell to run the entire line, and the shell will execute the statements in sequence. For example: foo : bar/lose cd $( ../$@ Here we use the shell AND operator ('&&') so that if the 'cd' command fails, the script will fail without trying to invoke the 'gobble' command in the wrong directory, which could cause problems (in this case it would certainly cause '../foo' to be truncated, at least). * Menu: * One Shell:: One shell for all lines in a recipe. * Choosing the Shell:: How 'make' chooses the shell used to run recipes. ---------- Footnotes ---------- (1) On MS-DOS, the value of current working directory is *global*, so changing it _will_ affect the following recipe lines on those systems.  File: make.info, Node: One Shell, Next: Choosing the Shell, Prev: Execution, Up: Execution 5.3.1 Using One Shell --------------------- Sometimes you would prefer that all the lines in the recipe be passed to a single invocation of the shell. There are generally two situations where this is useful: first, it can improve performance in makefiles where recipes consist of many command lines, by avoiding extra processes. Second, you might want newlines to be included in your recipe command (for example perhaps you are using a very different interpreter as your 'SHELL'). If the '.ONESHELL' special target appears anywhere in the makefile then _all_ recipe lines for each target will be provided to a single invocation of the shell. Newlines between recipe lines will be preserved. For example: .ONESHELL: foo : bar/lose cd $(@D) gobble $(@F) > ../$@ would now work as expected even though the commands are on different recipe lines. If '.ONESHELL' is provided, then only the first line of the recipe will be checked for the special prefix characters ('@', '-', and '+'). Subsequent lines will include the special characters in the recipe line when the 'SHELL' is invoked. If you want your recipe to start with one of these special characters you'll need to arrange for them to not be the first characters on the first line, perhaps by adding a comment or similar. For example, this would be a syntax error in Perl because the first '@' is removed by make: .ONESHELL: SHELL = /usr/bin/perl .SHELLFLAGS = -e show : @f = qw(a b c); print "@f\n"; However, either of these alternatives would work properly: .ONESHELL: SHELL = /usr/bin/perl .SHELLFLAGS = -e show : # Make sure "@" is not the first character on the first line @f = qw(a b c); print "@f\n"; or .ONESHELL: SHELL = /usr/bin/perl .SHELLFLAGS = -e show : my @f = qw(a b c); print "@f\n"; As a special feature, if 'SHELL' is determined to be a POSIX-style shell, the special prefix characters in "internal" recipe lines will be _removed_ before the recipe is processed. This feature is intended to allow existing makefiles to add the '.ONESHELL' special target and still run properly without extensive modifications. Since the special prefix characters are not legal at the beginning of a line in a POSIX shell script this is not a loss in functionality. For example, this works as expected: .ONESHELL: foo : bar/lose @cd $(@D) @gobble $(@F) > ../$@ Even with this special feature, however, makefiles with '.ONESHELL' will behave differently in ways that could be noticeable. For example, normally if any line in the recipe fails, that causes the rule to fail and no more recipe lines are processed. Under '.ONESHELL' a failure of any but the final recipe line will not be noticed by 'make'. You can modify '.SHELLFLAGS' to add the '-e' option to the shell which will cause any failure anywhere in the command line to cause the shell to fail, but this could itself cause your recipe to behave differently. Ultimately you may need to harden your recipe lines to allow them to work with '.ONESHELL'.  File: make.info, Node: Choosing the Shell, Prev: One Shell, Up: Execution 5.3.2 Choosing the Shell ------------------------ The program used as the shell is taken from the variable 'SHELL'. If this variable is not set in your makefile, the program '/bin/sh' is used as the shell. The argument(s) passed to the shell are taken from the variable '.SHELLFLAGS'. The default value of '.SHELLFLAGS' is '-c' normally, or '-ec' in POSIX-conforming mode. Unlike most variables, the variable 'SHELL' is never set from the environment. This is because the 'SHELL' environment variable is used to specify your personal choice of shell program for interactive use. It would be very bad for personal choices like this to affect the functioning of makefiles. *Note Variables from the Environment: Environment. Furthermore, when you do set 'SHELL' in your makefile that value is _not_ exported in the environment to recipe lines that 'make' invokes. Instead, the value inherited from the user's environment, if any, is exported. You can override this behavior by explicitly exporting 'SHELL' (*note Communicating Variables to a Sub-'make': Variables/Recursion.), forcing it to be passed in the environment to recipe lines. However, on MS-DOS and MS-Windows the value of 'SHELL' in the environment *is* used, since on those systems most users do not set this variable, and therefore it is most likely set specifically to be used by 'make'. On MS-DOS, if the setting of 'SHELL' is not suitable for 'make', you can set the variable 'MAKESHELL' to the shell that 'make' should use; if set it will be used as the shell instead of the value of 'SHELL'. Choosing a Shell in DOS and Windows ................................... Choosing a shell in MS-DOS and MS-Windows is much more complex than on other systems. On MS-DOS, if 'SHELL' is not set, the value of the variable 'COMSPEC' (which is always set) is used instead. The processing of lines that set the variable 'SHELL' in Makefiles is different on MS-DOS. The stock shell, 'command.com', is ridiculously limited in its functionality and many users of 'make' tend to install a replacement shell. Therefore, on MS-DOS, 'make' examines the value of 'SHELL', and changes its behavior based on whether it points to a Unix-style or DOS-style shell. This allows reasonable functionality even if 'SHELL' points to 'command.com'. If 'SHELL' points to a Unix-style shell, 'make' on MS-DOS additionally checks whether that shell can indeed be found; if not, it ignores the line that sets 'SHELL'. In MS-DOS, GNU 'make' searches for the shell in the following places: 1. In the precise place pointed to by the value of 'SHELL'. For example, if the makefile specifies 'SHELL = /bin/sh', 'make' will look in the directory '/bin' on the current drive. 2. In the current directory. 3. In each of the directories in the 'PATH' variable, in order. In every directory it examines, 'make' will first look for the specific file ('sh' in the example above). If this is not found, it will also look in that directory for that file with one of the known extensions which identify executable files. For example '.exe', '.com', '.bat', '.btm', '.sh', and some others. If any of these attempts is successful, the value of 'SHELL' will be set to the full pathname of the shell as found. However, if none of these is found, the value of 'SHELL' will not be changed, and thus the line that sets it will be effectively ignored. This is so 'make' will only support features specific to a Unix-style shell if such a shell is actually installed on the system where 'make' runs. Note that this extended search for the shell is limited to the cases where 'SHELL' is set from the Makefile; if it is set in the environment or command line, you are expected to set it to the full pathname of the shell, exactly as things are on Unix. The effect of the above DOS-specific processing is that a Makefile that contains 'SHELL = /bin/sh' (as many Unix makefiles do), will work on MS-DOS unaltered if you have e.g. 'sh.exe' installed in some directory along your 'PATH'.  File: make.info, Node: Parallel, Next: Errors, Prev: Execution, Up: Recipes 5.4 Parallel Execution ====================== GNU 'make' knows how to execute several recipes at once. Normally, 'make' will execute only one recipe at a time, waiting for it to finish before executing the next. However, the '-j' or '--jobs' option tells 'make' to execute many recipes simultaneously. You can inhibit parallelism in a particular makefile with the '.NOTPARALLEL' pseudo-target (*note Special Built-in Target Names: Special Targets.). On MS-DOS, the '-j' option has no effect, since that system doesn't support multi-processing. If the '-j' option is followed by an integer, this is the number of recipes to execute at once; this is called the number of "job slots". If there is nothing looking like an integer after the '-j' option, there is no limit on the number of job slots. The default number of job slots is one, which means serial execution (one thing at a time). Handling recursive 'make' invocations raises issues for parallel execution. For more information on this, see *note Communicating Options to a Sub-'make': Options/Recursion. If a recipe fails (is killed by a signal or exits with a nonzero status), and errors are not ignored for that recipe (*note Errors in Recipes: Errors.), the remaining recipe lines to remake the same target will not be run. If a recipe fails and the '-k' or '--keep-going' option was not given (*note Summary of Options: Options Summary.), 'make' aborts execution. If make terminates for any reason (including a signal) with child processes running, it waits for them to finish before actually exiting. When the system is heavily loaded, you will probably want to run fewer jobs than when it is lightly loaded. You can use the '-l' option to tell 'make' to limit the number of jobs to run at once, based on the load average. The '-l' or '--max-load' option is followed by a floating-point number. For example, -l 2.5 will not let 'make' start more than one job if the load average is above 2.5. The '-l' option with no following number removes the load limit, if one was given with a previous '-l' option. More precisely, when 'make' goes to start up a job, and it already has at least one job running, it checks the current load average; if it is not lower than the limit given with '-l', 'make' waits until the load average goes below that limit, or until all the other jobs finish. By default, there is no load limit. * Menu: * Parallel Output:: Handling output during parallel execution * Parallel Input:: Handling input during parallel execution  File: make.info, Node: Parallel Output, Next: Parallel Input, Prev: Parallel, Up: Parallel 5.4.1 Output During Parallel Execution -------------------------------------- When running several recipes in parallel the output from each recipe appears as soon as it is generated, with the result that messages from different recipes may be interspersed, sometimes even appearing on the same line. This can make reading the output very difficult. To avoid this you can use the '--output-sync' ('-O') option. This option instructs 'make' to save the output from the commands it invokes and print it all once the commands are completed. Additionally, if there are multiple recursive 'make' invocations running in parallel, they will communicate so that only one of them is generating output at a time. If working directory printing is enabled (*note The '--print-directory' Option: -w Option.), the enter/leave messages are printed around each output grouping. If you prefer not to see these messages add the '--no-print-directory' option to 'MAKEFLAGS'. There are four levels of granularity when synchronizing output, specified by giving an argument to the option (e.g., '-Oline' or '--output-sync=recurse'). 'none' This is the default: all output is sent directly as it is generated and no synchronization is performed. 'line' Output from each individual line of the recipe is grouped and printed as soon as that line is complete. If a recipe consists of multiple lines, they may be interspersed with lines from other recipes. 'target' Output from the entire recipe for each target is grouped and printed once the target is complete. This is the default if the '--output-sync' or '-O' option is given with no argument. 'recurse' Output from each recursive invocation of 'make' is grouped and printed once the recursive invocation is complete. Regardless of the mode chosen, the total build time will be the same. The only difference is in how the output appears. The 'target' and 'recurse' modes both collect the output of the entire recipe of a target and display it uninterrupted when the recipe completes. The difference between them is in how recipes that contain recursive invocations of 'make' are treated (*note Recursive Use of 'make': Recursion.). For all recipes which have no recursive lines, the 'target' and 'recurse' modes behave identically. If the 'recurse' mode is chosen, recipes that contain recursive 'make' invocations are treated the same as other targets: the output from the recipe, including the output from the recursive 'make', is saved and printed after the entire recipe is complete. This ensures output from all the targets built by a given recursive 'make' instance are grouped together, which may make the output easier to understand. However it also leads to long periods of time during the build where no output is seen, followed by large bursts of output. If you are not watching the build as it proceeds, but instead viewing a log of the build after the fact, this may be the best option for you. If you are watching the output, the long gaps of quiet during the build can be frustrating. The 'target' output synchronization mode detects when 'make' is going to be invoked recursively, using the standard methods, and it will not synchronize the output of those lines. The recursive 'make' will perform the synchronization for its targets and the output from each will be displayed immediately when it completes. Be aware that output from recursive lines of the recipe are not synchronized (for example if the recursive line prints a message before running 'make', that message will not be synchronized). The 'line' mode can be useful for front-ends that are watching the output of 'make' to track when recipes are started and completed. Some programs invoked by 'make' may behave differently if they determine they're writing output to a terminal versus a file (often described as "interactive" vs. "non-interactive" modes). For example, many programs that can display colorized output will not do so if they determine they are not writing to a terminal. If your makefile invokes a program like this then using the output synchronization options will cause the program to believe it's running in "non-interactive" mode even though the output will ultimately go to the terminal.  File: make.info, Node: Parallel Input, Prev: Parallel Output, Up: Parallel 5.4.2 Input During Parallel Execution ------------------------------------- Two processes cannot both take input from the same device at the same time. To make sure that only one recipe tries to take input from the terminal at once, 'make' will invalidate the standard input streams of all but one running recipe. If another recipe attempts to read from standard input it will usually incur a fatal error (a 'Broken pipe' signal). It is unpredictable which recipe will have a valid standard input stream (which will come from the terminal, or wherever you redirect the standard input of 'make'). The first recipe run will always get it first, and the first recipe started after that one finishes will get it next, and so on. We will change how this aspect of 'make' works if we find a better alternative. In the mean time, you should not rely on any recipe using standard input at all if you are using the parallel execution feature; but if you are not using this feature, then standard input works normally in all recipes.  File: make.info, Node: Errors, Next: Interrupts, Prev: Parallel, Up: Recipes 5.5 Errors in Recipes ===================== After each shell invocation returns, 'make' looks at its exit status. If the shell completed successfully (the exit status is zero), the next line in the recipe is executed in a new shell; after the last line is finished, the rule is finished. If there is an error (the exit status is nonzero), 'make' gives up on the current rule, and perhaps on all rules. Sometimes the failure of a certain recipe line does not indicate a problem. For example, you may use the 'mkdir' command to ensure that a directory exists. If the directory already exists, 'mkdir' will report an error, but you probably want 'make' to continue regardless. To ignore errors in a recipe line, write a '-' at the beginning of the line's text (after the initial tab). The '-' is discarded before the line is passed to the shell for execution. For example, clean: -rm -f *.o This causes 'make' to continue even if 'rm' is unable to remove a file. When you run 'make' with the '-i' or '--ignore-errors' flag, errors are ignored in all recipes of all rules. A rule in the makefile for the special target '.IGNORE' has the same effect, if there are no prerequisites. This is less flexible but sometimes useful. When errors are to be ignored, because of either a '-' or the '-i' flag, 'make' treats an error return just like success, except that it prints out a message that tells you the status code the shell exited with, and says that the error has been ignored. When an error happens that 'make' has not been told to ignore, it implies that the current target cannot be correctly remade, and neither can any other that depends on it either directly or indirectly. No further recipes will be executed for these targets, since their preconditions have not been achieved. Normally 'make' gives up immediately in this circumstance, returning a nonzero status. However, if the '-k' or '--keep-going' flag is specified, 'make' continues to consider the other prerequisites of the pending targets, remaking them if necessary, before it gives up and returns nonzero status. For example, after an error in compiling one object file, 'make -k' will continue compiling other object files even though it already knows that linking them will be impossible. *Note Summary of Options: Options Summary. The usual behavior assumes that your purpose is to get the specified targets up to date; once 'make' learns that this is impossible, it might as well report the failure immediately. The '-k' option says that the real purpose is to test as many of the changes made in the program as possible, perhaps to find several independent problems so that you can correct them all before the next attempt to compile. This is why Emacs' 'compile' command passes the '-k' flag by default. Usually when a recipe line fails, if it has changed the target file at all, the file is corrupted and cannot be used--or at least it is not completely updated. Yet the file's time stamp says that it is now up to date, so the next time 'make' runs, it will not try to update that file. The situation is just the same as when the shell is killed by a signal; *note Interrupts::. So generally the right thing to do is to delete the target file if the recipe fails after beginning to change the file. 'make' will do this if '.DELETE_ON_ERROR' appears as a target. This is almost always what you want 'make' to do, but it is not historical practice; so for compatibility, you must explicitly request it.  File: make.info, Node: Interrupts, Next: Recursion, Prev: Errors, Up: Recipes 5.6 Interrupting or Killing 'make' ================================== If 'make' gets a fatal signal while a shell is executing, it may delete the target file that the recipe was supposed to update. This is done if the target file's last-modification time has changed since 'make' first checked it. The purpose of deleting the target is to make sure that it is remade from scratch when 'make' is next run. Why is this? Suppose you type 'Ctrl-c' while a compiler is running, and it has begun to write an object file 'foo.o'. The 'Ctrl-c' kills the compiler, resulting in an incomplete file whose last-modification time is newer than the source file 'foo.c'. But 'make' also receives the 'Ctrl-c' signal and deletes this incomplete file. If 'make' did not do this, the next invocation of 'make' would think that 'foo.o' did not require updating--resulting in a strange error message from the linker when it tries to link an object file half of which is missing. You can prevent the deletion of a target file in this way by making the special target '.PRECIOUS' depend on it. Before remaking a target, 'make' checks to see whether it appears on the prerequisites of '.PRECIOUS', and thereby decides whether the target should be deleted if a signal happens. Some reasons why you might do this are that the target is updated in some atomic fashion, or exists only to record a modification-time (its contents do not matter), or must exist at all times to prevent other sorts of trouble. Although 'make' does its best to clean up there are certain situations in which cleanup is impossible. For example, 'make' may be killed by an uncatchable signal. Or, one of the programs make invokes may be killed or crash, leaving behind an up-to-date but corrupt target file: 'make' will not realize that this failure requires the target to be cleaned. Or 'make' itself may encounter a bug and crash. For these reasons it's best to write _defensive recipes_, which won't leave behind corrupted targets even if they fail. Most commonly these recipes create temporary files rather than updating the target directly, then rename the temporary file to the final target name. Some compilers already behave this way, so that you don't need to write a defensive recipe.  File: make.info, Node: Recursion, Next: Canned Recipes, Prev: Interrupts, Up: Recipes 5.7 Recursive Use of 'make' =========================== Recursive use of 'make' means using 'make' as a command in a makefile. This technique is useful when you want separate makefiles for various subsystems that compose a larger system. For example, suppose you have a sub-directory 'subdir' which has its own makefile, and you would like the containing directory's makefile to run 'make' on the sub-directory. You can do it by writing this: subsystem: cd subdir && $(MAKE) or, equivalently, this (*note Summary of Options: Options Summary.): subsystem: $(MAKE) -C subdir You can write recursive 'make' commands just by copying this example, but there are many things to know about how they work and why, and about how the sub-'make' relates to the top-level 'make'. You may also find it useful to declare targets that invoke recursive 'make' commands as '.PHONY' (for more discussion on when this is useful, see *note Phony Targets::). For your convenience, when GNU 'make' starts (after it has processed any '-C' options) it sets the variable 'CURDIR' to the pathname of the current working directory. This value is never touched by 'make' again: in particular note that if you include files from other directories the value of 'CURDIR' does not change. The value has the same precedence it would have if it were set in the makefile (by default, an environment variable 'CURDIR' will not override this value). Note that setting this variable has no impact on the operation of 'make' (it does not cause 'make' to change its working directory, for example). * Menu: * MAKE Variable:: The special effects of using '$(MAKE)'. * Variables/Recursion:: How to communicate variables to a sub-'make'. * Options/Recursion:: How to communicate options to a sub-'make'. * -w Option:: How the '-w' or '--print-directory' option helps debug use of recursive 'make' commands.  File: make.info, Node: MAKE Variable, Next: Variables/Recursion, Prev: Recursion, Up: Recursion 5.7.1 How the 'MAKE' Variable Works ----------------------------------- Recursive 'make' commands should always use the variable 'MAKE', not the explicit command name 'make', as shown here: subsystem: cd subdir && $(MAKE) The value of this variable is the file name with which 'make' was invoked. If this file name was '/bin/make', then the recipe executed is 'cd subdir && /bin/make'. If you use a special version of 'make' to run the top-level makefile, the same special version will be executed for recursive invocations. As a special feature, using the variable 'MAKE' in the recipe of a rule alters the effects of the '-t' ('--touch'), '-n' ('--just-print'), or '-q' ('--question') option. Using the 'MAKE' variable has the same effect as using a '+' character at the beginning of the recipe line. *Note Instead of Executing the Recipes: Instead of Execution. This special feature is only enabled if the 'MAKE' variable appears directly in the recipe: it does not apply if the 'MAKE' variable is referenced through expansion of another variable. In the latter case you must use the '+' token to get these special effects. Consider the command 'make -t' in the above example. (The '-t' 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. 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 '-q' do not apply to that line. Recipe lines containing 'MAKE' are executed normally despite the presence of a flag that causes most recipes not to be run. The usual 'MAKEFLAGS' mechanism passes the flags to the sub-'make' (*note Communicating Options to a Sub-'make': Options/Recursion.), so your request to touch the files, or print the recipes, is propagated to the subsystem.  File: make.info, Node: Variables/Recursion, Next: Options/Recursion, Prev: MAKE Variable, Up: Recursion 5.7.2 Communicating Variables to a Sub-'make' --------------------------------------------- Variable values of the top-level 'make' can be passed to the sub-'make' through the environment by explicit request. These variables are defined in the sub-'make' as defaults, but they do not override variables defined in the makefile used by the sub-'make' unless you use the '-e' switch (*note Summary of Options: Options Summary.). To pass down, or "export", a variable, 'make' adds the variable and its value to the environment for running each line of the recipe. The sub-'make', in turn, uses the environment to initialize its table of variable values. *Note Variables from the Environment: Environment. Except by explicit request, 'make' exports a variable only if it is either defined in the environment initially or set on the command line, and if its name consists only of letters, numbers, and underscores. Some shells cannot cope with environment variable names consisting of characters other than letters, numbers, and underscores. The value of the 'make' variable 'SHELL' is not exported. Instead, the value of the 'SHELL' variable from the invoking environment is passed to the sub-'make'. You can force 'make' to export its value for 'SHELL' by using the 'export' directive, described below. *Note Choosing the Shell::. The special variable 'MAKEFLAGS' is always exported (unless you unexport it). 'MAKEFILES' is exported if you set it to anything. 'make' automatically passes down variable values that were defined on the command line, by putting them in the 'MAKEFLAGS' variable. *Note Options/Recursion::. Variables are _not_ normally passed down if they were created by default by 'make' (*note Variables Used by Implicit Rules: Implicit Variables.). The sub-'make' will define these for itself. If you want to export specific variables to a sub-'make', use the 'export' directive, like this: export VARIABLE ... If you want to _prevent_ a variable from being exported, use the 'unexport' directive, like this: unexport VARIABLE ... In both of these forms, the arguments to 'export' and 'unexport' are expanded, and so could be variables or functions which expand to a (list of) variable names to be (un)exported. As a convenience, you can define a variable and export it at the same time by doing: export VARIABLE = value has the same result as: VARIABLE = value export VARIABLE and export VARIABLE := value has the same result as: VARIABLE := value export VARIABLE Likewise, export VARIABLE += value is just like: VARIABLE += value export VARIABLE *Note Appending More Text to Variables: Appending. You may notice that the 'export' and 'unexport' directives work in 'make' in the same way they work in the shell, 'sh'. If you want all variables to be exported by default, you can use 'export' by itself: export This tells 'make' that variables which are not explicitly mentioned in an 'export' or 'unexport' directive should be exported. Any variable given in an 'unexport' directive will still _not_ be exported. If you use 'export' by itself to export variables by default, variables whose names contain characters other than alphanumerics and underscores will not be exported unless specifically mentioned in an 'export' directive. The behavior elicited by an 'export' directive by itself was the default in older versions of GNU 'make'. If your makefiles depend on this behavior and you want to be compatible with old versions of 'make', you can write a rule for the special target '.EXPORT_ALL_VARIABLES' instead of using the 'export' directive. This will be ignored by old 'make's, while the 'export' directive will cause a syntax error. Likewise, you can use 'unexport' by itself to tell 'make' _not_ to export variables by default. Since this is the default behavior, you would only need to do this if 'export' had been used by itself earlier (in an included makefile, perhaps). You *cannot* use 'export' and 'unexport' by themselves to have variables exported for some recipes and not for others. The last 'export' or 'unexport' directive that appears by itself determines the behavior for the entire run of 'make'. As a special feature, the variable 'MAKELEVEL' is changed when it is passed down from level to level. This variable's value is a string which is the depth of the level as a decimal number. The value is '0' for the top-level 'make'; '1' for a sub-'make', '2' for a sub-sub-'make', and so on. The incrementation happens when 'make' sets up the environment for a recipe. The main use of 'MAKELEVEL' is to test it in a conditional directive (*note Conditional Parts of Makefiles: Conditionals.); this way you can write a makefile that behaves one way if run recursively and another way if run directly by you. You can use the variable 'MAKEFILES' to cause all sub-'make' commands to use additional makefiles. The value of 'MAKEFILES' is a whitespace-separated list of file names. This variable, if defined in the outer-level makefile, is passed down through the environment; then it serves as a list of extra makefiles for the sub-'make' to read before the usual or specified ones. *Note The Variable 'MAKEFILES': MAKEFILES Variable.  File: make.info, Node: Options/Recursion, Next: -w Option, Prev: Variables/Recursion, Up: Recursion 5.7.3 Communicating Options to a Sub-'make' ------------------------------------------- Flags such as '-s' and '-k' are passed automatically to the sub-'make' through the variable 'MAKEFLAGS'. This variable is set up automatically by 'make' to contain the flag letters that 'make' received. Thus, if you do 'make -ks' then 'MAKEFLAGS' gets the value 'ks'. As a consequence, every sub-'make' gets a value for 'MAKEFLAGS' in its environment. In response, it takes the flags from that value and processes them as if they had been given as arguments. *Note Summary of Options: Options Summary. Likewise variables defined on the command line are passed to the sub-'make' through 'MAKEFLAGS'. Words in the value of 'MAKEFLAGS' that contain '=', 'make' treats as variable definitions just as if they appeared on the command line. *Note Overriding Variables: Overriding. The options '-C', '-f', '-o', and '-W' are not put into 'MAKEFLAGS'; these options are not passed down. The '-j' option is a special case (*note Parallel Execution: Parallel.). If you set it to some numeric value 'N' and your operating system supports it (most any UNIX system will; others typically won't), the parent 'make' and all the sub-'make's will communicate to ensure that there are only 'N' jobs running at the same time between them all. Note that any job that is marked recursive (*note Instead of Executing Recipes: Instead of Execution.) doesn't count against the total jobs (otherwise we could get 'N' sub-'make's running and have no slots left over for any real work!) If your operating system doesn't support the above communication, 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: subsystem: cd subdir && $(MAKE) MAKEFLAGS= The command line variable definitions really appear in the variable 'MAKEOVERRIDES', and 'MAKEFLAGS' contains a reference to this variable. If you do want to pass flags down normally, but don't want to pass down the command line variable definitions, you can reset 'MAKEOVERRIDES' to empty, like this: MAKEOVERRIDES = This is not usually useful to do. However, some systems have a small fixed limit on the size of the environment, and putting so much information into the value of 'MAKEFLAGS' can exceed it. If you see the error message 'Arg list too long', this may be the problem. (For strict compliance with POSIX.2, changing 'MAKEOVERRIDES' does not affect 'MAKEFLAGS' if the special target '.POSIX' appears in the makefile. You probably do not care about this.) A similar variable 'MFLAGS' exists also, for historical compatibility. It has the same value as 'MAKEFLAGS' except that it does not contain the command line variable definitions, and it always begins with a hyphen unless it is empty ('MAKEFLAGS' begins with a hyphen only when it begins with an option that has no single-letter version, such as '--warn-undefined-variables'). 'MFLAGS' was traditionally used explicitly in the recursive 'make' command, like this: subsystem: cd subdir && $(MAKE) $(MFLAGS) but now 'MAKEFLAGS' makes this usage redundant. If you want your makefiles to be compatible with old 'make' programs, use this technique; it will work fine with more modern 'make' versions too. The 'MAKEFLAGS' variable can also be useful if you want to have certain options, such as '-k' (*note Summary of Options: Options Summary.), set each time you run 'make'. You simply put a value for 'MAKEFLAGS' in your environment. You can also set 'MAKEFLAGS' in a makefile, to specify additional flags that should also be in effect for that makefile. (Note that you cannot use 'MFLAGS' this way. That variable is set only for compatibility; 'make' does not interpret a value you set for it in any way.) When 'make' interprets the value of 'MAKEFLAGS' (either from the environment or from a makefile), it first prepends a hyphen if the value does not already begin with one. Then it chops the value into words separated by blanks, and parses these words as if they were options given on the command line (except that '-C', '-f', '-h', '-o', '-W', and their long-named versions are ignored; and there is no error for an invalid option). If you do put 'MAKEFLAGS' in your environment, you should be sure not to include any options that will drastically affect the actions of 'make' and undermine the purpose of makefiles and of 'make' itself. For instance, the '-t', '-n', and '-q' options, if put in one of these variables, could have disastrous consequences and would certainly have at least surprising and probably annoying effects. If you'd like to run other implementations of 'make' in addition to GNU 'make', and hence do not want to add GNU 'make'-specific flags to the 'MAKEFLAGS' variable, you can add them to the 'GNUMAKEFLAGS' variable instead. This variable is parsed just before 'MAKEFLAGS', in the same way as 'MAKEFLAGS'. When 'make' constructs 'MAKEFLAGS' to pass to a recursive 'make' it will include all flags, even those taken from 'GNUMAKEFLAGS'. As a result, after parsing 'GNUMAKEFLAGS' GNU 'make' sets this variable to the empty string to avoid duplicating flags during recursion. It's best to use 'GNUMAKEFLAGS' only with flags which won't materially change the behavior of your makefiles. If your makefiles require GNU make anyway then simply use 'MAKEFLAGS'. Flags such as '--no-print-directory' or '--output-sync' may be appropriate for 'GNUMAKEFLAGS'.  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: make: Entering directory `/u/gnu/make'. before doing anything else, and a line of the form: make: Leaving directory `/u/gnu/make'. when processing is completed. Normally, you do not need to specify this option because 'make' does it for you: '-w' is turned on automatically when you use the '-C' option, and in sub-'make's. 'make' will not automatically turn on '-w' if you also use '-s', which says to be silent, or if you use '--no-print-directory' to explicitly disable it.  File: make.info, Node: Canned Recipes, Next: Empty Recipes, Prev: Recursion, Up: Recipes 5.8 Defining Canned Recipes =========================== When the same sequence of commands is useful in making various targets, you can define it as a canned sequence with the 'define' directive, and refer to the canned sequence from the recipes for those targets. The canned sequence is actually a variable, so the name must not conflict with other variable names. Here is an example of defining a canned recipe: define run-yacc = yacc $(firstword $^) mv y.tab.c $@ endef Here 'run-yacc' is the name of the variable being defined; 'endef' marks the end of the definition; the lines in between are the commands. The 'define' directive does not expand variable references and function calls in the canned sequence; the '$' characters, parentheses, variable names, and so on, all become part of the value of the variable you are defining. *Note Defining Multi-Line Variables: Multi-Line, for a complete explanation of 'define'. The first command in this example runs Yacc on the first prerequisite of whichever rule uses the canned sequence. The output file from Yacc is always named 'y.tab.c'. The second command moves the output to the rule's target file name. To use the canned sequence, substitute the variable into the recipe of a rule. You can substitute it like any other variable (*note Basics of Variable References: Reference.). Because variables defined by 'define' are recursively expanded variables, all the variable references you wrote inside the 'define' are expanded now. For example: foo.c : foo.y $(run-yacc) 'foo.y' will be substituted for the variable '$^' when it occurs in 'run-yacc''s value, and 'foo.c' for '$@'. This is a realistic example, but this particular one is not needed in practice because 'make' has an implicit rule to figure out these commands based on the file names involved (*note Using Implicit Rules: Implicit Rules.). In recipe execution, each line of a canned sequence is treated just as if the line appeared on its own in the rule, preceded by a tab. In particular, 'make' invokes a separate sub-shell for each line. You can use the special prefix characters that affect command lines ('@', '-', and '+') on each line of a canned sequence. *Note Writing Recipes in Rules: Recipes. For example, using this canned sequence: define frobnicate = @echo "frobnicating target $@" frob-step-1 $< -o $@-step-1 frob-step-2 $@-step-1 -o $@ endef 'make' will not echo the first line, the 'echo' command. But it _will_ echo the following two recipe lines. On the other hand, prefix characters on the recipe line that refers to a canned sequence apply to every line in the sequence. So the rule: frob.out: frob.in @$(frobnicate) does not echo _any_ recipe lines. (*Note Recipe Echoing: Echoing, for a full explanation of '@'.)  File: make.info, Node: Empty Recipes, Prev: Canned Recipes, Up: Recipes 5.9 Using Empty Recipes ======================= It is sometimes useful to define recipes which do nothing. This is done simply by giving a recipe that consists of nothing but whitespace. For example: target: ; defines an empty recipe for 'target'. You could also use a line 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. 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. 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. *Note Phony Targets: Phony Targets, for a better way to do this.  File: make.info, Node: Using Variables, Next: Conditionals, Prev: Recipes, Up: Top 6 How to Use Variables ********************** A "variable" is a name defined in a makefile to represent a string of text, called the variable's "value". These values are substituted by explicit request into targets, prerequisites, recipes, and other parts of the makefile. (In some other versions of 'make', variables are called "macros".) Variables and functions in all parts of a makefile are expanded when read, except for in recipes, the right-hand sides of variable definitions using '=', and the bodies of variable definitions using the 'define' directive. Variables can represent lists of file names, options to pass to compilers, programs to run, directories to look in for source files, directories to write output in, or anything else you can imagine. A variable name may be any sequence of characters not containing ':', '#', '=', or whitespace. However, variable names containing characters other than letters, numbers, and underscores should be considered carefully, as in some shells they cannot be passed through the environment to a sub-'make' (*note Communicating Variables to a Sub-'make': Variables/Recursion.). Variable names beginning with '.' and an uppercase letter may be given special meaning in future versions of 'make'. Variable names are case-sensitive. The names 'foo', 'FOO', and 'Foo' all refer to different variables. It is traditional to use upper case letters in variable names, but we recommend using lower case letters for variable names that serve internal purposes in the makefile, and reserving upper case for parameters that control implicit rules or for parameters that the user should override with command options (*note Overriding Variables: Overriding.). A few variables have names that are a single punctuation character or just a few characters. These are the "automatic variables", and they have particular specialized uses. *Note Automatic Variables::. * Menu: * Reference:: How to use the value of a variable. * Flavors:: Variables come in two flavors. * Advanced:: Advanced features for referencing a variable. * Values:: All the ways variables get their values. * Setting:: How to set a variable in the makefile. * Appending:: How to append more text to the old value of a variable. * Override Directive:: How to set a variable in the makefile even if the user has set it with a command argument. * Multi-Line:: An alternate way to set a variable to a multi-line string. * Undefine Directive:: How to undefine a variable so that it appears as if it was never set. * Environment:: Variable values can come from the environment. * Target-specific:: Variable values can be defined on a per-target basis. * Pattern-specific:: Target-specific variable values can be applied to a group of targets that match a pattern. * Suppressing Inheritance:: Suppress inheritance of variables. * Special Variables:: Variables with special meaning or behavior.  File: make.info, Node: Reference, Next: Flavors, Prev: Using Variables, Up: Using Variables 6.1 Basics of Variable References ================================= To substitute a variable's value, write a dollar sign followed by the name of the variable in parentheses or braces: either '$(foo)' or '${foo}' is a valid reference to the variable 'foo'. This special significance of '$' is why you must write '$$' to have the effect of a single dollar sign in a file name or recipe. Variable references can be used in any context: targets, prerequisites, recipes, most directives, and new variable values. Here is an example of a common case, where a variable holds the names of all the object files in a program: objects = program.o foo.o utils.o program : $(objects) cc -o program $(objects) $(objects) : defs.h Variable references work by strict textual substitution. Thus, the rule foo = c prog.o : prog.$(foo) $(foo)$(foo) -$(foo) prog.$(foo) could be used to compile a C program 'prog.c'. Since spaces before the variable value are ignored in variable assignments, the value of 'foo' is precisely 'c'. (Don't actually write your makefiles this way!) A dollar sign followed by a character other than a dollar sign, open-parenthesis or open-brace treats that single character as the variable name. Thus, you could reference the variable 'x' with '$x'. However, this practice can lead to confusion (e.g., '$foo' refers to the variable 'f' followed by the string 'oo') so we recommend using parentheses or braces around all variables, even single-letter variables, unless omitting them gives significant readability improvements. One place where readability is often improved is automatic variables (*note Automatic Variables::).  File: make.info, Node: Flavors, Next: Advanced, Prev: Reference, Up: Using Variables 6.2 The Two Flavors of Variables ================================ There are two ways that a variable in GNU 'make' can have a value; we call them the two "flavors" of variables. The two flavors are distinguished in how they are defined and in what they do when expanded. The first flavor of variable is a "recursively expanded" variable. Variables of this sort are defined by lines using '=' (*note Setting Variables: Setting.) or by the 'define' directive (*note Defining Multi-Line Variables: Multi-Line.). The value you specify is installed verbatim; if it contains references to other variables, these references are expanded whenever this variable is substituted (in the course of expanding some other string). When this happens, it is called "recursive expansion". For example, foo = $(bar) bar = $(ugh) ugh = Huh? all:;echo $(foo) will echo 'Huh?': '$(foo)' expands to '$(bar)' which expands to '$(ugh)' which finally expands to 'Huh?'. This flavor of variable is the only sort supported by most other versions of 'make'. It has its advantages and its disadvantages. An advantage (most would say) is that: CFLAGS = $(include_dirs) -O include_dirs = -Ifoo -Ibar will do what was intended: when 'CFLAGS' is expanded in a recipe, it will expand to '-Ifoo -Ibar -O'. A major disadvantage is that you cannot append something on the end of a variable, as in CFLAGS = $(CFLAGS) -O because it will cause an infinite loop in the variable expansion. (Actually 'make' detects the infinite loop and reports an error.) Another disadvantage is that any functions (*note Functions for Transforming Text: Functions.) referenced in the definition will be executed every time the variable is expanded. This makes 'make' run slower; worse, it causes the 'wildcard' and 'shell' functions to give unpredictable results because you cannot easily control when they are called, or even how many times. To avoid all the problems and inconveniences of recursively expanded variables, there is another flavor: simply expanded variables. "Simply expanded variables" are defined by lines using ':=' or '::=' (*note Setting Variables: Setting.). Both forms are equivalent in GNU 'make'; however only the '::=' form is described by the POSIX standard (support for '::=' was added to the POSIX standard in 2012, so older versions of 'make' won't accept this form either). The value of a simply expanded variable is scanned once and for all, expanding any references to other variables and functions, when the variable is defined. The actual value of the simply expanded variable is the result of expanding the text that you write. It does not contain any references to other variables; it contains their values _as of the time this variable was defined_. Therefore, x := foo y := $(x) bar x := later is equivalent to y := foo bar x := later When a simply expanded variable is referenced, its value is substituted verbatim. Here is a somewhat more complicated example, illustrating the use of ':=' in conjunction with the 'shell' function. (*Note The 'shell' Function: Shell Function.) This example also shows use of the variable 'MAKELEVEL', which is changed when it is passed down from level to level. (*Note Communicating Variables to a Sub-'make': Variables/Recursion, for information about 'MAKELEVEL'.) ifeq (0,${MAKELEVEL}) whoami := $(shell whoami) host-type := $(shell arch) MAKE := ${MAKE} host-type=${host-type} whoami=${whoami} endif An advantage of this use of ':=' is that a typical 'descend into a directory' recipe then looks like this: ${subdirs}: ${MAKE} -C $@ all Simply expanded variables generally make complicated makefile programming more predictable because they work like variables in most programming languages. They allow you to redefine a variable using its own value (or its value processed in some way by one of the expansion functions) and to use the expansion functions much more efficiently (*note Functions for Transforming Text: Functions.). You can also use them to introduce controlled leading whitespace into variable values. Leading whitespace characters are discarded from your input before substitution of variable references and function calls; this means you can include leading spaces in a variable value by protecting them with variable references, like this: nullstring := space := $(nullstring) # end of the line Here the value of the variable 'space' is precisely one space. The comment '# end of the line' is included here just for clarity. Since trailing space characters are _not_ stripped from variable values, just a space at the end of the line would have the same effect (but be rather hard to read). If you put whitespace at the end of a variable value, it is a good idea to put a comment like that at the end of the line to make your intent clear. Conversely, if you do _not_ want any whitespace characters at the end of your variable value, you must remember not to put a random comment on the end of the line after some whitespace, such as this: dir := /foo/bar # directory to put the frobs in Here the value of the variable 'dir' is '/foo/bar ' (with four trailing spaces), which was probably not the intention. (Imagine something like '$(dir)/file' with this definition!) There is another assignment operator for variables, '?='. This is called a conditional variable assignment operator, because it only has an effect if the variable is not yet defined. This statement: FOO ?= bar is exactly equivalent to this (*note The 'origin' Function: Origin Function.): ifeq ($(origin FOO), undefined) FOO = bar endif Note that a variable set to an empty value is still defined, so '?=' will not set that variable.  File: make.info, Node: Advanced, Next: Values, Prev: Flavors, Up: Using Variables 6.3 Advanced Features for Reference to Variables ================================================ This section describes some advanced features you can use to reference variables in more flexible ways. * Menu: * Substitution Refs:: Referencing a variable with substitutions on the value. * Computed Names:: Computing the name of the variable to refer to.  File: make.info, Node: Substitution Refs, Next: Computed Names, Prev: Advanced, Up: Advanced 6.3.1 Substitution References ----------------------------- A "substitution reference" substitutes the value of a variable with alterations that you specify. It has the form '$(VAR:A=B)' (or '${VAR:A=B}') and its meaning is to take the value of the variable VAR, replace every A at the end of a word with B in that value, and substitute the resulting string. When we say "at the end of a word", we mean that A must appear either followed by whitespace or at the end of the value in order to be replaced; other occurrences of A in the value are unaltered. For example: foo := a.o b.o l.a c.o bar := $(foo:.o=.c) sets 'bar' to 'a.c b.c l.a c.c'. *Note Setting Variables: Setting. A substitution reference is shorthand for the 'patsubst' expansion function (*note Functions for String Substitution and Analysis: Text Functions.): '$(VAR:A=B)' is equivalent to '$(patsubst %A,%B,VAR)'. We provide substitution references as well as 'patsubst' for compatibility with other implementations of 'make'. Another type of substitution reference lets you use the full power of the 'patsubst' function. It has the same form '$(VAR:A=B)' described above, except that now A must contain a single '%' character. This case is equivalent to '$(patsubst A,B,$(VAR))'. *Note Functions for String Substitution and Analysis: Text Functions, for a description of the 'patsubst' function. For example: foo := a.o b.o l.a c.o bar := $(foo:%.o=%.c) sets 'bar' to 'a.c b.c l.a c.c'.  File: make.info, Node: Computed Names, Prev: Substitution Refs, Up: Advanced 6.3.2 Computed Variable Names ----------------------------- Computed variable names are a complicated concept needed only for sophisticated makefile programming. For most purposes you need not consider them, except to know that making a variable with a dollar sign in its name might have strange results. However, if you are the type that wants to understand everything, or you are actually interested in what they do, read on. Variables may be referenced inside the name of a variable. This is called a "computed variable name" or a "nested variable reference". For example, x = y y = z a := $($(x)) defines 'a' as 'z': the '$(x)' inside '$($(x))' expands to 'y', so '$($(x))' expands to '$(y)' which in turn expands to 'z'. Here the name of the variable to reference is not stated explicitly; it is computed by expansion of '$(x)'. The reference '$(x)' here is nested within the outer variable reference. The previous example shows two levels of nesting, but any number of levels is possible. For example, here are three levels: x = y y = z z = u a := $($($(x))) Here the innermost '$(x)' expands to 'y', so '$($(x))' expands to '$(y)' which in turn expands to 'z'; now we have '$(z)', which becomes 'u'. References to recursively-expanded variables within a variable name are re-expanded in the usual fashion. For example: x = $(y) y = z z = Hello a := $($(x)) defines 'a' as 'Hello': '$($(x))' becomes '$($(y))' which becomes '$(z)' which becomes 'Hello'. Nested variable references can also contain modified references and function invocations (*note Functions for Transforming Text: Functions.), just like any other reference. For example, using the 'subst' function (*note Functions for String Substitution and Analysis: Text Functions.): x = variable1 variable2 := Hello y = $(subst 1,2,$(x)) z = y a := $($($(z))) eventually defines 'a' as 'Hello'. It is doubtful that anyone would ever want to write a nested reference as convoluted as this one, but it works: '$($($(z)))' expands to '$($(y))' which becomes '$($(subst 1,2,$(x)))'. This gets the value 'variable1' from 'x' and changes it by substitution to 'variable2', so that the entire string becomes '$(variable2)', a simple variable reference whose value is 'Hello'. A computed variable name need not consist entirely of a single variable reference. It can contain several variable references, as well as some invariant text. For example, a_dirs := dira dirb 1_dirs := dir1 dir2 a_files := filea fileb 1_files := file1 file2 ifeq "$(use_a)" "yes" a1 := a else a1 := 1 endif ifeq "$(use_dirs)" "yes" df := dirs else df := files endif dirs := $($(a1)_$(df)) will give 'dirs' the same value as 'a_dirs', '1_dirs', 'a_files' or '1_files' depending on the settings of 'use_a' and 'use_dirs'. Computed variable names can also be used in substitution references: a_objects := a.o b.o c.o 1_objects := 1.o 2.o 3.o sources := $($(a1)_objects:.o=.c) defines 'sources' as either 'a.c b.c c.c' or '1.c 2.c 3.c', depending on the value of 'a1'. The only restriction on this sort of use of nested variable references is that they cannot specify part of the name of a function to be called. This is because the test for a recognized function name is done before the expansion of nested references. For example, ifdef do_sort func := sort else func := strip endif bar := a d b g q c foo := $($(func) $(bar)) attempts to give 'foo' the value of the variable 'sort a d b g q c' or 'strip a d b g q c', rather than giving 'a d b g q c' as the argument to either the 'sort' or the 'strip' function. This restriction could be removed in the future if that change is shown to be a good idea. You can also use computed variable names in the left-hand side of a variable assignment, or in a 'define' directive, as in: dir = foo $(dir)_sources := $(wildcard $(dir)/*.c) define $(dir)_print = lpr $($(dir)_sources) endef This example defines the variables 'dir', 'foo_sources', and 'foo_print'. Note that "nested variable references" are quite different from "recursively expanded variables" (*note The Two Flavors of Variables: Flavors.), though both are used together in complex ways when doing makefile programming.  File: make.info, Node: Values, Next: Setting, Prev: Advanced, Up: Using Variables 6.4 How Variables Get Their Values ================================== Variables can get values in several different ways: * You can specify an overriding value when you run 'make'. *Note Overriding Variables: Overriding. * You can specify a value in the makefile, either with an assignment (*note Setting Variables: Setting.) or with a verbatim definition (*note Defining Multi-Line Variables: Multi-Line.). * Variables in the environment become 'make' variables. *Note Variables from the Environment: Environment. * Several "automatic" variables are given new values for each rule. Each of these has a single conventional use. *Note Automatic Variables::. * Several variables have constant initial values. *Note Variables Used by Implicit Rules: Implicit Variables.  File: make.info, Node: Setting, Next: Appending, Prev: Values, Up: Using Variables 6.5 Setting Variables ===================== 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, objects = main.o foo.o bar.o utils.o defines a variable named 'objects'. Whitespace around the variable name and immediately after the '=' is ignored. Variables defined with '=' are "recursively expanded" variables. Variables defined with ':=' or '::=' are "simply expanded" variables; these definitions can contain variable references which will be expanded before the definition is made. *Note The Two Flavors of Variables: Flavors. The variable name may contain function and variable references, which are expanded when the line is read to find the actual variable name to use. There is no limit on the length of the value of a variable except the amount of memory on the computer. You can split the value of a variable into multiple physical lines for readability (*note Splitting Long Lines: Splitting Lines.). Most variable names are considered to have the empty string as a value if you have never set them. Several variables have built-in initial values that are not empty, but you can set them in the usual ways (*note Variables Used by Implicit Rules: Implicit Variables.). Several special variables are set automatically to a new value for each rule; these are called the "automatic" variables (*note Automatic Variables::). If you'd like a variable to be set to a value only if it's not already set, then you can use the shorthand operator '?=' instead of '='. These two settings of the variable 'FOO' are identical (*note The 'origin' Function: Origin Function.): FOO ?= bar and ifeq ($(origin FOO), undefined) FOO = bar endif 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: hash != printf '\043' file_list != find . -name '*.c' If the result of the execution could produce a '$', and you don't intend what follows that to be interpreted as a make variable or function reference, then you must replace every '$' with '$$' as part of the execution. Alternatively, you can set a simply expanded variable to the result of running a program using the 'shell' function call. *Note 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.  File: make.info, Node: Appending, Next: Override Directive, Prev: Setting, Up: Using Variables 6.6 Appending More Text to Variables ==================================== Often it is useful to add more text to the value of a variable already defined. You do this with a line containing '+=', like this: objects += another.o This takes the value of the variable 'objects', and adds the text 'another.o' to it (preceded by a single space, if it has a value already). Thus: objects = main.o foo.o bar.o utils.o objects += another.o sets 'objects' to 'main.o foo.o bar.o utils.o another.o'. Using '+=' is similar to: objects = main.o foo.o bar.o utils.o objects := $(objects) another.o but differs in ways that become important when you use more complex values. When the variable in question has not been defined before, '+=' acts just like normal '=': it defines a recursively-expanded variable. However, when there _is_ a previous definition, exactly what '+=' does depends on what flavor of variable you defined originally. *Note The Two Flavors of Variables: Flavors, for an explanation of the two flavors of variables. When you add to a variable's value with '+=', 'make' acts essentially as if you had included the extra text in the initial definition of the variable. If you defined it first with ':=' or '::=', making it a simply-expanded variable, '+=' adds to that simply-expanded definition, and expands the new text before appending it to the old value just as ':=' does (see *note Setting Variables: Setting, for a full explanation of ':=' or '::='). In fact, variable := value variable += more is exactly equivalent to: variable := value variable := $(variable) more On the other hand, when you use '+=' with a variable that you defined first to be recursively-expanded using plain '=', 'make' does something a bit different. Recall that when you define a recursively-expanded variable, 'make' does not expand the value you set for variable and function references immediately. Instead it stores the text verbatim, and saves these variable and function references to be expanded later, when you refer to the new variable (*note The Two Flavors of Variables: Flavors.). When you use '+=' on a recursively-expanded variable, it is this unexpanded text to which 'make' appends the new text you specify. variable = value variable += more is roughly equivalent to: temp = value variable = $(temp) more except that of course it never defines a variable called 'temp'. The importance of this comes when the variable's old value contains variable references. Take this common example: CFLAGS = $(includes) -O ... CFLAGS += -pg # enable profiling 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: CFLAGS := $(CFLAGS) -pg # enable profiling This is pretty close, but not quite what we want. Using ':=' redefines 'CFLAGS' as a simply-expanded variable; this means 'make' expands the text '$(CFLAGS) -pg' before setting the variable. If 'includes' is not yet defined, we get ' -O -pg', and a later definition of 'includes' will have no effect. Conversely, by using '+=' we set 'CFLAGS' to the _unexpanded_ value '$(includes) -O -pg'. Thus we preserve the reference to 'includes', so if that variable gets defined at any later point, a reference like '$(CFLAGS)' still uses its value.  File: make.info, Node: Override Directive, Next: Multi-Line, Prev: Appending, Up: Using Variables 6.7 The 'override' Directive ============================ If a variable has been set with a command argument (*note Overriding Variables: Overriding.), then ordinary assignments in the makefile are ignored. If you want to set the variable in the makefile even though it was set with a command argument, you can use an 'override' directive, which is a line that looks like this: override VARIABLE = VALUE or override VARIABLE := VALUE To append more text to a variable defined on the command line, use: override VARIABLE += MORE TEXT *Note Appending More Text to Variables: Appending. Variable assignments marked with the 'override' flag have a higher priority than all other assignments, except another 'override'. Subsequent assignments or appends to this variable which are not marked 'override' will be ignored. The 'override' directive was not invented for escalation in the war between makefiles and command arguments. It was invented so you can alter and add to values that the user specifies with command arguments. For example, suppose you always want the '-g' switch when you run the C compiler, but you would like to allow the user to specify the other switches with a command argument just as usual. You could use this 'override' directive: override CFLAGS += -g You can also use 'override' directives with 'define' directives. This is done as you might expect: override define foo = bar endef *Note Defining Multi-Line Variables: Multi-Line.  File: make.info, Node: Multi-Line, Next: Undefine Directive, Prev: Override Directive, Up: Using Variables 6.8 Defining Multi-Line Variables ================================= Another way to set the value of a variable is to use the 'define' directive. This directive has an unusual syntax which allows newline characters to be included in the value, which is convenient for defining both canned sequences of commands (*note Defining Canned Recipes: Canned Recipes.), and also sections of makefile syntax to use with 'eval' (*note Eval Function::). The 'define' directive is followed on the same line by the name of the variable being defined and an (optional) assignment operator, and nothing more. The value to give the variable appears on the following lines. The end of the value is marked by a line containing just the word 'endef'. Aside from this difference in syntax, 'define' works just like any other variable definition. The variable name may contain function and variable references, which are expanded when the directive is read to find the actual variable name to use. The final newline before the 'endef' is not included in the value; if you want your value to contain a trailing newline you must include a blank line. For example in order to define a variable that contains a newline character you must use _two_ empty lines, not one: define newline endef You may omit the variable assignment operator if you prefer. If omitted, 'make' assumes it to be '=' and creates a recursively-expanded variable (*note The Two Flavors of Variables: Flavors.). When using a '+=' operator, the value is appended to the previous value as with any other append operation: with a single space separating the old and new values. You may nest 'define' directives: 'make' will keep track of nested directives and report an error if they are not all properly closed with 'endef'. Note that lines beginning with the recipe prefix character are considered part of a recipe, so any 'define' or 'endef' strings appearing on such a line will not be considered 'make' directives. define two-lines echo foo echo $(bar) endef When used in a recipe, the previous example is functionally equivalent to this: two-lines = echo foo; echo $(bar) since two commands separated by semicolon behave much like two separate shell commands. However, note that using two separate lines means 'make' will invoke the shell twice, running an independent sub-shell for each line. *Note Recipe Execution: Execution. If you want variable definitions made with 'define' to take precedence over command-line variable definitions, you can use the 'override' directive together with 'define': override define two-lines = foo $(bar) endef *Note The 'override' Directive: Override Directive.  File: make.info, Node: Undefine Directive, Next: Environment, Prev: Multi-Line, Up: Using Variables 6.9 Undefining Variables ======================== If you want to clear a variable, setting its value to empty is usually sufficient. Expanding such a variable will yield the same result (empty string) regardless of whether it was set or not. However, if you are using the 'flavor' (*note Flavor Function::) and 'origin' (*note Origin Function::) functions, there is a difference between a variable that was never set and a variable with an empty value. In such situations you may want to use the 'undefine' directive to make a variable appear as if it was never set. For example: foo := foo bar = bar undefine foo undefine bar $(info $(origin foo)) $(info $(flavor bar)) This example will print "undefined" for both variables. If you want to undefine a command-line variable definition, you can use the 'override' directive together with 'undefine', similar to how this is done for variable definitions: override undefine CFLAGS  File: make.info, Node: Environment, Next: Target-specific, Prev: Undefine Directive, Up: Using Variables 6.10 Variables from the Environment =================================== Variables in 'make' can come from the environment in which 'make' is run. Every environment variable that 'make' sees when it starts up is transformed into a 'make' variable with the same name and value. However, an explicit assignment in the makefile, or with a command argument, overrides the environment. (If the '-e' flag is specified, then values from the environment override assignments in the makefile. *Note Summary of Options: Options Summary. But this is not recommended practice.) Thus, by setting the variable 'CFLAGS' in your environment, you can cause all C compilations in most makefiles to use the compiler switches you prefer. This is safe for variables with standard or conventional meanings because you know that no makefile will use them for other things. (Note this is not totally reliable; some makefiles set 'CFLAGS' explicitly and therefore are not affected by the value in the environment.) When 'make' runs a recipe, variables defined in the makefile are placed into the environment of each shell. This allows you to pass values to sub-'make' invocations (*note Recursive Use of 'make': Recursion.). By default, only variables that came from the environment or the command line are passed to recursive invocations. You can use the 'export' directive to pass other variables. *Note Communicating Variables to a Sub-'make': Variables/Recursion, for full details. Other use of variables from the environment is not recommended. It is not wise for makefiles to depend for their functioning on environment variables set up outside their control, since this would cause different users to get different results from the same makefile. This is against the whole purpose of most makefiles. Such problems would be especially likely with the variable 'SHELL', which is normally present in the environment to specify the user's choice of interactive shell. It would be very undesirable for this choice to affect 'make'; so, 'make' handles the 'SHELL' environment variable in a special way; see *note Choosing the Shell::.  File: make.info, Node: Target-specific, Next: Pattern-specific, Prev: Environment, Up: Using Variables 6.11 Target-specific Variable Values ==================================== Variable values in 'make' are usually global; that is, they are the same regardless of where they are evaluated (unless they're reset, of course). One exception to that is automatic variables (*note Automatic Variables::). The other exception is "target-specific variable values". This feature allows you to define different values for the same variable, based on the target that 'make' is currently building. As with automatic variables, these values are only available within the context of a target's recipe (and in other target-specific assignments). Set a target-specific variable value like this: TARGET ... : VARIABLE-ASSIGNMENT Target-specific variable assignments can be prefixed with any or all of the special keywords 'export', 'override', or 'private'; these apply their normal behavior to this instance of the variable only. Multiple TARGET values create a target-specific variable value for each member of the target list individually. The VARIABLE-ASSIGNMENT can be any valid form of assignment; recursive ('='), simple (':=' or '::='), appending ('+='), or conditional ('?='). All variables that appear within the VARIABLE-ASSIGNMENT are evaluated within the context of the target: thus, any previously-defined target-specific variable values will be in effect. Note that this variable is actually distinct from any "global" value: the two variables do not have to have the same flavor (recursive vs. simple). Target-specific variables have the same priority as any other makefile variable. Variables provided on the command line (and in the environment if the '-e' option is in force) will take precedence. Specifying the 'override' directive will allow the target-specific variable value to be preferred. There is one more special feature of target-specific variables: when you define a target-specific variable that variable value is also in effect for all prerequisites of this target, and all their prerequisites, etc. (unless those prerequisites override that variable with their own target-specific variable value). So, for example, a statement like this: prog : CFLAGS = -g prog : prog.o foo.o bar.o will set 'CFLAGS' to '-g' in the recipe for 'prog', but it will also set 'CFLAGS' to '-g' in the recipes that create 'prog.o', 'foo.o', and 'bar.o', and any recipes which create their prerequisites. Be aware that a given prerequisite will only be built once per invocation of make, at most. If the same file is a prerequisite of multiple targets, and each of those targets has a different value for the same target-specific variable, then the first target to be built will cause that prerequisite to be built and the prerequisite will inherit the target-specific value from the first target. It will ignore the target-specific values from any other targets.  File: make.info, Node: Pattern-specific, Next: Suppressing Inheritance, Prev: Target-specific, Up: Using Variables 6.12 Pattern-specific Variable Values ===================================== In addition to target-specific variable values (*note Target-specific Variable Values: Target-specific.), GNU 'make' supports pattern-specific variable values. In this form, the variable is defined for any target that matches the pattern specified. Set a pattern-specific variable value like this: PATTERN ... : VARIABLE-ASSIGNMENT where PATTERN is a %-pattern. As with target-specific variable values, multiple PATTERN values create a pattern-specific variable value for each pattern individually. The VARIABLE-ASSIGNMENT can be any valid form of assignment. Any command line variable setting will take precedence, unless 'override' is specified. For example: %.o : CFLAGS = -O will assign 'CFLAGS' the value of '-O' for all targets matching the pattern '%.o'. If a target matches more than one pattern, the matching pattern-specific variables with longer stems are interpreted first. This results in more specific variables taking precedence over the more generic ones, for example: %.o: %.c $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@ lib/%.o: CFLAGS := -fPIC -g %.o: CFLAGS := -g all: foo.o lib/bar.o In this example the first definition of the 'CFLAGS' variable will be used to update 'lib/bar.o' even though the second one also applies to this target. Pattern-specific variables which result in the same stem length are considered in the order in which they were defined in the makefile. Pattern-specific variables are searched after any target-specific variables defined explicitly for that target, and before target-specific variables defined for the parent target.  File: make.info, Node: Suppressing Inheritance, Next: Special Variables, Prev: Pattern-specific, Up: Using Variables 6.13 Suppressing Inheritance ============================ As described in previous sections, 'make' variables are inherited by prerequisites. This capability allows you to modify the behavior of a prerequisite based on which targets caused it to be rebuilt. For example, you might set a target-specific variable on a 'debug' target, then running 'make debug' will cause that variable to be inherited by all prerequisites of 'debug', while just running 'make all' (for example) would not have that assignment. Sometimes, however, you may not want a variable to be inherited. For these situations, 'make' provides the 'private' modifier. Although this modifier can be used with any variable assignment, it makes the most sense with target- and pattern-specific variables. Any variable marked 'private' will be visible to its local target but will not be inherited by prerequisites of that target. A global variable marked 'private' will be visible in the global scope but will not be inherited by any target, and hence will not be visible in any recipe. As an example, consider this makefile: EXTRA_CFLAGS = prog: private EXTRA_CFLAGS = -L/usr/local/lib prog: a.o b.o Due to the 'private' modifier, 'a.o' and 'b.o' will not inherit the 'EXTRA_CFLAGS' variable assignment from the 'prog' target.  File: make.info, Node: Special Variables, Prev: Suppressing Inheritance, Up: Using Variables 6.14 Other Special Variables ============================ GNU 'make' supports some variables that have special properties. 'MAKEFILE_LIST' Contains the name of each makefile that is parsed by 'make', in the order in which it was parsed. The name is appended just before 'make' begins to parse the makefile. Thus, if the first thing a makefile does is examine the last word in this variable, it will be the name of the current makefile. Once the current makefile has used 'include', however, the last word will be the just-included makefile. If a makefile named 'Makefile' has this content: name1 := $(lastword $(MAKEFILE_LIST)) include inc.mk name2 := $(lastword $(MAKEFILE_LIST)) all: @echo name1 = $(name1) @echo name2 = $(name2) then you would expect to see this output: name1 = Makefile name2 = inc.mk '.DEFAULT_GOAL' Sets the default goal to be used if no targets were specified on the command line (*note Arguments to Specify the Goals: Goals.). The '.DEFAULT_GOAL' variable allows you to discover the current default goal, restart the default goal selection algorithm by clearing its value, or to explicitly set the default goal. The following example illustrates these cases: # Query the default goal. ifeq ($(.DEFAULT_GOAL),) $(warning no default goal is set) endif .PHONY: foo foo: ; @echo $@ $(warning default goal is $(.DEFAULT_GOAL)) # Reset the default goal. .DEFAULT_GOAL := .PHONY: bar bar: ; @echo $@ $(warning default goal is $(.DEFAULT_GOAL)) # Set our own. .DEFAULT_GOAL := foo This makefile prints: no default goal is set default goal is foo default goal is bar foo Note that assigning more than one target name to '.DEFAULT_GOAL' is invalid and will result in an error. 'MAKE_RESTARTS' This variable is set only if this instance of 'make' has restarted (*note How Makefiles Are Remade: Remaking Makefiles.): it will contain the number of times this instance has restarted. Note this is not the same as recursion (counted by the 'MAKELEVEL' variable). You should not set, modify, or export this variable. 'MAKE_TERMOUT' 'MAKE_TERMERR' When 'make' starts it will check whether stdout and stderr will show their output on a terminal. If so, it will set 'MAKE_TERMOUT' and 'MAKE_TERMERR', respectively, to the name of the terminal device (or 'true' if this cannot be determined). If set these variables will be marked for export. These variables will not be changed by 'make' and they will not be modified if already set. These values can be used (particularly in combination with output synchronization (*note Output During Parallel Execution: Parallel Output.) to determine whether 'make' itself is writing to a terminal; they can be tested to decide whether to force recipe commands to generate colorized output for example. If you invoke a sub-'make' and redirect its stdout or stderr it is your responsibility to reset or unexport these variables as well, if your makefiles rely on them. '.RECIPEPREFIX' The first character of the value of this variable is used as the character make assumes is introducing a recipe line. If the variable is empty (as it is by default) that character is the standard tab character. For example, this is a valid makefile: .RECIPEPREFIX = > all: > @echo Hello, world The value of '.RECIPEPREFIX' can be changed multiple times; once set it stays in effect for all rules parsed until it is modified. '.VARIABLES' Expands to a list of the _names_ of all global variables defined so far. This includes variables which have empty values, as well as built-in variables (*note Variables Used by Implicit Rules: Implicit Variables.), but does not include any variables which are only defined in a target-specific context. Note that any value you assign to this variable will be ignored; it will always return its special value. '.FEATURES' Expands to a list of special features supported by this version of 'make'. Possible values include, but are not limited to: 'archives' Supports 'ar' (archive) files using special file name syntax. *Note Using 'make' to Update Archive Files: Archives. 'check-symlink' Supports the '-L' ('--check-symlink-times') flag. *Note Summary of Options: Options Summary. 'else-if' Supports "else if" non-nested conditionals. *Note Syntax of Conditionals: Conditional Syntax. 'jobserver' Supports "job server" enhanced parallel builds. *Note Parallel Execution: Parallel. 'oneshell' Supports the '.ONESHELL' special target. *Note Using One Shell: One Shell. 'order-only' Supports order-only prerequisites. *Note Types of Prerequisites: Prerequisite Types. 'second-expansion' Supports secondary expansion of prerequisite lists. 'shortest-stem' Uses the "shortest stem" method of choosing which pattern, of multiple applicable options, will be used. *Note How Patterns Match: Pattern Match. 'target-specific' Supports target-specific and pattern-specific variable assignments. *Note Target-specific Variable Values: Target-specific. 'undefine' Supports the 'undefine' directive. *Note Undefine Directive::. 'guile' Has GNU Guile available as an embedded extension language. *Note GNU Guile Integration: Guile Integration. 'load' Supports dynamically loadable objects for creating custom extensions. *Note Loading Dynamic Objects: Loading Objects. '.INCLUDE_DIRS' Expands to a list of directories that 'make' searches for included makefiles (*note Including Other Makefiles: Include.). '.EXTRA_PREREQS' Each word in this variable is a new prerequisite which is added to targets for which it is set. These prerequisites differ from normal prerequisites in that they do not appear in any of the automatic variables (*note Automatic Variables::). This allows prerequisites to be defined which do not impact the recipe. Consider a rule to link a program: myprog: myprog.o file1.o file2.o $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LDLIBS) Now suppose you want to enhance this makefile to ensure that updates to the compiler cause the program to be re-linked. You can add the compiler as a prerequisite, but you must ensure that it's not passed as an argument to link command. You'll need something like this: myprog: myprog.o file1.o file2.o $(CC) $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(filter-out $(CC),$^) $(LDLIBS) Then consider having multiple extra prerequisites: they would all have to be filtered out. Using '.EXTRA_PREREQS' and target-specific variables provides a simpler solution: myprog: myprog.o file1.o file2.o $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LDLIBS) myprog: .EXTRA_PREREQS = $(CC) This feature can also be useful if you want to add prerequisites to a makefile you cannot easily modify: you can create a new file such as 'extra.mk': myprog: .EXTRA_PREREQS = $(CC) then invoke 'make -f extra.mk -f Makefile'. Setting '.EXTRA_PREREQS' globally will cause those prerequisites to be added to all targets (which did not themselves override it with a target-specific value). Note 'make' is smart enough not to add a prerequisite listed in '.EXTRA_PREREQS' as a prerequisite to itself.  File: make.info, Node: Conditionals, Next: Functions, Prev: Using Variables, Up: Top 7 Conditional Parts of Makefiles ******************************** A "conditional" directive causes part of a makefile to be obeyed or ignored depending on the values of variables. Conditionals can compare the value of one variable to another, or the value of a variable to a constant string. Conditionals control what 'make' actually "sees" in the makefile, so they _cannot_ be used to control recipes at the time of execution. * Menu: * Conditional Example:: Example of a conditional * Conditional Syntax:: The syntax of conditionals. * Testing Flags:: Conditionals that test flags.  File: make.info, Node: Conditional Example, Next: Conditional Syntax, Prev: Conditionals, Up: Conditionals 7.1 Example of a Conditional ============================ The following example of a conditional tells 'make' to use one set of libraries if the 'CC' variable is 'gcc', and a different set of libraries otherwise. It works by controlling which of two recipe lines will be used for the rule. The result is that 'CC=gcc' as an argument to 'make' changes not only which compiler is used but also which libraries are linked. libs_for_gcc = -lgnu normal_libs = foo: $(objects) ifeq ($(CC),gcc) $(CC) -o foo $(objects) $(libs_for_gcc) else $(CC) -o foo $(objects) $(normal_libs) endif This conditional uses three directives: one 'ifeq', one 'else' and one 'endif'. The 'ifeq' directive begins the conditional, and specifies the condition. It contains two arguments, separated by a comma and surrounded by parentheses. Variable substitution is performed on both arguments and then they are compared. The lines of the makefile following the 'ifeq' are obeyed if the two arguments match; otherwise they are ignored. The 'else' directive causes the following lines to be obeyed if the previous conditional failed. In the example above, this means that the second alternative linking command is used whenever the first alternative is not used. It is optional to have an 'else' in a conditional. The 'endif' directive ends the conditional. Every conditional must end with an 'endif'. Unconditional makefile text follows. As this example illustrates, conditionals work at the textual level: the lines of the conditional are treated as part of the makefile, or ignored, according to the condition. This is why the larger syntactic units of the makefile, such as rules, may cross the beginning or the end of the conditional. When the variable 'CC' has the value 'gcc', the above example has this effect: foo: $(objects) $(CC) -o foo $(objects) $(libs_for_gcc) When the variable 'CC' has any other value, the effect is this: foo: $(objects) $(CC) -o foo $(objects) $(normal_libs) Equivalent results can be obtained in another way by conditionalizing a variable assignment and then using the variable unconditionally: libs_for_gcc = -lgnu normal_libs = ifeq ($(CC),gcc) libs=$(libs_for_gcc) else libs=$(normal_libs) endif foo: $(objects) $(CC) -o foo $(objects) $(libs)  File: make.info, Node: Conditional Syntax, Next: Testing Flags, Prev: Conditional Example, Up: Conditionals 7.2 Syntax of Conditionals ========================== The syntax of a simple conditional with no 'else' is as follows: CONDITIONAL-DIRECTIVE TEXT-IF-TRUE endif The TEXT-IF-TRUE may be any lines of text, to be considered as part of the makefile if the condition is true. If the condition is false, no text is used instead. The syntax of a complex conditional is as follows: CONDITIONAL-DIRECTIVE TEXT-IF-TRUE else TEXT-IF-FALSE endif or: CONDITIONAL-DIRECTIVE-ONE TEXT-IF-ONE-IS-TRUE else CONDITIONAL-DIRECTIVE-TWO TEXT-IF-TWO-IS-TRUE else TEXT-IF-ONE-AND-TWO-ARE-FALSE endif There can be as many "'else' CONDITIONAL-DIRECTIVE" clauses as necessary. Once a given condition is true, TEXT-IF-TRUE is used and no other clause is used; if no condition is true then TEXT-IF-FALSE is used. The TEXT-IF-TRUE and TEXT-IF-FALSE can be any number of lines of text. The syntax of the CONDITIONAL-DIRECTIVE is the same whether the conditional is simple or complex; after an 'else' or not. There are four different directives that test different conditions. Here is a table of them: 'ifeq (ARG1, ARG2)' 'ifeq 'ARG1' 'ARG2'' 'ifeq "ARG1" "ARG2"' 'ifeq "ARG1" 'ARG2'' 'ifeq 'ARG1' "ARG2"' Expand all variable references in ARG1 and ARG2 and compare them. If they are identical, the TEXT-IF-TRUE is effective; otherwise, the TEXT-IF-FALSE, if any, is effective. Often you want to test if a variable has a non-empty value. When the value results from complex expansions of variables and functions, expansions you would consider empty may actually contain whitespace characters and thus are not seen as empty. However, you can use the 'strip' function (*note Text Functions::) to avoid interpreting whitespace as a non-empty value. For example: ifeq ($(strip $(foo)),) TEXT-IF-EMPTY endif will evaluate TEXT-IF-EMPTY even if the expansion of '$(foo)' contains whitespace characters. 'ifneq (ARG1, ARG2)' 'ifneq 'ARG1' 'ARG2'' 'ifneq "ARG1" "ARG2"' 'ifneq "ARG1" 'ARG2'' 'ifneq 'ARG1' "ARG2"' Expand all variable references in ARG1 and ARG2 and compare them. If they are different, the TEXT-IF-TRUE is effective; otherwise, the TEXT-IF-FALSE, if any, is effective. 'ifdef VARIABLE-NAME' The 'ifdef' form takes the _name_ of a variable as its argument, 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 expanded, so it could be a variable or function that expands to the name of a variable. For example: bar = true foo = bar ifdef $(foo) frobozz = yes endif The variable reference '$(foo)' is expanded, yielding 'bar', which is considered to be the name of a variable. The variable 'bar' is not expanded, but its value is examined to determine if it is non-empty. Note that 'ifdef' only tests whether a variable has a value. It does not expand the variable to see if that value is nonempty. Consequently, tests using 'ifdef' return true for all definitions except those like 'foo ='. To test for an empty value, use 'ifeq ($(foo),)'. For example, bar = foo = $(bar) ifdef foo frobozz = yes else frobozz = no endif sets 'frobozz' to 'yes', while: foo = ifdef foo frobozz = yes else frobozz = no endif sets 'frobozz' to 'no'. 'ifndef VARIABLE-NAME' If the variable VARIABLE-NAME has an empty value, the TEXT-IF-TRUE is effective; otherwise, the TEXT-IF-FALSE, if any, is effective. The rules for expansion and testing of VARIABLE-NAME are identical to the 'ifdef' directive. Extra spaces are allowed and ignored at the beginning of the conditional directive line, but a tab is not allowed. (If the line begins with a tab, it will be considered part of a recipe for a rule.) Aside from this, extra spaces or tabs may be inserted with no effect anywhere except within the directive name or within an argument. A comment starting with '#' may appear at the end of the line. The other two directives that play a part in a conditional are 'else' and 'endif'. Each of these directives is written as one word, with no arguments. Extra spaces are allowed and ignored at the beginning of the line, and spaces or tabs at the end. A comment starting with '#' may appear at the end of the line. Conditionals affect which lines of the makefile 'make' uses. If the condition is true, 'make' reads the lines of the TEXT-IF-TRUE as part of the makefile; if the condition is false, 'make' ignores those lines completely. It follows that syntactic units of the makefile, such as rules, may safely be split across the beginning or the end of the conditional. 'make' evaluates conditionals when it reads a makefile. Consequently, you cannot use automatic variables in the tests of conditionals because they are not defined until recipes are run (*note Automatic Variables::). To prevent intolerable confusion, it is not permitted to start a conditional in one makefile and end it in another. However, you may write an 'include' directive within a conditional, provided you do not attempt to terminate the conditional inside the included file.  File: make.info, Node: Testing Flags, Prev: Conditional Syntax, Up: Conditionals 7.3 Conditionals that Test Flags ================================ You can write a conditional that tests 'make' command flags such as '-t' by using the variable 'MAKEFLAGS' together with the 'findstring' function (*note Functions for String Substitution and Analysis: Text Functions.). This is useful when 'touch' is not enough to make a file appear up to date. The 'findstring' function determines whether one string appears as a substring of another. If you want to test for the '-t' flag, use 't' as the first string and the value of 'MAKEFLAGS' as the other. For example, here is how to arrange to use 'ranlib -t' to finish marking an archive file up to date: archive.a: ... ifneq (,$(findstring t,$(MAKEFLAGS))) +touch archive.a +ranlib -t archive.a else ranlib archive.a endif The '+' prefix marks those recipe lines as "recursive" so that they will be executed despite use of the '-t' flag. *Note Recursive Use of 'make': Recursion.  File: make.info, Node: Functions, Next: Running, Prev: Conditionals, Up: Top 8 Functions for Transforming Text ********************************* "Functions" allow you to do text processing in the makefile to compute the files to operate on or the commands to use in recipes. You use a function in a "function call", where you give the name of the function and some text (the "arguments") for the function to operate on. The result of the function's processing is substituted into the makefile at the point of the call, just as a variable might be substituted. * Menu: * Syntax of Functions:: How to write a function call. * Text Functions:: General-purpose text manipulation functions. * File Name Functions:: Functions for manipulating file names. * Conditional Functions:: Functions that implement conditions. * Foreach Function:: Repeat some text with controlled variation. * File Function:: Write text to a file. * Call Function:: Expand a user-defined function. * Value Function:: Return the un-expanded value of a variable. * Eval Function:: Evaluate the arguments as makefile syntax. * Origin Function:: Find where a variable got its value. * Flavor Function:: Find out the flavor of a variable. * Make Control Functions:: Functions that control how make runs. * Shell Function:: Substitute the output of a shell command. * Guile Function:: Use GNU Guile embedded scripting language.  File: make.info, Node: Syntax of Functions, Next: Text Functions, Prev: Functions, Up: Functions 8.1 Function Call Syntax ======================== A function call resembles a variable reference. It can appear anywhere a variable reference can appear, and it is expanded using the same rules as variable references. A function call looks like this: $(FUNCTION ARGUMENTS) or like this: ${FUNCTION ARGUMENTS} Here FUNCTION is a function name; one of a short list of names that are part of 'make'. You can also essentially create your own functions by using the 'call' built-in function. The ARGUMENTS are the arguments of the function. They are separated from the function name by one or more spaces or tabs, and if there is more than one argument, then they are separated by commas. Such whitespace and commas are not part of an argument's value. The delimiters which you use to surround the function call, whether parentheses or braces, can appear in an argument only in matching pairs; the other kind of delimiters may appear singly. If the arguments themselves contain other function calls or variable references, it is wisest to use the same kind of delimiters for all the references; write '$(subst a,b,$(x))', not '$(subst a,b,${x})'. This is because it is clearer, and because only one type of delimiter is matched to find the end of the reference. The text written for each argument is processed by substitution of variables and function calls to produce the argument value, which is the text on which the function acts. The substitution is done in the order in which the arguments appear. Commas and unmatched parentheses or braces cannot appear in the text of an argument as written; leading spaces cannot appear in the text of the first argument as written. These characters can be put into the argument value by variable substitution. First define variables 'comma' and 'space' whose values are isolated comma and space characters, then substitute these variables where such characters are wanted, like this: comma:= , empty:= space:= $(empty) $(empty) foo:= a b c bar:= $(subst $(space),$(comma),$(foo)) # bar is now 'a,b,c'. Here the 'subst' function replaces each space with a comma, through the value of 'foo', and substitutes the result.  File: make.info, Node: Text Functions, Next: File Name Functions, Prev: Syntax of Functions, Up: Functions 8.2 Functions for String Substitution and Analysis ================================================== Here are some functions that operate on strings: '$(subst FROM,TO,TEXT)' Performs a textual replacement on the text TEXT: each occurrence of FROM is replaced by TO. The result is substituted for the function call. For example, $(subst ee,EE,feet on the street) produces the value 'fEEt on the strEEt'. '$(patsubst PATTERN,REPLACEMENT,TEXT)' Finds whitespace-separated words in TEXT that match PATTERN and replaces them with REPLACEMENT. Here PATTERN may contain a '%' which acts as a wildcard, matching any number of any characters within a word. If REPLACEMENT also contains a '%', the '%' is replaced by the text that matched the '%' in PATTERN. Only the first '%' in the PATTERN and REPLACEMENT is treated this way; any subsequent '%' is unchanged. '%' characters in 'patsubst' function invocations can be quoted with preceding backslashes ('\'). Backslashes that would otherwise quote '%' characters can be quoted with more backslashes. Backslashes that quote '%' characters or other backslashes are removed from the pattern before it is compared file names or has a stem substituted into it. Backslashes that are not in danger of quoting '%' characters go unmolested. For example, the pattern 'the\%weird\\%pattern\\' has 'the%weird\' preceding the operative '%' character, and 'pattern\\' following it. The final two backslashes are left alone because they cannot affect any '%' character. Whitespace between words is folded into single space characters; leading and trailing whitespace is discarded. For example, $(patsubst %.c,%.o,x.c.c bar.c) produces the value 'x.c.o bar.o'. Substitution references (*note Substitution References: Substitution Refs.) are a simpler way to get the effect of the 'patsubst' function: $(VAR:PATTERN=REPLACEMENT) is equivalent to $(patsubst PATTERN,REPLACEMENT,$(VAR)) The second shorthand simplifies one of the most common uses of 'patsubst': replacing the suffix at the end of file names. $(VAR:SUFFIX=REPLACEMENT) is equivalent to $(patsubst %SUFFIX,%REPLACEMENT,$(VAR)) For example, you might have a list of object files: objects = foo.o bar.o baz.o To get the list of corresponding source files, you could simply write: $(objects:.o=.c) instead of using the general form: $(patsubst %.o,%.c,$(objects)) '$(strip STRING)' Removes leading and trailing whitespace from STRING and replaces each internal sequence of one or more whitespace characters with a single space. Thus, '$(strip a b c )' results in 'a b c'. The function 'strip' can be very useful when used in conjunction with conditionals. When comparing something with the empty string '' using 'ifeq' or 'ifneq', you usually want a string of just whitespace to match the empty string (*note Conditionals::). Thus, the following may fail to have the desired results: .PHONY: all ifneq "$(needs_made)" "" all: $(needs_made) else all:;@echo 'Nothing to make!' endif Replacing the variable reference '$(needs_made)' with the function call '$(strip $(needs_made))' in the 'ifneq' directive would make it more robust. '$(findstring FIND,IN)' Searches IN for an occurrence of FIND. If it occurs, the value is FIND; otherwise, the value is empty. You can use this function in a conditional to test for the presence of a specific substring in a given string. Thus, the two examples, $(findstring a,a b c) $(findstring a,b c) produce the values 'a' and '' (the empty string), respectively. *Note Testing Flags::, for a practical application of 'findstring'. '$(filter PATTERN...,TEXT)' Returns all whitespace-separated words in TEXT that _do_ match any of the PATTERN words, removing any words that _do not_ match. The patterns are written using '%', just like the patterns used in the 'patsubst' function above. The 'filter' function can be used to separate out different types of strings (such as file names) in a variable. For example: sources := foo.c bar.c baz.s ugh.h foo: $(sources) cc $(filter %.c %.s,$(sources)) -o foo says that 'foo' depends of 'foo.c', 'bar.c', 'baz.s' and 'ugh.h' but only 'foo.c', 'bar.c' and 'baz.s' should be specified in the command to the compiler. '$(filter-out PATTERN...,TEXT)' Returns all whitespace-separated words in TEXT that _do not_ match any of the PATTERN words, removing the words that _do_ match one or more. This is the exact opposite of the 'filter' function. For example, given: objects=main1.o foo.o main2.o bar.o mains=main1.o main2.o the following generates a list which contains all the object files not in 'mains': $(filter-out $(mains),$(objects)) '$(sort LIST)' Sorts the words of LIST in lexical order, removing duplicate words. The output is a list of words separated by single spaces. Thus, $(sort foo bar lose) returns the value 'bar foo lose'. Incidentally, since 'sort' removes duplicate words, you can use it for this purpose even if you don't care about the sort order. '$(word N,TEXT)' Returns the Nth word of TEXT. The legitimate values of N start from 1. If N is bigger than the number of words in TEXT, the value is empty. For example, $(word 2, foo bar baz) returns 'bar'. '$(wordlist S,E,TEXT)' Returns the list of words in TEXT starting with word S and ending with word E (inclusive). The legitimate values of S start from 1; E may start from 0. If S is bigger than the number of words in TEXT, the value is empty. If E is bigger than the number of words in TEXT, words up to the end of TEXT are returned. If S is greater than E, nothing is returned. For example, $(wordlist 2, 3, foo bar baz) returns 'bar baz'. '$(words TEXT)' Returns the number of words in TEXT. Thus, the last word of TEXT is '$(word $(words TEXT),TEXT)'. '$(firstword NAMES...)' The argument NAMES is regarded as a series of names, separated by whitespace. The value is the first name in the series. The rest of the names are ignored. For example, $(firstword foo bar) produces the result 'foo'. Although '$(firstword TEXT)' is the same as '$(word 1,TEXT)', the 'firstword' function is retained for its simplicity. '$(lastword NAMES...)' The argument NAMES is regarded as a series of names, separated by whitespace. The value is the last name in the series. For example, $(lastword foo bar) produces the result 'bar'. Although '$(lastword TEXT)' is the same as '$(word $(words TEXT),TEXT)', the 'lastword' function was added for its simplicity and better performance. Here is a realistic example of the use of 'subst' and 'patsubst'. Suppose that a makefile uses the 'VPATH' variable to specify a list of directories that 'make' should search for prerequisite files (*note 'VPATH' Search Path for All Prerequisites: General Search.). This example shows how to tell the C compiler to search for header files in the same list of directories. The value of 'VPATH' is a list of directories separated by colons, such as 'src:../headers'. First, the 'subst' function is used to change the colons to spaces: $(subst :, ,$(VPATH)) This produces 'src ../headers'. Then 'patsubst' is used to turn each directory name into a '-I' flag. These can be added to the value of the variable 'CFLAGS', which is passed automatically to the C compiler, like this: override CFLAGS += $(patsubst %,-I%,$(subst :, ,$(VPATH))) The effect is to append the text '-Isrc -I../headers' to the previously given value of 'CFLAGS'. The 'override' directive is used so that the new value is assigned even if the previous value of 'CFLAGS' was specified with a command argument (*note The 'override' Directive: Override Directive.).  File: make.info, Node: File Name Functions, Next: Conditional Functions, Prev: Text Functions, Up: Functions 8.3 Functions for File Names ============================ Several of the built-in expansion functions relate specifically to taking apart file names or lists of file names. Each of the following functions performs a specific transformation on a file name. The argument of the function is regarded as a series of file names, separated by whitespace. (Leading and trailing whitespace is ignored.) Each file name in the series is transformed in the same way and the results are concatenated with single spaces between them. '$(dir NAMES...)' Extracts the directory-part of each file name in NAMES. The directory-part of the file name is everything up through (and including) the last slash in it. If the file name contains no slash, the directory part is the string './'. For example, $(dir src/foo.c hacks) produces the result 'src/ ./'. '$(notdir NAMES...)' Extracts all but the directory-part of each file name in NAMES. If the file name contains no slash, it is left unchanged. Otherwise, everything through the last slash is removed from it. A file name that ends with a slash becomes an empty string. This is unfortunate, because it means that the result does not always have the same number of whitespace-separated file names as the argument had; but we do not see any other valid alternative. For example, $(notdir src/foo.c hacks) produces the result 'foo.c hacks'. '$(suffix NAMES...)' Extracts the suffix of each file name in NAMES. If the file name contains a period, the suffix is everything starting with the last period. Otherwise, the suffix is the empty string. This frequently means that the result will be empty when NAMES is not, and if NAMES contains multiple file names, the result may contain fewer file names. For example, $(suffix src/foo.c src-1.0/bar.c hacks) produces the result '.c .c'. '$(basename NAMES...)' Extracts all but the suffix of each file name in NAMES. If the file name contains a period, the basename is everything starting up to (and not including) the last period. Periods in the directory part are ignored. If there is no period, the basename is the entire file name. For example, $(basename src/foo.c src-1.0/bar hacks) produces the result 'src/foo src-1.0/bar hacks'. '$(addsuffix SUFFIX,NAMES...)' The argument NAMES is regarded as a series of names, separated by whitespace; SUFFIX is used as a unit. The value of SUFFIX is appended to the end of each individual name and the resulting larger names are concatenated with single spaces between them. For example, $(addsuffix .c,foo bar) produces the result 'foo.c bar.c'. '$(addprefix PREFIX,NAMES...)' The argument NAMES is regarded as a series of names, separated by whitespace; PREFIX is used as a unit. The value of PREFIX is prepended to the front of each individual name and the resulting larger names are concatenated with single spaces between them. For example, $(addprefix src/,foo bar) produces the result 'src/foo src/bar'. '$(join LIST1,LIST2)' Concatenates the two arguments word by word: the two first words (one from each argument) concatenated form the first word of the result, the two second words form the second word of the result, and so on. So the Nth word of the result comes from the Nth word of each argument. If one argument has more words that the other, the extra words are copied unchanged into the result. For example, '$(join a b,.c .o)' produces 'a.c b.o'. Whitespace between the words in the lists is not preserved; it is replaced with a single space. This function can merge the results of the 'dir' and 'notdir' functions, to produce the original list of files which was given to those two functions. '$(wildcard PATTERN)' The argument PATTERN is a file name pattern, typically containing wildcard characters (as in shell file name patterns). The result of 'wildcard' is a space-separated list of the names of existing files that match the pattern. *Note Using Wildcard Characters in File Names: Wildcards. '$(realpath NAMES...)' For each file name in NAMES return the canonical absolute name. A canonical name does not contain any '.' or '..' components, nor any repeated path separators ('/') or symlinks. In case of a failure the empty string is returned. Consult the 'realpath(3)' documentation for a list of possible failure causes. '$(abspath NAMES...)' For each file name in NAMES return an absolute name that does not contain any '.' or '..' components, nor any repeated path separators ('/'). Note that, in contrast to 'realpath' function, 'abspath' does not resolve symlinks and does not require the file names to refer to an existing file or directory. Use the 'wildcard' function to test for existence.  File: make.info, Node: Conditional Functions, Next: Foreach Function, Prev: File Name Functions, Up: Functions 8.4 Functions for Conditionals ============================== There are three functions that provide conditional expansion. A key aspect of these functions is that not all of the arguments are expanded initially. Only those arguments which need to be expanded, will be expanded. '$(if CONDITION,THEN-PART[,ELSE-PART])' The 'if' function provides support for conditional expansion in a functional context (as opposed to the GNU 'make' makefile conditionals such as 'ifeq' (*note Syntax of Conditionals: Conditional Syntax.)). The first argument, CONDITION, first has all preceding and trailing whitespace stripped, then is expanded. If it expands to any non-empty string, then the condition is considered to be true. If it expands to an empty string, the condition is considered to be false. If the condition is true then the second argument, THEN-PART, is evaluated and this is used as the result of the evaluation of the entire 'if' function. If the condition is false then the third argument, ELSE-PART, is evaluated and this is the result of the 'if' function. If there is no third argument, the 'if' function evaluates to nothing (the empty string). Note that only one of the THEN-PART or the ELSE-PART will be evaluated, never both. Thus, either can contain side-effects (such as 'shell' function calls, etc.) '$(or CONDITION1[,CONDITION2[,CONDITION3...]])' The 'or' function provides a "short-circuiting" OR operation. Each argument is expanded, in order. If an argument expands to a non-empty string the processing stops and the result of the expansion is that string. If, after all arguments are expanded, all of them are false (empty), then the result of the expansion is the empty string. '$(and CONDITION1[,CONDITION2[,CONDITION3...]])' The 'and' function provides a "short-circuiting" AND operation. Each argument is expanded, in order. If an argument expands to an empty string the processing stops and the result of the expansion is the empty string. If all arguments expand to a non-empty string then the result of the expansion is the expansion of the last argument.  File: make.info, Node: Foreach Function, Next: File Function, Prev: Conditional Functions, Up: Functions 8.5 The 'foreach' Function ========================== The 'foreach' function is very different from other functions. It causes one piece of text to be used repeatedly, each time with a different substitution performed on it. It resembles the 'for' command in the shell 'sh' and the 'foreach' command in the C-shell 'csh'. The syntax of the 'foreach' function is: $(foreach VAR,LIST,TEXT) The first two arguments, VAR and LIST, are expanded before anything else is done; note that the last argument, TEXT, is *not* expanded at the same time. Then for each word of the expanded value of LIST, the variable named by the expanded value of VAR is set to that word, and TEXT is expanded. Presumably TEXT contains references to that variable, so its expansion will be different each time. The result is that TEXT is expanded as many times as there are whitespace-separated words in LIST. The multiple expansions of TEXT are concatenated, with spaces between them, to make the result of 'foreach'. This simple example sets the variable 'files' to the list of all files in the directories in the list 'dirs': dirs := a b c d files := $(foreach dir,$(dirs),$(wildcard $(dir)/*)) Here TEXT is '$(wildcard $(dir)/*)'. The first repetition finds the value 'a' for 'dir', so it produces the same result as '$(wildcard a/*)'; the second repetition produces the result of '$(wildcard b/*)'; and the third, that of '$(wildcard c/*)'. This example has the same result (except for setting 'dirs') as the following example: files := $(wildcard a/* b/* c/* d/*) When TEXT is complicated, you can improve readability by giving it a name, with an additional variable: find_files = $(wildcard $(dir)/*) dirs := a b c d files := $(foreach dir,$(dirs),$(find_files)) Here we use the variable 'find_files' this way. We use plain '=' to define a recursively-expanding variable, so that its value contains an actual function call to be re-expanded under the control of 'foreach'; a simply-expanded variable would not do, since 'wildcard' would be called only once at the time of defining 'find_files'. The 'foreach' function has no permanent effect on the variable VAR; its value and flavor after the 'foreach' function call are the same as they were beforehand. The other values which are taken from LIST are in effect only temporarily, during the execution of 'foreach'. The variable VAR is a simply-expanded variable during the execution of 'foreach'. If VAR was undefined before the 'foreach' function call, it is undefined after the call. *Note The Two Flavors of Variables: Flavors. You must take care when using complex variable expressions that result in variable names because many strange things are valid variable names, but are probably not what you intended. For example, files := $(foreach Esta-escrito-en-espanol!,b c ch,$(find_files)) might be useful if the value of 'find_files' references the variable whose name is 'Esta-escrito-en-espanol!' (es un nombre bastante largo, no?), but it is more likely to be a mistake.  File: make.info, Node: File Function, Next: Call Function, Prev: Foreach Function, Up: Functions 8.6 The 'file' Function ======================= 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]) 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. 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 accept arguments from a file as well. Many commands use the convention that an argument prefixed with an '@' specifies a file containing more arguments. Then you might write your recipe in this way: program: $(OBJECTS) $(file >$@.in,$^) $(CMD) $(CMDFLAGS) @$@.in @rm $@.in If the command required each argument to be on a separate line of the input file, you might write your recipe like this: program: $(OBJECTS) $(file >$@.in) $(foreach O,$^,$(file >>$@.in,$O)) $(CMD) $(CMDFLAGS) @$@.in @rm $@.in  File: make.info, Node: Call Function, Next: Value Function, Prev: File Function, Up: Functions 8.7 The 'call' Function ======================= The 'call' function is unique in that it can be used to create new parameterized functions. You can write a complex expression as the value of a variable, then use 'call' to expand it with different values. The syntax of the 'call' function is: $(call VARIABLE,PARAM,PARAM,...) When 'make' expands this function, it assigns each PARAM to temporary variables '$(1)', '$(2)', etc. The variable '$(0)' will contain VARIABLE. There is no maximum number of parameter arguments. There is no minimum, either, but it doesn't make sense to use 'call' with no parameters. Then VARIABLE is expanded as a 'make' variable in the context of these temporary assignments. Thus, any reference to '$(1)' in the value of VARIABLE will resolve to the first PARAM in the invocation of 'call'. Note that VARIABLE is the _name_ of a variable, not a _reference_ to that variable. Therefore you would not normally use a '$' or parentheses when writing it. (You can, however, use a variable reference in the name if you want the name not to be a constant.) If VARIABLE is the name of a built-in function, the built-in function is always invoked (even if a 'make' variable by that name also exists). The 'call' function expands the PARAM arguments before assigning them to temporary variables. This means that VARIABLE values containing references to built-in functions that have special expansion rules, like 'foreach' or 'if', may not work as you expect. Some examples may make this clearer. This macro simply reverses its arguments: reverse = $(2) $(1) foo = $(call reverse,a,b) Here FOO will contain 'b a'. This one is slightly more interesting: it defines a macro to search for the first instance of a program in 'PATH': pathsearch = $(firstword $(wildcard $(addsuffix /$(1),$(subst :, ,$(PATH))))) LS := $(call pathsearch,ls) Now the variable LS contains '/bin/ls' or similar. The 'call' function can be nested. Each recursive invocation gets its own local values for '$(1)', etc. that mask the values of higher-level 'call'. For example, here is an implementation of a "map" function: map = $(foreach a,$(2),$(call $(1),$(a))) Now you can MAP a function that normally takes only one argument, such as 'origin', to multiple values in one step: o = $(call map,origin,o map MAKE) and end up with O containing something like 'file file default'. A final caution: be careful when adding whitespace to the arguments to 'call'. As with other functions, any whitespace contained in the second and subsequent arguments is kept; this can cause strange effects. It's generally safest to remove all extraneous whitespace when providing parameters to 'call'.  File: make.info, Node: Value Function, Next: Eval Function, Prev: Call Function, Up: Functions 8.8 The 'value' Function ======================== The 'value' function provides a way for you to use the value of a variable _without_ having it expanded. Please note that this does not undo expansions which have already occurred; for example if you create a simply expanded variable its value is expanded during the definition; in that case the 'value' function will return the same result as using the variable directly. The syntax of the 'value' function is: $(value VARIABLE) Note that VARIABLE is the _name_ of a variable, not a _reference_ to that variable. Therefore you would not normally use a '$' or parentheses when writing it. (You can, however, use a variable reference in the name if you want the name not to be a constant.) The result of this function is a string containing the value of VARIABLE, without any expansion occurring. For example, in this makefile: FOO = $PATH all: @echo $(FOO) @echo $(value FOO) The first output line would be 'ATH', since the "$P" would be expanded as a 'make' variable, while the second output line would be the current value of your '$PATH' environment variable, since the 'value' function avoided the expansion. The 'value' function is most often used in conjunction with the 'eval' function (*note Eval Function::).  File: make.info, Node: Eval Function, Next: Origin Function, Prev: Value Function, Up: Functions 8.9 The 'eval' Function ======================= The 'eval' function is very special: it allows you to define new makefile constructs that are not constant; which are the result of evaluating other variables and functions. The argument to the 'eval' function is expanded, then the results of that expansion are parsed as makefile syntax. The expanded results can define new 'make' variables, targets, implicit or explicit rules, etc. The result of the 'eval' function is always the empty string; thus, it can be placed virtually anywhere in a makefile without causing syntax errors. It's important to realize that the 'eval' argument is expanded _twice_; first by the 'eval' function, then the results of that expansion are expanded again when they are parsed as makefile syntax. This means you may need to provide extra levels of escaping for "$" characters when using 'eval'. The 'value' function (*note Value Function::) can sometimes be useful in these situations, to circumvent unwanted expansions. Here is an example of how 'eval' can be used; this example combines a number of concepts and other functions. Although it might seem overly complex to use 'eval' in this example, rather than just writing out the rules, consider two things: first, the template definition (in 'PROGRAM_template') could need to be much more complex than it is here; and second, you might put the complex, "generic" part of this example into another makefile, then include it in all the individual makefiles. Now your individual makefiles are quite straightforward. PROGRAMS = server client server_OBJS = server.o server_priv.o server_access.o server_LIBS = priv protocol client_OBJS = client.o client_api.o client_mem.o client_LIBS = protocol # Everything after this is generic .PHONY: all all: $(PROGRAMS) define PROGRAM_template = $(1): $$($(1)_OBJS) $$($(1)_LIBS:%=-l%) ALL_OBJS += $$($(1)_OBJS) endef $(foreach prog,$(PROGRAMS),$(eval $(call PROGRAM_template,$(prog)))) $(PROGRAMS): $(LINK.o) $^ $(LDLIBS) -o $@ clean: rm -f $(ALL_OBJS) $(PROGRAMS)  File: make.info, Node: Origin Function, Next: Flavor Function, Prev: Eval Function, Up: Functions 8.10 The 'origin' Function ========================== The 'origin' function is unlike most other functions in that it does not operate on the values of variables; it tells you something _about_ a variable. Specifically, it tells you where it came from. The syntax of the 'origin' function is: $(origin VARIABLE) Note that VARIABLE is the _name_ of a variable to inquire about, not a _reference_ to that variable. Therefore you would not normally use a '$' or parentheses when writing it. (You can, however, use a variable reference in the name if you want the name not to be a constant.) The result of this function is a string telling you how the variable VARIABLE was defined: 'undefined' if VARIABLE was never defined. 'default' if VARIABLE has a default definition, as is usual with 'CC' and so on. *Note Variables Used by Implicit Rules: Implicit Variables. Note that if you have redefined a default variable, the 'origin' function will return the origin of the later definition. 'environment' if VARIABLE was inherited from the environment provided to 'make'. 'environment override' if VARIABLE was inherited from the environment provided to 'make', and is overriding a setting for VARIABLE in the makefile as a result of the '-e' option (*note Summary of Options: Options Summary.). 'file' if VARIABLE was defined in a makefile. 'command line' if VARIABLE was defined on the command line. 'override' if VARIABLE was defined with an 'override' directive in a makefile (*note The 'override' Directive: Override Directive.). 'automatic' if VARIABLE is an automatic variable defined for the execution of the recipe for each rule (*note Automatic Variables::). This information is primarily useful (other than for your curiosity) to determine if you want to believe the value of a variable. For example, suppose you have a makefile 'foo' that includes another makefile 'bar'. You want a variable 'bletch' to be defined in 'bar' if you run the command 'make -f bar', even if the environment contains a definition of 'bletch'. However, if 'foo' defined 'bletch' before including 'bar', you do not want to override that definition. This could be done by using an 'override' directive in 'foo', giving that definition precedence over the later definition in 'bar'; unfortunately, the 'override' directive would also override any command line definitions. So, 'bar' could include: ifdef bletch ifeq "$(origin bletch)" "environment" bletch = barf, gag, etc. endif endif If 'bletch' has been defined from the environment, this will redefine it. If you want to override a previous definition of 'bletch' if it came from the environment, even under '-e', you could instead write: ifneq "$(findstring environment,$(origin bletch))" "" bletch = barf, gag, etc. endif Here the redefinition takes place if '$(origin bletch)' returns either 'environment' or 'environment override'. *Note Functions for String Substitution and Analysis: Text Functions.  File: make.info, Node: Flavor Function, Next: Make Control Functions, Prev: Origin Function, Up: Functions 8.11 The 'flavor' Function ========================== The 'flavor' function, like the 'origin' function, does not operate on the values of variables but rather it tells you something _about_ a variable. Specifically, it tells you the flavor of a variable (*note The Two Flavors of Variables: Flavors.). The syntax of the 'flavor' function is: $(flavor VARIABLE) Note that VARIABLE is the _name_ of a variable to inquire about, not a _reference_ to that variable. Therefore you would not normally use a '$' or parentheses when writing it. (You can, however, use a variable reference in the name if you want the name not to be a constant.) The result of this function is a string that identifies the flavor of the variable VARIABLE: 'undefined' if VARIABLE was never defined. 'recursive' if VARIABLE is a recursively expanded variable. 'simple' if VARIABLE is a simply expanded variable.  File: make.info, Node: Make Control Functions, Next: Shell Function, Prev: Flavor Function, Up: Functions 8.12 Functions That Control Make ================================ These functions control the way make runs. Generally, they are used to provide information to the user of the makefile or to cause make to stop if some sort of environmental error is detected. '$(error TEXT...)' Generates a fatal error where the message is TEXT. Note that the error is generated whenever this function is evaluated. So, if you put it inside a recipe or on the right side of a recursive variable assignment, it won't be evaluated until later. The TEXT will be expanded before the error is generated. For example, ifdef ERROR1 $(error error is $(ERROR1)) endif will generate a fatal error during the read of the makefile if the 'make' variable 'ERROR1' is defined. Or, ERR = $(error found an error!) .PHONY: err err: ; $(ERR) will generate a fatal error while 'make' is running, if the 'err' target is invoked. '$(warning TEXT...)' This function works similarly to the 'error' function, above, except that 'make' doesn't exit. Instead, TEXT is expanded and the resulting message is displayed, but processing of the makefile continues. The result of the expansion of this function is the empty string. '$(info TEXT...)' This function does nothing more than print its (expanded) argument(s) to standard output. No makefile name or line number is added. The result of the expansion of this function is the empty string.  File: make.info, Node: Shell Function, Next: Guile Function, Prev: Make Control Functions, Up: Functions 8.13 The 'shell' Function ========================= The 'shell' function is unlike any other function other than the 'wildcard' function (*note The Function 'wildcard': Wildcard Function.) in that it communicates with the world outside of 'make'. The 'shell' function performs the same function that backquotes ('`') perform in most shells: it does "command expansion". This means that it takes as an argument a shell command and evaluates to the output of the command. The only processing 'make' does on the result is to convert each newline (or carriage-return / newline pair) to a single space. If there is a trailing (carriage-return and) newline it will simply be removed. The commands run by calls to the 'shell' function are run when the function calls are expanded (*note How 'make' Reads a Makefile: Reading Makefiles.). Because this function involves spawning a new shell, you 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) sets 'contents' to the contents of the file 'foo', with a space (rather than a newline) separating each line. files := $(shell echo *.c) sets 'files' to the expansion of '*.c'. Unless 'make' is using a very strange shell, this has the same result as '$(wildcard *.c)' (as long as at least one '.c' file exists).  File: make.info, Node: Guile Function, Prev: Shell Function, Up: Functions 8.14 The 'guile' Function ========================= If GNU 'make' is built with support for GNU Guile as an embedded extension language then the 'guile' function will be available. The 'guile' function takes one argument which is first expanded by 'make' in the normal fashion, then passed to the GNU Guile evaluator. The result of the evaluator is converted into a string and used as the expansion of the 'guile' function in the makefile. See *note GNU Guile Integration: Guile Integration. for details on writing extensions to 'make' in Guile. You can determine whether GNU Guile support is available by checking the '.FEATURES' variable for the word GUILE.  File: make.info, Node: Running, Next: Implicit Rules, Prev: Functions, Up: Top 9 How to Run 'make' ******************* A makefile that says how to recompile a program can be used in more than one way. The simplest use is to recompile every file that is out of date. Usually, makefiles are written so that if you run 'make' with no arguments, it does just that. But you might want to update only some of the files; you might want to use a different compiler or different compiler options; you might want just to find out which files are out of date without changing them. By giving arguments when you run 'make', you can do any of these things and many others. The exit status of 'make' is always one of three values: '0' The exit status is zero if 'make' is successful. '2' The exit status is two if 'make' encounters any errors. It will print messages describing the particular errors. '1' The exit status is one if you use the '-q' flag and 'make' determines that some target is not already up to date. *Note Instead of Executing Recipes: Instead of Execution. * Menu: * Makefile Arguments:: How to specify which makefile to use. * Goals:: How to use goal arguments to specify which parts of the makefile to use. * Instead of Execution:: How to use mode flags to specify what kind of thing to do with the recipes in the makefile other than simply execute them. * Avoiding Compilation:: How to avoid recompiling certain files. * Overriding:: How to override a variable to specify an alternate compiler and other things. * Testing:: How to proceed past some errors, to test compilation. * Options Summary:: Summary of Options  File: make.info, Node: Makefile Arguments, Next: Goals, Prev: Running, Up: Running 9.1 Arguments to Specify the Makefile ===================================== The way to specify the name of the makefile is with the '-f' or '--file' option ('--makefile' also works). For example, '-f altmake' says to use the file 'altmake' as the makefile. If you use the '-f' flag several times and follow each '-f' with an argument, all the specified files are used jointly as makefiles. If you do not use the '-f' or '--file' flag, the default is to try 'GNUmakefile', 'makefile', and 'Makefile', in that order, and use the first of these three which exists or can be made (*note Writing Makefiles: Makefiles.).  File: make.info, Node: Goals, Next: Instead of Execution, Prev: Makefile Arguments, Up: Running 9.2 Arguments to Specify the Goals ================================== The "goals" are the targets that 'make' should strive ultimately to update. Other targets are updated as well if they appear as prerequisites of goals, or prerequisites of prerequisites of goals, etc. By default, the goal is the first target in the makefile (not counting targets that start with a period). Therefore, makefiles are usually written so that the first target is for compiling the entire program or programs they describe. If the first rule in the makefile has several targets, only the first target in the rule becomes the default goal, not the whole list. You can manage the selection of the default goal from within your makefile using the '.DEFAULT_GOAL' variable (*note Other Special Variables: Special Variables.). You can also specify a different goal or goals with command line arguments to 'make'. Use the name of the goal as an argument. If you specify several goals, 'make' processes each of them in turn, in the order you name them. Any target in the makefile may be specified as a goal (unless it starts with '-' or contains an '=', in which case it will be parsed as a switch or variable definition, respectively). Even targets not in the makefile may be specified, if 'make' can find implicit rules that say how to make them. 'Make' will set the special variable 'MAKECMDGOALS' to the list of goals you specified on the command line. If no goals were given on the command line, this variable is empty. Note that this variable should be used only in special circumstances. An example of appropriate use is to avoid including '.d' files during 'clean' rules (*note Automatic Prerequisites::), so 'make' won't create them only to immediately remove them again: sources = foo.c bar.c ifneq ($(MAKECMDGOALS),clean) include $(sources:.c=.d) endif One use of specifying a goal is if you want to compile only a part of the program, or only one of several programs. Specify as a goal each file that you wish to remake. For example, consider a directory 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. 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 a version of the program that is compiled specially for testing, which has a rule in the makefile but is not a prerequisite of the default goal. Another use of specifying a goal is to run the recipe associated with a phony target (*note Phony Targets::) or empty target (*note Empty Target Files to Record Events: Empty Targets.). Many makefiles contain a phony target named 'clean' which deletes everything except source files. Naturally, this is done only if you request it explicitly with 'make clean'. Following is a list of typical phony and empty target names. *Note Standard Targets::, for a detailed list of all the standard target names which GNU software packages use. 'all' Make all the top-level targets the makefile knows about. 'clean' Delete all files that are normally created by running 'make'. 'mostlyclean' Like 'clean', but may refrain from deleting a few files that people normally don't want to recompile. For example, the 'mostlyclean' target for GCC does not delete 'libgcc.a', because recompiling it is rarely necessary and takes a lot of time. 'distclean' 'realclean' 'clobber' Any of these targets might be defined to delete _more_ files than 'clean' does. For example, this would delete configuration files or links that you would normally create as preparation for compilation, even if the makefile itself cannot create these files. 'install' Copy the executable file into a directory that users typically search for commands; copy any auxiliary files that the executable uses into the directories where it will look for them. 'print' Print listings of the source files that have changed. 'tar' Create a tar file of the source files. 'shar' Create a shell archive (shar file) of the source files. 'dist' Create a distribution file of the source files. This might be a tar file, or a shar file, or a compressed version of one of the above, or even more than one of the above. 'TAGS' Update a tags table for this program. 'check' 'test' Perform self tests on the program this makefile builds.  File: make.info, Node: Instead of Execution, Next: Avoiding Compilation, Prev: Goals, Up: Running 9.3 Instead of Executing Recipes ================================ The makefile tells 'make' how to tell whether a target is up to date, and how to update each target. But updating the targets is not always what you want. Certain options specify other activities for 'make'. '-n' '--just-print' '--dry-run' '--recon' "No-op". Causes 'make' to print the recipes that are needed to make the targets up to date, but not actually execute them. Note that some recipes are still executed, even with this flag (*note How the 'MAKE' Variable Works: MAKE Variable.). Also any recipes needed to update included makefiles are still executed (*note How Makefiles Are Remade: Remaking Makefiles.). '-t' '--touch' "Touch". Marks targets as up to date without actually changing them. In other words, 'make' pretends to update the targets but does not really change their contents; instead only their modified times are updated. '-q' '--question' "Question". Silently check whether the targets are up to date, but do not execute recipes; the exit code shows whether any updates are needed. '-W FILE' '--what-if=FILE' '--assume-new=FILE' '--new-file=FILE' "What if". Each '-W' flag is followed by a file name. The given files' modification times are recorded by 'make' as being the present time, although the actual modification times remain the same. You can use the '-W' flag in conjunction with the '-n' flag to see what would happen if you were to modify specific files. With the '-n' flag, 'make' prints the recipe that it would normally execute but usually does not execute it. With the '-t' flag, 'make' ignores the recipes in the rules and uses (in effect) the command 'touch' for each target that needs to be remade. The 'touch' command is also printed, unless '-s' or '.SILENT' is used. For speed, 'make' does not actually invoke the program 'touch'. It does the work directly. With the '-q' flag, 'make' prints nothing and executes no recipes, but the exit status code it returns is zero if and only if the targets to be considered are already up to date. If the exit status is one, then some updating needs to be done. If 'make' encounters an error, the exit status is two, so you can distinguish an error from a target that is not up to date. It is an error to use more than one of these three flags in the same invocation of 'make'. The '-n', '-t', and '-q' options do not affect recipe lines that begin with '+' characters or contain the strings '$(MAKE)' or '${MAKE}'. Note that only the line containing the '+' character or the strings '$(MAKE)' or '${MAKE}' is run regardless of these options. Other lines in the same rule are not run unless they too begin with '+' or contain '$(MAKE)' or '${MAKE}' (*Note How the 'MAKE' Variable Works: MAKE Variable.) The '-t' flag prevents phony targets (*note Phony Targets::) from being updated, unless there are recipe lines beginning with '+' or containing '$(MAKE)' or '${MAKE}'. The '-W' flag provides two features: * If you also use the '-n' or '-q' flag, you can see what 'make' would do if you were to modify some files. * Without the '-n' or '-q' flag, when 'make' is actually executing recipes, the '-W' flag can direct 'make' to act as if some files had been modified, without actually running the recipes for those files. Note that the options '-p' and '-v' allow you to obtain other information about 'make' or about the makefiles in use (*note Summary of Options: Options Summary.).  File: make.info, Node: Avoiding Compilation, Next: Overriding, Prev: Instead of Execution, Up: Running 9.4 Avoiding Recompilation of Some Files ======================================== Sometimes you may have changed a source file but you do not want to recompile all the files that depend on it. For example, suppose you add a macro or a declaration to a header file that many other files depend on. Being conservative, 'make' assumes that any change in the header file requires recompilation of all dependent files, but you know that they do not need to be recompiled and you would rather not waste the time waiting for them to compile. If you anticipate the problem before changing the header file, you can use the '-t' flag. This flag tells 'make' not to run the recipes in the rules, but rather to mark the target up to date by changing its last-modification date. You would follow this procedure: 1. Use the command 'make' to recompile the source files that really need recompilation, ensuring that the object files are up-to-date before you begin. 2. Make the changes in the header files. 3. Use the command 'make -t' to mark all the object files as up to date. The next time you run 'make', the changes in the header files will not cause any recompilation. If you have already changed the header file at a time when some files do need recompilation, it is too late to do this. Instead, you can use the '-o FILE' flag, which marks a specified file as "old" (*note Summary of Options: Options Summary.). This means that the file itself will not be remade, and nothing else will be remade on its account. Follow this procedure: 1. Recompile the source files that need compilation for reasons independent of the particular header file, with 'make -o HEADERFILE'. If several header files are involved, use a separate '-o' option for each header file. 2. Touch all the object files with 'make -t'.  File: make.info, Node: Overriding, Next: Testing, Prev: Avoiding Compilation, Up: Running 9.5 Overriding Variables ======================== An argument that contains '=' specifies the value of a variable: 'V=X' sets the value of the variable V to X. If you specify a value in this way, all ordinary assignments of the same variable in the makefile are ignored; we say they have been "overridden" by the command line argument. The most common way to use this facility is to pass extra flags to compilers. For example, in a properly written makefile, the variable 'CFLAGS' is included in each recipe that runs the C compiler, so a file 'foo.c' would be compiled something like this: cc -c $(CFLAGS) foo.c Thus, whatever value you set for 'CFLAGS' affects each compilation that occurs. The makefile probably specifies the usual value for 'CFLAGS', like this: CFLAGS=-g Each time you run 'make', you can override this value if you wish. For example, if you say 'make CFLAGS='-g -O'', each C compilation will be done with 'cc -c -g -O'. (This also illustrates how you can use quoting in the shell to enclose spaces and other special characters in the value of a variable when you override it.) The variable 'CFLAGS' is only one of many standard variables that exist just so that you can change them this way. *Note Variables Used by Implicit Rules: Implicit Variables, for a complete list. You can also program the makefile to look at additional variables of your own, giving the user the ability to control other aspects of how the makefile works by changing the variables. When you override a variable with a command line argument, you can define either a recursively-expanded variable or a simply-expanded variable. The examples shown above make a recursively-expanded variable; to make a simply-expanded variable, write ':=' or '::=' instead of '='. But, unless you want to include a variable reference or function call in the _value_ that you specify, it makes no difference which kind of variable you create. There is one way that the makefile can change a variable that you have overridden. This is to use the 'override' directive, which is a line that looks like this: 'override VARIABLE = VALUE' (*note The 'override' Directive: Override Directive.). make-4.3/doc/make.texi0000644000175000017500000171356213611136373011616 00000000000000\input texinfo @c -*- Texinfo -*- @c %**start of header @setfilename make.info @include version.texi @set EDITION 0.75 @settitle GNU @code{make} @setchapternewpage odd @c Combine the variable and function indices: @syncodeindex vr fn @c Combine the program and concept indices: @syncodeindex pg cp @c FSF publishers: format makebook.texi instead of using this file directly. @c ISBN confirmed by Jasimin Huang on 25 Mar 2009 @set ISBN 1-882114-83-3 @c %**end of header @copying This file documents the GNU @code{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 @value{EDITION}, last updated @value{UPDATED}, 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, 2015, 2016, 2017, 2018, 2019, 2020 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with the Front-Cover Texts being ``A GNU Manual,'' and with the Back-Cover Texts as in (a) below. A copy of the license is included in the section entitled ``GNU Free Documentation License.'' (a) The FSF's Back-Cover Text is: ``You have the freedom to copy and modify this GNU manual. Buying copies from the FSF supports it in developing GNU and promoting software freedom.'' @end quotation @end copying @c finalout @c ISPELL CHECK: done, 10 June 1993 --roland @c ISPELL CHECK: done, 2000-06-25 --Martin Buchholz @dircategory Software development @direntry * Make: (make). Remake files automatically. @end direntry @iftex @shorttitlepage GNU Make @end iftex @titlepage @title GNU Make @subtitle A Program for Directing Recompilation @subtitle GNU @code{make} Version @value{VERSION} @subtitle @value{UPDATED-MONTH} @author Richard M. Stallman, Roland McGrath, Paul D. Smith @page @vskip 0pt plus 1filll @insertcopying @sp 2 Published by the Free Software Foundation @* 51 Franklin St. -- Fifth Floor @* Boston, MA 02110-1301 USA @* ISBN @value{ISBN} @* @sp 2 Cover art by Etienne Suvasa. @end titlepage @summarycontents @contents @ifnottex @node Top, Overview, (dir), (dir) @top GNU @code{make} @insertcopying @end ifnottex @menu * Overview:: Overview of @code{make}. * Introduction:: An introduction to @code{make}. * Makefiles:: Makefiles tell @code{make} what to do. * Rules:: Rules describe when a file must be remade. * Recipes:: Recipes say how to remake a file. * Using Variables:: You can use variables to avoid repetition. * Conditionals:: Use or ignore parts of the makefile based on the values of variables. * Functions:: Many powerful ways to manipulate text. * Invoking make: Running. How to invoke @code{make} on the command line. * Implicit Rules:: Use implicit rules to treat many files alike, 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 GNU programs. * Quick Reference:: A quick reference for experienced users. * Error Messages:: A list of common errors generated by @code{make}. * Complex Makefile:: A real example of a straightforward, but nontrivial, makefile. * GNU Free Documentation License:: License for copying this manual. * Concept Index:: Index of Concepts. * Name Index:: Index of Functions, Variables, & Directives. @detailmenu --- The Detailed Node Listing --- Overview of @code{make} * Preparing:: Preparing and running @code{make}. * Reading:: On reading this text. * Bugs:: Problems and bugs. An Introduction to Makefiles * Rule Introduction:: What a rule looks like. * Simple Makefile:: A simple makefile. * How Make Works:: How @code{make} processes this makefile. * Variables Simplify:: Variables make makefiles simpler. * make Deduces:: Letting @code{make} deduce the recipes. * Combine By Prerequisite:: Another style of makefile. * Cleanup:: Rules for cleaning the directory. Writing Makefiles * Makefile Contents:: What makefiles contain. * Makefile Names:: How to name your makefile. * Include:: How one makefile can use another makefile. * MAKEFILES Variable:: The environment can specify extra makefiles. * Remaking Makefiles:: How makefiles get remade. * Overriding Makefiles:: How to override part of one makefile with another makefile. * Reading Makefiles:: How makefiles are read in. * Parsing Makefiles:: How makefiles are parsed. * Secondary Expansion:: How and when secondary expansion is performed. What Makefiles Contain * Splitting Lines:: Splitting long lines in makefiles Writing Rules * Rule Example:: An example explained. * Rule Syntax:: General syntax explained. * Prerequisite Types:: There are two types of prerequisites. * Wildcards:: Using wildcard characters such as `*'. * Directory Search:: Searching other directories for source files. * Phony Targets:: Using a target that is not a real file's name. * Force Targets:: You can use a target without a recipe or prerequisites to mark other targets as phony. * Empty Targets:: When only the date matters and the files are empty. * Special Targets:: Targets with special built-in meanings. * Multiple Targets:: When to make use of several targets in a rule. * Multiple Rules:: How to use several rules with the same target. * Static Pattern:: Static pattern rules apply to multiple targets and can vary the prerequisites according to the target name. * Double-Colon:: How to use a special kind of rule to allow several independent rules for one target. * Automatic Prerequisites:: How to automatically generate rules giving prerequisites from source files themselves. Using Wildcard Characters in File Names * Wildcard Examples:: Several examples. * Wildcard Pitfall:: Problems to avoid. * Wildcard Function:: How to cause wildcard expansion where it does not normally take place. Searching Directories for Prerequisites * General Search:: Specifying a search path that applies to every prerequisite. * Selective Search:: Specifying a search path for a specified class of names. * Search Algorithm:: When and how search paths are applied. * Recipes/Search:: How to write recipes that work together with search paths. * Implicit/Search:: How search paths affect implicit rules. * Libraries/Search:: Directory search for link libraries. Static Pattern Rules * Static Usage:: The syntax of static pattern rules. * Static versus Implicit:: When are they better than implicit rules? Writing Recipes in Rules * Recipe Syntax:: Recipe syntax features and pitfalls. * Echoing:: How to control when recipes are echoed. * Execution:: How recipes are executed. * Parallel:: How recipes can be executed in parallel. * Errors:: What happens after a recipe execution error. * Interrupts:: What happens when a recipe is interrupted. * Recursion:: Invoking @code{make} from makefiles. * Canned Recipes:: Defining canned recipes. * Empty Recipes:: Defining useful, do-nothing recipes. Recipe Syntax * Splitting Recipe Lines:: Breaking long recipe lines for readability. * Variables in Recipes:: Using @code{make} variables in recipes. Recipe Execution * One Shell:: One shell for all lines in a recipe. * Choosing the Shell:: How @code{make} chooses the shell used to run recipes. Parallel Execution * Parallel Output:: Handling output during parallel execution * Parallel Input:: Handling input during parallel execution Recursive Use of @code{make} * MAKE Variable:: The special effects of using @samp{$(MAKE)}. * Variables/Recursion:: How to communicate variables to a sub-@code{make}. * Options/Recursion:: How to communicate options to a sub-@code{make}. * -w Option:: How the @samp{-w} or @samp{--print-directory} option helps debug use of recursive @code{make} commands. How to Use Variables * Reference:: How to use the value of a variable. * Flavors:: Variables come in two flavors. * Advanced:: Advanced features for referencing a variable. * Values:: All the ways variables get their values. * Setting:: How to set a variable in the makefile. * Appending:: How to append more text to the old value of a variable. * Override Directive:: How to set a variable in the makefile even if the user has set it with a command argument. * Multi-Line:: An alternate way to set a variable to a multi-line string. * Undefine Directive:: How to undefine a variable so that it appears as if it was never set. * Environment:: Variable values can come from the environment. * Target-specific:: Variable values can be defined on a per-target basis. * Pattern-specific:: Target-specific variable values can be applied to a group of targets that match a pattern. * Suppressing Inheritance:: Suppress inheritance of variables. * Special Variables:: Variables with special meaning or behavior. Advanced Features for Reference to Variables * Substitution Refs:: Referencing a variable with substitutions on the value. * Computed Names:: Computing the name of the variable to refer to. Conditional Parts of Makefiles * Conditional Example:: Example of a conditional * Conditional Syntax:: The syntax of conditionals. * Testing Flags:: Conditionals that test flags. Functions for Transforming Text * Syntax of Functions:: How to write a function call. * Text Functions:: General-purpose text manipulation functions. * File Name Functions:: Functions for manipulating file names. * Conditional Functions:: Functions that implement conditions. * Foreach Function:: Repeat some text with controlled variation. * File Function:: Write text to a file. * Call Function:: Expand a user-defined function. * Value Function:: Return the un-expanded value of a variable. * Eval Function:: Evaluate the arguments as makefile syntax. * Origin Function:: Find where a variable got its value. * Flavor Function:: Find out the flavor of a variable. * Make Control Functions:: Functions that control how make runs. * Shell Function:: Substitute the output of a shell command. * Guile Function:: Use GNU Guile embedded scripting language. How to Run @code{make} * Makefile Arguments:: How to specify which makefile to use. * Goals:: How to use goal arguments to specify which parts of the makefile to use. * Instead of Execution:: How to use mode flags to specify what kind of thing to do with the recipes in the makefile other than simply execute them. * Avoiding Compilation:: How to avoid recompiling certain files. * Overriding:: How to override a variable to specify an alternate compiler and other things. * Testing:: How to proceed past some errors, to test compilation. * Options Summary:: Summary of Options Using Implicit Rules * Using Implicit:: How to use an existing implicit rule to get the recipes for updating a file. * Catalogue of Rules:: A list of built-in rules. * Implicit Variables:: How to change what predefined rules do. * Chained Rules:: How to use a chain of implicit rules. * Pattern Rules:: How to define new implicit rules. * Last Resort:: How to define a recipe for rules which cannot find any. * Suffix Rules:: The old-fashioned style of implicit rule. * Implicit Rule Search:: The precise algorithm for applying implicit rules. Defining and Redefining Pattern Rules * Pattern Intro:: An introduction to pattern rules. * Pattern Examples:: Examples of pattern rules. * Automatic Variables:: How to use automatic variables in the recipe of implicit rules. * Pattern Match:: How patterns match. * Match-Anything Rules:: Precautions you should take prior to defining rules that can match any target file whatever. * Canceling Rules:: How to override or cancel built-in rules. Using @code{make} to Update Archive Files * Archive Members:: Archive members as targets. * Archive Update:: The implicit rule for archive member targets. * Archive Pitfalls:: Dangers to watch out for when using archives. * Archive Suffix Rules:: You can write a special kind of suffix rule for updating archives. Implicit Rule for Archive Member Targets * Archive Symbols:: How to update archive symbol directories. Extending GNU @code{make} * Guile Integration:: Using Guile as an embedded scripting language. * Loading Objects:: Loading dynamic objects as extensions. GNU Guile Integration * Guile Types:: Converting Guile types to @code{make} strings. * Guile Interface:: Invoking @code{make} functions from Guile. * Guile Example:: Example using Guile in @code{make}. Loading Dynamic Objects * load Directive:: Loading dynamic objects as extensions. * Remaking Loaded Objects:: How loaded objects get remade. * 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 @node Overview, Introduction, Top, Top @comment node-name, next, previous, up @chapter Overview of @code{make} The @code{make} utility automatically determines which pieces of a large program need to be recompiled, and issues commands to recompile them. This manual describes GNU @code{make}, which was implemented by Richard Stallman and Roland McGrath. Development since Version 3.76 has been handled by Paul D. Smith. GNU @code{make} conforms to section 6.2 of @cite{IEEE Standard 1003.2-1992} (POSIX.2). @cindex POSIX @cindex IEEE Standard 1003.2 @cindex standards conformance Our examples show C programs, since they are most common, but you can use @code{make} with any programming language whose compiler can be run with a shell command. Indeed, @code{make} is not limited to programs. You can use it to describe any task where some files must be updated automatically from others whenever the others change. @menu * Preparing:: Preparing and running @code{make}. * Reading:: On reading this text. * Bugs:: Problems and bugs. @end menu @node Preparing, Reading, Overview, Overview @ifnottex @heading Preparing and Running Make @end ifnottex To prepare to use @code{make}, you must write a file called the @dfn{makefile} that describes the relationships among files in your program and provides commands for updating each file. In a program, typically, the executable file is updated from object files, which are in turn made by compiling source files.@refill Once a suitable makefile exists, each time you change some source files, this simple shell command: @example make @end example @noindent suffices to perform all necessary recompilations. The @code{make} program uses the makefile data base and the last-modification times of the files to decide which of the files need to be updated. For each of those files, it issues the recipes recorded in the data base. You can provide command line arguments to @code{make} to control which files should be recompiled, or how. @xref{Running, ,How to Run @code{make}}. @node Reading, Bugs, Preparing, Overview @section How to Read This Manual If you are new to @code{make}, or are looking for a general introduction, read the first few sections of each chapter, skipping the later sections. In each chapter, the first few sections contain introductory or general information and the later sections contain specialized or technical information. @ifnottex The exception is the second chapter, @ref{Introduction, ,An Introduction to Makefiles}, all of which is introductory. @end ifnottex @iftex The exception is @ref{Introduction, ,An Introduction to Makefiles}, all of which is introductory. @end iftex If you are familiar with other @code{make} programs, see @ref{Features, ,Features of GNU @code{make}}, which lists the enhancements GNU @code{make} has, and @ref{Missing, ,Incompatibilities and Missing Features}, which explains the few things GNU @code{make} lacks that others have. For a quick summary, see @ref{Options Summary}, @ref{Quick Reference}, and @ref{Special Targets}. @node Bugs, , Reading, Overview @section Problems and Bugs @cindex reporting bugs @cindex bugs, reporting @cindex problems and bugs, reporting If you have problems with GNU @code{make} or think you've found a bug, please report it to the developers; we cannot promise to do anything but we might well want to fix it. Before reporting a bug, make sure you've actually found a real bug. Carefully reread the documentation and see if it really says you can do what you're trying to do. If it's not clear whether you should be able to do something or not, report that too; it's a bug in the documentation! Before reporting a bug or trying to fix it yourself, try to isolate it to the smallest possible makefile that reproduces the problem. Then send us the makefile and the exact results @code{make} gave you, including any error or warning messages. Please don't paraphrase these messages: it's best to cut and paste them into your report. When generating this small makefile, be sure to not use any non-free or unusual tools in your recipes: you can almost always emulate what such a tool would do with simple shell commands. Finally, be sure to explain what you expected to occur; this will help us decide whether the problem was really in the documentation. Once you have a precise problem you can report it in one of two ways. Either send electronic mail to: @example bug-make@@gnu.org @end example @noindent or use our Web-based project management tool, at: @example http://savannah.gnu.org/projects/make/ @end example @noindent In addition to the information above, please be careful to include the version number of @code{make} you are using. You can get this information with the command @samp{make --version}. Be sure also to include the type of machine and operating system you are using. One way to obtain this information is by looking at the final lines of output from the command @samp{make --help}. @node Introduction, Makefiles, Overview, Top @comment node-name, next, previous, up @chapter An Introduction to Makefiles You need a file called a @dfn{makefile} to tell @code{make} what to do. Most often, the makefile tells @code{make} how to compile and link a program. @cindex makefile In this chapter, we will discuss a simple makefile that describes how to compile and link a text editor which consists of eight C source files and three header files. The makefile can also tell @code{make} how to run miscellaneous commands when explicitly asked (for example, to remove certain files as a clean-up operation). To see a more complex example of a makefile, see @ref{Complex Makefile}. When @code{make} recompiles the editor, each changed C source file must be recompiled. If a header file has changed, each C source file that includes the header file must be recompiled to be safe. Each compilation produces an object file corresponding to the source file. Finally, if any source file has been recompiled, all the object files, whether newly made or saved from previous compilations, must be linked together to produce the new executable editor. @cindex recompilation @cindex editor @menu * Rule Introduction:: What a rule looks like. * Simple Makefile:: A simple makefile. * How Make Works:: How @code{make} processes this makefile. * Variables Simplify:: Variables make makefiles simpler. * make Deduces:: Letting @code{make} deduce the recipes. * Combine By Prerequisite:: Another style of makefile. * Cleanup:: Rules for cleaning the directory. @end menu @node Rule Introduction, Simple Makefile, Introduction, Introduction @comment node-name, next, previous, up @section What a Rule Looks Like @cindex rule, introduction to @cindex makefile rule parts @cindex parts of makefile rule A simple makefile consists of ``rules'' with the following shape: @cindex targets, introduction to @cindex prerequisites, introduction to @cindex recipes, introduction to @example @group @var{target} @dots{} : @var{prerequisites} @dots{} @var{recipe} @dots{} @dots{} @end group @end example A @dfn{target} is usually the name of a file that is generated by a program; examples of targets are executable or object files. A target can also be the name of an action to carry out, such as @samp{clean} (@pxref{Phony Targets}). A @dfn{prerequisite} is a file that is used as input to create the target. A target often depends on several files. @cindex tabs in rules A @dfn{recipe} is an action that @code{make} carries out. A recipe may have more than one command, either on the same line or each on its own line. @strong{Please note:} you need to put a tab character at the beginning of every recipe line! This is an obscurity that catches the unwary. If you prefer to prefix your recipes with a character other than tab, you can set the @code{.RECIPEPREFIX} variable to an alternate character (@pxref{Special Variables}). Usually a recipe is in a rule with prerequisites and serves to create a target file if any of the prerequisites change. However, the rule that specifies a recipe for the target need not have prerequisites. For example, the rule containing the delete command associated with the target @samp{clean} does not have prerequisites. A @dfn{rule}, then, explains how and when to remake certain files which are the targets of the particular rule. @code{make} carries out the recipe on the prerequisites to create or update the target. A rule can also explain how and when to carry out an action. @xref{Rules, , Writing Rules}. A makefile may contain other text besides rules, but a simple makefile need only contain rules. Rules may look somewhat more complicated than shown in this template, but all fit the pattern more or less. @node Simple Makefile, How Make Works, Rule Introduction, Introduction @section A Simple Makefile @cindex simple makefile @cindex makefile, simple Here is a straightforward makefile that describes the way an executable file called @code{edit} depends on eight object files which, in turn, depend on eight C source and three header files. In this example, all the C files include @file{defs.h}, but only those defining editing commands include @file{command.h}, and only low level files that change the editor buffer include @file{buffer.h}. @example @group edit : main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o cc -o edit main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o main.o : main.c defs.h cc -c main.c kbd.o : kbd.c defs.h command.h cc -c kbd.c command.o : command.c defs.h command.h cc -c command.c display.o : display.c defs.h buffer.h cc -c display.c insert.o : insert.c defs.h buffer.h cc -c insert.c search.o : search.c defs.h buffer.h cc -c search.c files.o : files.c defs.h buffer.h command.h cc -c files.c utils.o : utils.c defs.h cc -c utils.c clean : rm edit main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o @end group @end example @noindent We split each long line into two lines using backslash/newline; this is like using one long line, but is easier to read. @xref{Splitting Lines, , Splitting Long Lines}. @cindex continuation lines @cindex @code{\} (backslash), for continuation lines @cindex backslash (@code{\}), for continuation lines @cindex quoting newline, in makefile @cindex newline, quoting, in makefile To use this makefile to create the executable file called @file{edit}, type: @example make @end example To use this makefile to delete the executable file and all the object files from the directory, type: @example make clean @end example In the example makefile, the targets include the executable file @samp{edit}, and the object files @samp{main.o} and @samp{kbd.o}. The prerequisites are files such as @samp{main.c} and @samp{defs.h}. In fact, each @samp{.o} file is both a target and a prerequisite. Recipes include @w{@samp{cc -c main.c}} and @w{@samp{cc -c kbd.c}}. When a target is a file, it needs to be recompiled or relinked if any of its prerequisites change. In addition, any prerequisites that are themselves automatically generated should be updated first. In this example, @file{edit} depends on each of the eight object files; the object file @file{main.o} depends on the source file @file{main.c} and on the header file @file{defs.h}. A recipe may follow each line that contains a target and prerequisites. These recipes say how to update the target file. A tab character (or whatever character is specified by the @code{.RECIPEPREFIX} variable; @pxref{Special Variables}) must come at the beginning of every line in the recipe to distinguish recipes from other lines in the makefile. (Bear in mind that @code{make} does not know anything about how the recipes work. It is up to you to supply recipes that will update the target file properly. All @code{make} does is execute the recipe you have specified when the target file needs to be updated.)@refill @cindex recipe The target @samp{clean} is not a file, but merely the name of an action. Since you normally do not want to carry out the actions in this rule, @samp{clean} is not a prerequisite of any other rule. Consequently, @code{make} never does anything with it unless you tell it specifically. Note that this rule not only is not a prerequisite, it also does not have any prerequisites, so the only purpose of the rule is to run the specified recipe. Targets that do not refer to files but are just actions are called @dfn{phony targets}. @xref{Phony Targets}, for information about this kind of target. @xref{Errors, , Errors in Recipes}, to see how to cause @code{make} to ignore errors from @code{rm} or any other command. @cindex @code{clean} target @cindex @code{rm} (shell command) @node How Make Works, Variables Simplify, Simple Makefile, Introduction @comment node-name, next, previous, up @section How @code{make} Processes a Makefile @cindex processing a makefile @cindex makefile, how @code{make} processes By default, @code{make} starts with the first target (not targets whose names start with @samp{.}). This is called the @dfn{default goal}. (@dfn{Goals} are the targets that @code{make} strives ultimately to update. You can override this behavior using the command line (@pxref{Goals, , Arguments to Specify the Goals}) or with the @code{.DEFAULT_GOAL} special variable (@pxref{Special Variables, , Other Special Variables}). @cindex default goal @cindex goal, default @cindex goal In the simple example of the previous section, the default goal is to update the executable program @file{edit}; therefore, we put that rule first. Thus, when you give the command: @example make @end example @noindent @code{make} reads the makefile in the current directory and begins by processing the first rule. In the example, this rule is for relinking @file{edit}; but before @code{make} can fully process this rule, it must process the rules for the files that @file{edit} depends on, which in this case are the object files. Each of these files is processed according to its own rule. These rules say to update each @samp{.o} file by compiling its source file. The recompilation must be done if the source file, or any of the header files named as prerequisites, is more recent than the object file, or if the object file does not exist. The other rules are processed because their targets appear as prerequisites of the goal. If some other rule is not depended on by the goal (or anything it depends on, etc.), that rule is not processed, unless you tell @code{make} to do so (with a command such as @w{@code{make clean}}). Before recompiling an object file, @code{make} considers updating its prerequisites, the source file and header files. This makefile does not specify anything to be done for them---the @samp{.c} and @samp{.h} files are not the targets of any rules---so @code{make} does nothing for these files. But @code{make} would update automatically generated C programs, such as those made by Bison or Yacc, by their own rules at this time. After recompiling whichever object files need it, @code{make} decides whether to relink @file{edit}. This must be done if the file @file{edit} does not exist, or if any of the object files are newer than it. If an object file was just recompiled, it is now newer than @file{edit}, so @file{edit} is relinked. @cindex relinking Thus, if we change the file @file{insert.c} and run @code{make}, @code{make} will compile that file to update @file{insert.o}, and then link @file{edit}. If we change the file @file{command.h} and run @code{make}, @code{make} will recompile the object files @file{kbd.o}, @file{command.o} and @file{files.o} and then link the file @file{edit}. @node Variables Simplify, make Deduces, How Make Works, Introduction @section Variables Make Makefiles Simpler @cindex variables @cindex simplifying with variables In our example, we had to list all the object files twice in the rule for @file{edit} (repeated here): @example @group edit : main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o cc -o edit main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o @end group @end example @cindex @code{objects} Such duplication is error-prone; if a new object file is added to the system, we might add it to one list and forget the other. We can eliminate the risk and simplify the makefile by using a variable. @dfn{Variables} allow a text string to be defined once and substituted in multiple places later (@pxref{Using Variables, ,How to Use Variables}). @cindex @code{OBJECTS} @cindex @code{objs} @cindex @code{OBJS} @cindex @code{obj} @cindex @code{OBJ} It is standard practice for every makefile to have a variable named @code{objects}, @code{OBJECTS}, @code{objs}, @code{OBJS}, @code{obj}, or @code{OBJ} which is a list of all object file names. We would define such a variable @code{objects} with a line like this in the makefile:@refill @example @group objects = main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o @end group @end example @noindent Then, each place we want to put a list of the object file names, we can substitute the variable's value by writing @samp{$(objects)} (@pxref{Using Variables, ,How to Use Variables}). Here is how the complete simple makefile looks when you use a variable for the object files: @example @group objects = main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o edit : $(objects) cc -o edit $(objects) main.o : main.c defs.h cc -c main.c kbd.o : kbd.c defs.h command.h cc -c kbd.c command.o : command.c defs.h command.h cc -c command.c display.o : display.c defs.h buffer.h cc -c display.c insert.o : insert.c defs.h buffer.h cc -c insert.c search.o : search.c defs.h buffer.h cc -c search.c files.o : files.c defs.h buffer.h command.h cc -c files.c utils.o : utils.c defs.h cc -c utils.c clean : rm edit $(objects) @end group @end example @node make Deduces, Combine By Prerequisite, Variables Simplify, Introduction @section Letting @code{make} Deduce the Recipes @cindex deducing recipes (implicit rules) @cindex implicit rule, introduction to @cindex rule, implicit, introduction to It is not necessary to spell out the recipes for compiling the individual C source files, because @code{make} can figure them out: it has an @dfn{implicit rule} for updating a @samp{.o} file from a correspondingly named @samp{.c} file using a @samp{cc -c} command. For example, it will use the recipe @samp{cc -c main.c -o main.o} to compile @file{main.c} into @file{main.o}. We can therefore omit the recipes from the rules for the object files. @xref{Implicit Rules, ,Using Implicit Rules}.@refill When a @samp{.c} file is used automatically in this way, it is also automatically added to the list of prerequisites. We can therefore omit the @samp{.c} files from the prerequisites, provided we omit the recipe. Here is the entire example, with both of these changes, and a variable @code{objects} as suggested above: @example @group objects = main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o edit : $(objects) cc -o edit $(objects) main.o : defs.h kbd.o : defs.h command.h command.o : defs.h command.h display.o : defs.h buffer.h insert.o : defs.h buffer.h search.o : defs.h buffer.h files.o : defs.h buffer.h command.h utils.o : defs.h .PHONY : clean clean : rm edit $(objects) @end group @end example @noindent This is how we would write the makefile in actual practice. (The complications associated with @samp{clean} are described elsewhere. See @ref{Phony Targets}, and @ref{Errors, ,Errors in Recipes}.) Because implicit rules are so convenient, they are important. You will see them used frequently.@refill @node Combine By Prerequisite, Cleanup, make Deduces, Introduction @section Another Style of Makefile @cindex combining rules by prerequisite When the objects of a makefile are created only by implicit rules, an alternative style of makefile is possible. In this style of makefile, you group entries by their prerequisites instead of by their targets. Here is what one looks like: @example @group objects = main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o edit : $(objects) cc -o edit $(objects) $(objects) : defs.h kbd.o command.o files.o : command.h display.o insert.o search.o files.o : buffer.h @end group @end example @noindent Here @file{defs.h} is given as a prerequisite of all the object files; @file{command.h} and @file{buffer.h} are prerequisites of the specific object files listed for them. Whether this is better is a matter of taste: it is more compact, but some people dislike it because they find it clearer to put all the information about each target in one place. @node Cleanup, , Combine By Prerequisite, Introduction @section Rules for Cleaning the Directory @cindex cleaning up @cindex removing, to clean up Compiling a program is not the only thing you might want to write rules for. Makefiles commonly tell how to do a few other things besides compiling a program: for example, how to delete all the object files and executables so that the directory is @samp{clean}. @cindex @code{clean} target Here is how we could write a @code{make} rule for cleaning our example editor: @example @group clean: rm edit $(objects) @end group @end example In practice, we might want to write the rule in a somewhat more complicated manner to handle unanticipated situations. We would do this: @example @group .PHONY : clean clean : -rm edit $(objects) @end group @end example @noindent This prevents @code{make} from getting confused by an actual file called @file{clean} and causes it to continue in spite of errors from @code{rm}. (See @ref{Phony Targets}, and @ref{Errors, ,Errors in Recipes}.) @noindent A rule such as this should not be placed at the beginning of the makefile, because we do not want it to run by default! Thus, in the example makefile, we want the rule for @code{edit}, which recompiles the editor, to remain the default goal. Since @code{clean} is not a prerequisite of @code{edit}, this rule will not run at all if we give the command @samp{make} with no arguments. In order to make the rule run, we have to type @samp{make clean}. @xref{Running, ,How to Run @code{make}}. @node Makefiles, Rules, Introduction, Top @chapter Writing Makefiles @cindex makefile, how to write The information that tells @code{make} how to recompile a system comes from reading a data base called the @dfn{makefile}. @menu * Makefile Contents:: What makefiles contain. * Makefile Names:: How to name your makefile. * Include:: How one makefile can use another makefile. * MAKEFILES Variable:: The environment can specify extra makefiles. * Remaking Makefiles:: How makefiles get remade. * Overriding Makefiles:: How to override part of one makefile with another makefile. * Reading Makefiles:: How makefiles are read in. * Parsing Makefiles:: How makefiles are parsed. * Secondary Expansion:: How and when secondary expansion is performed. @end menu @node Makefile Contents, Makefile Names, Makefiles, Makefiles @section What Makefiles Contain Makefiles contain five kinds of things: @dfn{explicit rules}, @dfn{implicit rules}, @dfn{variable definitions}, @dfn{directives}, and @dfn{comments}. Rules, variables, and directives are described at length in later chapters.@refill @itemize @bullet @cindex rule, explicit, definition of @cindex explicit rule, definition of @item An @dfn{explicit rule} says when and how to remake one or more files, called the rule's @dfn{targets}. It lists the other files that the targets depend on, called the @dfn{prerequisites} of the target, and may also give a recipe to use to create or update the targets. @xref{Rules, ,Writing Rules}. @cindex rule, implicit, definition of @cindex implicit rule, definition of @item An @dfn{implicit rule} says when and how to remake a class of files based on their names. It describes how a target may depend on a file with a name similar to the target and gives a recipe to create or update such a target. @xref{Implicit Rules, ,Using Implicit Rules}. @cindex variable definition @item A @dfn{variable definition} is a line that specifies a text string value for a variable that can be substituted into the text later. The simple makefile example shows a variable definition for @code{objects} as a list of all object files (@pxref{Variables Simplify, , Variables Make Makefiles Simpler}). @cindex directive @item A @dfn{directive} is an instruction for @code{make} to do something special while reading the makefile. These include: @itemize @bullet @item Reading another makefile (@pxref{Include, ,Including Other Makefiles}). @item Deciding (based on the values of variables) whether to use or ignore a part of the makefile (@pxref{Conditionals, ,Conditional Parts of Makefiles}). @item Defining a variable from a verbatim string containing multiple lines (@pxref{Multi-Line, ,Defining Multi-Line Variables}). @end itemize @cindex comments, in makefile @cindex @code{#} (comments), in makefile @item @samp{#} in a line of a makefile starts a @dfn{comment}. It and the rest of the line are ignored, except that a trailing backslash not escaped by another backslash will continue the comment across multiple lines. A line containing just a comment (with perhaps spaces before it) is effectively blank, and is ignored. If you want a literal @code{#}, escape it with a backslash (e.g., @code{\#}). Comments may appear on any line in the makefile, although they are treated specially in certain situations. You cannot use comments within variable references or function calls: any instance of @code{#} will be treated literally (rather than as the start of a comment) inside a variable reference or function call. Comments within a recipe are passed to the shell, just as with any other recipe text. The shell decides how to interpret it: whether or not this is a comment is up to the shell. Within a @code{define} directive, comments are not ignored during the definition of the variable, but rather kept intact in the value of the variable. When the variable is expanded they will either be treated as @code{make} comments or as recipe text, depending on the context in which the variable is evaluated. @end itemize @menu * Splitting Lines:: Splitting long lines in makefiles @end menu @node Splitting Lines, , Makefile Contents, Makefile Contents @subsection Splitting Long Lines @cindex splitting long lines @cindex long lines, splitting @cindex backslash (@code{\}), to quote newlines Makefiles use a ``line-based'' syntax in which the newline character is special and marks the end of a statement. GNU @code{make} has no limit on the length of a statement line, up to the amount of memory in your computer. However, it is difficult to read lines which are too long to display without wrapping or scrolling. So, you can format your makefiles for readability by adding newlines into the middle of a statement: you do this by escaping the internal newlines with a backslash (@code{\}) character. Where we need to make a distinction we will refer to ``physical lines'' as a single line ending with a newline (regardless of whether it is escaped) and a ``logical line'' being a complete statement including all escaped newlines up to the first non-escaped newline. The way in which backslash/newline combinations are handled depends on whether the statement is a recipe line or a non-recipe line. Handling of backslash/newline in a recipe line is discussed later (@pxref{Splitting Recipe Lines}). Outside of recipe lines, backslash/newlines are converted into a single space character. Once that is done, all whitespace around the backslash/newline is condensed into a single space: this includes all whitespace preceding the backslash, all whitespace at the beginning of the line after the backslash/newline, and any consecutive backslash/newline combinations. If the @code{.POSIX} special target is defined then backslash/newline handling is modified slightly to conform to POSIX.2: first, whitespace preceding a backslash is not removed and second, consecutive backslash/newlines are not condensed. @subsubheading Splitting Without Adding Whitespace @cindex whitespace, avoiding on line split @cindex removing whitespace from split lines If you need to split a line but do @emph{not} want any whitespace added, you can utilize a subtle trick: replace your backslash/newline pairs with the three characters dollar sign/backslash/newline: @example var := one$\ word @end example After @code{make} removes the backslash/newline and condenses the following line into a single space, this is equivalent to: @example var := one$ word @end example Then @code{make} will perform variable expansion. The variable reference @samp{$ } refers to a variable with the one-character name `` '' (space) which does not exist, and so expands to the empty string, giving a final assignment which is the equivalent of: @example var := oneword @end example @node Makefile Names, Include, Makefile Contents, Makefiles @section What Name to Give Your Makefile @cindex makefile name @cindex name of makefile @cindex default makefile name @cindex file name of makefile @c following paragraph rewritten to avoid overfull hbox By default, when @code{make} looks for the makefile, it tries the following names, in order: @file{GNUmakefile}, @file{makefile} and @file{Makefile}.@refill @findex Makefile @findex GNUmakefile @findex makefile @cindex @code{README} Normally you should call your makefile either @file{makefile} or @file{Makefile}. (We recommend @file{Makefile} because it appears prominently near the beginning of a directory listing, right near other important files such as @file{README}.) The first name checked, @file{GNUmakefile}, is not recommended for most makefiles. You should use this name if you have a makefile that is specific to GNU @code{make}, and will not be understood by other versions of @code{make}. Other @code{make} programs look for @file{makefile} and @file{Makefile}, but not @file{GNUmakefile}. If @code{make} finds none of these names, it does not use any makefile. Then you must specify a goal with a command argument, and @code{make} will attempt to figure out how to remake it using only its built-in implicit rules. @xref{Implicit Rules, ,Using Implicit Rules}. @cindex @code{-f} @cindex @code{--file} @cindex @code{--makefile} If you want to use a nonstandard name for your makefile, you can specify the makefile name with the @samp{-f} or @samp{--file} option. The arguments @w{@samp{-f @var{name}}} or @w{@samp{--file=@var{name}}} tell @code{make} to read the file @var{name} as the makefile. If you use more than one @samp{-f} or @samp{--file} option, you can specify several makefiles. All the makefiles are effectively concatenated in the order specified. The default makefile names @file{GNUmakefile}, @file{makefile} and @file{Makefile} are not checked automatically if you specify @samp{-f} or @samp{--file}.@refill @cindex specifying makefile name @cindex makefile name, how to specify @cindex name of makefile, how to specify @cindex file name of makefile, how to specify @node Include, MAKEFILES Variable, Makefile Names, Makefiles @section Including Other Makefiles @cindex including other makefiles @cindex makefile, including @findex include The @code{include} directive tells @code{make} to suspend reading the current makefile and read one or more other makefiles before continuing. The directive is a line in the makefile that looks like this: @example include @var{filenames}@dots{} @end example @noindent @var{filenames} can contain shell file name patterns. If @var{filenames} is empty, nothing is included and no error is printed. @cindex shell file name pattern (in @code{include}) @cindex shell wildcards (in @code{include}) @cindex wildcard, in @code{include} Extra spaces are allowed and ignored at the beginning of the line, but the first character must not be a tab (or the value of @code{.RECIPEPREFIX})---if the line begins with a tab, it will be considered a recipe line. Whitespace is required between @code{include} and the file names, and between file names; extra whitespace is ignored there and at the end of the directive. A comment starting with @samp{#} is allowed at the end of the line. If the file names contain any variable or function references, they are expanded. @xref{Using Variables, ,How to Use Variables}. For example, if you have three @file{.mk} files, @file{a.mk}, @file{b.mk}, and @file{c.mk}, and @code{$(bar)} expands to @code{bish bash}, then the following expression @example include foo *.mk $(bar) @end example is equivalent to @example include foo a.mk b.mk c.mk bish bash @end example When @code{make} processes an @code{include} directive, it suspends reading of the containing makefile and reads from each listed file in turn. When that is finished, @code{make} resumes reading the makefile in which the directive appears. One occasion for using @code{include} directives is when several programs, handled by individual makefiles in various directories, need to use a common set of variable definitions (@pxref{Setting, ,Setting Variables}) or pattern rules (@pxref{Pattern Rules, ,Defining and Redefining Pattern Rules}). Another such occasion is when you want to generate prerequisites from source files automatically; the prerequisites can be put in a file that is included by the main makefile. This practice is generally cleaner than that of somehow appending the prerequisites to the end of the main makefile as has been traditionally done with other versions of @code{make}. @xref{Automatic Prerequisites}. @cindex prerequisites, automatic generation @cindex automatic generation of prerequisites @cindex generating prerequisites automatically @cindex @code{-I} @cindex @code{--include-dir} @cindex included makefiles, default directories @cindex default directories for included makefiles @findex /usr/gnu/include @findex /usr/local/include @findex /usr/include If the specified name does not start with a slash, and the file is not found in the current directory, several other directories are searched. First, any directories you have specified with the @samp{-I} or @samp{--include-dir} option are searched (@pxref{Options Summary, ,Summary of Options}). Then the following directories (if they exist) are searched, in this order: @file{@var{prefix}/include} (normally @file{/usr/local/include} @footnote{GNU Make compiled for MS-DOS and MS-Windows behaves as if @var{prefix} has been defined to be the root of the DJGPP tree hierarchy.}) @file{/usr/gnu/include}, @file{/usr/local/include}, @file{/usr/include}. If an included makefile cannot be found in any of these directories, a warning message is generated, but it is not an immediately fatal error; processing of the makefile containing the @code{include} continues. Once it has finished reading makefiles, @code{make} will try to remake any that are out of date or don't exist. @xref{Remaking Makefiles, ,How Makefiles Are Remade}. Only after it has tried to find a way to remake a makefile and failed, will @code{make} diagnose the missing makefile as a fatal error. If you want @code{make} to simply ignore a makefile which does not exist or cannot be remade, with no error message, use the @w{@code{-include}} directive instead of @code{include}, like this: @example -include @var{filenames}@dots{} @end example This acts like @code{include} in every way except that there is no error (not even a warning) if any of the @var{filenames} (or any prerequisites of any of the @var{filenames}) do not exist or cannot be remade. For compatibility with some other @code{make} implementations, @code{sinclude} is another name for @w{@code{-include}}. @node MAKEFILES Variable, Remaking Makefiles, Include, Makefiles @section The Variable @code{MAKEFILES} @cindex makefile, and @code{MAKEFILES} variable @cindex including (@code{MAKEFILES} variable) @vindex MAKEFILES If the environment variable @code{MAKEFILES} is defined, @code{make} considers its value as a list of names (separated by whitespace) of additional makefiles to be read before the others. This works much like the @code{include} directive: various directories are searched for those files (@pxref{Include, ,Including Other Makefiles}). In addition, the default goal is never taken from one of these makefiles (or any makefile included by them) and it is not an error if the files listed in @code{MAKEFILES} are not found.@refill @cindex recursion, and @code{MAKEFILES} variable The main use of @code{MAKEFILES} is in communication between recursive invocations of @code{make} (@pxref{Recursion, ,Recursive Use of @code{make}}). It usually is not desirable to set the environment variable before a top-level invocation of @code{make}, because it is usually better not to mess with a makefile from outside. However, if you are running @code{make} without a specific makefile, a makefile in @code{MAKEFILES} can do useful things to help the built-in implicit rules work better, such as defining search paths (@pxref{Directory Search}). Some users are tempted to set @code{MAKEFILES} in the environment automatically on login, and program makefiles to expect this to be done. This is a very bad idea, because such makefiles will fail to work if run by anyone else. It is much better to write explicit @code{include} directives in the makefiles. @xref{Include, , Including Other Makefiles}. @node Remaking Makefiles, Overriding Makefiles, MAKEFILES Variable, Makefiles @section How Makefiles Are Remade @cindex updating makefiles @cindex remaking makefiles @cindex makefile, remaking of Sometimes makefiles can be remade from other files, such as RCS or SCCS files. If a makefile can be remade from other files, you probably want @code{make} to get an up-to-date version of the makefile to read in. To this end, after reading in all makefiles @code{make} will consider each as a goal target and attempt to update it. If a makefile has a rule which says how to update it (found either in that very makefile or in another one) or if an implicit rule applies to it (@pxref{Implicit Rules, ,Using Implicit Rules}), it will be updated if necessary. After all makefiles have been checked, if any have actually been changed, @code{make} starts with a clean slate and reads all the makefiles over again. (It will also attempt to update each of them over again, but normally this will not change them again, since they are already up to date.) Each restart will cause the special variable @code{MAKE_RESTARTS} to be updated (@pxref{Special Variables}).@refill If you know that one or more of your makefiles cannot be remade and you want to keep @code{make} from performing an implicit rule search on them, perhaps for efficiency reasons, you can use any normal method of preventing implicit rule look-up to do so. For example, you can write an explicit rule with the makefile as the target, and an empty recipe (@pxref{Empty Recipes, ,Using Empty Recipes}). If the makefiles specify a double-colon rule to remake a file with a recipe but no prerequisites, that file will always be remade (@pxref{Double-Colon}). In the case of makefiles, a makefile that has a double-colon rule with a recipe but no prerequisites will be remade every time @code{make} is run, and then again after @code{make} starts over and reads the makefiles in again. This would cause an infinite loop: @code{make} would constantly remake the makefile, and never do anything else. So, to avoid this, @code{make} will @strong{not} attempt to remake makefiles which are specified as targets of a double-colon rule with a recipe but no prerequisites.@refill If you do not specify any makefiles to be read with @samp{-f} or @samp{--file} options, @code{make} will try the default makefile names; @pxref{Makefile Names, ,What Name to Give Your Makefile}. Unlike makefiles explicitly requested with @samp{-f} or @samp{--file} options, @code{make} is not certain that these makefiles should exist. However, if a default makefile does not exist but can be created by running @code{make} rules, you probably want the rules to be run so that the makefile can be used. Therefore, if none of the default makefiles exists, @code{make} will try to make each of them in the same order in which they are searched for (@pxref{Makefile Names, ,What Name to Give Your Makefile}) until it succeeds in making one, or it runs out of names to try. Note that it is not an error if @code{make} cannot find or make any makefile; a makefile is not always necessary.@refill When you use the @samp{-t} or @samp{--touch} option (@pxref{Instead of Execution, ,Instead of Executing Recipes}), you would not want to use an out-of-date makefile to decide which targets to touch. So the @samp{-t} option has no effect on updating makefiles; they are really updated even if @samp{-t} is specified. Likewise, @samp{-q} (or @samp{--question}) and @samp{-n} (or @samp{--just-print}) do not prevent updating of makefiles, because an out-of-date makefile would result in the wrong output for other targets. Thus, @samp{make -f mfile -n foo} will update @file{mfile}, read it in, and then print the recipe to update @file{foo} and its prerequisites without running it. The recipe printed for @file{foo} will be the one specified in the updated contents of @file{mfile}. However, on occasion you might actually wish to prevent updating of even the makefiles. You can do this by specifying the makefiles as goals in the command line as well as specifying them as makefiles. When the makefile name is specified explicitly as a goal, the options @samp{-t} and so on do apply to them. Thus, @samp{make -f mfile -n mfile foo} would read the makefile @file{mfile}, print the recipe needed to update it without actually running it, and then print the recipe needed to update @file{foo} without running that. The recipe for @file{foo} will be the one specified by the existing contents of @file{mfile}. @node Overriding Makefiles, Reading Makefiles, Remaking Makefiles, Makefiles @section Overriding Part of Another Makefile @cindex overriding makefiles @cindex makefile, overriding Sometimes it is useful to have a makefile that is mostly just like another makefile. You can often use the @samp{include} directive to include one in the other, and add more targets or variable definitions. However, it is invalid for two makefiles to give different recipes for the same target. But there is another way. @cindex match-anything rule, used to override In the containing makefile (the one that wants to include the other), you can use a match-anything pattern rule to say that to remake any target that cannot be made from the information in the containing makefile, @code{make} should look in another makefile. @xref{Pattern Rules}, for more information on pattern rules. For example, if you have a makefile called @file{Makefile} that says how to make the target @samp{foo} (and other targets), you can write a makefile called @file{GNUmakefile} that contains: @example foo: frobnicate > foo %: force @@$(MAKE) -f Makefile $@@ force: ; @end example If you say @samp{make foo}, @code{make} will find @file{GNUmakefile}, read it, and see that to make @file{foo}, it needs to run the recipe @samp{frobnicate > foo}. If you say @samp{make bar}, @code{make} will find no way to make @file{bar} in @file{GNUmakefile}, so it will use the recipe from the pattern rule: @samp{make -f Makefile bar}. If @file{Makefile} provides a rule for updating @file{bar}, @code{make} will apply the rule. And likewise for any other target that @file{GNUmakefile} does not say how to make. The way this works is that the pattern rule has a pattern of just @samp{%}, so it matches any target whatever. The rule specifies a prerequisite @file{force}, to guarantee that the recipe will be run even if the target file already exists. We give the @file{force} target an empty recipe to prevent @code{make} from searching for an implicit rule to build it---otherwise it would apply the same match-anything rule to @file{force} itself and create a prerequisite loop! @node Reading Makefiles, Parsing Makefiles, Overriding Makefiles, Makefiles @section How @code{make} Reads a Makefile @cindex reading makefiles @cindex makefile, reading GNU @code{make} does its work in two distinct phases. During the first phase it reads all the makefiles, included makefiles, etc. and internalizes all the variables and their values and implicit and explicit rules, and builds a dependency graph of all the targets and their prerequisites. During the second phase, @code{make} uses this internalized data to determine which targets need to be updated and run the recipes necessary to update them. It's important to understand this two-phase approach because it has a direct impact on how variable and function expansion happens; this is often a source of some confusion when writing makefiles. Below is a summary of the different constructs that can be found in a makefile, and the phase in which expansion happens for each part of the construct. We say that expansion is @dfn{immediate} if it happens during the first phase: @code{make} will expand that part of the construct as the makefile is parsed. We say that expansion is @dfn{deferred} if it is not immediate. Expansion of a deferred construct part is delayed until the expansion is used: either when it is referenced in an immediate context, or when it is needed during the second phase. You may not be familiar with some of these constructs yet. You can reference this section as you become familiar with them, in later chapters. @subheading Variable Assignment @cindex +=, expansion @cindex =, expansion @cindex ?=, expansion @cindex +=, expansion @cindex !=, expansion @cindex define, expansion Variable definitions are parsed as follows: @example @var{immediate} = @var{deferred} @var{immediate} ?= @var{deferred} @var{immediate} := @var{immediate} @var{immediate} ::= @var{immediate} @var{immediate} += @var{deferred} or @var{immediate} @var{immediate} != @var{immediate} define @var{immediate} @var{deferred} endef define @var{immediate} = @var{deferred} endef define @var{immediate} ?= @var{deferred} endef define @var{immediate} := @var{immediate} endef define @var{immediate} ::= @var{immediate} endef define @var{immediate} += @var{deferred} or @var{immediate} endef define @var{immediate} != @var{immediate} endef @end example For the append operator @samp{+=}, the right-hand side is considered immediate if the variable was previously set as a simple variable (@samp{:=} or @samp{::=}), and deferred otherwise. For the shell assignment operator @samp{!=}, the right-hand side is evaluated immediately and handed to the shell. The result is stored in the variable named on the left, and that variable becomes a simple variable (and will thus be re-evaluated on each reference). @subheading Conditional Directives @cindex ifdef, expansion @cindex ifeq, expansion @cindex ifndef, expansion @cindex ifneq, expansion Conditional directives are parsed immediately. This means, for example, that automatic variables cannot be used in conditional directives, as automatic variables are not set until the recipe for that rule is invoked. If you need to use automatic variables in a conditional directive you @emph{must} move the condition into the recipe and use shell conditional syntax instead. @subheading Rule Definition @cindex target, expansion @cindex prerequisite, expansion @cindex implicit rule, expansion @cindex pattern rule, expansion @cindex explicit rule, expansion A rule is always expanded the same way, regardless of the form: @example @var{immediate} : @var{immediate} ; @var{deferred} @var{deferred} @end example That is, the target and prerequisite sections are expanded immediately, and the recipe used to build the target is always deferred. This is true for explicit rules, pattern rules, suffix rules, static pattern rules, and simple prerequisite definitions. @node Parsing Makefiles, Secondary Expansion, Reading Makefiles, Makefiles @section How Makefiles Are Parsed @cindex parsing makefiles @cindex makefiles, parsing GNU @code{make} parses makefiles line-by-line. Parsing proceeds using the following steps: @enumerate @item Read in a full logical line, including backslash-escaped lines (@pxref{Splitting Lines, , Splitting Long Lines}). @item Remove comments (@pxref{Makefile Contents, , What Makefiles Contain}). @item If the line begins with the recipe prefix character and we are in a rule context, add the line to the current recipe and read the next line (@pxref{Recipe Syntax}). @item Expand elements of the line which appear in an @emph{immediate} expansion context (@pxref{Reading Makefiles, , How @code{make} Reads a Makefile}).@refill @item Scan the line for a separator character, such as @samp{:} or @samp{=}, to determine whether the line is a macro assignment or a rule (@pxref{Recipe Syntax}). @item Internalize the resulting operation and read the next line. @end enumerate An important consequence of this is that a macro can expand to an entire rule, @emph{if it is one line long}. This will work: @example myrule = target : ; echo built $(myrule) @end example However, this will not work because @code{make} does not re-split lines after it has expanded them: @example define myrule target: echo built endef $(myrule) @end example The above makefile results in the definition of a target @samp{target} with prerequisites @samp{echo} and @samp{built}, as if the makefile contained @code{target: echo built}, rather than a rule with a recipe. Newlines still present in a line after expansion is complete are ignored as normal whitespace. In order to properly expand a multi-line macro you must use the @code{eval} function: this causes the @code{make} parser to be run on the results of the expanded macro (@pxref{Eval Function}). @node Secondary Expansion, , Parsing Makefiles, Makefiles @section Secondary Expansion @cindex secondary expansion @cindex expansion, secondary @findex .SECONDEXPANSION Previously we learned that GNU @code{make} works in two distinct phases: a read-in phase and a target-update phase (@pxref{Reading Makefiles, , How @code{make} Reads a Makefile}). GNU make also has the ability to enable a @emph{second expansion} of the prerequisites (only) for some or all targets defined in the makefile. In order for this second expansion to occur, the special target @code{.SECONDEXPANSION} must be defined before the first prerequisite list that makes use of this feature. If that special target is defined then in between the two phases mentioned above, right at the end of the read-in phase, all the prerequisites of the targets defined after the special target are expanded a @emph{second time}. In most circumstances this secondary expansion will have no effect, since all variable and function references will have been expanded during the initial parsing of the makefiles. In order to take advantage of the secondary expansion phase of the parser, then, it's necessary to @emph{escape} the variable or function reference in the makefile. In this case the first expansion merely un-escapes the reference but doesn't expand it, and expansion is left to the secondary expansion phase. For example, consider this makefile: @example .SECONDEXPANSION: ONEVAR = onefile TWOVAR = twofile myfile: $(ONEVAR) $$(TWOVAR) @end example After the first expansion phase the prerequisites list of the @file{myfile} target will be @code{onefile} and @code{$(TWOVAR)}; the first (unescaped) variable reference to @var{ONEVAR} is expanded, while the second (escaped) variable reference is simply unescaped, without being recognized as a variable reference. Now during the secondary expansion the first word is expanded again but since it contains no variable or function references it remains the value @file{onefile}, while the second word is now a normal reference to the variable @var{TWOVAR}, which is expanded to the value @file{twofile}. The final result is that there are two prerequisites, @file{onefile} and @file{twofile}. Obviously, this is not a very interesting case since the same result could more easily have been achieved simply by having both variables appear, unescaped, in the prerequisites list. One difference becomes apparent if the variables are reset; consider this example: @example .SECONDEXPANSION: AVAR = top onefile: $(AVAR) twofile: $$(AVAR) AVAR = bottom @end example Here the prerequisite of @file{onefile} will be expanded immediately, and resolve to the value @file{top}, while the prerequisite of @file{twofile} will not be full expanded until the secondary expansion and yield a value of @file{bottom}. This is marginally more exciting, but the true power of this feature only becomes apparent when you discover that secondary expansions always take place within the scope of the automatic variables for that target. This means that you can use variables such as @code{$@@}, @code{$*}, etc. during the second expansion and they will have their expected values, just as in the recipe. All you have to do is defer the expansion by escaping the @code{$}. Also, secondary expansion occurs for both explicit and implicit (pattern) rules. Knowing this, the possible uses for this feature increase dramatically. For example: @example .SECONDEXPANSION: main_OBJS := main.o try.o test.o lib_OBJS := lib.o api.o main lib: $$($$@@_OBJS) @end example Here, after the initial expansion the prerequisites of both the @file{main} and @file{lib} targets will be @code{$($@@_OBJS)}. During the secondary expansion, the @code{$@@} variable is set to the name of the target and so the expansion for the @file{main} target will yield @code{$(main_OBJS)}, or @code{main.o try.o test.o}, while the secondary expansion for the @file{lib} target will yield @code{$(lib_OBJS)}, or @code{lib.o api.o}. You can also mix in functions here, as long as they are properly escaped: @example main_SRCS := main.c try.c test.c lib_SRCS := lib.c api.c .SECONDEXPANSION: main lib: $$(patsubst %.c,%.o,$$($$@@_SRCS)) @end example This version allows users to specify source files rather than object files, but gives the same resulting prerequisites list as the previous example. Evaluation of automatic variables during the secondary expansion phase, especially of the target name variable @code{$$@@}, behaves similarly to evaluation within recipes. However, there are some subtle differences and ``corner cases'' which come into play for the different types of rule definitions that @code{make} understands. The subtleties of using the different automatic variables are described below. @subheading Secondary Expansion of Explicit Rules @cindex secondary expansion and explicit rules @cindex explicit rules, secondary expansion of During the secondary expansion of explicit rules, @code{$$@@} and @code{$$%} evaluate, respectively, to the file name of the target and, when the target is an archive member, the target member name. The @code{$$<} variable evaluates to the first prerequisite in the first rule for this target. @code{$$^} and @code{$$+} evaluate to the list of all prerequisites of rules @emph{that have already appeared} for the same target (@code{$$+} with repetitions and @code{$$^} without). The following example will help illustrate these behaviors: @example .SECONDEXPANSION: foo: foo.1 bar.1 $$< $$^ $$+ # line #1 foo: foo.2 bar.2 $$< $$^ $$+ # line #2 foo: foo.3 bar.3 $$< $$^ $$+ # line #3 @end example In the first prerequisite list, all three variables (@code{$$<}, @code{$$^}, and @code{$$+}) expand to the empty string. In the second, they will have values @code{foo.1}, @code{foo.1 bar.1}, and @code{foo.1 bar.1} respectively. In the third they will have values @code{foo.1}, @code{foo.1 bar.1 foo.2 bar.2}, and @code{foo.1 bar.1 foo.2 bar.2 foo.1 foo.1 bar.1 foo.1 bar.1} respectively. Rules undergo secondary expansion in makefile order, except that the rule with the recipe is always evaluated last. The variables @code{$$?} and @code{$$*} are not available and expand to the empty string. @subheading Secondary Expansion of Static Pattern Rules @cindex secondary expansion and static pattern rules @cindex static pattern rules, secondary expansion of Rules for secondary expansion of static pattern rules are identical to those for explicit rules, above, with one exception: for static pattern rules the @code{$$*} variable is set to the pattern stem. As with explicit rules, @code{$$?} is not available and expands to the empty string. @subheading Secondary Expansion of Implicit Rules @cindex secondary expansion and implicit rules @cindex implicit rules, secondary expansion of As @code{make} searches for an implicit rule, it substitutes the stem and then performs secondary expansion for every rule with a matching target pattern. The value of the automatic variables is derived in the same fashion as for static pattern rules. As an example: @example .SECONDEXPANSION: foo: bar foo foz: fo%: bo% %oo: $$< $$^ $$+ $$* @end example When the implicit rule is tried for target @file{foo}, @code{$$<} expands to @file{bar}, @code{$$^} expands to @file{bar boo}, @code{$$+} also expands to @file{bar boo}, and @code{$$*} expands to @file{f}. Note that the directory prefix (D), as described in @ref{Implicit Rule Search, ,Implicit Rule Search Algorithm}, is appended (after expansion) to all the patterns in the prerequisites list. As an example:@refill @example .SECONDEXPANSION: /tmp/foo.o: %.o: $$(addsuffix /%.c,foo bar) foo.h @@echo $^ @end example The prerequisite list printed, after the secondary expansion and directory prefix reconstruction, will be @file{/tmp/foo/foo.c /tmp/bar/foo.c foo.h}. If you are not interested in this reconstruction, you can use @code{$$*} instead of @code{%} in the prerequisites list. @node Rules, Recipes, Makefiles, Top @chapter Writing Rules @cindex writing rules @cindex rule, how to write @cindex target @cindex prerequisite A @dfn{rule} appears in the makefile and says when and how to remake certain files, called the rule's @dfn{targets} (most often only one per rule). It lists the other files that are the @dfn{prerequisites} of the target, and the @dfn{recipe} to use to create or update the target. @cindex default goal @cindex goal, default The order of rules is not significant, except for determining the @dfn{default goal}: the target for @code{make} to consider, if you do not otherwise specify one. The default goal is the target of the first rule in the first makefile. If the first rule has multiple targets, only the first target is taken as the default. There are two exceptions: a target starting with a period is not a default unless it contains one or more slashes, @samp{/}, as well; and, a target that defines a pattern rule has no effect on the default goal. (@xref{Pattern Rules, ,Defining and Redefining Pattern Rules}.) Therefore, we usually write the makefile so that the first rule is the one for compiling the entire program or all the programs described by the makefile (often with a target called @samp{all}). @xref{Goals, ,Arguments to Specify the Goals}. @menu * Rule Example:: An example explained. * Rule Syntax:: General syntax explained. * Prerequisite Types:: There are two types of prerequisites. * Wildcards:: Using wildcard characters such as `*'. * Directory Search:: Searching other directories for source files. * Phony Targets:: Using a target that is not a real file's name. * Force Targets:: You can use a target without a recipe or prerequisites to mark other targets as phony. * Empty Targets:: When only the date matters and the files are empty. * Special Targets:: Targets with special built-in meanings. * Multiple Targets:: When to make use of several targets in a rule. * Multiple Rules:: How to use several rules with the same target. * Static Pattern:: Static pattern rules apply to multiple targets and can vary the prerequisites according to the target name. * Double-Colon:: How to use a special kind of rule to allow several independent rules for one target. * Automatic Prerequisites:: How to automatically generate rules giving prerequisites from source files themselves. @end menu @ifnottex @node Rule Example, Rule Syntax, Rules, Rules @section Rule Example Here is an example of a rule: @example foo.o : foo.c defs.h # module for twiddling the frobs cc -c -g foo.c @end example Its target is @file{foo.o} and its prerequisites are @file{foo.c} and @file{defs.h}. It has one command in the recipe: @samp{cc -c -g foo.c}. The recipe starts with a tab to identify it as a recipe. This rule says two things: @itemize @bullet @item How to decide whether @file{foo.o} is out of date: it is out of date if it does not exist, or if either @file{foo.c} or @file{defs.h} is more recent than it. @item How to update the file @file{foo.o}: by running @code{cc} as stated. The recipe does not explicitly mention @file{defs.h}, but we presume that @file{foo.c} includes it, and that is why @file{defs.h} was added to the prerequisites. @end itemize @end ifnottex @node Rule Syntax, Prerequisite Types, Rule Example, Rules @section Rule Syntax @cindex rule syntax @cindex syntax of rules In general, a rule looks like this: @example @var{targets} : @var{prerequisites} @var{recipe} @dots{} @end example @noindent or like this: @example @var{targets} : @var{prerequisites} ; @var{recipe} @var{recipe} @dots{} @end example @cindex targets @cindex rule targets The @var{targets} are file names, separated by spaces. Wildcard characters may be used (@pxref{Wildcards, ,Using Wildcard Characters in File Names}) and a name of the form @file{@var{a}(@var{m})} represents member @var{m} in archive file @var{a} (@pxref{Archive Members, ,Archive Members as Targets}). Usually there is only one target per rule, but occasionally there is a reason to have more (@pxref{Multiple Targets, , Multiple Targets in a Rule}).@refill @cindex recipes @cindex tab character (in commands) The @var{recipe} lines start with a tab character (or the first character in the value of the @code{.RECIPEPREFIX} variable; @pxref{Special Variables}). The first recipe line may appear on the line after the prerequisites, with a tab character, or may appear on the same line, with a semicolon. Either way, the effect is the same. There are other differences in the syntax of recipes. @xref{Recipes, ,Writing Recipes in Rules}. @cindex dollar sign (@code{$}), in rules @cindex @code{$}, in rules @cindex rules, and @code{$} Because dollar signs are used to start @code{make} variable references, if you really want a dollar sign in a target or prerequisite you must write two of them, @samp{$$} (@pxref{Using Variables, ,How to Use Variables}). If you have enabled secondary expansion (@pxref{Secondary Expansion}) and you want a literal dollar sign in the prerequisites list, you must actually write @emph{four} dollar signs (@samp{$$$$}). You may split a long line by inserting a backslash followed by a newline, but this is not required, as @code{make} places no limit on the length of a line in a makefile. A rule tells @code{make} two things: when the targets are out of date, and how to update them when necessary. @cindex prerequisites @cindex rule prerequisites The criterion for being out of date is specified in terms of the @var{prerequisites}, which consist of file names separated by spaces. (Wildcards and archive members (@pxref{Archives}) are allowed here too.) A target is out of date if it does not exist or if it is older than any of the prerequisites (by comparison of last-modification times). The idea is that the contents of the target file are computed based on information in the prerequisites, so if any of the prerequisites changes, the contents of the existing target file are no longer necessarily valid. How to update is specified by a @var{recipe}. This is one or more lines to be executed by the shell (normally @samp{sh}), but with some extra features (@pxref{Recipes, ,Writing Recipes in Rules}). @node Prerequisite Types, Wildcards, Rule Syntax, Rules @comment node-name, next, previous, up @section Types of Prerequisites @cindex prerequisite types @cindex types of prerequisites @cindex prerequisites, normal @cindex normal prerequisites @cindex prerequisites, order-only @cindex order-only prerequisites There are actually two different types of prerequisites understood by GNU @code{make}: normal prerequisites such as described in the previous section, and @dfn{order-only} prerequisites. A normal prerequisite makes two statements: first, it imposes an order in which recipes will be invoked: the recipes for all prerequisites of a target will be completed before the recipe for the target is run. Second, it imposes a dependency relationship: if any prerequisite is newer than the target, then the target is considered out-of-date and must be rebuilt. Normally, this is exactly what you want: if a target's prerequisite is updated, then the target should also be updated. Occasionally, however, you have a situation where you want to impose a specific ordering on the rules to be invoked @emph{without} forcing the target to be updated if one of those rules is executed. In that case, you want to define @dfn{order-only} prerequisites. Order-only prerequisites can be specified by placing a pipe symbol (@code{|}) in the prerequisites list: any prerequisites to the left of the pipe symbol are normal; any prerequisites to the right are order-only: @example @var{targets} : @var{normal-prerequisites} | @var{order-only-prerequisites} @end example The normal prerequisites section may of course be empty. Also, you may still declare multiple lines of prerequisites for the same target: they are appended appropriately (normal prerequisites are appended to the list of normal prerequisites; order-only prerequisites are appended to the list of order-only prerequisites). Note that if you declare the same file to be both a normal and an order-only prerequisite, the normal prerequisite takes precedence (since they have a strict superset of the behavior of an order-only prerequisite). Consider an example where your targets are to be placed in a separate directory, and that directory might not exist before @code{make} is run. In this situation, you want the directory to be created before any targets are placed into it but, because the timestamps on directories change whenever a file is added, removed, or renamed, we certainly don't want to rebuild all the targets whenever the directory's timestamp changes. One way to manage this is with order-only prerequisites: make the directory an order-only prerequisite on all the targets: @example OBJDIR := objdir OBJS := $(addprefix $(OBJDIR)/,foo.o bar.o baz.o) $(OBJDIR)/%.o : %.c $(COMPILE.c) $(OUTPUT_OPTION) $< all: $(OBJS) $(OBJS): | $(OBJDIR) $(OBJDIR): mkdir $(OBJDIR) @end example Now the rule to create the @file{objdir} directory will be run, if needed, before any @samp{.o} is built, but no @samp{.o} will be built because the @file{objdir} directory timestamp changed. @node Wildcards, Directory Search, Prerequisite Types, Rules @section Using Wildcard Characters in File Names @cindex wildcard @cindex file name with wildcards @cindex globbing (wildcards) @cindex @code{*} (wildcard character) @cindex @code{?} (wildcard character) @cindex @code{[@dots{}]} (wildcard characters) A single file name can specify many files using @dfn{wildcard characters}. The wildcard characters in @code{make} are @samp{*}, @samp{?} and @samp{[@dots{}]}, the same as in the Bourne shell. For example, @file{*.c} specifies a list of all the files (in the working directory) whose names end in @samp{.c}.@refill @cindex @code{~} (tilde) @cindex tilde (@code{~}) @cindex home directory The character @samp{~} at the beginning of a file name also has special significance. If alone, or followed by a slash, it represents your home directory. For example @file{~/bin} expands to @file{/home/you/bin}. If the @samp{~} is followed by a word, the string represents the home directory of the user named by that word. For example @file{~john/bin} expands to @file{/home/john/bin}. On systems which don't have a home directory for each user (such as MS-DOS or MS-Windows), this functionality can be simulated by setting the environment variable @var{HOME}.@refill Wildcard expansion is performed by @code{make} automatically in targets and in prerequisites. In recipes, the shell is responsible for wildcard expansion. In other contexts, wildcard expansion happens only if you request it explicitly with the @code{wildcard} function. The special significance of a wildcard character can be turned off by preceding it with a backslash. Thus, @file{foo\*bar} would refer to a specific file whose name consists of @samp{foo}, an asterisk, and @samp{bar}.@refill @menu * Wildcard Examples:: Several examples. * Wildcard Pitfall:: Problems to avoid. * Wildcard Function:: How to cause wildcard expansion where it does not normally take place. @end menu @node Wildcard Examples, Wildcard Pitfall, Wildcards, Wildcards @subsection Wildcard Examples Wildcards can be used in the recipe of a rule, where they are expanded by the shell. For example, here is a rule to delete all the object files: @example @group clean: rm -f *.o @end group @end example @cindex @code{rm} (shell command) Wildcards are also useful in the prerequisites of a rule. With the following rule in the makefile, @samp{make print} will print all the @samp{.c} files that have changed since the last time you printed them: @example print: *.c lpr -p $? touch print @end example @cindex @code{print} target @cindex @code{lpr} (shell command) @cindex @code{touch} (shell command) @noindent This rule uses @file{print} as an empty target file; see @ref{Empty Targets, ,Empty Target Files to Record Events}. (The automatic variable @samp{$?} is used to print only those files that have changed; see @ref{Automatic Variables}.)@refill Wildcard expansion does not happen when you define a variable. Thus, if you write this: @example objects = *.o @end example @noindent then the value of the variable @code{objects} is the actual string @samp{*.o}. However, if you use the value of @code{objects} in a target or prerequisite, wildcard expansion will take place there. If you use the value of @code{objects} in a recipe, the shell may perform wildcard expansion when the recipe runs. To set @code{objects} to the expansion, instead use: @example objects := $(wildcard *.o) @end example @noindent @xref{Wildcard Function}. @node Wildcard Pitfall, Wildcard Function, Wildcard Examples, Wildcards @subsection Pitfalls of Using Wildcards @cindex wildcard pitfalls @cindex pitfalls of wildcards @cindex mistakes with wildcards @cindex errors with wildcards @cindex problems with wildcards Now here is an example of a naive way of using wildcard expansion, that does not do what you would intend. Suppose you would like to say that the executable file @file{foo} is made from all the object files in the directory, and you write this: @example objects = *.o foo : $(objects) cc -o foo $(CFLAGS) $(objects) @end example @noindent The value of @code{objects} is the actual string @samp{*.o}. Wildcard expansion happens in the rule for @file{foo}, so that each @emph{existing} @samp{.o} file becomes a prerequisite of @file{foo} and will be recompiled if necessary. But what if you delete all the @samp{.o} files? When a wildcard matches no files, it is left as it is, so then @file{foo} will depend on the oddly-named file @file{*.o}. Since no such file is likely to exist, @code{make} will give you an error saying it cannot figure out how to make @file{*.o}. This is not what you want! Actually it is possible to obtain the desired result with wildcard expansion, but you need more sophisticated techniques, including the @code{wildcard} function and string substitution. @ifnottex @xref{Wildcard Function, ,The Function @code{wildcard}}. @end ifnottex @iftex These are described in the following section. @end iftex @cindex wildcards and MS-DOS/MS-Windows backslashes @cindex backslashes in pathnames and wildcard expansion Microsoft operating systems (MS-DOS and MS-Windows) use backslashes to separate directories in pathnames, like so: @example c:\foo\bar\baz.c @end example This is equivalent to the Unix-style @file{c:/foo/bar/baz.c} (the @file{c:} part is the so-called drive letter). When @code{make} runs on these systems, it supports backslashes as well as the Unix-style forward slashes in pathnames. However, this support does @emph{not} include the wildcard expansion, where backslash is a quote character. Therefore, you @emph{must} use Unix-style slashes in these cases. @node Wildcard Function, , Wildcard Pitfall, Wildcards @subsection The Function @code{wildcard} @findex wildcard Wildcard expansion happens automatically in rules. But wildcard expansion does not normally take place when a variable is set, or inside the arguments of a function. If you want to do wildcard expansion in such places, you need to use the @code{wildcard} function, like this: @example $(wildcard @var{pattern}@dots{}) @end example @noindent This string, used anywhere in a makefile, is replaced by a space-separated list of names of existing files that match one of the given file name patterns. If no existing file name matches a pattern, then that pattern is omitted from the output of the @code{wildcard} function. Note that this is different from how unmatched wildcards behave in rules, where they are used verbatim rather than ignored (@pxref{Wildcard Pitfall}). One use of the @code{wildcard} function is to get a list of all the C source files in a directory, like this: @example $(wildcard *.c) @end example We can change the list of C source files into a list of object files by replacing the @samp{.c} suffix with @samp{.o} in the result, like this: @example $(patsubst %.c,%.o,$(wildcard *.c)) @end example @noindent (Here we have used another function, @code{patsubst}. @xref{Text Functions, ,Functions for String Substitution and Analysis}.)@refill Thus, a makefile to compile all C source files in the directory and then link them together could be written as follows: @example objects := $(patsubst %.c,%.o,$(wildcard *.c)) foo : $(objects) cc -o foo $(objects) @end example @noindent (This takes advantage of the implicit rule for compiling C programs, so there is no need to write explicit rules for compiling the files. @xref{Flavors, ,The Two Flavors of Variables}, for an explanation of @samp{:=}, which is a variant of @samp{=}.) @node Directory Search, Phony Targets, Wildcards, Rules @section Searching Directories for Prerequisites @vindex VPATH @findex vpath @cindex vpath @cindex search path for prerequisites (@code{VPATH}) @cindex directory search (@code{VPATH}) For large systems, it is often desirable to put sources in a separate directory from the binaries. The @dfn{directory search} features of @code{make} facilitate this by searching several directories automatically to find a prerequisite. When you redistribute the files among directories, you do not need to change the individual rules, just the search paths. @menu * General Search:: Specifying a search path that applies to every prerequisite. * Selective Search:: Specifying a search path for a specified class of names. * Search Algorithm:: When and how search paths are applied. * Recipes/Search:: How to write recipes that work together with search paths. * Implicit/Search:: How search paths affect implicit rules. * Libraries/Search:: Directory search for link libraries. @end menu @node General Search, Selective Search, Directory Search, Directory Search @subsection @code{VPATH}: Search Path for All Prerequisites @vindex VPATH The value of the @code{make} variable @code{VPATH} specifies a list of directories that @code{make} should search. Most often, the directories are expected to contain prerequisite files that are not in the current directory; however, @code{make} uses @code{VPATH} as a search list for both prerequisites and targets of rules. Thus, if a file that is listed as a target or prerequisite does not exist in the current directory, @code{make} searches the directories listed in @code{VPATH} for a file with that name. If a file is found in one of them, that file may become the prerequisite (see below). Rules may then specify the names of files in the prerequisite list as if they all existed in the current directory. @xref{Recipes/Search, ,Writing Recipes with Directory Search}. In the @code{VPATH} variable, directory names are separated by colons or blanks. The order in which directories are listed is the order followed by @code{make} in its search. (On MS-DOS and MS-Windows, semi-colons are used as separators of directory names in @code{VPATH}, since the colon can be used in the pathname itself, after the drive letter.) For example, @example VPATH = src:../headers @end example @noindent specifies a path containing two directories, @file{src} and @file{../headers}, which @code{make} searches in that order. With this value of @code{VPATH}, the following rule, @example foo.o : foo.c @end example @noindent is interpreted as if it were written like this: @example foo.o : src/foo.c @end example @noindent assuming the file @file{foo.c} does not exist in the current directory but is found in the directory @file{src}. @node Selective Search, Search Algorithm, General Search, Directory Search @subsection The @code{vpath} Directive @findex vpath Similar to the @code{VPATH} variable, but more selective, is the @code{vpath} directive (note lower case), which allows you to specify a search path for a particular class of file names: those that match a particular pattern. Thus you can supply certain search directories for one class of file names and other directories (or none) for other file names. There are three forms of the @code{vpath} directive: @table @code @item vpath @var{pattern} @var{directories} Specify the search path @var{directories} for file names that match @var{pattern}. The search path, @var{directories}, is a list of directories to be searched, separated by colons (semi-colons on MS-DOS and MS-Windows) or blanks, just like the search path used in the @code{VPATH} variable. @item vpath @var{pattern} Clear out the search path associated with @var{pattern}. @c Extra blank line makes sure this gets two lines. @item vpath Clear all search paths previously specified with @code{vpath} directives. @end table A @code{vpath} pattern is a string containing a @samp{%} character. The string must match the file name of a prerequisite that is being searched for, the @samp{%} character matching any sequence of zero or more characters (as in pattern rules; @pxref{Pattern Rules, ,Defining and Redefining Pattern Rules}). For example, @code{%.h} matches files that end in @code{.h}. (If there is no @samp{%}, the pattern must match the prerequisite exactly, which is not useful very often.) @cindex @code{%}, quoting in @code{vpath} @cindex @code{%}, quoting with @code{\} (backslash) @cindex @code{\} (backslash), to quote @code{%} @cindex backslash (@code{\}), to quote @code{%} @cindex quoting @code{%}, in @code{vpath} @samp{%} characters in a @code{vpath} directive's pattern can be quoted with preceding backslashes (@samp{\}). Backslashes that would otherwise quote @samp{%} characters can be quoted with more backslashes. Backslashes that quote @samp{%} characters or other backslashes are removed from the pattern before it is compared to file names. Backslashes that are not in danger of quoting @samp{%} characters go unmolested.@refill When a prerequisite fails to exist in the current directory, if the @var{pattern} in a @code{vpath} directive matches the name of the prerequisite file, then the @var{directories} in that directive are searched just like (and before) the directories in the @code{VPATH} variable. For example, @example vpath %.h ../headers @end example @noindent tells @code{make} to look for any prerequisite whose name ends in @file{.h} in the directory @file{../headers} if the file is not found in the current directory. If several @code{vpath} patterns match the prerequisite file's name, then @code{make} processes each matching @code{vpath} directive one by one, searching all the directories mentioned in each directive. @code{make} handles multiple @code{vpath} directives in the order in which they appear in the makefile; multiple directives with the same pattern are independent of each other. @need 750 Thus, @example @group vpath %.c foo vpath % blish vpath %.c bar @end group @end example @noindent will look for a file ending in @samp{.c} in @file{foo}, then @file{blish}, then @file{bar}, while @example @group vpath %.c foo:bar vpath % blish @end group @end example @noindent will look for a file ending in @samp{.c} in @file{foo}, then @file{bar}, then @file{blish}. @node Search Algorithm, Recipes/Search, Selective Search, Directory Search @subsection How Directory Searches are Performed @cindex algorithm for directory search @cindex directory search algorithm When a prerequisite is found through directory search, regardless of type (general or selective), the pathname located may not be the one that @code{make} actually provides you in the prerequisite list. Sometimes the path discovered through directory search is thrown away. The algorithm @code{make} uses to decide whether to keep or abandon a path found via directory search is as follows: @enumerate @item If a target file does not exist at the path specified in the makefile, directory search is performed. @item If the directory search is successful, that path is kept and this file is tentatively stored as the target. @item All prerequisites of this target are examined using this same method. @item After processing the prerequisites, the target may or may not need to be rebuilt: @enumerate a @item If the target does @emph{not} need to be rebuilt, the path to the file found during directory search is used for any prerequisite lists which contain this target. In short, if @code{make} doesn't need to rebuild the target then you use the path found via directory search. @item If the target @emph{does} need to be rebuilt (is out-of-date), the pathname found during directory search is @emph{thrown away}, and the target is rebuilt using the file name specified in the makefile. In short, if @code{make} must rebuild, then the target is rebuilt locally, not in the directory found via directory search. @end enumerate @end enumerate This algorithm may seem complex, but in practice it is quite often exactly what you want. @cindex traditional directory search (GPATH) @cindex directory search, traditional (GPATH) Other versions of @code{make} use a simpler algorithm: if the file does not exist, and it is found via directory search, then that pathname is always used whether or not the target needs to be built. Thus, if the target is rebuilt it is created at the pathname discovered during directory search. @vindex GPATH If, in fact, this is the behavior you want for some or all of your directories, you can use the @code{GPATH} variable to indicate this to @code{make}. @code{GPATH} has the same syntax and format as @code{VPATH} (that is, a space- or colon-delimited list of pathnames). If an out-of-date target is found by directory search in a directory that also appears in @code{GPATH}, then that pathname is not thrown away. The target is rebuilt using the expanded path. @node Recipes/Search, Implicit/Search, Search Algorithm, Directory Search @subsection Writing Recipes with Directory Search @cindex recipes, and directory search @cindex directory search (@code{VPATH}), and recipes When a prerequisite is found in another directory through directory search, this cannot change the recipe of the rule; they will execute as written. Therefore, you must write the recipe with care so that it will look for the prerequisite in the directory where @code{make} finds it. This is done with the @dfn{automatic variables} such as @samp{$^} (@pxref{Automatic Variables}). For instance, the value of @samp{$^} is a list of all the prerequisites of the rule, including the names of the directories in which they were found, and the value of @samp{$@@} is the target. Thus:@refill @example foo.o : foo.c cc -c $(CFLAGS) $^ -o $@@ @end example @noindent (The variable @code{CFLAGS} exists so you can specify flags for C compilation by implicit rules; we use it here for consistency so it will affect all C compilations uniformly; @pxref{Implicit Variables, ,Variables Used by Implicit Rules}.) Often the prerequisites include header files as well, which you do not want to mention in the recipe. The automatic variable @samp{$<} is just the first prerequisite: @example VPATH = src:../headers foo.o : foo.c defs.h hack.h cc -c $(CFLAGS) $< -o $@@ @end example @node Implicit/Search, Libraries/Search, Recipes/Search, Directory Search @subsection Directory Search and Implicit Rules @cindex @code{VPATH}, and implicit rules @cindex directory search (@code{VPATH}), and implicit rules @cindex search path for prerequisites (@code{VPATH}), and implicit rules @cindex implicit rule, and directory search @cindex implicit rule, and @code{VPATH} @cindex rule, implicit, and directory search @cindex rule, implicit, and @code{VPATH} The search through the directories specified in @code{VPATH} or with @code{vpath} also happens during consideration of implicit rules (@pxref{Implicit Rules, ,Using Implicit Rules}). For example, when a file @file{foo.o} has no explicit rule, @code{make} considers implicit rules, such as the built-in rule to compile @file{foo.c} if that file exists. If such a file is lacking in the current directory, the appropriate directories are searched for it. If @file{foo.c} exists (or is mentioned in the makefile) in any of the directories, the implicit rule for C compilation is applied. The recipes of implicit rules normally use automatic variables as a matter of necessity; consequently they will use the file names found by directory search with no extra effort. @node Libraries/Search, , Implicit/Search, Directory Search @subsection Directory Search for Link Libraries @cindex link libraries, and directory search @cindex libraries for linking, directory search @cindex directory search (@code{VPATH}), and link libraries @cindex @code{VPATH}, and link libraries @cindex search path for prerequisites (@code{VPATH}), and link libraries @cindex @code{-l} (library search) @cindex link libraries, patterns matching @cindex @code{.LIBPATTERNS}, and link libraries @vindex .LIBPATTERNS Directory search applies in a special way to libraries used with the linker. This special feature comes into play when you write a prerequisite whose name is of the form @samp{-l@var{name}}. (You can tell something strange is going on here because the prerequisite is normally the name of a file, and the @emph{file name} of a library generally looks like @file{lib@var{name}.a}, not like @samp{-l@var{name}}.)@refill When a prerequisite's name has the form @samp{-l@var{name}}, @code{make} handles it specially by searching for the file @file{lib@var{name}.so}, and, if it is not found, for the file @file{lib@var{name}.a} in the current directory, in directories specified by matching @code{vpath} search paths and the @code{VPATH} search path, and then in the directories @file{/lib}, @file{/usr/lib}, and @file{@var{prefix}/lib} (normally @file{/usr/local/lib}, but MS-DOS/MS-Windows versions of @code{make} behave as if @var{prefix} is defined to be the root of the DJGPP installation tree). For example, if there is a @file{/usr/lib/libcurses.a} library on your system (and no @file{/usr/lib/libcurses.so} file), then @example @group foo : foo.c -lcurses cc $^ -o $@@ @end group @end example @noindent would cause the command @samp{cc foo.c /usr/lib/libcurses.a -o foo} to be executed when @file{foo} is older than @file{foo.c} or than @file{/usr/lib/libcurses.a}.@refill Although the default set of files to be searched for is @file{lib@var{name}.so} and @file{lib@var{name}.a}, this is customizable via the @code{.LIBPATTERNS} variable. Each word in the value of this variable is a pattern string. When a prerequisite like @samp{-l@var{name}} is seen, @code{make} will replace the percent in each pattern in the list with @var{name} and perform the above directory searches using each library file name. The default value for @code{.LIBPATTERNS} is @samp{lib%.so lib%.a}, which provides the default behavior described above. You can turn off link library expansion completely by setting this variable to an empty value. @node Phony Targets, Force Targets, Directory Search, Rules @section Phony Targets @cindex phony targets @cindex targets, phony @cindex targets without a file A phony target is one that is not really the name of a file; rather it is just a name for a recipe to be executed when you make an explicit request. There are two reasons to use a phony target: to avoid a conflict with a file of the same name, and to improve performance. If you write a rule whose recipe will not create the target file, the recipe will be executed every time the target comes up for remaking. Here is an example: @example @group clean: rm *.o temp @end group @end example @noindent Because the @code{rm} command does not create a file named @file{clean}, probably no such file will ever exist. Therefore, the @code{rm} command will be executed every time you say @samp{make clean}. @cindex @code{rm} (shell command) @findex .PHONY In this example, the @file{clean} target will not work properly if a file named @file{clean} is ever created in this directory. Since it has no prerequisites, @file{clean} would always be considered up to date and its recipe would not be executed. To avoid this problem you can explicitly declare the target to be phony by making it a prerequisite of the special target @code{.PHONY} (@pxref{Special Targets, ,Special Built-in Target Names}) as follows: @example @group .PHONY: clean clean: rm *.o temp @end group @end example @noindent Once this is done, @samp{make clean} will run the recipe regardless of whether there is a file named @file{clean}. Phony targets are also useful in conjunction with recursive invocations of @code{make} (@pxref{Recursion, ,Recursive Use of @code{make}}). In this situation the makefile will often contain a variable which lists a number of sub-directories to be built. A simplistic way to handle this is to define one rule with a recipe that loops over the sub-directories, like this: @example @group SUBDIRS = foo bar baz subdirs: for dir in $(SUBDIRS); do \ $(MAKE) -C $$dir; \ done @end group @end example There are problems with this method, however. First, any error detected in a sub-make is ignored by this rule, so it will continue to build the rest of the directories even when one fails. This can be overcome by adding shell commands to note the error and exit, but then it will do so even if @code{make} is invoked with the @code{-k} option, which is unfortunate. Second, and perhaps more importantly, you cannot take advantage of @code{make}'s ability to build targets in parallel (@pxref{Parallel, ,Parallel Execution}), since there is only one rule. By declaring the sub-directories as @code{.PHONY} targets (you must do this as the sub-directory obviously always exists; otherwise it won't be built) you can remove these problems: @example @group SUBDIRS = foo bar baz .PHONY: subdirs $(SUBDIRS) subdirs: $(SUBDIRS) $(SUBDIRS): $(MAKE) -C $@@ foo: baz @end group @end example Here we've also declared that the @file{foo} sub-directory cannot be built until after the @file{baz} sub-directory is complete; this kind of relationship declaration is particularly important when attempting parallel builds. The implicit rule search (@pxref{Implicit Rules}) is skipped for @code{.PHONY} targets. This is why declaring a target as @code{.PHONY} is good for performance, even if you are not worried about the actual file existing. A phony target should not be a prerequisite of a real target file; if it is, its recipe will be run every time @code{make} goes to update that file. As long as a phony target is never a prerequisite of a real target, the phony target recipe will be executed only when the phony target is a specified goal (@pxref{Goals, ,Arguments to Specify the Goals}). Phony targets can have prerequisites. When one directory contains multiple programs, it is most convenient to describe all of the programs in one makefile @file{./Makefile}. Since the target remade by default will be the first one in the makefile, it is common to make this a phony target named @samp{all} and give it, as prerequisites, all the individual programs. For example: @example all : prog1 prog2 prog3 .PHONY : all prog1 : prog1.o utils.o cc -o prog1 prog1.o utils.o prog2 : prog2.o cc -o prog2 prog2.o prog3 : prog3.o sort.o utils.o cc -o prog3 prog3.o sort.o utils.o @end example @noindent Now you can say just @samp{make} to remake all three programs, or specify as arguments the ones to remake (as in @samp{make prog1 prog3}). Phoniness is not inherited: the prerequisites of a phony target are not themselves phony, unless explicitly declared to be so. When one phony target is a prerequisite of another, it serves as a subroutine of the other. For example, here @samp{make cleanall} will delete the object files, the difference files, and the file @file{program}: @example .PHONY: cleanall cleanobj cleandiff cleanall : cleanobj cleandiff rm program cleanobj : rm *.o cleandiff : rm *.diff @end example @node Force Targets, Empty Targets, Phony Targets, Rules @section Rules without Recipes or Prerequisites @cindex force targets @cindex targets, force @cindex @code{FORCE} @cindex rule, no recipe or prerequisites If a rule has no prerequisites or recipe, and the target of the rule is a nonexistent file, then @code{make} imagines this target to have been updated whenever its rule is run. This implies that all targets depending on this one will always have their recipe run. An example will illustrate this: @example @group clean: FORCE rm $(objects) FORCE: @end group @end example Here the target @samp{FORCE} satisfies the special conditions, so the target @file{clean} that depends on it is forced to run its recipe. There is nothing special about the name @samp{FORCE}, but that is one name commonly used this way. As you can see, using @samp{FORCE} this way has the same results as using @samp{.PHONY: clean}. Using @samp{.PHONY} is more explicit and more efficient. However, other versions of @code{make} do not support @samp{.PHONY}; thus @samp{FORCE} appears in many makefiles. @xref{Phony Targets}. @node Empty Targets, Special Targets, Force Targets, Rules @section Empty Target Files to Record Events @cindex empty targets @cindex targets, empty @cindex recording events with empty targets The @dfn{empty target} is a variant of the phony target; it is used to hold recipes for an action that you request explicitly from time to time. Unlike a phony target, this target file can really exist; but the file's contents do not matter, and usually are empty. The purpose of the empty target file is to record, with its last-modification time, when the rule's recipe was last executed. It does so because one of the commands in the recipe is a @code{touch} command to update the target file. The empty target file should have some prerequisites (otherwise it doesn't make sense). When you ask to remake the empty target, the recipe is executed if any prerequisite is more recent than the target; in other words, if a prerequisite has changed since the last time you remade the target. Here is an example: @example print: foo.c bar.c lpr -p $? touch print @end example @cindex @code{print} target @cindex @code{lpr} (shell command) @cindex @code{touch} (shell command) @noindent With this rule, @samp{make print} will execute the @code{lpr} command if either source file has changed since the last @samp{make print}. The automatic variable @samp{$?} is used to print only those files that have changed (@pxref{Automatic Variables}). @node Special Targets, Multiple Targets, Empty Targets, Rules @section Special Built-in Target Names @cindex special targets @cindex built-in special targets @cindex targets, built-in special Certain names have special meanings if they appear as targets. @table @code @findex .PHONY @item .PHONY The prerequisites of the special target @code{.PHONY} are considered to be phony targets. When it is time to consider such a target, @code{make} will run its recipe unconditionally, regardless of whether a file with that name exists or what its last-modification time is. @xref{Phony Targets, ,Phony Targets}. @findex .SUFFIXES @item .SUFFIXES The prerequisites of the special target @code{.SUFFIXES} are the list of suffixes to be used in checking for suffix rules. @xref{Suffix Rules, , Old-Fashioned Suffix Rules}. @findex .DEFAULT @item .DEFAULT The recipe specified for @code{.DEFAULT} is used for any target for which no rules are found (either explicit rules or implicit rules). @xref{Last Resort}. If a @code{.DEFAULT} recipe is specified, every file mentioned as a prerequisite, but not as a target in a rule, will have that recipe executed on its behalf. @xref{Implicit Rule Search, ,Implicit Rule Search Algorithm}. @findex .PRECIOUS @item .PRECIOUS @cindex precious targets @cindex preserving with @code{.PRECIOUS} The targets which @code{.PRECIOUS} depends on are given the following special treatment: if @code{make} is killed or interrupted during the execution of their recipes, the target is not deleted. @xref{Interrupts, ,Interrupting or Killing @code{make}}. Also, if the target is an intermediate file, it will not be deleted after it is no longer needed, as is normally done. @xref{Chained Rules, ,Chains of Implicit Rules}. In this latter respect it overlaps with the @code{.SECONDARY} special target. You can also list the target pattern of an implicit rule (such as @samp{%.o}) as a prerequisite file of the special target @code{.PRECIOUS} to preserve intermediate files created by rules whose target patterns match that file's name. @findex .INTERMEDIATE @item .INTERMEDIATE @cindex intermediate targets, explicit The targets which @code{.INTERMEDIATE} depends on are treated as intermediate files. @xref{Chained Rules, ,Chains of Implicit Rules}. @code{.INTERMEDIATE} with no prerequisites has no effect. @findex .SECONDARY @item .SECONDARY @cindex secondary targets @cindex preserving with @code{.SECONDARY} The targets which @code{.SECONDARY} depends on are treated as intermediate files, except that they are never automatically deleted. @xref{Chained Rules, ,Chains of Implicit Rules}. @code{.SECONDARY} with no prerequisites causes all targets to be treated as secondary (i.e., no target is removed because it is considered intermediate). @findex .SECONDEXPANSION @item .SECONDEXPANSION If @code{.SECONDEXPANSION} is mentioned as a target anywhere in the makefile, then all prerequisite lists defined @emph{after} it appears will be expanded a second time after all makefiles have been read in. @xref{Secondary Expansion, ,Secondary Expansion}. @findex .DELETE_ON_ERROR @item .DELETE_ON_ERROR @cindex removing targets on failure If @code{.DELETE_ON_ERROR} is mentioned as a target anywhere in the makefile, then @code{make} will delete the target of a rule if it has changed and its recipe exits with a nonzero exit status, just as it does when it receives a signal. @xref{Errors, ,Errors in Recipes}. @findex .IGNORE @item .IGNORE If you specify prerequisites for @code{.IGNORE}, then @code{make} will ignore errors in execution of the recipe for those particular files. The recipe for @code{.IGNORE} (if any) is ignored. If mentioned as a target with no prerequisites, @code{.IGNORE} says to ignore errors in execution of recipes for all files. This usage of @samp{.IGNORE} is supported only for historical compatibility. Since this affects every recipe in the makefile, it is not very useful; we recommend you use the more selective ways to ignore errors in specific recipes. @xref{Errors, ,Errors in Recipes}. @findex .LOW_RESOLUTION_TIME @item .LOW_RESOLUTION_TIME If you specify prerequisites for @code{.LOW_RESOLUTION_TIME}, @command{make} assumes that these files are created by commands that generate low resolution time stamps. The recipe for the @code{.LOW_RESOLUTION_TIME} target are ignored. The high resolution file time stamps of many modern file systems lessen the chance of @command{make} incorrectly concluding that a file is up to date. Unfortunately, some hosts do not provide a way to set a high resolution file time stamp, so commands like @samp{cp -p} that explicitly set a file's time stamp must discard its sub-second part. If a file is created by such a command, you should list it as a prerequisite of @code{.LOW_RESOLUTION_TIME} so that @command{make} does not mistakenly conclude that the file is out of date. For example: @example @group .LOW_RESOLUTION_TIME: dst dst: src cp -p src dst @end group @end example Since @samp{cp -p} discards the sub-second part of @file{src}'s time stamp, @file{dst} is typically slightly older than @file{src} even when it is up to date. The @code{.LOW_RESOLUTION_TIME} line causes @command{make} to consider @file{dst} to be up to date if its time stamp is at the start of the same second that @file{src}'s time stamp is in. Due to a limitation of the archive format, archive member time stamps are always low resolution. You need not list archive members as prerequisites of @code{.LOW_RESOLUTION_TIME}, as @command{make} does this automatically. @findex .SILENT @item .SILENT If you specify prerequisites for @code{.SILENT}, then @code{make} will not print the recipe used to remake those particular files before executing them. The recipe for @code{.SILENT} is ignored. If mentioned as a target with no prerequisites, @code{.SILENT} says not to print any recipes before executing them. You may also use more selective ways to silence specific recipe command lines. @xref{Echoing, ,Recipe Echoing}. If you want to silence all recipes for a particular run of @code{make}, use the @samp{-s} or @w{@samp{--silent}} option (@pxref{Options Summary}). @findex .EXPORT_ALL_VARIABLES @item .EXPORT_ALL_VARIABLES Simply by being mentioned as a target, this tells @code{make} to export all variables to child processes by default. @xref{Variables/Recursion, ,Communicating Variables to a Sub-@code{make}}. @findex .NOTPARALLEL @item .NOTPARALLEL @cindex parallel execution, overriding If @code{.NOTPARALLEL} is mentioned as a target, then this invocation of @code{make} will be run serially, even if the @samp{-j} option is given. Any recursively invoked @code{make} command will still run recipes in parallel (unless its makefile also contains this target). Any prerequisites on this target are ignored. @findex .ONESHELL @item .ONESHELL @cindex recipe execution, single invocation If @code{.ONESHELL} is mentioned as a target, then when a target is built all lines of the recipe will be given to a single invocation of the shell rather than each line being invoked separately (@pxref{Execution, ,Recipe Execution}). @findex .POSIX @item .POSIX @cindex POSIX-conforming mode, setting If @code{.POSIX} is mentioned as a target, then the makefile will be parsed and run in POSIX-conforming mode. This does @emph{not} mean that only POSIX-conforming makefiles will be accepted: all advanced GNU @code{make} features are still available. Rather, this target causes @code{make} to behave as required by POSIX in those areas where @code{make}'s default behavior differs. In particular, if this target is mentioned then recipes will be invoked as if the shell had been passed the @code{-e} flag: the first failing command in a recipe will cause the recipe to fail immediately. @end table Any defined implicit rule suffix also counts as a special target if it appears as a target, and so does the concatenation of two suffixes, such as @samp{.c.o}. These targets are suffix rules, an obsolete way of defining implicit rules (but a way still widely used). In principle, any target name could be special in this way if you break it in two and add both pieces to the suffix list. In practice, suffixes normally begin with @samp{.}, so these special target names also begin with @samp{.}. @xref{Suffix Rules, ,Old-Fashioned Suffix Rules}. @node Multiple Targets, Multiple Rules, Special Targets, Rules @section Multiple Targets in a Rule @cindex multiple targets @cindex several targets in a rule @cindex targets, multiple @cindex rule, with multiple targets When an explicit rule has multiple targets they can be treated in one of two possible ways: as independent targets or as grouped targets. The manner in which they are treated is determined by the separator that appears after the list of targets. @subsubheading Rules with Independent Targets @cindex independent targets @cindex targets, independent Rules that use the standard target separator, @code{:}, define independent targets. This is equivalent to writing the same rule once for each target, with duplicated prerequisites and recipes. Typically, the recipe would use automatic variables such as @samp{$@@} to specify which target is being built. Rules with independent targets are useful in two cases: @itemize @bullet @item You want just prerequisites, no recipe. For example: @example kbd.o command.o files.o: command.h @end example @noindent gives an additional prerequisite to each of the three object files mentioned. It is equivalent to writing: @example kbd.o: command.h command.o: command.h files.o: command.h @end example @item Similar recipes work for all the targets. The automatic variable @samp{$@@} can be used to substitute the particular target to be remade into the commands (@pxref{Automatic Variables}). For example: @example @group bigoutput littleoutput : text.g generate text.g -$(subst output,,$@@) > $@@ @end group @end example @findex subst @noindent is equivalent to @example bigoutput : text.g generate text.g -big > bigoutput littleoutput : text.g generate text.g -little > littleoutput @end example @noindent Here we assume the hypothetical program @code{generate} makes two types of output, one if given @samp{-big} and one if given @samp{-little}. @xref{Text Functions, ,Functions for String Substitution and Analysis}, for an explanation of the @code{subst} function. @end itemize Suppose you would like to vary the prerequisites according to the target, much as the variable @samp{$@@} allows you to vary the recipe. You cannot do this with multiple targets in an ordinary rule, but you can do it with a @dfn{static pattern rule}. @xref{Static Pattern, ,Static Pattern Rules}. @subsubheading Rules with Grouped Targets @cindex grouped targets @cindex targets, grouped If instead of independent targets you have a recipe that generates multiple files from a single invocation, you can express that relationship by declaring your rule to use @emph{grouped targets}. A grouped target rule uses the separator @code{&:} (the @samp{&} here is used to imply ``all''). When @code{make} builds any one of the grouped targets, it understands that all the other targets in the group are also created as a result of the invocation of the recipe. Furthermore, if only some of the grouped targets are out of date or missing @code{make} will realize that running the recipe will update all of the targets. As an example, this rule defines a grouped target: @example @group foo bar biz &: baz boz echo $^ > foo echo $^ > bar echo $^ > biz @end group @end example During the execution of a grouped target's recipe, the automatic variable @samp{$@@} is set to the name of the particular target in the group which triggered the rule. Caution must be used if relying on this variable in the recipe of a grouped target rule. Unlike independent targets, a grouped target rule @emph{must} include a recipe. However, targets that are members of a grouped target may also appear in independent target rule definitions that do not have recipes. Each target may have only one recipe associated with it. If a grouped target appears in either an independent target rule or in another grouped target rule with a recipe, you will get a warning and the latter recipe will replace the former recipe. Additionally the target will be removed from the previous group and appear only in the new group. If you would like a target to appear in multiple groups, then you must use the double-colon grouped target separator, @code{&::} when declaring all of the groups containing that target. Grouped double-colon targets are each considered independently, and each grouped double-colon rule's recipe is executed at most once, if at least one of its multiple targets requires updating. @node Multiple Rules, Static Pattern, Multiple Targets, Rules @section Multiple Rules for One Target @cindex multiple rules for one target @cindex several rules for one target @cindex rule, multiple for one target @cindex target, multiple rules for one One file can be the target of several rules. All the prerequisites mentioned in all the rules are merged into one list of prerequisites for the target. If the target is older than any prerequisite from any rule, the recipe is executed. There can only be one recipe to be executed for a file. If more than one rule gives a recipe for the same file, @code{make} uses the last one given and prints an error message. (As a special case, if the file's name begins with a dot, no error message is printed. This odd behavior is only for compatibility with other implementations of @code{make}@dots{} you should avoid using it). Occasionally it is useful to have the same target invoke multiple recipes which are defined in different parts of your makefile; you can use @dfn{double-colon rules} (@pxref{Double-Colon}) for this. An extra rule with just prerequisites can be used to give a few extra prerequisites to many files at once. For example, makefiles often have a variable, such as @code{objects}, containing a list of all the compiler output files in the system being made. An easy way to say that all of them must be recompiled if @file{config.h} changes is to write the following: @example objects = foo.o bar.o foo.o : defs.h bar.o : defs.h test.h $(objects) : config.h @end example This could be inserted or taken out without changing the rules that really specify how to make the object files, making it a convenient form to use if you wish to add the additional prerequisite intermittently. Another wrinkle is that the additional prerequisites could be specified with a variable that you set with a command line argument to @code{make} (@pxref{Overriding, ,Overriding Variables}). For example, @example @group extradeps= $(objects) : $(extradeps) @end group @end example @noindent means that the command @samp{make extradeps=foo.h} will consider @file{foo.h} as a prerequisite of each object file, but plain @samp{make} will not. If none of the explicit rules for a target has a recipe, then @code{make} searches for an applicable implicit rule to find one @pxref{Implicit Rules, ,Using Implicit Rules}). @node Static Pattern, Double-Colon, Multiple Rules, Rules @section Static Pattern Rules @cindex static pattern rule @cindex rule, static pattern @cindex pattern rules, static (not implicit) @cindex varying prerequisites @cindex prerequisites, varying (static pattern) @dfn{Static pattern rules} are rules which specify multiple targets and construct the prerequisite names for each target based on the target name. They are more general than ordinary rules with multiple targets because the targets do not have to have identical prerequisites. Their prerequisites must be @emph{analogous}, but not necessarily @emph{identical}. @menu * Static Usage:: The syntax of static pattern rules. * Static versus Implicit:: When are they better than implicit rules? @end menu @node Static Usage, Static versus Implicit, Static Pattern, Static Pattern @subsection Syntax of Static Pattern Rules @cindex static pattern rule, syntax of @cindex pattern rules, static, syntax of Here is the syntax of a static pattern rule: @example @var{targets} @dots{}: @var{target-pattern}: @var{prereq-patterns} @dots{} @var{recipe} @dots{} @end example @noindent The @var{targets} list specifies the targets that the rule applies to. The targets can contain wildcard characters, just like the targets of ordinary rules (@pxref{Wildcards, ,Using Wildcard Characters in File Names}). @cindex target pattern, static (not implicit) @cindex stem The @var{target-pattern} and @var{prereq-patterns} say how to compute the prerequisites of each target. Each target is matched against the @var{target-pattern} to extract a part of the target name, called the @dfn{stem}. This stem is substituted into each of the @var{prereq-patterns} to make the prerequisite names (one from each @var{prereq-pattern}). Each pattern normally contains the character @samp{%} just once. When the @var{target-pattern} matches a target, the @samp{%} can match any part of the target name; this part is called the @dfn{stem}. The rest of the pattern must match exactly. For example, the target @file{foo.o} matches the pattern @samp{%.o}, with @samp{foo} as the stem. The targets @file{foo.c} and @file{foo.out} do not match that pattern.@refill @cindex prerequisite pattern, static (not implicit) The prerequisite names for each target are made by substituting the stem for the @samp{%} in each prerequisite pattern. For example, if one prerequisite pattern is @file{%.c}, then substitution of the stem @samp{foo} gives the prerequisite name @file{foo.c}. It is legitimate to write a prerequisite pattern that does not contain @samp{%}; then this prerequisite is the same for all targets. @cindex @code{%}, quoting in static pattern @cindex @code{%}, quoting with @code{\} (backslash) @cindex @code{\} (backslash), to quote @code{%} @cindex backslash (@code{\}), to quote @code{%} @cindex quoting @code{%}, in static pattern @samp{%} characters in pattern rules can be quoted with preceding backslashes (@samp{\}). Backslashes that would otherwise quote @samp{%} characters can be quoted with more backslashes. Backslashes that quote @samp{%} characters or other backslashes are removed from the pattern before it is compared to file names or has a stem substituted into it. Backslashes that are not in danger of quoting @samp{%} characters go unmolested. For example, the pattern @file{the\%weird\\%pattern\\} has @samp{the%weird\} preceding the operative @samp{%} character, and @samp{pattern\\} following it. The final two backslashes are left alone because they cannot affect any @samp{%} character.@refill Here is an example, which compiles each of @file{foo.o} and @file{bar.o} from the corresponding @file{.c} file: @example @group objects = foo.o bar.o all: $(objects) $(objects): %.o: %.c $(CC) -c $(CFLAGS) $< -o $@@ @end group @end example @noindent Here @samp{$<} is the automatic variable that holds the name of the prerequisite and @samp{$@@} is the automatic variable that holds the name of the target; see @ref{Automatic Variables}. Each target specified must match the target pattern; a warning is issued for each target that does not. If you have a list of files, only some of which will match the pattern, you can use the @code{filter} function to remove non-matching file names (@pxref{Text Functions, ,Functions for String Substitution and Analysis}): @example files = foo.elc bar.o lose.o $(filter %.o,$(files)): %.o: %.c $(CC) -c $(CFLAGS) $< -o $@@ $(filter %.elc,$(files)): %.elc: %.el emacs -f batch-byte-compile $< @end example @noindent In this example the result of @samp{$(filter %.o,$(files))} is @file{bar.o lose.o}, and the first static pattern rule causes each of these object files to be updated by compiling the corresponding C source file. The result of @w{@samp{$(filter %.elc,$(files))}} is @file{foo.elc}, so that file is made from @file{foo.el}.@refill Another example shows how to use @code{$*} in static pattern rules: @vindex $*@r{, and static pattern} @example @group bigoutput littleoutput : %output : text.g generate text.g -$* > $@@ @end group @end example @noindent When the @code{generate} command is run, @code{$*} will expand to the stem, either @samp{big} or @samp{little}. @node Static versus Implicit, , Static Usage, Static Pattern @subsection Static Pattern Rules versus Implicit Rules @cindex rule, static pattern versus implicit @cindex static pattern rule, versus implicit A static pattern rule has much in common with an implicit rule defined as a pattern rule (@pxref{Pattern Rules, ,Defining and Redefining Pattern Rules}). Both have a pattern for the target and patterns for constructing the names of prerequisites. The difference is in how @code{make} decides @emph{when} the rule applies. An implicit rule @emph{can} apply to any target that matches its pattern, but it @emph{does} apply only when the target has no recipe otherwise specified, and only when the prerequisites can be found. If more than one implicit rule appears applicable, only one applies; the choice depends on the order of rules. By contrast, a static pattern rule applies to the precise list of targets that you specify in the rule. It cannot apply to any other target and it invariably does apply to each of the targets specified. If two conflicting rules apply, and both have recipes, that's an error. The static pattern rule can be better than an implicit rule for these reasons: @itemize @bullet @item You may wish to override the usual implicit rule for a few files whose names cannot be categorized syntactically but can be given in an explicit list. @item If you cannot be sure of the precise contents of the directories you are using, you may not be sure which other irrelevant files might lead @code{make} to use the wrong implicit rule. The choice might depend on the order in which the implicit rule search is done. With static pattern rules, there is no uncertainty: each rule applies to precisely the targets specified. @end itemize @node Double-Colon, Automatic Prerequisites, Static Pattern, Rules @section Double-Colon Rules @cindex double-colon rules @cindex rule, double-colon (@code{::}) @cindex multiple rules for one target (@code{::}) @cindex @code{::} rules (double-colon) @dfn{Double-colon} rules are explicit rules written with @samp{::} instead of @samp{:} after the target names. They are handled differently from ordinary rules when the same target appears in more than one rule. Pattern rules with double-colons have an entirely different meaning (@pxref{Match-Anything Rules}). When a target appears in multiple rules, all the rules must be the same type: all ordinary, or all double-colon. If they are double-colon, each of them is independent of the others. Each double-colon rule's recipe is executed if the target is older than any prerequisites of that rule. If there are no prerequisites for that rule, its recipe is always executed (even if the target already exists). This can result in executing none, any, or all of the double-colon rules. Double-colon rules with the same target are in fact completely separate from one another. Each double-colon rule is processed individually, just as rules with different targets are processed. The double-colon rules for a target are executed in the order they appear in the makefile. However, the cases where double-colon rules really make sense are those where the order of executing the recipes would not matter. Double-colon rules are somewhat obscure and not often very useful; they provide a mechanism for cases in which the method used to update a target differs depending on which prerequisite files caused the update, and such cases are rare. Each double-colon rule should specify a recipe; if it does not, an implicit rule will be used if one applies. @xref{Implicit Rules, ,Using Implicit Rules}. @node Automatic Prerequisites, , Double-Colon, Rules @section Generating Prerequisites Automatically @cindex prerequisites, automatic generation @cindex automatic generation of prerequisites @cindex generating prerequisites automatically In the makefile for a program, many of the rules you need to write often say only that some object file depends on some header file. For example, if @file{main.c} uses @file{defs.h} via an @code{#include}, you would write: @example main.o: defs.h @end example @noindent You need this rule so that @code{make} knows that it must remake @file{main.o} whenever @file{defs.h} changes. You can see that for a large program you would have to write dozens of such rules in your makefile. And, you must always be very careful to update the makefile every time you add or remove an @code{#include}. @cindex @code{#include} @cindex @code{-M} (to compiler) To avoid this hassle, most modern C compilers can write these rules for you, by looking at the @code{#include} lines in the source files. Usually this is done with the @samp{-M} option to the compiler. For example, the command: @example cc -M main.c @end example @noindent generates the output: @example main.o : main.c defs.h @end example @noindent Thus you no longer have to write all those rules yourself. The compiler will do it for you. Note that such a rule constitutes mentioning @file{main.o} in a makefile, so it can never be considered an intermediate file by implicit rule search. This means that @code{make} won't ever remove the file after using it; @pxref{Chained Rules, ,Chains of Implicit Rules}. @cindex @code{make depend} With old @code{make} programs, it was traditional practice to use this compiler feature to generate prerequisites on demand with a command like @samp{make depend}. That command would create a file @file{depend} containing all the automatically-generated prerequisites; then the makefile could use @code{include} to read them in (@pxref{Include}). In GNU @code{make}, the feature of remaking makefiles makes this practice obsolete---you need never tell @code{make} explicitly to regenerate the prerequisites, because it always regenerates any makefile that is out of date. @xref{Remaking Makefiles}. The practice we recommend for automatic prerequisite generation is to have one makefile corresponding to each source file. For each source file @file{@var{name}.c} there is a makefile @file{@var{name}.d} which lists what files the object file @file{@var{name}.o} depends on. That way only the source files that have changed need to be rescanned to produce the new prerequisites. Here is the pattern rule to generate a file of prerequisites (i.e., a makefile) called @file{@var{name}.d} from a C source file called @file{@var{name}.c}: @smallexample @group %.d: %.c @@set -e; rm -f $@@; \ $(CC) -M $(CPPFLAGS) $< > $@@.$$$$; \ sed 's,\($*\)\.o[ :]*,\1.o $@@ : ,g' < $@@.$$$$ > $@@; \ rm -f $@@.$$$$ @end group @end smallexample @noindent @xref{Pattern Rules}, for information on defining pattern rules. The @samp{-e} flag to the shell causes it to exit immediately if the @code{$(CC)} command (or any other command) fails (exits with a nonzero status). @cindex @code{-e} (shell flag) @cindex @code{-MM} (to GNU compiler) With the GNU C compiler, you may wish to use the @samp{-MM} flag instead of @samp{-M}. This omits prerequisites on system header files. @xref{Preprocessor Options, , Options Controlling the Preprocessor, gcc, Using GNU CC}, for details. @cindex @code{sed} (shell command) The purpose of the @code{sed} command is to translate (for example): @example main.o : main.c defs.h @end example @noindent into: @example main.o main.d : main.c defs.h @end example @noindent @cindex @code{.d} This makes each @samp{.d} file depend on all the source and header files that the corresponding @samp{.o} file depends on. @code{make} then knows it must regenerate the prerequisites whenever any of the source or header files changes. Once you've defined the rule to remake the @samp{.d} files, you then use the @code{include} directive to read them all in. @xref{Include}. For example: @example @group sources = foo.c bar.c include $(sources:.c=.d) @end group @end example @noindent (This example uses a substitution variable reference to translate the list of source files @samp{foo.c bar.c} into a list of prerequisite makefiles, @samp{foo.d bar.d}. @xref{Substitution Refs}, for full information on substitution references.) Since the @samp{.d} files are makefiles like any others, @code{make} will remake them as necessary with no further work from you. @xref{Remaking Makefiles}. Note that the @samp{.d} files contain target definitions; you should be sure to place the @code{include} directive @emph{after} the first, default goal in your makefiles or run the risk of having a random object file become the default goal. @xref{How Make Works}. @node Recipes, Using Variables, Rules, Top @chapter Writing Recipes in Rules @cindex recipes @cindex recipes, how to write @cindex writing recipes The recipe of a rule consists of one or more shell command lines to be executed, one at a time, in the order they appear. Typically, the result of executing these commands is that the target of the rule is brought up to date. Users use many different shell programs, but recipes in makefiles are always interpreted by @file{/bin/sh} unless the makefile specifies otherwise. @xref{Execution, ,Recipe Execution}. @menu * Recipe Syntax:: Recipe syntax features and pitfalls. * Echoing:: How to control when recipes are echoed. * Execution:: How recipes are executed. * Parallel:: How recipes can be executed in parallel. * Errors:: What happens after a recipe execution error. * Interrupts:: What happens when a recipe is interrupted. * Recursion:: Invoking @code{make} from makefiles. * Canned Recipes:: Defining canned recipes. * Empty Recipes:: Defining useful, do-nothing recipes. @end menu @node Recipe Syntax, Echoing, Recipes, Recipes @section Recipe Syntax @cindex recipe syntax @cindex syntax of recipe Makefiles have the unusual property that there are really two distinct syntaxes in one file. Most of the makefile uses @code{make} syntax (@pxref{Makefiles, ,Writing Makefiles}). However, recipes are meant to be interpreted by the shell and so they are written using shell syntax. The @code{make} program does not try to understand shell syntax: it performs only a very few specific translations on the content of the recipe before handing it to the shell. Each line in the recipe must start with a tab (or the first character in the value of the @code{.RECIPEPREFIX} variable; @pxref{Special Variables}), except that the first recipe line may be attached to the target-and-prerequisites line with a semicolon in between. @emph{Any} line in the makefile that begins with a tab and appears in a ``rule context'' (that is, after a rule has been started until another rule or variable definition) will be considered part of a recipe for that rule. Blank lines and lines of just comments may appear among the recipe lines; they are ignored. Some consequences of these rules include: @itemize @bullet @item A blank line that begins with a tab is not blank: it's an empty recipe (@pxref{Empty Recipes}). @cindex comments, in recipes @cindex recipes, comments in @cindex @code{#} (comments), in recipes @item A comment in a recipe is not a @code{make} comment; it will be passed to the shell as-is. Whether the shell treats it as a comment or not depends on your shell. @item A variable definition in a ``rule context'' which is indented by a tab as the first character on the line, will be considered part of a recipe, not a @code{make} variable definition, and passed to the shell. @item A conditional expression (@code{ifdef}, @code{ifeq}, etc. @pxref{Conditional Syntax, ,Syntax of Conditionals}) in a ``rule context'' which is indented by a tab as the first character on the line, will be considered part of a recipe and be passed to the shell. @end itemize @menu * Splitting Recipe Lines:: Breaking long recipe lines for readability. * Variables in Recipes:: Using @code{make} variables in recipes. @end menu @node Splitting Recipe Lines, Variables in Recipes, Recipe Syntax, Recipe Syntax @subsection Splitting Recipe Lines @cindex recipes, splitting @cindex splitting recipes @cindex recipes, backslash (@code{\}) in @cindex recipes, quoting newlines in @cindex backslash (@code{\}), in recipes @cindex @code{\} (backslash), in recipes @cindex quoting newline, in recipes @cindex newline, quoting, in recipes One of the few ways in which @code{make} does interpret recipes is checking for a backslash just before the newline. As in normal makefile syntax, a single logical recipe line can be split into multiple physical lines in the makefile by placing a backslash before each newline. A sequence of lines like this is considered a single recipe line, and one instance of the shell will be invoked to run it. However, in contrast to how they are treated in other places in a makefile (@pxref{Splitting Lines, , Splitting Long Lines}), backslash/newline pairs are @emph{not} removed from the recipe. Both the backslash and the newline characters are preserved and passed to the shell. How the backslash/newline is interpreted depends on your shell. If the first character of the next line after the backslash/newline is the recipe prefix character (a tab by default; @pxref{Special Variables}), then that character (and only that character) is removed. Whitespace is never added to the recipe. For example, the recipe for the all target in this makefile: @example @group all : @@echo no\ space @@echo no\ space @@echo one \ space @@echo one\ space @end group @end example @noindent consists of four separate shell commands where the output is: @example @group nospace nospace one space one space @end group @end example As a more complex example, this makefile: @example @group all : ; @@echo 'hello \ world' ; echo "hello \ world" @end group @end example @noindent will invoke one shell with a command of: @example @group echo 'hello \ world' ; echo "hello \ world" @end group @end example @noindent which, according to shell quoting rules, will yield the following output: @example @group hello \ world hello world @end group @end example @noindent Notice how the backslash/newline pair was removed inside the string quoted with double quotes (@code{"@dots{}"}), but not from the string quoted with single quotes (@code{'@dots{}'}). This is the way the default shell (@file{/bin/sh}) handles backslash/newline pairs. If you specify a different shell in your makefiles it may treat them differently. Sometimes you want to split a long line inside of single quotes, but you don't want the backslash/newline to appear in the quoted content. This is often the case when passing scripts to languages such as Perl, where extraneous backslashes inside the script can change its meaning or even be a syntax error. One simple way of handling this is to place the quoted string, or even the entire command, into a @code{make} variable then use the variable in the recipe. In this situation the newline quoting rules for makefiles will be used, and the backslash/newline will be removed. If we rewrite our example above using this method: @example @group HELLO = 'hello \ world' all : ; @@echo $(HELLO) @end group @end example @noindent we will get output like this: @example @group hello world @end group @end example If you like, you can also use target-specific variables (@pxref{Target-specific, ,Target-specific Variable Values}) to obtain a tighter correspondence between the variable and the recipe that uses it. @node Variables in Recipes, , Splitting Recipe Lines, Recipe Syntax @subsection Using Variables in Recipes @cindex variable references in recipes @cindex recipes, using variables in The other way in which @code{make} processes recipes is by expanding any variable references in them (@pxref{Reference,Basics of Variable References}). This occurs after make has finished reading all the makefiles and the target is determined to be out of date; so, the recipes for targets which are not rebuilt are never expanded. Variable and function references in recipes have identical syntax and semantics to references elsewhere in the makefile. They also have the same quoting rules: if you want a dollar sign to appear in your recipe, you must double it (@samp{$$}). For shells like the default shell, that use dollar signs to introduce variables, it's important to keep clear in your mind whether the variable you want to reference is a @code{make} variable (use a single dollar sign) or a shell variable (use two dollar signs). For example: @example @group LIST = one two three all: for i in $(LIST); do \ echo $$i; \ done @end group @end example @noindent results in the following command being passed to the shell: @example @group for i in one two three; do \ echo $i; \ done @end group @end example @noindent which generates the expected result: @example @group one two three @end group @end example @node Echoing, Execution, Recipe Syntax, Recipes @section Recipe Echoing @cindex echoing of recipes @cindex silent operation @cindex @code{@@} (in recipes) @cindex recipes, echoing @cindex printing of recipes Normally @code{make} prints each line of the recipe before it is executed. We call this @dfn{echoing} because it gives the appearance that you are typing the lines yourself. When a line starts with @samp{@@}, the echoing of that line is suppressed. The @samp{@@} is discarded before the line is passed to the shell. Typically you would use this for a command whose only effect is to print something, such as an @code{echo} command to indicate progress through the makefile: @example @@echo About to make distribution files @end example @cindex @code{-n} @cindex @code{--just-print} @cindex @code{--dry-run} @cindex @code{--recon} When @code{make} is given the flag @samp{-n} or @samp{--just-print} it only echoes most recipes, without executing them. @xref{Options Summary, ,Summary of Options}. In this case even the recipe lines starting with @samp{@@} are printed. This flag is useful for finding out which recipes @code{make} thinks are necessary without actually doing them. @cindex @code{-s} @cindex @code{--silent} @cindex @code{--quiet} @findex .SILENT The @samp{-s} or @samp{--silent} flag to @code{make} prevents all echoing, as if all recipes started with @samp{@@}. A rule in the makefile for the special target @code{.SILENT} without prerequisites has the same effect (@pxref{Special Targets, ,Special Built-in Target Names}).@refill @node Execution, Parallel, Echoing, Recipes @section Recipe Execution @cindex recipe, execution @cindex execution, of recipes @vindex @code{SHELL} @r{(recipe execution)} When it is time to execute recipes to update a target, they are executed by invoking a new sub-shell for each line of the recipe, unless the @code{.ONESHELL} special target is in effect (@pxref{One Shell, ,Using One Shell}) (In practice, @code{make} may take shortcuts that do not affect the results.) @cindex @code{cd} (shell command) @cindex shell variables, setting in recipes @cindex recipes setting shell variables @strong{Please note:} this implies that setting shell variables and invoking shell commands such as @code{cd} that set a context local to each process will not affect the following lines in the recipe.@footnote{On MS-DOS, the value of current working directory is @strong{global}, so changing it @emph{will} affect the following recipe lines on those systems.} If you want to use @code{cd} to affect the next statement, put both statements in a single recipe line. Then @code{make} will invoke one shell to run the entire line, and the shell will execute the statements in sequence. For example: @example foo : bar/lose cd $( ../$@@ @end example @noindent Here we use the shell AND operator (@code{&&}) so that if the @code{cd} command fails, the script will fail without trying to invoke the @code{gobble} command in the wrong directory, which could cause problems (in this case it would certainly cause @file{../foo} to be truncated, at least). @menu * One Shell:: One shell for all lines in a recipe. * Choosing the Shell:: How @code{make} chooses the shell used to run recipes. @end menu @node One Shell, Choosing the Shell, Execution, Execution @subsection Using One Shell @cindex recipe lines, single shell @cindex @code{.ONESHELL}, use of @findex .ONESHELL Sometimes you would prefer that all the lines in the recipe be passed to a single invocation of the shell. There are generally two situations where this is useful: first, it can improve performance in makefiles where recipes consist of many command lines, by avoiding extra processes. Second, you might want newlines to be included in your recipe command (for example perhaps you are using a very different interpreter as your @code{SHELL}). If the @code{.ONESHELL} special target appears anywhere in the makefile then @emph{all} recipe lines for each target will be provided to a single invocation of the shell. Newlines between recipe lines will be preserved. For example: @example .ONESHELL: foo : bar/lose cd $(@@D) gobble $(@@F) > ../$@@ @end example @noindent would now work as expected even though the commands are on different recipe lines. If @code{.ONESHELL} is provided, then only the first line of the recipe will be checked for the special prefix characters (@samp{@@}, @samp{-}, and @samp{+}). Subsequent lines will include the special characters in the recipe line when the @code{SHELL} is invoked. If you want your recipe to start with one of these special characters you'll need to arrange for them to not be the first characters on the first line, perhaps by adding a comment or similar. For example, this would be a syntax error in Perl because the first @samp{@@} is removed by make: @example .ONESHELL: SHELL = /usr/bin/perl .SHELLFLAGS = -e show : @@f = qw(a b c); print "@@f\n"; @end example @noindent However, either of these alternatives would work properly: @example .ONESHELL: SHELL = /usr/bin/perl .SHELLFLAGS = -e show : # Make sure "@@" is not the first character on the first line @@f = qw(a b c); print "@@f\n"; @end example @noindent or @example .ONESHELL: SHELL = /usr/bin/perl .SHELLFLAGS = -e show : my @@f = qw(a b c); print "@@f\n"; @end example As a special feature, if @code{SHELL} is determined to be a POSIX-style shell, the special prefix characters in ``internal'' recipe lines will be @emph{removed} before the recipe is processed. This feature is intended to allow existing makefiles to add the @code{.ONESHELL} special target and still run properly without extensive modifications. Since the special prefix characters are not legal at the beginning of a line in a POSIX shell script this is not a loss in functionality. For example, this works as expected: @example .ONESHELL: foo : bar/lose @@cd $(@@D) @@gobble $(@@F) > ../$@@ @end example Even with this special feature, however, makefiles with @code{.ONESHELL} will behave differently in ways that could be noticeable. For example, normally if any line in the recipe fails, that causes the rule to fail and no more recipe lines are processed. Under @code{.ONESHELL} a failure of any but the final recipe line will not be noticed by @code{make}. You can modify @code{.SHELLFLAGS} to add the @code{-e} option to the shell which will cause any failure anywhere in the command line to cause the shell to fail, but this could itself cause your recipe to behave differently. Ultimately you may need to harden your recipe lines to allow them to work with @code{.ONESHELL}. @node Choosing the Shell, , One Shell, Execution @subsection Choosing the Shell @cindex shell, choosing the @cindex @code{SHELL}, value of @cindex @code{.SHELLFLAGS}, value of @vindex SHELL @vindex .SHELLFLAGS The program used as the shell is taken from the variable @code{SHELL}. If this variable is not set in your makefile, the program @file{/bin/sh} is used as the shell. The argument(s) passed to the shell are taken from the variable @code{.SHELLFLAGS}. The default value of @code{.SHELLFLAGS} is @code{-c} normally, or @code{-ec} in POSIX-conforming mode. @cindex environment, @code{SHELL} in Unlike most variables, the variable @code{SHELL} is never set from the environment. This is because the @code{SHELL} environment variable is used to specify your personal choice of shell program for interactive use. It would be very bad for personal choices like this to affect the functioning of makefiles. @xref{Environment, ,Variables from the Environment}. Furthermore, when you do set @code{SHELL} in your makefile that value is @emph{not} exported in the environment to recipe lines that @code{make} invokes. Instead, the value inherited from the user's environment, if any, is exported. You can override this behavior by explicitly exporting @code{SHELL} (@pxref{Variables/Recursion, ,Communicating Variables to a Sub-@code{make}}), forcing it to be passed in the environment to recipe lines. @vindex @code{MAKESHELL} @r{(MS-DOS alternative to @code{SHELL})} However, on MS-DOS and MS-Windows the value of @code{SHELL} in the environment @strong{is} used, since on those systems most users do not set this variable, and therefore it is most likely set specifically to be used by @code{make}. On MS-DOS, if the setting of @code{SHELL} is not suitable for @code{make}, you can set the variable @code{MAKESHELL} to the shell that @code{make} should use; if set it will be used as the shell instead of the value of @code{SHELL}. @subsubheading Choosing a Shell in DOS and Windows @cindex shell, in DOS and Windows @cindex DOS, choosing a shell in @cindex Windows, choosing a shell in Choosing a shell in MS-DOS and MS-Windows is much more complex than on other systems. @vindex COMSPEC On MS-DOS, if @code{SHELL} is not set, the value of the variable @code{COMSPEC} (which is always set) is used instead. @cindex @code{SHELL}, MS-DOS specifics The processing of lines that set the variable @code{SHELL} in Makefiles is different on MS-DOS. The stock shell, @file{command.com}, is ridiculously limited in its functionality and many users of @code{make} tend to install a replacement shell. Therefore, on MS-DOS, @code{make} examines the value of @code{SHELL}, and changes its behavior based on whether it points to a Unix-style or DOS-style shell. This allows reasonable functionality even if @code{SHELL} points to @file{command.com}. If @code{SHELL} points to a Unix-style shell, @code{make} on MS-DOS additionally checks whether that shell can indeed be found; if not, it ignores the line that sets @code{SHELL}. In MS-DOS, GNU @code{make} searches for the shell in the following places: @enumerate @item In the precise place pointed to by the value of @code{SHELL}. For example, if the makefile specifies @samp{SHELL = /bin/sh}, @code{make} will look in the directory @file{/bin} on the current drive. @item In the current directory. @item In each of the directories in the @code{PATH} variable, in order. @end enumerate In every directory it examines, @code{make} will first look for the specific file (@file{sh} in the example above). If this is not found, it will also look in that directory for that file with one of the known extensions which identify executable files. For example @file{.exe}, @file{.com}, @file{.bat}, @file{.btm}, @file{.sh}, and some others. If any of these attempts is successful, the value of @code{SHELL} will be set to the full pathname of the shell as found. However, if none of these is found, the value of @code{SHELL} will not be changed, and thus the line that sets it will be effectively ignored. This is so @code{make} will only support features specific to a Unix-style shell if such a shell is actually installed on the system where @code{make} runs. Note that this extended search for the shell is limited to the cases where @code{SHELL} is set from the Makefile; if it is set in the environment or command line, you are expected to set it to the full pathname of the shell, exactly as things are on Unix. The effect of the above DOS-specific processing is that a Makefile that contains @samp{SHELL = /bin/sh} (as many Unix makefiles do), will work on MS-DOS unaltered if you have e.g.@: @file{sh.exe} installed in some directory along your @code{PATH}. @vindex SHELL @vindex .SHELLFLAGS @node Parallel, Errors, Execution, Recipes @section Parallel Execution @cindex recipes, execution in parallel @cindex parallel execution @cindex execution, in parallel @cindex job slots @cindex @code{-j} @cindex @code{--jobs} GNU @code{make} knows how to execute several recipes at once. Normally, @code{make} will execute only one recipe at a time, waiting for it to finish before executing the next. However, the @samp{-j} or @samp{--jobs} option tells @code{make} to execute many recipes simultaneously. You can inhibit parallelism in a particular makefile with the @code{.NOTPARALLEL} pseudo-target (@pxref{Special Targets,Special Built-in Target Names}).@refill On MS-DOS, the @samp{-j} option has no effect, since that system doesn't support multi-processing. If the @samp{-j} option is followed by an integer, this is the number of recipes to execute at once; this is called the number of @dfn{job slots}. If there is nothing looking like an integer after the @samp{-j} option, there is no limit on the number of job slots. The default number of job slots is one, which means serial execution (one thing at a time). Handling recursive @code{make} invocations raises issues for parallel execution. For more information on this, see @ref{Options/Recursion, ,Communicating Options to a Sub-@code{make}}. If a recipe fails (is killed by a signal or exits with a nonzero status), and errors are not ignored for that recipe (@pxref{Errors, ,Errors in Recipes}), the remaining recipe lines to remake the same target will not be run. If a recipe fails and the @samp{-k} or @samp{--keep-going} option was not given (@pxref{Options Summary, ,Summary of Options}), @code{make} aborts execution. If make terminates for any reason (including a signal) with child processes running, it waits for them to finish before actually exiting.@refill @cindex load average @cindex limiting jobs based on load @cindex jobs, limiting based on load @cindex @code{-l} (load average) @cindex @code{--max-load} @cindex @code{--load-average} When the system is heavily loaded, you will probably want to run fewer jobs than when it is lightly loaded. You can use the @samp{-l} option to tell @code{make} to limit the number of jobs to run at once, based on the load average. The @samp{-l} or @samp{--max-load} option is followed by a floating-point number. For example, @example -l 2.5 @end example @noindent will not let @code{make} start more than one job if the load average is above 2.5. The @samp{-l} option with no following number removes the load limit, if one was given with a previous @samp{-l} option.@refill More precisely, when @code{make} goes to start up a job, and it already has at least one job running, it checks the current load average; if it is not lower than the limit given with @samp{-l}, @code{make} waits until the load average goes below that limit, or until all the other jobs finish. By default, there is no load limit. @menu * Parallel Output:: Handling output during parallel execution * Parallel Input:: Handling input during parallel execution @end menu @node Parallel Output, Parallel Input, Parallel, Parallel @subsection Output During Parallel Execution @cindex output during parallel execution @cindex parallel execution, output during When running several recipes in parallel the output from each recipe appears as soon as it is generated, with the result that messages from different recipes may be interspersed, sometimes even appearing on the same line. This can make reading the output very difficult. @cindex @code{--output-sync} @cindex @code{-O} To avoid this you can use the @samp{--output-sync} (@samp{-O}) option. This option instructs @code{make} to save the output from the commands it invokes and print it all once the commands are completed. Additionally, if there are multiple recursive @code{make} invocations running in parallel, they will communicate so that only one of them is generating output at a time. If working directory printing is enabled (@pxref{-w Option, ,The @samp{--print-directory} Option}), the enter/leave messages are printed around each output grouping. If you prefer not to see these messages add the @samp{--no-print-directory} option to @code{MAKEFLAGS}. There are four levels of granularity when synchronizing output, specified by giving an argument to the option (e.g., @samp{-Oline} or @samp{--output-sync=recurse}). @table @code @item none This is the default: all output is sent directly as it is generated and no synchronization is performed. @item line Output from each individual line of the recipe is grouped and printed as soon as that line is complete. If a recipe consists of multiple lines, they may be interspersed with lines from other recipes. @item target Output from the entire recipe for each target is grouped and printed once the target is complete. This is the default if the @code{--output-sync} or @code{-O} option is given with no argument. @item recurse Output from each recursive invocation of @code{make} is grouped and printed once the recursive invocation is complete. @end table Regardless of the mode chosen, the total build time will be the same. The only difference is in how the output appears. The @samp{target} and @samp{recurse} modes both collect the output of the entire recipe of a target and display it uninterrupted when the recipe completes. The difference between them is in how recipes that contain recursive invocations of @code{make} are treated (@pxref{Recursion, ,Recursive Use of @code{make}}). For all recipes which have no recursive lines, the @samp{target} and @samp{recurse} modes behave identically. If the @samp{recurse} mode is chosen, recipes that contain recursive @code{make} invocations are treated the same as other targets: the output from the recipe, including the output from the recursive @code{make}, is saved and printed after the entire recipe is complete. This ensures output from all the targets built by a given recursive @code{make} instance are grouped together, which may make the output easier to understand. However it also leads to long periods of time during the build where no output is seen, followed by large bursts of output. If you are not watching the build as it proceeds, but instead viewing a log of the build after the fact, this may be the best option for you. If you are watching the output, the long gaps of quiet during the build can be frustrating. The @samp{target} output synchronization mode detects when @code{make} is going to be invoked recursively, using the standard methods, and it will not synchronize the output of those lines. The recursive @code{make} will perform the synchronization for its targets and the output from each will be displayed immediately when it completes. Be aware that output from recursive lines of the recipe are not synchronized (for example if the recursive line prints a message before running @code{make}, that message will not be synchronized). The @samp{line} mode can be useful for front-ends that are watching the output of @code{make} to track when recipes are started and completed. Some programs invoked by @code{make} may behave differently if they determine they're writing output to a terminal versus a file (often described as ``interactive'' vs. ``non-interactive'' modes). For example, many programs that can display colorized output will not do so if they determine they are not writing to a terminal. If your makefile invokes a program like this then using the output synchronization options will cause the program to believe it's running in ``non-interactive'' mode even though the output will ultimately go to the terminal. @node Parallel Input, , Parallel Output, Parallel @subsection Input During Parallel Execution @cindex input during parallel execution @cindex parallel execution, input during @cindex standard input Two processes cannot both take input from the same device at the same time. To make sure that only one recipe tries to take input from the terminal at once, @code{make} will invalidate the standard input streams of all but one running recipe. If another recipe attempts to read from standard input it will usually incur a fatal error (a @samp{Broken pipe} signal). @cindex broken pipe It is unpredictable which recipe will have a valid standard input stream (which will come from the terminal, or wherever you redirect the standard input of @code{make}). The first recipe run will always get it first, and the first recipe started after that one finishes will get it next, and so on. We will change how this aspect of @code{make} works if we find a better alternative. In the mean time, you should not rely on any recipe using standard input at all if you are using the parallel execution feature; but if you are not using this feature, then standard input works normally in all recipes. @node Errors, Interrupts, Parallel, Recipes @section Errors in Recipes @cindex errors (in recipes) @cindex recipes, errors in @cindex exit status (errors) After each shell invocation returns, @code{make} looks at its exit status. If the shell completed successfully (the exit status is zero), the next line in the recipe is executed in a new shell; after the last line is finished, the rule is finished. If there is an error (the exit status is nonzero), @code{make} gives up on the current rule, and perhaps on all rules. Sometimes the failure of a certain recipe line does not indicate a problem. For example, you may use the @code{mkdir} command to ensure that a directory exists. If the directory already exists, @code{mkdir} will report an error, but you probably want @code{make} to continue regardless. @cindex @code{-} (in recipes) To ignore errors in a recipe line, write a @samp{-} at the beginning of the line's text (after the initial tab). The @samp{-} is discarded before the line is passed to the shell for execution. For example, @example @group clean: -rm -f *.o @end group @end example @cindex @code{rm} (shell command) @noindent This causes @code{make} to continue even if @code{rm} is unable to remove a file. @cindex @code{-i} @cindex @code{--ignore-errors} @findex .IGNORE When you run @code{make} with the @samp{-i} or @samp{--ignore-errors} flag, errors are ignored in all recipes of all rules. A rule in the makefile for the special target @code{.IGNORE} has the same effect, if there are no prerequisites. This is less flexible but sometimes useful. When errors are to be ignored, because of either a @samp{-} or the @samp{-i} flag, @code{make} treats an error return just like success, except that it prints out a message that tells you the status code the shell exited with, and says that the error has been ignored. When an error happens that @code{make} has not been told to ignore, it implies that the current target cannot be correctly remade, and neither can any other that depends on it either directly or indirectly. No further recipes will be executed for these targets, since their preconditions have not been achieved. @cindex @code{-k} @cindex @code{--keep-going} Normally @code{make} gives up immediately in this circumstance, returning a nonzero status. However, if the @samp{-k} or @samp{--keep-going} flag is specified, @code{make} continues to consider the other prerequisites of the pending targets, remaking them if necessary, before it gives up and returns nonzero status. For example, after an error in compiling one object file, @samp{make -k} will continue compiling other object files even though it already knows that linking them will be impossible. @xref{Options Summary, ,Summary of Options}. The usual behavior assumes that your purpose is to get the specified targets up to date; once @code{make} learns that this is impossible, it might as well report the failure immediately. The @samp{-k} option says that the real purpose is to test as many of the changes made in the program as possible, perhaps to find several independent problems so that you can correct them all before the next attempt to compile. This is why Emacs' @code{compile} command passes the @samp{-k} flag by default. @cindex Emacs (@code{M-x compile}) @findex .DELETE_ON_ERROR @cindex deletion of target files @cindex removal of target files @cindex target, deleting on error Usually when a recipe line fails, if it has changed the target file at all, the file is corrupted and cannot be used---or at least it is not completely updated. Yet the file's time stamp says that it is now up to date, so the next time @code{make} runs, it will not try to update that file. The situation is just the same as when the shell is killed by a signal; @pxref{Interrupts}. So generally the right thing to do is to delete the target file if the recipe fails after beginning to change the file. @code{make} will do this if @code{.DELETE_ON_ERROR} appears as a target. This is almost always what you want @code{make} to do, but it is not historical practice; so for compatibility, you must explicitly request it. @node Interrupts, Recursion, Errors, Recipes @section Interrupting or Killing @code{make} @cindex interrupt @cindex signal @cindex deletion of target files @cindex removal of target files @cindex target, deleting on interrupt @cindex killing (interruption) If @code{make} gets a fatal signal while a shell is executing, it may delete the target file that the recipe was supposed to update. This is done if the target file's last-modification time has changed since @code{make} first checked it. The purpose of deleting the target is to make sure that it is remade from scratch when @code{make} is next run. Why is this? Suppose you type @kbd{Ctrl-c} while a compiler is running, and it has begun to write an object file @file{foo.o}. The @kbd{Ctrl-c} kills the compiler, resulting in an incomplete file whose last-modification time is newer than the source file @file{foo.c}. But @code{make} also receives the @kbd{Ctrl-c} signal and deletes this incomplete file. If @code{make} did not do this, the next invocation of @code{make} would think that @file{foo.o} did not require updating---resulting in a strange error message from the linker when it tries to link an object file half of which is missing. @findex .PRECIOUS You can prevent the deletion of a target file in this way by making the special target @code{.PRECIOUS} depend on it. Before remaking a target, @code{make} checks to see whether it appears on the prerequisites of @code{.PRECIOUS}, and thereby decides whether the target should be deleted if a signal happens. Some reasons why you might do this are that the target is updated in some atomic fashion, or exists only to record a modification-time (its contents do not matter), or must exist at all times to prevent other sorts of trouble. Although @code{make} does its best to clean up there are certain situations in which cleanup is impossible. For example, @code{make} may be killed by an uncatchable signal. Or, one of the programs make invokes may be killed or crash, leaving behind an up-to-date but corrupt target file: @code{make} will not realize that this failure requires the target to be cleaned. Or @code{make} itself may encounter a bug and crash. For these reasons it's best to write @emph{defensive recipes}, which won't leave behind corrupted targets even if they fail. Most commonly these recipes create temporary files rather than updating the target directly, then rename the temporary file to the final target name. Some compilers already behave this way, so that you don't need to write a defensive recipe. @node Recursion, Canned Recipes, Interrupts, Recipes @section Recursive Use of @code{make} @cindex recursion @cindex subdirectories, recursion for Recursive use of @code{make} means using @code{make} as a command in a makefile. This technique is useful when you want separate makefiles for various subsystems that compose a larger system. For example, suppose you have a sub-directory @file{subdir} which has its own makefile, and you would like the containing directory's makefile to run @code{make} on the sub-directory. You can do it by writing this: @example subsystem: cd subdir && $(MAKE) @end example @noindent or, equivalently, this (@pxref{Options Summary, ,Summary of Options}): @example subsystem: $(MAKE) -C subdir @end example @cindex @code{-C} @cindex @code{--directory} You can write recursive @code{make} commands just by copying this example, but there are many things to know about how they work and why, and about how the sub-@code{make} relates to the top-level @code{make}. You may also find it useful to declare targets that invoke recursive @code{make} commands as @samp{.PHONY} (for more discussion on when this is useful, see @ref{Phony Targets}). @vindex @code{CURDIR} For your convenience, when GNU @code{make} starts (after it has processed any @code{-C} options) it sets the variable @code{CURDIR} to the pathname of the current working directory. This value is never touched by @code{make} again: in particular note that if you include files from other directories the value of @code{CURDIR} does not change. The value has the same precedence it would have if it were set in the makefile (by default, an environment variable @code{CURDIR} will not override this value). Note that setting this variable has no impact on the operation of @code{make} (it does not cause @code{make} to change its working directory, for example). @menu * MAKE Variable:: The special effects of using @samp{$(MAKE)}. * Variables/Recursion:: How to communicate variables to a sub-@code{make}. * Options/Recursion:: How to communicate options to a sub-@code{make}. * -w Option:: How the @samp{-w} or @samp{--print-directory} option helps debug use of recursive @code{make} commands. @end menu @node MAKE Variable, Variables/Recursion, Recursion, Recursion @subsection How the @code{MAKE} Variable Works @vindex MAKE @cindex recursion, and @code{MAKE} variable Recursive @code{make} commands should always use the variable @code{MAKE}, not the explicit command name @samp{make}, as shown here: @example @group subsystem: cd subdir && $(MAKE) @end group @end example The value of this variable is the file name with which @code{make} was invoked. If this file name was @file{/bin/make}, then the recipe executed is @samp{cd subdir && /bin/make}. If you use a special version of @code{make} to run the top-level makefile, the same special version will be executed for recursive invocations. @cindex @code{cd} (shell command) @cindex +, and recipes As a special feature, using the variable @code{MAKE} in the recipe of a rule alters the effects of the @samp{-t} (@samp{--touch}), @samp{-n} (@samp{--just-print}), or @samp{-q} (@w{@samp{--question}}) option. Using the @code{MAKE} variable has the same effect as using a @samp{+} character at the beginning of the recipe line. @xref{Instead of Execution, ,Instead of Executing the Recipes}. This special feature is only enabled if the @code{MAKE} variable appears directly in the recipe: it does not apply if the @code{MAKE} variable is referenced through expansion of another variable. In the latter case you must use the @samp{+} token to get these special effects.@refill Consider the command @samp{make -t} in the above example. (The @samp{-t} option marks targets as up to date without actually running any recipes; see @ref{Instead of Execution}.) Following the usual definition of @samp{-t}, a @samp{make -t} command in the example would create a file named @file{subsystem} and do nothing else. What you really want it to do is run @samp{@w{cd subdir &&} @w{make -t}}; but that would require executing the recipe, and @samp{-t} says not to execute recipes.@refill @cindex @code{-t}, and recursion @cindex recursion, and @code{-t} @cindex @code{--touch}, and recursion The special feature makes this do what you want: whenever a recipe line of a rule contains the variable @code{MAKE}, the flags @samp{-t}, @samp{-n} and @samp{-q} do not apply to that line. Recipe lines containing @code{MAKE} are executed normally despite the presence of a flag that causes most recipes not to be run. The usual @code{MAKEFLAGS} mechanism passes the flags to the sub-@code{make} (@pxref{Options/Recursion, ,Communicating Options to a Sub-@code{make}}), so your request to touch the files, or print the recipes, is propagated to the subsystem.@refill @node Variables/Recursion, Options/Recursion, MAKE Variable, Recursion @subsection Communicating Variables to a Sub-@code{make} @cindex sub-@code{make} @cindex environment, and recursion @cindex exporting variables @cindex variables, environment @cindex variables, exporting @cindex recursion, and environment @cindex recursion, and variables Variable values of the top-level @code{make} can be passed to the sub-@code{make} through the environment by explicit request. These variables are defined in the sub-@code{make} as defaults, but they do not override variables defined in the makefile used by the sub-@code{make} unless you use the @samp{-e} switch (@pxref{Options Summary, ,Summary of Options}).@refill To pass down, or @dfn{export}, a variable, @code{make} adds the variable and its value to the environment for running each line of the recipe. The sub-@code{make}, in turn, uses the environment to initialize its table of variable values. @xref{Environment, ,Variables from the Environment}. Except by explicit request, @code{make} exports a variable only if it is either defined in the environment initially or set on the command line, and if its name consists only of letters, numbers, and underscores. Some shells cannot cope with environment variable names consisting of characters other than letters, numbers, and underscores. @cindex SHELL, exported value The value of the @code{make} variable @code{SHELL} is not exported. Instead, the value of the @code{SHELL} variable from the invoking environment is passed to the sub-@code{make}. You can force @code{make} to export its value for @code{SHELL} by using the @code{export} directive, described below. @xref{Choosing the Shell}. The special variable @code{MAKEFLAGS} is always exported (unless you unexport it). @code{MAKEFILES} is exported if you set it to anything. @code{make} automatically passes down variable values that were defined on the command line, by putting them in the @code{MAKEFLAGS} variable. @iftex See the next section. @end iftex @ifnottex @xref{Options/Recursion}. @end ifnottex Variables are @emph{not} normally passed down if they were created by default by @code{make} (@pxref{Implicit Variables, ,Variables Used by Implicit Rules}). The sub-@code{make} will define these for itself.@refill @findex export If you want to export specific variables to a sub-@code{make}, use the @code{export} directive, like this: @example export @var{variable} @dots{} @end example @noindent @findex unexport If you want to @emph{prevent} a variable from being exported, use the @code{unexport} directive, like this: @example unexport @var{variable} @dots{} @end example @noindent In both of these forms, the arguments to @code{export} and @code{unexport} are expanded, and so could be variables or functions which expand to a (list of) variable names to be (un)exported. As a convenience, you can define a variable and export it at the same time by doing: @example export @var{variable} = value @end example @noindent has the same result as: @example @var{variable} = value export @var{variable} @end example @noindent and @example export @var{variable} := value @end example @noindent has the same result as: @example @var{variable} := value export @var{variable} @end example Likewise, @example export @var{variable} += value @end example @noindent is just like: @example @var{variable} += value export @var{variable} @end example @noindent @xref{Appending, ,Appending More Text to Variables}. You may notice that the @code{export} and @code{unexport} directives work in @code{make} in the same way they work in the shell, @code{sh}. If you want all variables to be exported by default, you can use @code{export} by itself: @example export @end example @noindent This tells @code{make} that variables which are not explicitly mentioned in an @code{export} or @code{unexport} directive should be exported. Any variable given in an @code{unexport} directive will still @emph{not} be exported. If you use @code{export} by itself to export variables by default, variables whose names contain characters other than alphanumerics and underscores will not be exported unless specifically mentioned in an @code{export} directive.@refill @findex .EXPORT_ALL_VARIABLES The behavior elicited by an @code{export} directive by itself was the default in older versions of GNU @code{make}. If your makefiles depend on this behavior and you want to be compatible with old versions of @code{make}, you can write a rule for the special target @code{.EXPORT_ALL_VARIABLES} instead of using the @code{export} directive. This will be ignored by old @code{make}s, while the @code{export} directive will cause a syntax error.@refill @cindex compatibility in exporting Likewise, you can use @code{unexport} by itself to tell @code{make} @emph{not} to export variables by default. Since this is the default behavior, you would only need to do this if @code{export} had been used by itself earlier (in an included makefile, perhaps). You @strong{cannot} use @code{export} and @code{unexport} by themselves to have variables exported for some recipes and not for others. The last @code{export} or @code{unexport} directive that appears by itself determines the behavior for the entire run of @code{make}.@refill @vindex MAKELEVEL @cindex recursion, level of As a special feature, the variable @code{MAKELEVEL} is changed when it is passed down from level to level. This variable's value is a string which is the depth of the level as a decimal number. The value is @samp{0} for the top-level @code{make}; @samp{1} for a sub-@code{make}, @samp{2} for a sub-sub-@code{make}, and so on. The incrementation happens when @code{make} sets up the environment for a recipe.@refill The main use of @code{MAKELEVEL} is to test it in a conditional directive (@pxref{Conditionals, ,Conditional Parts of Makefiles}); this way you can write a makefile that behaves one way if run recursively and another way if run directly by you.@refill @vindex MAKEFILES You can use the variable @code{MAKEFILES} to cause all sub-@code{make} commands to use additional makefiles. The value of @code{MAKEFILES} is a whitespace-separated list of file names. This variable, if defined in the outer-level makefile, is passed down through the environment; then it serves as a list of extra makefiles for the sub-@code{make} to read before the usual or specified ones. @xref{MAKEFILES Variable, ,The Variable @code{MAKEFILES}}.@refill @node Options/Recursion, -w Option, Variables/Recursion, Recursion @subsection Communicating Options to a Sub-@code{make} @cindex options, and recursion @cindex recursion, and options @vindex MAKEFLAGS Flags such as @samp{-s} and @samp{-k} are passed automatically to the sub-@code{make} through the variable @code{MAKEFLAGS}. This variable is set up automatically by @code{make} to contain the flag letters that @code{make} received. Thus, if you do @w{@samp{make -ks}} then @code{MAKEFLAGS} gets the value @samp{ks}.@refill As a consequence, every sub-@code{make} gets a value for @code{MAKEFLAGS} in its environment. In response, it takes the flags from that value and processes them as if they had been given as arguments. @xref{Options Summary, ,Summary of Options}. @cindex command line variable definitions, and recursion @cindex variables, command line, and recursion @cindex recursion, and command line variable definitions Likewise variables defined on the command line are passed to the sub-@code{make} through @code{MAKEFLAGS}. Words in the value of @code{MAKEFLAGS} that contain @samp{=}, @code{make} treats as variable definitions just as if they appeared on the command line. @xref{Overriding, ,Overriding Variables}. @cindex @code{-C}, and recursion @cindex @code{-f}, and recursion @cindex @code{-o}, and recursion @cindex @code{-W}, and recursion @cindex @code{--directory}, and recursion @cindex @code{--file}, and recursion @cindex @code{--old-file}, and recursion @cindex @code{--assume-old}, and recursion @cindex @code{--assume-new}, and recursion @cindex @code{--new-file}, and recursion @cindex recursion, and @code{-C} @cindex recursion, and @code{-f} @cindex recursion, and @code{-o} @cindex recursion, and @code{-W} The options @samp{-C}, @samp{-f}, @samp{-o}, and @samp{-W} are not put into @code{MAKEFLAGS}; these options are not passed down.@refill @cindex @code{-j}, and recursion @cindex @code{--jobs}, and recursion @cindex recursion, and @code{-j} @cindex job slots, and recursion The @samp{-j} option is a special case (@pxref{Parallel, ,Parallel Execution}). If you set it to some numeric value @samp{N} and your operating system supports it (most any UNIX system will; others typically won't), the parent @code{make} and all the sub-@code{make}s will communicate to ensure that there are only @samp{N} jobs running at the same time between them all. Note that any job that is marked recursive (@pxref{Instead of Execution, ,Instead of Executing Recipes}) 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 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 If you do not want to pass the other flags down, you must change the value of @code{MAKEFLAGS}, like this: @example subsystem: cd subdir && $(MAKE) MAKEFLAGS= @end example @vindex MAKEOVERRIDES The command line variable definitions really appear in the variable @code{MAKEOVERRIDES}, and @code{MAKEFLAGS} contains a reference to this variable. If you do want to pass flags down normally, but don't want to pass down the command line variable definitions, you can reset @code{MAKEOVERRIDES} to empty, like this: @example MAKEOVERRIDES = @end example @noindent @cindex Arg list too long @cindex E2BIG This is not usually useful to do. However, some systems have a small fixed limit on the size of the environment, and putting so much information into the value of @code{MAKEFLAGS} can exceed it. If you see the error message @samp{Arg list too long}, this may be the problem. @findex .POSIX @cindex POSIX (For strict compliance with POSIX.2, changing @code{MAKEOVERRIDES} does not affect @code{MAKEFLAGS} if the special target @samp{.POSIX} appears in the makefile. You probably do not care about this.) @vindex MFLAGS A similar variable @code{MFLAGS} exists also, for historical compatibility. It has the same value as @code{MAKEFLAGS} except that it does not contain the command line variable definitions, and it always begins with a hyphen unless it is empty (@code{MAKEFLAGS} begins with a hyphen only when it begins with an option that has no single-letter version, such as @samp{--warn-undefined-variables}). @code{MFLAGS} was traditionally used explicitly in the recursive @code{make} command, like this: @example subsystem: cd subdir && $(MAKE) $(MFLAGS) @end example @noindent but now @code{MAKEFLAGS} makes this usage redundant. If you want your makefiles to be compatible with old @code{make} programs, use this technique; it will work fine with more modern @code{make} versions too. @cindex setting options from environment @cindex options, setting from environment @cindex setting options in makefiles @cindex options, setting in makefiles The @code{MAKEFLAGS} variable can also be useful if you want to have certain options, such as @samp{-k} (@pxref{Options Summary, ,Summary of Options}), set each time you run @code{make}. You simply put a value for @code{MAKEFLAGS} in your environment. You can also set @code{MAKEFLAGS} in a makefile, to specify additional flags that should also be in effect for that makefile. (Note that you cannot use @code{MFLAGS} this way. That variable is set only for compatibility; @code{make} does not interpret a value you set for it in any way.) When @code{make} interprets the value of @code{MAKEFLAGS} (either from the environment or from a makefile), it first prepends a hyphen if the value does not already begin with one. Then it chops the value into words separated by blanks, and parses these words as if they were options given on the command line (except that @samp{-C}, @samp{-f}, @samp{-h}, @samp{-o}, @samp{-W}, and their long-named versions are ignored; and there is no error for an invalid option). If you do put @code{MAKEFLAGS} in your environment, you should be sure not to include any options that will drastically affect the actions of @code{make} and undermine the purpose of makefiles and of @code{make} itself. For instance, the @samp{-t}, @samp{-n}, and @samp{-q} options, if put in one of these variables, could have disastrous consequences and would certainly have at least surprising and probably annoying effects.@refill If you'd like to run other implementations of @code{make} in addition to GNU @code{make}, and hence do not want to add GNU @code{make}-specific flags to the @code{MAKEFLAGS} variable, you can add them to the @code{GNUMAKEFLAGS} variable instead. This variable is parsed just before @code{MAKEFLAGS}, in the same way as @code{MAKEFLAGS}. When @code{make} constructs @code{MAKEFLAGS} to pass to a recursive @code{make} it will include all flags, even those taken from @code{GNUMAKEFLAGS}. As a result, after parsing @code{GNUMAKEFLAGS} GNU @code{make} sets this variable to the empty string to avoid duplicating flags during recursion. It's best to use @code{GNUMAKEFLAGS} only with flags which won't materially change the behavior of your makefiles. If your makefiles require GNU make anyway then simply use @code{MAKEFLAGS}. Flags such as @samp{--no-print-directory} or @samp{--output-sync} may be appropriate for @code{GNUMAKEFLAGS}. @node -w Option, , Options/Recursion, Recursion @subsection The @samp{--print-directory} Option @cindex directories, printing them @cindex printing directories @cindex recursion, and printing directories If you use several levels of recursive @code{make} invocations, the @samp{-w} or @w{@samp{--print-directory}} option can make the output a lot easier to understand by showing each directory as @code{make} starts processing it and as @code{make} finishes processing it. For example, if @samp{make -w} is run in the directory @file{/u/gnu/make}, @code{make} will print a line of the form:@refill @example make: Entering directory `/u/gnu/make'. @end example @noindent before doing anything else, and a line of the form: @example make: Leaving directory `/u/gnu/make'. @end example @noindent when processing is completed. @cindex @code{-C}, and @code{-w} @cindex @code{--directory}, and @code{--print-directory} @cindex recursion, and @code{-w} @cindex @code{-w}, and @code{-C} @cindex @code{-w}, and recursion @cindex @code{--print-directory}, and @code{--directory} @cindex @code{--print-directory}, and recursion @cindex @code{--no-print-directory} @cindex @code{--print-directory}, disabling @cindex @code{-w}, disabling Normally, you do not need to specify this option because @samp{make} does it for you: @samp{-w} is turned on automatically when you use the @samp{-C} option, and in sub-@code{make}s. @code{make} will not automatically turn on @samp{-w} if you also use @samp{-s}, which says to be silent, or if you use @samp{--no-print-directory} to explicitly disable it. @node Canned Recipes, Empty Recipes, Recursion, Recipes @section Defining Canned Recipes @cindex canned recipes @cindex recipes, canned @cindex sequences of commands @cindex commands, sequences of When the same sequence of commands is useful in making various targets, you can define it as a canned sequence with the @code{define} directive, and refer to the canned sequence from the recipes for those targets. The canned sequence is actually a variable, so the name must not conflict with other variable names. Here is an example of defining a canned recipe: @example define run-yacc = yacc $(firstword $^) mv y.tab.c $@@ endef @end example @cindex @code{yacc} @noindent Here @code{run-yacc} is the name of the variable being defined; @code{endef} marks the end of the definition; the lines in between are the commands. The @code{define} directive does not expand variable references and function calls in the canned sequence; the @samp{$} characters, parentheses, variable names, and so on, all become part of the value of the variable you are defining. @xref{Multi-Line, ,Defining Multi-Line Variables}, for a complete explanation of @code{define}. The first command in this example runs Yacc on the first prerequisite of whichever rule uses the canned sequence. The output file from Yacc is always named @file{y.tab.c}. The second command moves the output to the rule's target file name. To use the canned sequence, substitute the variable into the recipe of a rule. You can substitute it like any other variable (@pxref{Reference, ,Basics of Variable References}). Because variables defined by @code{define} are recursively expanded variables, all the variable references you wrote inside the @code{define} are expanded now. For example: @example foo.c : foo.y $(run-yacc) @end example @noindent @samp{foo.y} will be substituted for the variable @samp{$^} when it occurs in @code{run-yacc}'s value, and @samp{foo.c} for @samp{$@@}.@refill This is a realistic example, but this particular one is not needed in practice because @code{make} has an implicit rule to figure out these commands based on the file names involved (@pxref{Implicit Rules, ,Using Implicit Rules}). @cindex @@, and @code{define} @cindex -, and @code{define} @cindex +, and @code{define} In recipe execution, each line of a canned sequence is treated just as if the line appeared on its own in the rule, preceded by a tab. In particular, @code{make} invokes a separate sub-shell for each line. You can use the special prefix characters that affect command lines (@samp{@@}, @samp{-}, and @samp{+}) on each line of a canned sequence. @xref{Recipes, ,Writing Recipes in Rules}. For example, using this canned sequence: @example define frobnicate = @@echo "frobnicating target $@@" frob-step-1 $< -o $@@-step-1 frob-step-2 $@@-step-1 -o $@@ endef @end example @noindent @code{make} will not echo the first line, the @code{echo} command. But it @emph{will} echo the following two recipe lines. On the other hand, prefix characters on the recipe line that refers to a canned sequence apply to every line in the sequence. So the rule: @example frob.out: frob.in @@$(frobnicate) @end example @noindent does not echo @emph{any} recipe lines. (@xref{Echoing, ,Recipe Echoing}, for a full explanation of @samp{@@}.) @node Empty Recipes, , Canned Recipes, Recipes @section Using Empty Recipes @cindex empty recipes @cindex recipes, empty It is sometimes useful to define recipes which do nothing. This is done simply by giving a recipe that consists of nothing but whitespace. For example: @example target: ; @end example @noindent defines an empty recipe for @file{target}. You could also use a line 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. 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. @node Using Variables, Conditionals, Recipes, Top @chapter How to Use Variables @cindex variable @cindex value @cindex recursive variable expansion @cindex simple variable expansion A @dfn{variable} is a name defined in a makefile to represent a string of text, called the variable's @dfn{value}. These values are substituted by explicit request into targets, prerequisites, recipes, and other parts of the makefile. (In some other versions of @code{make}, variables are called @dfn{macros}.) @cindex macro Variables and functions in all parts of a makefile are expanded when read, except for in recipes, the right-hand sides of variable definitions using @samp{=}, and the bodies of variable definitions using the @code{define} directive.@refill Variables can represent lists of file names, options to pass to compilers, programs to run, directories to look in for source files, directories to write output in, or anything else you can imagine. A variable name may be any sequence of characters not containing @samp{:}, @samp{#}, @samp{=}, or whitespace. However, variable names containing characters other than letters, numbers, and underscores should be considered carefully, as in some shells they cannot be passed through the environment to a sub-@code{make} (@pxref{Variables/Recursion, ,Communicating Variables to a Sub-@code{make}}). Variable names beginning with @samp{.} and an uppercase letter may be given special meaning in future versions of @code{make}. Variable names are case-sensitive. The names @samp{foo}, @samp{FOO}, and @samp{Foo} all refer to different variables. It is traditional to use upper case letters in variable names, but we recommend using lower case letters for variable names that serve internal purposes in the makefile, and reserving upper case for parameters that control implicit rules or for parameters that the user should override with command options (@pxref{Overriding, ,Overriding Variables}). A few variables have names that are a single punctuation character or just a few characters. These are the @dfn{automatic variables}, and they have particular specialized uses. @xref{Automatic Variables}. @menu * Reference:: How to use the value of a variable. * Flavors:: Variables come in two flavors. * Advanced:: Advanced features for referencing a variable. * Values:: All the ways variables get their values. * Setting:: How to set a variable in the makefile. * Appending:: How to append more text to the old value of a variable. * Override Directive:: How to set a variable in the makefile even if the user has set it with a command argument. * Multi-Line:: An alternate way to set a variable to a multi-line string. * Undefine Directive:: How to undefine a variable so that it appears as if it was never set. * Environment:: Variable values can come from the environment. * Target-specific:: Variable values can be defined on a per-target basis. * Pattern-specific:: Target-specific variable values can be applied to a group of targets that match a pattern. * Suppressing Inheritance:: Suppress inheritance of variables. * Special Variables:: Variables with special meaning or behavior. @end menu @node Reference, Flavors, Using Variables, Using Variables @section Basics of Variable References @cindex variables, how to reference @cindex reference to variables @cindex @code{$}, in variable reference @cindex dollar sign (@code{$}), in variable reference To substitute a variable's value, write a dollar sign followed by the name of the variable in parentheses or braces: either @samp{$(foo)} or @samp{$@{foo@}} is a valid reference to the variable @code{foo}. This special significance of @samp{$} is why you must write @samp{$$} to have the effect of a single dollar sign in a file name or recipe. Variable references can be used in any context: targets, prerequisites, recipes, most directives, and new variable values. Here is an example of a common case, where a variable holds the names of all the object files in a program: @example @group objects = program.o foo.o utils.o program : $(objects) cc -o program $(objects) $(objects) : defs.h @end group @end example Variable references work by strict textual substitution. Thus, the rule @example @group foo = c prog.o : prog.$(foo) $(foo)$(foo) -$(foo) prog.$(foo) @end group @end example @noindent could be used to compile a C program @file{prog.c}. Since spaces before the variable value are ignored in variable assignments, the value of @code{foo} is precisely @samp{c}. (Don't actually write your makefiles this way!) A dollar sign followed by a character other than a dollar sign, open-parenthesis or open-brace treats that single character as the variable name. Thus, you could reference the variable @code{x} with @samp{$x}. However, this practice can lead to confusion (e.g., @samp{$foo} refers to the variable @code{f} followed by the string @code{oo}) so we recommend using parentheses or braces around all variables, even single-letter variables, unless omitting them gives significant readability improvements. One place where readability is often improved is automatic variables (@pxref{Automatic Variables}). @node Flavors, Advanced, Reference, Using Variables @section The Two Flavors of Variables @cindex flavors of variables @cindex recursive variable expansion @cindex variables, flavors @cindex recursively expanded variables @cindex variables, recursively expanded There are two ways that a variable in GNU @code{make} can have a value; we call them the two @dfn{flavors} of variables. The two flavors are distinguished in how they are defined and in what they do when expanded. @cindex = The first flavor of variable is a @dfn{recursively expanded} variable. Variables of this sort are defined by lines using @samp{=} (@pxref{Setting, ,Setting Variables}) or by the @code{define} directive (@pxref{Multi-Line, ,Defining Multi-Line Variables}). The value you specify is installed verbatim; if it contains references to other variables, these references are expanded whenever this variable is substituted (in the course of expanding some other string). When this happens, it is called @dfn{recursive expansion}.@refill For example, @example foo = $(bar) bar = $(ugh) ugh = Huh? all:;echo $(foo) @end example @noindent will echo @samp{Huh?}: @samp{$(foo)} expands to @samp{$(bar)} which expands to @samp{$(ugh)} which finally expands to @samp{Huh?}.@refill This flavor of variable is the only sort supported by most other versions of @code{make}. It has its advantages and its disadvantages. An advantage (most would say) is that: @example CFLAGS = $(include_dirs) -O include_dirs = -Ifoo -Ibar @end example @noindent will do what was intended: when @samp{CFLAGS} is expanded in a recipe, it will expand to @samp{-Ifoo -Ibar -O}. A major disadvantage is that you cannot append something on the end of a variable, as in @example CFLAGS = $(CFLAGS) -O @end example @noindent because it will cause an infinite loop in the variable expansion. (Actually @code{make} detects the infinite loop and reports an error.) @cindex loops in variable expansion @cindex variables, loops in expansion Another disadvantage is that any functions (@pxref{Functions, ,Functions for Transforming Text}) referenced in the definition will be executed every time the variable is expanded. This makes @code{make} run slower; worse, it causes the @code{wildcard} and @code{shell} functions to give unpredictable results because you cannot easily control when they are called, or even how many times. To avoid all the problems and inconveniences of recursively expanded variables, there is another flavor: simply expanded variables. @cindex simply expanded variables @cindex variables, simply expanded @cindex := @cindex ::= @dfn{Simply expanded variables} are defined by lines using @samp{:=} or @samp{::=} (@pxref{Setting, ,Setting Variables}). Both forms are equivalent in GNU @code{make}; however only the @samp{::=} form is described by the POSIX standard (support for @samp{::=} was added to the POSIX standard in 2012, so older versions of @code{make} won't accept this form either). The value of a simply expanded variable is scanned once and for all, expanding any references to other variables and functions, when the variable is defined. The actual value of the simply expanded variable is the result of expanding the text that you write. It does not contain any references to other variables; it contains their values @emph{as of the time this variable was defined}. Therefore, @example x := foo y := $(x) bar x := later @end example @noindent is equivalent to @example y := foo bar x := later @end example When a simply expanded variable is referenced, its value is substituted verbatim. Here is a somewhat more complicated example, illustrating the use of @samp{:=} in conjunction with the @code{shell} function. (@xref{Shell Function, , The @code{shell} Function}.) This example also shows use of the variable @code{MAKELEVEL}, which is changed when it is passed down from level to level. (@xref{Variables/Recursion, , Communicating Variables to a Sub-@code{make}}, for information about @code{MAKELEVEL}.) @vindex MAKELEVEL @vindex MAKE @example @group ifeq (0,$@{MAKELEVEL@}) whoami := $(shell whoami) host-type := $(shell arch) MAKE := $@{MAKE@} host-type=$@{host-type@} whoami=$@{whoami@} endif @end group @end example @noindent An advantage of this use of @samp{:=} is that a typical `descend into a directory' recipe then looks like this: @example @group $@{subdirs@}: $@{MAKE@} -C $@@ all @end group @end example Simply expanded variables generally make complicated makefile programming more predictable because they work like variables in most programming languages. They allow you to redefine a variable using its own value (or its value processed in some way by one of the expansion functions) and to use the expansion functions much more efficiently (@pxref{Functions, ,Functions for Transforming Text}). @cindex spaces, in variable values @cindex whitespace, in variable values @cindex variables, spaces in values You can also use them to introduce controlled leading whitespace into variable values. Leading whitespace characters are discarded from your input before substitution of variable references and function calls; this means you can include leading spaces in a variable value by protecting them with variable references, like this: @example nullstring := space := $(nullstring) # end of the line @end example @noindent Here the value of the variable @code{space} is precisely one space. The comment @w{@samp{# end of the line}} is included here just for clarity. Since trailing space characters are @emph{not} stripped from variable values, just a space at the end of the line would have the same effect (but be rather hard to read). If you put whitespace at the end of a variable value, it is a good idea to put a comment like that at the end of the line to make your intent clear. Conversely, if you do @emph{not} want any whitespace characters at the end of your variable value, you must remember not to put a random comment on the end of the line after some whitespace, such as this: @example dir := /foo/bar # directory to put the frobs in @end example @noindent Here the value of the variable @code{dir} is @w{@samp{/foo/bar }} (with four trailing spaces), which was probably not the intention. (Imagine something like @w{@samp{$(dir)/file}} with this definition!) @cindex conditional variable assignment @cindex variables, conditional assignment @cindex ?= There is another assignment operator for variables, @samp{?=}. This is called a conditional variable assignment operator, because it only has an effect if the variable is not yet defined. This statement: @example FOO ?= bar @end example @noindent is exactly equivalent to this (@pxref{Origin Function, ,The @code{origin} Function}): @example ifeq ($(origin FOO), undefined) FOO = bar endif @end example Note that a variable set to an empty value is still defined, so @samp{?=} will not set that variable. @node Advanced, Values, Flavors, Using Variables @section Advanced Features for Reference to Variables @cindex reference to variables This section describes some advanced features you can use to reference variables in more flexible ways. @menu * Substitution Refs:: Referencing a variable with substitutions on the value. * Computed Names:: Computing the name of the variable to refer to. @end menu @node Substitution Refs, Computed Names, Advanced, Advanced @subsection Substitution References @cindex modified variable reference @cindex substitution variable reference @cindex variables, modified reference @cindex variables, substitution reference @cindex variables, substituting suffix in @cindex suffix, substituting in variables A @dfn{substitution reference} substitutes the value of a variable with alterations that you specify. It has the form @samp{$(@var{var}:@var{a}=@var{b})} (or @samp{$@{@var{var}:@var{a}=@var{b}@}}) and its meaning is to take the value of the variable @var{var}, replace every @var{a} at the end of a word with @var{b} in that value, and substitute the resulting string. When we say ``at the end of a word'', we mean that @var{a} must appear either followed by whitespace or at the end of the value in order to be replaced; other occurrences of @var{a} in the value are unaltered. For example:@refill @example foo := a.o b.o l.a c.o bar := $(foo:.o=.c) @end example @noindent sets @samp{bar} to @samp{a.c b.c l.a c.c}. @xref{Setting, ,Setting Variables}. A substitution reference is shorthand for the @code{patsubst} expansion function (@pxref{Text Functions, ,Functions for String Substitution and Analysis}): @samp{$(@var{var}:@var{a}=@var{b})} is equivalent to @samp{$(patsubst %@var{a},%@var{b},@var{var})}. We provide substitution references as well as @code{patsubst} for compatibility with other implementations of @code{make}. @findex patsubst Another type of substitution reference lets you use the full power of the @code{patsubst} function. It has the same form @samp{$(@var{var}:@var{a}=@var{b})} described above, except that now @var{a} must contain a single @samp{%} character. This case is equivalent to @samp{$(patsubst @var{a},@var{b},$(@var{var}))}. @xref{Text Functions, ,Functions for String Substitution and Analysis}, for a description of the @code{patsubst} function.@refill @example @group @exdent For example: foo := a.o b.o l.a c.o bar := $(foo:%.o=%.c) @end group @end example @noindent sets @samp{bar} to @samp{a.c b.c l.a c.c}. @node Computed Names, , Substitution Refs, Advanced @subsection Computed Variable Names @cindex nested variable reference @cindex computed variable name @cindex variables, computed names @cindex variables, nested references @cindex variables, @samp{$} in name @cindex @code{$}, in variable name @cindex dollar sign (@code{$}), in variable name Computed variable names are a complicated concept needed only for sophisticated makefile programming. For most purposes you need not consider them, except to know that making a variable with a dollar sign in its name might have strange results. However, if you are the type that wants to understand everything, or you are actually interested in what they do, read on. Variables may be referenced inside the name of a variable. This is called a @dfn{computed variable name} or a @dfn{nested variable reference}. For example, @example x = y y = z a := $($(x)) @end example @noindent defines @code{a} as @samp{z}: the @samp{$(x)} inside @samp{$($(x))} expands to @samp{y}, so @samp{$($(x))} expands to @samp{$(y)} which in turn expands to @samp{z}. Here the name of the variable to reference is not stated explicitly; it is computed by expansion of @samp{$(x)}. The reference @samp{$(x)} here is nested within the outer variable reference. The previous example shows two levels of nesting, but any number of levels is possible. For example, here are three levels: @example x = y y = z z = u a := $($($(x))) @end example @noindent Here the innermost @samp{$(x)} expands to @samp{y}, so @samp{$($(x))} expands to @samp{$(y)} which in turn expands to @samp{z}; now we have @samp{$(z)}, which becomes @samp{u}. References to recursively-expanded variables within a variable name are re-expanded in the usual fashion. For example: @example x = $(y) y = z z = Hello a := $($(x)) @end example @noindent defines @code{a} as @samp{Hello}: @samp{$($(x))} becomes @samp{$($(y))} which becomes @samp{$(z)} which becomes @samp{Hello}. Nested variable references can also contain modified references and function invocations (@pxref{Functions, ,Functions for Transforming Text}), just like any other reference. For example, using the @code{subst} function (@pxref{Text Functions, ,Functions for String Substitution and Analysis}): @example @group x = variable1 variable2 := Hello y = $(subst 1,2,$(x)) z = y a := $($($(z))) @end group @end example @noindent eventually defines @code{a} as @samp{Hello}. It is doubtful that anyone would ever want to write a nested reference as convoluted as this one, but it works: @samp{$($($(z)))} expands to @samp{$($(y))} which becomes @samp{$($(subst 1,2,$(x)))}. This gets the value @samp{variable1} from @code{x} and changes it by substitution to @samp{variable2}, so that the entire string becomes @samp{$(variable2)}, a simple variable reference whose value is @samp{Hello}.@refill A computed variable name need not consist entirely of a single variable reference. It can contain several variable references, as well as some invariant text. For example, @example @group a_dirs := dira dirb 1_dirs := dir1 dir2 @end group @group a_files := filea fileb 1_files := file1 file2 @end group @group ifeq "$(use_a)" "yes" a1 := a else a1 := 1 endif @end group @group ifeq "$(use_dirs)" "yes" df := dirs else df := files endif dirs := $($(a1)_$(df)) @end group @end example @noindent will give @code{dirs} the same value as @code{a_dirs}, @code{1_dirs}, @code{a_files} or @code{1_files} depending on the settings of @code{use_a} and @code{use_dirs}.@refill Computed variable names can also be used in substitution references: @example @group a_objects := a.o b.o c.o 1_objects := 1.o 2.o 3.o sources := $($(a1)_objects:.o=.c) @end group @end example @noindent defines @code{sources} as either @samp{a.c b.c c.c} or @samp{1.c 2.c 3.c}, depending on the value of @code{a1}. The only restriction on this sort of use of nested variable references is that they cannot specify part of the name of a function to be called. This is because the test for a recognized function name is done before the expansion of nested references. For example, @example @group ifdef do_sort func := sort else func := strip endif @end group @group bar := a d b g q c @end group @group foo := $($(func) $(bar)) @end group @end example @noindent attempts to give @samp{foo} the value of the variable @samp{sort a d b g q c} or @samp{strip a d b g q c}, rather than giving @samp{a d b g q c} as the argument to either the @code{sort} or the @code{strip} function. This restriction could be removed in the future if that change is shown to be a good idea. You can also use computed variable names in the left-hand side of a variable assignment, or in a @code{define} directive, as in: @example dir = foo $(dir)_sources := $(wildcard $(dir)/*.c) define $(dir)_print = lpr $($(dir)_sources) endef @end example @noindent This example defines the variables @samp{dir}, @samp{foo_sources}, and @samp{foo_print}. Note that @dfn{nested variable references} are quite different from @dfn{recursively expanded variables} (@pxref{Flavors, ,The Two Flavors of Variables}), though both are used together in complex ways when doing makefile programming.@refill @node Values, Setting, Advanced, Using Variables @section How Variables Get Their Values @cindex variables, how they get their values @cindex value, how a variable gets it Variables can get values in several different ways: @itemize @bullet @item You can specify an overriding value when you run @code{make}. @xref{Overriding, ,Overriding Variables}. @item You can specify a value in the makefile, either with an assignment (@pxref{Setting, ,Setting Variables}) or with a verbatim definition (@pxref{Multi-Line, ,Defining Multi-Line Variables}).@refill @item Variables in the environment become @code{make} variables. @xref{Environment, ,Variables from the Environment}. @item Several @dfn{automatic} variables are given new values for each rule. Each of these has a single conventional use. @xref{Automatic Variables}. @item Several variables have constant initial values. @xref{Implicit Variables, ,Variables Used by Implicit Rules}. @end itemize @node Setting, Appending, Values, Using Variables @section Setting Variables @cindex setting variables @cindex variables, setting @cindex = @cindex := @cindex ::= @cindex ?= @cindex != To set a variable from the makefile, write a line starting with the variable name followed by @samp{=}, @samp{:=}, or @samp{::=}. Whatever follows the @samp{=}, @samp{:=}, or @samp{::=} on the line becomes the value. For example, @example objects = main.o foo.o bar.o utils.o @end example @noindent defines a variable named @code{objects}. Whitespace around the variable name and immediately after the @samp{=} is ignored. Variables defined with @samp{=} are @dfn{recursively expanded} variables. Variables defined with @samp{:=} or @samp{::=} are @dfn{simply expanded} variables; these definitions can contain variable references which will be expanded before the definition is made. @xref{Flavors, ,The Two Flavors of Variables}. The variable name may contain function and variable references, which are expanded when the line is read to find the actual variable name to use. There is no limit on the length of the value of a variable except the amount of memory on the computer. You can split the value of a variable into multiple physical lines for readability (@pxref{Splitting Lines, ,Splitting Long Lines}). Most variable names are considered to have the empty string as a value if you have never set them. Several variables have built-in initial values that are not empty, but you can set them in the usual ways (@pxref{Implicit Variables, ,Variables Used by Implicit Rules}). Several special variables are set automatically to a new value for each rule; these are called the @dfn{automatic} variables (@pxref{Automatic Variables}). If you'd like a variable to be set to a value only if it's not already set, then you can use the shorthand operator @samp{?=} instead of @samp{=}. These two settings of the variable @samp{FOO} are identical (@pxref{Origin Function, ,The @code{origin} Function}): @example FOO ?= bar @end example @noindent and @example ifeq ($(origin FOO), undefined) FOO = bar endif @end example The shell assignment operator @samp{!=} 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: @example hash != printf '\043' file_list != find . -name '*.c' @end example If the result of the execution could produce a @code{$}, and you don't intend what follows that to be interpreted as a make variable or function reference, then you must replace every @code{$} with @code{$$} as part of the execution. Alternatively, you can set a simply expanded variable to the result of running a program using the @code{shell} function call. @xref{Shell Function, , The @code{shell} Function}. For example: @example 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 @cindex += @cindex appending to variables @cindex variables, appending to Often it is useful to add more text to the value of a variable already defined. You do this with a line containing @samp{+=}, like this: @example objects += another.o @end example @noindent This takes the value of the variable @code{objects}, and adds the text @samp{another.o} to it (preceded by a single space, if it has a value already). Thus: @example objects = main.o foo.o bar.o utils.o objects += another.o @end example @noindent sets @code{objects} to @samp{main.o foo.o bar.o utils.o another.o}. Using @samp{+=} is similar to: @example objects = main.o foo.o bar.o utils.o objects := $(objects) another.o @end example @noindent but differs in ways that become important when you use more complex values. When the variable in question has not been defined before, @samp{+=} acts just like normal @samp{=}: it defines a recursively-expanded variable. However, when there @emph{is} a previous definition, exactly what @samp{+=} does depends on what flavor of variable you defined originally. @xref{Flavors, ,The Two Flavors of Variables}, for an explanation of the two flavors of variables. When you add to a variable's value with @samp{+=}, @code{make} acts essentially as if you had included the extra text in the initial definition of the variable. If you defined it first with @samp{:=} or @samp{::=}, making it a simply-expanded variable, @samp{+=} adds to that simply-expanded definition, and expands the new text before appending it to the old value just as @samp{:=} does (see @ref{Setting, ,Setting Variables}, for a full explanation of @samp{:=} or @samp{::=}). In fact, @example variable := value variable += more @end example @noindent is exactly equivalent to: @noindent @example variable := value variable := $(variable) more @end example On the other hand, when you use @samp{+=} with a variable that you defined first to be recursively-expanded using plain @samp{=}, @code{make} does something a bit different. Recall that when you define a recursively-expanded variable, @code{make} does not expand the value you set for variable and function references immediately. Instead it stores the text verbatim, and saves these variable and function references to be expanded later, when you refer to the new variable (@pxref{Flavors, ,The Two Flavors of Variables}). When you use @samp{+=} on a recursively-expanded variable, it is this unexpanded text to which @code{make} appends the new text you specify. @example @group variable = value variable += more @end group @end example @noindent is roughly equivalent to: @example @group temp = value variable = $(temp) more @end group @end example @noindent except that of course it never defines a variable called @code{temp}. The importance of this comes when the variable's old value contains variable references. Take this common example: @example CFLAGS = $(includes) -O @dots{} CFLAGS += -pg # enable profiling @end example @noindent The first line defines the @code{CFLAGS} variable with a reference to another variable, @code{includes}. (@code{CFLAGS} is used by the rules for C compilation; @pxref{Catalogue of Rules, ,Catalogue of Built-In Rules}.) Using @samp{=} for the definition makes @code{CFLAGS} a recursively-expanded variable, meaning @w{@samp{$(includes) -O}} is @emph{not} expanded when @code{make} processes the definition of @code{CFLAGS}. Thus, @code{includes} need not be defined yet for its value to take effect. It only has to be defined before any reference to @code{CFLAGS}. If we tried to append to the value of @code{CFLAGS} without using @samp{+=}, we might do it like this: @example CFLAGS := $(CFLAGS) -pg # enable profiling @end example @noindent This is pretty close, but not quite what we want. Using @samp{:=} redefines @code{CFLAGS} as a simply-expanded variable; this means @code{make} expands the text @w{@samp{$(CFLAGS) -pg}} before setting the variable. If @code{includes} is not yet defined, we get @w{@samp{ -O -pg}}, and a later definition of @code{includes} will have no effect. Conversely, by using @samp{+=} we set @code{CFLAGS} to the @emph{unexpanded} value @w{@samp{$(includes) -O -pg}}. Thus we preserve the reference to @code{includes}, so if that variable gets defined at any later point, a reference like @samp{$(CFLAGS)} still uses its value. @node Override Directive, Multi-Line, Appending, Using Variables @section The @code{override} Directive @findex override @cindex overriding with @code{override} @cindex variables, overriding If a variable has been set with a command argument (@pxref{Overriding, ,Overriding Variables}), then ordinary assignments in the makefile are ignored. If you want to set the variable in the makefile even though it was set with a command argument, you can use an @code{override} directive, which is a line that looks like this:@refill @example override @var{variable} = @var{value} @end example @noindent or @example override @var{variable} := @var{value} @end example To append more text to a variable defined on the command line, use: @example override @var{variable} += @var{more text} @end example @noindent @xref{Appending, ,Appending More Text to Variables}. Variable assignments marked with the @code{override} flag have a higher priority than all other assignments, except another @code{override}. Subsequent assignments or appends to this variable which are not marked @code{override} will be ignored. The @code{override} directive was not invented for escalation in the war between makefiles and command arguments. It was invented so you can alter and add to values that the user specifies with command arguments. For example, suppose you always want the @samp{-g} switch when you run the C compiler, but you would like to allow the user to specify the other switches with a command argument just as usual. You could use this @code{override} directive: @example override CFLAGS += -g @end example You can also use @code{override} directives with @code{define} directives. This is done as you might expect: @example override define foo = bar endef @end example @noindent @iftex See the next section for information about @code{define}. @end iftex @ifnottex @xref{Multi-Line, ,Defining Multi-Line Variables}. @end ifnottex @node Multi-Line, Undefine Directive, Override Directive, Using Variables @section Defining Multi-Line Variables @findex define @findex endef @cindex multi-line variable definition @cindex variables, multi-line @cindex verbatim variable definition @cindex defining variables verbatim @cindex variables, defining verbatim Another way to set the value of a variable is to use the @code{define} directive. This directive has an unusual syntax which allows newline characters to be included in the value, which is convenient for defining both canned sequences of commands (@pxref{Canned Recipes, ,Defining Canned Recipes}), and also sections of makefile syntax to use with @code{eval} (@pxref{Eval Function}).@refill The @code{define} directive is followed on the same line by the name of the variable being defined and an (optional) assignment operator, and nothing more. The value to give the variable appears on the following lines. The end of the value is marked by a line containing just the word @code{endef}. Aside from this difference in syntax, @code{define} works just like any other variable definition. The variable name may contain function and variable references, which are expanded when the directive is read to find the actual variable name to use. The final newline before the @code{endef} is not included in the value; if you want your value to contain a trailing newline you must include a blank line. For example in order to define a variable that contains a newline character you must use @emph{two} empty lines, not one: @example define newline endef @end example You may omit the variable assignment operator if you prefer. If omitted, @code{make} assumes it to be @samp{=} and creates a recursively-expanded variable (@pxref{Flavors, ,The Two Flavors of Variables}). When using a @samp{+=} operator, the value is appended to the previous value as with any other append operation: with a single space separating the old and new values. You may nest @code{define} directives: @code{make} will keep track of nested directives and report an error if they are not all properly closed with @code{endef}. Note that lines beginning with the recipe prefix character are considered part of a recipe, so any @code{define} or @code{endef} strings appearing on such a line will not be considered @code{make} directives. @example define two-lines echo foo echo $(bar) endef @end example @need 800 When used in a recipe, the previous example is functionally equivalent to this: @example two-lines = echo foo; echo $(bar) @end example @noindent since two commands separated by semicolon behave much like two separate shell commands. However, note that using two separate lines means @code{make} will invoke the shell twice, running an independent sub-shell for each line. @xref{Execution, ,Recipe Execution}. If you want variable definitions made with @code{define} to take precedence over command-line variable definitions, you can use the @code{override} directive together with @code{define}: @example override define two-lines = foo $(bar) endef @end example @noindent @xref{Override Directive, ,The @code{override} Directive}. @node Undefine Directive, Environment, Multi-Line, Using Variables @section Undefining Variables @findex undefine @cindex undefining variable If you want to clear a variable, setting its value to empty is usually sufficient. Expanding such a variable will yield the same result (empty string) regardless of whether it was set or not. However, if you are using the @code{flavor} (@pxref{Flavor Function}) and @code{origin} (@pxref{Origin Function}) functions, there is a difference between a variable that was never set and a variable with an empty value. In such situations you may want to use the @code{undefine} directive to make a variable appear as if it was never set. For example: @example foo := foo bar = bar undefine foo undefine bar $(info $(origin foo)) $(info $(flavor bar)) @end example This example will print ``undefined'' for both variables. If you want to undefine a command-line variable definition, you can use the @code{override} directive together with @code{undefine}, similar to how this is done for variable definitions: @example override undefine CFLAGS @end example @node Environment, Target-specific, Undefine Directive, Using Variables @section Variables from the Environment @cindex variables, environment @cindex environment Variables in @code{make} can come from the environment in which @code{make} is run. Every environment variable that @code{make} sees when it starts up is transformed into a @code{make} variable with the same name and value. However, an explicit assignment in the makefile, or with a command argument, overrides the environment. (If the @samp{-e} flag is specified, then values from the environment override assignments in the makefile. @xref{Options Summary, ,Summary of Options}. But this is not recommended practice.) Thus, by setting the variable @code{CFLAGS} in your environment, you can cause all C compilations in most makefiles to use the compiler switches you prefer. This is safe for variables with standard or conventional meanings because you know that no makefile will use them for other things. (Note this is not totally reliable; some makefiles set @code{CFLAGS} explicitly and therefore are not affected by the value in the environment.) When @code{make} runs a recipe, variables defined in the makefile are placed into the environment of each shell. This allows you to pass values to sub-@code{make} invocations (@pxref{Recursion, ,Recursive Use of @code{make}}). By default, only variables that came from the environment or the command line are passed to recursive invocations. You can use the @code{export} directive to pass other variables. @xref{Variables/Recursion, , Communicating Variables to a Sub-@code{make}}, for full details. Other use of variables from the environment is not recommended. It is not wise for makefiles to depend for their functioning on environment variables set up outside their control, since this would cause different users to get different results from the same makefile. This is against the whole purpose of most makefiles. @cindex SHELL, import from environment Such problems would be especially likely with the variable @code{SHELL}, which is normally present in the environment to specify the user's choice of interactive shell. It would be very undesirable for this choice to affect @code{make}; so, @code{make} handles the @code{SHELL} environment variable in a special way; see @ref{Choosing the Shell}.@refill @node Target-specific, Pattern-specific, Environment, Using Variables @section Target-specific Variable Values @cindex target-specific variables @cindex variables, target-specific Variable values in @code{make} are usually global; that is, they are the same regardless of where they are evaluated (unless they're reset, of course). One exception to that is automatic variables (@pxref{Automatic Variables}). The other exception is @dfn{target-specific variable values}. This feature allows you to define different values for the same variable, based on the target that @code{make} is currently building. As with automatic variables, these values are only available within the context of a target's recipe (and in other target-specific assignments). Set a target-specific variable value like this: @example @var{target} @dots{} : @var{variable-assignment} @end example Target-specific variable assignments can be prefixed with any or all of the special keywords @code{export}, @code{override}, or @code{private}; these apply their normal behavior to this instance of the variable only. Multiple @var{target} values create a target-specific variable value for each member of the target list individually. The @var{variable-assignment} can be any valid form of assignment; recursive (@samp{=}), simple (@samp{:=} or @samp{::=}), appending (@samp{+=}), or conditional (@samp{?=}). All variables that appear within the @var{variable-assignment} are evaluated within the context of the target: thus, any previously-defined target-specific variable values will be in effect. Note that this variable is actually distinct from any ``global'' value: the two variables do not have to have the same flavor (recursive vs.@: simple). Target-specific variables have the same priority as any other makefile variable. Variables provided on the command line (and in the environment if the @samp{-e} option is in force) will take precedence. Specifying the @code{override} directive will allow the target-specific variable value to be preferred. There is one more special feature of target-specific variables: when you define a target-specific variable that variable value is also in effect for all prerequisites of this target, and all their prerequisites, etc.@: (unless those prerequisites override that variable with their own target-specific variable value). So, for example, a statement like this: @example prog : CFLAGS = -g prog : prog.o foo.o bar.o @end example @noindent will set @code{CFLAGS} to @samp{-g} in the recipe for @file{prog}, but it will also set @code{CFLAGS} to @samp{-g} in the recipes that create @file{prog.o}, @file{foo.o}, and @file{bar.o}, and any recipes which create their prerequisites. Be aware that a given prerequisite will only be built once per invocation of make, at most. If the same file is a prerequisite of multiple targets, and each of those targets has a different value for the same target-specific variable, then the first target to be built will cause that prerequisite to be built and the prerequisite will inherit the target-specific value from the first target. It will ignore the target-specific values from any other targets. @node Pattern-specific, Suppressing Inheritance, Target-specific, Using Variables @section Pattern-specific Variable Values @cindex pattern-specific variables @cindex variables, pattern-specific In addition to target-specific variable values (@pxref{Target-specific, ,Target-specific Variable Values}), GNU @code{make} supports pattern-specific variable values. In this form, the variable is defined for any target that matches the pattern specified. Set a pattern-specific variable value like this: @example @var{pattern} @dots{} : @var{variable-assignment} @end example where @var{pattern} is a %-pattern. As with target-specific variable values, multiple @var{pattern} values create a pattern-specific variable value for each pattern individually. The @var{variable-assignment} can be any valid form of assignment. Any command line variable setting will take precedence, unless @code{override} is specified. For example: @example %.o : CFLAGS = -O @end example @noindent will assign @code{CFLAGS} the value of @samp{-O} for all targets matching the pattern @code{%.o}. If a target matches more than one pattern, the matching pattern-specific variables with longer stems are interpreted first. This results in more specific variables taking precedence over the more generic ones, for example: @example %.o: %.c $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@@ lib/%.o: CFLAGS := -fPIC -g %.o: CFLAGS := -g all: foo.o lib/bar.o @end example In this example the first definition of the @code{CFLAGS} variable will be used to update @file{lib/bar.o} even though the second one also applies to this target. Pattern-specific variables which result in the same stem length are considered in the order in which they were defined in the makefile. Pattern-specific variables are searched after any target-specific variables defined explicitly for that target, and before target-specific variables defined for the parent target. @node Suppressing Inheritance, Special Variables, Pattern-specific, Using Variables @section Suppressing Inheritance @findex private @cindex suppressing inheritance @cindex inheritance, suppressing As described in previous sections, @code{make} variables are inherited by prerequisites. This capability allows you to modify the behavior of a prerequisite based on which targets caused it to be rebuilt. For example, you might set a target-specific variable on a @code{debug} target, then running @samp{make debug} will cause that variable to be inherited by all prerequisites of @code{debug}, while just running @samp{make all} (for example) would not have that assignment. Sometimes, however, you may not want a variable to be inherited. For these situations, @code{make} provides the @code{private} modifier. Although this modifier can be used with any variable assignment, it makes the most sense with target- and pattern-specific variables. Any variable marked @code{private} will be visible to its local target but will not be inherited by prerequisites of that target. A global variable marked @code{private} will be visible in the global scope but will not be inherited by any target, and hence will not be visible in any recipe. As an example, consider this makefile: @example EXTRA_CFLAGS = prog: private EXTRA_CFLAGS = -L/usr/local/lib prog: a.o b.o @end example Due to the @code{private} modifier, @code{a.o} and @code{b.o} will not inherit the @code{EXTRA_CFLAGS} variable assignment from the @code{prog} target. @node Special Variables, , Suppressing Inheritance, Using Variables @comment node-name, next, previous, up @section Other Special Variables @cindex makefiles, and special variables @cindex special variables GNU @code{make} supports some variables that have special properties. @table @code @vindex MAKEFILE_LIST @r{(list of parsed makefiles)} @cindex makefiles, and @code{MAKEFILE_LIST} variable @cindex including (@code{MAKEFILE_LIST} variable) @item MAKEFILE_LIST Contains the name of each makefile that is parsed by @code{make}, in the order in which it was parsed. The name is appended just before @code{make} begins to parse the makefile. Thus, if the first thing a makefile does is examine the last word in this variable, it will be the name of the current makefile. Once the current makefile has used @code{include}, however, the last word will be the just-included makefile. If a makefile named @code{Makefile} has this content: @example @group name1 := $(lastword $(MAKEFILE_LIST)) include inc.mk name2 := $(lastword $(MAKEFILE_LIST)) all: @@echo name1 = $(name1) @@echo name2 = $(name2) @end group @end example @noindent then you would expect to see this output: @example @group name1 = Makefile name2 = inc.mk @end group @end example @vindex .DEFAULT_GOAL @r{(define default goal)} @item .DEFAULT_GOAL Sets the default goal to be used if no targets were specified on the command line (@pxref{Goals, , Arguments to Specify the Goals}). The @code{.DEFAULT_GOAL} variable allows you to discover the current default goal, restart the default goal selection algorithm by clearing its value, or to explicitly set the default goal. The following example illustrates these cases: @example @group # Query the default goal. ifeq ($(.DEFAULT_GOAL),) $(warning no default goal is set) endif .PHONY: foo foo: ; @@echo $@@ $(warning default goal is $(.DEFAULT_GOAL)) # Reset the default goal. .DEFAULT_GOAL := .PHONY: bar bar: ; @@echo $@@ $(warning default goal is $(.DEFAULT_GOAL)) # Set our own. .DEFAULT_GOAL := foo @end group @end example This makefile prints: @example @group no default goal is set default goal is foo default goal is bar foo @end group @end example Note that assigning more than one target name to @code{.DEFAULT_GOAL} is invalid and will result in an error. @vindex MAKE_RESTARTS @r{(number of times @code{make} has restarted)} @item MAKE_RESTARTS This variable is set only if this instance of @code{make} has restarted (@pxref{Remaking Makefiles, , How Makefiles Are Remade}): it will contain the number of times this instance has restarted. Note this is not the same as recursion (counted by the @code{MAKELEVEL} variable). You should not set, modify, or export this variable. @vindex MAKE_TERMOUT @r{(whether stdout is a terminal)} @vindex MAKE_TERMERR @r{(whether stderr is a terminal)} @item MAKE_TERMOUT @itemx MAKE_TERMERR When @code{make} starts it will check whether stdout and stderr will show their output on a terminal. If so, it will set @code{MAKE_TERMOUT} and @code{MAKE_TERMERR}, respectively, to the name of the terminal device (or @code{true} if this cannot be determined). If set these variables will be marked for export. These variables will not be changed by @code{make} and they will not be modified if already set. These values can be used (particularly in combination with output synchronization (@pxref{Parallel Output, ,Output During Parallel Execution}) to determine whether @code{make} itself is writing to a terminal; they can be tested to decide whether to force recipe commands to generate colorized output for example. If you invoke a sub-@code{make} and redirect its stdout or stderr it is your responsibility to reset or unexport these variables as well, if your makefiles rely on them. @vindex .RECIPEPREFIX @r{(change the recipe prefix character)} @item .RECIPEPREFIX The first character of the value of this variable is used as the character make assumes is introducing a recipe line. If the variable is empty (as it is by default) that character is the standard tab character. For example, this is a valid makefile: @example @group .RECIPEPREFIX = > all: > @@echo Hello, world @end group @end example The value of @code{.RECIPEPREFIX} can be changed multiple times; once set it stays in effect for all rules parsed until it is modified. @vindex .VARIABLES @r{(list of variables)} @item .VARIABLES Expands to a list of the @emph{names} of all global variables defined so far. This includes variables which have empty values, as well as built-in variables (@pxref{Implicit Variables, , Variables Used by Implicit Rules}), but does not include any variables which are only defined in a target-specific context. Note that any value you assign to this variable will be ignored; it will always return its special value. @c @vindex .TARGETS @r{(list of targets)} @c @item .TARGETS @c The second special variable is @code{.TARGETS}. When expanded, the @c value consists of a list of all targets defined in all makefiles read @c up until that point. Note it's not enough for a file to be simply @c mentioned in the makefile to be listed in this variable, even if it @c would match an implicit rule and become an ``implicit target''. The @c file must appear as a target, on the left-hand side of a ``:'', to be @c considered a target for the purposes of this variable. @vindex .FEATURES @r{(list of supported features)} @item .FEATURES Expands to a list of special features supported by this version of @code{make}. Possible values include, but are not limited to: @table @samp @item archives Supports @code{ar} (archive) files using special file name syntax. @xref{Archives, ,Using @code{make} to Update Archive Files}. @item check-symlink Supports the @code{-L} (@code{--check-symlink-times}) flag. @xref{Options Summary, ,Summary of Options}. @item else-if Supports ``else if'' non-nested conditionals. @xref{Conditional Syntax, ,Syntax of Conditionals}. @item jobserver Supports ``job server'' enhanced parallel builds. @xref{Parallel, ,Parallel Execution}. @item oneshell Supports the @code{.ONESHELL} special target. @xref{One Shell, ,Using One Shell}. @item order-only Supports order-only prerequisites. @xref{Prerequisite Types, ,Types of Prerequisites}. @item second-expansion Supports secondary expansion of prerequisite lists. @item shortest-stem Uses the ``shortest stem'' method of choosing which pattern, of multiple applicable options, will be used. @xref{Pattern Match, ,How Patterns Match}. @item target-specific Supports target-specific and pattern-specific variable assignments. @xref{Target-specific, ,Target-specific Variable Values}. @item undefine Supports the @code{undefine} directive. @xref{Undefine Directive}. @item guile Has GNU Guile available as an embedded extension language. @xref{Guile Integration, ,GNU Guile Integration}. @item load Supports dynamically loadable objects for creating custom extensions. @xref{Loading Objects, ,Loading Dynamic Objects}. @end table @vindex .INCLUDE_DIRS @r{(list of include directories)} @item .INCLUDE_DIRS Expands to a list of directories that @code{make} searches for included makefiles (@pxref{Include, , Including Other Makefiles}). @vindex .EXTRA_PREREQS @r{(prerequisites not added to automatic variables)} @item .EXTRA_PREREQS Each word in this variable is a new prerequisite which is added to targets for which it is set. These prerequisites differ from normal prerequisites in that they do not appear in any of the automatic variables (@pxref{Automatic Variables}). This allows prerequisites to be defined which do not impact the recipe. Consider a rule to link a program: @example myprog: myprog.o file1.o file2.o $(CC) $(CFLAGS) $(LDFLAGS) -o $@@ $^ $(LDLIBS) @end example Now suppose you want to enhance this makefile to ensure that updates to the compiler cause the program to be re-linked. You can add the compiler as a prerequisite, but you must ensure that it's not passed as an argument to link command. You'll need something like this: @example myprog: myprog.o file1.o file2.o $(CC) $(CC) $(CFLAGS) $(LDFLAGS) -o $@@ $(filter-out $(CC),$^) $(LDLIBS) @end example Then consider having multiple extra prerequisites: they would all have to be filtered out. Using @code{.EXTRA_PREREQS} and target-specific variables provides a simpler solution: @example myprog: myprog.o file1.o file2.o $(CC) $(CFLAGS) $(LDFLAGS) -o $@@ $^ $(LDLIBS) myprog: .EXTRA_PREREQS = $(CC) @end example This feature can also be useful if you want to add prerequisites to a makefile you cannot easily modify: you can create a new file such as @file{extra.mk}: @example myprog: .EXTRA_PREREQS = $(CC) @end example then invoke @code{make -f extra.mk -f Makefile}. Setting @code{.EXTRA_PREREQS} globally will cause those prerequisites to be added to all targets (which did not themselves override it with a target-specific value). Note @code{make} is smart enough not to add a prerequisite listed in @code{.EXTRA_PREREQS} as a prerequisite to itself. @end table @node Conditionals, Functions, Using Variables, Top @chapter Conditional Parts of Makefiles @cindex conditionals A @dfn{conditional} directive causes part of a makefile to be obeyed or ignored depending on the values of variables. Conditionals can compare the value of one variable to another, or the value of a variable to a constant string. Conditionals control what @code{make} actually ``sees'' in the makefile, so they @emph{cannot} be used to control recipes at the time of execution.@refill @menu * Conditional Example:: Example of a conditional * Conditional Syntax:: The syntax of conditionals. * Testing Flags:: Conditionals that test flags. @end menu @node Conditional Example, Conditional Syntax, Conditionals, Conditionals @section Example of a Conditional The following example of a conditional tells @code{make} to use one set of libraries if the @code{CC} variable is @samp{gcc}, and a different set of libraries otherwise. It works by controlling which of two recipe lines will be used for the rule. The result is that @samp{CC=gcc} as an argument to @code{make} changes not only which compiler is used but also which libraries are linked. @example libs_for_gcc = -lgnu normal_libs = foo: $(objects) ifeq ($(CC),gcc) $(CC) -o foo $(objects) $(libs_for_gcc) else $(CC) -o foo $(objects) $(normal_libs) endif @end example This conditional uses three directives: one @code{ifeq}, one @code{else} and one @code{endif}. The @code{ifeq} directive begins the conditional, and specifies the condition. It contains two arguments, separated by a comma and surrounded by parentheses. Variable substitution is performed on both arguments and then they are compared. The lines of the makefile following the @code{ifeq} are obeyed if the two arguments match; otherwise they are ignored. The @code{else} directive causes the following lines to be obeyed if the previous conditional failed. In the example above, this means that the second alternative linking command is used whenever the first alternative is not used. It is optional to have an @code{else} in a conditional. The @code{endif} directive ends the conditional. Every conditional must end with an @code{endif}. Unconditional makefile text follows. As this example illustrates, conditionals work at the textual level: the lines of the conditional are treated as part of the makefile, or ignored, according to the condition. This is why the larger syntactic units of the makefile, such as rules, may cross the beginning or the end of the conditional. When the variable @code{CC} has the value @samp{gcc}, the above example has this effect: @example foo: $(objects) $(CC) -o foo $(objects) $(libs_for_gcc) @end example @noindent When the variable @code{CC} has any other value, the effect is this: @example foo: $(objects) $(CC) -o foo $(objects) $(normal_libs) @end example Equivalent results can be obtained in another way by conditionalizing a variable assignment and then using the variable unconditionally: @example libs_for_gcc = -lgnu normal_libs = ifeq ($(CC),gcc) libs=$(libs_for_gcc) else libs=$(normal_libs) endif foo: $(objects) $(CC) -o foo $(objects) $(libs) @end example @node Conditional Syntax, Testing Flags, Conditional Example, Conditionals @section Syntax of Conditionals @findex ifdef @findex ifeq @findex ifndef @findex ifneq @findex else @findex endif The syntax of a simple conditional with no @code{else} is as follows: @example @var{conditional-directive} @var{text-if-true} endif @end example @noindent The @var{text-if-true} may be any lines of text, to be considered as part of the makefile if the condition is true. If the condition is false, no text is used instead. The syntax of a complex conditional is as follows: @example @var{conditional-directive} @var{text-if-true} else @var{text-if-false} endif @end example or: @example @var{conditional-directive-one} @var{text-if-one-is-true} else @var{conditional-directive-two} @var{text-if-two-is-true} else @var{text-if-one-and-two-are-false} endif @end example @noindent There can be as many ``@code{else} @var{conditional-directive}'' clauses as necessary. Once a given condition is true, @var{text-if-true} is used and no other clause is used; if no condition is true then @var{text-if-false} is used. The @var{text-if-true} and @var{text-if-false} can be any number of lines of text. The syntax of the @var{conditional-directive} is the same whether the conditional is simple or complex; after an @code{else} or not. There are four different directives that test different conditions. Here is a table of them: @table @code @item ifeq (@var{arg1}, @var{arg2}) @itemx ifeq '@var{arg1}' '@var{arg2}' @itemx ifeq "@var{arg1}" "@var{arg2}" @itemx ifeq "@var{arg1}" '@var{arg2}' @itemx ifeq '@var{arg1}' "@var{arg2}" Expand all variable references in @var{arg1} and @var{arg2} and compare them. If they are identical, the @var{text-if-true} is effective; otherwise, the @var{text-if-false}, if any, is effective. Often you want to test if a variable has a non-empty value. When the value results from complex expansions of variables and functions, expansions you would consider empty may actually contain whitespace characters and thus are not seen as empty. However, you can use the @code{strip} function (@pxref{Text Functions}) to avoid interpreting whitespace as a non-empty value. For example: @example @group ifeq ($(strip $(foo)),) @var{text-if-empty} endif @end group @end example @noindent will evaluate @var{text-if-empty} even if the expansion of @code{$(foo)} contains whitespace characters. @item ifneq (@var{arg1}, @var{arg2}) @itemx ifneq '@var{arg1}' '@var{arg2}' @itemx ifneq "@var{arg1}" "@var{arg2}" @itemx ifneq "@var{arg1}" '@var{arg2}' @itemx ifneq '@var{arg1}' "@var{arg2}" Expand all variable references in @var{arg1} and @var{arg2} and compare them. If they are different, the @var{text-if-true} is 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. 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 foo = bar ifdef $(foo) frobozz = yes endif @end example The variable reference @code{$(foo)} is expanded, yielding @code{bar}, which is considered to be the name of a variable. The variable @code{bar} is not expanded, but its value is examined to determine if it is non-empty. Note that @code{ifdef} only tests whether a variable has a value. It does not expand the variable to see if that value is nonempty. Consequently, tests using @code{ifdef} return true for all definitions except those like @code{foo =}. To test for an empty value, use @w{@code{ifeq ($(foo),)}}. For example, @example bar = foo = $(bar) ifdef foo frobozz = yes else frobozz = no endif @end example @noindent sets @samp{frobozz} to @samp{yes}, while: @example foo = ifdef foo frobozz = yes else frobozz = no endif @end example @noindent sets @samp{frobozz} to @samp{no}. @item ifndef @var{variable-name} If the variable @var{variable-name} has an empty value, the @var{text-if-true} is effective; otherwise, the @var{text-if-false}, if any, is effective. The rules for expansion and testing of @var{variable-name} are identical to the @code{ifdef} directive. @end table Extra spaces are allowed and ignored at the beginning of the conditional directive line, but a tab is not allowed. (If the line begins with a tab, it will be considered part of a recipe for a rule.) Aside from this, extra spaces or tabs may be inserted with no effect anywhere except within the directive name or within an argument. A comment starting with @samp{#} may appear at the end of the line. The other two directives that play a part in a conditional are @code{else} and @code{endif}. Each of these directives is written as one word, with no arguments. Extra spaces are allowed and ignored at the beginning of the line, and spaces or tabs at the end. A comment starting with @samp{#} may appear at the end of the line. Conditionals affect which lines of the makefile @code{make} uses. If the condition is true, @code{make} reads the lines of the @var{text-if-true} as part of the makefile; if the condition is false, @code{make} ignores those lines completely. It follows that syntactic units of the makefile, such as rules, may safely be split across the beginning or the end of the conditional.@refill @code{make} evaluates conditionals when it reads a makefile. Consequently, you cannot use automatic variables in the tests of conditionals because they are not defined until recipes are run (@pxref{Automatic Variables}). To prevent intolerable confusion, it is not permitted to start a conditional in one makefile and end it in another. However, you may write an @code{include} directive within a conditional, provided you do not attempt to terminate the conditional inside the included file. @node Testing Flags, , Conditional Syntax, Conditionals @section Conditionals that Test Flags You can write a conditional that tests @code{make} command flags such as @samp{-t} by using the variable @code{MAKEFLAGS} together with the @code{findstring} function (@pxref{Text Functions, , Functions for String Substitution and Analysis}). This is useful when @code{touch} is not enough to make a file appear up to date. The @code{findstring} function determines whether one string appears as a substring of another. If you want to test for the @samp{-t} flag, use @samp{t} as the first string and the value of @code{MAKEFLAGS} as the other. For example, here is how to arrange to use @samp{ranlib -t} to finish marking an archive file up to date: @example archive.a: @dots{} ifneq (,$(findstring t,$(MAKEFLAGS))) +touch archive.a +ranlib -t archive.a else ranlib archive.a endif @end example @noindent The @samp{+} prefix marks those recipe lines as ``recursive'' so that they will be executed despite use of the @samp{-t} flag. @xref{Recursion, ,Recursive Use of @code{make}}. @node Functions, Running, Conditionals, Top @chapter Functions for Transforming Text @cindex functions @dfn{Functions} allow you to do text processing in the makefile to compute the files to operate on or the commands to use in recipes. You use a function in a @dfn{function call}, where you give the name of the function and some text (the @dfn{arguments}) for the function to operate on. The result of the function's processing is substituted into the makefile at the point of the call, just as a variable might be substituted. @menu * Syntax of Functions:: How to write a function call. * Text Functions:: General-purpose text manipulation functions. * File Name Functions:: Functions for manipulating file names. * Conditional Functions:: Functions that implement conditions. * Foreach Function:: Repeat some text with controlled variation. * File Function:: Write text to a file. * Call Function:: Expand a user-defined function. * Value Function:: Return the un-expanded value of a variable. * Eval Function:: Evaluate the arguments as makefile syntax. * Origin Function:: Find where a variable got its value. * Flavor Function:: Find out the flavor of a variable. * Make Control Functions:: Functions that control how make runs. * Shell Function:: Substitute the output of a shell command. * Guile Function:: Use GNU Guile embedded scripting language. @end menu @node Syntax of Functions, Text Functions, Functions, Functions @section Function Call Syntax @cindex @code{$}, in function call @cindex dollar sign (@code{$}), in function call @cindex arguments of functions @cindex functions, syntax of A function call resembles a variable reference. It can appear anywhere a variable reference can appear, and it is expanded using the same rules as variable references. A function call looks like this: @example $(@var{function} @var{arguments}) @end example @noindent or like this: @example $@{@var{function} @var{arguments}@} @end example Here @var{function} is a function name; one of a short list of names that are part of @code{make}. You can also essentially create your own functions by using the @code{call} built-in function. The @var{arguments} are the arguments of the function. They are separated from the function name by one or more spaces or tabs, and if there is more than one argument, then they are separated by commas. Such whitespace and commas are not part of an argument's value. The delimiters which you use to surround the function call, whether parentheses or braces, can appear in an argument only in matching pairs; the other kind of delimiters may appear singly. If the arguments themselves contain other function calls or variable references, it is wisest to use the same kind of delimiters for all the references; write @w{@samp{$(subst a,b,$(x))}}, not @w{@samp{$(subst a,b,$@{x@})}}. This is because it is clearer, and because only one type of delimiter is matched to find the end of the reference. The text written for each argument is processed by substitution of variables and function calls to produce the argument value, which is the text on which the function acts. The substitution is done in the order in which the arguments appear. Commas and unmatched parentheses or braces cannot appear in the text of an argument as written; leading spaces cannot appear in the text of the first argument as written. These characters can be put into the argument value by variable substitution. First define variables @code{comma} and @code{space} whose values are isolated comma and space characters, then substitute these variables where such characters are wanted, like this: @example @group comma:= , empty:= space:= $(empty) $(empty) foo:= a b c bar:= $(subst $(space),$(comma),$(foo)) # @r{bar is now `a,b,c'.} @end group @end example @noindent Here the @code{subst} function replaces each space with a comma, through the value of @code{foo}, and substitutes the result. @node Text Functions, File Name Functions, Syntax of Functions, Functions @section Functions for String Substitution and Analysis @cindex functions, for text Here are some functions that operate on strings: @table @code @item $(subst @var{from},@var{to},@var{text}) @findex subst Performs a textual replacement on the text @var{text}: each occurrence of @var{from} is replaced by @var{to}. The result is substituted for the function call. For example, @example $(subst ee,EE,feet on the street) @end example produces the value @samp{fEEt on the strEEt}. @item $(patsubst @var{pattern},@var{replacement},@var{text}) @findex patsubst Finds whitespace-separated words in @var{text} that match @var{pattern} and replaces them with @var{replacement}. Here @var{pattern} may contain a @samp{%} which acts as a wildcard, matching any number of any characters within a word. If @var{replacement} also contains a @samp{%}, the @samp{%} is replaced by the text that matched the @samp{%} in @var{pattern}. Only the first @samp{%} in the @var{pattern} and @var{replacement} is treated this way; any subsequent @samp{%} is unchanged.@refill @cindex @code{%}, quoting in @code{patsubst} @cindex @code{%}, quoting with @code{\} (backslash) @cindex @code{\} (backslash), to quote @code{%} @cindex backslash (@code{\}), to quote @code{%} @cindex quoting @code{%}, in @code{patsubst} @samp{%} characters in @code{patsubst} function invocations can be quoted with preceding backslashes (@samp{\}). Backslashes that would otherwise quote @samp{%} characters can be quoted with more backslashes. Backslashes that quote @samp{%} characters or other backslashes are removed from the pattern before it is compared file names or has a stem substituted into it. Backslashes that are not in danger of quoting @samp{%} characters go unmolested. For example, the pattern @file{the\%weird\\%pattern\\} has @samp{the%weird\} preceding the operative @samp{%} character, and @samp{pattern\\} following it. The final two backslashes are left alone because they cannot affect any @samp{%} character.@refill Whitespace between words is folded into single space characters; leading and trailing whitespace is discarded. For example, @example $(patsubst %.c,%.o,x.c.c bar.c) @end example @noindent produces the value @samp{x.c.o bar.o}. Substitution references (@pxref{Substitution Refs, ,Substitution References}) are a simpler way to get the effect of the @code{patsubst} function: @example $(@var{var}:@var{pattern}=@var{replacement}) @end example @noindent is equivalent to @example $(patsubst @var{pattern},@var{replacement},$(@var{var})) @end example The second shorthand simplifies one of the most common uses of @code{patsubst}: replacing the suffix at the end of file names. @example $(@var{var}:@var{suffix}=@var{replacement}) @end example @noindent is equivalent to @example $(patsubst %@var{suffix},%@var{replacement},$(@var{var})) @end example @noindent For example, you might have a list of object files: @example objects = foo.o bar.o baz.o @end example @noindent To get the list of corresponding source files, you could simply write: @example $(objects:.o=.c) @end example @noindent instead of using the general form: @example $(patsubst %.o,%.c,$(objects)) @end example @item $(strip @var{string}) @cindex stripping whitespace @cindex whitespace, stripping @cindex spaces, stripping @findex strip Removes leading and trailing whitespace from @var{string} and replaces each internal sequence of one or more whitespace characters with a single space. Thus, @samp{$(strip a b c )} results in @w{@samp{a b c}}. The function @code{strip} can be very useful when used in conjunction with conditionals. When comparing something with the empty string @samp{} using @code{ifeq} or @code{ifneq}, you usually want a string of just whitespace to match the empty string (@pxref{Conditionals}). Thus, the following may fail to have the desired results: @example .PHONY: all ifneq "$(needs_made)" "" all: $(needs_made) else all:;@@echo 'Nothing to make!' endif @end example @noindent Replacing the variable reference @w{@samp{$(needs_made)}} with the function call @w{@samp{$(strip $(needs_made))}} in the @code{ifneq} directive would make it more robust.@refill @item $(findstring @var{find},@var{in}) @findex findstring @cindex searching for strings @cindex finding strings @cindex strings, searching for Searches @var{in} for an occurrence of @var{find}. If it occurs, the value is @var{find}; otherwise, the value is empty. You can use this function in a conditional to test for the presence of a specific substring in a given string. Thus, the two examples, @example $(findstring a,a b c) $(findstring a,b c) @end example @noindent produce the values @samp{a} and @samp{} (the empty string), respectively. @xref{Testing Flags}, for a practical application of @code{findstring}.@refill @need 750 @findex filter @cindex filtering words @cindex words, filtering @item $(filter @var{pattern}@dots{},@var{text}) Returns all whitespace-separated words in @var{text} that @emph{do} match any of the @var{pattern} words, removing any words that @emph{do not} match. The patterns are written using @samp{%}, just like the patterns used in the @code{patsubst} function above.@refill The @code{filter} function can be used to separate out different types of strings (such as file names) in a variable. For example: @example sources := foo.c bar.c baz.s ugh.h foo: $(sources) cc $(filter %.c %.s,$(sources)) -o foo @end example @noindent says that @file{foo} depends of @file{foo.c}, @file{bar.c}, @file{baz.s} and @file{ugh.h} but only @file{foo.c}, @file{bar.c} and @file{baz.s} should be specified in the command to the compiler.@refill @item $(filter-out @var{pattern}@dots{},@var{text}) @findex filter-out @cindex filtering out words @cindex words, filtering out Returns all whitespace-separated words in @var{text} that @emph{do not} match any of the @var{pattern} words, removing the words that @emph{do} match one or more. This is the exact opposite of the @code{filter} function.@refill For example, given: @example @group objects=main1.o foo.o main2.o bar.o mains=main1.o main2.o @end group @end example @noindent the following generates a list which contains all the object files not in @samp{mains}: @example $(filter-out $(mains),$(objects)) @end example @need 1500 @findex sort @cindex sorting words @item $(sort @var{list}) Sorts the words of @var{list} in lexical order, removing duplicate words. The output is a list of words separated by single spaces. Thus, @example $(sort foo bar lose) @end example @noindent returns the value @samp{bar foo lose}. @cindex removing duplicate words @cindex duplicate words, removing @cindex words, removing duplicates Incidentally, since @code{sort} removes duplicate words, you can use it for this purpose even if you don't care about the sort order. @item $(word @var{n},@var{text}) @findex word @cindex word, selecting a @cindex selecting a word Returns the @var{n}th word of @var{text}. The legitimate values of @var{n} start from 1. If @var{n} is bigger than the number of words in @var{text}, the value is empty. For example, @example $(word 2, foo bar baz) @end example @noindent returns @samp{bar}. @item $(wordlist @var{s},@var{e},@var{text}) @findex wordlist @cindex words, selecting lists of @cindex selecting word lists Returns the list of words in @var{text} starting with word @var{s} and ending with word @var{e} (inclusive). The legitimate values of @var{s} start from 1; @var{e} may start from 0. If @var{s} is bigger than the number of words in @var{text}, the value is empty. If @var{e} is bigger than the number of words in @var{text}, words up to the end of @var{text} are returned. If @var{s} is greater than @var{e}, nothing is returned. For example, @example $(wordlist 2, 3, foo bar baz) @end example @noindent returns @samp{bar baz}. @c Following item phrased to prevent overfull hbox. --RJC 17 Jul 92 @item $(words @var{text}) @findex words @cindex words, finding number Returns the number of words in @var{text}. Thus, the last word of @var{text} is @w{@code{$(word $(words @var{text}),@var{text})}}.@refill @item $(firstword @var{names}@dots{}) @findex firstword @cindex words, extracting first The argument @var{names} is regarded as a series of names, separated by whitespace. The value is the first name in the series. The rest of the names are ignored. For example, @example $(firstword foo bar) @end example @noindent produces the result @samp{foo}. Although @code{$(firstword @var{text})} is the same as @code{$(word 1,@var{text})}, the @code{firstword} function is retained for its simplicity.@refill @item $(lastword @var{names}@dots{}) @findex lastword @cindex words, extracting last The argument @var{names} is regarded as a series of names, separated by whitespace. The value is the last name in the series. For example, @example $(lastword foo bar) @end example @noindent produces the result @samp{bar}. Although @code{$(lastword @var{text})} is the same as @code{$(word $(words @var{text}),@var{text})}, the @code{lastword} function was added for its simplicity and better performance.@refill @end table Here is a realistic example of the use of @code{subst} and @code{patsubst}. Suppose that a makefile uses the @code{VPATH} variable to specify a list of directories that @code{make} should search for prerequisite files (@pxref{General Search, , @code{VPATH} Search Path for All Prerequisites}). This example shows how to tell the C compiler to search for header files in the same list of directories.@refill The value of @code{VPATH} is a list of directories separated by colons, such as @samp{src:../headers}. First, the @code{subst} function is used to change the colons to spaces: @example $(subst :, ,$(VPATH)) @end example @noindent This produces @samp{src ../headers}. Then @code{patsubst} is used to turn each directory name into a @samp{-I} flag. These can be added to the value of the variable @code{CFLAGS}, which is passed automatically to the C compiler, like this: @example override CFLAGS += $(patsubst %,-I%,$(subst :, ,$(VPATH))) @end example @noindent The effect is to append the text @samp{-Isrc -I../headers} to the previously given value of @code{CFLAGS}. The @code{override} directive is used so that the new value is assigned even if the previous value of @code{CFLAGS} was specified with a command argument (@pxref{Override Directive, , The @code{override} Directive}). @node File Name Functions, Conditional Functions, Text Functions, Functions @section Functions for File Names @cindex functions, for file names @cindex file name functions Several of the built-in expansion functions relate specifically to taking apart file names or lists of file names. Each of the following functions performs a specific transformation on a file name. The argument of the function is regarded as a series of file names, separated by whitespace. (Leading and trailing whitespace is ignored.) Each file name in the series is transformed in the same way and the results are concatenated with single spaces between them. @table @code @item $(dir @var{names}@dots{}) @findex dir @cindex directory part @cindex file name, directory part Extracts the directory-part of each file name in @var{names}. The directory-part of the file name is everything up through (and including) the last slash in it. If the file name contains no slash, the directory part is the string @samp{./}. For example, @example $(dir src/foo.c hacks) @end example @noindent produces the result @samp{src/ ./}. @item $(notdir @var{names}@dots{}) @findex notdir @cindex file name, nondirectory part @cindex nondirectory part Extracts all but the directory-part of each file name in @var{names}. If the file name contains no slash, it is left unchanged. Otherwise, everything through the last slash is removed from it. A file name that ends with a slash becomes an empty string. This is unfortunate, because it means that the result does not always have the same number of whitespace-separated file names as the argument had; but we do not see any other valid alternative. For example, @example $(notdir src/foo.c hacks) @end example @noindent produces the result @samp{foo.c hacks}. @item $(suffix @var{names}@dots{}) @findex suffix @cindex suffix, function to find @cindex file name suffix Extracts the suffix of each file name in @var{names}. If the file name contains a period, the suffix is everything starting with the last period. Otherwise, the suffix is the empty string. This frequently means that the result will be empty when @var{names} is not, and if @var{names} contains multiple file names, the result may contain fewer file names. For example, @example $(suffix src/foo.c src-1.0/bar.c hacks) @end example @noindent produces the result @samp{.c .c}. @item $(basename @var{names}@dots{}) @findex basename @cindex basename @cindex file name, basename of Extracts all but the suffix of each file name in @var{names}. If the file name contains a period, the basename is everything starting up to (and not including) the last period. Periods in the directory part are ignored. If there is no period, the basename is the entire file name. For example, @example $(basename src/foo.c src-1.0/bar hacks) @end example @noindent produces the result @samp{src/foo src-1.0/bar hacks}. @c plural convention with dots (be consistent) @item $(addsuffix @var{suffix},@var{names}@dots{}) @findex addsuffix @cindex suffix, adding @cindex file name suffix, adding The argument @var{names} is regarded as a series of names, separated by whitespace; @var{suffix} is used as a unit. The value of @var{suffix} is appended to the end of each individual name and the resulting larger names are concatenated with single spaces between them. For example, @example $(addsuffix .c,foo bar) @end example @noindent produces the result @samp{foo.c bar.c}. @item $(addprefix @var{prefix},@var{names}@dots{}) @findex addprefix @cindex prefix, adding @cindex file name prefix, adding The argument @var{names} is regarded as a series of names, separated by whitespace; @var{prefix} is used as a unit. The value of @var{prefix} is prepended to the front of each individual name and the resulting larger names are concatenated with single spaces between them. For example, @example $(addprefix src/,foo bar) @end example @noindent produces the result @samp{src/foo src/bar}. @item $(join @var{list1},@var{list2}) @findex join @cindex joining lists of words @cindex words, joining lists Concatenates the two arguments word by word: the two first words (one from each argument) concatenated form the first word of the result, the two second words form the second word of the result, and so on. So the @var{n}th word of the result comes from the @var{n}th word of each argument. If one argument has more words that the other, the extra words are copied unchanged into the result. For example, @samp{$(join a b,.c .o)} produces @samp{a.c b.o}. Whitespace between the words in the lists is not preserved; it is replaced with a single space. This function can merge the results of the @code{dir} and @code{notdir} functions, to produce the original list of files which was given to those two functions.@refill @item $(wildcard @var{pattern}) @findex wildcard @cindex wildcard, function The argument @var{pattern} is a file name pattern, typically containing wildcard characters (as in shell file name patterns). The result of @code{wildcard} is a space-separated list of the names of existing files that match the pattern. @xref{Wildcards, ,Using Wildcard Characters in File Names}. @item $(realpath @var{names}@dots{}) @findex realpath @cindex realpath @cindex file name, realpath of For each file name in @var{names} return the canonical absolute name. A canonical name does not contain any @code{.} or @code{..} components, nor any repeated path separators (@code{/}) or symlinks. In case of a failure the empty string is returned. Consult the @code{realpath(3)} documentation for a list of possible failure causes. @item $(abspath @var{names}@dots{}) @findex abspath @cindex abspath @cindex file name, abspath of For each file name in @var{names} return an absolute name that does not contain any @code{.} or @code{..} components, nor any repeated path separators (@code{/}). Note that, in contrast to @code{realpath} function, @code{abspath} does not resolve symlinks and does not require the file names to refer to an existing file or directory. Use the @code{wildcard} function to test for existence. @end table @node Conditional Functions, Foreach Function, File Name Functions, Functions @section Functions for Conditionals @findex if @cindex conditional expansion There are three functions that provide conditional expansion. A key aspect of these functions is that not all of the arguments are expanded initially. Only those arguments which need to be expanded, will be expanded. @table @code @item $(if @var{condition},@var{then-part}[,@var{else-part}]) @findex if The @code{if} function provides support for conditional expansion in a functional context (as opposed to the GNU @code{make} makefile conditionals such as @code{ifeq} (@pxref{Conditional Syntax, ,Syntax of Conditionals})). The first argument, @var{condition}, first has all preceding and trailing whitespace stripped, then is expanded. If it expands to any non-empty string, then the condition is considered to be true. If it expands to an empty string, the condition is considered to be false. If the condition is true then the second argument, @var{then-part}, is evaluated and this is used as the result of the evaluation of the entire @code{if} function. If the condition is false then the third argument, @var{else-part}, is evaluated and this is the result of the @code{if} function. If there is no third argument, the @code{if} function evaluates to nothing (the empty string). Note that only one of the @var{then-part} or the @var{else-part} will be evaluated, never both. Thus, either can contain side-effects (such as @code{shell} function calls, etc.) @item $(or @var{condition1}[,@var{condition2}[,@var{condition3}@dots{}]]) @findex or The @code{or} function provides a ``short-circuiting'' OR operation. Each argument is expanded, in order. If an argument expands to a non-empty string the processing stops and the result of the expansion is that string. If, after all arguments are expanded, all of them are false (empty), then the result of the expansion is the empty string. @item $(and @var{condition1}[,@var{condition2}[,@var{condition3}@dots{}]]) @findex and The @code{and} function provides a ``short-circuiting'' AND operation. Each argument is expanded, in order. If an argument expands to an empty string the processing stops and the result of the expansion is the empty string. If all arguments expand to a non-empty string then the result of the expansion is the expansion of the last argument. @end table @node Foreach Function, File Function, Conditional Functions, Functions @section The @code{foreach} Function @findex foreach @cindex words, iterating over The @code{foreach} function is very different from other functions. It causes one piece of text to be used repeatedly, each time with a different substitution performed on it. It resembles the @code{for} command in the shell @code{sh} and the @code{foreach} command in the C-shell @code{csh}. The syntax of the @code{foreach} function is: @example $(foreach @var{var},@var{list},@var{text}) @end example @noindent The first two arguments, @var{var} and @var{list}, are expanded before anything else is done; note that the last argument, @var{text}, is @strong{not} expanded at the same time. Then for each word of the expanded value of @var{list}, the variable named by the expanded value of @var{var} is set to that word, and @var{text} is expanded. Presumably @var{text} contains references to that variable, so its expansion will be different each time. The result is that @var{text} is expanded as many times as there are whitespace-separated words in @var{list}. The multiple expansions of @var{text} are concatenated, with spaces between them, to make the result of @code{foreach}. This simple example sets the variable @samp{files} to the list of all files in the directories in the list @samp{dirs}: @example dirs := a b c d files := $(foreach dir,$(dirs),$(wildcard $(dir)/*)) @end example Here @var{text} is @samp{$(wildcard $(dir)/*)}. The first repetition finds the value @samp{a} for @code{dir}, so it produces the same result as @samp{$(wildcard a/*)}; the second repetition produces the result of @samp{$(wildcard b/*)}; and the third, that of @samp{$(wildcard c/*)}. This example has the same result (except for setting @samp{dirs}) as the following example: @example files := $(wildcard a/* b/* c/* d/*) @end example When @var{text} is complicated, you can improve readability by giving it a name, with an additional variable: @example find_files = $(wildcard $(dir)/*) dirs := a b c d files := $(foreach dir,$(dirs),$(find_files)) @end example @noindent Here we use the variable @code{find_files} this way. We use plain @samp{=} to define a recursively-expanding variable, so that its value contains an actual function call to be re-expanded under the control of @code{foreach}; a simply-expanded variable would not do, since @code{wildcard} would be called only once at the time of defining @code{find_files}. The @code{foreach} function has no permanent effect on the variable @var{var}; its value and flavor after the @code{foreach} function call are the same as they were beforehand. The other values which are taken from @var{list} are in effect only temporarily, during the execution of @code{foreach}. The variable @var{var} is a simply-expanded variable during the execution of @code{foreach}. If @var{var} was undefined before the @code{foreach} function call, it is undefined after the call. @xref{Flavors, ,The Two Flavors of Variables}.@refill You must take care when using complex variable expressions that result in variable names because many strange things are valid variable names, but are probably not what you intended. For example, @smallexample files := $(foreach Esta-escrito-en-espanol!,b c ch,$(find_files)) @end smallexample @noindent might be useful if the value of @code{find_files} references the variable whose name is @samp{Esta-escrito-en-espanol!} (es un nombre bastante largo, no?), but it is more likely to be a mistake. @node File Function, Call Function, Foreach Function, Functions @section The @code{file} Function @findex file @cindex writing to a file @cindex file, writing to @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: @example $(file @var{op} @var{filename}[,@var{text}]) @end example 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 reading files, it is an error to provide a @var{text} value. 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 that can accept arguments from a file as well. Many commands use the convention that an argument prefixed with an @code{@@} specifies a file containing more arguments. Then you might write your recipe in this way: @example @group program: $(OBJECTS) $(file >$@@.in,$^) $(CMD) $(CMDFLAGS) @@$@@.in @@rm $@@.in @end group @end example If the command required each argument to be on a separate line of the input file, you might write your recipe like this: @example @group program: $(OBJECTS) $(file >$@@.in) $(foreach O,$^,$(file >>$@@.in,$O)) $(CMD) $(CMDFLAGS) @@$@@.in @@rm $@@.in @end group @end example @node Call Function, Value Function, File Function, Functions @section The @code{call} Function @findex call @cindex functions, user defined @cindex user defined functions The @code{call} function is unique in that it can be used to create new parameterized functions. You can write a complex expression as the value of a variable, then use @code{call} to expand it with different values. The syntax of the @code{call} function is: @example $(call @var{variable},@var{param},@var{param},@dots{}) @end example When @code{make} expands this function, it assigns each @var{param} to temporary variables @code{$(1)}, @code{$(2)}, etc. The variable @code{$(0)} will contain @var{variable}. There is no maximum number of parameter arguments. There is no minimum, either, but it doesn't make sense to use @code{call} with no parameters. Then @var{variable} is expanded as a @code{make} variable in the context of these temporary assignments. Thus, any reference to @code{$(1)} in the value of @var{variable} will resolve to the first @var{param} in the invocation of @code{call}. Note that @var{variable} is the @emph{name} of a variable, not a @emph{reference} to that variable. Therefore you would not normally use a @samp{$} or parentheses when writing it. (You can, however, use a variable reference in the name if you want the name not to be a constant.) If @var{variable} is the name of a built-in function, the built-in function is always invoked (even if a @code{make} variable by that name also exists). The @code{call} function expands the @var{param} arguments before assigning them to temporary variables. This means that @var{variable} values containing references to built-in functions that have special expansion rules, like @code{foreach} or @code{if}, may not work as you expect. Some examples may make this clearer. This macro simply reverses its arguments: @smallexample reverse = $(2) $(1) foo = $(call reverse,a,b) @end smallexample @noindent Here @var{foo} will contain @samp{b a}. This one is slightly more interesting: it defines a macro to search for the first instance of a program in @code{PATH}: @smallexample pathsearch = $(firstword $(wildcard $(addsuffix /$(1),$(subst :, ,$(PATH))))) LS := $(call pathsearch,ls) @end smallexample @noindent Now the variable LS contains @code{/bin/ls} or similar. The @code{call} function can be nested. Each recursive invocation gets its own local values for @code{$(1)}, etc.@: that mask the values of higher-level @code{call}. For example, here is an implementation of a @dfn{map} function: @smallexample map = $(foreach a,$(2),$(call $(1),$(a))) @end smallexample Now you can @var{map} a function that normally takes only one argument, such as @code{origin}, to multiple values in one step: @smallexample o = $(call map,origin,o map MAKE) @end smallexample and end up with @var{o} containing something like @samp{file file default}. A final caution: be careful when adding whitespace to the arguments to @code{call}. As with other functions, any whitespace contained in the second and subsequent arguments is kept; this can cause strange effects. It's generally safest to remove all extraneous whitespace when providing parameters to @code{call}. @node Value Function, Eval Function, Call Function, Functions @comment node-name, next, previous, up @section The @code{value} Function @findex value @cindex variables, unexpanded value The @code{value} function provides a way for you to use the value of a variable @emph{without} having it expanded. Please note that this does not undo expansions which have already occurred; for example if you create a simply expanded variable its value is expanded during the definition; in that case the @code{value} function will return the same result as using the variable directly. The syntax of the @code{value} function is: @example $(value @var{variable}) @end example Note that @var{variable} is the @emph{name} of a variable, not a @emph{reference} to that variable. Therefore you would not normally use a @samp{$} or parentheses when writing it. (You can, however, use a variable reference in the name if you want the name not to be a constant.) The result of this function is a string containing the value of @var{variable}, without any expansion occurring. For example, in this makefile: @example @group FOO = $PATH all: @@echo $(FOO) @@echo $(value FOO) @end group @end example @noindent The first output line would be @code{ATH}, since the ``$P'' would be expanded as a @code{make} variable, while the second output line would be the current value of your @code{$PATH} environment variable, since the @code{value} function avoided the expansion. The @code{value} function is most often used in conjunction with the @code{eval} function (@pxref{Eval Function}). @node Eval Function, Origin Function, Value Function, Functions @comment node-name, next, previous, up @section The @code{eval} Function @findex eval @cindex evaluating makefile syntax @cindex makefile syntax, evaluating The @code{eval} function is very special: it allows you to define new makefile constructs that are not constant; which are the result of evaluating other variables and functions. The argument to the @code{eval} function is expanded, then the results of that expansion are parsed as makefile syntax. The expanded results can define new @code{make} variables, targets, implicit or explicit rules, etc. The result of the @code{eval} function is always the empty string; thus, it can be placed virtually anywhere in a makefile without causing syntax errors. It's important to realize that the @code{eval} argument is expanded @emph{twice}; first by the @code{eval} function, then the results of that expansion are expanded again when they are parsed as makefile syntax. This means you may need to provide extra levels of escaping for ``$'' characters when using @code{eval}. The @code{value} function (@pxref{Value Function}) can sometimes be useful in these situations, to circumvent unwanted expansions. Here is an example of how @code{eval} can be used; this example combines a number of concepts and other functions. Although it might seem overly complex to use @code{eval} in this example, rather than just writing out the rules, consider two things: first, the template definition (in @code{PROGRAM_template}) could need to be much more complex than it is here; and second, you might put the complex, ``generic'' part of this example into another makefile, then include it in all the individual makefiles. Now your individual makefiles are quite straightforward. @example @group PROGRAMS = server client server_OBJS = server.o server_priv.o server_access.o server_LIBS = priv protocol client_OBJS = client.o client_api.o client_mem.o client_LIBS = protocol # Everything after this is generic .PHONY: all all: $(PROGRAMS) define PROGRAM_template = $(1): $$($(1)_OBJS) $$($(1)_LIBS:%=-l%) ALL_OBJS += $$($(1)_OBJS) endef $(foreach prog,$(PROGRAMS),$(eval $(call PROGRAM_template,$(prog)))) $(PROGRAMS): $(LINK.o) $^ $(LDLIBS) -o $@@ clean: rm -f $(ALL_OBJS) $(PROGRAMS) @end group @end example @node Origin Function, Flavor Function, Eval Function, Functions @section The @code{origin} Function @findex origin @cindex variables, origin of @cindex origin of variable The @code{origin} function is unlike most other functions in that it does not operate on the values of variables; it tells you something @emph{about} a variable. Specifically, it tells you where it came from. The syntax of the @code{origin} function is: @example $(origin @var{variable}) @end example Note that @var{variable} is the @emph{name} of a variable to inquire about, not a @emph{reference} to that variable. Therefore you would not normally use a @samp{$} or parentheses when writing it. (You can, however, use a variable reference in the name if you want the name not to be a constant.) The result of this function is a string telling you how the variable @var{variable} was defined: @table @samp @item undefined if @var{variable} was never defined. @item default if @var{variable} has a default definition, as is usual with @code{CC} and so on. @xref{Implicit Variables, ,Variables Used by Implicit Rules}. Note that if you have redefined a default variable, the @code{origin} function will return the origin of the later definition. @item environment if @var{variable} was inherited from the environment provided to @code{make}. @item environment override if @var{variable} was inherited from the environment provided to @code{make}, and is overriding a setting for @var{variable} in the makefile as a result of the @w{@samp{-e}} option (@pxref{Options Summary, ,Summary of Options}).@refill @item file if @var{variable} was defined in a makefile. @item command line if @var{variable} was defined on the command line. @item override if @var{variable} was defined with an @code{override} directive in a makefile (@pxref{Override Directive, ,The @code{override} Directive}). @item automatic if @var{variable} is an automatic variable defined for the execution of the recipe for each rule (@pxref{Automatic Variables}). @end table This information is primarily useful (other than for your curiosity) to determine if you want to believe the value of a variable. For example, suppose you have a makefile @file{foo} that includes another makefile @file{bar}. You want a variable @code{bletch} to be defined in @file{bar} if you run the command @w{@samp{make -f bar}}, even if the environment contains a definition of @code{bletch}. However, if @file{foo} defined @code{bletch} before including @file{bar}, you do not want to override that definition. This could be done by using an @code{override} directive in @file{foo}, giving that definition precedence over the later definition in @file{bar}; unfortunately, the @code{override} directive would also override any command line definitions. So, @file{bar} could include:@refill @example @group ifdef bletch ifeq "$(origin bletch)" "environment" bletch = barf, gag, etc. endif endif @end group @end example @noindent If @code{bletch} has been defined from the environment, this will redefine it. If you want to override a previous definition of @code{bletch} if it came from the environment, even under @samp{-e}, you could instead write: @example @group ifneq "$(findstring environment,$(origin bletch))" "" bletch = barf, gag, etc. endif @end group @end example Here the redefinition takes place if @samp{$(origin bletch)} returns either @samp{environment} or @samp{environment override}. @xref{Text Functions, , Functions for String Substitution and Analysis}. @node Flavor Function, Make Control Functions, Origin Function, Functions @section The @code{flavor} Function @findex flavor @cindex variables, flavor of @cindex flavor of variable The @code{flavor} function, like the @code{origin} function, does not operate on the values of variables but rather it tells you something @emph{about} a variable. Specifically, it tells you the flavor of a variable (@pxref{Flavors, ,The Two Flavors of Variables}). The syntax of the @code{flavor} function is: @example $(flavor @var{variable}) @end example Note that @var{variable} is the @emph{name} of a variable to inquire about, not a @emph{reference} to that variable. Therefore you would not normally use a @samp{$} or parentheses when writing it. (You can, however, use a variable reference in the name if you want the name not to be a constant.) The result of this function is a string that identifies the flavor of the variable @var{variable}: @table @samp @item undefined if @var{variable} was never defined. @item recursive if @var{variable} is a recursively expanded variable. @item simple if @var{variable} is a simply expanded variable. @end table @node Make Control Functions, Shell Function, Flavor Function, Functions @section Functions That Control Make @cindex functions, for controlling make @cindex controlling make These functions control the way make runs. Generally, they are used to provide information to the user of the makefile or to cause make to stop if some sort of environmental error is detected. @table @code @item $(error @var{text}@dots{}) @findex error @cindex error, stopping on @cindex stopping make Generates a fatal error where the message is @var{text}. Note that the error is generated whenever this function is evaluated. So, if you put it inside a recipe or on the right side of a recursive variable assignment, it won't be evaluated until later. The @var{text} will be expanded before the error is generated. For example, @example ifdef ERROR1 $(error error is $(ERROR1)) endif @end example @noindent will generate a fatal error during the read of the makefile if the @code{make} variable @code{ERROR1} is defined. Or, @example ERR = $(error found an error!) .PHONY: err err: ; $(ERR) @end example @noindent will generate a fatal error while @code{make} is running, if the @code{err} target is invoked. @item $(warning @var{text}@dots{}) @findex warning @cindex warnings, printing @cindex printing user warnings This function works similarly to the @code{error} function, above, except that @code{make} doesn't exit. Instead, @var{text} is expanded and the resulting message is displayed, but processing of the makefile continues. The result of the expansion of this function is the empty string. @item $(info @var{text}@dots{}) @findex info @cindex printing messages This function does nothing more than print its (expanded) argument(s) to standard output. No makefile name or line number is added. The result of the expansion of this function is the empty string. @end table @node Shell Function, Guile Function, Make Control Functions, Functions @section The @code{shell} Function @findex shell @cindex command expansion @cindex backquotes @cindex shell command, function for The @code{shell} function is unlike any other function other than the @code{wildcard} function (@pxref{Wildcard Function, ,The Function @code{wildcard}}) in that it communicates with the world outside of @code{make}. The @code{shell} function performs the same function that backquotes (@samp{`}) perform in most shells: it does @dfn{command expansion}. This means that it takes as an argument a shell command and evaluates to the output of the command. The only processing @code{make} does on the result is to convert each newline (or carriage-return / newline pair) to a single space. If there is a trailing (carriage-return and) newline it will simply be removed.@refill The commands run by calls to the @code{shell} function are run when the function calls are expanded (@pxref{Reading Makefiles, , How @code{make} Reads a Makefile}). Because this function involves spawning a new shell, you should carefully consider the performance 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 contents := $(shell cat foo) @end example @noindent sets @code{contents} to the contents of the file @file{foo}, with a space (rather than a newline) separating each line. @example files := $(shell echo *.c) @end example @noindent sets @code{files} to the expansion of @samp{*.c}. Unless @code{make} is using a very strange shell, this has the same result as @w{@samp{$(wildcard *.c)}} (as long as at least one @samp{.c} file exists).@refill @node Guile Function, , Shell Function, Functions @section The @code{guile} Function @findex guile @cindex Guile If GNU @code{make} is built with support for GNU Guile as an embedded extension language then the @code{guile} function will be available. The @code{guile} function takes one argument which is first expanded by @code{make} in the normal fashion, then passed to the GNU Guile evaluator. The result of the evaluator is converted into a string and used as the expansion of the @code{guile} function in the makefile. See @ref{Guile Integration, ,GNU Guile Integration} for details on writing extensions to @code{make} in Guile. You can determine whether GNU Guile support is available by checking the @code{.FEATURES} variable for the word @var{guile}. @node Running, Implicit Rules, Functions, Top @chapter How to Run @code{make} A makefile that says how to recompile a program can be used in more than one way. The simplest use is to recompile every file that is out of date. Usually, makefiles are written so that if you run @code{make} with no arguments, it does just that. But you might want to update only some of the files; you might want to use a different compiler or different compiler options; you might want just to find out which files are out of date without changing them. By giving arguments when you run @code{make}, you can do any of these things and many others. @cindex exit status of make The exit status of @code{make} is always one of three values: @table @code @item 0 The exit status is zero if @code{make} is successful. @item 2 The exit status is two if @code{make} encounters any errors. It will print messages describing the particular errors. @item 1 The exit status is one if you use the @samp{-q} flag and @code{make} determines that some target is not already up to date. @xref{Instead of Execution, ,Instead of Executing Recipes}. @end table @menu * Makefile Arguments:: How to specify which makefile to use. * Goals:: How to use goal arguments to specify which parts of the makefile to use. * Instead of Execution:: How to use mode flags to specify what kind of thing to do with the recipes in the makefile other than simply execute them. * Avoiding Compilation:: How to avoid recompiling certain files. * Overriding:: How to override a variable to specify an alternate compiler and other things. * Testing:: How to proceed past some errors, to test compilation. * Options Summary:: Summary of Options @end menu @node Makefile Arguments, Goals, Running, Running @section Arguments to Specify the Makefile @cindex @code{--file} @cindex @code{--makefile} @cindex @code{-f} The way to specify the name of the makefile is with the @samp{-f} or @samp{--file} option (@samp{--makefile} also works). For example, @samp{-f altmake} says to use the file @file{altmake} as the makefile. If you use the @samp{-f} flag several times and follow each @samp{-f} with an argument, all the specified files are used jointly as makefiles. If you do not use the @samp{-f} or @samp{--file} flag, the default is to try @file{GNUmakefile}, @file{makefile}, and @file{Makefile}, in that order, and use the first of these three which exists or can be made (@pxref{Makefiles, ,Writing Makefiles}).@refill @node Goals, Instead of Execution, Makefile Arguments, Running @section Arguments to Specify the Goals @cindex goal, how to specify The @dfn{goals} are the targets that @code{make} should strive ultimately to update. Other targets are updated as well if they appear as prerequisites of goals, or prerequisites of prerequisites of goals, etc. By default, the goal is the first target in the makefile (not counting targets that start with a period). Therefore, makefiles are usually written so that the first target is for compiling the entire program or programs they describe. If the first rule in the makefile has several targets, only the first target in the rule becomes the default goal, not the whole list. You can manage the selection of the default goal from within your makefile using the @code{.DEFAULT_GOAL} variable (@pxref{Special Variables, , Other Special Variables}). You can also specify a different goal or goals with command line arguments to @code{make}. Use the name of the goal as an argument. If you specify several goals, @code{make} processes each of them in turn, in the order you name them. Any target in the makefile may be specified as a goal (unless it starts with @samp{-} or contains an @samp{=}, in which case it will be parsed as a switch or variable definition, respectively). Even targets not in the makefile may be specified, if @code{make} can find implicit rules that say how to make them. @vindex MAKECMDGOALS @code{Make} will set the special variable @code{MAKECMDGOALS} to the list of goals you specified on the command line. If no goals were given on the command line, this variable is empty. Note that this variable should be used only in special circumstances. An example of appropriate use is to avoid including @file{.d} files during @code{clean} rules (@pxref{Automatic Prerequisites}), so @code{make} won't create them only to immediately remove them again:@refill @example @group sources = foo.c bar.c ifneq ($(MAKECMDGOALS),clean) include $(sources:.c=.d) endif @end group @end example One use of specifying a goal is if you want to compile only a part of the program, or only one of several programs. Specify as a goal each file that you wish to remake. For example, consider a directory containing several programs, with a makefile that starts like this: @example .PHONY: all all: size nm ld ar as @end example If you are working on the program @code{size}, you might want to say @w{@samp{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 a version of the program that is compiled specially for testing, which has a rule in the makefile but is not a prerequisite of the default goal. Another use of specifying a goal is to run the recipe associated with a phony target (@pxref{Phony Targets}) or empty target (@pxref{Empty Targets, ,Empty Target Files to Record Events}). Many makefiles contain a phony target named @file{clean} which deletes everything except source files. Naturally, this is done only if you request it explicitly with @w{@samp{make clean}}. Following is a list of typical phony and empty target names. @xref{Standard Targets}, for a detailed list of all the standard target names which GNU software packages use. @table @file @item all @cindex @code{all} @r{(standard target)} Make all the top-level targets the makefile knows about. @item clean @cindex @code{clean} @r{(standard target)} Delete all files that are normally created by running @code{make}. @item mostlyclean @cindex @code{mostlyclean} @r{(standard target)} Like @samp{clean}, but may refrain from deleting a few files that people normally don't want to recompile. For example, the @samp{mostlyclean} target for GCC does not delete @file{libgcc.a}, because recompiling it is rarely necessary and takes a lot of time. @item distclean @cindex @code{distclean} @r{(standard target)} @itemx realclean @cindex @code{realclean} @r{(standard target)} @itemx clobber @cindex @code{clobber} @r{(standard target)} Any of these targets might be defined to delete @emph{more} files than @samp{clean} does. For example, this would delete configuration files or links that you would normally create as preparation for compilation, even if the makefile itself cannot create these files. @item install @cindex @code{install} @r{(standard target)} Copy the executable file into a directory that users typically search for commands; copy any auxiliary files that the executable uses into the directories where it will look for them. @item print @cindex @code{print} @r{(standard target)} Print listings of the source files that have changed. @item tar @cindex @code{tar} @r{(standard target)} Create a tar file of the source files. @item shar @cindex @code{shar} @r{(standard target)} Create a shell archive (shar file) of the source files. @item dist @cindex @code{dist} @r{(standard target)} Create a distribution file of the source files. This might be a tar file, or a shar file, or a compressed version of one of the above, or even more than one of the above. @item TAGS @cindex @code{TAGS} @r{(standard target)} Update a tags table for this program. @item check @cindex @code{check} @r{(standard target)} @itemx test @cindex @code{test} @r{(standard target)} Perform self tests on the program this makefile builds. @end table @node Instead of Execution, Avoiding Compilation, Goals, Running @section Instead of Executing Recipes @cindex execution, instead of @cindex recipes, instead of executing The makefile tells @code{make} how to tell whether a target is up to date, and how to update each target. But updating the targets is not always what you want. Certain options specify other activities for @code{make}. @comment Extra blank lines make it print better. @table @samp @item -n @itemx --just-print @itemx --dry-run @itemx --recon @cindex @code{--just-print} @cindex @code{--dry-run} @cindex @code{--recon} @cindex @code{-n} ``No-op''. Causes @code{make} to print the recipes that are needed to make the targets up to date, but not actually execute them. Note that some recipes are still executed, even with this flag (@pxref{MAKE Variable, ,How the @code{MAKE} Variable Works}). Also any recipes needed to update included makefiles are still executed (@pxref{Remaking Makefiles, ,How Makefiles Are Remade}). @item -t @itemx --touch @cindex @code{--touch} @cindex touching files @cindex target, touching @cindex @code{-t} ``Touch''. Marks targets as up to date without actually changing them. In other words, @code{make} pretends to update the targets but does not really change their contents; instead only their modified times are updated. @item -q @itemx --question @cindex @code{--question} @cindex @code{-q} @cindex question mode ``Question''. Silently check whether the targets are up to date, but do not execute recipes; the exit code shows whether any updates are needed. @item -W @var{file} @itemx --what-if=@var{file} @itemx --assume-new=@var{file} @itemx --new-file=@var{file} @cindex @code{--what-if} @cindex @code{-W} @cindex @code{--assume-new} @cindex @code{--new-file} @cindex what if @cindex files, assuming new ``What if''. Each @samp{-W} flag is followed by a file name. The given files' modification times are recorded by @code{make} as being the present time, although the actual modification times remain the same. You can use the @samp{-W} flag in conjunction with the @samp{-n} flag to see what would happen if you were to modify specific files.@refill @end table With the @samp{-n} flag, @code{make} prints the recipe that it would normally execute but usually does not execute it. With the @samp{-t} flag, @code{make} ignores the recipes in the rules and uses (in effect) the command @code{touch} for each target that needs to be remade. The @code{touch} command is also printed, unless @samp{-s} or @code{.SILENT} is used. For speed, @code{make} does not actually invoke the program @code{touch}. It does the work directly. With the @samp{-q} flag, @code{make} prints nothing and executes no recipes, but the exit status code it returns is zero if and only if the targets to be considered are already up to date. If the exit status is one, then some updating needs to be done. If @code{make} encounters an error, the exit status is two, so you can distinguish an error from a target that is not up to date. It is an error to use more than one of these three flags in the same invocation of @code{make}. @cindex +, and recipe execution The @samp{-n}, @samp{-t}, and @samp{-q} options do not affect recipe lines that begin with @samp{+} characters or contain the strings @samp{$(MAKE)} or @samp{$@{MAKE@}}. Note that only the line containing the @samp{+} character or the strings @samp{$(MAKE)} or @samp{$@{MAKE@}} is run regardless of these options. Other lines in the same rule are not run unless they too begin with @samp{+} or contain @samp{$(MAKE)} or @samp{$@{MAKE@}} (@xref{MAKE Variable, ,How the @code{MAKE} Variable Works}.) @cindex phony targets and recipe execution The @samp{-t} flag prevents phony targets (@pxref{Phony Targets}) from being updated, unless there are recipe lines beginning with @samp{+} or containing @samp{$(MAKE)} or @samp{$@{MAKE@}}. The @samp{-W} flag provides two features: @itemize @bullet @item If you also use the @samp{-n} or @samp{-q} flag, you can see what @code{make} would do if you were to modify some files. @item Without the @samp{-n} or @samp{-q} flag, when @code{make} is actually executing recipes, the @samp{-W} flag can direct @code{make} to act as if some files had been modified, without actually running the recipes for those files.@refill @end itemize Note that the options @samp{-p} and @samp{-v} allow you to obtain other information about @code{make} or about the makefiles in use (@pxref{Options Summary, ,Summary of Options}).@refill @node Avoiding Compilation, Overriding, Instead of Execution, Running @section Avoiding Recompilation of Some Files @cindex @code{-o} @cindex @code{--old-file} @cindex @code{--assume-old} @cindex files, assuming old @cindex files, avoiding recompilation of @cindex recompilation, avoiding Sometimes you may have changed a source file but you do not want to recompile all the files that depend on it. For example, suppose you add a macro or a declaration to a header file that many other files depend on. Being conservative, @code{make} assumes that any change in the header file requires recompilation of all dependent files, but you know that they do not need to be recompiled and you would rather not waste the time waiting for them to compile. If you anticipate the problem before changing the header file, you can use the @samp{-t} flag. This flag tells @code{make} not to run the recipes in the rules, but rather to mark the target up to date by changing its last-modification date. You would follow this procedure: @enumerate @item Use the command @samp{make} to recompile the source files that really need recompilation, ensuring that the object files are up-to-date before you begin. @item Make the changes in the header files. @item Use the command @samp{make -t} to mark all the object files as up to date. The next time you run @code{make}, the changes in the header files will not cause any recompilation. @end enumerate If you have already changed the header file at a time when some files do need recompilation, it is too late to do this. Instead, you can use the @w{@samp{-o @var{file}}} flag, which marks a specified file as ``old'' (@pxref{Options Summary, ,Summary of Options}). This means that the file itself will not be remade, and nothing else will be remade on its account. Follow this procedure: @enumerate @item Recompile the source files that need compilation for reasons independent of the particular header file, with @samp{make -o @var{headerfile}}. If several header files are involved, use a separate @samp{-o} option for each header file. @item Touch all the object files with @samp{make -t}. @end enumerate @node Overriding, Testing, Avoiding Compilation, Running @section Overriding Variables @cindex overriding variables with arguments @cindex variables, overriding with arguments @cindex command line variables @cindex variables, command line An argument that contains @samp{=} specifies the value of a variable: @samp{@var{v}=@var{x}} sets the value of the variable @var{v} to @var{x}. If you specify a value in this way, all ordinary assignments of the same variable in the makefile are ignored; we say they have been @dfn{overridden} by the command line argument. The most common way to use this facility is to pass extra flags to compilers. For example, in a properly written makefile, the variable @code{CFLAGS} is included in each recipe that runs the C compiler, so a file @file{foo.c} would be compiled something like this: @example cc -c $(CFLAGS) foo.c @end example Thus, whatever value you set for @code{CFLAGS} affects each compilation that occurs. The makefile probably specifies the usual value for @code{CFLAGS}, like this: @example CFLAGS=-g @end example Each time you run @code{make}, you can override this value if you wish. For example, if you say @samp{make CFLAGS='-g -O'}, each C compilation will be done with @samp{cc -c -g -O}. (This also illustrates how you can use quoting in the shell to enclose spaces and other special characters in the value of a variable when you override it.) The variable @code{CFLAGS} is only one of many standard variables that exist just so that you can change them this way. @xref{Implicit Variables, , Variables Used by Implicit Rules}, for a complete list. You can also program the makefile to look at additional variables of your own, giving the user the ability to control other aspects of how the makefile works by changing the variables. When you override a variable with a command line argument, you can define either a recursively-expanded variable or a simply-expanded variable. The examples shown above make a recursively-expanded variable; to make a simply-expanded variable, write @samp{:=} or @samp{::=} instead of @samp{=}. But, unless you want to include a variable reference or function call in the @emph{value} that you specify, it makes no difference which kind of variable you create. There is one way that the makefile can change a variable that you have overridden. This is to use the @code{override} directive, which is a line that looks like this: @samp{override @var{variable} = @var{value}} (@pxref{Override Directive, ,The @code{override} Directive}). @node Testing, Options Summary, Overriding, Running @section Testing the Compilation of a Program @cindex testing compilation @cindex compilation, testing Normally, when an error happens in executing a shell command, @code{make} gives up immediately, returning a nonzero status. No further recipes are executed for any target. The error implies that the goal cannot be correctly remade, and @code{make} reports this as soon as it knows. When you are compiling a program that you have just changed, this is not what you want. Instead, you would rather that @code{make} try compiling every file that can be tried, to show you as many compilation errors as possible. @cindex @code{-k} @cindex @code{--keep-going} On these occasions, you should use the @samp{-k} or @samp{--keep-going} flag. This tells @code{make} to continue to consider the other prerequisites of the pending targets, remaking them if necessary, before it gives up and returns nonzero status. For example, after an error in compiling one object file, @samp{make -k} will continue compiling other object files even though it already knows that linking them will be impossible. In addition to continuing after failed shell commands, @samp{make -k} will continue as much as possible after discovering that it does not know how to make a target or prerequisite file. This will always cause an error message, but without @samp{-k}, it is a fatal error (@pxref{Options Summary, ,Summary of Options}).@refill The usual behavior of @code{make} assumes that your purpose is to get the goals up to date; once @code{make} learns that this is impossible, it might as well report the failure immediately. The @samp{-k} flag says that the real purpose is to test as much as possible of the changes made in the program, perhaps to find several independent problems so that you can correct them all before the next attempt to compile. This is why Emacs' @kbd{M-x compile} command passes the @samp{-k} flag by default. @node Options Summary, , Testing, Running @section Summary of Options @cindex options @cindex flags @cindex switches Here is a table of all the options @code{make} understands: @table @samp @item -b @cindex @code{-b} @itemx -m @cindex @code{-m} These options are ignored for compatibility with other versions of @code{make}. @item -B @cindex @code{-B} @itemx --always-make @cindex @code{--always-make} Consider all targets out-of-date. GNU @code{make} proceeds to consider targets and their prerequisites using the normal algorithms; however, all targets so considered are always remade regardless of the status of their prerequisites. To avoid infinite recursion, if @code{MAKE_RESTARTS} (@pxref{Special Variables, , Other Special Variables}) is set to a number greater than 0 this option is disabled when considering whether to remake makefiles (@pxref{Remaking Makefiles, , How Makefiles Are Remade}). @item -C @var{dir} @cindex @code{-C} @itemx --directory=@var{dir} @cindex @code{--directory} Change to directory @var{dir} before reading the makefiles. If multiple @samp{-C} options are specified, each is interpreted relative to the previous one: @samp{-C / -C etc} is equivalent to @samp{-C /etc}. This is typically used with recursive invocations of @code{make} (@pxref{Recursion, ,Recursive Use of @code{make}}). @item -d @cindex @code{-d} @c Extra blank line here makes the table look better. Print debugging information in addition to normal processing. The debugging information says which files are being considered for remaking, which file-times are being compared and with what results, which files actually need to be remade, which implicit rules are considered and which are applied---everything interesting about how @code{make} decides what to do. The @code{-d} option is equivalent to @samp{--debug=a} (see below). @item --debug[=@var{options}] @cindex @code{--debug} @c Extra blank line here makes the table look better. Print debugging information in addition to normal processing. Various levels and types of output can be chosen. With no arguments, print the ``basic'' level of debugging. Possible arguments are below; only the first character is considered, and values must be comma- or space-separated. @table @code @item a (@i{all}) All types of debugging output are enabled. This is equivalent to using @samp{-d}. @item b (@i{basic}) Basic debugging prints each target that was found to be out-of-date, and whether the build was successful or not. @item v (@i{verbose}) A level above @samp{basic}; includes messages about which makefiles were parsed, prerequisites that did not need to be rebuilt, etc. This option also enables @samp{basic} messages. @item i (@i{implicit}) Prints messages describing the implicit rule searches for each target. This option also enables @samp{basic} messages. @item j (@i{jobs}) Prints messages giving details on the invocation of specific sub-commands. @item m (@i{makefile}) By default, the above messages are not enabled while trying to remake the makefiles. This option enables messages while rebuilding makefiles, too. Note that the @samp{all} option does enable this option. This option also enables @samp{basic} messages. @item n (@i{none}) Disable all debugging currently enabled. If additional debugging flags are encountered after this they will still take effect. @end table @item -e @cindex @code{-e} @itemx --environment-overrides @cindex @code{--environment-overrides} Give variables taken from the environment precedence over variables from makefiles. @xref{Environment, ,Variables from the Environment}. @item -E @var{string} @cindex @code{-E} @item --eval=@var{string} @cindex @code{--eval} @c Extra blank line here makes the table look better. Evaluate @var{string} as makefile syntax. This is a command-line version of the @code{eval} function (@pxref{Eval Function}). The evaluation is performed after the default rules and variables have been defined, but before any makefiles are read. @item -f @var{file} @cindex @code{-f} @itemx --file=@var{file} @cindex @code{--file} @itemx --makefile=@var{file} @cindex @code{--makefile} Read the file named @var{file} as a makefile. @xref{Makefiles, ,Writing Makefiles}. @item -h @cindex @code{-h} @itemx --help @cindex @code{--help} @c Extra blank line here makes the table look better. Remind you of the options that @code{make} understands and then exit. @item -i @cindex @code{-i} @itemx --ignore-errors @cindex @code{--ignore-errors} Ignore all errors in recipes executed to remake files. @xref{Errors, ,Errors in Recipes}. @item -I @var{dir} @cindex @code{-I} @itemx --include-dir=@var{dir} @cindex @code{--include-dir} Specifies a directory @var{dir} to search for included makefiles. @xref{Include, ,Including Other Makefiles}. If several @samp{-I} options are used to specify several directories, the directories are searched in the order specified. @item -j [@var{jobs}] @cindex @code{-j} @itemx --jobs[=@var{jobs}] @cindex @code{--jobs} Specifies the number of recipes (jobs) to run simultaneously. With no argument, @code{make} runs as many recipes simultaneously as possible. If there is more than one @samp{-j} option, the last one is effective. @xref{Parallel, ,Parallel Execution}, for more information on how recipes are run. Note that this option is ignored on MS-DOS. @item -k @cindex @code{-k} @itemx --keep-going @cindex @code{--keep-going} Continue as much as possible after an error. While the target that failed, and those that depend on it, cannot be remade, the other prerequisites of these targets can be processed all the same. @xref{Testing, ,Testing the Compilation of a Program}. @item -l [@var{load}] @cindex @code{-l} @itemx --load-average[=@var{load}] @cindex @code{--load-average} @itemx --max-load[=@var{load}] @cindex @code{--max-load} Specifies that no new recipes should be started if there are other recipes running and the load average is at least @var{load} (a floating-point number). With no argument, removes a previous load limit. @xref{Parallel, ,Parallel Execution}. @item -L @cindex @code{-L} @itemx --check-symlink-times @cindex @code{--check-symlink-times} On systems that support symbolic links, this option causes @code{make} to consider the timestamps on any symbolic links in addition to the timestamp on the file referenced by those links. When this option is provided, the most recent timestamp among the file and the symbolic links is taken as the modification time for this target file. @item -n @cindex @code{-n} @itemx --just-print @cindex @code{--just-print} @itemx --dry-run @cindex @code{--dry-run} @itemx --recon @cindex @code{--recon} @c Extra blank line here makes the table look better. Print the recipe that would be executed, but do not execute it (except in certain circumstances). @xref{Instead of Execution, ,Instead of Executing Recipes}. @item -o @var{file} @cindex @code{-o} @itemx --old-file=@var{file} @cindex @code{--old-file} @itemx --assume-old=@var{file} @cindex @code{--assume-old} Do not remake the file @var{file} even if it is older than its prerequisites, and do not remake anything on account of changes in @var{file}. Essentially the file is treated as very old and its rules are ignored. @xref{Avoiding Compilation, ,Avoiding Recompilation of Some Files}.@refill @item -O[@var{type}] @cindex @code{-O} @itemx --output-sync[=@var{type}] @cindex @code{--output-sync} @cindex output during parallel execution @cindex parallel execution, output during Ensure that the complete output from each recipe is printed in one uninterrupted sequence. This option is only useful when using the @code{--jobs} option to run multiple recipes simultaneously (@pxref{Parallel, ,Parallel Execution}) Without this option output will be displayed as it is generated by the recipes.@refill With no type or the type @samp{target}, output from the entire recipe of each target is grouped together. With the type @samp{line}, output from each line in the recipe is grouped together. With the type @samp{recurse}, the output from an entire recursive make is grouped together. With the type @samp{none}, no output synchronization is performed. @xref{Parallel Output, ,Output During Parallel Execution}. @item -p @cindex @code{-p} @itemx --print-data-base @cindex @code{--print-data-base} @cindex data base of @code{make} rules @cindex predefined rules and variables, printing Print the data base (rules and variable values) that results from reading the makefiles; then execute as usual or as otherwise specified. This also prints the version information given by the @samp{-v} switch (see below). To print the data base without trying to remake any files, use @w{@samp{make -qp}}. To print the data base of predefined rules and variables, use @w{@samp{make -p -f /dev/null}}. The data base output contains file name and line number information for recipe and variable definitions, so it can be a useful debugging tool in complex environments. @item -q @cindex @code{-q} @itemx --question @cindex @code{--question} ``Question mode''. Do not run any recipes, or print anything; just return an exit status that is zero if the specified targets are already up to date, one if any remaking is required, or two if an error is encountered. @xref{Instead of Execution, ,Instead of Executing Recipes}.@refill @item -r @cindex @code{-r} @itemx --no-builtin-rules @cindex @code{--no-builtin-rules} Eliminate use of the built-in implicit rules (@pxref{Implicit Rules, ,Using Implicit Rules}). You can still define your own by writing pattern rules (@pxref{Pattern Rules, ,Defining and Redefining Pattern Rules}). The @samp{-r} option also clears out the default list of suffixes for suffix rules (@pxref{Suffix Rules, ,Old-Fashioned Suffix Rules}). But you can still define your own suffixes with a rule for @code{.SUFFIXES}, and then define your own suffix rules. Note that only @emph{rules} are affected by the @code{-r} option; default variables remain in effect (@pxref{Implicit Variables, ,Variables Used by Implicit Rules}); see the @samp{-R} option below. @item -R @cindex @code{-R} @itemx --no-builtin-variables @cindex @code{--no-builtin-variables} Eliminate use of the built-in rule-specific variables (@pxref{Implicit Variables, ,Variables Used by Implicit Rules}). You can still define your own, of course. The @samp{-R} option also automatically enables the @samp{-r} option (see above), since it doesn't make sense to have implicit rules without any definitions for the variables that they use. @item -s @cindex @code{-s} @itemx --silent @cindex @code{--silent} @itemx --quiet @cindex @code{--quiet} @c Extra blank line here makes the table look better. Silent operation; do not print the recipes as they are executed. @xref{Echoing, ,Recipe Echoing}. @item -S @cindex @code{-S} @itemx --no-keep-going @cindex @code{--no-keep-going} @itemx --stop @cindex @code{--stop} @c Extra blank line here makes the table look better. Cancel the effect of the @samp{-k} option. This is never necessary except in a recursive @code{make} where @samp{-k} might be inherited from the top-level @code{make} via @code{MAKEFLAGS} (@pxref{Recursion, ,Recursive Use of @code{make}}) or if you set @samp{-k} in @code{MAKEFLAGS} in your environment.@refill @item -t @cindex @code{-t} @itemx --touch @cindex @code{--touch} @c Extra blank line here makes the table look better. Touch files (mark them up to date without really changing them) instead of running their recipes. This is used to pretend that the recipes were done, in order to fool future invocations of @code{make}. @xref{Instead of Execution, ,Instead of Executing Recipes}. @item --trace @cindex @code{--trace} Show tracing information for @code{make} execution. Prints the entire recipe to be executed, even for recipes that are normally silent (due to @code{.SILENT} or @samp{@@}). Also prints the makefile name and line number where the recipe was defined, and information on why the target is being rebuilt. @item -v @cindex @code{-v} @itemx --version @cindex @code{--version} Print the version of the @code{make} program plus a copyright, a list of authors, and a notice that there is no warranty; then exit. @item -w @cindex @code{-w} @itemx --print-directory @cindex @code{--print-directory} Print a message containing the working directory both before and after executing the makefile. This may be useful for tracking down errors from complicated nests of recursive @code{make} commands. @xref{Recursion, ,Recursive Use of @code{make}}. (In practice, you rarely need to specify this option since @samp{make} does it for you; see @ref{-w Option, ,The @samp{--print-directory} Option}.) @item --no-print-directory @cindex @code{--no-print-directory} Disable printing of the working directory under @code{-w}. This option is useful when @code{-w} is turned on automatically, but you do not want to see the extra messages. @xref{-w Option, ,The @samp{--print-directory} Option}. @item -W @var{file} @cindex @code{-W} @itemx --what-if=@var{file} @cindex @code{--what-if} @itemx --new-file=@var{file} @cindex @code{--new-file} @itemx --assume-new=@var{file} @cindex @code{--assume-new} Pretend that the target @var{file} has just been modified. When used with the @samp{-n} flag, this shows you what would happen if you were to modify that file. Without @samp{-n}, it is almost the same as running a @code{touch} command on the given file before running @code{make}, except that the modification time is changed only in the imagination of @code{make}. @xref{Instead of Execution, ,Instead of Executing Recipes}. @item --warn-undefined-variables @cindex @code{--warn-undefined-variables} @cindex variables, warning for undefined @cindex undefined variables, warning message Issue a warning message whenever @code{make} sees a reference to an undefined variable. This can be helpful when you are trying to debug makefiles which use variables in complex ways. @end table @node Implicit Rules, Archives, Running, Top @chapter Using Implicit Rules @cindex implicit rule @cindex rule, implicit Certain standard ways of remaking target files are used very often. For example, one customary way to make an object file is from a C source file using the C compiler, @code{cc}. @dfn{Implicit rules} tell @code{make} how to use customary techniques so that you do not have to specify them in detail when you want to use them. For example, there is an implicit rule for C compilation. File names determine which implicit rules are run. For example, C compilation typically takes a @file{.c} file and makes a @file{.o} file. So @code{make} applies the implicit rule for C compilation when it sees this combination of file name endings.@refill A chain of implicit rules can apply in sequence; for example, @code{make} will remake a @file{.o} file from a @file{.y} file by way of a @file{.c} file. @iftex @xref{Chained Rules, ,Chains of Implicit Rules}. @end iftex The built-in implicit rules use several variables in their recipes so that, by changing the values of the variables, you can change the way the implicit rule works. For example, the variable @code{CFLAGS} controls the flags given to the C compiler by the implicit rule for C compilation. @iftex @xref{Implicit Variables, ,Variables Used by Implicit Rules}. @end iftex You can define your own implicit rules by writing @dfn{pattern rules}. @iftex @xref{Pattern Rules, ,Defining and Redefining Pattern Rules}. @end iftex @dfn{Suffix rules} are a more limited way to define implicit rules. Pattern rules are more general and clearer, but suffix rules are retained for compatibility. @iftex @xref{Suffix Rules, ,Old-Fashioned Suffix Rules}. @end iftex @menu * Using Implicit:: How to use an existing implicit rule to get the recipes for updating a file. * Catalogue of Rules:: A list of built-in rules. * Implicit Variables:: How to change what predefined rules do. * Chained Rules:: How to use a chain of implicit rules. * Pattern Rules:: How to define new implicit rules. * Last Resort:: How to define a recipe for rules which cannot find any. * Suffix Rules:: The old-fashioned style of implicit rule. * Implicit Rule Search:: The precise algorithm for applying implicit rules. @end menu @node Using Implicit, Catalogue of Rules, Implicit Rules, Implicit Rules @section Using Implicit Rules @cindex implicit rule, how to use @cindex rule, implicit, how to use To allow @code{make} to find a customary method for updating a target file, all you have to do is refrain from specifying recipes yourself. Either write a rule with no recipe, or don't write a rule at all. Then @code{make} will figure out which implicit rule to use based on which kind of source file exists or can be made. For example, suppose the makefile looks like this: @example foo : foo.o bar.o cc -o foo foo.o bar.o $(CFLAGS) $(LDFLAGS) @end example @noindent Because you mention @file{foo.o} but do not give a rule for it, @code{make} will automatically look for an implicit rule that tells how to update it. This happens whether or not the file @file{foo.o} currently exists. If an implicit rule is found, it can supply both a recipe and one or more prerequisites (the source files). You would want to write a rule for @file{foo.o} with no recipe if you need to specify additional prerequisites, such as header files, that the implicit rule cannot supply. Each implicit rule has a target pattern and prerequisite patterns. There may be many implicit rules with the same target pattern. For example, numerous rules make @samp{.o} files: one, from a @samp{.c} file with the C compiler; another, from a @samp{.p} file with the Pascal compiler; and so on. The rule that actually applies is the one whose prerequisites exist or can be made. So, if you have a file @file{foo.c}, @code{make} will run the C compiler; otherwise, if you have a file @file{foo.p}, @code{make} will run the Pascal compiler; and so on. Of course, when you write the makefile, you know which implicit rule you want @code{make} to use, and you know it will choose that one because you know which possible prerequisite files are supposed to exist. @xref{Catalogue of Rules, ,Catalogue of Built-In Rules}, for a catalogue of all the predefined implicit rules. Above, we said an implicit rule applies if the required prerequisites ``exist or can be made''. A file ``can be made'' if it is mentioned explicitly in the makefile as a target or a prerequisite, or if an implicit rule can be recursively found for how to make it. When an implicit prerequisite is the result of another implicit rule, we say that @dfn{chaining} is occurring. @xref{Chained Rules, ,Chains of Implicit Rules}. In general, @code{make} searches for an implicit rule for each target, and for each double-colon rule, that has no recipe. A file that is mentioned only as a prerequisite is considered a target whose rule specifies nothing, so implicit rule search happens for it. @xref{Implicit Rule Search, ,Implicit Rule Search Algorithm}, for the details of how the search is done. Note that explicit prerequisites do not influence implicit rule search. For example, consider this explicit rule: @example foo.o: foo.p @end example @noindent The prerequisite on @file{foo.p} does not necessarily mean that @code{make} will remake @file{foo.o} according to the implicit rule to make an object file, a @file{.o} file, from a Pascal source file, a @file{.p} file. For example, if @file{foo.c} also exists, the implicit rule to make an object file from a C source file is used instead, because it appears before the Pascal rule in the list of predefined implicit rules (@pxref{Catalogue of Rules, , Catalogue of Built-In Rules}). If you do not want an implicit rule to be used for a target that has no recipe, you can give that target an empty recipe by writing a semicolon (@pxref{Empty Recipes, ,Defining Empty Recipes}). @node Catalogue of Rules, Implicit Variables, Using Implicit, Implicit Rules @section Catalogue of Built-In Rules @cindex implicit rule, predefined @cindex rule, implicit, predefined Here is a catalogue of predefined implicit rules which are always available unless the makefile explicitly overrides or cancels them. @xref{Canceling Rules, ,Canceling Implicit Rules}, for information on canceling or overriding an implicit rule. The @samp{-r} or @samp{--no-builtin-rules} option cancels all predefined rules. This manual only documents the default rules available on POSIX-based operating systems. Other operating systems, such as VMS, Windows, OS/2, etc. may have different sets of default rules. To see the full list of default rules and variables available in your version of GNU @code{make}, run @samp{make -p} in a directory with no makefile. Not all of these rules will always be defined, even when the @samp{-r} option is not given. Many of the predefined implicit rules are implemented in @code{make} as suffix rules, so which ones will be defined depends on the @dfn{suffix list} (the list of prerequisites of the special target @code{.SUFFIXES}). The default suffix list is: @code{.out}, @code{.a}, @code{.ln}, @code{.o}, @code{.c}, @code{.cc}, @code{.C}, @code{.cpp}, @code{.p}, @code{.f}, @code{.F}, @code{.m}, @code{.r}, @code{.y}, @code{.l}, @code{.ym}, @code{.lm}, @code{.s}, @code{.S}, @code{.mod}, @code{.sym}, @code{.def}, @code{.h}, @code{.info}, @code{.dvi}, @code{.tex}, @code{.texinfo}, @code{.texi}, @code{.txinfo}, @code{.w}, @code{.ch} @code{.web}, @code{.sh}, @code{.elc}, @code{.el}. All of the implicit rules described below whose prerequisites have one of these suffixes are actually suffix rules. If you modify the suffix list, the only predefined suffix rules in effect will be those named by one or two of the suffixes that are on the list you specify; rules whose suffixes fail to be on the list are disabled. @xref{Suffix Rules, ,Old-Fashioned Suffix Rules}, for full details on suffix rules. @table @asis @item Compiling C programs @cindex C, rule to compile @pindex cc @pindex gcc @pindex .o @pindex .c @file{@var{n}.o} is made automatically from @file{@var{n}.c} with a recipe of the form @samp{$(CC) $(CPPFLAGS) $(CFLAGS) -c}.@refill @item Compiling C++ programs @cindex C++, rule to compile @pindex g++ @pindex .cc @pindex .cpp @pindex .C @file{@var{n}.o} is made automatically from @file{@var{n}.cc}, @file{@var{n}.cpp}, or @file{@var{n}.C} with a recipe of the form @samp{$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c}. We encourage you to use the suffix @samp{.cc} for C++ source files instead of @samp{.C}.@refill @item Compiling Pascal programs @cindex Pascal, rule to compile @pindex pc @pindex .p @file{@var{n}.o} is made automatically from @file{@var{n}.p} with the recipe @samp{$(PC) $(PFLAGS) -c}.@refill @item Compiling Fortran and Ratfor programs @cindex Fortran, rule to compile @cindex Ratfor, rule to compile @pindex f77 @pindex .f @pindex .r @pindex .F @file{@var{n}.o} is made automatically from @file{@var{n}.r}, @file{@var{n}.F} or @file{@var{n}.f} by running the Fortran compiler. The precise recipe used is as follows:@refill @table @samp @item .f @samp{$(FC) $(FFLAGS) -c}. @item .F @samp{$(FC) $(FFLAGS) $(CPPFLAGS) -c}. @item .r @samp{$(FC) $(FFLAGS) $(RFLAGS) -c}. @end table @item Preprocessing Fortran and Ratfor programs @file{@var{n}.f} is made automatically from @file{@var{n}.r} or @file{@var{n}.F}. This rule runs just the preprocessor to convert a Ratfor or preprocessable Fortran program into a strict Fortran program. The precise recipe used is as follows:@refill @table @samp @item .F @samp{$(FC) $(CPPFLAGS) $(FFLAGS) -F}. @item .r @samp{$(FC) $(FFLAGS) $(RFLAGS) -F}. @end table @item Compiling Modula-2 programs @cindex Modula-2, rule to compile @pindex m2c @pindex .sym @pindex .def @pindex .mod @file{@var{n}.sym} is made from @file{@var{n}.def} with a recipe of the form @samp{$(M2C) $(M2FLAGS) $(DEFFLAGS)}. @file{@var{n}.o} is made from @file{@var{n}.mod}; the form is: @w{@samp{$(M2C) $(M2FLAGS) $(MODFLAGS)}}.@refill @need 1200 @item Assembling and preprocessing assembler programs @cindex assembly, rule to compile @pindex as @pindex .s @file{@var{n}.o} is made automatically from @file{@var{n}.s} by running the assembler, @code{as}. The precise recipe is @samp{$(AS) $(ASFLAGS)}.@refill @pindex .S @file{@var{n}.s} is made automatically from @file{@var{n}.S} by running the C preprocessor, @code{cpp}. The precise recipe is @w{@samp{$(CPP) $(CPPFLAGS)}}. @item Linking a single object file @cindex linking, predefined rule for @pindex ld @pindex .o @file{@var{n}} is made automatically from @file{@var{n}.o} by running the linker (usually called @code{ld}) via the C compiler. The precise recipe used is @w{@samp{$(CC) $(LDFLAGS) @var{n}.o $(LOADLIBES) $(LDLIBS)}}. This rule does the right thing for a simple program with only one source file. It will also do the right thing if there are multiple object files (presumably coming from various other source files), one of which has a name matching that of the executable file. Thus, @example x: y.o z.o @end example @noindent when @file{x.c}, @file{y.c} and @file{z.c} all exist will execute: @example @group cc -c x.c -o x.o cc -c y.c -o y.o cc -c z.c -o z.o cc x.o y.o z.o -o x rm -f x.o rm -f y.o rm -f z.o @end group @end example @noindent In more complicated cases, such as when there is no object file whose name derives from the executable file name, you must write an explicit recipe for linking. Each kind of file automatically made into @samp{.o} object files will be automatically linked by using the compiler (@samp{$(CC)}, @samp{$(FC)} or @samp{$(PC)}; the C compiler @samp{$(CC)} is used to assemble @samp{.s} files) without the @samp{-c} option. This could be done by using the @samp{.o} object files as intermediates, but it is faster to do the compiling and linking in one step, so that's how it's done.@refill @item Yacc for C programs @pindex yacc @cindex Yacc, rule to run @pindex .y @file{@var{n}.c} is made automatically from @file{@var{n}.y} by running Yacc with the recipe @samp{$(YACC) $(YFLAGS)}. @item Lex for C programs @pindex lex @cindex Lex, rule to run @pindex .l @file{@var{n}.c} is made automatically from @file{@var{n}.l} by running Lex. The actual recipe is @samp{$(LEX) $(LFLAGS)}. @item Lex for Ratfor programs @file{@var{n}.r} is made automatically from @file{@var{n}.l} by running Lex. The actual recipe is @samp{$(LEX) $(LFLAGS)}. The convention of using the same suffix @samp{.l} for all Lex files regardless of whether they produce C code or Ratfor code makes it impossible for @code{make} to determine automatically which of the two languages you are using in any particular case. If @code{make} is called upon to remake an object file from a @samp{.l} file, it must guess which compiler to use. It will guess the C compiler, because that is more common. If you are using Ratfor, make sure @code{make} knows this by mentioning @file{@var{n}.r} in the makefile. Or, if you are using Ratfor exclusively, with no C files, remove @samp{.c} from the list of implicit rule suffixes with:@refill @example @group .SUFFIXES: .SUFFIXES: .o .r .f .l @dots{} @end group @end example @item Making Lint Libraries from C, Yacc, or Lex programs @pindex lint @cindex @code{lint}, rule to run @pindex .ln @file{@var{n}.ln} is made from @file{@var{n}.c} by running @code{lint}. The precise recipe is @w{@samp{$(LINT) $(LINTFLAGS) $(CPPFLAGS) -i}}. The same recipe is used on the C code produced from @file{@var{n}.y} or @file{@var{n}.l}.@refill @item @TeX{} and Web @cindex @TeX{}, rule to run @cindex Web, rule to run @pindex tex @pindex cweave @pindex weave @pindex tangle @pindex ctangle @pindex .dvi @pindex .tex @pindex .web @pindex .w @pindex .ch @file{@var{n}.dvi} is made from @file{@var{n}.tex} with the recipe @samp{$(TEX)}. @file{@var{n}.tex} is made from @file{@var{n}.web} with @samp{$(WEAVE)}, or from @file{@var{n}.w} (and from @file{@var{n}.ch} if it exists or can be made) with @samp{$(CWEAVE)}. @file{@var{n}.p} is made from @file{@var{n}.web} with @samp{$(TANGLE)} and @file{@var{n}.c} is made from @file{@var{n}.w} (and from @file{@var{n}.ch} if it exists or can be made) with @samp{$(CTANGLE)}.@refill @item Texinfo and Info @cindex Texinfo, rule to format @cindex Info, rule to format @pindex texi2dvi @pindex makeinfo @pindex .texinfo @pindex .info @pindex .texi @pindex .txinfo @file{@var{n}.dvi} is made from @file{@var{n}.texinfo}, @file{@var{n}.texi}, or @file{@var{n}.txinfo}, with the recipe @w{@samp{$(TEXI2DVI) $(TEXI2DVI_FLAGS)}}. @file{@var{n}.info} is made from @file{@var{n}.texinfo}, @file{@var{n}.texi}, or @file{@var{n}.txinfo}, with the recipe @w{@samp{$(MAKEINFO) $(MAKEINFO_FLAGS)}}. @item RCS @cindex RCS, rule to extract from @pindex co @pindex ,v @r{(RCS file extension)} Any file @file{@var{n}} is extracted if necessary from an RCS file named either @file{@var{n},v} or @file{RCS/@var{n},v}. The precise recipe used is @w{@samp{$(CO) $(COFLAGS)}}. @file{@var{n}} will not be extracted from RCS if it already exists, even if the RCS file is newer. The rules for RCS are terminal (@pxref{Match-Anything Rules, ,Match-Anything Pattern Rules}), so RCS files cannot be generated from another source; they must actually exist.@refill @item SCCS @cindex SCCS, rule to extract from @pindex get @pindex s. @r{(SCCS file prefix)} Any file @file{@var{n}} is extracted if necessary from an SCCS file named either @file{s.@var{n}} or @file{SCCS/s.@var{n}}. The precise recipe used is @w{@samp{$(GET) $(GFLAGS)}}. The rules for SCCS are terminal (@pxref{Match-Anything Rules, ,Match-Anything Pattern Rules}), so SCCS files cannot be generated from another source; they must actually exist.@refill @pindex .sh For the benefit of SCCS, a file @file{@var{n}} is copied from @file{@var{n}.sh} and made executable (by everyone). This is for shell scripts that are checked into SCCS. Since RCS preserves the execution permission of a file, you do not need to use this feature with RCS.@refill We recommend that you avoid using of SCCS. RCS is widely held to be superior, and is also free. By choosing free software in place of comparable (or inferior) proprietary software, you support the free software movement. @end table Usually, you want to change only the variables listed in the table above, which are documented in the following section. However, the recipes in built-in implicit rules actually use variables such as @code{COMPILE.c}, @code{LINK.p}, and @code{PREPROCESS.S}, whose values contain the recipes listed above. @code{make} follows the convention that the rule to compile a @file{.@var{x}} source file uses the variable @code{COMPILE.@var{x}}. Similarly, the rule to produce an executable from a @file{.@var{x}} file uses @code{LINK.@var{x}}; and the rule to preprocess a @file{.@var{x}} file uses @code{PREPROCESS.@var{x}}. @vindex OUTPUT_OPTION Every rule that produces an object file uses the variable @code{OUTPUT_OPTION}. @code{make} defines this variable either to contain @samp{-o $@@}, or to be empty, depending on a compile-time option. You need the @samp{-o} option to ensure that the output goes into the right file when the source file is in a different directory, as when using @code{VPATH} (@pxref{Directory Search}). However, compilers on some systems do not accept a @samp{-o} switch for object files. If you use such a system, and use @code{VPATH}, some compilations will put their output in the wrong place. A possible workaround for this problem is to give @code{OUTPUT_OPTION} the value @w{@samp{; mv $*.o $@@}}. @node Implicit Variables, Chained Rules, Catalogue of Rules, Implicit Rules @section Variables Used by Implicit Rules @cindex flags for compilers The recipes in built-in implicit rules make liberal use of certain predefined variables. You can alter the values of these variables in the makefile, with arguments to @code{make}, or in the environment to alter how the implicit rules work without redefining the rules themselves. You can cancel all variables used by implicit rules with the @samp{-R} or @samp{--no-builtin-variables} option. For example, the recipe used to compile a C source file actually says @samp{$(CC) -c $(CFLAGS) $(CPPFLAGS)}. The default values of the variables used are @samp{cc} and nothing, resulting in the command @samp{cc -c}. By redefining @samp{CC} to @samp{ncc}, you could cause @samp{ncc} to be used for all C compilations performed by the implicit rule. By redefining @samp{CFLAGS} to be @samp{-g}, you could pass the @samp{-g} option to each compilation. @emph{All} implicit rules that do C compilation use @samp{$(CC)} to get the program name for the compiler and @emph{all} include @samp{$(CFLAGS)} among the arguments given to the compiler.@refill The variables used in implicit rules fall into two classes: those that are names of programs (like @code{CC}) and those that contain arguments for the programs (like @code{CFLAGS}). (The ``name of a program'' may also contain some command arguments, but it must start with an actual executable program name.) If a variable value contains more than one argument, separate them with spaces. The following tables describe of some of the more commonly-used predefined variables. This list is not exhaustive, and the default values shown here may not be what @code{make} selects for your environment. To see the complete list of predefined variables for your instance of GNU @code{make} you can run @samp{make -p} in a directory with no makefiles. Here is a table of some of the more common variables used as names of programs in built-in rules: @table @code @item AR @vindex AR Archive-maintaining program; default @samp{ar}. @pindex ar @item AS @vindex AS Program for compiling assembly files; default @samp{as}. @pindex as @item CC @vindex CC Program for compiling C programs; default @samp{cc}. @pindex cc @item CXX @vindex CXX Program for compiling C++ programs; default @samp{g++}. @pindex g++ @item CPP @vindex CPP Program for running the C preprocessor, with results to standard output; default @samp{$(CC) -E}. @item FC @vindex FC Program for compiling or preprocessing Fortran and Ratfor programs; default @samp{f77}. @pindex f77 @item M2C @vindex M2C Program to use to compile Modula-2 source code; default @samp{m2c}. @pindex m2c @item PC @vindex PC Program for compiling Pascal programs; default @samp{pc}. @pindex pc @item CO @vindex CO Program for extracting a file from RCS; default @samp{co}. @pindex co @item GET @vindex GET Program for extracting a file from SCCS; default @samp{get}. @pindex get @item LEX @vindex LEX Program to use to turn Lex grammars into source code; default @samp{lex}. @pindex lex @item YACC @vindex YACC Program to use to turn Yacc grammars into source code; default @samp{yacc}. @pindex yacc @item LINT @vindex LINT Program to use to run lint on source code; default @samp{lint}. @pindex lint @item MAKEINFO @vindex MAKEINFO Program to convert a Texinfo source file into an Info file; default @samp{makeinfo}. @pindex makeinfo @item TEX @vindex TEX Program to make @TeX{} @sc{dvi} files from @TeX{} source; default @samp{tex}. @pindex tex @item TEXI2DVI @vindex TEXI2DVI Program to make @TeX{} @sc{dvi} files from Texinfo source; default @samp{texi2dvi}. @pindex texi2dvi @item WEAVE @vindex WEAVE Program to translate Web into @TeX{}; default @samp{weave}. @pindex weave @item CWEAVE @vindex CWEAVE Program to translate C Web into @TeX{}; default @samp{cweave}. @pindex cweave @item TANGLE @vindex TANGLE Program to translate Web into Pascal; default @samp{tangle}. @pindex tangle @item CTANGLE @vindex CTANGLE Program to translate C Web into C; default @samp{ctangle}. @pindex ctangle @item RM @vindex RM Command to remove a file; default @samp{rm -f}. @pindex rm @end table Here is a table of variables whose values are additional arguments for the programs above. The default values for all of these is the empty string, unless otherwise noted. @table @code @item ARFLAGS @vindex ARFLAGS Flags to give the archive-maintaining program; default @samp{rv}. @item ASFLAGS @vindex ASFLAGS Extra flags to give to the assembler (when explicitly invoked on a @samp{.s} or @samp{.S} file). @item CFLAGS @vindex CFLAGS Extra flags to give to the C compiler. @item CXXFLAGS @vindex CXXFLAGS Extra flags to give to the C++ compiler. @item COFLAGS @vindex COFLAGS Extra flags to give to the RCS @code{co} program. @item CPPFLAGS @vindex CPPFLAGS Extra flags to give to the C preprocessor and programs that use it (the C and Fortran compilers). @item FFLAGS @vindex FFLAGS Extra flags to give to the Fortran compiler. @item GFLAGS @vindex GFLAGS Extra flags to give to the SCCS @code{get} program. @item LDFLAGS @vindex LDFLAGS Extra flags to give to compilers when they are supposed to invoke the linker, @samp{ld}, such as @code{-L}. Libraries (@code{-lfoo}) should be added to the @code{LDLIBS} variable instead. @item LDLIBS @vindex LDLIBS @vindex LOADLIBES Library flags or names given to compilers when they are supposed to invoke the linker, @samp{ld}. @code{LOADLIBES} is a deprecated (but still supported) alternative to @code{LDLIBS}. Non-library linker flags, such as @code{-L}, should go in the @code{LDFLAGS} variable. @item LFLAGS @vindex LFLAGS Extra flags to give to Lex. @item YFLAGS @vindex YFLAGS Extra flags to give to Yacc. @item PFLAGS @vindex PFLAGS Extra flags to give to the Pascal compiler. @item RFLAGS @vindex RFLAGS Extra flags to give to the Fortran compiler for Ratfor programs. @item LINTFLAGS @vindex LINTFLAGS Extra flags to give to lint. @end table @node Chained Rules, Pattern Rules, Implicit Variables, Implicit Rules @section Chains of Implicit Rules @cindex chains of rules @cindex rule, implicit, chains of Sometimes a file can be made by a sequence of implicit rules. For example, a file @file{@var{n}.o} could be made from @file{@var{n}.y} by running first Yacc and then @code{cc}. Such a sequence is called a @dfn{chain}. If the file @file{@var{n}.c} exists, or is mentioned in the makefile, no special searching is required: @code{make} finds that the object file can be made by C compilation from @file{@var{n}.c}; later on, when considering how to make @file{@var{n}.c}, the rule for running Yacc is used. Ultimately both @file{@var{n}.c} and @file{@var{n}.o} are updated.@refill @cindex intermediate files @cindex files, intermediate However, even if @file{@var{n}.c} does not exist and is not mentioned, @code{make} knows how to envision it as the missing link between @file{@var{n}.o} and @file{@var{n}.y}! In this case, @file{@var{n}.c} is called an @dfn{intermediate file}. Once @code{make} has decided to use the intermediate file, it is entered in the data base as if it had been mentioned in the makefile, along with the implicit rule that says how to create it.@refill Intermediate files are remade using their rules just like all other files. But intermediate files are treated differently in two ways. The first difference is what happens if the intermediate file does not exist. If an ordinary file @var{b} does not exist, and @code{make} considers a target that depends on @var{b}, it invariably creates @var{b} and then updates the target from @var{b}. But if @var{b} is an intermediate file, then @code{make} can leave well enough alone. It won't bother updating @var{b}, or the ultimate target, unless some prerequisite of @var{b} is newer than that target or there is some other reason to update that target. The second difference is that if @code{make} @emph{does} create @var{b} in order to update something else, it deletes @var{b} later on after it is no longer needed. Therefore, an intermediate file which did not exist before @code{make} also does not exist after @code{make}. @code{make} reports the deletion to you by printing a @samp{rm -f} command showing which file it is deleting. Ordinarily, a file cannot be intermediate if it is mentioned in the makefile as a target or prerequisite. However, you can explicitly mark a file as intermediate by listing it as a prerequisite of the special target @code{.INTERMEDIATE}. This takes effect even if the file is mentioned explicitly in some other way. @cindex intermediate files, preserving @cindex preserving intermediate files @cindex secondary files You can prevent automatic deletion of an intermediate file by marking it as a @dfn{secondary} file. To do this, list it as a prerequisite of the special target @code{.SECONDARY}. When a file is secondary, @code{make} will not create the file merely because it does not already exist, but @code{make} does not automatically delete the file. Marking a file as secondary also marks it as intermediate. You can list the target pattern of an implicit rule (such as @samp{%.o}) as a prerequisite of the special target @code{.PRECIOUS} to preserve intermediate files made by implicit rules whose target patterns match that file's name; see @ref{Interrupts}.@refill @cindex preserving with @code{.PRECIOUS} @cindex @code{.PRECIOUS} intermediate files A chain can involve more than two implicit rules. For example, it is possible to make a file @file{foo} from @file{RCS/foo.y,v} by running RCS, Yacc and @code{cc}. Then both @file{foo.y} and @file{foo.c} are intermediate files that are deleted at the end.@refill No single implicit rule can appear more than once in a chain. This means that @code{make} will not even consider such a ridiculous thing as making @file{foo} from @file{foo.o.o} by running the linker twice. This constraint has the added benefit of preventing any infinite loop in the search for an implicit rule chain. There are some special implicit rules to optimize certain cases that would otherwise be handled by rule chains. For example, making @file{foo} from @file{foo.c} could be handled by compiling and linking with separate chained rules, using @file{foo.o} as an intermediate file. But what actually happens is that a special rule for this case does the compilation and linking with a single @code{cc} command. The optimized rule is used in preference to the step-by-step chain because it comes earlier in the ordering of rules. Finally, for performance reasons @code{make} will not consider non-terminal match-anything rules (i.e., @samp{%:}) when searching for a rule to build a prerequisite of an implicit rule (@pxref{Match-Anything Rules}). @node Pattern Rules, Last Resort, Chained Rules, Implicit Rules @section Defining and Redefining Pattern Rules You define an implicit rule by writing a @dfn{pattern rule}. A pattern rule looks like an ordinary rule, except that its target contains the character @samp{%} (exactly one of them). The target is considered a pattern for matching file names; the @samp{%} can match any nonempty substring, while other characters match only themselves. The prerequisites likewise use @samp{%} to show how their names relate to the target name. Thus, a pattern rule @samp{%.o : %.c} says how to make any file @file{@var{stem}.o} from another file @file{@var{stem}.c}.@refill Note that expansion using @samp{%} in pattern rules occurs @strong{after} any variable or function expansions, which take place when the makefile is read. @xref{Using Variables, , How to Use Variables}, and @ref{Functions, ,Functions for Transforming Text}. @menu * Pattern Intro:: An introduction to pattern rules. * Pattern Examples:: Examples of pattern rules. * Automatic Variables:: How to use automatic variables in the recipe of implicit rules. * Pattern Match:: How patterns match. * Match-Anything Rules:: Precautions you should take prior to defining rules that can match any target file whatever. * Canceling Rules:: How to override or cancel built-in rules. @end menu @node Pattern Intro, Pattern Examples, Pattern Rules, Pattern Rules @subsection Introduction to Pattern Rules @cindex pattern rule @cindex rule, pattern A pattern rule contains the character @samp{%} (exactly one of them) in the target; otherwise, it looks exactly like an ordinary rule. The target is a pattern for matching file names; the @samp{%} matches any nonempty substring, while other characters match only themselves. @cindex target pattern, implicit @cindex @code{%}, in pattern rules For example, @samp{%.c} as a pattern matches any file name that ends in @samp{.c}. @samp{s.%.c} as a pattern matches any file name that starts with @samp{s.}, ends in @samp{.c} and is at least five characters long. (There must be at least one character to match the @samp{%}.) The substring that the @samp{%} matches is called the @dfn{stem}.@refill @samp{%} in a prerequisite of a pattern rule stands for the same stem that was matched by the @samp{%} in the target. In order for the pattern rule to apply, its target pattern must match the file name under consideration and all of its prerequisites (after pattern substitution) must name files that exist or can be made. These files become prerequisites of the target. @cindex prerequisite pattern, implicit Thus, a rule of the form @example %.o : %.c ; @var{recipe}@dots{} @end example @noindent specifies how to make a file @file{@var{n}.o}, with another file @file{@var{n}.c} as its prerequisite, provided that @file{@var{n}.c} exists or can be made. There may also be prerequisites that do not use @samp{%}; such a prerequisite attaches to every file made by this pattern rule. These unvarying prerequisites are useful occasionally. A pattern rule need not have any prerequisites that contain @samp{%}, or in fact any prerequisites at all. Such a rule is effectively a general wildcard. It provides a way to make any file that matches the target pattern. @xref{Last Resort}. More than one pattern rule may match a target. In this case @code{make} will choose the ``best fit'' rule. @xref{Pattern Match, ,How Patterns Match}. @cindex multiple targets, in pattern rule @cindex target, multiple in pattern rule Pattern rules may have more than one target; however, every target must contain a @code{%} character. Pattern rules are always treated as grouped targets (@pxref{Multiple Targets, , Multiple Targets in a Rule}) regardless of whether they use the @code{:} or @code{&:} separator. @node Pattern Examples, Automatic Variables, Pattern Intro, Pattern Rules @subsection Pattern Rule Examples Here are some examples of pattern rules actually predefined in @code{make}. First, the rule that compiles @samp{.c} files into @samp{.o} files:@refill @example %.o : %.c $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@@ @end example @noindent defines a rule that can make any file @file{@var{x}.o} from @file{@var{x}.c}. The recipe uses the automatic variables @samp{$@@} and @samp{$<} to substitute the names of the target file and the source file in each case where the rule applies (@pxref{Automatic Variables}).@refill Here is a second built-in rule: @example % :: RCS/%,v $(CO) $(COFLAGS) $< @end example @noindent defines a rule that can make any file @file{@var{x}} whatsoever from a corresponding file @file{@var{x},v} in the sub-directory @file{RCS}. Since the target is @samp{%}, this rule will apply to any file whatever, provided the appropriate prerequisite file exists. The double colon makes the rule @dfn{terminal}, which means that its prerequisite may not be an intermediate file (@pxref{Match-Anything Rules, ,Match-Anything Pattern Rules}).@refill @need 500 This pattern rule has two targets: @example @group %.tab.c %.tab.h: %.y bison -d $< @end group @end example @noindent @c The following paragraph is rewritten to avoid overfull hboxes This tells @code{make} that the recipe @samp{bison -d @var{x}.y} will make both @file{@var{x}.tab.c} and @file{@var{x}.tab.h}. If the file @file{foo} depends on the files @file{parse.tab.o} and @file{scan.o} and the file @file{scan.o} depends on the file @file{parse.tab.h}, when @file{parse.y} is changed, the recipe @samp{bison -d parse.y} will be executed only once, and the prerequisites of both @file{parse.tab.o} and @file{scan.o} will be satisfied. (Presumably the file @file{parse.tab.o} will be recompiled from @file{parse.tab.c} and the file @file{scan.o} from @file{scan.c}, while @file{foo} is linked from @file{parse.tab.o}, @file{scan.o}, and its other prerequisites, and it will execute happily ever after.)@refill @node Automatic Variables, Pattern Match, Pattern Examples, Pattern Rules @subsection Automatic Variables @cindex automatic variables @cindex variables, automatic @cindex variables, and implicit rule Suppose you are writing a pattern rule to compile a @samp{.c} file into a @samp{.o} file: how do you write the @samp{cc} command so that it operates on the right source file name? You cannot write the name in the recipe, because the name is different each time the implicit rule is applied. What you do is use a special feature of @code{make}, the @dfn{automatic variables}. These variables have values computed afresh for each rule that is executed, based on the target and prerequisites of the rule. In this example, you would use @samp{$@@} for the object file name and @samp{$<} for the source file name. @cindex automatic variables in prerequisites @cindex prerequisites, and automatic variables It's very important that you recognize the limited scope in which automatic variable values are available: they only have values within the recipe. In particular, you cannot use them anywhere within the target list of a rule; they have no value there and will expand to the empty string. Also, they cannot be accessed directly within the prerequisite list of a rule. A common mistake is attempting to use @code{$@@} within the prerequisites list; this will not work. However, there is a special feature of GNU @code{make}, secondary expansion (@pxref{Secondary Expansion}), which will allow automatic variable values to be used in prerequisite lists. Here is a table of automatic variables: @table @code @vindex $@@ @vindex @@ @r{(automatic variable)} @item $@@ The file name of the target of the rule. If the target is an archive member, then @samp{$@@} is the name of the archive file. In a pattern rule that has multiple targets (@pxref{Pattern Intro, ,Introduction to Pattern Rules}), @samp{$@@} is the name of whichever target caused the rule's recipe to be run. @vindex $% @vindex % @r{(automatic variable)} @item $% The target member name, when the target is an archive member. @xref{Archives}. For example, if the target is @file{foo.a(bar.o)} then @samp{$%} is @file{bar.o} and @samp{$@@} is @file{foo.a}. @samp{$%} is empty when the target is not an archive member. @vindex $< @vindex < @r{(automatic variable)} @item $< The name of the first prerequisite. If the target got its recipe from an implicit rule, this will be the first prerequisite added by the implicit rule (@pxref{Implicit Rules}). @vindex $? @vindex ? @r{(automatic variable)} @item $? The names of all the prerequisites that are newer than the target, with spaces between them. If the target does not exist, all prerequisites will be included. For prerequisites which are archive members, only the named member is used (@pxref{Archives}). @cindex prerequisites, list of changed @cindex list of changed prerequisites @vindex $^ @vindex ^ @r{(automatic variable)} @item $^ The names of all the prerequisites, with spaces between them. For prerequisites which are archive members, only the named member is used (@pxref{Archives}). A target has only one prerequisite on each other file it depends on, no matter how many times each file is listed as a prerequisite. So if you list a prerequisite more than once for a target, the value of @code{$^} contains just one copy of the name. This list does @strong{not} contain any of the order-only prerequisites; for those see the @samp{$|} variable, below. @cindex prerequisites, list of all @cindex list of all prerequisites @vindex $+ @vindex + @r{(automatic variable)} @item $+ This is like @samp{$^}, but prerequisites listed more than once are duplicated in the order they were listed in the makefile. This is primarily useful for use in linking commands where it is meaningful to repeat library file names in a particular order. @vindex $| @vindex | @r{(automatic variable)} @item $| The names of all the order-only prerequisites, with spaces between them. @vindex $* @vindex * @r{(automatic variable)} @item $* The stem with which an implicit rule matches (@pxref{Pattern Match, ,How Patterns Match}). If the target is @file{dir/a.foo.b} and the target pattern is @file{a.%.b} then the stem is @file{dir/foo}. The stem is useful for constructing names of related files.@refill @cindex stem, variable for In a static pattern rule, the stem is part of the file name that matched the @samp{%} in the target pattern. In an explicit rule, there is no stem; so @samp{$*} cannot be determined in that way. Instead, if the target name ends with a recognized suffix (@pxref{Suffix Rules, ,Old-Fashioned Suffix Rules}), @samp{$*} is set to the target name minus the suffix. For example, if the target name is @samp{foo.c}, then @samp{$*} is set to @samp{foo}, since @samp{.c} is a suffix. GNU @code{make} does this bizarre thing only for compatibility with other implementations of @code{make}. You should generally avoid using @samp{$*} except in implicit rules or static pattern rules.@refill If the target name in an explicit rule does not end with a recognized suffix, @samp{$*} is set to the empty string for that rule. @end table @samp{$?} is useful even in explicit rules when you wish to operate on only the prerequisites that have changed. For example, suppose that an archive named @file{lib} is supposed to contain copies of several object files. This rule copies just the changed object files into the archive: @example @group lib: foo.o bar.o lose.o win.o ar r lib $? @end group @end example Of the variables listed above, four have values that are single file names, and three have values that are lists of file names. These seven have variants that get just the file's directory name or just the file name within the directory. The variant variables' names are formed by appending @samp{D} or @samp{F}, respectively. The functions @code{dir} and @code{notdir} can be used to obtain a similar effect (@pxref{File Name Functions, , Functions for File Names}). Note, however, that the @samp{D} variants all omit the trailing slash which always appears in the output of the @code{dir} function. Here is a table of the variants: @table @samp @vindex $(@@D) @vindex @@D @r{(automatic variable)} @item $(@@D) The directory part of the file name of the target, with the trailing slash removed. If the value of @samp{$@@} is @file{dir/foo.o} then @samp{$(@@D)} is @file{dir}. This value is @file{.} if @samp{$@@} does not contain a slash. @vindex $(@@F) @vindex @@F @r{(automatic variable)} @item $(@@F) The file-within-directory part of the file name of the target. If the value of @samp{$@@} is @file{dir/foo.o} then @samp{$(@@F)} is @file{foo.o}. @samp{$(@@F)} is equivalent to @samp{$(notdir $@@)}. @vindex $(*D) @vindex *D @r{(automatic variable)} @item $(*D) @vindex $(*F) @vindex *F @r{(automatic variable)} @itemx $(*F) The directory part and the file-within-directory part of the stem; @file{dir} and @file{foo} in this example. @vindex $(%D) @vindex %D @r{(automatic variable)} @item $(%D) @vindex $(%F) @vindex %F @r{(automatic variable)} @itemx $(%F) The directory part and the file-within-directory part of the target archive member name. This makes sense only for archive member targets of the form @file{@var{archive}(@var{member})} and is useful only when @var{member} may contain a directory name. (@xref{Archive Members, ,Archive Members as Targets}.) @vindex $( #include #include #include #include #include #include int plugin_is_GPL_compatible; char * gen_tmpfile(const char *nm, int argc, char **argv) @{ int fd; /* Compute the size of the filename and allocate space for it. */ int len = strlen (argv[0]) + 6 + 1; char *buf = gmk_alloc (len); strcpy (buf, argv[0]); strcat (buf, "XXXXXX"); fd = mkstemp(buf); if (fd >= 0) @{ /* Don't leak the file descriptor. */ close (fd); return buf; @} /* Failure. */ fprintf (stderr, "mkstemp(%s) failed: %s\n", buf, strerror (errno)); gmk_free (buf); return NULL; @} int mk_temp_gmk_setup () @{ /* Register the function with make name "mk-temp". */ gmk_add_function ("mk-temp", gen_tmpfile, 1, 1, 1); return 1; @} @end group @end example Next, we will write a makefile that can build this shared object, load it, and use it: @example @group all: @@echo Temporary file: $(mk-temp tmpfile.) load mk_temp.so mk_temp.so: mk_temp.c $(CC) -shared -fPIC -o $@ $< @end group @end example On MS-Windows, due to peculiarities of how shared objects are produced, the compiler needs to scan the @dfn{import library} produced when building @code{make}, typically called @file{libgnumake-@var{version}.dll.a}, where @var{version} is the version of the load object API. So the recipe to produce a shared object will look on Windows like this (assuming the API version is 1): @example @group mk_temp.dll: mk_temp.c $(CC) -shared -o $@ $< -lgnumake-1 @end group @end example Now when you run @code{make} you'll see something like: @example $ make cc -shared -fPIC -o mk_temp.so mk_temp.c Temporary filename: tmpfile.A7JEwd @end example @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. Note that the read side of the jobserver pipe is set to ``blocking'' mode. 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 @cindex compatibility Here is a summary of the features of GNU @code{make}, for comparison with and credit to other versions of @code{make}. We consider the features of @code{make} in 4.2 BSD systems as a baseline. If you are concerned with writing portable makefiles, you should not use the features of @code{make} listed here, nor the ones in @ref{Missing}. Many features come from the version of @code{make} in System V. @itemize @bullet @item The @code{VPATH} variable and its special meaning. @xref{Directory Search, , Searching Directories for Prerequisites}. This feature exists in System V @code{make}, but is undocumented. It is documented in 4.3 BSD @code{make} (which says it mimics System V's @code{VPATH} feature).@refill @item Included makefiles. @xref{Include, ,Including Other Makefiles}. Allowing multiple files to be included with a single directive is a GNU extension. @item Variables are read from and communicated via the environment. @xref{Environment, ,Variables from the Environment}. @item Options passed through the variable @code{MAKEFLAGS} to recursive invocations of @code{make}. @xref{Options/Recursion, ,Communicating Options to a Sub-@code{make}}. @item The automatic variable @code{$%} is set to the member name in an archive reference. @xref{Automatic Variables}. @item The automatic variables @code{$@@}, @code{$*}, @code{$<}, @code{$%}, and @code{$?} have corresponding forms like @code{$(@@F)} and @code{$(@@D)}. We have generalized this to @code{$^} as an obvious extension. @xref{Automatic Variables}.@refill @item Substitution variable references. @xref{Reference, ,Basics of Variable References}. @item The command line options @samp{-b} and @samp{-m}, accepted and ignored. In System V @code{make}, these options actually do something. @item Execution of recursive commands to run @code{make} via the variable @code{MAKE} even if @samp{-n}, @samp{-q} or @samp{-t} is specified. @xref{Recursion, ,Recursive Use of @code{make}}. @item Support for suffix @samp{.a} in suffix rules. @xref{Archive Suffix Rules}. This feature is obsolete in GNU @code{make}, because the general feature of rule chaining (@pxref{Chained Rules, ,Chains of Implicit Rules}) allows one pattern rule for installing members in an archive (@pxref{Archive Update}) to be sufficient. @item The arrangement of lines and backslash/newline combinations in recipes is retained when the recipes are printed, so they appear as they do in the makefile, except for the stripping of initial whitespace. @end itemize The following features were inspired by various other versions of @code{make}. In some cases it is unclear exactly which versions inspired which others. @itemize @bullet @item Pattern rules using @samp{%}. This has been implemented in several versions of @code{make}. We're not sure who invented it first, but it's been spread around a bit. @xref{Pattern Rules, ,Defining and Redefining Pattern Rules}.@refill @item Rule chaining and implicit intermediate files. This was implemented by Stu Feldman in his version of @code{make} for AT&T Eighth Edition Research Unix, and later by Andrew Hume of AT&T Bell Labs in his @code{mk} program (where he terms it ``transitive closure''). We do not really know if we got this from either of them or thought it up ourselves at the same time. @xref{Chained Rules, ,Chains of Implicit Rules}. @item The automatic variable @code{$^} containing a list of all prerequisites of the current target. We did not invent this, but we have no idea who did. @xref{Automatic Variables}. The automatic variable @code{$+} is a simple extension of @code{$^}. @item The ``what if'' flag (@samp{-W} in GNU @code{make}) was (as far as we know) invented by Andrew Hume in @code{mk}. @xref{Instead of Execution, ,Instead of Executing Recipes}. @item The concept of doing several things at once (parallelism) exists in many incarnations of @code{make} and similar programs, though not in the System V or BSD implementations. @xref{Execution, ,Recipe Execution}. @item A number of different build tools that support parallelism also support collecting output and displaying as a single block. @xref{Parallel Output, ,Output During Parallel Execution}. @item Modified variable references using pattern substitution come from SunOS 4. @xref{Reference, ,Basics of Variable References}. This functionality was provided in GNU @code{make} by the @code{patsubst} function before the alternate syntax was implemented for compatibility with SunOS 4. It is not altogether clear who inspired whom, since GNU @code{make} had @code{patsubst} before SunOS 4 was released.@refill @item The special significance of @samp{+} characters preceding recipe lines (@pxref{Instead of Execution, ,Instead of Executing Recipes}) is mandated by @cite{IEEE Standard 1003.2-1992} (POSIX.2). @item The @samp{+=} syntax to append to the value of a variable comes from SunOS 4 @code{make}. @xref{Appending, , Appending More Text to Variables}. @item The syntax @w{@samp{@var{archive}(@var{mem1} @var{mem2}@dots{})}} to list multiple members in a single archive file comes from SunOS 4 @code{make}. @xref{Archive Members}. @item The @code{-include} directive to include makefiles with no error for a nonexistent file comes from SunOS 4 @code{make}. (But note that SunOS 4 @code{make} does not allow multiple makefiles to be specified in one @code{-include} directive.) The same feature appears with the name @code{sinclude} in SGI @code{make} and perhaps others. @item The @code{!=} shell assignment operator exists in many BSD of @code{make} and is purposefully implemented here to behave identically to those implementations. @item Various build management tools are implemented using scripting languages such as Perl or Python and thus provide a natural embedded scripting language, similar to GNU @code{make}'s integration of GNU Guile. @end itemize The remaining features are inventions new in GNU @code{make}: @itemize @bullet @item Use the @samp{-v} or @samp{--version} option to print version and copyright information. @item Use the @samp{-h} or @samp{--help} option to summarize the options to @code{make}. @item Simply-expanded variables. @xref{Flavors, ,The Two Flavors of Variables}. @item Pass command line variable assignments automatically through the variable @code{MAKE} to recursive @code{make} invocations. @xref{Recursion, ,Recursive Use of @code{make}}. @item Use the @samp{-C} or @samp{--directory} command option to change directory. @xref{Options Summary, ,Summary of Options}. @item Make verbatim variable definitions with @code{define}. @xref{Multi-Line, ,Defining Multi-Line Variables}. @item Declare phony targets with the special target @code{.PHONY}. Andrew Hume of AT&T Bell Labs implemented a similar feature with a different syntax in his @code{mk} program. This seems to be a case of parallel discovery. @xref{Phony Targets, ,Phony Targets}. @item Manipulate text by calling functions. @xref{Functions, ,Functions for Transforming Text}. @item Use the @samp{-o} or @samp{--old-file} option to pretend a file's modification-time is old. @xref{Avoiding Compilation, ,Avoiding Recompilation of Some Files}. @item Conditional execution. This feature has been implemented numerous times in various versions of @code{make}; it seems a natural extension derived from the features of the C preprocessor and similar macro languages and is not a revolutionary concept. @xref{Conditionals, ,Conditional Parts of Makefiles}. @item Specify a search path for included makefiles. @xref{Include, ,Including Other Makefiles}. @item Specify extra makefiles to read with an environment variable. @xref{MAKEFILES Variable, ,The Variable @code{MAKEFILES}}. @item Strip leading sequences of @samp{./} from file names, so that @file{./@var{file}} and @file{@var{file}} are considered to be the same file.@refill @item Use a special search method for library prerequisites written in the form @samp{-l@var{name}}. @xref{Libraries/Search, ,Directory Search for Link Libraries}. @item Allow suffixes for suffix rules (@pxref{Suffix Rules, ,Old-Fashioned Suffix Rules}) to contain any characters. In other versions of @code{make}, they must begin with @samp{.} and not contain any @samp{/} characters. @item Keep track of the current level of @code{make} recursion using the variable @code{MAKELEVEL}. @xref{Recursion, ,Recursive Use of @code{make}}. @item Provide any goals given on the command line in the variable @code{MAKECMDGOALS}. @xref{Goals, ,Arguments to Specify the Goals}. @item Specify static pattern rules. @xref{Static Pattern, ,Static Pattern Rules}. @item Provide selective @code{vpath} search. @xref{Directory Search, ,Searching Directories for Prerequisites}. @item Provide computed variable references. @xref{Reference, ,Basics of Variable References}. @item Update makefiles. @xref{Remaking Makefiles, ,How Makefiles Are Remade}. System V @code{make} has a very, very limited form of this functionality in that it will check out SCCS files for makefiles. @item Various new built-in implicit rules. @xref{Catalogue of Rules, ,Catalogue of Built-In Rules}. @item Load dynamic objects which can modify the behavior of @code{make}. @xref{Loading Objects, ,Loading Dynamic Objects}. @end itemize @node Missing, Makefile Conventions, Features, Top @chapter Incompatibilities and Missing Features @cindex incompatibilities @cindex missing features @cindex features, missing The @code{make} programs in various other systems support a few features that are not implemented in GNU @code{make}. The POSIX.2 standard (@cite{IEEE Standard 1003.2-1992}) which specifies @code{make} does not require any of these features.@refill @itemize @bullet @item A target of the form @samp{@var{file}((@var{entry}))} stands for a member of archive file @var{file}. The member is chosen, not by name, but by being an object file which defines the linker symbol @var{entry}.@refill This feature was not put into GNU @code{make} because of the non-modularity of putting knowledge into @code{make} of the internal format of archive file symbol tables. @xref{Archive Symbols, ,Updating Archive Symbol Directories}. @item Suffixes (used in suffix rules) that end with the character @samp{~} have a special meaning to System V @code{make}; they refer to the SCCS file that corresponds to the file one would get without the @samp{~}. For example, the suffix rule @samp{.c~.o} would make the file @file{@var{n}.o} from the SCCS file @file{s.@var{n}.c}. For complete coverage, a whole series of such suffix rules is required. @xref{Suffix Rules, ,Old-Fashioned Suffix Rules}. In GNU @code{make}, this entire series of cases is handled by two pattern rules for extraction from SCCS, in combination with the general feature of rule chaining. @xref{Chained Rules, ,Chains of Implicit Rules}. @item In System V and 4.3 BSD @code{make}, files found by @code{VPATH} search (@pxref{Directory Search, ,Searching Directories for Prerequisites}) have their names changed inside recipes. We feel it is much cleaner to always use automatic variables and thus make this feature unnecessary.@refill @item In some Unix @code{make}s, the automatic variable @code{$*} appearing in the prerequisites of a rule has the amazingly strange ``feature'' of expanding to the full name of the @emph{target of that rule}. We cannot imagine what went on in the minds of Unix @code{make} developers to do this; it is utterly inconsistent with the normal definition of @code{$*}. @vindex * @r{(automatic variable), unsupported bizarre usage} @item In some Unix @code{make}s, implicit rule search (@pxref{Implicit Rules, ,Using Implicit Rules}) is apparently done for @emph{all} targets, not just those without recipes. This means you can do:@refill @example @group foo.o: cc -c foo.c @end group @end example @noindent and Unix @code{make} will intuit that @file{foo.o} depends on @file{foo.c}.@refill We feel that such usage is broken. The prerequisite properties of @code{make} are well-defined (for GNU @code{make}, at least), and doing such a thing simply does not fit the model.@refill @item GNU @code{make} does not include any built-in implicit rules for compiling or preprocessing EFL programs. If we hear of anyone who is using EFL, we will gladly add them. @item It appears that in SVR4 @code{make}, a suffix rule can be specified with no recipe, and it is treated as if it had an empty recipe (@pxref{Empty Recipes}). For example: @example .c.a: @end example @noindent will override the built-in @file{.c.a} suffix rule. We feel that it is cleaner for a rule without a recipe to always simply add to the prerequisite list for the target. The above example can be easily rewritten to get the desired behavior in GNU @code{make}: @example .c.a: ; @end example @item Some versions of @code{make} invoke the shell with the @samp{-e} flag, except under @samp{-k} (@pxref{Testing, ,Testing the Compilation of a Program}). The @samp{-e} flag tells the shell to exit as soon as any program it runs returns a nonzero status. We feel it is cleaner to write each line of the recipe to stand on its own and not require this special treatment. @end itemize @comment The makefile standards are in a separate file that is also @comment included by standards.texi. @include make-stds.texi @node Quick Reference, Error Messages, Makefile Conventions, Top @appendix Quick Reference This appendix summarizes the directives, text manipulation functions, and special variables which GNU @code{make} understands. @xref{Special Targets}, @ref{Catalogue of Rules, ,Catalogue of Built-In Rules}, and @ref{Options Summary, ,Summary of Options}, for other summaries. Here is a summary of the directives GNU @code{make} recognizes: @table @code @item define @var{variable} @itemx define @var{variable} = @itemx define @var{variable} := @itemx define @var{variable} ::= @itemx define @var{variable} += @itemx define @var{variable} ?= @itemx endef Define multi-line variables.@* @xref{Multi-Line}. @item undefine @var{variable} Undefining variables.@* @xref{Undefine Directive}. @item ifdef @var{variable} @itemx ifndef @var{variable} @itemx ifeq (@var{a},@var{b}) @itemx ifeq "@var{a}" "@var{b}" @itemx ifeq '@var{a}' '@var{b}' @itemx ifneq (@var{a},@var{b}) @itemx ifneq "@var{a}" "@var{b}" @itemx ifneq '@var{a}' '@var{b}' @itemx else @itemx endif Conditionally evaluate part of the makefile.@* @xref{Conditionals}. @item include @var{file} @itemx -include @var{file} @itemx sinclude @var{file} Include another makefile.@* @xref{Include, ,Including Other Makefiles}. @item override @var{variable-assignment} Define a variable, overriding any previous definition, even one from the command line.@* @xref{Override Directive, ,The @code{override} Directive}. @item export Tell @code{make} to export all variables to child processes by default.@* @xref{Variables/Recursion, , Communicating Variables to a Sub-@code{make}}. @item export @var{variable} @itemx export @var{variable-assignment} @itemx unexport @var{variable} Tell @code{make} whether or not to export a particular variable to child processes.@* @xref{Variables/Recursion, , Communicating Variables to a Sub-@code{make}}. @item private @var{variable-assignment} Do not allow this variable assignment to be inherited by prerequisites.@* @xref{Suppressing Inheritance}. @item vpath @var{pattern} @var{path} Specify a search path for files matching a @samp{%} pattern.@* @xref{Selective Search, , The @code{vpath} Directive}. @item vpath @var{pattern} Remove all search paths previously specified for @var{pattern}. @item vpath Remove all search paths previously specified in any @code{vpath} directive. @end table Here is a summary of the built-in functions (@pxref{Functions}): @table @code @item $(subst @var{from},@var{to},@var{text}) Replace @var{from} with @var{to} in @var{text}.@* @xref{Text Functions, , Functions for String Substitution and Analysis}. @item $(patsubst @var{pattern},@var{replacement},@var{text}) Replace words matching @var{pattern} with @var{replacement} in @var{text}.@* @xref{Text Functions, , Functions for String Substitution and Analysis}. @item $(strip @var{string}) Remove excess whitespace characters from @var{string}.@* @xref{Text Functions, , Functions for String Substitution and Analysis}. @item $(findstring @var{find},@var{text}) Locate @var{find} in @var{text}.@* @xref{Text Functions, , Functions for String Substitution and Analysis}. @item $(filter @var{pattern}@dots{},@var{text}) Select words in @var{text} that match one of the @var{pattern} words.@* @xref{Text Functions, , Functions for String Substitution and Analysis}. @item $(filter-out @var{pattern}@dots{},@var{text}) Select words in @var{text} that @emph{do not} match any of the @var{pattern} words.@* @xref{Text Functions, , Functions for String Substitution and Analysis}. @item $(sort @var{list}) Sort the words in @var{list} lexicographically, removing duplicates.@* @xref{Text Functions, , Functions for String Substitution and Analysis}. @item $(word @var{n},@var{text}) Extract the @var{n}th word (one-origin) of @var{text}.@* @xref{Text Functions, , Functions for String Substitution and Analysis}. @item $(words @var{text}) Count the number of words in @var{text}.@* @xref{Text Functions, , Functions for String Substitution and Analysis}. @item $(wordlist @var{s},@var{e},@var{text}) Returns the list of words in @var{text} from @var{s} to @var{e}.@* @xref{Text Functions, , Functions for String Substitution and Analysis}. @item $(firstword @var{names}@dots{}) Extract the first word of @var{names}.@* @xref{Text Functions, , Functions for String Substitution and Analysis}. @item $(lastword @var{names}@dots{}) Extract the last word of @var{names}.@* @xref{Text Functions, , Functions for String Substitution and Analysis}. @item $(dir @var{names}@dots{}) Extract the directory part of each file name.@* @xref{File Name Functions, ,Functions for File Names}. @item $(notdir @var{names}@dots{}) Extract the non-directory part of each file name.@* @xref{File Name Functions, ,Functions for File Names}. @item $(suffix @var{names}@dots{}) Extract the suffix (the last @samp{.} and following characters) of each file name.@* @xref{File Name Functions, ,Functions for File Names}. @item $(basename @var{names}@dots{}) Extract the base name (name without suffix) of each file name.@* @xref{File Name Functions, ,Functions for File Names}. @item $(addsuffix @var{suffix},@var{names}@dots{}) Append @var{suffix} to each word in @var{names}.@* @xref{File Name Functions, ,Functions for File Names}. @item $(addprefix @var{prefix},@var{names}@dots{}) Prepend @var{prefix} to each word in @var{names}.@* @xref{File Name Functions, ,Functions for File Names}. @item $(join @var{list1},@var{list2}) Join two parallel lists of words.@* @xref{File Name Functions, ,Functions for File Names}. @item $(wildcard @var{pattern}@dots{}) Find file names matching a shell file name pattern (@emph{not} a @samp{%} pattern).@* @xref{Wildcard Function, ,The Function @code{wildcard}}. @item $(realpath @var{names}@dots{}) For each file name in @var{names}, expand to an absolute name that does not contain any @code{.}, @code{..}, nor symlinks.@* @xref{File Name Functions, ,Functions for File Names}. @item $(abspath @var{names}@dots{}) For each file name in @var{names}, expand to an absolute name that does not contain any @code{.} or @code{..} components, but preserves symlinks.@* @xref{File Name Functions, ,Functions for File Names}. @item $(error @var{text}@dots{}) When this function is evaluated, @code{make} generates a fatal error with the message @var{text}.@* @xref{Make Control Functions, ,Functions That Control Make}. @item $(warning @var{text}@dots{}) When this function is evaluated, @code{make} generates a warning with the message @var{text}.@* @xref{Make Control Functions, ,Functions That Control Make}. @item $(shell @var{command}) Execute a shell command and return its output.@* @xref{Shell Function, , The @code{shell} Function}. @item $(origin @var{variable}) Return a string describing how the @code{make} variable @var{variable} was defined.@* @xref{Origin Function, , The @code{origin} Function}. @item $(flavor @var{variable}) Return a string describing the flavor of the @code{make} variable @var{variable}.@* @xref{Flavor Function, , The @code{flavor} Function}. @item $(foreach @var{var},@var{words},@var{text}) Evaluate @var{text} with @var{var} bound to each word in @var{words}, and concatenate the results.@* @xref{Foreach Function, ,The @code{foreach} Function}. @item $(if @var{condition},@var{then-part}[,@var{else-part}]) Evaluate the condition @var{condition}; if it's non-empty substitute the expansion of the @var{then-part} otherwise substitute the expansion of the @var{else-part}.@* @xref{Conditional Functions, ,Functions for Conditionals}. @item $(or @var{condition1}[,@var{condition2}[,@var{condition3}@dots{}]]) Evaluate each condition @var{conditionN} one at a time; substitute the first non-empty expansion. If all expansions are empty, substitute the empty string.@* @xref{Conditional Functions, ,Functions for Conditionals}. @item $(and @var{condition1}[,@var{condition2}[,@var{condition3}@dots{}]]) Evaluate each condition @var{conditionN} one at a time; if any expansion results in the empty string substitute the empty string. If all expansions result in a non-empty string, substitute the expansion of the last @var{condition}.@* @xref{Conditional Functions, ,Functions for Conditionals}. @item $(call @var{var},@var{param},@dots{}) Evaluate the variable @var{var} replacing any references to @code{$(1)}, @code{$(2)} with the first, second, etc.@: @var{param} values.@* @xref{Call Function, ,The @code{call} Function}. @item $(eval @var{text}) Evaluate @var{text} then read the results as makefile commands. Expands to the empty string.@* @xref{Eval Function, ,The @code{eval} Function}. @item $(file @var{op} @var{filename},@var{text}) Expand the arguments, then open the file @var{filename} using mode @var{op} and write @var{text} to that file.@* @xref{File Function, ,The @code{file} Function}. @item $(value @var{var}) Evaluates to the contents of the variable @var{var}, with no expansion performed on it.@* @xref{Value Function, ,The @code{value} Function}. @end table Here is a summary of the automatic variables. @xref{Automatic Variables}, for full information. @table @code @item $@@ The file name of the target. @item $% The target member name, when the target is an archive member. @item $< The name of the first prerequisite. @item $? The names of all the prerequisites that are newer than the target, with spaces between them. For prerequisites which are archive members, only the named member is used (@pxref{Archives}). @item $^ @itemx $+ The names of all the prerequisites, with spaces between them. For prerequisites which are archive members, only the named member is used (@pxref{Archives}). The value of @code{$^} omits duplicate prerequisites, while @code{$+} retains them and preserves their order. @item $* The stem with which an implicit rule matches (@pxref{Pattern Match, ,How Patterns Match}). @item $(@@D) @itemx $(@@F) The directory part and the file-within-directory part of @code{$@@}. @item $(*D) @itemx $(*F) The directory part and the file-within-directory part of @code{$*}. @item $(%D) @itemx $(%F) The directory part and the file-within-directory part of @code{$%}. @item $( tar-`sed -e '/version_string/!d' \ -e 's/[^0-9.]*\([0-9.]*\).*/\1/' \ -e q version.c`.shar.Z @end group @group .PHONY: dist dist: $(SRCS) $(AUX) echo tar-`sed \ -e '/version_string/!d' \ -e 's/[^0-9.]*\([0-9.]*\).*/\1/' \ -e q version.c` > .fname -rm -rf `cat .fname` mkdir `cat .fname` ln $(SRCS) $(AUX) `cat .fname` tar chZf `cat .fname`.tar.Z `cat .fname` -rm -rf `cat .fname` .fname @end group @group tar.zoo: $(SRCS) $(AUX) -rm -rf tmp.dir -mkdir tmp.dir -rm tar.zoo for X in $(SRCS) $(AUX) ; do \ echo $$X ; \ sed 's/$$/^M/' $$X \ > tmp.dir/$$X ; done cd tmp.dir ; zoo aM ../tar.zoo * -rm -rf tmp.dir @end group @end example @node GNU Free Documentation License, Concept Index, Complex Makefile, Top @appendix GNU Free Documentation License @cindex FDL, GNU Free Documentation License @include fdl.texi @node Concept Index, Name Index, GNU Free Documentation License, Top @unnumbered Index of Concepts @printindex cp @node Name Index, , Concept Index, Top @unnumbered Index of Functions, Variables, & Directives @printindex fn @bye make-4.3/doc/fdl.texi0000644000175000017500000005561213611136471011437 00000000000000@c The GNU Free Documentation License. @center Version 1.3, 3 November 2008 @c This file is intended to be included within another document, @c hence no sectioning command or @node. @display Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. @uref{https://fsf.org/} Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @end display @enumerate 0 @item PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document @dfn{free} in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of ``copyleft'', which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. @item APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The ``Document'', below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as ``you''. You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A ``Modified Version'' of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A ``Secondary Section'' is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The ``Invariant Sections'' are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The ``Cover Texts'' are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A ``Transparent'' copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not ``Transparent'' is called ``Opaque''. Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, La@TeX{} input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG@. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The ``Title Page'' means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, ``Title Page'' means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. The ``publisher'' means any person or entity that distributes copies of the Document to the public. A section ``Entitled XYZ'' means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as ``Acknowledgements'', ``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title'' of such a section when you modify the Document means that it remains a section ``Entitled XYZ'' according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. @item VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. @item COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. @item MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: @enumerate A @item Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. @item List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. @item State on the Title page the name of the publisher of the Modified Version, as the publisher. @item Preserve all the copyright notices of the Document. @item Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. @item Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. @item Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. @item Include an unaltered copy of this License. @item Preserve the section Entitled ``History'', Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled ``History'' in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. @item Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the ``History'' section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. @item For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. @item Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. @item Delete any section Entitled ``Endorsements''. Such a section may not be included in the Modified Version. @item Do not retitle any existing section to be Entitled ``Endorsements'' or to conflict in title with any Invariant Section. @item Preserve any Warranty Disclaimers. @end enumerate If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section Entitled ``Endorsements'', provided it contains nothing but endorsements of your Modified Version by various parties---for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. @item COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled ``History'' in the various original documents, forming one section Entitled ``History''; likewise combine any sections Entitled ``Acknowledgements'', and any sections Entitled ``Dedications''. You must delete all sections Entitled ``Endorsements.'' @item COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. @item AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an ``aggregate'' if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. @item TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled ``Acknowledgements'', ``Dedications'', or ``History'', the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. @item TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License. However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it. @item FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See @uref{https://www.gnu.org/copyleft/}. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License ``or any later version'' applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document. @item RELICENSING ``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A ``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the site means any set of copyrightable works thus published on the MMC site. ``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization. ``Incorporate'' means to publish or republish a Document, in whole or in part, as part of another Document. An MMC is ``eligible for relicensing'' if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008. The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing. @end enumerate @page @heading ADDENDUM: How to use this License for your documents To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: @smallexample @group Copyright (C) @var{year} @var{your name}. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. @end group @end smallexample If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the ``with@dots{}Texts.''@: line with this: @smallexample @group with the Invariant Sections being @var{list their titles}, with the Front-Cover Texts being @var{list}, and with the Back-Cover Texts being @var{list}. @end group @end smallexample If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. @c Local Variables: @c ispell-local-pdict: "ispell-dict" @c End: make-4.3/doc/make-stds.texi0000644000175000017500000013464412664631142012567 00000000000000@comment This file is included by both standards.texi and make.texinfo. @comment It was broken out of standards.texi on 1/6/93 by roland. @node Makefile Conventions @chapter Makefile Conventions @cindex makefile, conventions for @cindex conventions for makefiles @cindex standards for makefiles @c Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001, @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 @c or any later version published by the Free Software Foundation; @c with no Invariant Sections, with no @c Front-Cover Texts, and with no Back-Cover Texts. @c A copy of the license is included in the section entitled ``GNU @c Free Documentation License''. This @ifinfo node @end ifinfo @iftex @ifset CODESTD section @end ifset @ifclear CODESTD chapter @end ifclear @end iftex describes conventions for writing the Makefiles for GNU programs. Using Automake will help you write a Makefile that follows these conventions. For more information on portable Makefiles, see @sc{posix} and @ref{Portable Make, Portable Make Programming,, autoconf, Autoconf}. @menu * Makefile Basics:: General conventions for Makefiles. * Utilities in Makefiles:: Utilities to be used in Makefiles. * Command Variables:: Variables for specifying commands. * 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 @samp{install} rule: normal, pre-install and post-install. @end menu @node Makefile Basics @section General Conventions for Makefiles Every Makefile should contain this line: @example SHELL = /bin/sh @end example @noindent to avoid trouble on systems where the @code{SHELL} variable might be inherited from the environment. (This is never a problem with GNU @code{make}.) Different @code{make} programs have incompatible suffix lists and implicit rules, and this sometimes creates confusion or misbehavior. So it is a good idea to set the suffix list explicitly using only the suffixes you need in the particular Makefile, like this: @example .SUFFIXES: .SUFFIXES: .c .o @end example @noindent The first line clears out the suffix list, the second introduces all suffixes which may be subject to implicit rules in this Makefile. Don't assume that @file{.} is in the path for command execution. When you need to run programs that are a part of your package during the make, please make sure that it uses @file{./} if the program is built as part of the make or @file{$(srcdir)/} if the file is an unchanging part of the source code. Without one of these prefixes, the current search path is used. The distinction between @file{./} (the @dfn{build directory}) and @file{$(srcdir)/} (the @dfn{source directory}) is important because users can build in a separate directory using the @samp{--srcdir} option to @file{configure}. A rule of the form: @smallexample foo.1 : foo.man sedscript sed -f sedscript foo.man > foo.1 @end smallexample @noindent will fail when the build directory is not the source directory, because @file{foo.man} and @file{sedscript} are in the source directory. When using GNU @code{make}, relying on @samp{VPATH} to find the source file will work in the case where there is a single dependency file, since the @code{make} automatic variable @samp{$<} will represent the source file wherever it is. (Many versions of @code{make} set @samp{$<} only in implicit rules.) A Makefile target like @smallexample foo.o : bar.c $(CC) -I. -I$(srcdir) $(CFLAGS) -c bar.c -o foo.o @end smallexample @noindent should instead be written as @smallexample foo.o : bar.c $(CC) -I. -I$(srcdir) $(CFLAGS) -c $< -o $@@ @end smallexample @noindent in order to allow @samp{VPATH} to work correctly. When the target has multiple dependencies, using an explicit @samp{$(srcdir)} is the easiest way to make the rule work well. For example, the target above for @file{foo.1} is best written as: @smallexample foo.1 : foo.man sedscript sed -f $(srcdir)/sedscript $(srcdir)/foo.man > $@@ @end smallexample GNU distributions usually contain some files which are not source files---for example, Info files, and the output from Autoconf, Automake, Bison or Flex. Since these files normally appear in the source directory, they should always appear in the source directory, not in the build directory. So Makefile rules to update them should put the updated files in the source directory. However, if a file does not appear in the distribution, then the Makefile should not put it in the source directory, because building a program in ordinary circumstances should not modify the source directory in any way. Try to make the build and installation targets, at least (and all their subtargets) work correctly with a parallel @code{make}. @node Utilities in Makefiles @section Utilities in Makefiles Write the Makefile commands (and any shell scripts, such as @code{configure}) to run under @code{sh} (both the traditional Bourne shell and the @sc{posix} shell), not @code{csh}. Don't use any special features of @code{ksh} or @code{bash}, or @sc{posix} features not widely supported in traditional Bourne @code{sh}. The @code{configure} script and the Makefile rules for building and installation should not use any utilities directly except these: @c dd find @c gunzip gzip md5sum @c mkfifo mknod tee uname @example awk cat cmp cp diff echo egrep expr false grep install-info ln ls mkdir mv printf pwd rm rmdir sed sleep sort tar test touch tr true @end example Compression programs such as @code{gzip} can be used in the @code{dist} rule. Generally, stick to the widely-supported (usually @sc{posix}-specified) options and features of these programs. For example, don't use @samp{mkdir -p}, convenient as it may be, because a few systems don't support it at all and with others, it is not safe for parallel execution. For a list of known incompatibilities, see @ref{Portable Shell, Portable Shell Programming,, autoconf, Autoconf}. It is a good idea to avoid creating symbolic links in makefiles, since a few file systems don't support them. The Makefile rules for building and installation can also use compilers and related programs, but should do so via @code{make} variables so that the user can substitute alternatives. Here are some of the programs we mean: @example ar bison cc flex install ld ldconfig lex make makeinfo ranlib texi2dvi yacc @end example Use the following @code{make} variables to run those programs: @example $(AR) $(BISON) $(CC) $(FLEX) $(INSTALL) $(LD) $(LDCONFIG) $(LEX) $(MAKE) $(MAKEINFO) $(RANLIB) $(TEXI2DVI) $(YACC) @end example When you use @code{ranlib} or @code{ldconfig}, you should make sure nothing bad happens if the system does not have the program in question. Arrange to ignore an error from that command, and print a message before the command to tell the user that failure of this command does not mean a problem. (The Autoconf @samp{AC_PROG_RANLIB} macro can help with this.) If you use symbolic links, you should implement a fallback for systems that don't have symbolic links. Additional utilities that can be used via Make variables are: @example chgrp chmod chown mknod @end example It is ok to use other utilities in Makefile portions (or scripts) intended only for particular systems where you know those utilities exist. @node Command Variables @section Variables for Specifying Commands Makefiles should provide variables for overriding certain commands, options, and so on. In particular, you should run most utility programs via variables. Thus, if you use Bison, have a variable named @code{BISON} whose default value is set with @samp{BISON = bison}, and refer to it with @code{$(BISON)} whenever you need to use Bison. File management utilities such as @code{ln}, @code{rm}, @code{mv}, and so on, need not be referred to through variables in this way, since users don't need to replace them with other programs. Each program-name variable should come with an options variable that is used to supply options to the program. Append @samp{FLAGS} to the program-name variable name to get the options variable name---for example, @code{BISONFLAGS}. (The names @code{CFLAGS} for the C compiler, @code{YFLAGS} for yacc, and @code{LFLAGS} for lex, are exceptions to this rule, but we keep them because they are standard.) Use @code{CPPFLAGS} in any compilation command that runs the preprocessor, and use @code{LDFLAGS} in any compilation command that does linking as well as in any direct use of @code{ld}. If there are C compiler options that @emph{must} be used for proper compilation of certain files, do not include them in @code{CFLAGS}. Users expect to be able to specify @code{CFLAGS} freely themselves. Instead, arrange to pass the necessary options to the C compiler independently of @code{CFLAGS}, by writing them explicitly in the compilation commands or by defining an implicit rule, like this: @smallexample CFLAGS = -g ALL_CFLAGS = -I. $(CFLAGS) .c.o: $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $< @end smallexample Do include the @samp{-g} option in @code{CFLAGS}, because that is not @emph{required} for proper compilation. You can consider it a default that is only recommended. If the package is set up so that it is compiled with GCC by default, then you might as well include @samp{-O} in the default value of @code{CFLAGS} as well. Put @code{CFLAGS} last in the compilation command, after other variables containing compiler options, so the user can use @code{CFLAGS} to override the others. @code{CFLAGS} should be used in every invocation of the C compiler, both those which do compilation and those which do linking. Every Makefile should define the variable @code{INSTALL}, which is the basic command for installing a file into the system. Every Makefile should also define the variables @code{INSTALL_PROGRAM} and @code{INSTALL_DATA}. (The default for @code{INSTALL_PROGRAM} should be @code{$(INSTALL)}; the default for @code{INSTALL_DATA} should be @code{$@{INSTALL@} -m 644}.) Then it should use those variables as the commands for actual installation, for executables and non-executables respectively. Minimal use of these variables is as follows: @example $(INSTALL_PROGRAM) foo $(bindir)/foo $(INSTALL_DATA) libfoo.a $(libdir)/libfoo.a @end example However, it is preferable to support a @code{DESTDIR} prefix on the target files, as explained in the next section. It is acceptable, but not required, to install multiple files in one command, with the final argument being a directory, as in: @example $(INSTALL_PROGRAM) foo bar baz $(bindir) @end example @node DESTDIR @section @code{DESTDIR}: Support for Staged Installs @vindex DESTDIR @cindex staged installs @cindex installations, staged @code{DESTDIR} is a variable prepended to each installed target file, like this: @example $(INSTALL_PROGRAM) foo $(DESTDIR)$(bindir)/foo $(INSTALL_DATA) libfoo.a $(DESTDIR)$(libdir)/libfoo.a @end example The @code{DESTDIR} variable is specified by the user on the @code{make} command line as an absolute file name. For example: @example make DESTDIR=/tmp/stage install @end example @noindent @code{DESTDIR} should be supported only in the @code{install*} and @code{uninstall*} targets, as those are the only targets where it is useful. If your installation step would normally install @file{/usr/local/bin/foo} and @file{/usr/@/local/@/lib/@/libfoo.a}, then an installation invoked as in the example above would install @file{/tmp/stage/usr/local/bin/foo} and @file{/tmp/stage/usr/local/lib/libfoo.a} instead. Prepending the variable @code{DESTDIR} to each target in this way provides for @dfn{staged installs}, where the installed files are not placed directly into their expected location but are instead copied into a temporary location (@code{DESTDIR}). However, installed files maintain their relative directory structure and any embedded file names will not be modified. You should not set the value of @code{DESTDIR} in your @file{Makefile} at all; then the files are installed into their expected locations by default. Also, specifying @code{DESTDIR} should not change the operation of the software in any way, so its value should not be included in any file contents. @code{DESTDIR} support is commonly used in package creation. It is also helpful to users who want to understand what a given package will install where, and to allow users who don't normally have permissions to install into protected areas to build and install before gaining those permissions. Finally, it can be useful with tools such as @code{stow}, where code is installed in one place but made to appear to be installed somewhere else using symbolic links or special mount operations. So, we strongly recommend GNU packages support @code{DESTDIR}, though it is not an absolute requirement. @node Directory Variables @section Variables for Installation Directories Installation directories should always be named by variables, so it is easy to install in a nonstandard place. The standard names for these variables and the values they should have in GNU packages are described 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 @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 default settings specified here so that all GNU packages behave identically, allowing the installer to achieve any desired layout. @cindex directories, creating installation @cindex installation directories, creating All installation directories, and their parent directories, should be created (if necessary) before they are installed into. These first two variables set the root for the installation. All the other installation directories should be subdirectories of one of these two, and nothing should be directly installed into these two directories. @table @code @item prefix @vindex prefix A prefix used in constructing the default values of the variables listed below. The default value of @code{prefix} should be @file{/usr/local}. When building the complete GNU system, the prefix will be empty and @file{/usr} will be a symbolic link to @file{/}. (If you are using Autoconf, write it as @samp{@@prefix@@}.) Running @samp{make install} with a different value of @code{prefix} from the one used to build the program should @emph{not} recompile the program. @item exec_prefix @vindex exec_prefix A prefix used in constructing the default values of some of the variables listed below. The default value of @code{exec_prefix} should be @code{$(prefix)}. (If you are using Autoconf, write it as @samp{@@exec_prefix@@}.) Generally, @code{$(exec_prefix)} is used for directories that contain machine-specific files (such as executables and subroutine libraries), while @code{$(prefix)} is used directly for other directories. Running @samp{make install} with a different value of @code{exec_prefix} from the one used to build the program should @emph{not} recompile the program. @end table Executable programs are installed in one of the following directories. @table @code @item bindir @vindex bindir The directory for installing executable programs that users can run. This should normally be @file{/usr/local/bin}, but write it as @file{$(exec_prefix)/bin}. (If you are using Autoconf, write it as @samp{@@bindir@@}.) @item sbindir @vindex sbindir The directory for installing executable programs that can be run from the shell, but are only generally useful to system administrators. This should normally be @file{/usr/local/sbin}, but write it as @file{$(exec_prefix)/sbin}. (If you are using Autoconf, write it as @samp{@@sbindir@@}.) @item libexecdir @vindex libexecdir @comment This paragraph adjusted to avoid overfull hbox --roland 5jul94 The directory for installing executable programs to be run by other programs rather than by users. This directory should normally be @file{/usr/local/libexec}, but write it as @file{$(exec_prefix)/libexec}. (If you are using Autoconf, write it as @samp{@@libexecdir@@}.) The definition of @samp{libexecdir} is the same for all packages, so you should install your data in a subdirectory thereof. Most packages install their data under @file{$(libexecdir)/@var{package-name}/}, possibly within additional subdirectories thereof, such as @file{$(libexecdir)/@var{package-name}/@var{machine}/@var{version}}. @end table Data files used by the program during its execution are divided into categories in two ways. @itemize @bullet @item Some files are normally modified by programs; others are never normally modified (though users may edit some of these). @item Some files are architecture-independent and can be shared by all machines at a site; some are architecture-dependent and can be shared only by machines of the same kind and operating system; others may never be shared between two machines. @end itemize This makes for six different possibilities. However, we want to discourage the use of architecture-dependent files, aside from object files and libraries. It is much cleaner to make other data files architecture-independent, and it is generally not hard. Here are the variables Makefiles should use to specify directories to put these various kinds of files in: @table @samp @item datarootdir The root of the directory tree for read-only architecture-independent data files. This should normally be @file{/usr/local/share}, but write it as @file{$(prefix)/share}. (If you are using Autoconf, write it as @samp{@@datarootdir@@}.) @samp{datadir}'s default value is based on this variable; so are @samp{infodir}, @samp{mandir}, and others. @item datadir The directory for installing idiosyncratic read-only architecture-independent data files for this program. This is usually the same place as @samp{datarootdir}, but we use the two separate variables so that you can move these program-specific files without altering the location for Info files, man pages, etc. @c raggedright (not until next Texinfo release) This should normally be @file{/usr/local/share}, but write it as @file{$(datarootdir)}. (If you are using Autoconf, write it as @samp{@@datadir@@}.) @c end raggedright The definition of @samp{datadir} is the same for all packages, so you should install your data in a subdirectory thereof. Most packages install their data under @file{$(datadir)/@var{package-name}/}. @item sysconfdir The directory for installing read-only data files that pertain to a single machine--that is to say, files for configuring a host. Mailer and network configuration files, @file{/etc/passwd}, and so forth belong here. All the files in this directory should be ordinary ASCII text files. This directory should normally be @file{/usr/local/etc}, but write it as @file{$(prefix)/etc}. (If you are using Autoconf, write it as @samp{@@sysconfdir@@}.) Do not install executables here in this directory (they probably belong in @file{$(libexecdir)} or @file{$(sbindir)}). Also do not install files that are modified in the normal course of their use (programs whose purpose is to change the configuration of the system excluded). Those probably belong in @file{$(localstatedir)}. @item sharedstatedir The directory for installing architecture-independent data files which the programs modify while they run. This should normally be @file{/usr/local/com}, but write it as @file{$(prefix)/com}. (If you are using Autoconf, write it as @samp{@@sharedstatedir@@}.) @item localstatedir The directory for installing data files which the programs modify while they run, and that pertain to one specific machine. Users should never need to modify files in this directory to configure the package's operation; put such configuration information in separate files that go in @file{$(datadir)} or @file{$(sysconfdir)}. @file{$(localstatedir)} should normally be @file{/usr/local/var}, but write it as @file{$(prefix)/var}. (If you are using Autoconf, write it as @samp{@@localstatedir@@}.) @item runstatedir The directory for installing data files which the programs modify while they run, that pertain to one specific machine, and which need not persist longer than the execution of the program---which is generally long-lived, for example, until the next reboot. PID files for system daemons are a typical use. In addition, this directory should not be cleaned except perhaps at reboot, while the general @file{/tmp} (@code{TMPDIR}) may be cleaned arbitrarily. This should normally be @file{/var/run}, but write it as @file{$(localstatedir)/run}. Having it as a separate variable allows the use of @file{/run} if desired, for example. (If you are using Autoconf 2.70 or later, write it as @samp{@@runstatedir@@}.) @end table These variables specify the directory for installing certain specific types of files, if your program has them. Every GNU package should have Info files, so every program needs @samp{infodir}, but not all need @samp{libdir} or @samp{lispdir}. @table @samp @item includedir The directory for installing header files to be included by user programs with the C @samp{#include} preprocessor directive. This should normally be @file{/usr/local/include}, but write it as @file{$(prefix)/include}. (If you are using Autoconf, write it as @samp{@@includedir@@}.) Most compilers other than GCC do not look for header files in directory @file{/usr/local/include}. So installing the header files this way is only useful with GCC. Sometimes this is not a problem because some libraries are only really intended to work with GCC. But some libraries are intended to work with other compilers. They should install their header files in two places, one specified by @code{includedir} and one specified by @code{oldincludedir}. @item oldincludedir The directory for installing @samp{#include} header files for use with compilers other than GCC. This should normally be @file{/usr/include}. (If you are using Autoconf, you can write it as @samp{@@oldincludedir@@}.) The Makefile commands should check whether the value of @code{oldincludedir} is empty. If it is, they should not try to use it; they should cancel the second installation of the header files. A package should not replace an existing header in this directory unless the header came from the same package. Thus, if your Foo package provides a header file @file{foo.h}, then it should install the header file in the @code{oldincludedir} directory if either (1) there is no @file{foo.h} there or (2) the @file{foo.h} that exists came from the Foo package. To tell whether @file{foo.h} came from the Foo package, put a magic string in the file---part of a comment---and @code{grep} for that string. @item docdir The directory for installing documentation files (other than Info) for this package. By default, it should be @file{/usr/local/share/doc/@var{yourpkg}}, but it should be written as @file{$(datarootdir)/doc/@var{yourpkg}}. (If you are using Autoconf, write it as @samp{@@docdir@@}.) The @var{yourpkg} subdirectory, which may include a version number, prevents collisions among files with common names, such as @file{README}. @item infodir The directory for installing the Info files for this package. By default, it should be @file{/usr/local/share/info}, but it should be written as @file{$(datarootdir)/info}. (If you are using Autoconf, write it as @samp{@@infodir@@}.) @code{infodir} is separate from @code{docdir} for compatibility with existing practice. @item htmldir @itemx dvidir @itemx pdfdir @itemx psdir Directories for installing documentation files in the particular format. They should all be set to @code{$(docdir)} by default. (If you are using Autoconf, write them as @samp{@@htmldir@@}, @samp{@@dvidir@@}, etc.) Packages which supply several translations of their documentation should install them in @samp{$(htmldir)/}@var{ll}, @samp{$(pdfdir)/}@var{ll}, etc. where @var{ll} is a locale abbreviation such as @samp{en} or @samp{pt_BR}. @item libdir The directory for object files and libraries of object code. Do not install executables here, they probably ought to go in @file{$(libexecdir)} instead. The value of @code{libdir} should normally be @file{/usr/local/lib}, but write it as @file{$(exec_prefix)/lib}. (If you are using Autoconf, write it as @samp{@@libdir@@}.) @item lispdir The directory for installing any Emacs Lisp files in this package. By default, it should be @file{/usr/local/share/emacs/site-lisp}, but it should be written as @file{$(datarootdir)/emacs/site-lisp}. If you are using Autoconf, write the default as @samp{@@lispdir@@}. In order to make @samp{@@lispdir@@} work, you need the following lines in your @file{configure.ac} file: @example lispdir='$@{datarootdir@}/emacs/site-lisp' AC_SUBST(lispdir) @end example @item localedir The directory for installing locale-specific message catalogs for this package. By default, it should be @file{/usr/local/share/locale}, but it should be written as @file{$(datarootdir)/locale}. (If you are using Autoconf, write it as @samp{@@localedir@@}.) This directory usually has a subdirectory per locale. @end table Unix-style man pages are installed in one of the following: @table @samp @item mandir The top-level directory for installing the man pages (if any) for this package. It will normally be @file{/usr/local/share/man}, but you should write it as @file{$(datarootdir)/man}. (If you are using Autoconf, write it as @samp{@@mandir@@}.) @item man1dir The directory for installing section 1 man pages. Write it as @file{$(mandir)/man1}. @item man2dir The directory for installing section 2 man pages. Write it as @file{$(mandir)/man2} @item @dots{} @strong{Don't make the primary documentation for any GNU software be a man page. Write a manual in Texinfo instead. Man pages are just for the sake of people running GNU software on Unix, which is a secondary application only.} @item manext The file name extension for the installed man page. This should contain a period followed by the appropriate digit; it should normally be @samp{.1}. @item man1ext The file name extension for installed section 1 man pages. @item man2ext The file name extension for installed section 2 man pages. @item @dots{} Use these names instead of @samp{manext} if the package needs to install man pages in more than one section of the manual. @end table And finally, you should set the following variable: @table @samp @item srcdir The directory for the sources being compiled. The value of this variable is normally inserted by the @code{configure} shell script. (If you are using Autoconf, use @samp{srcdir = @@srcdir@@}.) @end table For example: @smallexample @c I have changed some of the comments here slightly to fix an overfull @c hbox, so the make manual can format correctly. --roland # Common prefix for installation directories. # NOTE: This directory must exist when you start the install. prefix = /usr/local datarootdir = $(prefix)/share datadir = $(datarootdir) exec_prefix = $(prefix) # 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 # Where to put the Info files. infodir = $(datarootdir)/info @end smallexample If your program installs a large number of files into one of the standard user-specified directories, it might be useful to group them into a subdirectory particular to that program. If you do this, you should write the @code{install} rule to create these subdirectories. Do not expect the user to include the subdirectory name in the value of any of the variables listed above. The idea of having a uniform set of variable names for installation directories is to enable the user to specify the exact same values for several different GNU packages. In order for this to be useful, all the packages must be designed so that they will work sensibly when the user does so. At times, not all of these variables may be implemented in the current release of Autoconf and/or Automake; but as of Autoconf@tie{}2.60, we believe all of them are. When any are missing, the descriptions here serve as specifications for what Autoconf will implement. As a programmer, you can either use a development version of Autoconf or avoid using these variables until a stable release is made which supports them. @node Standard Targets @section Standard Targets for Users All GNU programs should have the following targets in their Makefiles: @table @samp @item all Compile the entire program. This should be the default target. This target need not rebuild any documentation files; Info files should normally be included in the distribution, and DVI (and other documentation format) files should be made only when explicitly asked for. By default, the Make rules should compile and link with @samp{-g}, so that executable programs have debugging symbols. Otherwise, you are essentially helpless in the face of a crash, and it is often far from easy to reproduce with a fresh build. @item install Compile the program and copy the executables, libraries, and so on to the file names where they should reside for actual use. If there is a simple test to verify that a program is properly installed, this target should run that test. Do not strip executables when installing them. This helps eventual debugging that may be needed later, and nowadays disk space is cheap and dynamic loaders typically ensure debug sections are not loaded during normal execution. Users that need stripped binaries may invoke the @code{install-strip} target to do that. If possible, write the @code{install} target rule so that it does not modify anything in the directory where the program was built, provided @samp{make all} has just been done. This is convenient for building the program under one user name and installing it under another. The commands should create all the directories in which files are to be installed, if they don't already exist. This includes the directories specified as the values of the variables @code{prefix} and @code{exec_prefix}, as well as all subdirectories that are needed. One way to do this is by means of an @code{installdirs} target as described below. Use @samp{-} before any command for installing a man page, so that @code{make} will ignore any errors. This is in case there are systems that don't have the Unix man page documentation system installed. The way to install Info files is to copy them into @file{$(infodir)} with @code{$(INSTALL_DATA)} (@pxref{Command Variables}), and then run the @code{install-info} program if it is present. @code{install-info} is a program that edits the Info @file{dir} file to add or update the menu entry for the given Info file; it is part of the Texinfo package. Here is a sample rule to install an Info file that also tries to handle some additional situations, such as @code{install-info} not being present. @comment This example has been carefully formatted for the Make manual. @comment Please do not reformat it without talking to bug-make@gnu.org. @smallexample do-install-info: foo.info installdirs $(NORMAL_INSTALL) # Prefer an info file in . to one in srcdir. if test -f foo.info; then d=.; \ else d="$(srcdir)"; fi; \ $(INSTALL_DATA) $$d/foo.info \ "$(DESTDIR)$(infodir)/foo.info" # Run install-info only if it exists. # 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 # fail gracefully when there is an unknown command. $(POST_INSTALL) if $(SHELL) -c 'install-info --version' \ >/dev/null 2>&1; then \ install-info --dir-file="$(DESTDIR)$(infodir)/dir" \ "$(DESTDIR)$(infodir)/foo.info"; \ else true; fi @end smallexample When writing the @code{install} target, you must classify all the commands into three categories: normal ones, @dfn{pre-installation} commands and @dfn{post-installation} commands. @xref{Install Command Categories}. @item install-html @itemx install-dvi @itemx install-pdf @itemx install-ps These targets install documentation in formats other than Info; they're intended to be called explicitly by the person installing the package, if that format is desired. GNU prefers Info files, so these must be installed by the @code{install} target. When you have many documentation files to install, we recommend that you avoid collisions and clutter by arranging for these targets to install in subdirectories of the appropriate installation directory, such as @code{htmldir}. As one example, if your package has multiple manuals, and you wish to install HTML documentation with many files (such as the ``split'' mode output by @code{makeinfo --html}), you'll certainly want to use subdirectories, or two nodes with the same name in different manuals will overwrite each other. Please make these @code{install-@var{format}} targets invoke the commands for the @var{format} target, for example, by making @var{format} a dependency. @item uninstall Delete all the installed files---the copies that the @samp{install} and @samp{install-*} targets create. This rule should not modify the directories where compilation is done, only the directories where files are installed. The uninstallation commands are divided into three categories, just like the installation commands. @xref{Install Command Categories}. @item install-strip Like @code{install}, but strip the executable files while installing them. In simple cases, this target can use the @code{install} target in a simple way: @smallexample install-strip: $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' \ install @end smallexample But if the package installs scripts as well as real executables, the @code{install-strip} target can't just refer to the @code{install} target; it has to strip the executables but not the scripts. @code{install-strip} should not strip the executables in the build directory which are being copied for installation. It should only strip the copies that are installed. Normally we do not recommend stripping an executable unless you are sure the program has no bugs. However, it can be reasonable to install a stripped executable for actual execution while saving the unstripped executable elsewhere in case there is a bug. @item clean Delete all files in the current directory that are normally created by building the program. Also delete files in other directories if they are created by this makefile. However, don't delete the files that record the configuration. Also preserve files that could be made by building, but normally aren't because the distribution comes with them. There is no need to delete parent directories that were created with @samp{mkdir -p}, since they could have existed anyway. Delete @file{.dvi} files here if they are not part of the distribution. @item distclean Delete all files in the current directory (or created by this makefile) that are created by configuring or building the program. If you have unpacked the source and built the program without creating any other files, @samp{make distclean} should leave only the files that were in the distribution. However, there is no need to delete parent directories that were created with @samp{mkdir -p}, since they could have existed anyway. @item mostlyclean Like @samp{clean}, but may refrain from deleting a few files that people normally don't want to recompile. For example, the @samp{mostlyclean} target for GCC does not delete @file{libgcc.a}, because recompiling it is rarely necessary and takes a lot of time. @item maintainer-clean Delete almost everything that can be reconstructed with this Makefile. This typically includes everything deleted by @code{distclean}, plus more: C source files produced by Bison, tags tables, Info files, and so on. The reason we say ``almost everything'' is that running the command @samp{make maintainer-clean} should not delete @file{configure} even if @file{configure} can be remade using a rule in the Makefile. More generally, @samp{make maintainer-clean} should not delete anything that needs to exist in order to run @file{configure} and then begin to build the program. Also, there is no need to delete parent directories that were created with @samp{mkdir -p}, since they could have existed anyway. These are the only exceptions; @code{maintainer-clean} should delete everything else that can be rebuilt. The @samp{maintainer-clean} target is intended to be used by a maintainer of the package, not by ordinary users. You may need special tools to reconstruct some of the files that @samp{make maintainer-clean} deletes. Since these files are normally included in the distribution, we don't take care to make them easy to reconstruct. If you find you need to unpack the full distribution again, don't blame us. To help make users aware of this, the commands for the special @code{maintainer-clean} target should start with these two: @smallexample @@echo 'This command is intended for maintainers to use; it' @@echo 'deletes files that may need special tools to rebuild.' @end smallexample @item TAGS Update a tags table for this program. @c ADR: how? @item info Generate any Info files needed. The best way to write the rules is as follows: @smallexample info: foo.info foo.info: foo.texi chap1.texi chap2.texi $(MAKEINFO) $(srcdir)/foo.texi @end smallexample @noindent You must define the variable @code{MAKEINFO} in the Makefile. It should run the @code{makeinfo} program, which is part of the Texinfo distribution. Normally a GNU distribution comes with Info files, and that means the Info files are present in the source directory. Therefore, the Make rule for an info file should update it in the source directory. When users build the package, ordinarily Make will not update the Info files because they will already be up to date. @item dvi @itemx html @itemx pdf @itemx ps Generate documentation files in the given format. These targets should always exist, but any or all can be a no-op if the given output format cannot be generated. These targets should not be dependencies of the @code{all} target; the user must manually invoke them. Here's an example rule for generating DVI files from Texinfo: @smallexample dvi: foo.dvi foo.dvi: foo.texi chap1.texi chap2.texi $(TEXI2DVI) $(srcdir)/foo.texi @end smallexample @noindent You must define the variable @code{TEXI2DVI} in the Makefile. It should run the program @code{texi2dvi}, which is part of the Texinfo distribution. (@code{texi2dvi} uses @TeX{} to do the real work of formatting. @TeX{} is not distributed with Texinfo.) Alternatively, write only the dependencies, and allow GNU @code{make} to provide the command. Here's another example, this one for generating HTML from Texinfo: @smallexample html: foo.html foo.html: foo.texi chap1.texi chap2.texi $(TEXI2HTML) $(srcdir)/foo.texi @end smallexample @noindent Again, you would define the variable @code{TEXI2HTML} in the Makefile; for example, it might run @code{makeinfo --no-split --html} (@command{makeinfo} is part of the Texinfo distribution). @item dist Create a distribution tar file for this program. The tar file should be set up so that the file names in the tar file start with a subdirectory name which is the name of the package it is a distribution for. This name can include the version number. For example, the distribution tar file of GCC version 1.40 unpacks into a subdirectory named @file{gcc-1.40}. The easiest way to do this is to create a subdirectory appropriately named, use @code{ln} or @code{cp} to install the proper files in it, and then @code{tar} that subdirectory. Compress the tar file with @code{gzip}. For example, the actual distribution file for GCC version 1.40 is called @file{gcc-1.40.tar.gz}. It is ok to support other free compression formats as well. The @code{dist} target should explicitly depend on all non-source files that are in the distribution, to make sure they are up to date in the distribution. @ifset CODESTD @xref{Releases, , Making Releases}. @end ifset @ifclear CODESTD @xref{Releases, , Making Releases, standards, GNU Coding Standards}. @end ifclear @item check Perform self-tests (if any). The user must build the program before running the tests, but need not install the program; you should write the self-tests so that they work when the program is built but not installed. @end table The following targets are suggested as conventional names, for programs in which they are useful. @table @code @item installcheck Perform installation tests (if any). The user must build and install the program before running the tests. You should not assume that @file{$(bindir)} is in the search path. @item installdirs It's useful to add a target named @samp{installdirs} to create the directories where files are installed, and their parent directories. There is a script called @file{mkinstalldirs} which is convenient for this; you can find it in the Gnulib package. You can use a rule like this: @comment This has been carefully formatted to look decent in the Make manual. @comment Please be sure not to make it extend any further to the right.--roland @smallexample # Make sure all installation directories (e.g. $(bindir)) # actually exist by making them if necessary. installdirs: mkinstalldirs $(srcdir)/mkinstalldirs $(bindir) $(datadir) \ $(libdir) $(infodir) \ $(mandir) @end smallexample @noindent or, if you wish to support @env{DESTDIR} (strongly encouraged), @smallexample # Make sure all installation directories (e.g. $(bindir)) # actually exist by making them if necessary. installdirs: mkinstalldirs $(srcdir)/mkinstalldirs \ $(DESTDIR)$(bindir) $(DESTDIR)$(datadir) \ $(DESTDIR)$(libdir) $(DESTDIR)$(infodir) \ $(DESTDIR)$(mandir) @end smallexample This rule should not modify the directories where compilation is done. It should do nothing but create installation directories. @end table @node Install Command Categories @section Install Command Categories @cindex pre-installation commands @cindex post-installation commands When writing the @code{install} target, you must classify all the commands into three categories: normal ones, @dfn{pre-installation} commands and @dfn{post-installation} commands. Normal commands move files into their proper places, and set their modes. They may not alter any files except the ones that come entirely from the package they belong to. Pre-installation and post-installation commands may alter other files; in particular, they can edit global configuration files or data bases. Pre-installation commands are typically executed before the normal commands, and post-installation commands are typically run after the normal commands. The most common use for a post-installation command is to run @code{install-info}. This cannot be done with a normal command, since it alters a file (the Info directory) which does not come entirely and solely from the package being installed. It is a post-installation command because it needs to be done after the normal command which installs the package's Info files. Most programs don't need any pre-installation commands, but we have the feature just in case it is needed. To classify the commands in the @code{install} rule into these three categories, insert @dfn{category lines} among them. A category line specifies the category for the commands that follow. A category line consists of a tab and a reference to a special Make variable, plus an optional comment at the end. There are three variables you can use, one for each category; the variable name specifies the category. Category lines are no-ops in ordinary execution because these three Make variables are normally undefined (and you @emph{should not} define them in the makefile). Here are the three possible category lines, each with a comment that explains what it means: @smallexample $(PRE_INSTALL) # @r{Pre-install commands follow.} $(POST_INSTALL) # @r{Post-install commands follow.} $(NORMAL_INSTALL) # @r{Normal commands follow.} @end smallexample If you don't use a category line at the beginning of the @code{install} rule, all the commands are classified as normal until the first category line. If you don't use any category lines, all the commands are classified as normal. These are the category lines for @code{uninstall}: @smallexample $(PRE_UNINSTALL) # @r{Pre-uninstall commands follow.} $(POST_UNINSTALL) # @r{Post-uninstall commands follow.} $(NORMAL_UNINSTALL) # @r{Normal commands follow.} @end smallexample Typically, a pre-uninstall command would be used for deleting entries from the Info directory. If the @code{install} or @code{uninstall} target has any dependencies which act as subroutines of installation, then you should start @emph{each} dependency's commands with a category line, and start the main target's commands with a category line also. This way, you can ensure that each command is placed in the right category regardless of which of the dependencies actually run. Pre-installation and post-installation commands should not run any programs except for these: @example [ basename bash cat chgrp chmod chown cmp cp dd diff echo egrep expand expr false fgrep find getopt grep gunzip gzip hostname install install-info kill ldconfig ln ls md5sum mkdir mkfifo mknod mv printenv pwd rm rmdir sed sort tee test touch true uname xargs yes @end example @cindex binary packages The reason for distinguishing the commands in this way is for the sake of making binary packages. Typically a binary package contains all the executables and other files that need to be installed, and has its own method of installing them---so it does not need to run the normal installation commands. But installing the binary package does need to execute the pre-installation and post-installation commands. Programs to build binary packages work by extracting the pre-installation and post-installation commands. Here is one way of extracting the pre-installation commands (the @option{-s} option to @command{make} is needed to silence messages about entering subdirectories): @smallexample make -s -n install -o all \ PRE_INSTALL=pre-install \ POST_INSTALL=post-install \ NORMAL_INSTALL=normal-install \ | gawk -f pre-install.awk @end smallexample @noindent where the file @file{pre-install.awk} could contain this: @smallexample $0 ~ /^(normal-install|post-install)[ \t]*$/ @{on = 0@} on @{print $0@} $0 ~ /^pre-install[ \t]*$/ @{on = 1@} @end smallexample make-4.3/doc/make.info0000644000175000017500000001405113611136535011562 00000000000000This is make.info, produced by makeinfo version 6.6 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.75, last updated 19 January 2020, of 'The GNU Make Manual', for GNU 'make' version 4.3. 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, 2015, 2016, 2017, 2018, 2019, 2020 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with the Front-Cover Texts being "A GNU Manual," and with the Back-Cover Texts as in (a) below. A copy of the license is included in the section entitled "GNU Free Documentation License." (a) The FSF's Back-Cover Text is: "You have the freedom to copy and modify this GNU manual. Buying copies from the FSF supports it in developing GNU and promoting software freedom." INFO-DIR-SECTION Software development START-INFO-DIR-ENTRY * Make: (make). Remake files automatically. END-INFO-DIR-ENTRY  Indirect: make.info-1: 1379 make.info-2: 301593  Tag Table: (Indirect) Node: Top1379 Node: Overview16646 Node: Preparing17659 Node: Reading18627 Node: Bugs19554 Node: Introduction21383 Node: Rule Introduction22976 Node: Simple Makefile24909 Node: How Make Works28645 Node: Variables Simplify31294 Node: make Deduces33500 Node: Combine By Prerequisite35233 Node: Cleanup36262 Node: Makefiles37680 Node: Makefile Contents38575 Node: Splitting Lines41748 Node: Makefile Names44231 Node: Include45838 Ref: Include-Footnote-149582 Node: MAKEFILES Variable49716 Node: Remaking Makefiles51257 Node: Overriding Makefiles55587 Node: Reading Makefiles57615 Node: Parsing Makefiles61057 Node: Secondary Expansion62915 Node: Rules70363 Node: Rule Example73036 Node: Rule Syntax73884 Node: Prerequisite Types76479 Node: Wildcards79346 Node: Wildcard Examples81065 Node: Wildcard Pitfall82415 Node: Wildcard Function84204 Node: Directory Search85988 Node: General Search87123 Node: Selective Search88830 Node: Search Algorithm91820 Node: Recipes/Search94338 Node: Implicit/Search95661 Node: Libraries/Search96603 Node: Phony Targets98574 Node: Force Targets103411 Node: Empty Targets104448 Node: Special Targets105750 Node: Multiple Targets113550 Node: Multiple Rules117783 Node: Static Pattern120001 Node: Static Usage120653 Node: Static versus Implicit124372 Node: Double-Colon126112 Node: Automatic Prerequisites127872 Node: Recipes132133 Node: Recipe Syntax133305 Node: Splitting Recipe Lines135420 Node: Variables in Recipes138573 Node: Echoing139899 Node: Execution141111 Ref: Execution-Footnote-1142524 Node: One Shell142669 Node: Choosing the Shell145987 Node: Parallel150131 Node: Parallel Output152800 Node: Parallel Input157227 Node: Errors158346 Node: Interrupts161981 Node: Recursion164342 Node: MAKE Variable166439 Node: Variables/Recursion168682 Node: Options/Recursion174127 Node: -w Option180133 Node: Canned Recipes181128 Node: Empty Recipes184111 Node: Using Variables185551 Node: Reference188979 Node: Flavors190789 Node: Advanced196768 Node: Substitution Refs197273 Node: Computed Names198875 Node: Values203423 Node: Setting204340 Node: Appending207379 Node: Override Directive211350 Node: Multi-Line212977 Node: Undefine Directive215840 Node: Environment216929 Node: Target-specific219181 Node: Pattern-specific222208 Node: Suppressing Inheritance224055 Node: Special Variables225508 Node: Conditionals233749 Node: Conditional Example234462 Node: Conditional Syntax237025 Node: Testing Flags242785 Node: Functions243886 Node: Syntax of Functions245446 Node: Text Functions247780 Node: File Name Functions256341 Node: Conditional Functions261567 Node: Foreach Function263943 Node: File Function267156 Node: Call Function269713 Node: Value Function272598 Node: Eval Function274035 Node: Origin Function276311 Node: Flavor Function279537 Node: Make Control Functions280581 Node: Shell Function282267 Node: Guile Function284026 Node: Running284776 Node: Makefile Arguments286757 Node: Goals287473 Node: Instead of Execution292212 Node: Avoiding Compilation295927 Node: Overriding297902 Node: Testing301593 Node: Options Summary303477 Node: Implicit Rules315181 Node: Using Implicit317318 Node: Catalogue of Rules320837 Node: Implicit Variables330181 Node: Chained Rules335254 Node: Pattern Rules339475 Node: Pattern Intro341009 Node: Pattern Examples343160 Node: Automatic Variables344967 Node: Pattern Match352342 Node: Match-Anything Rules355665 Node: Canceling Rules359586 Node: Last Resort360300 Node: Suffix Rules362129 Node: Implicit Rule Search365863 Node: Archives369414 Node: Archive Members370119 Node: Archive Update371729 Node: Archive Symbols373640 Node: Archive Pitfalls374873 Node: Archive Suffix Rules375595 Node: Extending make377143 Node: Guile Integration378288 Node: Guile Types379516 Node: Guile Interface381936 Node: Guile Example383222 Node: Loading Objects385413 Node: load Directive386903 Node: Remaking Loaded Objects389657 Node: Loaded Object API390291 Node: Loaded Object Example397053 Node: Integrating make399300 Node: Job Slots400051 Node: POSIX Jobserver403483 Node: Windows Jobserver405951 Node: Terminal Output407304 Node: Features409693 Node: Missing418862 Node: Makefile Conventions422590 Node: Makefile Basics423569 Node: Utilities in Makefiles426736 Node: Command Variables429235 Node: DESTDIR432475 Node: Directory Variables434642 Node: Standard Targets449999 Node: Install Command Categories464105 Node: Quick Reference468631 Node: Error Messages481345 Node: Complex Makefile490140 Node: GNU Free Documentation License498758 Node: Concept Index523916 Node: Name Index596081  End Tag Table make-4.3/doc/Makefile.in0000644000175000017500000013130713611136510012032 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in 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. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # -*-Makefile-*-, or close enough # Copyright (C) 2000-2020 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 . VPATH = @srcdir@ 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 \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/access.m4 \ $(top_srcdir)/m4/acinclude.m4 $(top_srcdir)/m4/alloca.m4 \ $(top_srcdir)/m4/asm-underscore.m4 $(top_srcdir)/m4/close.m4 \ $(top_srcdir)/m4/dirname.m4 $(top_srcdir)/m4/dospaths.m4 \ $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \ $(top_srcdir)/m4/eaccess.m4 $(top_srcdir)/m4/errno_h.m4 \ $(top_srcdir)/m4/error.m4 $(top_srcdir)/m4/extensions.m4 \ $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/fcntl-o.m4 \ $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ $(top_srcdir)/m4/findprog-in.m4 \ $(top_srcdir)/m4/getdtablesize.m4 \ $(top_srcdir)/m4/getloadavg.m4 $(top_srcdir)/m4/getprogname.m4 \ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gnulib-common.m4 \ $(top_srcdir)/m4/gnulib-comp.m4 \ $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/include_next.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/limits-h.m4 $(top_srcdir)/m4/longlong.m4 \ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/msvc-inval.m4 \ $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/off_t.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stdbool.m4 \ $(top_srcdir)/m4/stddef_h.m4 $(top_srcdir)/m4/stdint.m4 \ $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ $(top_srcdir)/m4/stpcpy.m4 $(top_srcdir)/m4/strerror.m4 \ $(top_srcdir)/m4/string_h.m4 $(top_srcdir)/m4/sys_socket_h.m4 \ $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/unistd_h.m4 \ $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_t.m4 \ $(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/xalloc.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)/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = AM_V_DVIPS = $(am__v_DVIPS_@AM_V@) am__v_DVIPS_ = $(am__v_DVIPS_@AM_DEFAULT_V@) am__v_DVIPS_0 = @echo " DVIPS " $@; am__v_DVIPS_1 = AM_V_MAKEINFO = $(am__v_MAKEINFO_@AM_V@) am__v_MAKEINFO_ = $(am__v_MAKEINFO_@AM_DEFAULT_V@) am__v_MAKEINFO_0 = @echo " MAKEINFO" $@; am__v_MAKEINFO_1 = AM_V_INFOHTML = $(am__v_INFOHTML_@AM_V@) am__v_INFOHTML_ = $(am__v_INFOHTML_@AM_DEFAULT_V@) am__v_INFOHTML_0 = @echo " INFOHTML" $@; am__v_INFOHTML_1 = AM_V_TEXI2DVI = $(am__v_TEXI2DVI_@AM_V@) am__v_TEXI2DVI_ = $(am__v_TEXI2DVI_@AM_DEFAULT_V@) am__v_TEXI2DVI_0 = @echo " TEXI2DVI" $@; am__v_TEXI2DVI_1 = AM_V_TEXI2PDF = $(am__v_TEXI2PDF_@AM_V@) am__v_TEXI2PDF_ = $(am__v_TEXI2PDF_@AM_DEFAULT_V@) am__v_TEXI2PDF_0 = @echo " TEXI2PDF" $@; am__v_TEXI2PDF_1 = AM_V_texinfo = $(am__v_texinfo_@AM_V@) am__v_texinfo_ = $(am__v_texinfo_@AM_DEFAULT_V@) am__v_texinfo_0 = -q am__v_texinfo_1 = AM_V_texidevnull = $(am__v_texidevnull_@AM_V@) am__v_texidevnull_ = $(am__v_texidevnull_@AM_DEFAULT_V@) am__v_texidevnull_0 = > /dev/null am__v_texidevnull_1 = INFO_DEPS = $(srcdir)/make.info TEXINFO_TEX = $(top_srcdir)/build-aux/texinfo.tex am__TEXINFO_TEX_DIR = $(top_srcdir)/build-aux DVIS = make.dvi PDFS = make.pdf PSS = make.ps HTMLS = make.html TEXINFOS = make.texi TEXI2DVI = texi2dvi TEXI2PDF = $(TEXI2DVI) --pdf --batch MAKEINFOHTML = $(MAKEINFO) --html AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) DVIPS = dvips am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__installdirs = "$(DESTDIR)$(infodir)" am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(make_TEXINFOS) $(srcdir)/Makefile.in \ $(top_srcdir)/build-aux/mdate-sh \ $(top_srcdir)/build-aux/texinfo.tex DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_LDFLAGS = @AM_LDFLAGS@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ GETLOADAVG_LIBS = @GETLOADAVG_LIBS@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIB_ACCESS = @GNULIB_ACCESS@ GNULIB_ATOLL = @GNULIB_ATOLL@ GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_COPY_FILE_RANGE = @GNULIB_COPY_FILE_RANGE@ GNULIB_CREAT = @GNULIB_CREAT@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FCLOSE = @GNULIB_FCLOSE@ GNULIB_FCNTL = @GNULIB_FCNTL@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FDOPEN = @GNULIB_FDOPEN@ GNULIB_FFLUSH = @GNULIB_FFLUSH@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FGETC = @GNULIB_FGETC@ GNULIB_FGETS = @GNULIB_FGETS@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ GNULIB_FPURGE = @GNULIB_FPURGE@ GNULIB_FPUTC = @GNULIB_FPUTC@ GNULIB_FPUTS = @GNULIB_FPUTS@ GNULIB_FREAD = @GNULIB_FREAD@ GNULIB_FREOPEN = @GNULIB_FREOPEN@ GNULIB_FSCANF = @GNULIB_FSCANF@ GNULIB_FSEEK = @GNULIB_FSEEK@ GNULIB_FSEEKO = @GNULIB_FSEEKO@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTELL = @GNULIB_FTELL@ GNULIB_FTELLO = @GNULIB_FTELLO@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_FWRITE = @GNULIB_FWRITE@ GNULIB_GETC = @GNULIB_GETC@ GNULIB_GETCHAR = @GNULIB_GETCHAR@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETPASS = @GNULIB_GETPASS@ GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GRANTPT = @GNULIB_GRANTPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_ISATTY = @GNULIB_ISATTY@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MBTOWC = @GNULIB_MBTOWC@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_OPEN = @GNULIB_OPEN@ GNULIB_OPENAT = @GNULIB_OPENAT@ GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POPEN = @GNULIB_POPEN@ GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PRINTF = @GNULIB_PRINTF@ GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ GNULIB_PTSNAME = @GNULIB_PTSNAME@ GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ GNULIB_PUTC = @GNULIB_PUTC@ GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ GNULIB_PUTENV = @GNULIB_PUTENV@ GNULIB_PUTS = @GNULIB_PUTS@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_QSORT_R = @GNULIB_QSORT_R@ GNULIB_RANDOM = @GNULIB_RANDOM@ GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ GNULIB_REALPATH = @GNULIB_REALPATH@ GNULIB_REMOVE = @GNULIB_REMOVE@ GNULIB_RENAME = @GNULIB_RENAME@ GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_RPMATCH = @GNULIB_RPMATCH@ GNULIB_SCANF = @GNULIB_SCANF@ GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ GNULIB_SETENV = @GNULIB_SETENV@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOD = @GNULIB_STRTOD@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRTOLD = @GNULIB_STRTOLD@ GNULIB_STRTOLL = @GNULIB_STRTOLL@ GNULIB_STRTOULL = @GNULIB_STRTOULL@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ GNULIB_UNSETENV = @GNULIB_UNSETENV@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ GNULIB_VFSCANF = @GNULIB_VFSCANF@ GNULIB_VPRINTF = @GNULIB_VPRINTF@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ GNULIB_WCTOMB = @GNULIB_WCTOMB@ GNULIB_WRITE = @GNULIB_WRITE@ GNULIB__EXIT = @GNULIB__EXIT@ GREP = @GREP@ GUILE_CFLAGS = @GUILE_CFLAGS@ GUILE_LIBS = @GUILE_LIBS@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ HOST_CPU = @HOST_CPU@ HOST_CPU_C_ABI = @HOST_CPU_C_ABI@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LDFLAGS = @LDFLAGS@ LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@ LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIMITS_H = @LIMITS_H@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_HOST = @MAKE_HOST@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REMOTE = @REMOTE@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_CALLOC = @REPLACE_CALLOC@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_MALLOC = @REPLACE_MALLOC@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOC = @REPLACE_REALLOC@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ USE_NLS = @USE_NLS@ USE_SYSTEM_GLOB = @USE_SYSTEM_GLOB@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ TEXI2HTML = texi2html TEXI2HTML_FLAGS = -split_chapter info_TEXINFOS = make.texi make_TEXINFOS = fdl.texi make-stds.texi CLEANFILES = make*.html all: all-am .SUFFIXES: .SUFFIXES: .dvi .html .info .pdf .ps .texi $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign doc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): .texi.info: $(AM_V_MAKEINFO)restore=: && backupdir="$(am__leading_dot)am$$$$" && \ am__cwd=`pwd` && $(am__cd) $(srcdir) && \ rm -rf $$backupdir && mkdir $$backupdir && \ if ($(MAKEINFO) --version) >/dev/null 2>&1; then \ for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \ done; \ else :; fi && \ cd "$$am__cwd"; \ if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ -o $@ $<; \ then \ rc=0; \ $(am__cd) $(srcdir); \ else \ rc=$$?; \ $(am__cd) $(srcdir) && \ $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ fi; \ rm -rf $$backupdir; exit $$rc .texi.dvi: $(AM_V_TEXI2DVI)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ $(TEXI2DVI) $(AM_V_texinfo) --build-dir=$(@:.dvi=.t2d) -o $@ $(AM_V_texidevnull) \ $< .texi.pdf: $(AM_V_TEXI2PDF)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ $(TEXI2PDF) $(AM_V_texinfo) --build-dir=$(@:.pdf=.t2p) -o $@ $(AM_V_texidevnull) \ $< .texi.html: $(AM_V_MAKEINFO)rm -rf $(@:.html=.htp) $(AM_V_at)if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ -o $(@:.html=.htp) $<; \ then \ rm -rf $@ && mv $(@:.html=.htp) $@; \ else \ rm -rf $(@:.html=.htp); exit 1; \ fi $(srcdir)/make.info: make.texi $(srcdir)/version.texi $(make_TEXINFOS) make.dvi: make.texi $(srcdir)/version.texi $(make_TEXINFOS) make.pdf: make.texi $(srcdir)/version.texi $(make_TEXINFOS) make.html: make.texi $(srcdir)/version.texi $(make_TEXINFOS) $(srcdir)/version.texi: $(srcdir)/stamp-vti $(srcdir)/stamp-vti: make.texi $(top_srcdir)/configure @(dir=.; test -f ./make.texi || dir=$(srcdir); \ set `$(SHELL) $(top_srcdir)/build-aux/mdate-sh $$dir/make.texi`; \ 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.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* $(srcdir)/version.texi.tmp* maintainer-clean-vti: -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi .dvi.ps: $(AM_V_DVIPS)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ $(DVIPS) $(AM_V_texinfo) -o $@ $< uninstall-dvi-am: @$(NORMAL_UNINSTALL) @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \ rm -f "$(DESTDIR)$(dvidir)/$$f"; \ done uninstall-html-am: @$(NORMAL_UNINSTALL) @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \ rm -rf "$(DESTDIR)$(htmldir)/$$f"; \ done uninstall-info-am: @$(PRE_UNINSTALL) @if test -d '$(DESTDIR)$(infodir)' && $(am__can_run_installinfo); then \ list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \ if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \ done; \ else :; fi @$(NORMAL_UNINSTALL) @list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \ (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \ echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \ rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \ else :; fi); \ done uninstall-pdf-am: @$(NORMAL_UNINSTALL) @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \ rm -f "$(DESTDIR)$(pdfdir)/$$f"; \ done uninstall-ps-am: @$(NORMAL_UNINSTALL) @list='$(PSS)'; test -n "$(psdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \ rm -f "$(DESTDIR)$(psdir)/$$f"; \ done dist-info: $(INFO_DEPS) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; \ for base in $$list; do \ case $$base in \ $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ esac; \ if test -f $$base; then d=.; else d=$(srcdir); fi; \ base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \ for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ if test -f $$file; then \ relfile=`expr "$$file" : "$$d/\(.*\)"`; \ test -f "$(distdir)/$$relfile" || \ cp -p $$file "$(distdir)/$$relfile"; \ else :; fi; \ done; \ done mostlyclean-aminfo: -rm -rf make.t2d make.t2p clean-aminfo: -test -z "make.dvi make.pdf make.ps make.html" \ || rm -rf make.dvi make.pdf make.ps make.html maintainer-clean-aminfo: @list='$(INFO_DEPS)'; for i in $$list; do \ i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \ echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \ rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \ done tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-info check-am: all-am check: check-am all-am: Makefile $(INFO_DEPS) installdirs: for dir in "$(DESTDIR)$(infodir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-aminfo clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: $(DVIS) html: html-am html-am: $(HTMLS) info: info-am info-am: $(INFO_DEPS) install-data-am: install-info-am install-dvi: install-dvi-am install-dvi-am: $(DVIS) @$(NORMAL_INSTALL) @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(dvidir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dvidir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \ done install-exec-am: install-html: install-html-am install-html-am: $(HTMLS) @$(NORMAL_INSTALL) @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)'"; \ $(MKDIR_P) "$(DESTDIR)$(htmldir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \ $(am__strip_dir) \ d2=$$d$$p; \ if test -d "$$d2"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \ $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ echo " $(INSTALL_DATA) '$$d2'/* '$(DESTDIR)$(htmldir)/$$f'"; \ $(INSTALL_DATA) "$$d2"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \ else \ list2="$$list2 $$d2"; \ fi; \ done; \ test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \ done; } install-info: install-info-am install-info-am: $(INFO_DEPS) @$(NORMAL_INSTALL) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(infodir)'"; \ $(MKDIR_P) "$(DESTDIR)$(infodir)" || exit 1; \ fi; \ for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ esac; \ if test -f $$file; then d=.; else d=$(srcdir); fi; \ file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \ for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ if test -f $$ifile; then \ echo "$$ifile"; \ else : ; fi; \ done; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done @$(POST_INSTALL) @if $(am__can_run_installinfo); then \ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\ done; \ else : ; fi install-man: install-pdf: install-pdf-am install-pdf-am: $(PDFS) @$(NORMAL_INSTALL) @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pdfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pdfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done install-ps: install-ps-am install-ps-am: $(PSS) @$(NORMAL_INSTALL) @list='$(PSS)'; test -n "$(psdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(psdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(psdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-aminfo \ maintainer-clean-generic maintainer-clean-vti mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-aminfo mostlyclean-generic mostlyclean-vti pdf: pdf-am pdf-am: $(PDFS) ps: ps-am ps-am: $(PSS) uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \ uninstall-pdf-am uninstall-ps-am .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-aminfo clean-generic \ cscopelist-am ctags-am dist-info distclean distclean-generic \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-aminfo \ maintainer-clean-generic maintainer-clean-vti mostlyclean \ mostlyclean-aminfo mostlyclean-generic mostlyclean-vti pdf \ pdf-am ps ps-am tags-am uninstall uninstall-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. .NOEXPORT: make-4.3/doc/make.info-20000644000175000017500000114453413611136535011734 00000000000000This is make.info, produced by makeinfo version 6.6 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.75, last updated 19 January 2020, of 'The GNU Make Manual', for GNU 'make' version 4.3. 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, 2015, 2016, 2017, 2018, 2019, 2020 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with the Front-Cover Texts being "A GNU Manual," and with the Back-Cover Texts as in (a) below. A copy of the license is included in the section entitled "GNU Free Documentation License." (a) The FSF's Back-Cover Text is: "You have the freedom to copy and modify this GNU manual. Buying copies from the FSF supports it in developing GNU and promoting software freedom." INFO-DIR-SECTION Software development START-INFO-DIR-ENTRY * Make: (make). Remake files automatically. END-INFO-DIR-ENTRY  File: make.info, Node: Testing, Next: Options Summary, Prev: Overriding, Up: Running 9.6 Testing the Compilation of a Program ======================================== Normally, when an error happens in executing a shell command, 'make' gives up immediately, returning a nonzero status. No further recipes are executed for any target. The error implies that the goal cannot be correctly remade, and 'make' reports this as soon as it knows. When you are compiling a program that you have just changed, this is not what you want. Instead, you would rather that 'make' try compiling every file that can be tried, to show you as many compilation errors as possible. On these occasions, you should use the '-k' or '--keep-going' flag. This tells 'make' to continue to consider the other prerequisites of the pending targets, remaking them if necessary, before it gives up and returns nonzero status. For example, after an error in compiling one object file, 'make -k' will continue compiling other object files even though it already knows that linking them will be impossible. In addition to continuing after failed shell commands, 'make -k' will continue as much as possible after discovering that it does not know how to make a target or prerequisite file. This will always cause an error message, but without '-k', it is a fatal error (*note Summary of Options: Options Summary.). The usual behavior of 'make' assumes that your purpose is to get the goals up to date; once 'make' learns that this is impossible, it might as well report the failure immediately. The '-k' flag says that the real purpose is to test as much as possible of the changes made in the program, perhaps to find several independent problems so that you can correct them all before the next attempt to compile. This is why Emacs' 'M-x compile' command passes the '-k' flag by default.  File: make.info, Node: Options Summary, Prev: Testing, Up: Running 9.7 Summary of Options ====================== Here is a table of all the options 'make' understands: '-b' '-m' These options are ignored for compatibility with other versions of 'make'. '-B' '--always-make' Consider all targets out-of-date. GNU 'make' proceeds to consider targets and their prerequisites using the normal algorithms; however, all targets so considered are always remade regardless of the status of their prerequisites. To avoid infinite recursion, if 'MAKE_RESTARTS' (*note Other Special Variables: Special Variables.) is set to a number greater than 0 this option is disabled when considering whether to remake makefiles (*note How Makefiles Are Remade: Remaking Makefiles.). '-C DIR' '--directory=DIR' Change to directory DIR before reading the makefiles. If multiple '-C' options are specified, each is interpreted relative to the previous one: '-C / -C etc' is equivalent to '-C /etc'. This is typically used with recursive invocations of 'make' (*note Recursive Use of 'make': Recursion.). '-d' Print debugging information in addition to normal processing. The debugging information says which files are being considered for remaking, which file-times are being compared and with what results, which files actually need to be remade, which implicit rules are considered and which are applied--everything interesting about how 'make' decides what to do. The '-d' option is equivalent to '--debug=a' (see below). '--debug[=OPTIONS]' Print debugging information in addition to normal processing. Various levels and types of output can be chosen. With no arguments, print the "basic" level of debugging. Possible arguments are below; only the first character is considered, and values must be comma- or space-separated. 'a (all)' All types of debugging output are enabled. This is equivalent to using '-d'. 'b (basic)' Basic debugging prints each target that was found to be out-of-date, and whether the build was successful or not. 'v (verbose)' A level above 'basic'; includes messages about which makefiles were parsed, prerequisites that did not need to be rebuilt, etc. This option also enables 'basic' messages. 'i (implicit)' Prints messages describing the implicit rule searches for each target. This option also enables 'basic' messages. 'j (jobs)' Prints messages giving details on the invocation of specific sub-commands. 'm (makefile)' By default, the above messages are not enabled while trying to remake the makefiles. This option enables messages while rebuilding makefiles, too. Note that the 'all' option does enable this option. This option also enables 'basic' messages. 'n (none)' Disable all debugging currently enabled. If additional debugging flags are encountered after this they will still take effect. '-e' '--environment-overrides' Give variables taken from the environment precedence over variables from makefiles. *Note Variables from the Environment: Environment. '-E STRING' '--eval=STRING' Evaluate STRING as makefile syntax. This is a command-line version of the 'eval' function (*note Eval Function::). The evaluation is performed after the default rules and variables have been defined, but before any makefiles are read. '-f FILE' '--file=FILE' '--makefile=FILE' Read the file named FILE as a makefile. *Note Writing Makefiles: Makefiles. '-h' '--help' Remind you of the options that 'make' understands and then exit. '-i' '--ignore-errors' Ignore all errors in recipes executed to remake files. *Note Errors in Recipes: Errors. '-I DIR' '--include-dir=DIR' Specifies a directory DIR to search for included makefiles. *Note Including Other Makefiles: Include. If several '-I' options are used to specify several directories, the directories are searched in the order specified. '-j [JOBS]' '--jobs[=JOBS]' Specifies the number of recipes (jobs) to run simultaneously. With no argument, 'make' runs as many recipes simultaneously as possible. If there is more than one '-j' option, the last one is effective. *Note Parallel Execution: Parallel, for more information on how recipes are run. Note that this option is ignored on MS-DOS. '-k' '--keep-going' Continue as much as possible after an error. While the target that failed, and those that depend on it, cannot be remade, the other prerequisites of these targets can be processed all the same. *Note Testing the Compilation of a Program: Testing. '-l [LOAD]' '--load-average[=LOAD]' '--max-load[=LOAD]' Specifies that no new recipes should be started if there are other recipes running and the load average is at least LOAD (a floating-point number). With no argument, removes a previous load limit. *Note Parallel Execution: Parallel. '-L' '--check-symlink-times' On systems that support symbolic links, this option causes 'make' to consider the timestamps on any symbolic links in addition to the timestamp on the file referenced by those links. When this option is provided, the most recent timestamp among the file and the symbolic links is taken as the modification time for this target file. '-n' '--just-print' '--dry-run' '--recon' Print the recipe that would be executed, but do not execute it (except in certain circumstances). *Note Instead of Executing Recipes: Instead of Execution. '-o FILE' '--old-file=FILE' '--assume-old=FILE' Do not remake the file FILE even if it is older than its prerequisites, and do not remake anything on account of changes in FILE. Essentially the file is treated as very old and its rules are ignored. *Note Avoiding Recompilation of Some Files: Avoiding Compilation. '-O[TYPE]' '--output-sync[=TYPE]' Ensure that the complete output from each recipe is printed in one uninterrupted sequence. This option is only useful when using the '--jobs' option to run multiple recipes simultaneously (*note Parallel Execution: Parallel.) Without this option output will be displayed as it is generated by the recipes. With no type or the type 'target', output from the entire recipe of each target is grouped together. With the type 'line', output from each line in the recipe is grouped together. With the type 'recurse', the output from an entire recursive make is grouped together. With the type 'none', no output synchronization is performed. *Note Output During Parallel Execution: Parallel Output. '-p' '--print-data-base' Print the data base (rules and variable values) that results from reading the makefiles; then execute as usual or as otherwise specified. This also prints the version information given by the '-v' switch (see below). To print the data base without trying to remake any files, use 'make -qp'. To print the data base of predefined rules and variables, use 'make -p -f /dev/null'. The data base output contains file name and line number information for recipe and variable definitions, so it can be a useful debugging tool in complex environments. '-q' '--question' "Question mode". Do not run any recipes, or print anything; just return an exit status that is zero if the specified targets are already up to date, one if any remaking is required, or two if an error is encountered. *Note Instead of Executing Recipes: Instead of Execution. '-r' '--no-builtin-rules' Eliminate use of the built-in implicit rules (*note Using Implicit Rules: Implicit Rules.). You can still define your own by writing pattern rules (*note Defining and Redefining Pattern Rules: Pattern Rules.). The '-r' option also clears out the default list of suffixes for suffix rules (*note Old-Fashioned Suffix Rules: Suffix Rules.). But you can still define your own suffixes with a rule for '.SUFFIXES', and then define your own suffix rules. Note that only _rules_ are affected by the '-r' option; default variables remain in effect (*note Variables Used by Implicit Rules: Implicit Variables.); see the '-R' option below. '-R' '--no-builtin-variables' Eliminate use of the built-in rule-specific variables (*note Variables Used by Implicit Rules: Implicit Variables.). You can still define your own, of course. The '-R' option also automatically enables the '-r' option (see above), since it doesn't make sense to have implicit rules without any definitions for the variables that they use. '-s' '--silent' '--quiet' Silent operation; do not print the recipes as they are executed. *Note Recipe Echoing: Echoing. '-S' '--no-keep-going' '--stop' Cancel the effect of the '-k' option. This is never necessary except in a recursive 'make' where '-k' might be inherited from the top-level 'make' via 'MAKEFLAGS' (*note Recursive Use of 'make': Recursion.) or if you set '-k' in 'MAKEFLAGS' in your environment. '-t' '--touch' Touch files (mark them up to date without really changing them) instead of running their recipes. This is used to pretend that the recipes were done, in order to fool future invocations of 'make'. *Note Instead of Executing Recipes: Instead of Execution. '--trace' Show tracing information for 'make' execution. Prints the entire recipe to be executed, even for recipes that are normally silent (due to '.SILENT' or '@'). Also prints the makefile name and line number where the recipe was defined, and information on why the target is being rebuilt. '-v' '--version' Print the version of the 'make' program plus a copyright, a list of authors, and a notice that there is no warranty; then exit. '-w' '--print-directory' Print a message containing the working directory both before and after executing the makefile. This may be useful for tracking down errors from complicated nests of recursive 'make' commands. *Note Recursive Use of 'make': Recursion. (In practice, you rarely need to specify this option since 'make' does it for you; see *note The '--print-directory' Option: -w Option.) '--no-print-directory' Disable printing of the working directory under '-w'. This option is useful when '-w' is turned on automatically, but you do not want to see the extra messages. *Note The '--print-directory' Option: -w Option. '-W FILE' '--what-if=FILE' '--new-file=FILE' '--assume-new=FILE' Pretend that the target FILE has just been modified. When used with the '-n' flag, this shows you what would happen if you were to modify that file. Without '-n', it is almost the same as running a 'touch' command on the given file before running 'make', except that the modification time is changed only in the imagination of 'make'. *Note Instead of Executing Recipes: Instead of Execution. '--warn-undefined-variables' Issue a warning message whenever 'make' sees a reference to an undefined variable. This can be helpful when you are trying to debug makefiles which use variables in complex ways.  File: make.info, Node: Implicit Rules, Next: Archives, Prev: Running, Up: Top 10 Using Implicit Rules *********************** Certain standard ways of remaking target files are used very often. For example, one customary way to make an object file is from a C source file using the C compiler, 'cc'. "Implicit rules" tell 'make' how to use customary techniques so that you do not have to specify them in detail when you want to use them. For example, there is an implicit rule for C compilation. File names determine which implicit rules are run. For example, C compilation typically takes a '.c' file and makes a '.o' file. So 'make' applies the implicit rule for C compilation when it sees this combination of file name endings. A chain of implicit rules can apply in sequence; for example, 'make' will remake a '.o' file from a '.y' file by way of a '.c' file. The built-in implicit rules use several variables in their recipes so that, by changing the values of the variables, you can change the way the implicit rule works. For example, the variable 'CFLAGS' controls the flags given to the C compiler by the implicit rule for C compilation. You can define your own implicit rules by writing "pattern rules". "Suffix rules" are a more limited way to define implicit rules. Pattern rules are more general and clearer, but suffix rules are retained for compatibility. * Menu: * Using Implicit:: How to use an existing implicit rule to get the recipes for updating a file. * Catalogue of Rules:: A list of built-in rules. * Implicit Variables:: How to change what predefined rules do. * Chained Rules:: How to use a chain of implicit rules. * Pattern Rules:: How to define new implicit rules. * Last Resort:: How to define a recipe for rules which cannot find any. * Suffix Rules:: The old-fashioned style of implicit rule. * Implicit Rule Search:: The precise algorithm for applying implicit rules.  File: make.info, Node: Using Implicit, Next: Catalogue of Rules, Prev: Implicit Rules, Up: Implicit Rules 10.1 Using Implicit Rules ========================= To allow 'make' to find a customary method for updating a target file, all you have to do is refrain from specifying recipes yourself. Either write a rule with no recipe, or don't write a rule at all. Then 'make' will figure out which implicit rule to use based on which kind of source file exists or can be made. For example, suppose the makefile looks like this: foo : foo.o bar.o cc -o foo foo.o bar.o $(CFLAGS) $(LDFLAGS) Because you mention 'foo.o' but do not give a rule for it, 'make' will automatically look for an implicit rule that tells how to update it. This happens whether or not the file 'foo.o' currently exists. If an implicit rule is found, it can supply both a recipe and one or more prerequisites (the source files). You would want to write a rule for 'foo.o' with no recipe if you need to specify additional prerequisites, such as header files, that the implicit rule cannot supply. Each implicit rule has a target pattern and prerequisite patterns. There may be many implicit rules with the same target pattern. For example, numerous rules make '.o' files: one, from a '.c' file with the C compiler; another, from a '.p' file with the Pascal compiler; and so on. The rule that actually applies is the one whose prerequisites exist or can be made. So, if you have a file 'foo.c', 'make' will run the C compiler; otherwise, if you have a file 'foo.p', 'make' will run the Pascal compiler; and so on. Of course, when you write the makefile, you know which implicit rule you want 'make' to use, and you know it will choose that one because you know which possible prerequisite files are supposed to exist. *Note Catalogue of Built-In Rules: Catalogue of Rules, for a catalogue of all the predefined implicit rules. Above, we said an implicit rule applies if the required prerequisites "exist or can be made". A file "can be made" if it is mentioned explicitly in the makefile as a target or a prerequisite, or if an implicit rule can be recursively found for how to make it. When an implicit prerequisite is the result of another implicit rule, we say that "chaining" is occurring. *Note Chains of Implicit Rules: Chained Rules. In general, 'make' searches for an implicit rule for each target, and for each double-colon rule, that has no recipe. A file that is mentioned only as a prerequisite is considered a target whose rule specifies nothing, so implicit rule search happens for it. *Note Implicit Rule Search Algorithm: Implicit Rule Search, for the details of how the search is done. Note that explicit prerequisites do not influence implicit rule search. For example, consider this explicit rule: foo.o: foo.p The prerequisite on 'foo.p' does not necessarily mean that 'make' will remake 'foo.o' according to the implicit rule to make an object file, a '.o' file, from a Pascal source file, a '.p' file. For example, if 'foo.c' also exists, the implicit rule to make an object file from a C source file is used instead, because it appears before the Pascal rule in the list of predefined implicit rules (*note Catalogue of Built-In Rules: Catalogue of Rules.). If you do not want an implicit rule to be used for a target that has no recipe, you can give that target an empty recipe by writing a semicolon (*note Defining Empty Recipes: Empty Recipes.).  File: make.info, Node: Catalogue of Rules, Next: Implicit Variables, Prev: Using Implicit, Up: Implicit Rules 10.2 Catalogue of Built-In Rules ================================ Here is a catalogue of predefined implicit rules which are always available unless the makefile explicitly overrides or cancels them. *Note Canceling Implicit Rules: Canceling Rules, for information on canceling or overriding an implicit rule. The '-r' or '--no-builtin-rules' option cancels all predefined rules. This manual only documents the default rules available on POSIX-based operating systems. Other operating systems, such as VMS, Windows, OS/2, etc. may have different sets of default rules. To see the full list of default rules and variables available in your version of GNU 'make', run 'make -p' in a directory with no makefile. Not all of these rules will always be defined, even when the '-r' option is not given. Many of the predefined implicit rules are implemented in 'make' as suffix rules, so which ones will be defined depends on the "suffix list" (the list of prerequisites of the special target '.SUFFIXES'). The default suffix list is: '.out', '.a', '.ln', '.o', '.c', '.cc', '.C', '.cpp', '.p', '.f', '.F', '.m', '.r', '.y', '.l', '.ym', '.lm', '.s', '.S', '.mod', '.sym', '.def', '.h', '.info', '.dvi', '.tex', '.texinfo', '.texi', '.txinfo', '.w', '.ch' '.web', '.sh', '.elc', '.el'. All of the implicit rules described below whose prerequisites have one of these suffixes are actually suffix rules. If you modify the suffix list, the only predefined suffix rules in effect will be those named by one or two of the suffixes that are on the list you specify; rules whose suffixes fail to be on the list are disabled. *Note Old-Fashioned Suffix Rules: Suffix Rules, for full details on suffix rules. Compiling C programs 'N.o' is made automatically from 'N.c' with a recipe of the form '$(CC) $(CPPFLAGS) $(CFLAGS) -c'. Compiling C++ programs 'N.o' is made automatically from 'N.cc', 'N.cpp', or 'N.C' with a recipe of the form '$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c'. We encourage you to use the suffix '.cc' for C++ source files instead of '.C'. Compiling Pascal programs 'N.o' is made automatically from 'N.p' with the recipe '$(PC) $(PFLAGS) -c'. Compiling Fortran and Ratfor programs 'N.o' is made automatically from 'N.r', 'N.F' or 'N.f' by running the Fortran compiler. The precise recipe used is as follows: '.f' '$(FC) $(FFLAGS) -c'. '.F' '$(FC) $(FFLAGS) $(CPPFLAGS) -c'. '.r' '$(FC) $(FFLAGS) $(RFLAGS) -c'. Preprocessing Fortran and Ratfor programs 'N.f' is made automatically from 'N.r' or 'N.F'. This rule runs just the preprocessor to convert a Ratfor or preprocessable Fortran program into a strict Fortran program. The precise recipe used is as follows: '.F' '$(FC) $(CPPFLAGS) $(FFLAGS) -F'. '.r' '$(FC) $(FFLAGS) $(RFLAGS) -F'. Compiling Modula-2 programs 'N.sym' is made from 'N.def' with a recipe of the form '$(M2C) $(M2FLAGS) $(DEFFLAGS)'. 'N.o' is made from 'N.mod'; the form is: '$(M2C) $(M2FLAGS) $(MODFLAGS)'. Assembling and preprocessing assembler programs 'N.o' is made automatically from 'N.s' by running the assembler, 'as'. The precise recipe is '$(AS) $(ASFLAGS)'. 'N.s' is made automatically from 'N.S' by running the C preprocessor, 'cpp'. The precise recipe is '$(CPP) $(CPPFLAGS)'. Linking a single object file 'N' is made automatically from 'N.o' by running the linker (usually called 'ld') via the C compiler. The precise recipe used is '$(CC) $(LDFLAGS) N.o $(LOADLIBES) $(LDLIBS)'. This rule does the right thing for a simple program with only one source file. It will also do the right thing if there are multiple object files (presumably coming from various other source files), one of which has a name matching that of the executable file. Thus, x: y.o z.o when 'x.c', 'y.c' and 'z.c' all exist will execute: cc -c x.c -o x.o cc -c y.c -o y.o cc -c z.c -o z.o cc x.o y.o z.o -o x rm -f x.o rm -f y.o rm -f z.o In more complicated cases, such as when there is no object file whose name derives from the executable file name, you must write an explicit recipe for linking. Each kind of file automatically made into '.o' object files will be automatically linked by using the compiler ('$(CC)', '$(FC)' or '$(PC)'; the C compiler '$(CC)' is used to assemble '.s' files) without the '-c' option. This could be done by using the '.o' object files as intermediates, but it is faster to do the compiling and linking in one step, so that's how it's done. Yacc for C programs 'N.c' is made automatically from 'N.y' by running Yacc with the recipe '$(YACC) $(YFLAGS)'. Lex for C programs 'N.c' is made automatically from 'N.l' by running Lex. The actual recipe is '$(LEX) $(LFLAGS)'. Lex for Ratfor programs 'N.r' is made automatically from 'N.l' by running Lex. The actual recipe is '$(LEX) $(LFLAGS)'. The convention of using the same suffix '.l' for all Lex files regardless of whether they produce C code or Ratfor code makes it impossible for 'make' to determine automatically which of the two languages you are using in any particular case. If 'make' is called upon to remake an object file from a '.l' file, it must guess which compiler to use. It will guess the C compiler, because that is more common. If you are using Ratfor, make sure 'make' knows this by mentioning 'N.r' in the makefile. Or, if you are using Ratfor exclusively, with no C files, remove '.c' from the list of implicit rule suffixes with: .SUFFIXES: .SUFFIXES: .o .r .f .l ... Making Lint Libraries from C, Yacc, or Lex programs 'N.ln' is made from 'N.c' by running 'lint'. The precise recipe is '$(LINT) $(LINTFLAGS) $(CPPFLAGS) -i'. The same recipe is used on the C code produced from 'N.y' or 'N.l'. TeX and Web 'N.dvi' is made from 'N.tex' with the recipe '$(TEX)'. 'N.tex' is made from 'N.web' with '$(WEAVE)', or from 'N.w' (and from 'N.ch' if it exists or can be made) with '$(CWEAVE)'. 'N.p' is made from 'N.web' with '$(TANGLE)' and 'N.c' is made from 'N.w' (and from 'N.ch' if it exists or can be made) with '$(CTANGLE)'. Texinfo and Info 'N.dvi' is made from 'N.texinfo', 'N.texi', or 'N.txinfo', with the recipe '$(TEXI2DVI) $(TEXI2DVI_FLAGS)'. 'N.info' is made from 'N.texinfo', 'N.texi', or 'N.txinfo', with the recipe '$(MAKEINFO) $(MAKEINFO_FLAGS)'. RCS Any file 'N' is extracted if necessary from an RCS file named either 'N,v' or 'RCS/N,v'. The precise recipe used is '$(CO) $(COFLAGS)'. 'N' will not be extracted from RCS if it already exists, even if the RCS file is newer. The rules for RCS are terminal (*note Match-Anything Pattern Rules: Match-Anything Rules.), so RCS files cannot be generated from another source; they must actually exist. SCCS Any file 'N' is extracted if necessary from an SCCS file named either 's.N' or 'SCCS/s.N'. The precise recipe used is '$(GET) $(GFLAGS)'. The rules for SCCS are terminal (*note Match-Anything Pattern Rules: Match-Anything Rules.), so SCCS files cannot be generated from another source; they must actually exist. For the benefit of SCCS, a file 'N' is copied from 'N.sh' and made executable (by everyone). This is for shell scripts that are checked into SCCS. Since RCS preserves the execution permission of a file, you do not need to use this feature with RCS. We recommend that you avoid using of SCCS. RCS is widely held to be superior, and is also free. By choosing free software in place of comparable (or inferior) proprietary software, you support the free software movement. Usually, you want to change only the variables listed in the table above, which are documented in the following section. However, the recipes in built-in implicit rules actually use variables such as 'COMPILE.c', 'LINK.p', and 'PREPROCESS.S', whose values contain the recipes listed above. 'make' follows the convention that the rule to compile a '.X' source file uses the variable 'COMPILE.X'. Similarly, the rule to produce an executable from a '.X' file uses 'LINK.X'; and the rule to preprocess a '.X' file uses 'PREPROCESS.X'. Every rule that produces an object file uses the variable 'OUTPUT_OPTION'. 'make' defines this variable either to contain '-o $@', or to be empty, depending on a compile-time option. You need the '-o' option to ensure that the output goes into the right file when the source file is in a different directory, as when using 'VPATH' (*note Directory Search::). However, compilers on some systems do not accept a '-o' switch for object files. If you use such a system, and use 'VPATH', some compilations will put their output in the wrong place. A possible workaround for this problem is to give 'OUTPUT_OPTION' the value '; mv $*.o $@'.  File: make.info, Node: Implicit Variables, Next: Chained Rules, Prev: Catalogue of Rules, Up: Implicit Rules 10.3 Variables Used by Implicit Rules ===================================== The recipes in built-in implicit rules make liberal use of certain predefined variables. You can alter the values of these variables in the makefile, with arguments to 'make', or in the environment to alter how the implicit rules work without redefining the rules themselves. You can cancel all variables used by implicit rules with the '-R' or '--no-builtin-variables' option. For example, the recipe used to compile a C source file actually says '$(CC) -c $(CFLAGS) $(CPPFLAGS)'. The default values of the variables used are 'cc' and nothing, resulting in the command 'cc -c'. By redefining 'CC' to 'ncc', you could cause 'ncc' to be used for all C compilations performed by the implicit rule. By redefining 'CFLAGS' to be '-g', you could pass the '-g' option to each compilation. _All_ implicit rules that do C compilation use '$(CC)' to get the program name for the compiler and _all_ include '$(CFLAGS)' among the arguments given to the compiler. The variables used in implicit rules fall into two classes: those that are names of programs (like 'CC') and those that contain arguments for the programs (like 'CFLAGS'). (The "name of a program" may also contain some command arguments, but it must start with an actual executable program name.) If a variable value contains more than one argument, separate them with spaces. The following tables describe of some of the more commonly-used predefined variables. This list is not exhaustive, and the default values shown here may not be what 'make' selects for your environment. To see the complete list of predefined variables for your instance of GNU 'make' you can run 'make -p' in a directory with no makefiles. Here is a table of some of the more common variables used as names of programs in built-in rules: 'AR' Archive-maintaining program; default 'ar'. 'AS' Program for compiling assembly files; default 'as'. 'CC' Program for compiling C programs; default 'cc'. 'CXX' Program for compiling C++ programs; default 'g++'. 'CPP' Program for running the C preprocessor, with results to standard output; default '$(CC) -E'. 'FC' Program for compiling or preprocessing Fortran and Ratfor programs; default 'f77'. 'M2C' Program to use to compile Modula-2 source code; default 'm2c'. 'PC' Program for compiling Pascal programs; default 'pc'. 'CO' Program for extracting a file from RCS; default 'co'. 'GET' Program for extracting a file from SCCS; default 'get'. 'LEX' Program to use to turn Lex grammars into source code; default 'lex'. 'YACC' Program to use to turn Yacc grammars into source code; default 'yacc'. 'LINT' Program to use to run lint on source code; default 'lint'. 'MAKEINFO' Program to convert a Texinfo source file into an Info file; default 'makeinfo'. 'TEX' Program to make TeX DVI files from TeX source; default 'tex'. 'TEXI2DVI' Program to make TeX DVI files from Texinfo source; default 'texi2dvi'. 'WEAVE' Program to translate Web into TeX; default 'weave'. 'CWEAVE' Program to translate C Web into TeX; default 'cweave'. 'TANGLE' Program to translate Web into Pascal; default 'tangle'. 'CTANGLE' Program to translate C Web into C; default 'ctangle'. 'RM' Command to remove a file; default 'rm -f'. Here is a table of variables whose values are additional arguments for the programs above. The default values for all of these is the empty string, unless otherwise noted. 'ARFLAGS' Flags to give the archive-maintaining program; default 'rv'. 'ASFLAGS' Extra flags to give to the assembler (when explicitly invoked on a '.s' or '.S' file). 'CFLAGS' Extra flags to give to the C compiler. 'CXXFLAGS' Extra flags to give to the C++ compiler. 'COFLAGS' Extra flags to give to the RCS 'co' program. 'CPPFLAGS' Extra flags to give to the C preprocessor and programs that use it (the C and Fortran compilers). 'FFLAGS' Extra flags to give to the Fortran compiler. 'GFLAGS' Extra flags to give to the SCCS 'get' program. 'LDFLAGS' Extra flags to give to compilers when they are supposed to invoke the linker, 'ld', such as '-L'. Libraries ('-lfoo') should be added to the 'LDLIBS' variable instead. 'LDLIBS' Library flags or names given to compilers when they are supposed to invoke the linker, 'ld'. 'LOADLIBES' is a deprecated (but still supported) alternative to 'LDLIBS'. Non-library linker flags, such as '-L', should go in the 'LDFLAGS' variable. 'LFLAGS' Extra flags to give to Lex. 'YFLAGS' Extra flags to give to Yacc. 'PFLAGS' Extra flags to give to the Pascal compiler. 'RFLAGS' Extra flags to give to the Fortran compiler for Ratfor programs. 'LINTFLAGS' Extra flags to give to lint.  File: make.info, Node: Chained Rules, Next: Pattern Rules, Prev: Implicit Variables, Up: Implicit Rules 10.4 Chains of Implicit Rules ============================= Sometimes a file can be made by a sequence of implicit rules. For example, a file 'N.o' could be made from 'N.y' by running first Yacc and then 'cc'. Such a sequence is called a "chain". If the file 'N.c' exists, or is mentioned in the makefile, no special searching is required: 'make' finds that the object file can be made by C compilation from 'N.c'; later on, when considering how to make 'N.c', the rule for running Yacc is used. Ultimately both 'N.c' and 'N.o' are updated. However, even if 'N.c' does not exist and is not mentioned, 'make' knows how to envision it as the missing link between 'N.o' and 'N.y'! In this case, 'N.c' is called an "intermediate file". Once 'make' has decided to use the intermediate file, it is entered in the data base as if it had been mentioned in the makefile, along with the implicit rule that says how to create it. Intermediate files are remade using their rules just like all other files. But intermediate files are treated differently in two ways. The first difference is what happens if the intermediate file does not exist. If an ordinary file B does not exist, and 'make' considers a target that depends on B, it invariably creates B and then updates the target from B. But if B is an intermediate file, then 'make' can leave well enough alone. It won't bother updating B, or the ultimate target, unless some prerequisite of B is newer than that target or there is some other reason to update that target. The second difference is that if 'make' _does_ create B in order to update something else, it deletes B later on after it is no longer needed. Therefore, an intermediate file which did not exist before 'make' also does not exist after 'make'. 'make' reports the deletion to you by printing a 'rm -f' command showing which file it is deleting. Ordinarily, a file cannot be intermediate if it is mentioned in the makefile as a target or prerequisite. However, you can explicitly mark a file as intermediate by listing it as a prerequisite of the special target '.INTERMEDIATE'. This takes effect even if the file is mentioned explicitly in some other way. You can prevent automatic deletion of an intermediate file by marking it as a "secondary" file. To do this, list it as a prerequisite of the special target '.SECONDARY'. When a file is secondary, 'make' will not create the file merely because it does not already exist, but 'make' does not automatically delete the file. Marking a file as secondary also marks it as intermediate. You can list the target pattern of an implicit rule (such as '%.o') as a prerequisite of the special target '.PRECIOUS' to preserve intermediate files made by implicit rules whose target patterns match that file's name; see *note Interrupts::. A chain can involve more than two implicit rules. For example, it is possible to make a file 'foo' from 'RCS/foo.y,v' by running RCS, Yacc and 'cc'. Then both 'foo.y' and 'foo.c' are intermediate files that are deleted at the end. No single implicit rule can appear more than once in a chain. This means that 'make' will not even consider such a ridiculous thing as making 'foo' from 'foo.o.o' by running the linker twice. This constraint has the added benefit of preventing any infinite loop in the search for an implicit rule chain. There are some special implicit rules to optimize certain cases that would otherwise be handled by rule chains. For example, making 'foo' from 'foo.c' could be handled by compiling and linking with separate chained rules, using 'foo.o' as an intermediate file. But what actually happens is that a special rule for this case does the compilation and linking with a single 'cc' command. The optimized rule is used in preference to the step-by-step chain because it comes earlier in the ordering of rules. Finally, for performance reasons 'make' will not consider non-terminal match-anything rules (i.e., '%:') when searching for a rule to build a prerequisite of an implicit rule (*note Match-Anything Rules::).  File: make.info, Node: Pattern Rules, Next: Last Resort, Prev: Chained Rules, Up: Implicit Rules 10.5 Defining and Redefining Pattern Rules ========================================== You define an implicit rule by writing a "pattern rule". A pattern rule looks like an ordinary rule, except that its target contains the character '%' (exactly one of them). The target is considered a pattern for matching file names; the '%' can match any nonempty substring, while other characters match only themselves. The prerequisites likewise use '%' to show how their names relate to the target name. Thus, a pattern rule '%.o : %.c' says how to make any file 'STEM.o' from another file 'STEM.c'. Note that expansion using '%' in pattern rules occurs *after* any variable or function expansions, which take place when the makefile is read. *Note How to Use Variables: Using Variables, and *note Functions for Transforming Text: Functions. * Menu: * Pattern Intro:: An introduction to pattern rules. * Pattern Examples:: Examples of pattern rules. * Automatic Variables:: How to use automatic variables in the recipe of implicit rules. * Pattern Match:: How patterns match. * Match-Anything Rules:: Precautions you should take prior to defining rules that can match any target file whatever. * Canceling Rules:: How to override or cancel built-in rules.  File: make.info, Node: Pattern Intro, Next: Pattern Examples, Prev: Pattern Rules, Up: Pattern Rules 10.5.1 Introduction to Pattern Rules ------------------------------------ A pattern rule contains the character '%' (exactly one of them) in the target; otherwise, it looks exactly like an ordinary rule. The target is a pattern for matching file names; the '%' matches any nonempty substring, while other characters match only themselves. For example, '%.c' as a pattern matches any file name that ends in '.c'. 's.%.c' as a pattern matches any file name that starts with 's.', ends in '.c' and is at least five characters long. (There must be at least one character to match the '%'.) The substring that the '%' matches is called the "stem". '%' in a prerequisite of a pattern rule stands for the same stem that was matched by the '%' in the target. In order for the pattern rule to apply, its target pattern must match the file name under consideration and all of its prerequisites (after pattern substitution) must name files that exist or can be made. These files become prerequisites of the target. Thus, a rule of the form %.o : %.c ; RECIPE... specifies how to make a file 'N.o', with another file 'N.c' as its prerequisite, provided that 'N.c' exists or can be made. There may also be prerequisites that do not use '%'; such a prerequisite attaches to every file made by this pattern rule. These unvarying prerequisites are useful occasionally. A pattern rule need not have any prerequisites that contain '%', or in fact any prerequisites at all. Such a rule is effectively a general wildcard. It provides a way to make any file that matches the target pattern. *Note Last Resort::. More than one pattern rule may match a target. In this case 'make' will choose the "best fit" rule. *Note How Patterns Match: Pattern Match. Pattern rules may have more than one target; however, every target must contain a '%' character. Pattern rules are always treated as grouped targets (*note Multiple Targets in a Rule: Multiple Targets.) regardless of whether they use the ':' or '&:' separator.  File: make.info, Node: Pattern Examples, Next: Automatic Variables, Prev: Pattern Intro, Up: Pattern Rules 10.5.2 Pattern Rule Examples ---------------------------- Here are some examples of pattern rules actually predefined in 'make'. First, the rule that compiles '.c' files into '.o' files: %.o : %.c $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@ defines a rule that can make any file 'X.o' from 'X.c'. The recipe uses the automatic variables '$@' and '$<' to substitute the names of the target file and the source file in each case where the rule applies (*note Automatic Variables::). Here is a second built-in rule: % :: RCS/%,v $(CO) $(COFLAGS) $< defines a rule that can make any file 'X' whatsoever from a corresponding file 'X,v' in the sub-directory 'RCS'. Since the target is '%', this rule will apply to any file whatever, provided the appropriate prerequisite file exists. The double colon makes the rule "terminal", which means that its prerequisite may not be an intermediate file (*note Match-Anything Pattern Rules: Match-Anything Rules.). This pattern rule has two targets: %.tab.c %.tab.h: %.y bison -d $< This tells 'make' that the recipe 'bison -d X.y' will make both 'X.tab.c' and 'X.tab.h'. If the file 'foo' depends on the files 'parse.tab.o' and 'scan.o' and the file 'scan.o' depends on the file 'parse.tab.h', when 'parse.y' is changed, the recipe 'bison -d parse.y' will be executed only once, and the prerequisites of both 'parse.tab.o' and 'scan.o' will be satisfied. (Presumably the file 'parse.tab.o' will be recompiled from 'parse.tab.c' and the file 'scan.o' from 'scan.c', while 'foo' is linked from 'parse.tab.o', 'scan.o', and its other prerequisites, and it will execute happily ever after.)  File: make.info, Node: Automatic Variables, Next: Pattern Match, Prev: Pattern Examples, Up: Pattern Rules 10.5.3 Automatic Variables -------------------------- Suppose you are writing a pattern rule to compile a '.c' file into a '.o' file: how do you write the 'cc' command so that it operates on the right source file name? You cannot write the name in the recipe, because the name is different each time the implicit rule is applied. What you do is use a special feature of 'make', the "automatic variables". These variables have values computed afresh for each rule that is executed, based on the target and prerequisites of the rule. In this example, you would use '$@' for the object file name and '$<' for the source file name. It's very important that you recognize the limited scope in which automatic variable values are available: they only have values within the recipe. In particular, you cannot use them anywhere within the target list of a rule; they have no value there and will expand to the empty string. Also, they cannot be accessed directly within the prerequisite list of a rule. A common mistake is attempting to use '$@' within the prerequisites list; this will not work. However, there is a special feature of GNU 'make', secondary expansion (*note Secondary Expansion::), which will allow automatic variable values to be used in prerequisite lists. Here is a table of automatic variables: '$@' The file name of the target of the rule. If the target is an archive member, then '$@' is the name of the archive file. In a pattern rule that has multiple targets (*note Introduction to Pattern Rules: Pattern Intro.), '$@' is the name of whichever target caused the rule's recipe to be run. '$%' The target member name, when the target is an archive member. *Note Archives::. For example, if the target is 'foo.a(bar.o)' then '$%' is 'bar.o' and '$@' is 'foo.a'. '$%' is empty when the target is not an archive member. '$<' The name of the first prerequisite. If the target got its recipe from an implicit rule, this will be the first prerequisite added by the implicit rule (*note Implicit Rules::). '$?' The names of all the prerequisites that are newer than the target, with spaces between them. If the target does not exist, all prerequisites will be included. For prerequisites which are archive members, only the named member is used (*note Archives::). '$^' The names of all the prerequisites, with spaces between them. For prerequisites which are archive members, only the named member is used (*note Archives::). A target has only one prerequisite on each other file it depends on, no matter how many times each file is listed as a prerequisite. So if you list a prerequisite more than once for a target, the value of '$^' contains just one copy of the name. This list does *not* contain any of the order-only prerequisites; for those see the '$|' variable, below. '$+' This is like '$^', but prerequisites listed more than once are duplicated in the order they were listed in the makefile. This is primarily useful for use in linking commands where it is meaningful to repeat library file names in a particular order. '$|' The names of all the order-only prerequisites, with spaces between them. '$*' The stem with which an implicit rule matches (*note How Patterns Match: Pattern Match.). If the target is 'dir/a.foo.b' and the target pattern is 'a.%.b' then the stem is 'dir/foo'. The stem is useful for constructing names of related files. In a static pattern rule, the stem is part of the file name that matched the '%' in the target pattern. In an explicit rule, there is no stem; so '$*' cannot be determined in that way. Instead, if the target name ends with a recognized suffix (*note Old-Fashioned Suffix Rules: Suffix Rules.), '$*' is set to the target name minus the suffix. For example, if the target name is 'foo.c', then '$*' is set to 'foo', since '.c' is a suffix. GNU 'make' does this bizarre thing only for compatibility with other implementations of 'make'. You should generally avoid using '$*' except in implicit rules or static pattern rules. If the target name in an explicit rule does not end with a recognized suffix, '$*' is set to the empty string for that rule. '$?' is useful even in explicit rules when you wish to operate on only the prerequisites that have changed. For example, suppose that an archive named 'lib' is supposed to contain copies of several object files. This rule copies just the changed object files into the archive: lib: foo.o bar.o lose.o win.o ar r lib $? Of the variables listed above, four have values that are single file names, and three have values that are lists of file names. These seven have variants that get just the file's directory name or just the file name within the directory. The variant variables' names are formed by appending 'D' or 'F', respectively. The functions 'dir' and 'notdir' can be used to obtain a similar effect (*note Functions for File Names: File Name Functions.). Note, however, that the 'D' variants all omit the trailing slash which always appears in the output of the 'dir' function. Here is a table of the variants: '$(@D)' The directory part of the file name of the target, with the trailing slash removed. If the value of '$@' is 'dir/foo.o' then '$(@D)' is 'dir'. This value is '.' if '$@' does not contain a slash. '$(@F)' The file-within-directory part of the file name of the target. If the value of '$@' is 'dir/foo.o' then '$(@F)' is 'foo.o'. '$(@F)' is equivalent to '$(notdir $@)'. '$(*D)' '$(*F)' The directory part and the file-within-directory part of the stem; 'dir' and 'foo' in this example. '$(%D)' '$(%F)' The directory part and the file-within-directory part of the target archive member name. This makes sense only for archive member targets of the form 'ARCHIVE(MEMBER)' and is useful only when MEMBER may contain a directory name. (*Note Archive Members as Targets: Archive Members.) '$( #include #include #include #include #include #include int plugin_is_GPL_compatible; char * gen_tmpfile(const char *nm, int argc, char **argv) { int fd; /* Compute the size of the filename and allocate space for it. */ int len = strlen (argv[0]) + 6 + 1; char *buf = gmk_alloc (len); strcpy (buf, argv[0]); strcat (buf, "XXXXXX"); fd = mkstemp(buf); if (fd >= 0) { /* Don't leak the file descriptor. */ close (fd); return buf; } /* Failure. */ fprintf (stderr, "mkstemp(%s) failed: %s\n", buf, strerror (errno)); gmk_free (buf); return NULL; } int mk_temp_gmk_setup () { /* Register the function with make name "mk-temp". */ gmk_add_function ("mk-temp", gen_tmpfile, 1, 1, 1); return 1; } Next, we will write a makefile that can build this shared object, load it, and use it: all: @echo Temporary file: $(mk-temp tmpfile.) load mk_temp.so mk_temp.so: mk_temp.c $(CC) -shared -fPIC -o $ $< On MS-Windows, due to peculiarities of how shared objects are produced, the compiler needs to scan the "import library" produced when building 'make', typically called 'libgnumake-VERSION.dll.a', where VERSION is the version of the load object API. So the recipe to produce a shared object will look on Windows like this (assuming the API version is 1): mk_temp.dll: mk_temp.c $(CC) -shared -o $ $< -lgnumake-1 Now when you run 'make' you'll see something like: $ make cc -shared -fPIC -o mk_temp.so mk_temp.c Temporary filename: tmpfile.A7JEwd  File: make.info, Node: Integrating make, Next: Features, Prev: Extending make, Up: Top 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.  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.  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. Note that the read side of the jobserver pipe is set to "blocking" mode. 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.  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.  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.  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 credit to other versions of 'make'. We consider the features of 'make' in 4.2 BSD systems as a baseline. If you are concerned with writing portable makefiles, you should not use the features of 'make' listed here, nor the ones in *note Missing::. Many features come from the version of 'make' in System V. * The 'VPATH' variable and its special meaning. *Note Searching Directories for Prerequisites: Directory Search. This feature exists in System V 'make', but is undocumented. It is documented in 4.3 BSD 'make' (which says it mimics System V's 'VPATH' feature). * Included makefiles. *Note Including Other Makefiles: Include. Allowing multiple files to be included with a single directive is a GNU extension. * Variables are read from and communicated via the environment. *Note Variables from the Environment: Environment. * Options passed through the variable 'MAKEFLAGS' to recursive invocations of 'make'. *Note Communicating Options to a Sub-'make': Options/Recursion. * The automatic variable '$%' is set to the member name in an archive reference. *Note Automatic Variables::. * The automatic variables '$@', '$*', '$<', '$%', and '$?' have corresponding forms like '$(@F)' and '$(@D)'. We have generalized this to '$^' as an obvious extension. *Note Automatic Variables::. * Substitution variable references. *Note Basics of Variable References: Reference. * The command line options '-b' and '-m', accepted and ignored. In System V 'make', these options actually do something. * Execution of recursive commands to run 'make' via the variable 'MAKE' even if '-n', '-q' or '-t' is specified. *Note Recursive Use of 'make': Recursion. * Support for suffix '.a' in suffix rules. *Note Archive Suffix Rules::. This feature is obsolete in GNU 'make', because the general feature of rule chaining (*note Chains of Implicit Rules: Chained Rules.) allows one pattern rule for installing members in an archive (*note Archive Update::) to be sufficient. * The arrangement of lines and backslash/newline combinations in recipes is retained when the recipes are printed, so they appear as they do in the makefile, except for the stripping of initial whitespace. The following features were inspired by various other versions of 'make'. In some cases it is unclear exactly which versions inspired which others. * Pattern rules using '%'. This has been implemented in several versions of 'make'. We're not sure who invented it first, but it's been spread around a bit. *Note Defining and Redefining Pattern Rules: Pattern Rules. * Rule chaining and implicit intermediate files. This was implemented by Stu Feldman in his version of 'make' for AT&T Eighth Edition Research Unix, and later by Andrew Hume of AT&T Bell Labs in his 'mk' program (where he terms it "transitive closure"). We do not really know if we got this from either of them or thought it up ourselves at the same time. *Note Chains of Implicit Rules: Chained Rules. * The automatic variable '$^' containing a list of all prerequisites of the current target. We did not invent this, but we have no idea who did. *Note Automatic Variables::. The automatic variable '$+' is a simple extension of '$^'. * The "what if" flag ('-W' in GNU 'make') was (as far as we know) invented by Andrew Hume in 'mk'. *Note Instead of Executing Recipes: Instead of Execution. * The concept of doing several things at once (parallelism) exists in many incarnations of 'make' and similar programs, though not in the System V or BSD implementations. *Note Recipe Execution: Execution. * A number of different build tools that support parallelism also support collecting output and displaying as a single block. *Note Output During Parallel Execution: Parallel Output. * Modified variable references using pattern substitution come from SunOS 4. *Note Basics of Variable References: Reference. This functionality was provided in GNU 'make' by the 'patsubst' function before the alternate syntax was implemented for compatibility with SunOS 4. It is not altogether clear who inspired whom, since GNU 'make' had 'patsubst' before SunOS 4 was released. * The special significance of '+' characters preceding recipe lines (*note Instead of Executing Recipes: Instead of Execution.) is mandated by 'IEEE Standard 1003.2-1992' (POSIX.2). * The '+=' syntax to append to the value of a variable comes from SunOS 4 'make'. *Note Appending More Text to Variables: Appending. * The syntax 'ARCHIVE(MEM1 MEM2...)' to list multiple members in a single archive file comes from SunOS 4 'make'. *Note Archive Members::. * The '-include' directive to include makefiles with no error for a nonexistent file comes from SunOS 4 'make'. (But note that SunOS 4 'make' does not allow multiple makefiles to be specified in one '-include' directive.) The same feature appears with the name 'sinclude' in SGI 'make' and perhaps others. * The '!=' shell assignment operator exists in many BSD of 'make' and is purposefully implemented here to behave identically to those implementations. * Various build management tools are implemented using scripting languages such as Perl or Python and thus provide a natural embedded scripting language, similar to GNU 'make''s integration of GNU Guile. The remaining features are inventions new in GNU 'make': * Use the '-v' or '--version' option to print version and copyright information. * Use the '-h' or '--help' option to summarize the options to 'make'. * Simply-expanded variables. *Note The Two Flavors of Variables: Flavors. * Pass command line variable assignments automatically through the variable 'MAKE' to recursive 'make' invocations. *Note Recursive Use of 'make': Recursion. * Use the '-C' or '--directory' command option to change directory. *Note Summary of Options: Options Summary. * Make verbatim variable definitions with 'define'. *Note Defining Multi-Line Variables: Multi-Line. * Declare phony targets with the special target '.PHONY'. Andrew Hume of AT&T Bell Labs implemented a similar feature with a different syntax in his 'mk' program. This seems to be a case of parallel discovery. *Note Phony Targets: Phony Targets. * Manipulate text by calling functions. *Note Functions for Transforming Text: Functions. * Use the '-o' or '--old-file' option to pretend a file's modification-time is old. *Note Avoiding Recompilation of Some Files: Avoiding Compilation. * Conditional execution. This feature has been implemented numerous times in various versions of 'make'; it seems a natural extension derived from the features of the C preprocessor and similar macro languages and is not a revolutionary concept. *Note Conditional Parts of Makefiles: Conditionals. * Specify a search path for included makefiles. *Note Including Other Makefiles: Include. * Specify extra makefiles to read with an environment variable. *Note The Variable 'MAKEFILES': MAKEFILES Variable. * Strip leading sequences of './' from file names, so that './FILE' and 'FILE' are considered to be the same file. * Use a special search method for library prerequisites written in the form '-lNAME'. *Note Directory Search for Link Libraries: Libraries/Search. * Allow suffixes for suffix rules (*note Old-Fashioned Suffix Rules: Suffix Rules.) to contain any characters. In other versions of 'make', they must begin with '.' and not contain any '/' characters. * Keep track of the current level of 'make' recursion using the variable 'MAKELEVEL'. *Note Recursive Use of 'make': Recursion. * Provide any goals given on the command line in the variable 'MAKECMDGOALS'. *Note Arguments to Specify the Goals: Goals. * Specify static pattern rules. *Note Static Pattern Rules: Static Pattern. * Provide selective 'vpath' search. *Note Searching Directories for Prerequisites: Directory Search. * Provide computed variable references. *Note Basics of Variable References: Reference. * Update makefiles. *Note How Makefiles Are Remade: Remaking Makefiles. System V 'make' has a very, very limited form of this functionality in that it will check out SCCS files for makefiles. * Various new built-in implicit rules. *Note Catalogue of Built-In Rules: Catalogue of Rules. * Load dynamic objects which can modify the behavior of 'make'. *Note Loading Dynamic Objects: Loading Objects.  File: make.info, Node: Missing, Next: Makefile Conventions, Prev: Features, Up: Top 15 Incompatibilities and Missing Features ***************************************** The 'make' programs in various other systems support a few features that are not implemented in GNU 'make'. The POSIX.2 standard ('IEEE Standard 1003.2-1992') which specifies 'make' does not require any of these features. * A target of the form 'FILE((ENTRY))' stands for a member of archive file FILE. The member is chosen, not by name, but by being an object file which defines the linker symbol ENTRY. This feature was not put into GNU 'make' because of the non-modularity of putting knowledge into 'make' of the internal format of archive file symbol tables. *Note Updating Archive Symbol Directories: Archive Symbols. * Suffixes (used in suffix rules) that end with the character '~' have a special meaning to System V 'make'; they refer to the SCCS file that corresponds to the file one would get without the '~'. For example, the suffix rule '.c~.o' would make the file 'N.o' from the SCCS file 's.N.c'. For complete coverage, a whole series of such suffix rules is required. *Note Old-Fashioned Suffix Rules: Suffix Rules. In GNU 'make', this entire series of cases is handled by two pattern rules for extraction from SCCS, in combination with the general feature of rule chaining. *Note Chains of Implicit Rules: Chained Rules. * In System V and 4.3 BSD 'make', files found by 'VPATH' search (*note Searching Directories for Prerequisites: Directory Search.) have their names changed inside recipes. We feel it is much cleaner to always use automatic variables and thus make this feature unnecessary. * In some Unix 'make's, the automatic variable '$*' appearing in the prerequisites of a rule has the amazingly strange "feature" of expanding to the full name of the _target of that rule_. We cannot imagine what went on in the minds of Unix 'make' developers to do this; it is utterly inconsistent with the normal definition of '$*'. * In some Unix 'make's, implicit rule search (*note Using Implicit Rules: Implicit Rules.) is apparently done for _all_ targets, not just those without recipes. This means you can do: foo.o: cc -c foo.c and Unix 'make' will intuit that 'foo.o' depends on 'foo.c'. We feel that such usage is broken. The prerequisite properties of 'make' are well-defined (for GNU 'make', at least), and doing such a thing simply does not fit the model. * GNU 'make' does not include any built-in implicit rules for compiling or preprocessing EFL programs. If we hear of anyone who is using EFL, we will gladly add them. * It appears that in SVR4 'make', a suffix rule can be specified with no recipe, and it is treated as if it had an empty recipe (*note Empty Recipes::). For example: .c.a: will override the built-in '.c.a' suffix rule. We feel that it is cleaner for a rule without a recipe to always simply add to the prerequisite list for the target. The above example can be easily rewritten to get the desired behavior in GNU 'make': .c.a: ; * Some versions of 'make' invoke the shell with the '-e' flag, except under '-k' (*note Testing the Compilation of a Program: Testing.). The '-e' flag tells the shell to exit as soon as any program it runs returns a nonzero status. We feel it is cleaner to write each line of the recipe to stand on its own and not require this special treatment.  File: make.info, Node: Makefile Conventions, Next: Quick Reference, Prev: Missing, Up: Top 16 Makefile Conventions *********************** This node describes conventions for writing the Makefiles for GNU programs. Using Automake will help you write a Makefile that follows these conventions. For more information on portable Makefiles, see POSIX and *note Portable Make Programming: (autoconf)Portable Make. * Menu: * Makefile Basics:: General conventions for Makefiles. * Utilities in Makefiles:: Utilities to be used in Makefiles. * Command Variables:: Variables for specifying commands. * 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' rule: normal, pre-install and post-install.  File: make.info, Node: Makefile Basics, Next: Utilities in Makefiles, Up: Makefile Conventions 16.1 General Conventions for Makefiles ====================================== Every Makefile should contain this line: SHELL = /bin/sh to avoid trouble on systems where the 'SHELL' variable might be inherited from the environment. (This is never a problem with GNU 'make'.) Different 'make' programs have incompatible suffix lists and implicit rules, and this sometimes creates confusion or misbehavior. So it is a good idea to set the suffix list explicitly using only the suffixes you need in the particular Makefile, like this: .SUFFIXES: .SUFFIXES: .c .o The first line clears out the suffix list, the second introduces all suffixes which may be subject to implicit rules in this Makefile. Don't assume that '.' is in the path for command execution. When you need to run programs that are a part of your package during the make, please make sure that it uses './' if the program is built as part of the make or '$(srcdir)/' if the file is an unchanging part of the source code. Without one of these prefixes, the current search path is used. The distinction between './' (the "build directory") and '$(srcdir)/' (the "source directory") is important because users can build in a separate directory using the '--srcdir' option to 'configure'. A rule of the form: foo.1 : foo.man sedscript sed -f sedscript foo.man > foo.1 will fail when the build directory is not the source directory, because 'foo.man' and 'sedscript' are in the source directory. When using GNU 'make', relying on 'VPATH' to find the source file will work in the case where there is a single dependency file, since the 'make' automatic variable '$<' will represent the source file wherever it is. (Many versions of 'make' set '$<' only in implicit rules.) A Makefile target like foo.o : bar.c $(CC) -I. -I$(srcdir) $(CFLAGS) -c bar.c -o foo.o should instead be written as foo.o : bar.c $(CC) -I. -I$(srcdir) $(CFLAGS) -c $< -o $@ in order to allow 'VPATH' to work correctly. When the target has multiple dependencies, using an explicit '$(srcdir)' is the easiest way to make the rule work well. For example, the target above for 'foo.1' is best written as: foo.1 : foo.man sedscript sed -f $(srcdir)/sedscript $(srcdir)/foo.man > $@ GNU distributions usually contain some files which are not source files--for example, Info files, and the output from Autoconf, Automake, Bison or Flex. Since these files normally appear in the source directory, they should always appear in the source directory, not in the build directory. So Makefile rules to update them should put the updated files in the source directory. However, if a file does not appear in the distribution, then the Makefile should not put it in the source directory, because building a program in ordinary circumstances should not modify the source directory in any way. Try to make the build and installation targets, at least (and all their subtargets) work correctly with a parallel 'make'.  File: make.info, Node: Utilities in Makefiles, Next: Command Variables, Prev: Makefile Basics, Up: Makefile Conventions 16.2 Utilities in Makefiles =========================== Write the Makefile commands (and any shell scripts, such as 'configure') to run under 'sh' (both the traditional Bourne shell and the POSIX shell), not 'csh'. Don't use any special features of 'ksh' or 'bash', or POSIX features not widely supported in traditional Bourne 'sh'. The 'configure' script and the Makefile rules for building and installation should not use any utilities directly except these: awk cat cmp cp diff echo egrep expr false grep install-info ln ls mkdir mv printf pwd rm rmdir sed sleep sort tar test touch tr true Compression programs such as 'gzip' can be used in the 'dist' rule. Generally, stick to the widely-supported (usually POSIX-specified) options and features of these programs. For example, don't use 'mkdir -p', convenient as it may be, because a few systems don't support it at all and with others, it is not safe for parallel execution. For a list of known incompatibilities, see *note Portable Shell Programming: (autoconf)Portable Shell. It is a good idea to avoid creating symbolic links in makefiles, since a few file systems don't support them. The Makefile rules for building and installation can also use compilers and related programs, but should do so via 'make' variables so that the user can substitute alternatives. Here are some of the programs we mean: ar bison cc flex install ld ldconfig lex make makeinfo ranlib texi2dvi yacc Use the following 'make' variables to run those programs: $(AR) $(BISON) $(CC) $(FLEX) $(INSTALL) $(LD) $(LDCONFIG) $(LEX) $(MAKE) $(MAKEINFO) $(RANLIB) $(TEXI2DVI) $(YACC) When you use 'ranlib' or 'ldconfig', you should make sure nothing bad happens if the system does not have the program in question. Arrange to ignore an error from that command, and print a message before the command to tell the user that failure of this command does not mean a problem. (The Autoconf 'AC_PROG_RANLIB' macro can help with this.) If you use symbolic links, you should implement a fallback for systems that don't have symbolic links. Additional utilities that can be used via Make variables are: chgrp chmod chown mknod It is ok to use other utilities in Makefile portions (or scripts) intended only for particular systems where you know those utilities exist.  File: make.info, Node: Command Variables, Next: DESTDIR, Prev: Utilities in Makefiles, Up: Makefile Conventions 16.3 Variables for Specifying Commands ====================================== Makefiles should provide variables for overriding certain commands, options, and so on. In particular, you should run most utility programs via variables. Thus, if you use Bison, have a variable named 'BISON' whose default value is set with 'BISON = bison', and refer to it with '$(BISON)' whenever you need to use Bison. File management utilities such as 'ln', 'rm', 'mv', and so on, need not be referred to through variables in this way, since users don't need to replace them with other programs. Each program-name variable should come with an options variable that is used to supply options to the program. Append 'FLAGS' to the program-name variable name to get the options variable name--for example, 'BISONFLAGS'. (The names 'CFLAGS' for the C compiler, 'YFLAGS' for yacc, and 'LFLAGS' for lex, are exceptions to this rule, but we keep them because they are standard.) Use 'CPPFLAGS' in any compilation command that runs the preprocessor, and use 'LDFLAGS' in any compilation command that does linking as well as in any direct use of 'ld'. If there are C compiler options that _must_ be used for proper compilation of certain files, do not include them in 'CFLAGS'. Users expect to be able to specify 'CFLAGS' freely themselves. Instead, arrange to pass the necessary options to the C compiler independently of 'CFLAGS', by writing them explicitly in the compilation commands or by defining an implicit rule, like this: CFLAGS = -g ALL_CFLAGS = -I. $(CFLAGS) .c.o: $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $< Do include the '-g' option in 'CFLAGS', because that is not _required_ for proper compilation. You can consider it a default that is only recommended. If the package is set up so that it is compiled with GCC by default, then you might as well include '-O' in the default value of 'CFLAGS' as well. Put 'CFLAGS' last in the compilation command, after other variables containing compiler options, so the user can use 'CFLAGS' to override the others. 'CFLAGS' should be used in every invocation of the C compiler, both those which do compilation and those which do linking. Every Makefile should define the variable 'INSTALL', which is the basic command for installing a file into the system. Every Makefile should also define the variables 'INSTALL_PROGRAM' and 'INSTALL_DATA'. (The default for 'INSTALL_PROGRAM' should be '$(INSTALL)'; the default for 'INSTALL_DATA' should be '${INSTALL} -m 644'.) Then it should use those variables as the commands for actual installation, for executables and non-executables respectively. Minimal use of these variables is as follows: $(INSTALL_PROGRAM) foo $(bindir)/foo $(INSTALL_DATA) libfoo.a $(libdir)/libfoo.a However, it is preferable to support a 'DESTDIR' prefix on the target files, as explained in the next section. It is acceptable, but not required, to install multiple files in one command, with the final argument being a directory, as in: $(INSTALL_PROGRAM) foo bar baz $(bindir)  File: make.info, Node: DESTDIR, Next: Directory Variables, Prev: Command Variables, Up: Makefile Conventions 16.4 'DESTDIR': Support for Staged Installs =========================================== 'DESTDIR' is a variable prepended to each installed target file, like this: $(INSTALL_PROGRAM) foo $(DESTDIR)$(bindir)/foo $(INSTALL_DATA) libfoo.a $(DESTDIR)$(libdir)/libfoo.a The 'DESTDIR' variable is specified by the user on the 'make' command line as an absolute file name. For example: make DESTDIR=/tmp/stage install 'DESTDIR' should be supported only in the 'install*' and 'uninstall*' targets, as those are the only targets where it is useful. If your installation step would normally install '/usr/local/bin/foo' and '/usr/local/lib/libfoo.a', then an installation invoked as in the example above would install '/tmp/stage/usr/local/bin/foo' and '/tmp/stage/usr/local/lib/libfoo.a' instead. Prepending the variable 'DESTDIR' to each target in this way provides for "staged installs", where the installed files are not placed directly into their expected location but are instead copied into a temporary location ('DESTDIR'). However, installed files maintain their relative directory structure and any embedded file names will not be modified. You should not set the value of 'DESTDIR' in your 'Makefile' at all; then the files are installed into their expected locations by default. Also, specifying 'DESTDIR' should not change the operation of the software in any way, so its value should not be included in any file contents. 'DESTDIR' support is commonly used in package creation. It is also helpful to users who want to understand what a given package will install where, and to allow users who don't normally have permissions to install into protected areas to build and install before gaining those permissions. Finally, it can be useful with tools such as 'stow', where code is installed in one place but made to appear to be installed somewhere else using symbolic links or special mount operations. So, we strongly recommend GNU packages support 'DESTDIR', though it is not an absolute requirement.  File: make.info, Node: Directory Variables, Next: Standard Targets, Prev: DESTDIR, Up: Makefile Conventions 16.5 Variables for Installation Directories =========================================== Installation directories should always be named by variables, so it is easy to install in a nonstandard place. The standard names for these variables and the values they should have in GNU packages are described 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 --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 packages behave identically, allowing the installer to achieve any desired layout. All installation directories, and their parent directories, should be created (if necessary) before they are installed into. These first two variables set the root for the installation. All the other installation directories should be subdirectories of one of these two, and nothing should be directly installed into these two directories. 'prefix' A prefix used in constructing the default values of the variables listed below. The default value of 'prefix' should be '/usr/local'. When building the complete GNU system, the prefix will be empty and '/usr' will be a symbolic link to '/'. (If you are using Autoconf, write it as '@prefix@'.) Running 'make install' with a different value of 'prefix' from the one used to build the program should _not_ recompile the program. 'exec_prefix' A prefix used in constructing the default values of some of the variables listed below. The default value of 'exec_prefix' should be '$(prefix)'. (If you are using Autoconf, write it as '@exec_prefix@'.) Generally, '$(exec_prefix)' is used for directories that contain machine-specific files (such as executables and subroutine libraries), while '$(prefix)' is used directly for other directories. Running 'make install' with a different value of 'exec_prefix' from the one used to build the program should _not_ recompile the program. Executable programs are installed in one of the following directories. 'bindir' The directory for installing executable programs that users can run. This should normally be '/usr/local/bin', but write it as '$(exec_prefix)/bin'. (If you are using Autoconf, write it as '@bindir@'.) 'sbindir' The directory for installing executable programs that can be run from the shell, but are only generally useful to system administrators. This should normally be '/usr/local/sbin', but write it as '$(exec_prefix)/sbin'. (If you are using Autoconf, write it as '@sbindir@'.) 'libexecdir' The directory for installing executable programs to be run by other programs rather than by users. This directory should normally be '/usr/local/libexec', but write it as '$(exec_prefix)/libexec'. (If you are using Autoconf, write it as '@libexecdir@'.) The definition of 'libexecdir' is the same for all packages, so you should install your data in a subdirectory thereof. Most packages install their data under '$(libexecdir)/PACKAGE-NAME/', possibly within additional subdirectories thereof, such as '$(libexecdir)/PACKAGE-NAME/MACHINE/VERSION'. Data files used by the program during its execution are divided into categories in two ways. * Some files are normally modified by programs; others are never normally modified (though users may edit some of these). * Some files are architecture-independent and can be shared by all machines at a site; some are architecture-dependent and can be shared only by machines of the same kind and operating system; others may never be shared between two machines. This makes for six different possibilities. However, we want to discourage the use of architecture-dependent files, aside from object files and libraries. It is much cleaner to make other data files architecture-independent, and it is generally not hard. Here are the variables Makefiles should use to specify directories to put these various kinds of files in: 'datarootdir' The root of the directory tree for read-only architecture-independent data files. This should normally be '/usr/local/share', but write it as '$(prefix)/share'. (If you are using Autoconf, write it as '@datarootdir@'.) 'datadir''s default value is based on this variable; so are 'infodir', 'mandir', and others. 'datadir' The directory for installing idiosyncratic read-only architecture-independent data files for this program. This is usually the same place as 'datarootdir', but we use the two separate variables so that you can move these program-specific files without altering the location for Info files, man pages, etc. This should normally be '/usr/local/share', but write it as '$(datarootdir)'. (If you are using Autoconf, write it as '@datadir@'.) The definition of 'datadir' is the same for all packages, so you should install your data in a subdirectory thereof. Most packages install their data under '$(datadir)/PACKAGE-NAME/'. 'sysconfdir' The directory for installing read-only data files that pertain to a single machine-that is to say, files for configuring a host. Mailer and network configuration files, '/etc/passwd', and so forth belong here. All the files in this directory should be ordinary ASCII text files. This directory should normally be '/usr/local/etc', but write it as '$(prefix)/etc'. (If you are using Autoconf, write it as '@sysconfdir@'.) Do not install executables here in this directory (they probably belong in '$(libexecdir)' or '$(sbindir)'). Also do not install files that are modified in the normal course of their use (programs whose purpose is to change the configuration of the system excluded). Those probably belong in '$(localstatedir)'. 'sharedstatedir' The directory for installing architecture-independent data files which the programs modify while they run. This should normally be '/usr/local/com', but write it as '$(prefix)/com'. (If you are using Autoconf, write it as '@sharedstatedir@'.) 'localstatedir' The directory for installing data files which the programs modify while they run, and that pertain to one specific machine. Users should never need to modify files in this directory to configure the package's operation; put such configuration information in separate files that go in '$(datadir)' or '$(sysconfdir)'. '$(localstatedir)' should normally be '/usr/local/var', but write it as '$(prefix)/var'. (If you are using Autoconf, write it as '@localstatedir@'.) 'runstatedir' The directory for installing data files which the programs modify while they run, that pertain to one specific machine, and which need not persist longer than the execution of the program--which is generally long-lived, for example, until the next reboot. PID files for system daemons are a typical use. In addition, this directory should not be cleaned except perhaps at reboot, while the general '/tmp' ('TMPDIR') may be cleaned arbitrarily. This should normally be '/var/run', but write it as '$(localstatedir)/run'. Having it as a separate variable allows the use of '/run' if desired, for example. (If you are using Autoconf 2.70 or later, write it as '@runstatedir@'.) These variables specify the directory for installing certain specific types of files, if your program has them. Every GNU package should have Info files, so every program needs 'infodir', but not all need 'libdir' or 'lispdir'. 'includedir' The directory for installing header files to be included by user programs with the C '#include' preprocessor directive. This should normally be '/usr/local/include', but write it as '$(prefix)/include'. (If you are using Autoconf, write it as '@includedir@'.) Most compilers other than GCC do not look for header files in directory '/usr/local/include'. So installing the header files this way is only useful with GCC. Sometimes this is not a problem because some libraries are only really intended to work with GCC. But some libraries are intended to work with other compilers. They should install their header files in two places, one specified by 'includedir' and one specified by 'oldincludedir'. 'oldincludedir' The directory for installing '#include' header files for use with compilers other than GCC. This should normally be '/usr/include'. (If you are using Autoconf, you can write it as '@oldincludedir@'.) The Makefile commands should check whether the value of 'oldincludedir' is empty. If it is, they should not try to use it; they should cancel the second installation of the header files. A package should not replace an existing header in this directory unless the header came from the same package. Thus, if your Foo package provides a header file 'foo.h', then it should install the header file in the 'oldincludedir' directory if either (1) there is no 'foo.h' there or (2) the 'foo.h' that exists came from the Foo package. To tell whether 'foo.h' came from the Foo package, put a magic string in the file--part of a comment--and 'grep' for that string. 'docdir' The directory for installing documentation files (other than Info) for this package. By default, it should be '/usr/local/share/doc/YOURPKG', but it should be written as '$(datarootdir)/doc/YOURPKG'. (If you are using Autoconf, write it as '@docdir@'.) The YOURPKG subdirectory, which may include a version number, prevents collisions among files with common names, such as 'README'. 'infodir' The directory for installing the Info files for this package. By default, it should be '/usr/local/share/info', but it should be written as '$(datarootdir)/info'. (If you are using Autoconf, write it as '@infodir@'.) 'infodir' is separate from 'docdir' for compatibility with existing practice. 'htmldir' 'dvidir' 'pdfdir' 'psdir' Directories for installing documentation files in the particular format. They should all be set to '$(docdir)' by default. (If you are using Autoconf, write them as '@htmldir@', '@dvidir@', etc.) Packages which supply several translations of their documentation should install them in '$(htmldir)/'LL, '$(pdfdir)/'LL, etc. where LL is a locale abbreviation such as 'en' or 'pt_BR'. 'libdir' The directory for object files and libraries of object code. Do not install executables here, they probably ought to go in '$(libexecdir)' instead. The value of 'libdir' should normally be '/usr/local/lib', but write it as '$(exec_prefix)/lib'. (If you are using Autoconf, write it as '@libdir@'.) 'lispdir' The directory for installing any Emacs Lisp files in this package. By default, it should be '/usr/local/share/emacs/site-lisp', but it should be written as '$(datarootdir)/emacs/site-lisp'. If you are using Autoconf, write the default as '@lispdir@'. In order to make '@lispdir@' work, you need the following lines in your 'configure.ac' file: lispdir='${datarootdir}/emacs/site-lisp' AC_SUBST(lispdir) 'localedir' The directory for installing locale-specific message catalogs for this package. By default, it should be '/usr/local/share/locale', but it should be written as '$(datarootdir)/locale'. (If you are using Autoconf, write it as '@localedir@'.) This directory usually has a subdirectory per locale. Unix-style man pages are installed in one of the following: 'mandir' The top-level directory for installing the man pages (if any) for this package. It will normally be '/usr/local/share/man', but you should write it as '$(datarootdir)/man'. (If you are using Autoconf, write it as '@mandir@'.) 'man1dir' The directory for installing section 1 man pages. Write it as '$(mandir)/man1'. 'man2dir' The directory for installing section 2 man pages. Write it as '$(mandir)/man2' '...' *Don't make the primary documentation for any GNU software be a man page. Write a manual in Texinfo instead. Man pages are just for the sake of people running GNU software on Unix, which is a secondary application only.* 'manext' The file name extension for the installed man page. This should contain a period followed by the appropriate digit; it should normally be '.1'. 'man1ext' The file name extension for installed section 1 man pages. 'man2ext' The file name extension for installed section 2 man pages. '...' Use these names instead of 'manext' if the package needs to install man pages in more than one section of the manual. And finally, you should set the following variable: 'srcdir' The directory for the sources being compiled. The value of this variable is normally inserted by the 'configure' shell script. (If you are using Autoconf, use 'srcdir = @srcdir@'.) For example: # Common prefix for installation directories. # NOTE: This directory must exist when you start the install. prefix = /usr/local datarootdir = $(prefix)/share datadir = $(datarootdir) exec_prefix = $(prefix) # 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 # Where to put the Info files. infodir = $(datarootdir)/info If your program installs a large number of files into one of the standard user-specified directories, it might be useful to group them into a subdirectory particular to that program. If you do this, you should write the 'install' rule to create these subdirectories. Do not expect the user to include the subdirectory name in the value of any of the variables listed above. The idea of having a uniform set of variable names for installation directories is to enable the user to specify the exact same values for several different GNU packages. In order for this to be useful, all the packages must be designed so that they will work sensibly when the user does so. At times, not all of these variables may be implemented in the current release of Autoconf and/or Automake; but as of Autoconf 2.60, we believe all of them are. When any are missing, the descriptions here serve as specifications for what Autoconf will implement. As a programmer, you can either use a development version of Autoconf or avoid using these variables until a stable release is made which supports them.  File: make.info, Node: Standard Targets, Next: Install Command Categories, Prev: Directory Variables, Up: Makefile Conventions 16.6 Standard Targets for Users =============================== All GNU programs should have the following targets in their Makefiles: 'all' Compile the entire program. This should be the default target. This target need not rebuild any documentation files; Info files should normally be included in the distribution, and DVI (and other documentation format) files should be made only when explicitly asked for. By default, the Make rules should compile and link with '-g', so that executable programs have debugging symbols. Otherwise, you are essentially helpless in the face of a crash, and it is often far from easy to reproduce with a fresh build. 'install' Compile the program and copy the executables, libraries, and so on to the file names where they should reside for actual use. If there is a simple test to verify that a program is properly installed, this target should run that test. Do not strip executables when installing them. This helps eventual debugging that may be needed later, and nowadays disk space is cheap and dynamic loaders typically ensure debug sections are not loaded during normal execution. Users that need stripped binaries may invoke the 'install-strip' target to do that. If possible, write the 'install' target rule so that it does not modify anything in the directory where the program was built, provided 'make all' has just been done. This is convenient for building the program under one user name and installing it under another. The commands should create all the directories in which files are to be installed, if they don't already exist. This includes the directories specified as the values of the variables 'prefix' and 'exec_prefix', as well as all subdirectories that are needed. One way to do this is by means of an 'installdirs' target as described below. Use '-' before any command for installing a man page, so that 'make' will ignore any errors. This is in case there are systems that don't have the Unix man page documentation system installed. The way to install Info files is to copy them into '$(infodir)' with '$(INSTALL_DATA)' (*note Command Variables::), and then run the 'install-info' program if it is present. 'install-info' is a program that edits the Info 'dir' file to add or update the menu entry for the given Info file; it is part of the Texinfo package. Here is a sample rule to install an Info file that also tries to handle some additional situations, such as 'install-info' not being present. do-install-info: foo.info installdirs $(NORMAL_INSTALL) # Prefer an info file in . to one in srcdir. if test -f foo.info; then d=.; \ else d="$(srcdir)"; fi; \ $(INSTALL_DATA) $$d/foo.info \ "$(DESTDIR)$(infodir)/foo.info" # Run install-info only if it exists. # 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 # fail gracefully when there is an unknown command. $(POST_INSTALL) if $(SHELL) -c 'install-info --version' \ >/dev/null 2>&1; then \ install-info --dir-file="$(DESTDIR)$(infodir)/dir" \ "$(DESTDIR)$(infodir)/foo.info"; \ else true; fi When writing the 'install' target, you must classify all the commands into three categories: normal ones, "pre-installation" commands and "post-installation" commands. *Note Install Command Categories::. 'install-html' 'install-dvi' 'install-pdf' 'install-ps' These targets install documentation in formats other than Info; they're intended to be called explicitly by the person installing the package, if that format is desired. GNU prefers Info files, so these must be installed by the 'install' target. When you have many documentation files to install, we recommend that you avoid collisions and clutter by arranging for these targets to install in subdirectories of the appropriate installation directory, such as 'htmldir'. As one example, if your package has multiple manuals, and you wish to install HTML documentation with many files (such as the "split" mode output by 'makeinfo --html'), you'll certainly want to use subdirectories, or two nodes with the same name in different manuals will overwrite each other. Please make these 'install-FORMAT' targets invoke the commands for the FORMAT target, for example, by making FORMAT a dependency. 'uninstall' Delete all the installed files--the copies that the 'install' and 'install-*' targets create. This rule should not modify the directories where compilation is done, only the directories where files are installed. The uninstallation commands are divided into three categories, just like the installation commands. *Note Install Command Categories::. 'install-strip' Like 'install', but strip the executable files while installing them. In simple cases, this target can use the 'install' target in a simple way: install-strip: $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' \ install But if the package installs scripts as well as real executables, the 'install-strip' target can't just refer to the 'install' target; it has to strip the executables but not the scripts. 'install-strip' should not strip the executables in the build directory which are being copied for installation. It should only strip the copies that are installed. Normally we do not recommend stripping an executable unless you are sure the program has no bugs. However, it can be reasonable to install a stripped executable for actual execution while saving the unstripped executable elsewhere in case there is a bug. 'clean' Delete all files in the current directory that are normally created by building the program. Also delete files in other directories if they are created by this makefile. However, don't delete the files that record the configuration. Also preserve files that could be made by building, but normally aren't because the distribution comes with them. There is no need to delete parent directories that were created with 'mkdir -p', since they could have existed anyway. Delete '.dvi' files here if they are not part of the distribution. 'distclean' Delete all files in the current directory (or created by this makefile) that are created by configuring or building the program. If you have unpacked the source and built the program without creating any other files, 'make distclean' should leave only the files that were in the distribution. However, there is no need to delete parent directories that were created with 'mkdir -p', since they could have existed anyway. 'mostlyclean' Like 'clean', but may refrain from deleting a few files that people normally don't want to recompile. For example, the 'mostlyclean' target for GCC does not delete 'libgcc.a', because recompiling it is rarely necessary and takes a lot of time. 'maintainer-clean' Delete almost everything that can be reconstructed with this Makefile. This typically includes everything deleted by 'distclean', plus more: C source files produced by Bison, tags tables, Info files, and so on. The reason we say "almost everything" is that running the command 'make maintainer-clean' should not delete 'configure' even if 'configure' can be remade using a rule in the Makefile. More generally, 'make maintainer-clean' should not delete anything that needs to exist in order to run 'configure' and then begin to build the program. Also, there is no need to delete parent directories that were created with 'mkdir -p', since they could have existed anyway. These are the only exceptions; 'maintainer-clean' should delete everything else that can be rebuilt. The 'maintainer-clean' target is intended to be used by a maintainer of the package, not by ordinary users. You may need special tools to reconstruct some of the files that 'make maintainer-clean' deletes. Since these files are normally included in the distribution, we don't take care to make them easy to reconstruct. If you find you need to unpack the full distribution again, don't blame us. To help make users aware of this, the commands for the special 'maintainer-clean' target should start with these two: @echo 'This command is intended for maintainers to use; it' @echo 'deletes files that may need special tools to rebuild.' 'TAGS' Update a tags table for this program. 'info' Generate any Info files needed. The best way to write the rules is as follows: info: foo.info foo.info: foo.texi chap1.texi chap2.texi $(MAKEINFO) $(srcdir)/foo.texi You must define the variable 'MAKEINFO' in the Makefile. It should run the 'makeinfo' program, which is part of the Texinfo distribution. Normally a GNU distribution comes with Info files, and that means the Info files are present in the source directory. Therefore, the Make rule for an info file should update it in the source directory. When users build the package, ordinarily Make will not update the Info files because they will already be up to date. 'dvi' 'html' 'pdf' 'ps' Generate documentation files in the given format. These targets should always exist, but any or all can be a no-op if the given output format cannot be generated. These targets should not be dependencies of the 'all' target; the user must manually invoke them. Here's an example rule for generating DVI files from Texinfo: dvi: foo.dvi foo.dvi: foo.texi chap1.texi chap2.texi $(TEXI2DVI) $(srcdir)/foo.texi You must define the variable 'TEXI2DVI' in the Makefile. It should run the program 'texi2dvi', which is part of the Texinfo distribution. ('texi2dvi' uses TeX to do the real work of formatting. TeX is not distributed with Texinfo.) Alternatively, write only the dependencies, and allow GNU 'make' to provide the command. Here's another example, this one for generating HTML from Texinfo: html: foo.html foo.html: foo.texi chap1.texi chap2.texi $(TEXI2HTML) $(srcdir)/foo.texi Again, you would define the variable 'TEXI2HTML' in the Makefile; for example, it might run 'makeinfo --no-split --html' ('makeinfo' is part of the Texinfo distribution). 'dist' Create a distribution tar file for this program. The tar file should be set up so that the file names in the tar file start with a subdirectory name which is the name of the package it is a distribution for. This name can include the version number. For example, the distribution tar file of GCC version 1.40 unpacks into a subdirectory named 'gcc-1.40'. The easiest way to do this is to create a subdirectory appropriately named, use 'ln' or 'cp' to install the proper files in it, and then 'tar' that subdirectory. Compress the tar file with 'gzip'. For example, the actual distribution file for GCC version 1.40 is called 'gcc-1.40.tar.gz'. It is ok to support other free compression formats as well. The 'dist' target should explicitly depend on all non-source files that are in the distribution, to make sure they are up to date in the distribution. *Note Making Releases: (standards)Releases. 'check' Perform self-tests (if any). The user must build the program before running the tests, but need not install the program; you should write the self-tests so that they work when the program is built but not installed. The following targets are suggested as conventional names, for programs in which they are useful. 'installcheck' Perform installation tests (if any). The user must build and install the program before running the tests. You should not assume that '$(bindir)' is in the search path. 'installdirs' It's useful to add a target named 'installdirs' to create the directories where files are installed, and their parent directories. There is a script called 'mkinstalldirs' which is convenient for this; you can find it in the Gnulib package. You can use a rule like this: # Make sure all installation directories (e.g. $(bindir)) # actually exist by making them if necessary. installdirs: mkinstalldirs $(srcdir)/mkinstalldirs $(bindir) $(datadir) \ $(libdir) $(infodir) \ $(mandir) or, if you wish to support 'DESTDIR' (strongly encouraged), # Make sure all installation directories (e.g. $(bindir)) # actually exist by making them if necessary. installdirs: mkinstalldirs $(srcdir)/mkinstalldirs \ $(DESTDIR)$(bindir) $(DESTDIR)$(datadir) \ $(DESTDIR)$(libdir) $(DESTDIR)$(infodir) \ $(DESTDIR)$(mandir) This rule should not modify the directories where compilation is done. It should do nothing but create installation directories.  File: make.info, Node: Install Command Categories, Prev: Standard Targets, Up: Makefile Conventions 16.7 Install Command Categories =============================== When writing the 'install' target, you must classify all the commands into three categories: normal ones, "pre-installation" commands and "post-installation" commands. Normal commands move files into their proper places, and set their modes. They may not alter any files except the ones that come entirely from the package they belong to. Pre-installation and post-installation commands may alter other files; in particular, they can edit global configuration files or data bases. Pre-installation commands are typically executed before the normal commands, and post-installation commands are typically run after the normal commands. The most common use for a post-installation command is to run 'install-info'. This cannot be done with a normal command, since it alters a file (the Info directory) which does not come entirely and solely from the package being installed. It is a post-installation command because it needs to be done after the normal command which installs the package's Info files. Most programs don't need any pre-installation commands, but we have the feature just in case it is needed. To classify the commands in the 'install' rule into these three categories, insert "category lines" among them. A category line specifies the category for the commands that follow. A category line consists of a tab and a reference to a special Make variable, plus an optional comment at the end. There are three variables you can use, one for each category; the variable name specifies the category. Category lines are no-ops in ordinary execution because these three Make variables are normally undefined (and you _should not_ define them in the makefile). Here are the three possible category lines, each with a comment that explains what it means: $(PRE_INSTALL) # Pre-install commands follow. $(POST_INSTALL) # Post-install commands follow. $(NORMAL_INSTALL) # Normal commands follow. If you don't use a category line at the beginning of the 'install' rule, all the commands are classified as normal until the first category line. If you don't use any category lines, all the commands are classified as normal. These are the category lines for 'uninstall': $(PRE_UNINSTALL) # Pre-uninstall commands follow. $(POST_UNINSTALL) # Post-uninstall commands follow. $(NORMAL_UNINSTALL) # Normal commands follow. Typically, a pre-uninstall command would be used for deleting entries from the Info directory. If the 'install' or 'uninstall' target has any dependencies which act as subroutines of installation, then you should start _each_ dependency's commands with a category line, and start the main target's commands with a category line also. This way, you can ensure that each command is placed in the right category regardless of which of the dependencies actually run. Pre-installation and post-installation commands should not run any programs except for these: [ basename bash cat chgrp chmod chown cmp cp dd diff echo egrep expand expr false fgrep find getopt grep gunzip gzip hostname install install-info kill ldconfig ln ls md5sum mkdir mkfifo mknod mv printenv pwd rm rmdir sed sort tee test touch true uname xargs yes The reason for distinguishing the commands in this way is for the sake of making binary packages. Typically a binary package contains all the executables and other files that need to be installed, and has its own method of installing them--so it does not need to run the normal installation commands. But installing the binary package does need to execute the pre-installation and post-installation commands. Programs to build binary packages work by extracting the pre-installation and post-installation commands. Here is one way of extracting the pre-installation commands (the '-s' option to 'make' is needed to silence messages about entering subdirectories): make -s -n install -o all \ PRE_INSTALL=pre-install \ POST_INSTALL=post-install \ NORMAL_INSTALL=normal-install \ | gawk -f pre-install.awk where the file 'pre-install.awk' could contain this: $0 ~ /^(normal-install|post-install)[ \t]*$/ {on = 0} on {print $0} $0 ~ /^pre-install[ \t]*$/ {on = 1}  File: make.info, Node: Quick Reference, Next: Error Messages, Prev: Makefile Conventions, Up: Top Appendix A Quick Reference ************************** This appendix summarizes the directives, text manipulation functions, and special variables which GNU 'make' understands. *Note Special Targets::, *note Catalogue of Built-In Rules: Catalogue of Rules, and *note Summary of Options: Options Summary, for other summaries. Here is a summary of the directives GNU 'make' recognizes: 'define VARIABLE' 'define VARIABLE =' 'define VARIABLE :=' 'define VARIABLE ::=' 'define VARIABLE +=' 'define VARIABLE ?=' 'endef' Define multi-line variables. *Note Multi-Line::. 'undefine VARIABLE' Undefining variables. *Note Undefine Directive::. 'ifdef VARIABLE' 'ifndef VARIABLE' 'ifeq (A,B)' 'ifeq "A" "B"' 'ifeq 'A' 'B'' 'ifneq (A,B)' 'ifneq "A" "B"' 'ifneq 'A' 'B'' 'else' 'endif' Conditionally evaluate part of the makefile. *Note Conditionals::. 'include FILE' '-include FILE' 'sinclude FILE' Include another makefile. *Note Including Other Makefiles: Include. 'override VARIABLE-ASSIGNMENT' Define a variable, overriding any previous definition, even one from the command line. *Note The 'override' Directive: Override Directive. 'export' Tell 'make' to export all variables to child processes by default. *Note Communicating Variables to a Sub-'make': Variables/Recursion. 'export VARIABLE' 'export VARIABLE-ASSIGNMENT' 'unexport VARIABLE' Tell 'make' whether or not to export a particular variable to child processes. *Note Communicating Variables to a Sub-'make': Variables/Recursion. 'private VARIABLE-ASSIGNMENT' Do not allow this variable assignment to be inherited by prerequisites. *Note Suppressing Inheritance::. 'vpath PATTERN PATH' Specify a search path for files matching a '%' pattern. *Note The 'vpath' Directive: Selective Search. 'vpath PATTERN' Remove all search paths previously specified for PATTERN. 'vpath' Remove all search paths previously specified in any 'vpath' directive. Here is a summary of the built-in functions (*note Functions::): '$(subst FROM,TO,TEXT)' Replace FROM with TO in TEXT. *Note Functions for String Substitution and Analysis: Text Functions. '$(patsubst PATTERN,REPLACEMENT,TEXT)' Replace words matching PATTERN with REPLACEMENT in TEXT. *Note Functions for String Substitution and Analysis: Text Functions. '$(strip STRING)' Remove excess whitespace characters from STRING. *Note Functions for String Substitution and Analysis: Text Functions. '$(findstring FIND,TEXT)' Locate FIND in TEXT. *Note Functions for String Substitution and Analysis: Text Functions. '$(filter PATTERN...,TEXT)' Select words in TEXT that match one of the PATTERN words. *Note Functions for String Substitution and Analysis: Text Functions. '$(filter-out PATTERN...,TEXT)' Select words in TEXT that _do not_ match any of the PATTERN words. *Note Functions for String Substitution and Analysis: Text Functions. '$(sort LIST)' Sort the words in LIST lexicographically, removing duplicates. *Note Functions for String Substitution and Analysis: Text Functions. '$(word N,TEXT)' Extract the Nth word (one-origin) of TEXT. *Note Functions for String Substitution and Analysis: Text Functions. '$(words TEXT)' Count the number of words in TEXT. *Note Functions for String Substitution and Analysis: Text Functions. '$(wordlist S,E,TEXT)' Returns the list of words in TEXT from S to E. *Note Functions for String Substitution and Analysis: Text Functions. '$(firstword NAMES...)' Extract the first word of NAMES. *Note Functions for String Substitution and Analysis: Text Functions. '$(lastword NAMES...)' Extract the last word of NAMES. *Note Functions for String Substitution and Analysis: Text Functions. '$(dir NAMES...)' Extract the directory part of each file name. *Note Functions for File Names: File Name Functions. '$(notdir NAMES...)' Extract the non-directory part of each file name. *Note Functions for File Names: File Name Functions. '$(suffix NAMES...)' Extract the suffix (the last '.' and following characters) of each file name. *Note Functions for File Names: File Name Functions. '$(basename NAMES...)' Extract the base name (name without suffix) of each file name. *Note Functions for File Names: File Name Functions. '$(addsuffix SUFFIX,NAMES...)' Append SUFFIX to each word in NAMES. *Note Functions for File Names: File Name Functions. '$(addprefix PREFIX,NAMES...)' Prepend PREFIX to each word in NAMES. *Note Functions for File Names: File Name Functions. '$(join LIST1,LIST2)' Join two parallel lists of words. *Note Functions for File Names: File Name Functions. '$(wildcard PATTERN...)' Find file names matching a shell file name pattern (_not_ a '%' pattern). *Note The Function 'wildcard': Wildcard Function. '$(realpath NAMES...)' For each file name in NAMES, expand to an absolute name that does not contain any '.', '..', nor symlinks. *Note Functions for File Names: File Name Functions. '$(abspath NAMES...)' For each file name in NAMES, expand to an absolute name that does not contain any '.' or '..' components, but preserves symlinks. *Note Functions for File Names: File Name Functions. '$(error TEXT...)' When this function is evaluated, 'make' generates a fatal error with the message TEXT. *Note Functions That Control Make: Make Control Functions. '$(warning TEXT...)' When this function is evaluated, 'make' generates a warning with the message TEXT. *Note Functions That Control Make: Make Control Functions. '$(shell COMMAND)' Execute a shell command and return its output. *Note The 'shell' Function: Shell Function. '$(origin VARIABLE)' Return a string describing how the 'make' variable VARIABLE was defined. *Note The 'origin' Function: Origin Function. '$(flavor VARIABLE)' Return a string describing the flavor of the 'make' variable VARIABLE. *Note The 'flavor' Function: Flavor Function. '$(foreach VAR,WORDS,TEXT)' Evaluate TEXT with VAR bound to each word in WORDS, and concatenate the results. *Note The 'foreach' Function: Foreach Function. '$(if CONDITION,THEN-PART[,ELSE-PART])' Evaluate the condition CONDITION; if it's non-empty substitute the expansion of the THEN-PART otherwise substitute the expansion of the ELSE-PART. *Note Functions for Conditionals: Conditional Functions. '$(or CONDITION1[,CONDITION2[,CONDITION3...]])' Evaluate each condition CONDITIONN one at a time; substitute the first non-empty expansion. If all expansions are empty, substitute the empty string. *Note Functions for Conditionals: Conditional Functions. '$(and CONDITION1[,CONDITION2[,CONDITION3...]])' Evaluate each condition CONDITIONN one at a time; if any expansion results in the empty string substitute the empty string. If all expansions result in a non-empty string, substitute the expansion of the last CONDITION. *Note Functions for Conditionals: Conditional Functions. '$(call VAR,PARAM,...)' Evaluate the variable VAR replacing any references to '$(1)', '$(2)' with the first, second, etc. PARAM values. *Note The 'call' Function: Call Function. '$(eval TEXT)' Evaluate TEXT then read the results as makefile commands. Expands to the empty string. *Note The 'eval' Function: Eval Function. '$(file OP FILENAME,TEXT)' Expand the arguments, then open the file FILENAME using mode OP and write TEXT to that file. *Note The 'file' Function: File Function. '$(value VAR)' Evaluates to the contents of the variable VAR, with no expansion performed on it. *Note The 'value' Function: Value Function. Here is a summary of the automatic variables. *Note Automatic Variables::, for full information. '$@' The file name of the target. '$%' The target member name, when the target is an archive member. '$<' The name of the first prerequisite. '$?' The names of all the prerequisites that are newer than the target, with spaces between them. For prerequisites which are archive members, only the named member is used (*note Archives::). '$^' '$+' The names of all the prerequisites, with spaces between them. For prerequisites which are archive members, only the named member is used (*note Archives::). The value of '$^' omits duplicate prerequisites, while '$+' retains them and preserves their order. '$*' The stem with which an implicit rule matches (*note How Patterns Match: Pattern Match.). '$(@D)' '$(@F)' The directory part and the file-within-directory part of '$@'. '$(*D)' '$(*F)' The directory part and the file-within-directory part of '$*'. '$(%D)' '$(%F)' The directory part and the file-within-directory part of '$%'. '$( tar-`sed -e '/version_string/!d' \ -e 's/[^0-9.]*\([0-9.]*\).*/\1/' \ -e q version.c`.shar.Z .PHONY: dist dist: $(SRCS) $(AUX) echo tar-`sed \ -e '/version_string/!d' \ -e 's/[^0-9.]*\([0-9.]*\).*/\1/' \ -e q version.c` > .fname -rm -rf `cat .fname` mkdir `cat .fname` ln $(SRCS) $(AUX) `cat .fname` tar chZf `cat .fname`.tar.Z `cat .fname` -rm -rf `cat .fname` .fname tar.zoo: $(SRCS) $(AUX) -rm -rf tmp.dir -mkdir tmp.dir -rm tar.zoo for X in $(SRCS) $(AUX) ; do \ echo $$X ; \ sed 's/$$/^M/' $$X \ > tmp.dir/$$X ; done cd tmp.dir ; zoo aM ../tar.zoo * -rm -rf tmp.dir  File: make.info, Node: GNU Free Documentation License, Next: Concept Index, Prev: Complex Makefile, Up: Top Appendix D GNU Free Documentation License ***************************************** Version 1.3, 3 November 2008 Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. 0. PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. The "publisher" means any person or entity that distributes copies of the Document to the public. A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. 3. COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. 4. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. C. State on the Title page the name of the publisher of the Modified Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. H. Include an unaltered copy of this License. I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version. N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section. O. Preserve any Warranty Disclaimers. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. 5. COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements." 6. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. 7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. 8. TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License. However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it. 10. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See . Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document. 11. RELICENSING "Massive Multiauthor Collaboration Site" (or "MMC Site") means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A "Massive Multiauthor Collaboration" (or "MMC") contained in the site means any set of copyrightable works thus published on the MMC site. "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization. "Incorporate" means to publish or republish a Document, in whole or in part, as part of another Document. An MMC is "eligible for relicensing" if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008. The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing. ADDENDUM: How to use this License for your documents ==================================================== To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright (C) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this: with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.  File: make.info, Node: Concept Index, Next: Name Index, Prev: GNU Free Documentation License, Up: Top Index of Concepts ***************** [index] * Menu: * !=: Setting. (line 6) * !=, expansion: Reading Makefiles. (line 34) * # (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) * +, and recipe execution: Instead of Execution. (line 67) * +, and recipes: MAKE Variable. (line 18) * +=: Appending. (line 6) * +=, expansion: Reading Makefiles. (line 34) * +=, expansion <1>: Reading Makefiles. (line 34) * ,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. (line 41) * --assume-new <1>: Options Summary. (line 285) * --assume-new, and recursion: Options/Recursion. (line 22) * --assume-old: Avoiding Compilation. (line 6) * --assume-old <1>: Options Summary. (line 164) * --assume-old, and recursion: Options/Recursion. (line 22) * --check-symlink-times: Options Summary. (line 145) * --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 155) * --environment-overrides: Options Summary. (line 85) * --eval: Options Summary. (line 90) * --file: Makefile Names. (line 23) * --file <1>: Makefile Arguments. (line 6) * --file <2>: Options Summary. (line 98) * --file, and recursion: Options/Recursion. (line 22) * --help: Options Summary. (line 104) * --ignore-errors: Errors. (line 30) * --ignore-errors <1>: Options Summary. (line 109) * --include-dir: Include. (line 53) * --include-dir <1>: Options Summary. (line 114) * --jobs: Parallel. (line 6) * --jobs <1>: Options Summary. (line 121) * --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 154) * --keep-going: Errors. (line 46) * --keep-going <1>: Testing. (line 16) * --keep-going <2>: Options Summary. (line 130) * --load-average: Parallel. (line 35) * --load-average <1>: Options Summary. (line 137) * --makefile: Makefile Names. (line 23) * --makefile <1>: Makefile Arguments. (line 6) * --makefile <2>: Options Summary. (line 99) * --max-load: Parallel. (line 35) * --max-load <1>: Options Summary. (line 138) * --new-file: Instead of Execution. (line 41) * --new-file <1>: Options Summary. (line 284) * --new-file, and recursion: Options/Recursion. (line 22) * --no-builtin-rules: Options Summary. (line 210) * --no-builtin-variables: Options Summary. (line 223) * --no-keep-going: Options Summary. (line 239) * --no-print-directory: -w Option. (line 20) * --no-print-directory <1>: Options Summary. (line 276) * --old-file: Avoiding Compilation. (line 6) * --old-file <1>: Options Summary. (line 163) * --old-file, and recursion: Options/Recursion. (line 22) * --output-sync: Parallel Output. (line 11) * --output-sync <1>: Options Summary. (line 172) * --print-data-base: Options Summary. (line 188) * --print-directory: Options Summary. (line 268) * --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 202) * --quiet: Echoing. (line 24) * --quiet <1>: Options Summary. (line 233) * --recon: Echoing. (line 18) * --recon <1>: Instead of Execution. (line 14) * --recon <2>: Options Summary. (line 156) * --silent: Echoing. (line 24) * --silent <1>: Options Summary. (line 232) * --stop: Options Summary. (line 240) * --touch: Instead of Execution. (line 24) * --touch <1>: Options Summary. (line 248) * --touch, and recursion: MAKE Variable. (line 35) * --trace: Options Summary. (line 255) * --version: Options Summary. (line 263) * --warn-undefined-variables: Options Summary. (line 293) * --what-if: Instead of Execution. (line 41) * --what-if <1>: Options Summary. (line 283) * -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: Options Summary. (line 89) * -e (shell flag): Automatic Prerequisites. (line 65) * -f: Makefile Names. (line 23) * -f <1>: Makefile Arguments. (line 6) * -f <2>: Options Summary. (line 97) * -f, and recursion: Options/Recursion. (line 22) * -h: Options Summary. (line 103) * -I: Include. (line 53) * -i: Errors. (line 30) * -i <1>: Options Summary. (line 108) * -I <1>: Options Summary. (line 113) * -j: Parallel. (line 6) * -j <1>: Options Summary. (line 120) * -j, and archive update: Archive Pitfalls. (line 6) * -j, and recursion: Options/Recursion. (line 25) * -k: Errors. (line 46) * -k <1>: Testing. (line 16) * -k <2>: Options Summary. (line 129) * -l: Options Summary. (line 136) * -L: Options Summary. (line 144) * -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. (line 67) * -n: Echoing. (line 18) * -n <1>: Instead of Execution. (line 14) * -n <2>: Options Summary. (line 153) * -O: Parallel Output. (line 11) * -o: Avoiding Compilation. (line 6) * -o <1>: Options Summary. (line 162) * -O <1>: Options Summary. (line 171) * -o, and recursion: Options/Recursion. (line 22) * -p: Options Summary. (line 187) * -q: Instead of Execution. (line 32) * -q <1>: Options Summary. (line 201) * -r: Options Summary. (line 209) * -R: Options Summary. (line 222) * -s: Echoing. (line 24) * -s <1>: Options Summary. (line 231) * -S: Options Summary. (line 238) * -t: Instead of Execution. (line 24) * -t <1>: Options Summary. (line 247) * -t, and recursion: MAKE Variable. (line 35) * -v: Options Summary. (line 262) * -W: Instead of Execution. (line 41) * -w: Options Summary. (line 267) * -W <1>: Options Summary. (line 282) * -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. (line 80) * .def: Catalogue of Rules. (line 71) * .dvi: Catalogue of Rules. (line 149) * .f: Catalogue of Rules. (line 49) * .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) * .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) * .p: Catalogue of Rules. (line 45) * .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) * .sym: Catalogue of Rules. (line 71) * .tex: Catalogue of Rules. (line 149) * .texi: Catalogue of Rules. (line 156) * .texinfo: Catalogue of Rules. (line 156) * .txinfo: Catalogue of Rules. (line 156) * .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) * ::=: Flavors. (line 56) * ::= <1>: Setting. (line 6) * :=: Flavors. (line 56) * := <1>: Setting. (line 6) * =: Flavors. (line 10) * = <1>: Setting. (line 6) * =, expansion: Reading Makefiles. (line 34) * ? (wildcard character): Wildcards. (line 6) * ?=: Flavors. (line 135) * ?= <1>: Setting. (line 6) * ?=, expansion: Reading Makefiles. (line 34) * @ (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) * abspath: File Name Functions. (line 120) * algorithm for directory search: Search Algorithm. (line 6) * 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 parallel execution: Archive Pitfalls. (line 6) * archive, suffix rule for: Archive Suffix Rules. (line 6) * Arg list too long: Options/Recursion. (line 58) * arguments of functions: Syntax of Functions. (line 6) * as: Catalogue of Rules. (line 76) * as <1>: Implicit Variables. (line 43) * assembly, rule to compile: Catalogue of Rules. (line 76) * automatic generation of prerequisites: Include. (line 51) * automatic generation of prerequisites <1>: Automatic Prerequisites. (line 6) * 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. (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) * binary packages: Install Command Categories. (line 80) * broken pipe: Parallel Input. (line 11) * bugs, reporting: Bugs. (line 6) * built-in special targets: Special Targets. (line 6) * C++, rule to compile: Catalogue of Rules. (line 39) * C, rule to compile: Catalogue of Rules. (line 35) * 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) * 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) * cleaning up: Cleanup. (line 6) * 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. (line 6) * command expansion: Shell Function. (line 6) * command line variable definitions, and recursion: Options/Recursion. (line 17) * command line variables: Overriding. (line 6) * commands, sequences of: Canned Recipes. (line 6) * comments, in makefile: Makefile Contents. (line 41) * comments, in recipes: Recipe Syntax. (line 29) * compatibility: Features. (line 6) * compatibility in exporting: Variables/Recursion. (line 104) * compilation, testing: Testing. (line 6) * computed variable name: Computed Names. (line 6) * conditional expansion: Conditional Functions. (line 6) * conditional variable assignment: Flavors. (line 135) * conditionals: Conditionals. (line 6) * continuation lines: Simple Makefile. (line 41) * controlling make: Make Control Functions. (line 6) * conventions for makefiles: Makefile Conventions. (line 6) * convert guile types: Guile Types. (line 6) * ctangle: Catalogue of Rules. (line 149) * 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 188) * deducing recipes (implicit rules): make Deduces. (line 6) * default directories for included makefiles: Include. (line 53) * default goal: How Make Works. (line 11) * default goal <1>: Rules. (line 11) * default makefile name: Makefile Names. (line 6) * default rules, last-resort: Last Resort. (line 6) * define, expansion: Reading Makefiles. (line 34) * defining variables verbatim: Multi-Line. (line 6) * deletion of target files: Errors. (line 63) * deletion of target files <1>: Interrupts. (line 6) * directive: Makefile Contents. (line 28) * directories, creating installation: Directory Variables. (line 20) * 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. (line 6) * directory search (VPATH), and link libraries: Libraries/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) * 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 61) * 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) * error, stopping on: Make Control Functions. (line 11) * errors (in recipes): Errors. (line 6) * errors with wildcards: Wildcard Pitfall. (line 6) * evaluating makefile syntax: Eval Function. (line 6) * example of loaded objects: Loaded Object Example. (line 6) * example using Guile: Guile Example. (line 6) * execution, in parallel: Parallel. (line 6) * execution, instead of: Instead of Execution. (line 6) * execution, of recipes: Execution. (line 6) * exit status (errors): Errors. (line 6) * exit status of make: Running. (line 18) * expansion, secondary: Secondary Expansion. (line 6) * explicit rule, definition of: Makefile Contents. (line 10) * explicit rule, expansion: Reading Makefiles. (line 93) * explicit rules, secondary expansion of: Secondary Expansion. (line 104) * exporting variables: Variables/Recursion. (line 6) * extensions, Guile: Guile Integration. (line 6) * extensions, load directive: load Directive. (line 6) * extensions, loading: Loading Objects. (line 6) * f77: Catalogue of Rules. (line 49) * 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, missing: Missing. (line 6) * file name functions: File Name Functions. (line 6) * file name of makefile: Makefile Names. (line 6) * file name of makefile, how to specify: Makefile Names. (line 31) * file name prefix, adding: File Name Functions. (line 78) * file name suffix: File Name Functions. (line 42) * file name suffix, adding: File Name Functions. (line 67) * file name with wildcards: Wildcards. (line 6) * file name, abspath of: File Name Functions. (line 120) * file name, basename of: File Name Functions. (line 56) * 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) * files, assuming old: Avoiding Compilation. (line 6) * files, avoiding recompilation of: Avoiding Compilation. (line 6) * files, intermediate: Chained Rules. (line 16) * filtering out words: Text Functions. (line 133) * filtering words: Text Functions. (line 115) * finding strings: Text Functions. (line 104) * flags: Options Summary. (line 6) * 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 targets: Force Targets. (line 6) * Fortran, rule to compile: Catalogue of Rules. (line 49) * functions: Functions. (line 6) * functions, for controlling make: Make Control Functions. (line 6) * functions, for file names: File Name Functions. (line 6) * functions, for text: Text Functions. (line 6) * functions, syntax of: Syntax of Functions. (line 6) * functions, user defined: Call Function. (line 6) * g++: Catalogue of Rules. (line 39) * g++ <1>: Implicit Variables. (line 49) * gcc: Catalogue of Rules. (line 35) * generating prerequisites automatically: Include. (line 51) * generating prerequisites automatically <1>: Automatic Prerequisites. (line 6) * get: Catalogue of Rules. (line 172) * get <1>: Implicit Variables. (line 69) * globbing (wildcards): Wildcards. (line 6) * goal: How Make Works. (line 11) * goal, default: How Make Works. (line 11) * goal, default <1>: Rules. (line 11) * goal, how to specify: Goals. (line 6) * grouped targets: Multiple Targets. (line 61) * Guile: Guile Function. (line 6) * Guile <1>: Guile Integration. (line 6) * Guile example: Guile Example. (line 6) * guile, conversion of types: Guile Types. (line 6) * home directory: Wildcards. (line 11) * IEEE Standard 1003.2: Overview. (line 13) * ifdef, expansion: Reading Makefiles. (line 83) * ifeq, expansion: Reading Makefiles. (line 83) * ifndef, expansion: Reading Makefiles. (line 83) * ifneq, expansion: Reading Makefiles. (line 83) * 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, definition of: Makefile Contents. (line 16) * implicit rule, expansion: Reading Makefiles. (line 93) * implicit rule, how to use: Using Implicit. (line 6) * implicit rule, introduction to: make Deduces. (line 6) * implicit rule, predefined: Catalogue of Rules. (line 6) * implicit rule, search algorithm: Implicit Rule Search. (line 6) * 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 other makefiles: Include. (line 6) * incompatibilities: Missing. (line 6) * independent targets: Multiple Targets. (line 14) * 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) * installation directories, creating: Directory Variables. (line 20) * installations, staged: DESTDIR. (line 6) * interface for loaded objects: Loaded Object API. (line 6) * intermediate files: Chained Rules. (line 16) * intermediate files, preserving: Chained Rules. (line 46) * intermediate targets, explicit: Special Targets. (line 48) * 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) * ld: Catalogue of Rules. (line 83) * lex: Catalogue of Rules. (line 121) * lex <1>: Implicit Variables. (line 73) * Lex, rule to run: Catalogue of Rules. (line 121) * libraries for linking, directory search: Libraries/Search. (line 6) * library archive, suffix rule for: Archive Suffix Rules. (line 6) * limiting jobs based on load: Parallel. (line 35) * link libraries, and directory search: Libraries/Search. (line 6) * link libraries, patterns matching: Libraries/Search. (line 6) * 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) * list of all prerequisites: Automatic Variables. (line 62) * list of changed prerequisites: Automatic Variables. (line 52) * load average: Parallel. (line 35) * load directive: load Directive. (line 6) * loaded object API: Loaded Object API. (line 6) * loaded object example: Loaded Object Example. (line 6) * loaded object licensing: Loaded Object API. (line 31) * loaded objects: Loading Objects. (line 6) * loaded objects, remaking of: Remaking Loaded Objects. (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) * m2c: Catalogue of Rules. (line 71) * m2c <1>: Implicit Variables. (line 60) * macro: Using Variables. (line 10) * 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) * makefile name: Makefile Names. (line 6) * 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, conventions for: Makefile Conventions. (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. (line 6) * makefile, reading: 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 special variables: Special Variables. (line 6) * makefiles, parsing: Parsing Makefiles. (line 6) * makeinfo: Catalogue of Rules. (line 156) * makeinfo <1>: Implicit Variables. (line 84) * match-anything rule: Match-Anything Rules. (line 6) * match-anything rule, used to override: Overriding Makefiles. (line 12) * missing features: Missing. (line 6) * 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) * 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 targets: Multiple Targets. (line 6) * multiple targets, in pattern rule: Pattern Intro. (line 44) * name of makefile: Makefile Names. (line 6) * name of makefile, how to specify: Makefile Names. (line 31) * nested variable reference: Computed Names. (line 6) * newline, quoting, in makefile: Simple Makefile. (line 41) * newline, quoting, in recipes: Splitting Recipe Lines. (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) * objects, loaded: Loading Objects. (line 6) * 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) * options, setting from environment: Options/Recursion. (line 81) * options, setting in makefiles: Options/Recursion. (line 81) * order of pattern rules: Pattern Match. (line 30) * order-only prerequisites: Prerequisite Types. (line 6) * origin of variable: Origin Function. (line 6) * output during parallel execution: Parallel Output. (line 6) * output during parallel execution <1>: Options Summary. (line 172) * overriding makefiles: Overriding Makefiles. (line 6) * overriding variables with arguments: Overriding. (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 172) * parallel execution, overriding: Special Targets. (line 141) * parallel output to terminal: Terminal Output. (line 6) * parsing makefiles: Parsing Makefiles. (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) * pattern rule, expansion: Reading Makefiles. (line 93) * pattern rules, order of: Pattern Match. (line 30) * pattern rules, static (not implicit): Static Pattern. (line 6) * pattern rules, static, syntax of: Static Usage. (line 6) * pattern-specific variables: Pattern-specific. (line 6) * pc: Catalogue of Rules. (line 45) * pc <1>: Implicit Variables. (line 63) * phony targets: Phony Targets. (line 6) * phony targets and recipe execution: Instead of Execution. (line 75) * pitfalls of wildcards: Wildcard Pitfall. (line 6) * plugin_is_GPL_compatible: Loaded Object API. (line 31) * portability: Features. (line 6) * POSIX: Overview. (line 13) * POSIX <1>: Options/Recursion. (line 61) * POSIX-conforming mode, setting: Special Targets. (line 156) * post-installation commands: Install Command Categories. (line 6) * pre-installation commands: Install Command Categories. (line 6) * precious targets: Special Targets. (line 32) * predefined rules and variables, printing: Options Summary. (line 188) * prefix, adding: File Name Functions. (line 78) * prerequisite: Rules. (line 6) * prerequisite pattern, implicit: Pattern Intro. (line 22) * prerequisite pattern, static (not implicit): Static Usage. (line 30) * prerequisite types: Prerequisite Types. (line 6) * prerequisite, expansion: Reading Makefiles. (line 93) * prerequisites: Rule Syntax. (line 47) * prerequisites, and automatic variables: Automatic Variables. (line 17) * prerequisites, automatic generation: Include. (line 51) * prerequisites, automatic generation <1>: Automatic Prerequisites. (line 6) * prerequisites, introduction to: Rule Introduction. (line 8) * prerequisites, list of all: Automatic Variables. (line 62) * prerequisites, list of changed: Automatic Variables. (line 52) * prerequisites, normal: Prerequisite Types. (line 6) * 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) * printing directories: -w Option. (line 6) * printing messages: Make Control Functions. (line 43) * printing of recipes: Echoing. (line 6) * printing user warnings: Make Control Functions. (line 35) * problems and bugs, reporting: Bugs. (line 6) * problems with wildcards: Wildcard Pitfall. (line 6) * 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 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) * realpath: File Name Functions. (line 113) * recipe: Simple Makefile. (line 74) * recipe execution, single invocation: Special Targets. (line 149) * recipe lines, single shell: One Shell. (line 6) * recipe syntax: Recipe Syntax. (line 6) * recipe, execution: Execution. (line 6) * recipes: Rule Syntax. (line 25) * 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. (line 6) * recipes, canned: Canned Recipes. (line 6) * recipes, comments in: Recipe Syntax. (line 29) * recipes, echoing: Echoing. (line 6) * recipes, empty: Empty Recipes. (line 6) * recipes, errors in: Errors. (line 6) * recipes, execution in parallel: Parallel. (line 6) * recipes, how to write: Recipes. (line 6) * recipes, instead of executing: Instead of Execution. (line 6) * recipes, introduction to: Rule Introduction. (line 8) * recipes, quoting newlines in: Splitting Recipe Lines. (line 6) * recipes, splitting: Splitting Recipe Lines. (line 6) * recipes, using variables in: Variables in Recipes. (line 6) * recompilation: Introduction. (line 22) * recompilation, avoiding: Avoiding Compilation. (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 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 options: Options/Recursion. (line 6) * recursion, and printing directories: -w Option. (line 6) * recursion, and variables: Variables/Recursion. (line 6) * recursion, level of: Variables/Recursion. (line 114) * recursive variable expansion: Using Variables. (line 6) * recursive variable expansion <1>: Flavors. (line 6) * recursively expanded variables: Flavors. (line 6) * reference to variables: Reference. (line 6) * reference to variables <1>: Advanced. (line 6) * relinking: How Make Works. (line 46) * remaking loaded objects: Remaking Loaded Objects. (line 6) * remaking makefiles: Remaking Makefiles. (line 6) * removal of target files: Errors. (line 63) * removal of target files <1>: Interrupts. (line 6) * removing duplicate words: Text Functions. (line 155) * removing targets on failure: Special Targets. (line 71) * removing whitespace from split lines: Splitting Lines. (line 40) * 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) * 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, 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, chains of: Chained Rules. (line 6) * rule, implicit, definition of: Makefile Contents. (line 16) * rule, implicit, how to use: Using Implicit. (line 6) * rule, implicit, introduction to: make Deduces. (line 6) * rule, implicit, predefined: Catalogue of Rules. (line 6) * rule, introduction to: Rule Introduction. (line 6) * rule, multiple for one target: Multiple Rules. (line 6) * rule, no recipe or prerequisites: Force Targets. (line 6) * rule, pattern: Pattern Intro. (line 6) * rule, static pattern: Static Pattern. (line 6) * rule, static pattern versus implicit: Static versus Implicit. (line 6) * rule, with multiple targets: Multiple Targets. (line 6) * 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. (line 6) * 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) * secondary expansion and explicit rules: Secondary Expansion. (line 104) * secondary expansion and implicit rules: Secondary Expansion. (line 144) * secondary expansion and static pattern rules: Secondary Expansion. (line 136) * secondary files: Chained Rules. (line 46) * secondary targets: Special Targets. (line 54) * sed (shell command): Automatic Prerequisites. (line 72) * selecting a word: Text Functions. (line 159) * selecting word lists: Text Functions. (line 168) * sequences of commands: Canned Recipes. (line 6) * setting options from environment: Options/Recursion. (line 81) * setting options in makefiles: Options/Recursion. (line 81) * 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) * shell command, function for: Shell Function. (line 6) * 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, 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) * signal: Interrupts. (line 6) * silent operation: Echoing. (line 6) * simple makefile: Simple Makefile. (line 6) * simple variable expansion: Using Variables. (line 6) * simplifying with variables: Variables Simplify. (line 6) * simply expanded variables: Flavors. (line 56) * sorting words: Text Functions. (line 147) * spaces, in variable values: Flavors. (line 107) * spaces, stripping: Text Functions. (line 80) * special targets: Special Targets. (line 6) * special variables: Special Variables. (line 6) * specifying makefile name: Makefile Names. (line 31) * splitting long lines: Splitting Lines. (line 6) * splitting recipes: Splitting Recipe Lines. (line 6) * staged installs: DESTDIR. (line 6) * standard input: Parallel Input. (line 6) * standards conformance: Overview. (line 13) * standards for makefiles: Makefile Conventions. (line 6) * static pattern rule: Static Pattern. (line 6) * static pattern rule, syntax of: Static Usage. (line 6) * static pattern rule, versus implicit: Static versus Implicit. (line 6) * static pattern rules, secondary expansion of: Secondary Expansion. (line 136) * stem: Static Usage. (line 17) * stem <1>: Pattern Match. (line 6) * stem, shortest: Pattern Match. (line 38) * stem, variable for: Automatic Variables. (line 78) * stopping make: Make Control Functions. (line 11) * strings, searching for: Text Functions. (line 104) * stripping whitespace: Text Functions. (line 80) * 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) * suffix rule, for archive: Archive Suffix Rules. (line 6) * suffix, adding: File Name Functions. (line 67) * suffix, function to find: File Name Functions. (line 42) * suffix, substituting in variables: Substitution Refs. (line 6) * suppressing inheritance: Suppressing Inheritance. (line 6) * switches: Options Summary. (line 6) * symbol directories, updating archive: Archive Symbols. (line 6) * syntax of recipe: Recipe Syntax. (line 6) * 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) * tangle: Catalogue of Rules. (line 149) * tangle <1>: Implicit Variables. (line 100) * 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) * target, deleting on error: Errors. (line 63) * target, deleting on interrupt: Interrupts. (line 6) * target, expansion: Reading Makefiles. (line 93) * target, multiple in pattern rule: Pattern Intro. (line 44) * target, multiple rules for one: Multiple Rules. (line 6) * target, touching: Instead of Execution. (line 24) * target-specific variables: Target-specific. (line 6) * targets: Rule Syntax. (line 18) * targets without a file: Phony Targets. (line 6) * targets, built-in special: Special Targets. (line 6) * targets, empty: Empty Targets. (line 6) * targets, force: Force Targets. (line 6) * targets, grouped: Multiple Targets. (line 61) * targets, independent: Multiple Targets. (line 14) * targets, introduction to: Rule Introduction. (line 8) * targets, multiple: Multiple Targets. (line 6) * targets, phony: Phony Targets. (line 6) * terminal rule: Match-Anything Rules. (line 6) * 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) * TeX, rule to run: Catalogue of Rules. (line 149) * 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) * 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) * types of prerequisites: Prerequisite Types. (line 6) * types, conversion of: Guile Types. (line 6) * undefined variables, warning message: Options Summary. (line 293) * undefining variable: Undefine Directive. (line 6) * updating archive symbol directories: Archive Symbols. (line 6) * updating loaded objects: Remaking Loaded Objects. (line 6) * updating makefiles: Remaking Makefiles. (line 6) * user defined functions: Call Function. (line 6) * value: Using Variables. (line 6) * value, how a variable gets it: Values. (line 6) * variable: Using Variables. (line 6) * variable definition: Makefile Contents. (line 22) * variable references in recipes: Variables in Recipes. (line 6) * variables: Variables Simplify. (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) * variables, command line: Overriding. (line 6) * variables, command line, and recursion: Options/Recursion. (line 17) * variables, computed names: Computed Names. (line 6) * variables, conditional assignment: Flavors. (line 135) * variables, defining verbatim: Multi-Line. (line 6) * variables, environment: Variables/Recursion. (line 6) * variables, environment <1>: Environment. (line 6) * variables, exporting: Variables/Recursion. (line 6) * variables, flavor of: Flavor Function. (line 6) * variables, flavors: Flavors. (line 6) * variables, how they get their values: Values. (line 6) * variables, how to reference: Reference. (line 6) * variables, loops in expansion: Flavors. (line 44) * variables, modified reference: Substitution Refs. (line 6) * variables, multi-line: Multi-Line. (line 6) * variables, nested references: Computed Names. (line 6) * variables, origin of: Origin Function. (line 6) * variables, overriding: Override Directive. (line 6) * variables, overriding with arguments: Overriding. (line 6) * variables, pattern-specific: Pattern-specific. (line 6) * variables, recursively expanded: Flavors. (line 6) * variables, setting: Setting. (line 6) * variables, simply expanded: Flavors. (line 56) * variables, spaces in values: Flavors. (line 107) * variables, substituting suffix in: Substitution Refs. (line 6) * variables, substitution reference: Substitution Refs. (line 6) * variables, target-specific: Target-specific. (line 6) * variables, unexpanded value: Value Function. (line 6) * variables, warning for undefined: Options Summary. (line 293) * 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) * warnings, printing: Make Control Functions. (line 35) * weave: Catalogue of Rules. (line 149) * weave <1>: Implicit Variables. (line 94) * Web, rule to run: Catalogue of Rules. (line 149) * what if: Instead of Execution. (line 41) * whitespace, avoiding on line split: Splitting Lines. (line 40) * whitespace, in variable values: Flavors. (line 107) * whitespace, stripping: Text Functions. (line 80) * wildcard: Wildcards. (line 6) * 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) * wildcards and MS-DOS/MS-Windows backslashes: Wildcard Pitfall. (line 31) * Windows, choosing a shell in: Choosing the Shell. (line 38) * word, selecting a: Text Functions. (line 159) * words, extracting first: Text Functions. (line 185) * words, extracting last: Text Functions. (line 198) * words, filtering: Text Functions. (line 115) * words, filtering out: Text Functions. (line 133) * words, finding number: Text Functions. (line 180) * words, iterating over: Foreach Function. (line 6) * words, joining lists: File Name Functions. (line 89) * words, removing duplicates: Text Functions. (line 155) * words, selecting lists of: Text Functions. (line 168) * writing recipes: Recipes. (line 6) * writing rules: Rules. (line 6) * writing to a file: File Function. (line 6) * yacc: Catalogue of Rules. (line 117) * yacc <1>: Implicit Variables. (line 77) * yacc <2>: Canned Recipes. (line 18) * Yacc, rule to run: Catalogue of Rules. (line 117)  File: make.info, Node: Name Index, Prev: Concept Index, Up: Top Index of Functions, Variables, & Directives ******************************************* [index] * Menu: * $%: Automatic Variables. (line 37) * $(%D): Automatic Variables. (line 129) * $(%F): Automatic Variables. (line 130) * $(*D): Automatic Variables. (line 124) * $(*F): Automatic Variables. (line 125) * $(+D): Automatic Variables. (line 147) * $(+F): Automatic Variables. (line 148) * $(: Last Resort. (line 23) * .DEFAULT, and empty recipes: Empty Recipes. (line 16) * .DEFAULT_GOAL (define default goal): Special Variables. (line 34) * .DELETE_ON_ERROR: Special Targets. (line 70) * .DELETE_ON_ERROR <1>: Errors. (line 63) * .EXPORT_ALL_VARIABLES: Special Targets. (line 134) * .EXPORT_ALL_VARIABLES <1>: Variables/Recursion. (line 99) * .EXTRA_PREREQS (prerequisites not added to automatic variables): Special Variables. (line 178) * .FEATURES (list of supported features): Special Variables. (line 121) * .IGNORE: Special Targets. (line 77) * .IGNORE <1>: Errors. (line 30) * .INCLUDE_DIRS (list of include directories): Special Variables. (line 174) * .INTERMEDIATE: Special Targets. (line 47) * .LIBPATTERNS: Libraries/Search. (line 6) * .LOADED: load Directive. (line 62) * .LOW_RESOLUTION_TIME: Special Targets. (line 90) * .NOTPARALLEL: Special Targets. (line 140) * .ONESHELL: Special Targets. (line 148) * .ONESHELL <1>: One Shell. (line 6) * .PHONY: Phony Targets. (line 22) * .PHONY <1>: Special Targets. (line 8) * .POSIX: Special Targets. (line 155) * .POSIX <1>: Options/Recursion. (line 61) * .PRECIOUS: Special Targets. (line 31) * .PRECIOUS <1>: Interrupts. (line 22) * .RECIPEPREFIX (change the recipe prefix character): Special Variables. (line 99) * .SECONDARY: Special Targets. (line 53) * .SECONDEXPANSION: Secondary Expansion. (line 6) * .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) * .SUFFIXES <1>: Suffix Rules. (line 61) * .VARIABLES (list of variables): Special Variables. (line 112) * /usr/gnu/include: Include. (line 53) * /usr/include: Include. (line 53) * /usr/local/include: Include. (line 53) * < (automatic variable): Automatic Variables. (line 43) * : Conditional Functions. (line 12) * ifdef: Conditional Syntax. (line 6) * ifeq: Conditional Syntax. (line 6) * ifndef: Conditional Syntax. (line 6) * ifneq: Conditional Syntax. (line 6) * include: Include. (line 6) * info: Make Control Functions. (line 43) * join: File Name Functions. (line 89) * lastword: Text Functions. (line 198) * LDFLAGS: Implicit Variables. (line 139) * LDLIBS: Implicit Variables. (line 144) * LEX: Implicit Variables. (line 72) * LFLAGS: Implicit Variables. (line 150) * libexecdir: Directory Variables. (line 70) * LINT: Implicit Variables. (line 80) * LINTFLAGS: Implicit Variables. (line 162) * load: load Directive. (line 9) * LOADLIBES: Implicit Variables. (line 144) * M2C: Implicit Variables. (line 60) * MAKE: MAKE Variable. (line 6) * MAKE <1>: Flavors. (line 88) * MAKECMDGOALS: Goals. (line 30) * Makefile: Makefile Names. (line 7) * makefile: Makefile Names. (line 7) * MAKEFILES: MAKEFILES Variable. (line 6) * MAKEFILES <1>: Variables/Recursion. (line 126) * MAKEFILE_LIST (list of parsed makefiles): Special Variables. (line 8) * MAKEFLAGS: Options/Recursion. (line 6) * MAKEINFO: Implicit Variables. (line 83) * MAKELEVEL: Variables/Recursion. (line 114) * MAKELEVEL <1>: Flavors. (line 88) * MAKEOVERRIDES: Options/Recursion. (line 50) * 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. (line 73) * MAKE_TERMERR (whether stderr is a terminal): Special Variables. (line 80) * MAKE_TERMOUT (whether stdout is a terminal): Special Variables. (line 80) * MAKE_VERSION: Quick Reference. (line 343) * MFLAGS: Options/Recursion. (line 66) * notdir: File Name Functions. (line 26) * or: Conditional Functions. (line 37) * origin: Origin Function. (line 6) * OUTPUT_OPTION: Catalogue of Rules. (line 200) * override: Override Directive. (line 6) * patsubst: Substitution Refs. (line 28) * patsubst <1>: Text Functions. (line 18) * PC: Implicit Variables. (line 63) * PFLAGS: Implicit Variables. (line 156) * prefix: Directory Variables. (line 29) * private: Suppressing Inheritance. (line 6) * realpath: File Name Functions. (line 113) * RFLAGS: Implicit Variables. (line 159) * RM: Implicit Variables. (line 106) * sbindir: Directory Variables. (line 63) * SHELL: Choosing the Shell. (line 6) * SHELL <1>: Choosing the Shell. (line 88) * shell: Shell Function. (line 6) * SHELL (recipe execution): Execution. (line 6) * sort: Text Functions. (line 147) * strip: Text Functions. (line 80) * subst: Multiple Targets. (line 39) * subst <1>: Text Functions. (line 9) * suffix: File Name Functions. (line 42) * SUFFIXES: Suffix Rules. (line 81) * TANGLE: Implicit Variables. (line 100) * TEX: Implicit Variables. (line 87) * TEXI2DVI: Implicit Variables. (line 90) * undefine: Undefine Directive. (line 6) * unexport: Variables/Recursion. (line 45) * value: Value Function. (line 6) * VPATH: Directory Search. (line 6) * VPATH <1>: General Search. (line 6) * vpath: Directory Search. (line 6) * vpath <1>: Selective Search. (line 6) * warning: Make Control Functions. (line 35) * WEAVE: Implicit Variables. (line 94) * wildcard: Wildcard Function. (line 6) * wildcard <1>: File Name Functions. (line 106) * word: Text Functions. (line 159) * wordlist: Text Functions. (line 168) * words: Text Functions. (line 180) * YACC: Implicit Variables. (line 76) * YFLAGS: Implicit Variables. (line 153) make-4.3/doc/make.10000644000175000017500000002543113603564437011002 00000000000000.TH MAKE 1 "28 February 2016" "GNU" "User Commands" .SH NAME make \- GNU make utility to maintain groups of programs .SH SYNOPSIS .B make [\fIOPTION\fR]... [\fITARGET\fR]... .SH DESCRIPTION .LP The .I make utility will determine automatically which pieces of a large program need to be recompiled, and issue the commands to recompile them. The manual describes the GNU implementation of .BR make , which was written by Richard Stallman and Roland McGrath, and is currently maintained by Paul Smith. Our examples show C programs, since they are very common, but you can use .B make with any programming language whose compiler can be run with a shell command. In fact, .B make is not limited to programs. You can use it to describe any task where some files must be updated automatically from others whenever the others change. .LP To prepare to use .BR make , you must write a file called the .I makefile that describes the relationships among files in your program, and the states the commands for updating each file. In a program, typically the executable file is updated from object files, which are in turn made by compiling source files. .LP Once a suitable makefile exists, each time you change some source files, this simple shell command: .sp 1 .RS .B make .RE .sp 1 suffices to perform all necessary recompilations. The .B make program uses the makefile description and the last-modification times of the files to decide which of the files need to be updated. For each of those files, it issues the commands recorded in the makefile. .LP .B make executes commands in the .I makefile to update one or more target .IR names , where .I name is typically a program. If no .B \-f option is present, .B make will look for the makefiles .IR GNUmakefile , .IR makefile , and .IR Makefile , in that order. .LP Normally you should call your makefile either .I makefile or .IR Makefile . (We recommend .I Makefile because it appears prominently near the beginning of a directory listing, right near other important files such as .IR README .) The first name checked, .IR GNUmakefile , is not recommended for most makefiles. You should use this name if you have a makefile that is specific to GNU .BR make , and will not be understood by other versions of .BR make . If .I makefile is '\-', the standard input is read. .LP .B make updates a target if it depends on prerequisite files that have been modified since the target was last modified, or if the target does not exist. .SH OPTIONS .sp 1 .TP 0.5i \fB\-b\fR, \fB\-m\fR These options are ignored for compatibility with other versions of .BR make . .TP 0.5i \fB\-B\fR, \fB\-\-always\-make\fR Unconditionally make all targets. .TP 0.5i \fB\-C\fR \fIdir\fR, \fB\-\-directory\fR=\fIdir\fR Change to directory .I dir before reading the makefiles or doing anything else. If multiple .B \-C options are specified, each is interpreted relative to the previous one: .BR "\-C " / .BR "\-C " etc is equivalent to .BR "\-C " /etc. This is typically used with recursive invocations of .BR make . .TP 0.5i .B \-d Print debugging information in addition to normal processing. The debugging information says which files are being considered for remaking, which file-times are being compared and with what results, which files actually need to be remade, which implicit rules are considered and which are applied---everything interesting about how .B make decides what to do. .TP 0.5i .BI \-\-debug "[=FLAGS]" Print debugging information in addition to normal processing. If the .I FLAGS are omitted, then the behavior is the same as if .B \-d was specified. .I FLAGS may be .I a for all debugging output (same as using .BR \-d ), .I b for basic debugging, .I v for more verbose basic debugging, .I i for showing implicit rules, .I j for details on invocation of commands, and .I m for debugging while remaking makefiles. Use .I n to disable all previous debugging flags. .TP 0.5i \fB\-e\fR, \fB\-\-environment\-overrides\fR Give variables taken from the environment precedence over variables from makefiles. .TP 0.5i \fB\-E\fR \fIstring\fR, \fB\-\-eval\fR \fIstring\fR Interpret \fIstring\fR using the \fBeval\fR function, before parsing any makefiles. .TP 0.5i \fB\-f\fR \fIfile\fR, \fB\-\-file\fR=\fIfile\fR, \fB\-\-makefile\fR=\fIFILE\fR Use .I file as a makefile. .TP 0.5i \fB\-i\fR, \fB\-\-ignore\-errors\fR Ignore all errors in commands executed to remake files. .TP 0.5i \fB\-I\fR \fIdir\fR, \fB\-\-include\-dir\fR=\fIdir\fR Specifies a directory .I dir to search for included makefiles. If several .B \-I options are used to specify several directories, the directories are searched in the order specified. Unlike the arguments to other flags of .BR make , directories given with .B \-I flags may come directly after the flag: .BI \-I dir is allowed, as well as .B \-I .IR dir . This syntax is allowed for compatibility with the C preprocessor's .B \-I flag. .TP 0.5i \fB\-j\fR [\fIjobs\fR], \fB\-\-jobs\fR[=\fIjobs\fR] Specifies the number of .I jobs (commands) to run simultaneously. If there is more than one .B \-j option, the last one is effective. If the .B \-j option is given without an argument, .BR make will not limit the number of jobs that can run simultaneously. .TP 0.5i \fB\-k\fR, \fB\-\-keep\-going\fR Continue as much as possible after an error. While the target that failed, and those that depend on it, cannot be remade, the other dependencies of these targets can be processed all the same. .TP 0.5i \fB\-l\fR [\fIload\fR], \fB\-\-load\-average\fR[=\fIload\fR] Specifies that no new jobs (commands) should be started if there are others jobs running and the load average is at least .I load (a floating-point number). With no argument, removes a previous load limit. .TP 0.5i \fB\-L\fR, \fB\-\-check\-symlink\-times\fR Use the latest mtime between symlinks and target. .TP 0.5i \fB\-n\fR, \fB\-\-just\-print\fR, \fB\-\-dry\-run\fR, \fB\-\-recon\fR Print the commands that would be executed, but do not execute them (except in certain circumstances). .TP 0.5i \fB\-o\fR \fIfile\fR, \fB\-\-old\-file\fR=\fIfile\fR, \fB\-\-assume\-old\fR=\fIfile\fR Do not remake the file .I file even if it is older than its dependencies, and do not remake anything on account of changes in .IR file . Essentially the file is treated as very old and its rules are ignored. .TP 0.5i \fB\-O\fR[\fItype\fR], \fB\-\-output\-sync\fR[=\fItype\fR] When running multiple jobs in parallel with \fB-j\fR, ensure the output of each job is collected together rather than interspersed with output from other jobs. If .I type is not specified or is .B target the output from the entire recipe for each target is grouped together. If .I type is .B line the output from each command line within a recipe is grouped together. If .I type is .B recurse output from an entire recursive make is grouped together. If .I type is .B none output synchronization is disabled. .TP 0.5i \fB\-p\fR, \fB\-\-print\-data\-base\fR Print the data base (rules and variable values) that results from reading the makefiles; then execute as usual or as otherwise specified. This also prints the version information given by the .B \-v switch (see below). To print the data base without trying to remake any files, use .IR "make \-p \-f/dev/null" . .TP 0.5i \fB\-q\fR, \fB\-\-question\fR ``Question mode''. Do not run any commands, or print anything; just return an exit status that is zero if the specified targets are already up to date, nonzero otherwise. .TP 0.5i \fB\-r\fR, \fB\-\-no\-builtin\-rules\fR Eliminate use of the built\-in implicit rules. Also clear out the default list of suffixes for suffix rules. .TP 0.5i \fB\-R\fR, \fB\-\-no\-builtin\-variables\fR Don't define any built\-in variables. .TP 0.5i \fB\-s\fR, \fB\-\-silent\fR, \fB\-\-quiet\fR Silent operation; do not print the commands as they are executed. .TP 0.5i .B \-\-no\-silent Cancel the effect of the \fB\-s\fR option. .TP 0.5i \fB\-S\fR, \fB\-\-no\-keep\-going\fR, \fB\-\-stop\fR Cancel the effect of the .B \-k option. .TP 0.5i \fB\-t\fR, \fB\-\-touch\fR Touch files (mark them up to date without really changing them) instead of running their commands. This is used to pretend that the commands were done, in order to fool future invocations of .BR make . .TP 0.5i .B \-\-trace Information about the disposition of each target is printed (why the target is being rebuilt and what commands are run to rebuild it). .TP 0.5i \fB\-v\fR, \fB\-\-version\fR Print the version of the .B make program plus a copyright, a list of authors and a notice that there is no warranty. .TP 0.5i \fB\-w\fR, \fB\-\-print\-directory\fR Print a message containing the working directory before and after other processing. This may be useful for tracking down errors from complicated nests of recursive .B make commands. .TP 0.5i .B \-\-no\-print\-directory Turn off .BR \-w , even if it was turned on implicitly. .TP 0.5i \fB\-W\fR \fIfile\fR, \fB\-\-what\-if\fR=\fIfile\fR, \fB\-\-new\-file\fR=\fIfile\fR, \fB\-\-assume\-new\fR=\fIfile\fR Pretend that the target .I file has just been modified. When used with the .B \-n flag, this shows you what would happen if you were to modify that file. Without .BR \-n , it is almost the same as running a .I touch command on the given file before running .BR make , except that the modification time is changed only in the imagination of .BR make . .TP 0.5i .B \-\-warn\-undefined\-variables Warn when an undefined variable is referenced. .SH "EXIT STATUS" GNU .B make exits with a status of zero if all makefiles were successfully parsed and no targets that were built failed. A status of one will be returned if the .B \-q flag was used and .B make determines that a target needs to be rebuilt. A status of two will be returned if any errors were encountered. .SH "SEE ALSO" The full documentation for .B make is maintained as a Texinfo manual. If the .B info and .B make programs are properly installed at your site, the command .IP .B info make .PP should give you access to the complete manual. .SH BUGS See the chapter ``Problems and Bugs'' in .IR "The GNU Make Manual" . .SH AUTHOR 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-2020 Free Software Foundation, Inc. This file is part of .IR "GNU make" . .LP 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. .LP 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. .LP You should have received a copy of the GNU General Public License along with this program. If not, see .IR http://www.gnu.org/licenses/ . make-4.3/doc/version.texi0000644000175000017500000000013713611136532012345 00000000000000@set UPDATED 19 January 2020 @set UPDATED-MONTH January 2020 @set EDITION 4.3 @set VERSION 4.3 make-4.3/doc/Makefile.am0000644000175000017500000000160413603564437012033 00000000000000# -*-Makefile-*-, or close enough # Copyright (C) 2000-2020 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 . TEXI2HTML = texi2html TEXI2HTML_FLAGS = -split_chapter info_TEXINFOS = make.texi make_TEXINFOS = fdl.texi make-stds.texi CLEANFILES = make*.html make-4.3/doc/stamp-vti0000644000175000017500000000013713611136532011634 00000000000000@set UPDATED 19 January 2020 @set UPDATED-MONTH January 2020 @set EDITION 4.3 @set VERSION 4.3 make-4.3/m4/0000755000175000017500000000000013611151240007610 500000000000000make-4.3/m4/limits-h.m40000644000175000017500000000244213611136472011534 00000000000000dnl Check whether limits.h has needed features. dnl Copyright 2016-2020 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. AC_DEFUN_ONCE([gl_LIMITS_H], [ gl_CHECK_NEXT_HEADERS([limits.h]) AC_CACHE_CHECK([whether limits.h has LLONG_MAX, WORD_BIT, ULLONG_WIDTH etc.], [gl_cv_header_limits_width], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __STDC_WANT_IEC_60559_BFP_EXT__ #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 #endif #include long long llm = LLONG_MAX; int wb = WORD_BIT; int ullw = ULLONG_WIDTH; ]])], [gl_cv_header_limits_width=yes], [gl_cv_header_limits_width=no])]) if test "$gl_cv_header_limits_width" = yes; then LIMITS_H= else LIMITS_H=limits.h fi AC_SUBST([LIMITS_H]) AM_CONDITIONAL([GL_GENERATE_LIMITS_H], [test -n "$LIMITS_H"]) ]) dnl Unconditionally enables the replacement of . AC_DEFUN([gl_REPLACE_LIMITS_H], [ AC_REQUIRE([gl_LIMITS_H]) LIMITS_H='limits.h' AM_CONDITIONAL([GL_GENERATE_LIMITS_H], [test -n "$LIMITS_H"]) ]) make-4.3/m4/fcntl.m40000644000175000017500000001035113611136472011112 00000000000000# fcntl.m4 serial 9 dnl Copyright (C) 2009-2020 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. # For now, this module ensures that fcntl() # - supports F_DUPFD correctly # - supports or emulates F_DUPFD_CLOEXEC # - supports F_GETFD # Still to be ported to mingw: # - F_SETFD # - F_GETFL, F_SETFL # - F_GETOWN, F_SETOWN # - F_GETLK, F_SETLK, F_SETLKW AC_DEFUN([gl_FUNC_FCNTL], [ dnl Persuade glibc to expose F_DUPFD_CLOEXEC. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_FUNCS_ONCE([fcntl]) if test $ac_cv_func_fcntl = no; then gl_REPLACE_FCNTL else dnl cygwin 1.5.x F_DUPFD has wrong errno, and allows negative target dnl haiku alpha 2 F_DUPFD has wrong errno AC_CACHE_CHECK([whether fcntl handles F_DUPFD correctly], [gl_cv_func_fcntl_f_dupfd_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include #include #include #include #include #ifndef RLIM_SAVED_CUR # define RLIM_SAVED_CUR RLIM_INFINITY #endif #ifndef RLIM_SAVED_MAX # define RLIM_SAVED_MAX RLIM_INFINITY #endif ]], [[int result = 0; int bad_fd = INT_MAX; struct rlimit rlim; if (getrlimit (RLIMIT_NOFILE, &rlim) == 0 && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX && rlim.rlim_cur != RLIM_INFINITY && rlim.rlim_cur != RLIM_SAVED_MAX && rlim.rlim_cur != RLIM_SAVED_CUR) bad_fd = rlim.rlim_cur; if (fcntl (0, F_DUPFD, -1) != -1) result |= 1; if (errno != EINVAL) result |= 2; if (fcntl (0, F_DUPFD, bad_fd) != -1) result |= 4; if (errno != EINVAL) result |= 8; /* On OS/2 kLIBC, F_DUPFD does not work on a directory fd */ { int fd; fd = open (".", O_RDONLY); if (fd == -1) result |= 16; else if (fcntl (fd, F_DUPFD, STDERR_FILENO + 1) == -1) result |= 32; close (fd); } return result;]])], [gl_cv_func_fcntl_f_dupfd_works=yes], [gl_cv_func_fcntl_f_dupfd_works=no], [case $host_os in aix* | cygwin* | haiku*) gl_cv_func_fcntl_f_dupfd_works="guessing no" ;; *) gl_cv_func_fcntl_f_dupfd_works="guessing yes" ;; esac])]) case $gl_cv_func_fcntl_f_dupfd_works in *yes) ;; *) gl_REPLACE_FCNTL AC_DEFINE([FCNTL_DUPFD_BUGGY], [1], [Define this to 1 if F_DUPFD behavior does not match POSIX]) ;; esac dnl Many systems lack F_DUPFD_CLOEXEC AC_CACHE_CHECK([whether fcntl understands F_DUPFD_CLOEXEC], [gl_cv_func_fcntl_f_dupfd_cloexec], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include #ifndef F_DUPFD_CLOEXEC choke me #endif ]])], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #ifdef __linux__ /* The Linux kernel only added F_DUPFD_CLOEXEC in 2.6.24, so we always replace it to support the semantics on older kernels that failed with EINVAL. */ choke me #endif ]])], [gl_cv_func_fcntl_f_dupfd_cloexec=yes], [gl_cv_func_fcntl_f_dupfd_cloexec="needs runtime check"])], [gl_cv_func_fcntl_f_dupfd_cloexec=no])]) if test "$gl_cv_func_fcntl_f_dupfd_cloexec" != yes; then gl_REPLACE_FCNTL dnl No witness macro needed for this bug. fi fi dnl Replace fcntl() for supporting the gnulib-defined fchdir() function, dnl to keep fchdir's bookkeeping up-to-date. m4_ifdef([gl_FUNC_FCHDIR], [ gl_TEST_FCHDIR if test $HAVE_FCHDIR = 0; then gl_REPLACE_FCNTL fi ]) ]) AC_DEFUN([gl_REPLACE_FCNTL], [ AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([fcntl]) if test $ac_cv_func_fcntl = no; then HAVE_FCNTL=0 else REPLACE_FCNTL=1 fi ]) make-4.3/m4/msvc-inval.m40000644000175000017500000000133413611136472012064 00000000000000# msvc-inval.m4 serial 1 dnl Copyright (C) 2011-2020 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. AC_DEFUN([gl_MSVC_INVAL], [ AC_CHECK_FUNCS_ONCE([_set_invalid_parameter_handler]) if test $ac_cv_func__set_invalid_parameter_handler = yes; then HAVE_MSVC_INVALID_PARAMETER_HANDLER=1 AC_DEFINE([HAVE_MSVC_INVALID_PARAMETER_HANDLER], [1], [Define to 1 on MSVC platforms that have the "invalid parameter handler" concept.]) else HAVE_MSVC_INVALID_PARAMETER_HANDLER=0 fi AC_SUBST([HAVE_MSVC_INVALID_PARAMETER_HANDLER]) ]) make-4.3/m4/stpcpy.m40000644000175000017500000000131613611136472011327 00000000000000# stpcpy.m4 serial 8 dnl Copyright (C) 2002, 2007, 2009-2020 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. AC_DEFUN([gl_FUNC_STPCPY], [ dnl Persuade glibc to declare stpcpy(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl The stpcpy() declaration in lib/string.in.h uses 'restrict'. AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) AC_CHECK_FUNCS([stpcpy]) if test $ac_cv_func_stpcpy = no; then HAVE_STPCPY=0 fi ]) # Prerequisites of lib/stpcpy.c. AC_DEFUN([gl_PREREQ_STPCPY], [ : ]) make-4.3/m4/gnulib-cache.m40000644000175000017500000000376613611136476012345 00000000000000# Copyright (C) 2002-2020 Free Software Foundation, Inc. # # 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 # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This file 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 file. If not, see . # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that # contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. # # This file represents the specification of how gnulib-tool is used. # It acts as a cache: It is written and read by gnulib-tool. # In projects that use version control, this file is meant to be put under # version control, like the configure.ac and various Makefile.am files. # Specification in the form of a command-line invocation: # gnulib-tool --import --local-dir=gl \ # --lib=libgnu \ # --source-base=lib \ # --m4-base=m4 \ # --doc-base=doc \ # --tests-base=tests \ # --aux-dir=build-aux \ # --no-conditional-dependencies \ # --no-libtool \ # --macro-prefix=gl \ # alloca \ # fdl \ # findprog-in \ # getloadavg \ # host-cpu-c-abi \ # make-glob \ # strerror # Specification in the form of a few gnulib-tool.m4 macro invocations: gl_LOCAL_DIR([gl]) gl_MODULES([ alloca fdl findprog-in getloadavg host-cpu-c-abi make-glob strerror ]) gl_AVOID([]) gl_SOURCE_BASE([lib]) gl_M4_BASE([m4]) gl_PO_BASE([]) gl_DOC_BASE([doc]) gl_TESTS_BASE([tests]) gl_LIB([libgnu]) gl_MAKEFILE_NAME([]) gl_MACRO_PREFIX([gl]) gl_PO_DOMAIN([]) gl_WITNESS_C_MACRO([]) make-4.3/m4/dup2.m40000644000175000017500000001013413611136472010655 00000000000000#serial 25 dnl Copyright (C) 2002, 2005, 2007, 2009-2020 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. AC_DEFUN([gl_FUNC_DUP2], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) m4_ifdef([gl_FUNC_DUP2_OBSOLETE], [ AC_CHECK_FUNCS_ONCE([dup2]) if test $ac_cv_func_dup2 = no; then HAVE_DUP2=0 fi ], [ AC_DEFINE([HAVE_DUP2], [1], [Define to 1 if you have the 'dup2' function.]) ]) if test $HAVE_DUP2 = 1; then AC_CACHE_CHECK([whether dup2 works], [gl_cv_func_dup2_works], [AC_RUN_IFELSE([ AC_LANG_PROGRAM( [[#include #include #include #include #include #ifndef RLIM_SAVED_CUR # define RLIM_SAVED_CUR RLIM_INFINITY #endif #ifndef RLIM_SAVED_MAX # define RLIM_SAVED_MAX RLIM_INFINITY #endif ]], [[int result = 0; int bad_fd = INT_MAX; struct rlimit rlim; if (getrlimit (RLIMIT_NOFILE, &rlim) == 0 && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX && rlim.rlim_cur != RLIM_INFINITY && rlim.rlim_cur != RLIM_SAVED_MAX && rlim.rlim_cur != RLIM_SAVED_CUR) bad_fd = rlim.rlim_cur; #ifdef FD_CLOEXEC if (fcntl (1, F_SETFD, FD_CLOEXEC) == -1) result |= 1; #endif if (dup2 (1, 1) != 1) result |= 2; #ifdef FD_CLOEXEC if (fcntl (1, F_GETFD) != FD_CLOEXEC) result |= 4; #endif close (0); if (dup2 (0, 0) != -1) result |= 8; /* Many gnulib modules require POSIX conformance of EBADF. */ if (dup2 (2, bad_fd) == -1 && errno != EBADF) result |= 16; /* Flush out some cygwin core dumps. */ if (dup2 (2, -1) != -1 || errno != EBADF) result |= 32; dup2 (2, 255); dup2 (2, 256); /* On OS/2 kLIBC, dup2() does not work on a directory fd. */ { int fd = open (".", O_RDONLY); if (fd == -1) result |= 64; else if (dup2 (fd, fd + 1) == -1) result |= 128; close (fd); } return result;]]) ], [gl_cv_func_dup2_works=yes], [gl_cv_func_dup2_works=no], [case "$host_os" in mingw*) # on this platform, dup2 always returns 0 for success gl_cv_func_dup2_works="guessing no" ;; cygwin*) # on cygwin 1.5.x, dup2(1,1) returns 0 gl_cv_func_dup2_works="guessing no" ;; aix* | freebsd*) # on AIX 7.1 and FreeBSD 6.1, dup2 (1,toobig) gives EMFILE, # not EBADF. gl_cv_func_dup2_works="guessing no" ;; haiku*) # on Haiku alpha 2, dup2(1, 1) resets FD_CLOEXEC. gl_cv_func_dup2_works="guessing no" ;; *-android*) # implemented using dup3(), which fails if oldfd == newfd gl_cv_func_dup2_works="guessing no" ;; os2*) # on OS/2 kLIBC, dup2() does not work on a directory fd. gl_cv_func_dup2_works="guessing no" ;; *) gl_cv_func_dup2_works="guessing yes" ;; esac]) ]) case "$gl_cv_func_dup2_works" in *yes) ;; *) REPLACE_DUP2=1 AC_CHECK_FUNCS([setdtablesize]) ;; esac fi dnl Replace dup2() for supporting the gnulib-defined fchdir() function, dnl to keep fchdir's bookkeeping up-to-date. m4_ifdef([gl_FUNC_FCHDIR], [ gl_TEST_FCHDIR if test $HAVE_FCHDIR = 0; then if test $HAVE_DUP2 = 1; then REPLACE_DUP2=1 fi fi ]) ]) # Prerequisites of lib/dup2.c. AC_DEFUN([gl_PREREQ_DUP2], []) make-4.3/m4/access.m40000644000175000017500000000106613611136472011250 00000000000000# access.m4 serial 1 dnl Copyright (C) 2019-2020 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. AC_DEFUN([gl_FUNC_ACCESS], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl On native Windows, access (= _access) does not support the X_OK mode. dnl It works by chance on some versions of mingw. case "$host_os" in mingw*) REPLACE_ACCESS=1 ;; esac ]) make-4.3/m4/dirname.m40000644000175000017500000000105413611136472011423 00000000000000#serial 10 -*- autoconf -*- dnl Copyright (C) 2002-2006, 2009-2020 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. AC_DEFUN([gl_DIRNAME], [ AC_REQUIRE([gl_DIRNAME_LGPL]) ]) AC_DEFUN([gl_DIRNAME_LGPL], [ dnl Prerequisites of lib/dirname.h. AC_REQUIRE([gl_DOUBLE_SLASH_ROOT]) dnl No prerequisites of lib/basename-lgpl.c, lib/dirname-lgpl.c, dnl lib/stripslash.c. ]) make-4.3/m4/00gnulib.m40000644000175000017500000000415213611136472011426 00000000000000# 00gnulib.m4 serial 3 dnl Copyright (C) 2009-2020 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 This file must be named something that sorts before all other dnl gnulib-provided .m4 files. It is needed until such time as we can dnl assume Autoconf 2.64, with its improved AC_DEFUN_ONCE and dnl m4_divert semantics. # Until autoconf 2.63, handling of the diversion stack required m4_init # to be called first; but this does not happen with aclocal. Wrapping # the entire execution in another layer of the diversion stack fixes this. # Worse, prior to autoconf 2.62, m4_wrap depended on the underlying m4 # for whether it was FIFO or LIFO; in order to properly balance with # m4_init, we need to undo our push just before anything wrapped within # the m4_init body. The way to ensure this is to wrap both sides of # m4_init with a one-shot macro that does the pop at the right time. m4_ifndef([_m4_divert_diversion], [m4_divert_push([KILL]) m4_define([gl_divert_fixup], [m4_divert_pop()m4_define([$0])]) m4_define([m4_init], [gl_divert_fixup()]m4_defn([m4_init])[gl_divert_fixup()])]) # AC_DEFUN_ONCE([NAME], VALUE) # ---------------------------- # Define NAME to expand to VALUE on the first use (whether by direct # expansion, or by AC_REQUIRE), and to nothing on all subsequent uses. # Avoid bugs in AC_REQUIRE in Autoconf 2.63 and earlier. This # definition is slower than the version in Autoconf 2.64, because it # can only use interfaces that existed since 2.59; but it achieves the # same effect. Quoting is necessary to avoid confusing Automake. m4_version_prereq([2.63.263], [], [m4_define([AC][_DEFUN_ONCE], [AC][_DEFUN([$1], [AC_REQUIRE([_gl_DEFUN_ONCE([$1])], [m4_indir([_gl_DEFUN_ONCE([$1])])])])]dnl [AC][_DEFUN([_gl_DEFUN_ONCE([$1])], [$2])])]) # gl_00GNULIB # ----------- # Witness macro that this file has been included. Needed to force # Automake to include this file prior to all other gnulib .m4 files. AC_DEFUN([gl_00GNULIB]) make-4.3/m4/iconv.m40000644000175000017500000002206413611136462011125 00000000000000# 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. dnl From Bruno Haible. AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], [ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_LIB_LINKFLAGS_BODY([iconv]) ]) AC_DEFUN([AM_ICONV_LINK], [ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and dnl those with the standalone portable GNU libiconv installed). AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) 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_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_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include #include ]], [[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_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include #include ]], [[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" fi ]) 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, 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 am_cv_func_iconv_works=no for ac_iconv_const in '' 'const'; do AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[ #include #include #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 ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; 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, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 1; iconv_close (cd_utf8_to_88591); } } /* Test against Solaris 10 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); if (cd_ascii_to_88591 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\263"; char buf[10]; 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, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) 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. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; 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, &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) result |= 8; iconv_close (cd_88591_to_utf8); } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ if (/* Try standardized names. */ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) /* Try IRIX, OSF/1 names. */ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) /* Try AIX names. */ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) /* Try HP-UX names. */ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) 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 *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then AC_DEFINE([HAVE_ICONV], [1], [Define if you have the iconv() function and it works.]) fi if test "$am_cv_lib_iconv" = yes; then AC_MSG_CHECKING([how to link with libiconv]) AC_MSG_RESULT([$LIBICONV]) else dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV dnl either. CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi AC_SUBST([LIBICONV]) AC_SUBST([LTLIBICONV]) ]) dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to dnl avoid warnings like dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required". dnl This is tricky because of the way 'aclocal' is implemented: dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN. dnl Otherwise aclocal's initial scan pass would miss the macro definition. dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions. dnl Otherwise aclocal would emit many "Use of uninitialized value $1" dnl warnings. m4_define([gl_iconv_AC_DEFUN], m4_version_prereq([2.64], [[AC_DEFUN_ONCE( [$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_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #include #include extern #ifdef __cplusplus "C" #endif #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="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 . 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 ]) make-4.3/m4/malloc.m40000644000175000017500000000647313611136472011265 00000000000000# malloc.m4 serial 20 dnl Copyright (C) 2007, 2009-2020 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. # This is adapted with modifications from upstream Autoconf here: # https://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=04be2b7a29d65d9a08e64e8e56e594c91749598c AC_DEFUN([_AC_FUNC_MALLOC_IF], [ AC_REQUIRE([AC_HEADER_STDC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles AC_CHECK_HEADERS([stdlib.h]) AC_CACHE_CHECK([for GNU libc compatible malloc], [ac_cv_func_malloc_0_nonnull], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#if defined STDC_HEADERS || defined HAVE_STDLIB_H # include #else char *malloc (); #endif ]], [[char *p = malloc (0); int result = !p; free (p); return result;]]) ], [ac_cv_func_malloc_0_nonnull=yes], [ac_cv_func_malloc_0_nonnull=no], [case "$host_os" in # Guess yes on platforms where we know the result. *-gnu* | gnu* | *-musl* | freebsd* | netbsd* | openbsd* \ | hpux* | solaris* | cygwin* | mingw*) ac_cv_func_malloc_0_nonnull="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) ac_cv_func_malloc_0_nonnull="$gl_cross_guess_normal" ;; esac ]) ]) case "$ac_cv_func_malloc_0_nonnull" in *yes) $1 ;; *) $2 ;; esac ])# _AC_FUNC_MALLOC_IF # gl_FUNC_MALLOC_GNU # ------------------ # Test whether 'malloc (0)' is handled like in GNU libc, and replace malloc if # it is not. AC_DEFUN([gl_FUNC_MALLOC_GNU], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) dnl _AC_FUNC_MALLOC_IF is defined in Autoconf. _AC_FUNC_MALLOC_IF( [AC_DEFINE([HAVE_MALLOC_GNU], [1], [Define to 1 if your system has a GNU libc compatible 'malloc' function, and to 0 otherwise.])], [AC_DEFINE([HAVE_MALLOC_GNU], [0]) REPLACE_MALLOC=1 ]) ]) # gl_FUNC_MALLOC_POSIX # -------------------- # Test whether 'malloc' is POSIX compliant (sets errno to ENOMEM when it # fails), and replace malloc if it is not. AC_DEFUN([gl_FUNC_MALLOC_POSIX], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_CHECK_MALLOC_POSIX]) if test $gl_cv_func_malloc_posix = yes; then AC_DEFINE([HAVE_MALLOC_POSIX], [1], [Define if the 'malloc' function is POSIX compliant.]) else REPLACE_MALLOC=1 fi ]) # Test whether malloc, realloc, calloc are POSIX compliant, # Set gl_cv_func_malloc_posix to yes or no accordingly. AC_DEFUN([gl_CHECK_MALLOC_POSIX], [ AC_CACHE_CHECK([whether malloc, realloc, calloc are POSIX compliant], [gl_cv_func_malloc_posix], [ dnl It is too dangerous to try to allocate a large amount of memory: dnl some systems go to their knees when you do that. So assume that dnl all Unix implementations of the function are POSIX compliant. AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[]], [[#if defined _WIN32 && ! defined __CYGWIN__ choke me #endif ]])], [gl_cv_func_malloc_posix=yes], [gl_cv_func_malloc_posix=no]) ]) ]) make-4.3/m4/gnulib-comp.m40000644000175000017500000003436713611136477012242 00000000000000# DO NOT EDIT! GENERATED AUTOMATICALLY! # Copyright (C) 2002-2020 Free Software Foundation, Inc. # # 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 # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This file 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 file. If not, see . # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that # contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. # # This file represents the compiled summary of the specification in # gnulib-cache.m4. It lists the computed macro invocations that need # to be invoked from configure.ac. # In projects that use version control, this file can be treated like # other built files. # This macro should be invoked from ./configure.ac, in the section # "Checks for programs", right after AC_PROG_CC, and certainly before # any checks for libraries, header files, types and library functions. AC_DEFUN([gl_EARLY], [ m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace m4_pattern_allow([^gl_ES$])dnl a valid locale name m4_pattern_allow([^gl_LIBOBJS$])dnl a variable m4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable # Pre-early section. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_PROG_AR_RANLIB]) # Code from module absolute-header: # Code from module access: # Code from module alloca: # Code from module alloca-opt: # Code from module close: # Code from module concat-filename: # Code from module dirname-lgpl: # Code from module dosname: # Code from module double-slash-root: # Code from module dup2: # Code from module errno: # Code from module error: # Code from module exitfail: # Code from module extensions: # Code from module extern-inline: # Code from module fcntl: # Code from module fcntl-h: # Code from module fd-hook: # Code from module fdl: # Code from module filename: # Code from module findprog-in: # Code from module getdtablesize: # Code from module getloadavg: # Code from module getprogname: # Code from module gettext-h: # Code from module host-cpu-c-abi: # Code from module include_next: # Code from module intprops: # Code from module limits-h: # Code from module make-glob: # Code from module malloc-posix: # Code from module msvc-inval: # Code from module msvc-nothrow: # Code from module multiarch: # Code from module snippet/_Noreturn: # Code from module snippet/arg-nonnull: # Code from module snippet/c++defs: # Code from module snippet/warn-on-use: # Code from module ssize_t: # Code from module stdbool: # Code from module stddef: # Code from module stdint: # Code from module stdio: # Code from module stdlib: # Code from module stpcpy: # Code from module strerror: # Code from module strerror-override: # Code from module string: # Code from module sys_types: # Code from module unistd: # Code from module verify: # Code from module xalloc: # Code from module xalloc-die: # Code from module xalloc-oversized: # Code from module xconcat-filename: ]) # This macro should be invoked from ./configure.ac, in the section # "Check for header files, types and library functions". AC_DEFUN([gl_INIT], [ AM_CONDITIONAL([GL_COND_LIBTOOL], [false]) gl_cond_libtool=false gl_libdeps= gl_ltlibdeps= gl_m4_base='m4' m4_pushdef([AC_LIBOBJ], m4_defn([gl_LIBOBJ])) m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gl_REPLACE_FUNCS])) m4_pushdef([AC_LIBSOURCES], m4_defn([gl_LIBSOURCES])) m4_pushdef([gl_LIBSOURCES_LIST], []) m4_pushdef([gl_LIBSOURCES_DIR], []) gl_COMMON gl_source_base='lib' gl_FUNC_ACCESS if test $REPLACE_ACCESS = 1; then AC_LIBOBJ([access]) fi gl_UNISTD_MODULE_INDICATOR([access]) gl_FUNC_ALLOCA gl_FUNC_CLOSE if test $REPLACE_CLOSE = 1; then AC_LIBOBJ([close]) fi gl_UNISTD_MODULE_INDICATOR([close]) gl_DIRNAME_LGPL gl_DOUBLE_SLASH_ROOT gl_FUNC_DUP2 if test $HAVE_DUP2 = 0 || test $REPLACE_DUP2 = 1; then AC_LIBOBJ([dup2]) gl_PREREQ_DUP2 fi gl_UNISTD_MODULE_INDICATOR([dup2]) gl_HEADER_ERRNO_H gl_ERROR if test $ac_cv_lib_error_at_line = no; then AC_LIBOBJ([error]) gl_PREREQ_ERROR fi m4_ifdef([AM_XGETTEXT_OPTION], [AM_][XGETTEXT_OPTION([--flag=error:3:c-format]) AM_][XGETTEXT_OPTION([--flag=error_at_line:5:c-format])]) AC_REQUIRE([gl_EXTERN_INLINE]) gl_FUNC_FCNTL if test $HAVE_FCNTL = 0 || test $REPLACE_FCNTL = 1; then AC_LIBOBJ([fcntl]) fi gl_FCNTL_MODULE_INDICATOR([fcntl]) gl_FCNTL_H gl_FINDPROG_IN gl_FUNC_GETDTABLESIZE if test $HAVE_GETDTABLESIZE = 0 || test $REPLACE_GETDTABLESIZE = 1; then AC_LIBOBJ([getdtablesize]) gl_PREREQ_GETDTABLESIZE fi gl_UNISTD_MODULE_INDICATOR([getdtablesize]) gl_GETLOADAVG if test $HAVE_GETLOADAVG = 0; then AC_LIBOBJ([getloadavg]) gl_PREREQ_GETLOADAVG fi gl_STDLIB_MODULE_INDICATOR([getloadavg]) gl_FUNC_GETPROGNAME AC_SUBST([LIBINTL]) AC_SUBST([LTLIBINTL]) AC_REQUIRE([gl_HOST_CPU_C_ABI]) gl_LIMITS_H # Check the system to see if it provides GNU glob. If not, use our # local version. AC_CACHE_CHECK([if system libc has GNU glob], [make_cv_sys_gnu_glob], [ AC_EGREP_CPP([gnu glob],[ #include #include #include #if !defined _LIBC && defined __GNU_LIBRARY__ && __GNU_LIBRARY__ > 1 # include # if _GNU_GLOB_INTERFACE_VERSION == 1 || _GNU_GLOB_INTERFACE_VERSION == 2 gnu glob # endif #endif], [make_cv_sys_gnu_glob=yes], [make_cv_sys_gnu_glob=no])]) # Tell automake about this, so it can build the right .c files. AM_CONDITIONAL([USE_SYSTEM_GLOB], [test "$make_cv_sys_gnu_glob" = yes]) # Tell build.sh which to use USE_SYSTEM_GLOB="$make_cv_sys_gnu_glob" AC_SUBST([USE_SYSTEM_GLOB]) gl_FUNC_MALLOC_POSIX if test $REPLACE_MALLOC = 1; then AC_LIBOBJ([malloc]) fi gl_STDLIB_MODULE_INDICATOR([malloc-posix]) AC_REQUIRE([gl_MSVC_INVAL]) if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then AC_LIBOBJ([msvc-inval]) fi AC_REQUIRE([gl_MSVC_NOTHROW]) if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then AC_LIBOBJ([msvc-nothrow]) fi gl_MODULE_INDICATOR([msvc-nothrow]) gl_MULTIARCH gt_TYPE_SSIZE_T AM_STDBOOL_H gl_STDDEF_H gl_STDINT_H gl_STDIO_H gl_STDLIB_H gl_FUNC_STPCPY if test $HAVE_STPCPY = 0; then AC_LIBOBJ([stpcpy]) gl_PREREQ_STPCPY fi gl_STRING_MODULE_INDICATOR([stpcpy]) gl_FUNC_STRERROR if test $REPLACE_STRERROR = 1; then AC_LIBOBJ([strerror]) fi gl_MODULE_INDICATOR([strerror]) gl_STRING_MODULE_INDICATOR([strerror]) AC_REQUIRE([gl_HEADER_ERRNO_H]) AC_REQUIRE([gl_FUNC_STRERROR_0]) if test -n "$ERRNO_H" || test $REPLACE_STRERROR_0 = 1; then AC_LIBOBJ([strerror-override]) gl_PREREQ_SYS_H_WINSOCK2 fi gl_HEADER_STRING_H gl_SYS_TYPES_H AC_PROG_MKDIR_P gl_UNISTD_H gl_XALLOC # End of code from modules m4_ifval(gl_LIBSOURCES_LIST, [ m4_syscmd([test ! -d ]m4_defn([gl_LIBSOURCES_DIR])[ || for gl_file in ]gl_LIBSOURCES_LIST[ ; do if test ! -r ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file ; then echo "missing file ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file" >&2 exit 1 fi done])dnl m4_if(m4_sysval, [0], [], [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])]) ]) m4_popdef([gl_LIBSOURCES_DIR]) m4_popdef([gl_LIBSOURCES_LIST]) m4_popdef([AC_LIBSOURCES]) m4_popdef([AC_REPLACE_FUNCS]) m4_popdef([AC_LIBOBJ]) AC_CONFIG_COMMANDS_PRE([ gl_libobjs= gl_ltlibobjs= if test -n "$gl_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do gl_libobjs="$gl_libobjs $i.$ac_objext" gl_ltlibobjs="$gl_ltlibobjs $i.lo" done fi AC_SUBST([gl_LIBOBJS], [$gl_libobjs]) AC_SUBST([gl_LTLIBOBJS], [$gl_ltlibobjs]) ]) gltests_libdeps= gltests_ltlibdeps= m4_pushdef([AC_LIBOBJ], m4_defn([gltests_LIBOBJ])) m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gltests_REPLACE_FUNCS])) m4_pushdef([AC_LIBSOURCES], m4_defn([gltests_LIBSOURCES])) m4_pushdef([gltests_LIBSOURCES_LIST], []) m4_pushdef([gltests_LIBSOURCES_DIR], []) gl_COMMON gl_source_base='tests' changequote(,)dnl gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS changequote([, ])dnl AC_SUBST([gltests_WITNESS]) gl_module_indicator_condition=$gltests_WITNESS m4_pushdef([gl_MODULE_INDICATOR_CONDITION], [$gl_module_indicator_condition]) m4_popdef([gl_MODULE_INDICATOR_CONDITION]) m4_ifval(gltests_LIBSOURCES_LIST, [ m4_syscmd([test ! -d ]m4_defn([gltests_LIBSOURCES_DIR])[ || for gl_file in ]gltests_LIBSOURCES_LIST[ ; do if test ! -r ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file ; then echo "missing file ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file" >&2 exit 1 fi done])dnl m4_if(m4_sysval, [0], [], [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])]) ]) m4_popdef([gltests_LIBSOURCES_DIR]) m4_popdef([gltests_LIBSOURCES_LIST]) m4_popdef([AC_LIBSOURCES]) m4_popdef([AC_REPLACE_FUNCS]) m4_popdef([AC_LIBOBJ]) AC_CONFIG_COMMANDS_PRE([ gltests_libobjs= gltests_ltlibobjs= if test -n "$gltests_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do gltests_libobjs="$gltests_libobjs $i.$ac_objext" gltests_ltlibobjs="$gltests_ltlibobjs $i.lo" done fi AC_SUBST([gltests_LIBOBJS], [$gltests_libobjs]) AC_SUBST([gltests_LTLIBOBJS], [$gltests_ltlibobjs]) ]) LIBGNU_LIBDEPS="$gl_libdeps" AC_SUBST([LIBGNU_LIBDEPS]) LIBGNU_LTLIBDEPS="$gl_ltlibdeps" AC_SUBST([LIBGNU_LTLIBDEPS]) ]) # Like AC_LIBOBJ, except that the module name goes # into gl_LIBOBJS instead of into LIBOBJS. AC_DEFUN([gl_LIBOBJ], [ AS_LITERAL_IF([$1], [gl_LIBSOURCES([$1.c])])dnl gl_LIBOBJS="$gl_LIBOBJS $1.$ac_objext" ]) # Like AC_REPLACE_FUNCS, except that the module name goes # into gl_LIBOBJS instead of into LIBOBJS. AC_DEFUN([gl_REPLACE_FUNCS], [ m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl AC_CHECK_FUNCS([$1], , [gl_LIBOBJ($ac_func)]) ]) # Like AC_LIBSOURCES, except the directory where the source file is # expected is derived from the gnulib-tool parameterization, # and alloca is special cased (for the alloca-opt module). # We could also entirely rely on EXTRA_lib..._SOURCES. AC_DEFUN([gl_LIBSOURCES], [ m4_foreach([_gl_NAME], [$1], [ m4_if(_gl_NAME, [alloca.c], [], [ m4_define([gl_LIBSOURCES_DIR], [lib]) m4_append([gl_LIBSOURCES_LIST], _gl_NAME, [ ]) ]) ]) ]) # Like AC_LIBOBJ, except that the module name goes # into gltests_LIBOBJS instead of into LIBOBJS. AC_DEFUN([gltests_LIBOBJ], [ AS_LITERAL_IF([$1], [gltests_LIBSOURCES([$1.c])])dnl gltests_LIBOBJS="$gltests_LIBOBJS $1.$ac_objext" ]) # Like AC_REPLACE_FUNCS, except that the module name goes # into gltests_LIBOBJS instead of into LIBOBJS. AC_DEFUN([gltests_REPLACE_FUNCS], [ m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl AC_CHECK_FUNCS([$1], , [gltests_LIBOBJ($ac_func)]) ]) # Like AC_LIBSOURCES, except the directory where the source file is # expected is derived from the gnulib-tool parameterization, # and alloca is special cased (for the alloca-opt module). # We could also entirely rely on EXTRA_lib..._SOURCES. AC_DEFUN([gltests_LIBSOURCES], [ m4_foreach([_gl_NAME], [$1], [ m4_if(_gl_NAME, [alloca.c], [], [ m4_define([gltests_LIBSOURCES_DIR], [tests]) m4_append([gltests_LIBSOURCES_LIST], _gl_NAME, [ ]) ]) ]) ]) # This macro records the list of files which have been installed by # gnulib-tool and may be removed by future gnulib-tool invocations. AC_DEFUN([gl_FILE_LIST], [ doc/fdl.texi lib/_Noreturn.h lib/access.c lib/alloca.c lib/alloca.in.h lib/arg-nonnull.h lib/basename-lgpl.c lib/c++defs.h lib/close.c lib/concat-filename.c lib/concat-filename.h lib/dirname-lgpl.c lib/dirname.h lib/dosname.h lib/dup2.c lib/errno.in.h lib/error.c lib/error.h lib/exitfail.c lib/exitfail.h lib/fcntl.c lib/fcntl.in.h lib/fd-hook.c lib/fd-hook.h lib/filename.h lib/findprog-in.c lib/findprog.h lib/getdtablesize.c lib/getloadavg.c lib/getprogname.c lib/getprogname.h lib/gettext.h lib/intprops.h lib/limits.in.h lib/malloc.c lib/msvc-inval.c lib/msvc-inval.h lib/msvc-nothrow.c lib/msvc-nothrow.h lib/stdbool.in.h lib/stddef.in.h lib/stdint.in.h lib/stdio.in.h lib/stdlib.in.h lib/stpcpy.c lib/strerror-override.c lib/strerror-override.h lib/strerror.c lib/string.in.h lib/stripslash.c lib/sys_types.in.h lib/unistd.c lib/unistd.in.h lib/verify.h lib/warn-on-use.h lib/xalloc-die.c lib/xalloc-oversized.h lib/xalloc.h lib/xconcat-filename.c lib/xmalloc.c m4/00gnulib.m4 m4/absolute-header.m4 m4/access.m4 m4/alloca.m4 m4/asm-underscore.m4 m4/close.m4 m4/dirname.m4 m4/double-slash-root.m4 m4/dup2.m4 m4/eaccess.m4 m4/errno_h.m4 m4/error.m4 m4/extensions.m4 m4/extern-inline.m4 m4/fcntl-o.m4 m4/fcntl.m4 m4/fcntl_h.m4 m4/findprog-in.m4 m4/getdtablesize.m4 m4/getloadavg.m4 m4/getprogname.m4 m4/gnulib-common.m4 m4/host-cpu-c-abi.m4 m4/include_next.m4 m4/limits-h.m4 m4/malloc.m4 m4/msvc-inval.m4 m4/msvc-nothrow.m4 m4/multiarch.m4 m4/off_t.m4 m4/ssize_t.m4 m4/stdbool.m4 m4/stddef_h.m4 m4/stdint.m4 m4/stdio_h.m4 m4/stdlib_h.m4 m4/stpcpy.m4 m4/strerror.m4 m4/string_h.m4 m4/sys_socket_h.m4 m4/sys_types_h.m4 m4/unistd_h.m4 m4/warn-on-use.m4 m4/wchar_t.m4 m4/wint_t.m4 m4/xalloc.m4 ]) make-4.3/m4/errno_h.m40000644000175000017500000000573613611136472011453 00000000000000# errno_h.m4 serial 13 dnl Copyright (C) 2004, 2006, 2008-2020 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. AC_PREREQ([2.61]) AC_DEFUN_ONCE([gl_HEADER_ERRNO_H], [ AC_REQUIRE([AC_PROG_CC]) AC_CACHE_CHECK([for complete errno.h], [gl_cv_header_errno_h_complete], [ AC_EGREP_CPP([booboo],[ #include #if !defined ETXTBSY booboo #endif #if !defined ENOMSG booboo #endif #if !defined EIDRM booboo #endif #if !defined ENOLINK booboo #endif #if !defined EPROTO booboo #endif #if !defined EMULTIHOP booboo #endif #if !defined EBADMSG booboo #endif #if !defined EOVERFLOW booboo #endif #if !defined ENOTSUP booboo #endif #if !defined ENETRESET booboo #endif #if !defined ECONNABORTED booboo #endif #if !defined ESTALE booboo #endif #if !defined EDQUOT booboo #endif #if !defined ECANCELED booboo #endif #if !defined EOWNERDEAD booboo #endif #if !defined ENOTRECOVERABLE booboo #endif #if !defined EILSEQ booboo #endif ], [gl_cv_header_errno_h_complete=no], [gl_cv_header_errno_h_complete=yes]) ]) if test $gl_cv_header_errno_h_complete = yes; then ERRNO_H='' else gl_NEXT_HEADERS([errno.h]) ERRNO_H='errno.h' fi AC_SUBST([ERRNO_H]) AM_CONDITIONAL([GL_GENERATE_ERRNO_H], [test -n "$ERRNO_H"]) gl_REPLACE_ERRNO_VALUE([EMULTIHOP]) gl_REPLACE_ERRNO_VALUE([ENOLINK]) gl_REPLACE_ERRNO_VALUE([EOVERFLOW]) ]) # Assuming $1 = EOVERFLOW. # The EOVERFLOW errno value ought to be defined in , according to # POSIX. But some systems (like OpenBSD 4.0 or AIX 3) don't define it, and # some systems (like OSF/1) define it when _XOPEN_SOURCE_EXTENDED is defined. # Check for the value of EOVERFLOW. # Set the variables EOVERFLOW_HIDDEN and EOVERFLOW_VALUE. AC_DEFUN([gl_REPLACE_ERRNO_VALUE], [ if test -n "$ERRNO_H"; then AC_CACHE_CHECK([for ]$1[ value], [gl_cv_header_errno_h_]$1, [ AC_EGREP_CPP([yes],[ #include #ifdef ]$1[ yes #endif ], [gl_cv_header_errno_h_]$1[=yes], [gl_cv_header_errno_h_]$1[=no]) if test $gl_cv_header_errno_h_]$1[ = no; then AC_EGREP_CPP([yes],[ #define _XOPEN_SOURCE_EXTENDED 1 #include #ifdef ]$1[ yes #endif ], [gl_cv_header_errno_h_]$1[=hidden]) if test $gl_cv_header_errno_h_]$1[ = hidden; then dnl The macro exists but is hidden. dnl Define it to the same value. AC_COMPUTE_INT([gl_cv_header_errno_h_]$1, $1, [ #define _XOPEN_SOURCE_EXTENDED 1 #include /* The following two lines are a workaround against an autoconf-2.52 bug. */ #include #include ]) fi fi ]) case $gl_cv_header_errno_h_]$1[ in yes | no) ]$1[_HIDDEN=0; ]$1[_VALUE= ;; *) ]$1[_HIDDEN=1; ]$1[_VALUE="$gl_cv_header_errno_h_]$1[" ;; esac AC_SUBST($1[_HIDDEN]) AC_SUBST($1[_VALUE]) fi ]) make-4.3/m4/strerror.m40000644000175000017500000000717113611136472011674 00000000000000# strerror.m4 serial 21 dnl Copyright (C) 2002, 2007-2020 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. AC_DEFUN([gl_FUNC_STRERROR], [ AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) AC_REQUIRE([gl_HEADER_ERRNO_H]) AC_REQUIRE([gl_FUNC_STRERROR_0]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles m4_ifdef([gl_FUNC_STRERROR_R_WORKS], [ AC_REQUIRE([gl_FUNC_STRERROR_R_WORKS]) ]) if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then AC_CACHE_CHECK([for working strerror function], [gl_cv_func_working_strerror], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[if (!*strerror (-2)) return 1;]])], [gl_cv_func_working_strerror=yes], [gl_cv_func_working_strerror=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_working_strerror="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_working_strerror="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_working_strerror="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_working_strerror" in *yes) ;; *) dnl The system's strerror() fails to return a string for out-of-range dnl integers. Replace it. REPLACE_STRERROR=1 ;; esac m4_ifdef([gl_FUNC_STRERROR_R_WORKS], [ dnl If the system's strerror_r or __xpg_strerror_r clobbers strerror's dnl buffer, we must replace strerror. case "$gl_cv_func_strerror_r_works" in *no) REPLACE_STRERROR=1 ;; esac ]) else dnl The system's strerror() cannot know about the new errno values we add dnl to , or any fix for strerror(0). Replace it. REPLACE_STRERROR=1 fi ]) dnl Detect if strerror(0) passes (that is, does not set errno, and does not dnl return a string that matches strerror(-1)). AC_DEFUN([gl_FUNC_STRERROR_0], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles REPLACE_STRERROR_0=0 AC_CACHE_CHECK([whether strerror(0) succeeds], [gl_cv_func_strerror_0_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include #include ]], [[int result = 0; char *str; errno = 0; str = strerror (0); if (!*str) result |= 1; if (errno) result |= 2; if (strstr (str, "nknown") || strstr (str, "ndefined")) result |= 4; return result;]])], [gl_cv_func_strerror_0_works=yes], [gl_cv_func_strerror_0_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_strerror_0_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_strerror_0_works="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_strerror_0_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_strerror_0_works="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_strerror_0_works" in *yes) ;; *) REPLACE_STRERROR_0=1 AC_DEFINE([REPLACE_STRERROR_0], [1], [Define to 1 if strerror(0) does not return a message implying success.]) ;; esac ]) make-4.3/m4/ssize_t.m40000644000175000017500000000146313611136472011470 00000000000000# ssize_t.m4 serial 5 (gettext-0.18.2) dnl Copyright (C) 2001-2003, 2006, 2010-2020 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 Bruno Haible. dnl Test whether ssize_t is defined. AC_DEFUN([gt_TYPE_SSIZE_T], [ AC_CACHE_CHECK([for ssize_t], [gt_cv_ssize_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[int x = sizeof (ssize_t *) + sizeof (ssize_t); return !x;]])], [gt_cv_ssize_t=yes], [gt_cv_ssize_t=no])]) if test $gt_cv_ssize_t = no; then AC_DEFINE([ssize_t], [int], [Define as a signed type of the same size as size_t.]) fi ]) make-4.3/m4/acinclude.m40000644000175000017500000001157213603564437011750 00000000000000dnl acinclude.m4 -- Extra macros needed for GNU make. dnl dnl Automake will incorporate this into its generated aclocal.m4. dnl Copyright (C) 1998-2020 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 dnl the terms of the GNU General Public License as published by the Free dnl Software Foundation; either version 3 of the License, or (at your option) dnl any later version. dnl dnl GNU Make is distributed in the hope that it will be useful, but WITHOUT dnl ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or dnl FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for. dnl more details. dnl dnl You should have received a copy of the GNU General Public License along dnl with this program. If not, see . dnl --------------------------------------------------------------------------- dnl Got this from the lynx 2.8 distribution. dnl by T.E.Dickey dnl and Jim Spath dnl and Philippe De Muyter dnl dnl Created: 1997/1/28 dnl Updated: 1997/12/23 dnl --------------------------------------------------------------------------- dnl After checking for functions in the default $LIBS, make a further check dnl for the functions that are netlib-related (these aren't always in the dnl libc, etc., and have to be handled specially because there are conflicting dnl and broken implementations. dnl Common library requirements (in order): dnl -lresolv -lsocket -lnsl dnl -lnsl -lsocket dnl -lsocket dnl -lbsd AC_DEFUN([CF_NETLIBS],[ cf_test_netlibs=no AC_MSG_CHECKING(for network libraries) AC_CACHE_VAL(cf_cv_netlibs,[ AC_MSG_RESULT(working...) cf_cv_netlibs="" cf_test_netlibs=yes AC_CHECK_FUNCS(gethostname,,[ CF_RECHECK_FUNC(gethostname,nsl,cf_cv_netlibs,[ CF_RECHECK_FUNC(gethostname,socket,cf_cv_netlibs)])]) # # FIXME: sequent needs this library (i.e., -lsocket -linet -lnsl), but # I don't know the entrypoints - 97/7/22 TD AC_CHECK_LIB(inet,main,cf_cv_netlibs="-linet $cf_cv_netlibs") # if test "$ac_cv_func_lsocket" != no ; then AC_CHECK_FUNCS(socket,,[ CF_RECHECK_FUNC(socket,socket,cf_cv_netlibs,[ CF_RECHECK_FUNC(socket,bsd,cf_cv_netlibs)])]) fi # AC_CHECK_FUNCS(gethostbyname,,[ CF_RECHECK_FUNC(gethostbyname,nsl,cf_cv_netlibs)]) ]) LIBS="$LIBS $cf_cv_netlibs" test $cf_test_netlibs = no && echo "$cf_cv_netlibs" >&AC_FD_MSG ])dnl dnl --------------------------------------------------------------------------- dnl Re-check on a function to see if we can pick it up by adding a library. dnl $1 = function to check dnl $2 = library to check in dnl $3 = environment to update (e.g., $LIBS) dnl $4 = what to do if this fails dnl dnl This uses 'unset' if the shell happens to support it, but leaves the dnl configuration variable set to 'unknown' if not. This is a little better dnl than the normal autoconf test, which gives misleading results if a test dnl for the function is made (e.g., with AC_CHECK_FUNC) after this macro is dnl used (autoconf does not distinguish between a null token and one that is dnl set to 'no'). AC_DEFUN([CF_RECHECK_FUNC],[ AC_CHECK_LIB($2,$1,[ CF_UPPER(cf_tr_func,$1) AC_DEFINE_UNQUOTED(HAVE_$cf_tr_func,1,[Define if you have function $1]) ac_cv_func_$1=yes $3="-l$2 [$]$3"],[ ac_cv_func_$1=unknown unset ac_cv_func_$1 2>/dev/null $4], [[$]$3]) ])dnl dnl --------------------------------------------------------------------------- dnl Make an uppercase version of a variable dnl $1=uppercase($2) AC_DEFUN([CF_UPPER], [ changequote(,)dnl $1=`echo $2 | tr '[a-z]' '[A-Z]'` changequote([,])dnl ])dnl dnl --------------------------------------------------------------------------- dnl From Paul Eggert dnl Update for Darwin by Troy Runkel dnl Update for AIX by Olexiy Buyanskyy (Savannah bug 32485) AC_DEFUN([AC_STRUCT_ST_MTIM_NSEC], [AC_CACHE_CHECK([for nanoseconds field of struct stat], ac_cv_struct_st_mtim_nsec, [ac_save_CPPFLAGS="$CPPFLAGS" ac_cv_struct_st_mtim_nsec=no # st_mtim.tv_nsec -- the usual case # st_mtim._tv_nsec -- Solaris 2.6, if # (defined _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED == 1 # && !defined __EXTENSIONS__) # st_mtim.st__tim.tv_nsec -- UnixWare 2.1.2 # st_mtime_n -- AIX 5.2 and above # st_mtimespec.tv_nsec -- Darwin (Mac OSX) for ac_val in st_mtim.tv_nsec st_mtim._tv_nsec st_mtim.st__tim.tv_nsec st_mtime_n st_mtimespec.tv_nsec; do CPPFLAGS="$ac_save_CPPFLAGS -DST_MTIM_NSEC=$ac_val" AC_TRY_COMPILE([#include #include ], [struct stat s; s.ST_MTIM_NSEC;], [ac_cv_struct_st_mtim_nsec=$ac_val; break]) done CPPFLAGS="$ac_save_CPPFLAGS" ]) if test $ac_cv_struct_st_mtim_nsec != no; then AC_DEFINE_UNQUOTED([ST_MTIM_NSEC], [$ac_cv_struct_st_mtim_nsec], [Define if struct stat contains a nanoseconds field]) fi ] ) make-4.3/m4/progtest.m40000644000175000017500000000604013611136462011652 00000000000000# 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. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered 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 Authors: dnl Ulrich Drepper , 1996. AC_PREREQ([2.50]) # Search path for a program which passes the given test. dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) AC_DEFUN([AM_PATH_PROG_WITH_TEST], [ # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # 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, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL([ac_cv_path_$1], [case "[$]$1" in [[\\/]]* | ?:[[\\/]]*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in ifelse([$5], , $PATH, [$5]); do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$][$1]) else AC_MSG_RESULT([no]) fi AC_SUBST([$1])dnl ]) make-4.3/m4/nls.m40000644000175000017500000000231513611136462010600 00000000000000# nls.m4 serial 5 (gettext-0.18) 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, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered 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 Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. AC_PREREQ([2.50]) AC_DEFUN([AM_NLS], [ AC_MSG_CHECKING([whether NLS is requested]) dnl Default is enabled NLS AC_ARG_ENABLE([nls], [ --disable-nls do not use Native Language Support], USE_NLS=$enableval, USE_NLS=yes) AC_MSG_RESULT([$USE_NLS]) AC_SUBST([USE_NLS]) ]) make-4.3/m4/msvc-nothrow.m40000644000175000017500000000053013611136472012450 00000000000000# msvc-nothrow.m4 serial 1 dnl Copyright (C) 2011-2020 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. AC_DEFUN([gl_MSVC_NOTHROW], [ AC_REQUIRE([gl_MSVC_INVAL]) ]) make-4.3/m4/lib-link.m40000644000175000017500000010044313611136462011506 00000000000000# 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. dnl From Bruno Haible. AC_PREREQ([2.54]) dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and dnl augments the CPPFLAGS variable. dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) 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" ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" ac_cv_lib[]Name[]_cppflags="$INC[]NAME" ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX" ]) LIB[]NAME="$ac_cv_lib[]Name[]_libs" LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" INC[]NAME="$ac_cv_lib[]Name[]_cppflags" LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) AC_SUBST([LIB]NAME[_PREFIX]) dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the dnl results of this search when this library appears as a dependency. HAVE_LIB[]NAME=yes popdef([NAME]) popdef([Name]) ]) dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode, [missing-message]) dnl searches for libname and the libraries corresponding to explicit and dnl implicit dependencies, together with the specified include files and dnl the ability to compile and link the specified testcode. The missing-message dnl defaults to 'no' and may contain additional hints for the user. dnl If found, it sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} dnl and LTLIB${NAME} variables and augments the CPPFLAGS variable, and dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) 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. AC_LIB_LINKFLAGS_BODY([$1], [$2]) dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, dnl because if the user has installed lib[]Name and not disabled its use dnl via --without-lib[]Name-prefix, he wants to use it. ac_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ ac_save_LIBS="$LIBS" dnl If $LIB[]NAME contains some -l options, add it to the end of LIBS, dnl because these -l options might require -L options that are present in dnl LIBS. -l options benefit only from the -L options listed before it. dnl Otherwise, add it to the front of LIBS, because it may be a static dnl library that depends on another static library that is present in LIBS. dnl Static libraries benefit only from the static libraries listed after dnl it. case " $LIB[]NAME" in *" -l"*) LIBS="$LIBS $LIB[]NAME" ;; *) LIBS="$LIB[]NAME $LIBS" ;; esac 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" ]) if test "$ac_cv_lib[]Name" = yes; then HAVE_LIB[]NAME=yes AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the lib][$1 library.]) AC_MSG_CHECKING([how to link with lib[]$1]) AC_MSG_RESULT([$LIB[]NAME]) else HAVE_LIB[]NAME=no dnl If $LIB[]NAME didn't lead to a usable library, we don't need dnl $INC[]NAME either. CPPFLAGS="$ac_save_CPPFLAGS" LIB[]NAME= LTLIB[]NAME= LIB[]NAME[]_PREFIX= fi AC_SUBST([HAVE_LIB]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) AC_SUBST([LIB]NAME[_PREFIX]) popdef([NAME]) popdef([Name]) ]) 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, dnl acl_hardcode_minus_L. AC_DEFUN([AC_LIB_RPATH], [ dnl Tell automake >= 1.10 to complain if config.rpath is missing. m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])]) AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done ]) wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" dnl Determine whether the user wants rpath handling at all. AC_ARG_ENABLE([rpath], [ --disable-rpath do not hardcode runtime library paths], :, enable_rpath=yes) ]) dnl AC_LIB_FROMPACKAGE(name, package) dnl declares that libname comes from the given package. The configure file dnl will then not have a --with-libname-prefix option but a dnl --with-package-prefix option. Several libraries can come from the same 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],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) define([acl_frompackage_]NAME, [$2]) popdef([NAME]) pushdef([PACK],[$2]) pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) define([acl_libsinpackage_]PACKUP, m4_ifdef([acl_libsinpackage_]PACKUP, [m4_defn([acl_libsinpackage_]PACKUP)[, ]],)[lib$1]) popdef([PACKUP]) popdef([PACK]) ]) dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_LINKFLAGS_BODY], [ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])]) 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],[m4_translit(PACK,[.],[_])],PACK)]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_ARG_WITH(P_A_C_K[-prefix], [[ --with-]]P_A_C_K[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib --without-]]P_A_C_K[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" if test "$acl_libdirstem2" != "$acl_libdirstem" \ && ! test -d "$withval/$acl_libdirstem"; then additional_libdir="$withval/$acl_libdirstem2" fi fi fi ]) dnl Search the library and its dependencies in $additional_libdir and dnl $LDFLAGS. Using breadth-first-seach. LIB[]NAME= LTLIB[]NAME= INC[]NAME= LIB[]NAME[]_PREFIX= dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been dnl computed. So it has to be reset here. HAVE_LIB[]NAME= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='$1 $2' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then 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____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" else dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined dnl that this library doesn't exist. So just drop it. : fi else dnl Search the library lib$name in $additional_libdir and $LDFLAGS dnl and the already constructed $LIBNAME/$LTLIBNAME. found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" dnl The same code as in the loop below: dnl First look for a shared library. if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` dnl First look for a shared library. if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then dnl Found the library. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then dnl Linking with a shared library. We attempt to hardcode its dnl directory into the executable's runpath, unless it's the dnl standard /usr/lib. if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then dnl No hardcoding is needed. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl Use an explicit option to hardcode DIR into the resulting dnl binary. dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi dnl The hardcoding into $LIBNAME is system dependent. if test "$acl_hardcode_direct" = yes; then dnl Using DIR/libNAME.so during linking hardcodes DIR into the dnl resulting binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode DIR into the resulting dnl binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else dnl Rely on "-L$found_dir". dnl But don't add it if it's already contained in the LDFLAGS dnl or the already constructed $LIBNAME haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH dnl here, because this doesn't fit in flags passed to the dnl compiler. So give up. No hardcoding. This affects only dnl very old systems. dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then dnl Linking with a static library. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" else dnl We shouldn't come here, but anyway it's good to have a dnl fallback. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" fi fi dnl Assume the include files are nearby. additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = '$1'; then LIB[]NAME[]_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = '$1'; then LIB[]NAME[]_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then dnl Potentially add $additional_includedir to $INCNAME. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's /usr/local/include and we are using GCC on Linux, dnl 3. if it's already present in $CPPFLAGS or the already dnl constructed $INCNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INC[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $INCNAME. INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" fi fi fi fi fi dnl Look for dependencies. if test -n "$found_la"; then dnl Read the .la file. It defines the variables dnl dlname, library_names, old_library, dependency_libs, current, dnl age, revision, installed, dlopen, dlpreopen, libdir. save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" dnl We use only dependency_libs. for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's /usr/local/lib and we are using GCC on Linux, dnl 3. if it's already present in $LDFLAGS or the already dnl constructed $LIBNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LIBNAME. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LTLIBNAME. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dnl Handle this in the next round. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) dnl Handle this in the next round. Throw away the .la's dnl directory; it is already contained in a preceding -L dnl option. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) dnl Most likely an immediate library name. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" ;; esac done fi else dnl Didn't find the library; assume it is in the system directories dnl known to the linker and runtime loader. (All the system dnl directories known to the linker should also be known to the dnl runtime loader, otherwise the system is severely misconfigured.) LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user must dnl pass all path elements in one option. We can arrange that for a dnl single library, but not when more than one $LIBNAMEs are used. alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl. acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" else dnl The -rpath options are cumulative. for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then dnl When using libtool, the option that works for both libraries and dnl executables is -R. The -R options are cumulative. for found_dir in $ltrpathdirs; do LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" done fi popdef([P_A_C_K]) popdef([PACKLIBS]) popdef([PACKUP]) popdef([PACK]) popdef([NAME]) ]) dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, dnl unless already present in VAR. dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes dnl contains two or three consecutive elements that belong together. AC_DEFUN([AC_LIB_APPENDTOVAR], [ for element in [$2]; do haveit= for x in $[$1]; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then [$1]="${[$1]}${[$1]:+ }$element" fi done ]) dnl For those cases where a variable contains several -L and -l options dnl referring to unknown libraries and directories, this macro determines the dnl necessary additional linker options for the runtime path. dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) dnl sets LDADDVAR to linker options needed together with LIBSVALUE. dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, dnl otherwise linking without libtool is assumed. AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], [ AC_REQUIRE([AC_LIB_RPATH]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) $1= if test "$enable_rpath" != no; then if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode directories into the resulting dnl binary. rpathdirs= next= for opt in $2; do if test -n "$next"; then dir="$next" dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem" \ && test "X$dir" != "X/usr/$acl_libdirstem2"; then rpathdirs="$rpathdirs $dir" fi next= else case $opt in -L) next=yes ;; -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem" \ && test "X$dir" != "X/usr/$acl_libdirstem2"; then rpathdirs="$rpathdirs $dir" fi next= ;; *) next= ;; esac fi done if test "X$rpathdirs" != "X"; then if test -n ""$3""; then dnl libtool is used for linking. Use -R options. for dir in $rpathdirs; do $1="${$1}${$1:+ }-R$dir" done else dnl The linker is used for linking directly. if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user dnl must pass all path elements in one option. alldirs= for dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="$flag" else dnl The -rpath options are cumulative. for dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="${$1}${$1:+ }$flag" done fi fi fi fi fi AC_SUBST([$1]) ]) make-4.3/m4/string_h.m40000644000175000017500000001311113611136472011616 00000000000000# Configure a GNU-like replacement for . # Copyright (C) 2007-2020 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. # serial 22 # Written by Paul Eggert. AC_DEFUN([gl_HEADER_STRING_H], [ dnl Use AC_REQUIRE here, so that the default behavior below is expanded dnl once only, before all statements that occur in other macros. AC_REQUIRE([gl_HEADER_STRING_H_BODY]) ]) AC_DEFUN([gl_HEADER_STRING_H_BODY], [ AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) gl_NEXT_HEADERS([string.h]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, and which is not dnl guaranteed by C89. gl_WARN_ON_USE_PREPARE([[#include ]], [ffsl ffsll memmem mempcpy memrchr rawmemchr stpcpy stpncpy strchrnul strdup strncat strndup strnlen strpbrk strsep strcasestr strtok_r strerror_r strsignal strverscmp]) ]) AC_DEFUN([gl_STRING_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS], [ GNULIB_EXPLICIT_BZERO=0; AC_SUBST([GNULIB_EXPLICIT_BZERO]) GNULIB_FFSL=0; AC_SUBST([GNULIB_FFSL]) GNULIB_FFSLL=0; AC_SUBST([GNULIB_FFSLL]) GNULIB_MEMCHR=0; AC_SUBST([GNULIB_MEMCHR]) GNULIB_MEMMEM=0; AC_SUBST([GNULIB_MEMMEM]) GNULIB_MEMPCPY=0; AC_SUBST([GNULIB_MEMPCPY]) GNULIB_MEMRCHR=0; AC_SUBST([GNULIB_MEMRCHR]) GNULIB_RAWMEMCHR=0; AC_SUBST([GNULIB_RAWMEMCHR]) GNULIB_STPCPY=0; AC_SUBST([GNULIB_STPCPY]) GNULIB_STPNCPY=0; AC_SUBST([GNULIB_STPNCPY]) GNULIB_STRCHRNUL=0; AC_SUBST([GNULIB_STRCHRNUL]) GNULIB_STRDUP=0; AC_SUBST([GNULIB_STRDUP]) GNULIB_STRNCAT=0; AC_SUBST([GNULIB_STRNCAT]) GNULIB_STRNDUP=0; AC_SUBST([GNULIB_STRNDUP]) GNULIB_STRNLEN=0; AC_SUBST([GNULIB_STRNLEN]) GNULIB_STRPBRK=0; AC_SUBST([GNULIB_STRPBRK]) GNULIB_STRSEP=0; AC_SUBST([GNULIB_STRSEP]) GNULIB_STRSTR=0; AC_SUBST([GNULIB_STRSTR]) GNULIB_STRCASESTR=0; AC_SUBST([GNULIB_STRCASESTR]) GNULIB_STRTOK_R=0; AC_SUBST([GNULIB_STRTOK_R]) GNULIB_MBSLEN=0; AC_SUBST([GNULIB_MBSLEN]) GNULIB_MBSNLEN=0; AC_SUBST([GNULIB_MBSNLEN]) GNULIB_MBSCHR=0; AC_SUBST([GNULIB_MBSCHR]) GNULIB_MBSRCHR=0; AC_SUBST([GNULIB_MBSRCHR]) GNULIB_MBSSTR=0; AC_SUBST([GNULIB_MBSSTR]) GNULIB_MBSCASECMP=0; AC_SUBST([GNULIB_MBSCASECMP]) GNULIB_MBSNCASECMP=0; AC_SUBST([GNULIB_MBSNCASECMP]) GNULIB_MBSPCASECMP=0; AC_SUBST([GNULIB_MBSPCASECMP]) GNULIB_MBSCASESTR=0; AC_SUBST([GNULIB_MBSCASESTR]) GNULIB_MBSCSPN=0; AC_SUBST([GNULIB_MBSCSPN]) GNULIB_MBSPBRK=0; AC_SUBST([GNULIB_MBSPBRK]) GNULIB_MBSSPN=0; AC_SUBST([GNULIB_MBSSPN]) GNULIB_MBSSEP=0; AC_SUBST([GNULIB_MBSSEP]) GNULIB_MBSTOK_R=0; AC_SUBST([GNULIB_MBSTOK_R]) GNULIB_STRERROR=0; AC_SUBST([GNULIB_STRERROR]) GNULIB_STRERROR_R=0; AC_SUBST([GNULIB_STRERROR_R]) GNULIB_STRSIGNAL=0; AC_SUBST([GNULIB_STRSIGNAL]) GNULIB_STRVERSCMP=0; AC_SUBST([GNULIB_STRVERSCMP]) HAVE_MBSLEN=0; AC_SUBST([HAVE_MBSLEN]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_EXPLICIT_BZERO=1; AC_SUBST([HAVE_EXPLICIT_BZERO]) HAVE_FFSL=1; AC_SUBST([HAVE_FFSL]) HAVE_FFSLL=1; AC_SUBST([HAVE_FFSLL]) HAVE_MEMCHR=1; AC_SUBST([HAVE_MEMCHR]) HAVE_DECL_MEMMEM=1; AC_SUBST([HAVE_DECL_MEMMEM]) HAVE_MEMPCPY=1; AC_SUBST([HAVE_MEMPCPY]) HAVE_DECL_MEMRCHR=1; AC_SUBST([HAVE_DECL_MEMRCHR]) HAVE_RAWMEMCHR=1; AC_SUBST([HAVE_RAWMEMCHR]) HAVE_STPCPY=1; AC_SUBST([HAVE_STPCPY]) HAVE_STPNCPY=1; AC_SUBST([HAVE_STPNCPY]) HAVE_STRCHRNUL=1; AC_SUBST([HAVE_STRCHRNUL]) HAVE_DECL_STRDUP=1; AC_SUBST([HAVE_DECL_STRDUP]) HAVE_DECL_STRNDUP=1; AC_SUBST([HAVE_DECL_STRNDUP]) HAVE_DECL_STRNLEN=1; AC_SUBST([HAVE_DECL_STRNLEN]) HAVE_STRPBRK=1; AC_SUBST([HAVE_STRPBRK]) HAVE_STRSEP=1; AC_SUBST([HAVE_STRSEP]) HAVE_STRCASESTR=1; AC_SUBST([HAVE_STRCASESTR]) HAVE_DECL_STRTOK_R=1; AC_SUBST([HAVE_DECL_STRTOK_R]) HAVE_DECL_STRERROR_R=1; AC_SUBST([HAVE_DECL_STRERROR_R]) HAVE_DECL_STRSIGNAL=1; AC_SUBST([HAVE_DECL_STRSIGNAL]) HAVE_STRVERSCMP=1; AC_SUBST([HAVE_STRVERSCMP]) REPLACE_MEMCHR=0; AC_SUBST([REPLACE_MEMCHR]) REPLACE_MEMMEM=0; AC_SUBST([REPLACE_MEMMEM]) REPLACE_STPNCPY=0; AC_SUBST([REPLACE_STPNCPY]) REPLACE_STRCHRNUL=0; AC_SUBST([REPLACE_STRCHRNUL]) REPLACE_STRDUP=0; AC_SUBST([REPLACE_STRDUP]) REPLACE_STRNCAT=0; AC_SUBST([REPLACE_STRNCAT]) REPLACE_STRNDUP=0; AC_SUBST([REPLACE_STRNDUP]) REPLACE_STRNLEN=0; AC_SUBST([REPLACE_STRNLEN]) REPLACE_STRSTR=0; AC_SUBST([REPLACE_STRSTR]) REPLACE_STRCASESTR=0; AC_SUBST([REPLACE_STRCASESTR]) REPLACE_STRTOK_R=0; AC_SUBST([REPLACE_STRTOK_R]) REPLACE_STRERROR=0; AC_SUBST([REPLACE_STRERROR]) REPLACE_STRERROR_R=0; AC_SUBST([REPLACE_STRERROR_R]) REPLACE_STRSIGNAL=0; AC_SUBST([REPLACE_STRSIGNAL]) UNDEFINE_STRTOK_R=0; AC_SUBST([UNDEFINE_STRTOK_R]) ]) make-4.3/m4/stdio_h.m40000644000175000017500000002522713611136472011445 00000000000000# stdio_h.m4 serial 49 dnl Copyright (C) 2007-2020 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. AC_DEFUN([gl_STDIO_H], [ AH_VERBATIM([MINGW_ANSI_STDIO], [/* Use GNU style printf and scanf. */ #ifndef __USE_MINGW_ANSI_STDIO # undef __USE_MINGW_ANSI_STDIO #endif ]) AC_DEFINE([__USE_MINGW_ANSI_STDIO]) AC_REQUIRE([gl_STDIO_H_DEFAULTS]) gl_NEXT_HEADERS([stdio.h]) dnl Determine whether __USE_MINGW_ANSI_STDIO makes printf and dnl inttypes.h behave like gnu instead of system; we must give our dnl printf wrapper the right attribute to match. AC_CACHE_CHECK([which flavor of printf attribute matches inttypes macros], [gl_cv_func_printf_attribute_flavor], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #define __STDC_FORMAT_MACROS 1 #include #include /* For non-mingw systems, compilation will trivially succeed. For mingw, compilation will succeed for older mingw (system printf, "I64d") and fail for newer mingw (gnu printf, "lld"). */ #if (defined _WIN32 && ! defined __CYGWIN__) && \ (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) extern char PRIdMAX_probe[sizeof PRIdMAX == sizeof "I64d" ? 1 : -1]; #endif ]])], [gl_cv_func_printf_attribute_flavor=system], [gl_cv_func_printf_attribute_flavor=gnu])]) if test "$gl_cv_func_printf_attribute_flavor" = gnu; then AC_DEFINE([GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU], [1], [Define to 1 if printf and friends should be labeled with attribute "__gnu_printf__" instead of "__printf__"]) fi dnl No need to create extra modules for these functions. Everyone who uses dnl likely needs them. GNULIB_FSCANF=1 gl_MODULE_INDICATOR([fscanf]) GNULIB_SCANF=1 gl_MODULE_INDICATOR([scanf]) GNULIB_FGETC=1 GNULIB_GETC=1 GNULIB_GETCHAR=1 GNULIB_FGETS=1 GNULIB_FREAD=1 dnl This ifdef is necessary to avoid an error "missing file lib/stdio-read.c" dnl "expected source file, required through AC_LIBSOURCES, not found". It is dnl also an optimization, to avoid performing a configure check whose result dnl is not used. But it does not make the test of GNULIB_STDIO_H_NONBLOCKING dnl or GNULIB_NONBLOCKING redundant. m4_ifdef([gl_NONBLOCKING_IO], [ gl_NONBLOCKING_IO if test $gl_cv_have_nonblocking != yes; then REPLACE_STDIO_READ_FUNCS=1 AC_LIBOBJ([stdio-read]) fi ]) dnl No need to create extra modules for these functions. Everyone who uses dnl likely needs them. GNULIB_FPRINTF=1 GNULIB_PRINTF=1 GNULIB_VFPRINTF=1 GNULIB_VPRINTF=1 GNULIB_FPUTC=1 GNULIB_PUTC=1 GNULIB_PUTCHAR=1 GNULIB_FPUTS=1 GNULIB_PUTS=1 GNULIB_FWRITE=1 dnl This ifdef is necessary to avoid an error "missing file lib/stdio-write.c" dnl "expected source file, required through AC_LIBSOURCES, not found". It is dnl also an optimization, to avoid performing a configure check whose result dnl is not used. But it does not make the test of GNULIB_STDIO_H_SIGPIPE or dnl GNULIB_SIGPIPE redundant. m4_ifdef([gl_SIGNAL_SIGPIPE], [ gl_SIGNAL_SIGPIPE if test $gl_cv_header_signal_h_SIGPIPE != yes; then REPLACE_STDIO_WRITE_FUNCS=1 AC_LIBOBJ([stdio-write]) fi ]) dnl This ifdef is necessary to avoid an error "missing file lib/stdio-write.c" dnl "expected source file, required through AC_LIBSOURCES, not found". It is dnl also an optimization, to avoid performing a configure check whose result dnl is not used. But it does not make the test of GNULIB_STDIO_H_NONBLOCKING dnl or GNULIB_NONBLOCKING redundant. m4_ifdef([gl_NONBLOCKING_IO], [ gl_NONBLOCKING_IO if test $gl_cv_have_nonblocking != yes; then REPLACE_STDIO_WRITE_FUNCS=1 AC_LIBOBJ([stdio-write]) fi ]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, and which is not dnl guaranteed by both C89 and C11. gl_WARN_ON_USE_PREPARE([[#include ]], [dprintf fpurge fseeko ftello getdelim getline gets pclose popen renameat snprintf tmpfile vdprintf vsnprintf]) ]) AC_DEFUN([gl_STDIO_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_STDIO_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) AC_DEFUN([gl_STDIO_H_DEFAULTS], [ GNULIB_DPRINTF=0; AC_SUBST([GNULIB_DPRINTF]) GNULIB_FCLOSE=0; AC_SUBST([GNULIB_FCLOSE]) GNULIB_FDOPEN=0; AC_SUBST([GNULIB_FDOPEN]) GNULIB_FFLUSH=0; AC_SUBST([GNULIB_FFLUSH]) GNULIB_FGETC=0; AC_SUBST([GNULIB_FGETC]) GNULIB_FGETS=0; AC_SUBST([GNULIB_FGETS]) GNULIB_FOPEN=0; AC_SUBST([GNULIB_FOPEN]) GNULIB_FPRINTF=0; AC_SUBST([GNULIB_FPRINTF]) GNULIB_FPRINTF_POSIX=0; AC_SUBST([GNULIB_FPRINTF_POSIX]) GNULIB_FPURGE=0; AC_SUBST([GNULIB_FPURGE]) GNULIB_FPUTC=0; AC_SUBST([GNULIB_FPUTC]) GNULIB_FPUTS=0; AC_SUBST([GNULIB_FPUTS]) GNULIB_FREAD=0; AC_SUBST([GNULIB_FREAD]) GNULIB_FREOPEN=0; AC_SUBST([GNULIB_FREOPEN]) GNULIB_FSCANF=0; AC_SUBST([GNULIB_FSCANF]) GNULIB_FSEEK=0; AC_SUBST([GNULIB_FSEEK]) GNULIB_FSEEKO=0; AC_SUBST([GNULIB_FSEEKO]) GNULIB_FTELL=0; AC_SUBST([GNULIB_FTELL]) GNULIB_FTELLO=0; AC_SUBST([GNULIB_FTELLO]) GNULIB_FWRITE=0; AC_SUBST([GNULIB_FWRITE]) GNULIB_GETC=0; AC_SUBST([GNULIB_GETC]) GNULIB_GETCHAR=0; AC_SUBST([GNULIB_GETCHAR]) GNULIB_GETDELIM=0; AC_SUBST([GNULIB_GETDELIM]) GNULIB_GETLINE=0; AC_SUBST([GNULIB_GETLINE]) GNULIB_OBSTACK_PRINTF=0; AC_SUBST([GNULIB_OBSTACK_PRINTF]) GNULIB_OBSTACK_PRINTF_POSIX=0; AC_SUBST([GNULIB_OBSTACK_PRINTF_POSIX]) GNULIB_PCLOSE=0; AC_SUBST([GNULIB_PCLOSE]) GNULIB_PERROR=0; AC_SUBST([GNULIB_PERROR]) GNULIB_POPEN=0; AC_SUBST([GNULIB_POPEN]) GNULIB_PRINTF=0; AC_SUBST([GNULIB_PRINTF]) GNULIB_PRINTF_POSIX=0; AC_SUBST([GNULIB_PRINTF_POSIX]) GNULIB_PUTC=0; AC_SUBST([GNULIB_PUTC]) GNULIB_PUTCHAR=0; AC_SUBST([GNULIB_PUTCHAR]) GNULIB_PUTS=0; AC_SUBST([GNULIB_PUTS]) GNULIB_REMOVE=0; AC_SUBST([GNULIB_REMOVE]) GNULIB_RENAME=0; AC_SUBST([GNULIB_RENAME]) GNULIB_RENAMEAT=0; AC_SUBST([GNULIB_RENAMEAT]) GNULIB_SCANF=0; AC_SUBST([GNULIB_SCANF]) GNULIB_SNPRINTF=0; AC_SUBST([GNULIB_SNPRINTF]) GNULIB_SPRINTF_POSIX=0; AC_SUBST([GNULIB_SPRINTF_POSIX]) GNULIB_STDIO_H_NONBLOCKING=0; AC_SUBST([GNULIB_STDIO_H_NONBLOCKING]) GNULIB_STDIO_H_SIGPIPE=0; AC_SUBST([GNULIB_STDIO_H_SIGPIPE]) GNULIB_TMPFILE=0; AC_SUBST([GNULIB_TMPFILE]) GNULIB_VASPRINTF=0; AC_SUBST([GNULIB_VASPRINTF]) GNULIB_VFSCANF=0; AC_SUBST([GNULIB_VFSCANF]) GNULIB_VSCANF=0; AC_SUBST([GNULIB_VSCANF]) GNULIB_VDPRINTF=0; AC_SUBST([GNULIB_VDPRINTF]) GNULIB_VFPRINTF=0; AC_SUBST([GNULIB_VFPRINTF]) GNULIB_VFPRINTF_POSIX=0; AC_SUBST([GNULIB_VFPRINTF_POSIX]) GNULIB_VPRINTF=0; AC_SUBST([GNULIB_VPRINTF]) GNULIB_VPRINTF_POSIX=0; AC_SUBST([GNULIB_VPRINTF_POSIX]) GNULIB_VSNPRINTF=0; AC_SUBST([GNULIB_VSNPRINTF]) GNULIB_VSPRINTF_POSIX=0; AC_SUBST([GNULIB_VSPRINTF_POSIX]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_DECL_FPURGE=1; AC_SUBST([HAVE_DECL_FPURGE]) HAVE_DECL_FSEEKO=1; AC_SUBST([HAVE_DECL_FSEEKO]) HAVE_DECL_FTELLO=1; AC_SUBST([HAVE_DECL_FTELLO]) HAVE_DECL_GETDELIM=1; AC_SUBST([HAVE_DECL_GETDELIM]) HAVE_DECL_GETLINE=1; AC_SUBST([HAVE_DECL_GETLINE]) HAVE_DECL_OBSTACK_PRINTF=1; AC_SUBST([HAVE_DECL_OBSTACK_PRINTF]) HAVE_DECL_SNPRINTF=1; AC_SUBST([HAVE_DECL_SNPRINTF]) HAVE_DECL_VSNPRINTF=1; AC_SUBST([HAVE_DECL_VSNPRINTF]) HAVE_DPRINTF=1; AC_SUBST([HAVE_DPRINTF]) HAVE_FSEEKO=1; AC_SUBST([HAVE_FSEEKO]) HAVE_FTELLO=1; AC_SUBST([HAVE_FTELLO]) HAVE_PCLOSE=1; AC_SUBST([HAVE_PCLOSE]) HAVE_POPEN=1; AC_SUBST([HAVE_POPEN]) HAVE_RENAMEAT=1; AC_SUBST([HAVE_RENAMEAT]) HAVE_VASPRINTF=1; AC_SUBST([HAVE_VASPRINTF]) HAVE_VDPRINTF=1; AC_SUBST([HAVE_VDPRINTF]) REPLACE_DPRINTF=0; AC_SUBST([REPLACE_DPRINTF]) REPLACE_FCLOSE=0; AC_SUBST([REPLACE_FCLOSE]) REPLACE_FDOPEN=0; AC_SUBST([REPLACE_FDOPEN]) REPLACE_FFLUSH=0; AC_SUBST([REPLACE_FFLUSH]) REPLACE_FOPEN=0; AC_SUBST([REPLACE_FOPEN]) REPLACE_FPRINTF=0; AC_SUBST([REPLACE_FPRINTF]) REPLACE_FPURGE=0; AC_SUBST([REPLACE_FPURGE]) REPLACE_FREOPEN=0; AC_SUBST([REPLACE_FREOPEN]) REPLACE_FSEEK=0; AC_SUBST([REPLACE_FSEEK]) REPLACE_FSEEKO=0; AC_SUBST([REPLACE_FSEEKO]) REPLACE_FTELL=0; AC_SUBST([REPLACE_FTELL]) REPLACE_FTELLO=0; AC_SUBST([REPLACE_FTELLO]) REPLACE_GETDELIM=0; AC_SUBST([REPLACE_GETDELIM]) REPLACE_GETLINE=0; AC_SUBST([REPLACE_GETLINE]) REPLACE_OBSTACK_PRINTF=0; AC_SUBST([REPLACE_OBSTACK_PRINTF]) REPLACE_PERROR=0; AC_SUBST([REPLACE_PERROR]) REPLACE_POPEN=0; AC_SUBST([REPLACE_POPEN]) REPLACE_PRINTF=0; AC_SUBST([REPLACE_PRINTF]) REPLACE_REMOVE=0; AC_SUBST([REPLACE_REMOVE]) REPLACE_RENAME=0; AC_SUBST([REPLACE_RENAME]) REPLACE_RENAMEAT=0; AC_SUBST([REPLACE_RENAMEAT]) REPLACE_SNPRINTF=0; AC_SUBST([REPLACE_SNPRINTF]) REPLACE_SPRINTF=0; AC_SUBST([REPLACE_SPRINTF]) REPLACE_STDIO_READ_FUNCS=0; AC_SUBST([REPLACE_STDIO_READ_FUNCS]) REPLACE_STDIO_WRITE_FUNCS=0; AC_SUBST([REPLACE_STDIO_WRITE_FUNCS]) REPLACE_TMPFILE=0; AC_SUBST([REPLACE_TMPFILE]) REPLACE_VASPRINTF=0; AC_SUBST([REPLACE_VASPRINTF]) REPLACE_VDPRINTF=0; AC_SUBST([REPLACE_VDPRINTF]) REPLACE_VFPRINTF=0; AC_SUBST([REPLACE_VFPRINTF]) REPLACE_VPRINTF=0; AC_SUBST([REPLACE_VPRINTF]) REPLACE_VSNPRINTF=0; AC_SUBST([REPLACE_VSNPRINTF]) REPLACE_VSPRINTF=0; AC_SUBST([REPLACE_VSPRINTF]) ]) make-4.3/m4/getloadavg.m40000644000175000017500000001250013611136472012117 00000000000000# Check for getloadavg. # Copyright (C) 1992-1996, 1999-2000, 2002-2003, 2006, 2008-2020 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. #serial 8 # Autoconf defines AC_FUNC_GETLOADAVG, but that is obsolescent. # New applications should use gl_GETLOADAVG instead. # gl_GETLOADAVG # ------------- AC_DEFUN([gl_GETLOADAVG], [AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) # Persuade glibc to declare getloadavg(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) gl_save_LIBS=$LIBS # getloadavg is present in libc on glibc >= 2.2, Mac OS X, FreeBSD >= 2.0, # NetBSD >= 0.9, OpenBSD >= 2.0, Solaris >= 7. HAVE_GETLOADAVG=1 AC_CHECK_FUNC([getloadavg], [], [gl_func_getloadavg_done=no # Some systems with -lutil have (and need) -lkvm as well, some do not. # On Solaris, -lkvm requires nlist from -lelf, so check that first # to get the right answer into the cache. # For kstat on solaris, we need to test for libelf and libkvm to force the # definition of SVR4 below. if test $gl_func_getloadavg_done = no; then AC_CHECK_LIB([elf], [elf_begin], [LIBS="-lelf $LIBS"]) AC_CHECK_LIB([kvm], [kvm_open], [LIBS="-lkvm $LIBS"]) # Check for the 4.4BSD definition of getloadavg. AC_CHECK_LIB([util], [getloadavg], [LIBS="-lutil $LIBS" gl_func_getloadavg_done=yes]) fi if test $gl_func_getloadavg_done = no; then # There is a commonly available library for RS/6000 AIX. # Since it is not a standard part of AIX, it might be installed locally. gl_getloadavg_LIBS=$LIBS LIBS="-L/usr/local/lib $LIBS" AC_CHECK_LIB([getloadavg], [getloadavg], [LIBS="-lgetloadavg $LIBS" gl_func_getloadavg_done=yes], [LIBS=$gl_getloadavg_LIBS]) fi # Set up the replacement function if necessary. if test $gl_func_getloadavg_done = no; then HAVE_GETLOADAVG=0 # Solaris has libkstat which does not require root. AC_CHECK_LIB([kstat], [kstat_open]) test $ac_cv_lib_kstat_kstat_open = yes && gl_func_getloadavg_done=yes # AIX has libperfstat which does not require root if test $gl_func_getloadavg_done = no; then AC_CHECK_LIB([perfstat], [perfstat_cpu_total]) test $ac_cv_lib_perfstat_perfstat_cpu_total = yes && gl_func_getloadavg_done=yes fi if test $gl_func_getloadavg_done = no; then AC_CHECK_HEADER([sys/dg_sys_info.h], [gl_func_getloadavg_done=yes AC_DEFINE([DGUX], [1], [Define to 1 for DGUX with .]) AC_CHECK_LIB([dgc], [dg_sys_info])]) fi fi]) if test "x$gl_save_LIBS" = x; then GETLOADAVG_LIBS=$LIBS else GETLOADAVG_LIBS=`echo "$LIBS" | sed "s!$gl_save_LIBS!!"` fi LIBS=$gl_save_LIBS AC_SUBST([GETLOADAVG_LIBS])dnl # Test whether the system declares getloadavg. Solaris has the function # but declares it in , not . AC_CHECK_HEADERS([sys/loadavg.h]) if test $ac_cv_header_sys_loadavg_h = yes; then HAVE_SYS_LOADAVG_H=1 else HAVE_SYS_LOADAVG_H=0 fi AC_CHECK_DECL([getloadavg], [], [HAVE_DECL_GETLOADAVG=0], [[#if HAVE_SYS_LOADAVG_H /* OpenIndiana has a bug: must be included before . */ # include # include #endif #include ]]) ])# gl_GETLOADAVG # gl_PREREQ_GETLOADAVG # -------------------- # Set up the AC_LIBOBJ replacement of 'getloadavg'. AC_DEFUN([gl_PREREQ_GETLOADAVG], [ # Figure out what our getloadavg.c needs. AC_CHECK_HEADERS_ONCE([sys/param.h unistd.h]) # On HPUX9, an unprivileged user can get load averages this way. if test $gl_func_getloadavg_done = no; then AC_CHECK_FUNCS([pstat_getdynamic], [gl_func_getloadavg_done=yes]) fi # We cannot check for , because Solaris 2 does not use dwarf (it # uses stabs), but it is still SVR4. We cannot check for because # Irix 4.0.5F has the header but not the library. if test $gl_func_getloadavg_done = no && test "$ac_cv_lib_elf_elf_begin" = yes \ && test "$ac_cv_lib_kvm_kvm_open" = yes; then gl_func_getloadavg_done=yes AC_DEFINE([SVR4], [1], [Define to 1 on System V Release 4.]) fi if test $gl_func_getloadavg_done = no; then AC_CHECK_HEADER([inq_stats/cpustats.h], [gl_func_getloadavg_done=yes AC_DEFINE([UMAX], [1], [Define to 1 for Encore UMAX.]) AC_DEFINE([UMAX4_3], [1], [Define to 1 for Encore UMAX 4.3 that has instead of .])]) fi if test $gl_func_getloadavg_done = no; then AC_CHECK_HEADER([sys/cpustats.h], [gl_func_getloadavg_done=yes; AC_DEFINE([UMAX])]) fi if test $gl_func_getloadavg_done = no; then AC_CHECK_HEADERS([mach/mach.h]) fi AC_CHECK_HEADERS([nlist.h], [AC_CHECK_MEMBERS([struct nlist.n_un.n_name], [], [], [@%:@include ]) AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], [[struct nlist x; #ifdef HAVE_STRUCT_NLIST_N_UN_N_NAME x.n_un.n_name = ""; #else x.n_name = ""; #endif]])], [AC_DEFINE([N_NAME_POINTER], [1], [Define to 1 if the nlist n_name member is a pointer])]) ])dnl ])# gl_PREREQ_GETLOADAVG make-4.3/m4/dospaths.m40000644000175000017500000000261513603564437011644 00000000000000# Test if the system uses DOS-style pathnames (drive specs and backslashes) # By Paul Smith . Based on dos.m4 by Jim Meyering. # # Copyright (C) 1993-2020 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 . AC_DEFUN([pds_AC_DOS_PATHS], [ AC_CACHE_CHECK([whether system uses MSDOS-style paths], [ac_cv_dos_paths], [ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #if !defined _WIN32 && !defined __WIN32__ && !defined __MSDOS__ && !defined __EMX__ && !defined __MSYS__ && !defined __CYGWIN__ neither MSDOS nor Windows nor OS2 #endif ]])], [ac_cv_dos_paths=yes], [ac_cv_dos_paths=no])]) AS_IF([test x"$ac_cv_dos_paths" = xyes], [ AC_DEFINE_UNQUOTED([HAVE_DOS_PATHS], 1, [Define if the system uses DOS-style pathnames.])]) ]) make-4.3/m4/absolute-header.m40000644000175000017500000001034713611136472013055 00000000000000# absolute-header.m4 serial 16 dnl Copyright (C) 2006-2020 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 Derek Price. # gl_ABSOLUTE_HEADER(HEADER1 HEADER2 ...) # --------------------------------------- # Find the absolute name of a header file, testing first if the header exists. # If the header were sys/inttypes.h, this macro would define # ABSOLUTE_SYS_INTTYPES_H to the '""' quoted absolute name of sys/inttypes.h # in config.h # (e.g. '#define ABSOLUTE_SYS_INTTYPES_H "///usr/include/sys/inttypes.h"'). # The three "///" are to pacify Sun C 5.8, which otherwise would say # "warning: #include of /usr/include/... may be non-portable". # Use '""', not '<>', so that the /// cannot be confused with a C99 comment. # Note: This macro assumes that the header file is not empty after # preprocessing, i.e. it does not only define preprocessor macros but also # provides some type/enum definitions or function/variable declarations. AC_DEFUN([gl_ABSOLUTE_HEADER], [AC_REQUIRE([AC_CANONICAL_HOST]) AC_LANG_PREPROC_REQUIRE()dnl dnl FIXME: gl_absolute_header and ac_header_exists must be used unquoted dnl until we can assume autoconf 2.64 or newer. m4_foreach_w([gl_HEADER_NAME], [$1], [AS_VAR_PUSHDEF([gl_absolute_header], [gl_cv_absolute_]m4_defn([gl_HEADER_NAME]))dnl AC_CACHE_CHECK([absolute name of <]m4_defn([gl_HEADER_NAME])[>], m4_defn([gl_absolute_header]), [AS_VAR_PUSHDEF([ac_header_exists], [ac_cv_header_]m4_defn([gl_HEADER_NAME]))dnl AC_CHECK_HEADERS_ONCE(m4_defn([gl_HEADER_NAME]))dnl if test AS_VAR_GET(ac_header_exists) = yes; then gl_ABSOLUTE_HEADER_ONE(m4_defn([gl_HEADER_NAME])) fi AS_VAR_POPDEF([ac_header_exists])dnl ])dnl AC_DEFINE_UNQUOTED(AS_TR_CPP([ABSOLUTE_]m4_defn([gl_HEADER_NAME])), ["AS_VAR_GET(gl_absolute_header)"], [Define this to an absolute name of <]m4_defn([gl_HEADER_NAME])[>.]) AS_VAR_POPDEF([gl_absolute_header])dnl ])dnl ])# gl_ABSOLUTE_HEADER # gl_ABSOLUTE_HEADER_ONE(HEADER) # ------------------------------ # Like gl_ABSOLUTE_HEADER, except that: # - it assumes that the header exists, # - it uses the current CPPFLAGS, # - it does not cache the result, # - it is silent. AC_DEFUN([gl_ABSOLUTE_HEADER_ONE], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_LANG_CONFTEST([AC_LANG_SOURCE([[#include <]]m4_dquote([$1])[[>]])]) dnl AIX "xlc -E" and "cc -E" omit #line directives for header files dnl that contain only a #include of other header files and no dnl non-comment tokens of their own. This leads to a failure to dnl detect the absolute name of , , dnl and others. The workaround is to force preservation of comments dnl through option -C. This ensures all necessary #line directives dnl are present. GCC supports option -C as well. case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac changequote(,) case "$host_os" in mingw*) dnl For the sake of native Windows compilers (excluding gcc), dnl treat backslash as a directory separator, like /. dnl Actually, these compilers use a double-backslash as dnl directory separator, inside the dnl # line "filename" dnl directives. gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac dnl A sed expression that turns a string into a basic regular dnl expression, for use within "/.../". gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo '$1' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' changequote([,]) dnl eval is necessary to expand gl_absname_cpp. dnl Ultrix and Pyramid sh refuse to redirect output of eval, dnl so use subshell. AS_VAR_SET([gl_cv_absolute_]AS_TR_SH([[$1]]), [`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD | sed -n "$gl_absolute_header_sed"`]) ]) make-4.3/m4/fcntl-o.m40000644000175000017500000001120213611136472011342 00000000000000# fcntl-o.m4 serial 6 dnl Copyright (C) 2006, 2009-2020 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 Written by Paul Eggert. AC_PREREQ([2.60]) # Test whether the flags O_NOATIME and O_NOFOLLOW actually work. # Define HAVE_WORKING_O_NOATIME to 1 if O_NOATIME works, or to 0 otherwise. # Define HAVE_WORKING_O_NOFOLLOW to 1 if O_NOFOLLOW works, or to 0 otherwise. AC_DEFUN([gl_FCNTL_O_FLAGS], [ dnl Persuade glibc to define O_NOATIME and O_NOFOLLOW. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_HEADERS_ONCE([unistd.h]) AC_CHECK_FUNCS_ONCE([symlink]) AC_CACHE_CHECK([for working fcntl.h], [gl_cv_header_working_fcntl_h], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include #include #if HAVE_UNISTD_H # include #else /* on Windows with MSVC */ # include # include # defined sleep(n) _sleep ((n) * 1000) #endif #include #ifndef O_NOATIME #define O_NOATIME 0 #endif #ifndef O_NOFOLLOW #define O_NOFOLLOW 0 #endif static int const constants[] = { O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND, O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY }; ]], [[ int result = !constants; #if HAVE_SYMLINK { static char const sym[] = "conftest.sym"; if (symlink ("/dev/null", sym) != 0) result |= 2; else { int fd = open (sym, O_WRONLY | O_NOFOLLOW | O_CREAT, 0); if (fd >= 0) { close (fd); result |= 4; } } if (unlink (sym) != 0 || symlink (".", sym) != 0) result |= 2; else { int fd = open (sym, O_RDONLY | O_NOFOLLOW); if (fd >= 0) { close (fd); result |= 4; } } unlink (sym); } #endif { static char const file[] = "confdefs.h"; int fd = open (file, O_RDONLY | O_NOATIME); if (fd < 0) result |= 8; else { struct stat st0; if (fstat (fd, &st0) != 0) result |= 16; else { char c; sleep (1); if (read (fd, &c, 1) != 1) result |= 24; else { if (close (fd) != 0) result |= 32; else { struct stat st1; if (stat (file, &st1) != 0) result |= 40; else if (st0.st_atime != st1.st_atime) result |= 64; } } } } } return result;]])], [gl_cv_header_working_fcntl_h=yes], [case $? in #( 4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #( 64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #( 68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #( *) gl_cv_header_working_fcntl_h='no';; esac], [case "$host_os" in # Guess 'no' on native Windows. mingw*) gl_cv_header_working_fcntl_h='no' ;; *) gl_cv_header_working_fcntl_h=cross-compiling ;; esac ]) ]) case $gl_cv_header_working_fcntl_h in #( *O_NOATIME* | no | cross-compiling) ac_val=0;; #( *) ac_val=1;; esac AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOATIME], [$ac_val], [Define to 1 if O_NOATIME works.]) case $gl_cv_header_working_fcntl_h in #( *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #( *) ac_val=1;; esac AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOFOLLOW], [$ac_val], [Define to 1 if O_NOFOLLOW works.]) ]) make-4.3/m4/sys_types_h.m40000644000175000017500000000337313611136472012363 00000000000000# sys_types_h.m4 serial 9 dnl Copyright (C) 2011-2020 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. AC_DEFUN_ONCE([gl_SYS_TYPES_H], [ dnl Use sane struct stat types in OpenVMS 8.2 and later. AC_DEFINE([_USE_STD_STAT], 1, [For standard stat data types on VMS.]) AC_REQUIRE([gl_SYS_TYPES_H_DEFAULTS]) gl_NEXT_HEADERS([sys/types.h]) dnl Ensure the type pid_t gets defined. AC_REQUIRE([AC_TYPE_PID_T]) dnl Ensure the type mode_t gets defined. AC_REQUIRE([AC_TYPE_MODE_T]) dnl Whether to override the 'off_t' type. AC_REQUIRE([gl_TYPE_OFF_T]) dnl Whether to override the 'dev_t' and 'ino_t' types. m4_ifdef([gl_WINDOWS_STAT_INODES], [ AC_REQUIRE([gl_WINDOWS_STAT_INODES]) ], [ WINDOWS_STAT_INODES=0 ]) AC_SUBST([WINDOWS_STAT_INODES]) ]) AC_DEFUN([gl_SYS_TYPES_H_DEFAULTS], [ ]) # This works around a buggy version in autoconf <= 2.69. # See m4_version_prereq([2.70], [], [ # This is taken from the following Autoconf patch: # https://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=e17a30e987d7ee695fb4294a82d987ec3dc9b974 m4_undefine([AC_HEADER_MAJOR]) AC_DEFUN([AC_HEADER_MAJOR], [AC_CHECK_HEADERS_ONCE([sys/types.h]) AC_CHECK_HEADER([sys/mkdev.h], [AC_DEFINE([MAJOR_IN_MKDEV], [1], [Define to 1 if `major', `minor', and `makedev' are declared in .])]) if test $ac_cv_header_sys_mkdev_h = no; then AC_CHECK_HEADER([sys/sysmacros.h], [AC_DEFINE([MAJOR_IN_SYSMACROS], [1], [Define to 1 if `major', `minor', and `makedev' are declared in .])]) fi ]) ]) make-4.3/m4/off_t.m40000644000175000017500000000100613611136472011076 00000000000000# off_t.m4 serial 1 dnl Copyright (C) 2012-2020 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 Check whether to override the 'off_t' type. dnl Set WINDOWS_64_BIT_OFF_T. AC_DEFUN([gl_TYPE_OFF_T], [ m4_ifdef([gl_LARGEFILE], [ AC_REQUIRE([gl_LARGEFILE]) ], [ WINDOWS_64_BIT_OFF_T=0 ]) AC_SUBST([WINDOWS_64_BIT_OFF_T]) ]) make-4.3/m4/alloca.m40000644000175000017500000001057113611136472011243 00000000000000# alloca.m4 serial 15 dnl Copyright (C) 2002-2004, 2006-2007, 2009-2020 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, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ALLOCA], [ AC_REQUIRE([AC_FUNC_ALLOCA]) if test $ac_cv_func_alloca_works = no; then gl_PREREQ_ALLOCA fi # Define an additional variable used in the Makefile substitution. if test $ac_cv_working_alloca_h = yes; then AC_CACHE_CHECK([for alloca as a compiler built-in], [gl_cv_rpl_alloca], [ AC_EGREP_CPP([Need own alloca], [ #if defined __GNUC__ || defined _AIX || defined _MSC_VER Need own alloca #endif ], [gl_cv_rpl_alloca=yes], [gl_cv_rpl_alloca=no]) ]) if test $gl_cv_rpl_alloca = yes; then dnl OK, alloca can be implemented through a compiler built-in. AC_DEFINE([HAVE_ALLOCA], [1], [Define to 1 if you have 'alloca' after including , a header that may be supplied by this distribution.]) ALLOCA_H=alloca.h else dnl alloca exists as a library function, i.e. it is slow and probably dnl a memory leak. Don't define HAVE_ALLOCA in this case. ALLOCA_H= fi else ALLOCA_H=alloca.h fi AC_SUBST([ALLOCA_H]) AM_CONDITIONAL([GL_GENERATE_ALLOCA_H], [test -n "$ALLOCA_H"]) if test $ac_cv_working_alloca_h = yes; then HAVE_ALLOCA_H=1 else HAVE_ALLOCA_H=0 fi AC_SUBST([HAVE_ALLOCA_H]) ]) # Prerequisites of lib/alloca.c. # STACK_DIRECTION is already handled by AC_FUNC_ALLOCA. AC_DEFUN([gl_PREREQ_ALLOCA], [:]) # This works around a bug in autoconf <= 2.68. # See . m4_version_prereq([2.69], [] ,[ # This is taken from the following Autoconf patch: # https://git.savannah.gnu.org/gitweb/?p=autoconf.git;a=commitdiff;h=6cd9f12520b0d6f76d3230d7565feba1ecf29497 # _AC_LIBOBJ_ALLOCA # ----------------- # Set up the LIBOBJ replacement of 'alloca'. Well, not exactly # AC_LIBOBJ since we actually set the output variable 'ALLOCA'. # Nevertheless, for Automake, AC_LIBSOURCES it. m4_define([_AC_LIBOBJ_ALLOCA], [# The SVR3 libPW and SVR4 libucb both contain incompatible functions # that cause trouble. Some versions do not even contain alloca or # contain a buggy version. If you still want to use their alloca, # use ar to extract alloca.o from them instead of compiling alloca.c. AC_LIBSOURCES(alloca.c) AC_SUBST([ALLOCA], [\${LIBOBJDIR}alloca.$ac_objext])dnl AC_DEFINE(C_ALLOCA, 1, [Define to 1 if using 'alloca.c'.]) AC_CACHE_CHECK(whether 'alloca.c' needs Cray hooks, ac_cv_os_cray, [AC_EGREP_CPP(webecray, [#if defined CRAY && ! defined CRAY2 webecray #else wenotbecray #endif ], ac_cv_os_cray=yes, ac_cv_os_cray=no)]) if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; do AC_CHECK_FUNC($ac_func, [AC_DEFINE_UNQUOTED(CRAY_STACKSEG_END, $ac_func, [Define to one of '_getb67', 'GETB67', 'getb67' for Cray-2 and Cray-YMP systems. This function is required for 'alloca.c' support on those systems.]) break]) done fi AC_CACHE_CHECK([stack direction for C alloca], [ac_cv_c_stack_direction], [AC_RUN_IFELSE([AC_LANG_SOURCE( [AC_INCLUDES_DEFAULT int find_stack_direction (int *addr, int depth) { int dir, dummy = 0; if (! addr) addr = &dummy; *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; dir = depth ? find_stack_direction (addr, depth - 1) : 0; return dir + dummy; } int main (int argc, char **argv) { return find_stack_direction (0, argc + !argv + 20) < 0; }])], [ac_cv_c_stack_direction=1], [ac_cv_c_stack_direction=-1], [ac_cv_c_stack_direction=0])]) AH_VERBATIM([STACK_DIRECTION], [/* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at runtime. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ @%:@undef STACK_DIRECTION])dnl AC_DEFINE_UNQUOTED(STACK_DIRECTION, $ac_cv_c_stack_direction) ])# _AC_LIBOBJ_ALLOCA ]) make-4.3/m4/stdbool.m40000644000175000017500000000763513611136472011465 00000000000000# Check for stdbool.h that conforms to C99. dnl Copyright (C) 2002-2006, 2009-2020 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. #serial 8 # Prepare for substituting if it is not supported. AC_DEFUN([AM_STDBOOL_H], [ AC_REQUIRE([AC_CHECK_HEADER_STDBOOL]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl On some platforms, does not exist or does not conform to C99. dnl On Solaris 10 with CC=cc CXX=CC, exists but is not usable dnl in C++ mode (and no exists). In this case, we use our dnl replacement, also in C mode (for binary compatibility between C and C++). if test "$ac_cv_header_stdbool_h" = yes; then case "$host_os" in solaris*) if test -z "$GCC"; then STDBOOL_H='stdbool.h' else STDBOOL_H='' fi ;; *) STDBOOL_H='' ;; esac else STDBOOL_H='stdbool.h' fi AC_SUBST([STDBOOL_H]) AM_CONDITIONAL([GL_GENERATE_STDBOOL_H], [test -n "$STDBOOL_H"]) if test "$ac_cv_type__Bool" = yes; then HAVE__BOOL=1 else HAVE__BOOL=0 fi AC_SUBST([HAVE__BOOL]) ]) # AM_STDBOOL_H will be renamed to gl_STDBOOL_H in the future. AC_DEFUN([gl_STDBOOL_H], [AM_STDBOOL_H]) # This version of the macro is needed in autoconf <= 2.68. AC_DEFUN([AC_CHECK_HEADER_STDBOOL], [AC_CACHE_CHECK([for stdbool.h that conforms to C99], [ac_cv_header_stdbool_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #include #ifdef __cplusplus typedef bool Bool; #else typedef _Bool Bool; #ifndef bool "error: bool is not defined" #endif #ifndef false "error: false is not defined" #endif #if false "error: false is not 0" #endif #ifndef true "error: true is not defined" #endif #if true != 1 "error: true is not 1" #endif #endif #ifndef __bool_true_false_are_defined "error: __bool_true_false_are_defined is not defined" #endif struct s { Bool s: 1; Bool t; bool u: 1; bool v; } s; char a[true == 1 ? 1 : -1]; char b[false == 0 ? 1 : -1]; char c[__bool_true_false_are_defined == 1 ? 1 : -1]; char d[(bool) 0.5 == true ? 1 : -1]; /* See body of main program for 'e'. */ char f[(Bool) 0.0 == false ? 1 : -1]; char g[true]; char h[sizeof (Bool)]; char i[sizeof s.t]; enum { j = false, k = true, l = false * true, m = true * 256 }; /* The following fails for HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ Bool n[m]; char o[sizeof n == m * sizeof n[0] ? 1 : -1]; char p[-1 - (Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; /* Catch a bug in an HP-UX C compiler. See https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html https://lists.gnu.org/r/bug-coreutils/2005-11/msg00161.html */ Bool q = true; Bool *pq = &q; bool *qq = &q; ]], [[ bool e = &s; *pq |= q; *pq |= ! q; *qq |= q; *qq |= ! q; /* Refer to every declared value, to avoid compiler optimizations. */ return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + !m + !n + !o + !p + !q + !pq + !qq); ]])], [ac_cv_header_stdbool_h=yes], [ac_cv_header_stdbool_h=no])]) AC_CHECK_TYPES([_Bool]) ]) make-4.3/m4/xalloc.m40000644000175000017500000000047213611136472011271 00000000000000# xalloc.m4 serial 18 dnl Copyright (C) 2002-2006, 2009-2020 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. AC_DEFUN([gl_XALLOC], [:]) make-4.3/m4/extensions.m40000644000175000017500000001572713611136472012217 00000000000000# serial 18 -*- Autoconf -*- # Enable extensions on systems that normally disable them. # Copyright (C) 2003, 2006-2020 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. # This definition of AC_USE_SYSTEM_EXTENSIONS is stolen from git # Autoconf. Perhaps we can remove this once we can assume Autoconf # 2.70 or later everywhere, but since Autoconf mutates rapidly # enough in this area it's likely we'll need to redefine # AC_USE_SYSTEM_EXTENSIONS for quite some time. # If autoconf reports a warning # warning: AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS # or warning: AC_RUN_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS # the fix is # 1) to ensure that AC_USE_SYSTEM_EXTENSIONS is never directly invoked # but always AC_REQUIREd, # 2) to ensure that for each occurrence of # AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) # or # AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) # the corresponding gnulib module description has 'extensions' among # its dependencies. This will ensure that the gl_USE_SYSTEM_EXTENSIONS # invocation occurs in gl_EARLY, not in gl_INIT. # AC_USE_SYSTEM_EXTENSIONS # ------------------------ # Enable extensions on systems that normally disable them, # typically due to standards-conformance issues. # # Remember that #undef in AH_VERBATIM gets replaced with #define by # AC_DEFINE. The goal here is to define all known feature-enabling # macros, then, if reports of conflicts are made, disable macros that # cause problems on some platforms (such as __EXTENSIONS__). AC_DEFUN_ONCE([AC_USE_SYSTEM_EXTENSIONS], [AC_BEFORE([$0], [AC_COMPILE_IFELSE])dnl AC_BEFORE([$0], [AC_RUN_IFELSE])dnl AC_CHECK_HEADER([minix/config.h], [MINIX=yes], [MINIX=]) if test "$MINIX" = yes; then AC_DEFINE([_POSIX_SOURCE], [1], [Define to 1 if you need to in order for 'stat' and other things to work.]) AC_DEFINE([_POSIX_1_SOURCE], [2], [Define to 2 if the system does not provide POSIX.1 features except with this defined.]) AC_DEFINE([_MINIX], [1], [Define to 1 if on MINIX.]) AC_DEFINE([_NETBSD_SOURCE], [1], [Define to 1 to make NetBSD features available. MINIX 3 needs this.]) fi dnl Use a different key than __EXTENSIONS__, as that name broke existing dnl configure.ac when using autoheader 2.62. AH_VERBATIM([USE_SYSTEM_EXTENSIONS], [/* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable general extensions on macOS. */ #ifndef _DARWIN_C_SOURCE # undef _DARWIN_C_SOURCE #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif /* Enable NetBSD extensions on NetBSD. */ #ifndef _NETBSD_SOURCE # undef _NETBSD_SOURCE #endif /* Enable OpenBSD extensions on NetBSD. */ #ifndef _OPENBSD_SOURCE # undef _OPENBSD_SOURCE #endif /* Enable threading extensions on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif /* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ #ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ # undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ # undef __STDC_WANT_IEC_60559_BFP_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ #ifndef __STDC_WANT_IEC_60559_DFP_EXT__ # undef __STDC_WANT_IEC_60559_DFP_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ #ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ # undef __STDC_WANT_IEC_60559_FUNCS_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-3:2015. */ #ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ # undef __STDC_WANT_IEC_60559_TYPES_EXT__ #endif /* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ #ifndef __STDC_WANT_LIB_EXT2__ # undef __STDC_WANT_LIB_EXT2__ #endif /* Enable extensions specified by ISO/IEC 24747:2009. */ #ifndef __STDC_WANT_MATH_SPEC_FUNCS__ # undef __STDC_WANT_MATH_SPEC_FUNCS__ #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif /* Enable X/Open extensions if necessary. HP-UX 11.11 defines mbstate_t only if _XOPEN_SOURCE is defined to 500, regardless of whether compiling with -Ae or -D_HPUX_SOURCE=1. */ #ifndef _XOPEN_SOURCE # undef _XOPEN_SOURCE #endif /* Enable X/Open compliant socket functions that do not require linking with -lxnet on HP-UX 11.11. */ #ifndef _HPUX_ALT_XOPEN_SOCKET_API # undef _HPUX_ALT_XOPEN_SOCKET_API #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif ]) AC_CACHE_CHECK([whether it is safe to define __EXTENSIONS__], [ac_cv_safe_to_define___extensions__], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ # define __EXTENSIONS__ 1 ]AC_INCLUDES_DEFAULT])], [ac_cv_safe_to_define___extensions__=yes], [ac_cv_safe_to_define___extensions__=no])]) test $ac_cv_safe_to_define___extensions__ = yes && AC_DEFINE([__EXTENSIONS__]) AC_DEFINE([_ALL_SOURCE]) AC_DEFINE([_DARWIN_C_SOURCE]) AC_DEFINE([_GNU_SOURCE]) AC_DEFINE([_NETBSD_SOURCE]) AC_DEFINE([_OPENBSD_SOURCE]) AC_DEFINE([_POSIX_PTHREAD_SEMANTICS]) AC_DEFINE([__STDC_WANT_IEC_60559_ATTRIBS_EXT__]) AC_DEFINE([__STDC_WANT_IEC_60559_BFP_EXT__]) AC_DEFINE([__STDC_WANT_IEC_60559_DFP_EXT__]) AC_DEFINE([__STDC_WANT_IEC_60559_FUNCS_EXT__]) AC_DEFINE([__STDC_WANT_IEC_60559_TYPES_EXT__]) AC_DEFINE([__STDC_WANT_LIB_EXT2__]) AC_DEFINE([__STDC_WANT_MATH_SPEC_FUNCS__]) AC_DEFINE([_TANDEM_SOURCE]) AC_CACHE_CHECK([whether _XOPEN_SOURCE should be defined], [ac_cv_should_define__xopen_source], [ac_cv_should_define__xopen_source=no AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #include mbstate_t x;]])], [], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #define _XOPEN_SOURCE 500 #include mbstate_t x;]])], [ac_cv_should_define__xopen_source=yes])])]) test $ac_cv_should_define__xopen_source = yes && AC_DEFINE([_XOPEN_SOURCE], [500]) AC_DEFINE([_HPUX_ALT_XOPEN_SOCKET_API]) ])# AC_USE_SYSTEM_EXTENSIONS # gl_USE_SYSTEM_EXTENSIONS # ------------------------ # Enable extensions on systems that normally disable them, # typically due to standards-conformance issues. AC_DEFUN_ONCE([gl_USE_SYSTEM_EXTENSIONS], [ dnl Require this macro before AC_USE_SYSTEM_EXTENSIONS. dnl gnulib does not need it. But if it gets required by third-party macros dnl after AC_USE_SYSTEM_EXTENSIONS is required, autoconf 2.62..2.63 emit a dnl warning: "AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS". dnl Note: We can do this only for one of the macros AC_AIX, AC_GNU_SOURCE, dnl AC_MINIX. If people still use AC_AIX or AC_MINIX, they are out of luck. AC_REQUIRE([AC_GNU_SOURCE]) AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) ]) make-4.3/m4/gettext.m40000644000175000017500000003561513611136462011501 00000000000000# 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. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered 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 Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2006, 2008-2010. dnl Macro to add for using GNU gettext. dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The dnl default (if it is not specified or empty) is 'no-libtool'. dnl INTLSYMBOL should be 'external' for packages with no intl directory, dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory. dnl If INTLSYMBOL is 'use-libtool', then a libtool library dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, dnl depending on --{enable,disable}-{shared,static} and on the presence of dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library dnl $(top_builddir)/intl/libintl.a will be created. dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext dnl implementations (in libc or libintl) without the ngettext() function 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 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 dnl The result of the configuration is one of three cases: dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled dnl and used. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 2) GNU gettext has been found in the system's C library. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 3) No internationalization, always use English msgid. dnl Catalog format: none dnl Catalog extension: none dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. dnl The use of .gmo is historical (it was needed to avoid overwriting the dnl GNU format catalogs when building on a platform with an X/Open gettext), dnl but we keep it in order not to force irrelevant filename changes on the dnl maintainers. dnl AC_DEFUN([AM_GNU_GETTEXT], [ dnl Argument checking. ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT ])])])])]) ifelse(ifelse([$1], [], [old])[]ifelse([$1], [no-libtool], [old]), [old], [AC_DIAGNOSE([obsolete], [Use of AM_GNU_GETTEXT without [external] argument is deprecated.])]) ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT ])])])]) define([gt_included_intl], ifelse([$1], [external], ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]), [yes])) define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], [])) gt_NEEDS_INIT AM_GNU_GETTEXT_NEED([$2]) AC_REQUIRE([AM_PO_SUBDIRS])dnl ifelse(gt_included_intl, yes, [ AC_REQUIRE([AM_INTL_SUBDIR])dnl ]) dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Sometimes libintl requires libiconv, so first search for libiconv. dnl Ideally we would do this search only after the dnl if test "$USE_NLS" = "yes"; then dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT dnl the configure script would need to contain the same shell code dnl again, outside any 'if'. There are two solutions: dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not dnl documented, we avoid it. ifelse(gt_included_intl, yes, , [ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) ]) dnl Sometimes, on Mac OS X, libintl requires linking with CoreFoundation. gt_INTL_MACOSX dnl Set USE_NLS. AC_REQUIRE([AM_NLS]) ifelse(gt_included_intl, yes, [ BUILD_INCLUDED_LIBINTL=no USE_INCLUDED_LIBINTL=no ]) LIBINTL= LTLIBINTL= POSUB= dnl Add a version number to the cache macros. case " $gt_needs " in *" need-formatstring-macros "*) gt_api_version=3 ;; *" need-ngettext "*) gt_api_version=2 ;; *) gt_api_version=1 ;; esac gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" dnl If we use NLS figure out what method if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no ifelse(gt_included_intl, yes, [ AC_MSG_CHECKING([whether included gettext is requested]) AC_ARG_WITH([included-gettext], [ --with-included-gettext use the GNU gettext library included here], nls_cv_force_use_gnu_gettext=$withval, nls_cv_force_use_gnu_gettext=no) AC_MSG_RESULT([$nls_cv_force_use_gnu_gettext]) nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" if test "$nls_cv_force_use_gnu_gettext" != "yes"; then ]) dnl User does not insist on using GNU NLS library. Figure out what dnl to use. If GNU gettext is available we use this. Else we have dnl to fall back to GNU NLS library. if test $gt_api_version -ge 3; then gt_revision_test_code=' #ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif changequote(,)dnl typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; changequote([,])dnl ' else gt_revision_test_code= fi if test $gt_api_version -ge 2; then gt_expression_test_code=' + * ngettext ("", "", 0)' else gt_expression_test_code= fi AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include $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 ]])], [eval "$gt_func_gnugettext_libc=yes"], [eval "$gt_func_gnugettext_libc=no"])]) if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then dnl Sometimes libintl requires libiconv, so first search for libiconv. ifelse(gt_included_intl, yes, , [ AM_ICONV_LINK ]) dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) dnl because that would add "-liconv" to LIBINTL and LTLIBINTL dnl even if libiconv doesn't exist. AC_LIB_LINKFLAGS_BODY([intl]) AC_CACHE_CHECK([for GNU gettext in libintl], [$gt_func_gnugettext_libintl], [gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" dnl Now see whether libintl exists and does not depend on libiconv. AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include $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 ("") ]])], [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_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include $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" ]) fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS"]) fi dnl If an already present or preinstalled GNU gettext() is found, dnl use it. But if this macro is used in GNU gettext, and GNU dnl gettext is already preinstalled in libintl, we update this dnl libintl. (Cf. the install rule in intl/Makefile.in.) if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else dnl Reset the values set by searching for libintl. LIBINTL= LTLIBINTL= INCINTL= fi ifelse(gt_included_intl, yes, [ if test "$gt_use_preinstalled_gnugettext" != "yes"; then dnl GNU gettext is not found in the C library. dnl Fall back on included GNU gettext library. nls_cv_use_gnu_gettext=yes fi fi if test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions used to generate GNU NLS library. BUILD_INCLUDED_LIBINTL=yes USE_INCLUDED_LIBINTL=yes LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD" LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD" LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` fi CATOBJEXT= if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions to use GNU gettext tools. CATOBJEXT=.gmo fi ]) if test -n "$INTL_MACOSX_LIBS"; then if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Some extra flags are needed during linking. LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" fi fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then AC_DEFINE([ENABLE_NLS], [1], [Define to 1 if translation of program messages to the user's native language is requested.]) else USE_NLS=no fi fi AC_MSG_CHECKING([whether to use NLS]) AC_MSG_RESULT([$USE_NLS]) if test "$USE_NLS" = "yes"; then AC_MSG_CHECKING([where the gettext function comes from]) if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi AC_MSG_RESULT([$gt_source]) fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then AC_MSG_CHECKING([how to link with libintl]) AC_MSG_RESULT([$LIBINTL]) AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) fi dnl For backward compatibility. Some packages may be using this. AC_DEFINE([HAVE_GETTEXT], [1], [Define if the GNU gettext() function is already present or preinstalled.]) AC_DEFINE([HAVE_DCGETTEXT], [1], [Define if the GNU dcgettext() function is already present or preinstalled.]) fi dnl We need to process the po/ directory. POSUB=po fi ifelse(gt_included_intl, yes, [ dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL dnl to 'yes' because some of the testsuite requires it. if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then BUILD_INCLUDED_LIBINTL=yes fi dnl Make all variables we use known to autoconf. AC_SUBST([BUILD_INCLUDED_LIBINTL]) AC_SUBST([USE_INCLUDED_LIBINTL]) AC_SUBST([CATOBJEXT]) dnl For backward compatibility. Some configure.ins may be using this. nls_cv_header_intl= nls_cv_header_libgt= dnl For backward compatibility. Some Makefiles may be using this. DATADIRNAME=share AC_SUBST([DATADIRNAME]) dnl For backward compatibility. Some Makefiles may be using this. INSTOBJEXT=.mo AC_SUBST([INSTOBJEXT]) dnl For backward compatibility. Some Makefiles may be using this. GENCAT=gencat AC_SUBST([GENCAT]) dnl For backward compatibility. Some Makefiles may be using this. INTLOBJS= if test "$USE_INCLUDED_LIBINTL" = yes; then INTLOBJS="\$(GETTOBJS)" fi AC_SUBST([INTLOBJS]) dnl Enable libtool support if the surrounding package wishes it. INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix AC_SUBST([INTL_LIBTOOL_SUFFIX_PREFIX]) ]) dnl For backward compatibility. Some Makefiles may be using this. INTLLIBS="$LIBINTL" AC_SUBST([INTLLIBS]) dnl Make all documented variables known to autoconf. AC_SUBST([LIBINTL]) AC_SUBST([LTLIBINTL]) AC_SUBST([POSUB]) ]) dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized. m4_define([gt_NEEDS_INIT], [ m4_divert_text([DEFAULTS], [gt_needs=]) m4_define([gt_NEEDS_INIT], []) ]) dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL]) AC_DEFUN([AM_GNU_GETTEXT_NEED], [ m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"]) ]) dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) make-4.3/m4/host-cpu-c-abi.m40000644000175000017500000005364013611136472012527 00000000000000# host-cpu-c-abi.m4 serial 13 dnl Copyright (C) 2002-2020 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 Bruno Haible and Sam Steingold. dnl Sets the HOST_CPU variable to the canonical name of the CPU. dnl Sets the HOST_CPU_C_ABI variable to the canonical name of the CPU with its dnl C language ABI (application binary interface). dnl Also defines __${HOST_CPU}__ and __${HOST_CPU_C_ABI}__ as C macros in dnl config.h. dnl dnl This canonical name can be used to select a particular assembly language dnl source file that will interoperate with C code on the given host. dnl dnl For example: dnl * 'i386' and 'sparc' are different canonical names, because code for i386 dnl will not run on SPARC CPUs and vice versa. They have different dnl instruction sets. dnl * 'sparc' and 'sparc64' are different canonical names, because code for dnl 'sparc' and code for 'sparc64' cannot be linked together: 'sparc' code dnl contains 32-bit instructions, whereas 'sparc64' code contains 64-bit dnl instructions. A process on a SPARC CPU can be in 32-bit mode or in 64-bit dnl mode, but not both. dnl * 'mips' and 'mipsn32' are different canonical names, because they use dnl different argument passing and return conventions for C functions, and dnl although the instruction set of 'mips' is a large subset of the dnl instruction set of 'mipsn32'. dnl * 'mipsn32' and 'mips64' are different canonical names, because they use dnl different sizes for the C types like 'int' and 'void *', and although dnl the instruction sets of 'mipsn32' and 'mips64' are the same. dnl * The same canonical name is used for different endiannesses. You can dnl determine the endianness through preprocessor symbols: dnl - 'arm': test __ARMEL__. dnl - 'mips', 'mipsn32', 'mips64': test _MIPSEB vs. _MIPSEL. dnl - 'powerpc64': test _BIG_ENDIAN vs. _LITTLE_ENDIAN. dnl * The same name 'i386' is used for CPUs of type i386, i486, i586 dnl (Pentium), AMD K7, Pentium II, Pentium IV, etc., because dnl - Instructions that do not exist on all of these CPUs (cmpxchg, dnl MMX, SSE, SSE2, 3DNow! etc.) are not frequently used. If your dnl assembly language source files use such instructions, you will dnl need to make the distinction. dnl - Speed of execution of the common instruction set is reasonable across dnl the entire family of CPUs. If you have assembly language source files dnl that are optimized for particular CPU types (like GNU gmp has), you dnl will need to make the distinction. dnl See . AC_DEFUN([gl_HOST_CPU_C_ABI], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_C_ASM]) AC_CACHE_CHECK([host CPU and C ABI], [gl_cv_host_cpu_c_abi], [case "$host_cpu" in changequote(,)dnl i[34567]86 ) changequote([,])dnl gl_cv_host_cpu_c_abi=i386 ;; x86_64 ) # On x86_64 systems, the C compiler may be generating code in one of # these ABIs: # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64. # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64 # with native Windows (mingw, MSVC). # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32. # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if (defined __x86_64__ || defined __amd64__ \ || defined _M_X64 || defined _M_AMD64) int ok; #else error fail #endif ]])], [AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __ILP32__ || defined _ILP32 int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=x86_64-x32], [gl_cv_host_cpu_c_abi=x86_64])], [gl_cv_host_cpu_c_abi=i386]) ;; changequote(,)dnl alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] ) changequote([,])dnl gl_cv_host_cpu_c_abi=alpha ;; arm* | aarch64 ) # Assume arm with EABI. # On arm64 systems, the C compiler may be generating code in one of # these ABIs: # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64. # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32. # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifdef __aarch64__ int ok; #else error fail #endif ]])], [AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __ILP32__ || defined _ILP32 int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=arm64-ilp32], [gl_cv_host_cpu_c_abi=arm64])], [# Don't distinguish little-endian and big-endian arm, since they # don't require different machine code for simple operations and # since the user can distinguish them through the preprocessor # defines __ARMEL__ vs. __ARMEB__. # But distinguish arm which passes floating-point arguments and # return values in integer registers (r0, r1, ...) - this is # gcc -mfloat-abi=soft or gcc -mfloat-abi=softfp - from arm which # passes them in float registers (s0, s1, ...) and double registers # (d0, d1, ...) - this is gcc -mfloat-abi=hard. GCC 4.6 or newer # sets the preprocessor defines __ARM_PCS (for the first case) and # __ARM_PCS_VFP (for the second case), but older GCC does not. echo 'double ddd; void func (double dd) { ddd = dd; }' > conftest.c # Look for a reference to the register d0 in the .s file. AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS $gl_c_asm_opt conftest.c) >/dev/null 2>&1 if LC_ALL=C grep 'd0,' conftest.$gl_asmext >/dev/null; then gl_cv_host_cpu_c_abi=armhf else gl_cv_host_cpu_c_abi=arm fi rm -f conftest* ]) ;; hppa1.0 | hppa1.1 | hppa2.0* | hppa64 ) # On hppa, the C compiler may be generating 32-bit code or 64-bit # code. In the latter case, it defines _LP64 and __LP64__. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifdef __LP64__ int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=hppa64], [gl_cv_host_cpu_c_abi=hppa]) ;; ia64* ) # On ia64 on HP-UX, the C compiler may be generating 64-bit code or # 32-bit code. In the latter case, it defines _ILP32. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifdef _ILP32 int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=ia64-ilp32], [gl_cv_host_cpu_c_abi=ia64]) ;; mips* ) # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this # at 32. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64) int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=mips64], [# In the n32 ABI, _ABIN32 is defined, _ABIO32 is not defined (but # may later get defined by ), and _MIPS_SIM == _ABIN32. # In the 32 ABI, _ABIO32 is defined, _ABIN32 is not defined (but # may later get defined by ), and _MIPS_SIM == _ABIO32. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if (_MIPS_SIM == _ABIN32) int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=mipsn32], [gl_cv_host_cpu_c_abi=mips])]) ;; powerpc* ) # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD. # No need to distinguish them here; the caller may distinguish # them based on the OS. # On powerpc64 systems, the C compiler may still be generating # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may # be generating 64-bit code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __powerpc64__ || defined _ARCH_PPC64 int ok; #else error fail #endif ]])], [# On powerpc64, there are two ABIs on Linux: The AIX compatible # one and the ELFv2 one. The latter defines _CALL_ELF=2. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined _CALL_ELF && _CALL_ELF == 2 int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=powerpc64-elfv2], [gl_cv_host_cpu_c_abi=powerpc64]) ], [gl_cv_host_cpu_c_abi=powerpc]) ;; rs6000 ) gl_cv_host_cpu_c_abi=powerpc ;; riscv32 | riscv64 ) # There are 2 architectures (with variants): rv32* and rv64*. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if __riscv_xlen == 64 int ok; #else error fail #endif ]])], [cpu=riscv64], [cpu=riscv32]) # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d. # Size of 'long' and 'void *': AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __LP64__ int ok; #else error fail #endif ]])], [main_abi=lp64], [main_abi=ilp32]) # Float ABIs: # __riscv_float_abi_double: # 'float' and 'double' are passed in floating-point registers. # __riscv_float_abi_single: # 'float' are passed in floating-point registers. # __riscv_float_abi_soft: # No values are passed in floating-point registers. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __riscv_float_abi_double int ok; #else error fail #endif ]])], [float_abi=d], [AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __riscv_float_abi_single int ok; #else error fail #endif ]])], [float_abi=f], [float_abi='']) ]) gl_cv_host_cpu_c_abi="${cpu}-${main_abi}${float_abi}" ;; s390* ) # On s390x, the C compiler may be generating 64-bit (= s390x) code # or 31-bit (= s390) code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __LP64__ || defined __s390x__ int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=s390x], [gl_cv_host_cpu_c_abi=s390]) ;; sparc | sparc64 ) # UltraSPARCs running Linux have `uname -m` = "sparc64", but the # C compiler still generates 32-bit code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __sparcv9 || defined __arch64__ int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=sparc64], [gl_cv_host_cpu_c_abi=sparc]) ;; *) gl_cv_host_cpu_c_abi="$host_cpu" ;; esac ]) dnl In most cases, $HOST_CPU and $HOST_CPU_C_ABI are the same. HOST_CPU=`echo "$gl_cv_host_cpu_c_abi" | sed -e 's/-.*//'` HOST_CPU_C_ABI="$gl_cv_host_cpu_c_abi" AC_SUBST([HOST_CPU]) AC_SUBST([HOST_CPU_C_ABI]) # This was # AC_DEFINE_UNQUOTED([__${HOST_CPU}__]) # AC_DEFINE_UNQUOTED([__${HOST_CPU_C_ABI}__]) # earlier, but KAI C++ 3.2d doesn't like this. sed -e 's/-/_/g' >> confdefs.h < #if HAVE_SYS_LOADAVG_H /* OpenIndiana has a bug: must be included before . */ # include # include #endif #if HAVE_RANDOM_H # include #endif ]], [_Exit atoll canonicalize_file_name getloadavg getsubopt grantpt initstate initstate_r mbtowc mkdtemp mkostemp mkostemps mkstemp mkstemps posix_openpt ptsname ptsname_r qsort_r random random_r reallocarray realpath rpmatch secure_getenv setenv setstate setstate_r srandom srandom_r strtod strtold strtoll strtoull unlockpt unsetenv]) ]) AC_DEFUN([gl_STDLIB_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) AC_DEFUN([gl_STDLIB_H_DEFAULTS], [ GNULIB__EXIT=0; AC_SUBST([GNULIB__EXIT]) GNULIB_ATOLL=0; AC_SUBST([GNULIB_ATOLL]) GNULIB_CALLOC_POSIX=0; AC_SUBST([GNULIB_CALLOC_POSIX]) GNULIB_CANONICALIZE_FILE_NAME=0; AC_SUBST([GNULIB_CANONICALIZE_FILE_NAME]) GNULIB_GETLOADAVG=0; AC_SUBST([GNULIB_GETLOADAVG]) GNULIB_GETSUBOPT=0; AC_SUBST([GNULIB_GETSUBOPT]) GNULIB_GRANTPT=0; AC_SUBST([GNULIB_GRANTPT]) GNULIB_MALLOC_POSIX=0; AC_SUBST([GNULIB_MALLOC_POSIX]) GNULIB_MBTOWC=0; AC_SUBST([GNULIB_MBTOWC]) GNULIB_MKDTEMP=0; AC_SUBST([GNULIB_MKDTEMP]) GNULIB_MKOSTEMP=0; AC_SUBST([GNULIB_MKOSTEMP]) GNULIB_MKOSTEMPS=0; AC_SUBST([GNULIB_MKOSTEMPS]) GNULIB_MKSTEMP=0; AC_SUBST([GNULIB_MKSTEMP]) GNULIB_MKSTEMPS=0; AC_SUBST([GNULIB_MKSTEMPS]) GNULIB_POSIX_OPENPT=0; AC_SUBST([GNULIB_POSIX_OPENPT]) GNULIB_PTSNAME=0; AC_SUBST([GNULIB_PTSNAME]) GNULIB_PTSNAME_R=0; AC_SUBST([GNULIB_PTSNAME_R]) GNULIB_PUTENV=0; AC_SUBST([GNULIB_PUTENV]) GNULIB_QSORT_R=0; AC_SUBST([GNULIB_QSORT_R]) GNULIB_RANDOM=0; AC_SUBST([GNULIB_RANDOM]) GNULIB_RANDOM_R=0; AC_SUBST([GNULIB_RANDOM_R]) GNULIB_REALLOCARRAY=0; AC_SUBST([GNULIB_REALLOCARRAY]) GNULIB_REALLOC_POSIX=0; AC_SUBST([GNULIB_REALLOC_POSIX]) GNULIB_REALPATH=0; AC_SUBST([GNULIB_REALPATH]) GNULIB_RPMATCH=0; AC_SUBST([GNULIB_RPMATCH]) GNULIB_SECURE_GETENV=0; AC_SUBST([GNULIB_SECURE_GETENV]) GNULIB_SETENV=0; AC_SUBST([GNULIB_SETENV]) GNULIB_STRTOD=0; AC_SUBST([GNULIB_STRTOD]) GNULIB_STRTOLD=0; AC_SUBST([GNULIB_STRTOLD]) GNULIB_STRTOLL=0; AC_SUBST([GNULIB_STRTOLL]) GNULIB_STRTOULL=0; AC_SUBST([GNULIB_STRTOULL]) GNULIB_SYSTEM_POSIX=0; AC_SUBST([GNULIB_SYSTEM_POSIX]) GNULIB_UNLOCKPT=0; AC_SUBST([GNULIB_UNLOCKPT]) GNULIB_UNSETENV=0; AC_SUBST([GNULIB_UNSETENV]) GNULIB_WCTOMB=0; AC_SUBST([GNULIB_WCTOMB]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE__EXIT=1; AC_SUBST([HAVE__EXIT]) HAVE_ATOLL=1; AC_SUBST([HAVE_ATOLL]) HAVE_CANONICALIZE_FILE_NAME=1; AC_SUBST([HAVE_CANONICALIZE_FILE_NAME]) HAVE_DECL_GETLOADAVG=1; AC_SUBST([HAVE_DECL_GETLOADAVG]) HAVE_GETSUBOPT=1; AC_SUBST([HAVE_GETSUBOPT]) HAVE_GRANTPT=1; AC_SUBST([HAVE_GRANTPT]) HAVE_INITSTATE=1; AC_SUBST([HAVE_INITSTATE]) HAVE_DECL_INITSTATE=1; AC_SUBST([HAVE_DECL_INITSTATE]) HAVE_MBTOWC=1; AC_SUBST([HAVE_MBTOWC]) HAVE_MKDTEMP=1; AC_SUBST([HAVE_MKDTEMP]) HAVE_MKOSTEMP=1; AC_SUBST([HAVE_MKOSTEMP]) HAVE_MKOSTEMPS=1; AC_SUBST([HAVE_MKOSTEMPS]) HAVE_MKSTEMP=1; AC_SUBST([HAVE_MKSTEMP]) HAVE_MKSTEMPS=1; AC_SUBST([HAVE_MKSTEMPS]) HAVE_POSIX_OPENPT=1; AC_SUBST([HAVE_POSIX_OPENPT]) HAVE_PTSNAME=1; AC_SUBST([HAVE_PTSNAME]) HAVE_PTSNAME_R=1; AC_SUBST([HAVE_PTSNAME_R]) HAVE_QSORT_R=1; AC_SUBST([HAVE_QSORT_R]) HAVE_RANDOM=1; AC_SUBST([HAVE_RANDOM]) HAVE_RANDOM_H=1; AC_SUBST([HAVE_RANDOM_H]) HAVE_RANDOM_R=1; AC_SUBST([HAVE_RANDOM_R]) HAVE_REALLOCARRAY=1; AC_SUBST([HAVE_REALLOCARRAY]) HAVE_REALPATH=1; AC_SUBST([HAVE_REALPATH]) HAVE_RPMATCH=1; AC_SUBST([HAVE_RPMATCH]) HAVE_SECURE_GETENV=1; AC_SUBST([HAVE_SECURE_GETENV]) HAVE_SETENV=1; AC_SUBST([HAVE_SETENV]) HAVE_DECL_SETENV=1; AC_SUBST([HAVE_DECL_SETENV]) HAVE_SETSTATE=1; AC_SUBST([HAVE_SETSTATE]) HAVE_DECL_SETSTATE=1; AC_SUBST([HAVE_DECL_SETSTATE]) HAVE_STRTOD=1; AC_SUBST([HAVE_STRTOD]) HAVE_STRTOLD=1; AC_SUBST([HAVE_STRTOLD]) HAVE_STRTOLL=1; AC_SUBST([HAVE_STRTOLL]) HAVE_STRTOULL=1; AC_SUBST([HAVE_STRTOULL]) HAVE_STRUCT_RANDOM_DATA=1; AC_SUBST([HAVE_STRUCT_RANDOM_DATA]) HAVE_SYS_LOADAVG_H=0; AC_SUBST([HAVE_SYS_LOADAVG_H]) HAVE_UNLOCKPT=1; AC_SUBST([HAVE_UNLOCKPT]) HAVE_DECL_UNSETENV=1; AC_SUBST([HAVE_DECL_UNSETENV]) REPLACE_CALLOC=0; AC_SUBST([REPLACE_CALLOC]) REPLACE_CANONICALIZE_FILE_NAME=0; AC_SUBST([REPLACE_CANONICALIZE_FILE_NAME]) REPLACE_INITSTATE=0; AC_SUBST([REPLACE_INITSTATE]) REPLACE_MALLOC=0; AC_SUBST([REPLACE_MALLOC]) REPLACE_MBTOWC=0; AC_SUBST([REPLACE_MBTOWC]) REPLACE_MKSTEMP=0; AC_SUBST([REPLACE_MKSTEMP]) REPLACE_PTSNAME=0; AC_SUBST([REPLACE_PTSNAME]) REPLACE_PTSNAME_R=0; AC_SUBST([REPLACE_PTSNAME_R]) REPLACE_PUTENV=0; AC_SUBST([REPLACE_PUTENV]) REPLACE_QSORT_R=0; AC_SUBST([REPLACE_QSORT_R]) REPLACE_RANDOM=0; AC_SUBST([REPLACE_RANDOM]) REPLACE_RANDOM_R=0; AC_SUBST([REPLACE_RANDOM_R]) REPLACE_REALLOC=0; AC_SUBST([REPLACE_REALLOC]) REPLACE_REALPATH=0; AC_SUBST([REPLACE_REALPATH]) REPLACE_SETENV=0; AC_SUBST([REPLACE_SETENV]) REPLACE_SETSTATE=0; AC_SUBST([REPLACE_SETSTATE]) REPLACE_STRTOD=0; AC_SUBST([REPLACE_STRTOD]) REPLACE_STRTOLD=0; AC_SUBST([REPLACE_STRTOLD]) REPLACE_UNSETENV=0; AC_SUBST([REPLACE_UNSETENV]) REPLACE_WCTOMB=0; AC_SUBST([REPLACE_WCTOMB]) ]) make-4.3/m4/lib-ld.m40000644000175000017500000000714313611136462011153 00000000000000# 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/_*LT_PATH/AC_LIB_PROG/ and s/lt_/acl_/ to avoid dnl collision with libtool.m4. 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 lds only accept -v. case `$LD -v 2>&1 /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 $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) 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" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL([acl_cv_path_LD], [if test -z "$LD"; then 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 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 Solaris 64-bit Developer's Guide > The Development Environment dnl . dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link." dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the dnl symlink is missing, so we set acl_libdirstem2 too. AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit], [AC_EGREP_CPP([sixtyfour bits], [ #ifdef _LP64 sixtyfour bits #endif ], [gl_cv_solaris_64bit=yes], [gl_cv_solaris_64bit=no]) ]) if test $gl_cv_solaris_64bit = yes; then acl_libdirstem=lib/64 case "$host_cpu" in sparc*) acl_libdirstem2=lib/sparcv9 ;; i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; esac fi ;; *) searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; */../ | */.. ) # Better ignore directories of this form. They are misleading. ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib64 ) acl_libdirstem=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" fi ;; esac test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" ]) make-4.3/m4/gnulib-common.m40000644000175000017500000004421513611136472012560 00000000000000# gnulib-common.m4 serial 46 dnl Copyright (C) 2007-2020 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. AC_PREREQ([2.62]) # gl_COMMON # is expanded unconditionally through gnulib-tool magic. AC_DEFUN([gl_COMMON], [ dnl Use AC_REQUIRE here, so that the code is expanded once only. AC_REQUIRE([gl_00GNULIB]) AC_REQUIRE([gl_COMMON_BODY]) ]) AC_DEFUN([gl_COMMON_BODY], [ AH_VERBATIM([_Noreturn], [/* The _Noreturn keyword of C11. */ #ifndef _Noreturn # if (defined __cplusplus \ && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \ || (defined _MSC_VER && 1900 <= _MSC_VER)) \ && 0) /* [[noreturn]] is not practically usable, because with it the syntax extern _Noreturn void func (...); would not be valid; such a declaration would only be valid with 'extern' and '_Noreturn' swapped, or without the 'extern' keyword. However, some AIX system header files and several gnulib header files use precisely this syntax with 'extern'. */ # define _Noreturn [[noreturn]] # elif ((!defined __cplusplus || defined __clang__) \ && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ || 4 < __GNUC__ + (7 <= __GNUC_MINOR__))) /* _Noreturn works as-is. */ # elif 2 < __GNUC__ + (8 <= __GNUC_MINOR__) || 0x5110 <= __SUNPRO_C # define _Noreturn __attribute__ ((__noreturn__)) # elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0) # define _Noreturn __declspec (noreturn) # else # define _Noreturn # endif #endif ]) AH_VERBATIM([isoc99_inline], [/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of earlier versions), but does not display it by setting __GNUC_STDC_INLINE__. __APPLE__ && __MACH__ test for Mac OS X. __APPLE_CC__ tests for the Apple compiler and its version. __STDC_VERSION__ tests for the C99 mode. */ #if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__ # define __GNUC_STDC_INLINE__ 1 #endif]) AH_VERBATIM([unused_parameter], [/* Define as a marker that can be attached to declarations that might not be used. This helps to reduce warnings, such as from GCC -Wunused-parameter. */ #if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) # define _GL_UNUSED __attribute__ ((__unused__)) #else # define _GL_UNUSED #endif /* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name is a misnomer outside of parameter lists. */ #define _UNUSED_PARAMETER_ _GL_UNUSED /* gcc supports the "unused" attribute on possibly unused labels, and g++ has since version 4.5. Note to support C++ as well as C, _GL_UNUSED_LABEL should be used with a trailing ; */ #if !defined __cplusplus || __GNUC__ > 4 \ || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) # define _GL_UNUSED_LABEL _GL_UNUSED #else # define _GL_UNUSED_LABEL #endif /* The __pure__ attribute was added in gcc 2.96. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) #else # define _GL_ATTRIBUTE_PURE /* empty */ #endif /* The __const__ attribute was added in gcc 2.95. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) # define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) #else # define _GL_ATTRIBUTE_CONST /* empty */ #endif /* The __malloc__ attribute was added in gcc 3. */ #if 3 <= __GNUC__ # define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) #else # define _GL_ATTRIBUTE_MALLOC /* empty */ #endif ]) AH_VERBATIM([async_safe], [/* The _GL_ASYNC_SAFE marker should be attached to functions that are signal handlers (for signals other than SIGABRT, SIGPIPE) or can be invoked from such signal handlers. Such functions have some restrictions: * All functions that it calls should be marked _GL_ASYNC_SAFE as well, or should be listed as async-signal-safe in POSIX section 2.4.3. Note that malloc(), sprintf(), and fwrite(), in particular, are NOT async-signal-safe. * All memory locations (variables and struct fields) that these functions access must be marked 'volatile'. This holds for both read and write accesses. Otherwise the compiler might optimize away stores to and reads from such locations that occur in the program, depending on its data flow analysis. For example, when the program contains a loop that is intended to inspect a variable set from within a signal handler while (!signal_occurred) ; the compiler is allowed to transform this into an endless loop if the variable 'signal_occurred' is not declared 'volatile'. Additionally, recall that: * A signal handler should not modify errno (except if it is a handler for a fatal signal and ends by raising the same signal again, thus provoking the termination of the process). If it invokes a function that may clobber errno, it needs to save and restore the value of errno. */ #define _GL_ASYNC_SAFE ]) dnl Hint which direction to take regarding cross-compilation guesses: dnl When a user installs a program on a platform they are not intimately dnl familiar with, --enable-cross-guesses=conservative is the appropriate dnl choice. It implements the "If we don't know, assume the worst" principle. dnl However, when an operating system developer (on a platform which is not dnl yet known to gnulib) builds packages for their platform, they want to dnl expose, not hide, possible platform bugs; in this case, dnl --enable-cross-guesses=risky is the appropriate choice. dnl Sets the variables dnl gl_cross_guess_normal (to be used when 'yes' is good and 'no' is bad), dnl gl_cross_guess_inverted (to be used when 'no' is good and 'yes' is bad). AC_ARG_ENABLE([cross-guesses], [AS_HELP_STRING([--enable-cross-guesses={conservative|risky}], [specify policy for cross-compilation guesses])], [if test "x$enableval" != xconservative && test "x$enableval" != xrisky; then AC_MSG_WARN([invalid argument supplied to --enable-cross-guesses]) enableval=conservative fi gl_cross_guesses="$enableval"], [gl_cross_guesses=conservative]) if test $gl_cross_guesses = risky; then gl_cross_guess_normal="guessing yes" gl_cross_guess_inverted="guessing no" else gl_cross_guess_normal="guessing no" gl_cross_guess_inverted="guessing yes" fi dnl Preparation for running test programs: dnl Tell glibc to write diagnostics from -D_FORTIFY_SOURCE=2 to stderr, not dnl to /dev/tty, so they can be redirected to log files. Such diagnostics dnl arise e.g., in the macros gl_PRINTF_DIRECTIVE_N, gl_SNPRINTF_DIRECTIVE_N. LIBC_FATAL_STDERR_=1 export LIBC_FATAL_STDERR_ ]) # gl_MODULE_INDICATOR_CONDITION # expands to a C preprocessor expression that evaluates to 1 or 0, depending # whether a gnulib module that has been requested shall be considered present # or not. m4_define([gl_MODULE_INDICATOR_CONDITION], [1]) # gl_MODULE_INDICATOR_SET_VARIABLE([modulename]) # sets the shell variable that indicates the presence of the given module to # a C preprocessor expression that will evaluate to 1. AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE], [ gl_MODULE_INDICATOR_SET_VARIABLE_AUX( [GNULIB_[]m4_translit([[$1]], [abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])], [gl_MODULE_INDICATOR_CONDITION]) ]) # gl_MODULE_INDICATOR_SET_VARIABLE_AUX([variable]) # modifies the shell variable to include the gl_MODULE_INDICATOR_CONDITION. # The shell variable's value is a C preprocessor expression that evaluates # to 0 or 1. AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX], [ m4_if(m4_defn([gl_MODULE_INDICATOR_CONDITION]), [1], [ dnl Simplify the expression VALUE || 1 to 1. $1=1 ], [gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([$1], [gl_MODULE_INDICATOR_CONDITION])]) ]) # gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([variable], [condition]) # modifies the shell variable to include the given condition. The shell # variable's value is a C preprocessor expression that evaluates to 0 or 1. AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR], [ dnl Simplify the expression 1 || CONDITION to 1. if test "$[]$1" != 1; then dnl Simplify the expression 0 || CONDITION to CONDITION. if test "$[]$1" = 0; then $1=$2 else $1="($[]$1 || $2)" fi fi ]) # gl_MODULE_INDICATOR([modulename]) # defines a C macro indicating the presence of the given module # in a location where it can be used. # | Value | Value | # | in lib/ | in tests/ | # --------------------------------------------+---------+-----------+ # Module present among main modules: | 1 | 1 | # --------------------------------------------+---------+-----------+ # Module present among tests-related modules: | 0 | 1 | # --------------------------------------------+---------+-----------+ # Module not present at all: | 0 | 0 | # --------------------------------------------+---------+-----------+ AC_DEFUN([gl_MODULE_INDICATOR], [ AC_DEFINE_UNQUOTED([GNULIB_]m4_translit([[$1]], [abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), [gl_MODULE_INDICATOR_CONDITION], [Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module $1 shall be considered present.]) ]) # gl_MODULE_INDICATOR_FOR_TESTS([modulename]) # defines a C macro indicating the presence of the given module # in lib or tests. This is useful to determine whether the module # should be tested. # | Value | Value | # | in lib/ | in tests/ | # --------------------------------------------+---------+-----------+ # Module present among main modules: | 1 | 1 | # --------------------------------------------+---------+-----------+ # Module present among tests-related modules: | 1 | 1 | # --------------------------------------------+---------+-----------+ # Module not present at all: | 0 | 0 | # --------------------------------------------+---------+-----------+ AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS], [ AC_DEFINE([GNULIB_TEST_]m4_translit([[$1]], [abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), [1], [Define to 1 when the gnulib module $1 should be tested.]) ]) # gl_ASSERT_NO_GNULIB_POSIXCHECK # asserts that there will never be a need to #define GNULIB_POSIXCHECK. # and thereby enables an optimization of configure and config.h. # Used by Emacs. AC_DEFUN([gl_ASSERT_NO_GNULIB_POSIXCHECK], [ dnl Override gl_WARN_ON_USE_PREPARE. dnl But hide this definition from 'aclocal'. AC_DEFUN([gl_W][ARN_ON_USE_PREPARE], []) ]) # gl_ASSERT_NO_GNULIB_TESTS # asserts that there will be no gnulib tests in the scope of the configure.ac # and thereby enables an optimization of config.h. # Used by Emacs. AC_DEFUN([gl_ASSERT_NO_GNULIB_TESTS], [ dnl Override gl_MODULE_INDICATOR_FOR_TESTS. AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS], []) ]) # Test whether exists. # Set HAVE_FEATURES_H. AC_DEFUN([gl_FEATURES_H], [ AC_CHECK_HEADERS_ONCE([features.h]) if test $ac_cv_header_features_h = yes; then HAVE_FEATURES_H=1 else HAVE_FEATURES_H=0 fi AC_SUBST([HAVE_FEATURES_H]) ]) # AS_VAR_IF(VAR, VALUE, [IF-MATCH], [IF-NOT-MATCH]) # ---------------------------------------------------- # Backport of autoconf-2.63b's macro. # Remove this macro when we can assume autoconf >= 2.64. m4_ifndef([AS_VAR_IF], [m4_define([AS_VAR_IF], [AS_IF([test x"AS_VAR_GET([$1])" = x""$2], [$3], [$4])])]) # gl_PROG_CC_C99 # Modifies the value of the shell variable CC in an attempt to make $CC # understand ISO C99 source code. # This is like AC_PROG_CC_C99, except that # - AC_PROG_CC_C99 does not mix well with AC_PROG_CC_STDC # , # but many more packages use AC_PROG_CC_STDC than AC_PROG_CC_C99 # . # Remaining problems: # - When AC_PROG_CC_STDC is invoked twice, it adds the C99 enabling options # to CC twice # . # - AC_PROG_CC_STDC is likely to change now that C11 is an ISO standard. AC_DEFUN([gl_PROG_CC_C99], [ dnl Change that version number to the minimum Autoconf version that supports dnl mixing AC_PROG_CC_C99 calls with AC_PROG_CC_STDC calls. m4_version_prereq([9.0], [AC_REQUIRE([AC_PROG_CC_C99])], [AC_REQUIRE([AC_PROG_CC_STDC])]) ]) # gl_PROG_AR_RANLIB # Determines the values for AR, ARFLAGS, RANLIB that fit with the compiler. # The user can set the variables AR, ARFLAGS, RANLIB if he wants to override # the values. AC_DEFUN([gl_PROG_AR_RANLIB], [ dnl Minix 3 comes with two toolchains: The Amsterdam Compiler Kit compiler dnl as "cc", and GCC as "gcc". They have different object file formats and dnl library formats. In particular, the GNU binutils programs ar and ranlib dnl produce libraries that work only with gcc, not with cc. AC_REQUIRE([AC_PROG_CC]) dnl The '][' hides this use from 'aclocal'. AC_BEFORE([$0], [A][M_PROG_AR]) AC_CACHE_CHECK([for Minix Amsterdam compiler], [gl_cv_c_amsterdam_compiler], [ AC_EGREP_CPP([Amsterdam], [ #ifdef __ACK__ Amsterdam #endif ], [gl_cv_c_amsterdam_compiler=yes], [gl_cv_c_amsterdam_compiler=no]) ]) dnl Don't compete with AM_PROG_AR's decision about AR/ARFLAGS if we are not dnl building with __ACK__. if test $gl_cv_c_amsterdam_compiler = yes; then if test -z "$AR"; then AR='cc -c.a' fi if test -z "$ARFLAGS"; then ARFLAGS='-o' fi else dnl AM_PROG_AR was added in automake v1.11.2. AM_PROG_AR does not AC_SUBST dnl ARFLAGS variable (it is filed into Makefile.in directly by automake dnl script on-demand, if not specified by ./configure of course). dnl Don't AC_REQUIRE the AM_PROG_AR otherwise the code for __ACK__ above dnl will be ignored. Also, pay attention to call AM_PROG_AR in else block dnl because AM_PROG_AR is written so it could re-set AR variable even for dnl __ACK__. It may seem like its easier to avoid calling the macro here, dnl but we need to AC_SUBST both AR/ARFLAGS (thus those must have some good dnl default value and automake should usually know them). dnl dnl The '][' hides this use from 'aclocal'. m4_ifdef([A][M_PROG_AR], [A][M_PROG_AR], [:]) fi dnl In case the code above has not helped with setting AR/ARFLAGS, use dnl Automake-documented default values for AR and ARFLAGS, but prefer dnl ${host}-ar over ar (useful for cross-compiling). AC_CHECK_TOOL([AR], [ar], [ar]) if test -z "$ARFLAGS"; then ARFLAGS='cr' fi AC_SUBST([AR]) AC_SUBST([ARFLAGS]) if test -z "$RANLIB"; then if test $gl_cv_c_amsterdam_compiler = yes; then RANLIB=':' else dnl Use the ranlib program if it is available. AC_PROG_RANLIB fi fi AC_SUBST([RANLIB]) ]) # AC_C_RESTRICT # This definition is copied from post-2.69 Autoconf and overrides the # AC_C_RESTRICT macro from autoconf 2.60..2.69. It can be removed # once autoconf >= 2.70 can be assumed. It's painful to check version # numbers, and in practice this macro is more up-to-date than Autoconf # is, so override Autoconf unconditionally. AC_DEFUN([AC_C_RESTRICT], [AC_CACHE_CHECK([for C/C++ restrict keyword], [ac_cv_c_restrict], [ac_cv_c_restrict=no # The order here caters to the fact that C++ does not require restrict. for ac_kw in __restrict __restrict__ _Restrict restrict; do AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[typedef int *int_ptr; int foo (int_ptr $ac_kw ip) { return ip[0]; } int bar (int [$ac_kw]); /* Catch GCC bug 14050. */ int bar (int ip[$ac_kw]) { return ip[0]; } ]], [[int s[1]; int *$ac_kw t = s; t[0] = 0; return foo (t) + bar (t); ]])], [ac_cv_c_restrict=$ac_kw]) test "$ac_cv_c_restrict" != no && break done ]) AH_VERBATIM([restrict], [/* Define to the equivalent of the C99 'restrict' keyword, or to nothing if this is not supported. Do not define if restrict is supported directly. */ #undef restrict /* Work around a bug in older versions of Sun C++, which did not #define __restrict__ or support _Restrict or __restrict__ even though the corresponding Sun C compiler ended up with "#define restrict _Restrict" or "#define restrict __restrict__" in the previous line. This workaround can be removed once we assume Oracle Developer Studio 12.5 (2016) or later. */ #if defined __SUNPRO_CC && !defined __RESTRICT && !defined __restrict__ # define _Restrict # define __restrict__ #endif]) case $ac_cv_c_restrict in restrict) ;; no) AC_DEFINE([restrict], []) ;; *) AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;; esac ])# AC_C_RESTRICT # gl_BIGENDIAN # is like AC_C_BIGENDIAN, except that it can be AC_REQUIREd. # Note that AC_REQUIRE([AC_C_BIGENDIAN]) does not work reliably because some # macros invoke AC_C_BIGENDIAN with arguments. AC_DEFUN([gl_BIGENDIAN], [ AC_C_BIGENDIAN ]) # gl_CACHE_VAL_SILENT(cache-id, command-to-set-it) # is like AC_CACHE_VAL(cache-id, command-to-set-it), except that it does not # output a spurious "(cached)" mark in the midst of other configure output. # This macro should be used instead of AC_CACHE_VAL when it is not surrounded # by an AC_MSG_CHECKING/AC_MSG_RESULT pair. AC_DEFUN([gl_CACHE_VAL_SILENT], [ saved_as_echo_n="$as_echo_n" as_echo_n=':' AC_CACHE_VAL([$1], [$2]) as_echo_n="$saved_as_echo_n" ]) # AS_VAR_COPY was added in autoconf 2.63b m4_define_default([AS_VAR_COPY], [AS_LITERAL_IF([$1[]$2], [$1=$$2], [eval $1=\$$2])]) make-4.3/m4/stdint.m40000644000175000017500000004310713611136472011316 00000000000000# stdint.m4 serial 54 dnl Copyright (C) 2001-2020 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 and Bruno Haible. dnl Test whether is supported or must be substituted. AC_PREREQ([2.61]) AC_DEFUN_ONCE([gl_STDINT_H], [ AC_PREREQ([2.59])dnl AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_LIMITS_H]) AC_REQUIRE([gt_TYPE_WINT_T]) dnl For backward compatibility. Some packages may still be testing these dnl macros. AC_DEFINE([HAVE_LONG_LONG_INT], [1], [Define to 1 if the system has the type 'long long int'.]) AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], [1], [Define to 1 if the system has the type 'unsigned long long int'.]) dnl Check for , in the same way as gl_WCHAR_H does. AC_CHECK_HEADERS_ONCE([wchar.h]) if test $ac_cv_header_wchar_h = yes; then HAVE_WCHAR_H=1 else HAVE_WCHAR_H=0 fi AC_SUBST([HAVE_WCHAR_H]) dnl Check for . dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_inttypes_h. if test $ac_cv_header_inttypes_h = yes; then HAVE_INTTYPES_H=1 else HAVE_INTTYPES_H=0 fi AC_SUBST([HAVE_INTTYPES_H]) dnl Check for . dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_sys_types_h. if test $ac_cv_header_sys_types_h = yes; then HAVE_SYS_TYPES_H=1 else HAVE_SYS_TYPES_H=0 fi AC_SUBST([HAVE_SYS_TYPES_H]) gl_CHECK_NEXT_HEADERS([stdint.h]) if test $ac_cv_header_stdint_h = yes; then HAVE_STDINT_H=1 else HAVE_STDINT_H=0 fi AC_SUBST([HAVE_STDINT_H]) dnl Now see whether we need a substitute . if test $ac_cv_header_stdint_h = yes; then AC_CACHE_CHECK([whether stdint.h conforms to C99], [gl_cv_header_working_stdint_h], [gl_cv_header_working_stdint_h=no AC_COMPILE_IFELSE([ AC_LANG_PROGRAM([[ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #define __STDC_CONSTANT_MACROS 1 #define __STDC_LIMIT_MACROS 1 #include /* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in . */ #if !(defined WCHAR_MIN && defined WCHAR_MAX) #error "WCHAR_MIN, WCHAR_MAX not defined in " #endif ] gl_STDINT_INCLUDES [ #ifdef INT8_MAX int8_t a1 = INT8_MAX; int8_t a1min = INT8_MIN; #endif #ifdef INT16_MAX int16_t a2 = INT16_MAX; int16_t a2min = INT16_MIN; #endif #ifdef INT32_MAX int32_t a3 = INT32_MAX; int32_t a3min = INT32_MIN; #endif #ifdef INT64_MAX int64_t a4 = INT64_MAX; int64_t a4min = INT64_MIN; #endif #ifdef UINT8_MAX uint8_t b1 = UINT8_MAX; #else typedef int b1[(unsigned char) -1 != 255 ? 1 : -1]; #endif #ifdef UINT16_MAX uint16_t b2 = UINT16_MAX; #endif #ifdef UINT32_MAX uint32_t b3 = UINT32_MAX; #endif #ifdef UINT64_MAX uint64_t b4 = UINT64_MAX; #endif int_least8_t c1 = INT8_C (0x7f); int_least8_t c1max = INT_LEAST8_MAX; int_least8_t c1min = INT_LEAST8_MIN; int_least16_t c2 = INT16_C (0x7fff); int_least16_t c2max = INT_LEAST16_MAX; int_least16_t c2min = INT_LEAST16_MIN; int_least32_t c3 = INT32_C (0x7fffffff); int_least32_t c3max = INT_LEAST32_MAX; int_least32_t c3min = INT_LEAST32_MIN; int_least64_t c4 = INT64_C (0x7fffffffffffffff); int_least64_t c4max = INT_LEAST64_MAX; int_least64_t c4min = INT_LEAST64_MIN; uint_least8_t d1 = UINT8_C (0xff); uint_least8_t d1max = UINT_LEAST8_MAX; uint_least16_t d2 = UINT16_C (0xffff); uint_least16_t d2max = UINT_LEAST16_MAX; uint_least32_t d3 = UINT32_C (0xffffffff); uint_least32_t d3max = UINT_LEAST32_MAX; uint_least64_t d4 = UINT64_C (0xffffffffffffffff); uint_least64_t d4max = UINT_LEAST64_MAX; int_fast8_t e1 = INT_FAST8_MAX; int_fast8_t e1min = INT_FAST8_MIN; int_fast16_t e2 = INT_FAST16_MAX; int_fast16_t e2min = INT_FAST16_MIN; int_fast32_t e3 = INT_FAST32_MAX; int_fast32_t e3min = INT_FAST32_MIN; int_fast64_t e4 = INT_FAST64_MAX; int_fast64_t e4min = INT_FAST64_MIN; uint_fast8_t f1 = UINT_FAST8_MAX; uint_fast16_t f2 = UINT_FAST16_MAX; uint_fast32_t f3 = UINT_FAST32_MAX; uint_fast64_t f4 = UINT_FAST64_MAX; #ifdef INTPTR_MAX intptr_t g = INTPTR_MAX; intptr_t gmin = INTPTR_MIN; #endif #ifdef UINTPTR_MAX uintptr_t h = UINTPTR_MAX; #endif intmax_t i = INTMAX_MAX; uintmax_t j = UINTMAX_MAX; /* Check that SIZE_MAX has the correct type, if possible. */ #if 201112 <= __STDC_VERSION__ int k = _Generic (SIZE_MAX, size_t: 0); #elif (2 <= __GNUC__ || defined __IBM__TYPEOF__ \ || (0x5110 <= __SUNPRO_C && !__STDC__)) extern size_t k; extern __typeof__ (SIZE_MAX) k; #endif #include /* for CHAR_BIT */ #define TYPE_MINIMUM(t) \ ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t))) #define TYPE_MAXIMUM(t) \ ((t) ((t) 0 < (t) -1 \ ? (t) -1 \ : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) struct s { int check_PTRDIFF: PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t) && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t) ? 1 : -1; /* Detect bug in FreeBSD 6.0 / ia64. */ int check_SIG_ATOMIC: SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t) && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t) ? 1 : -1; int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1; int check_WCHAR: WCHAR_MIN == TYPE_MINIMUM (wchar_t) && WCHAR_MAX == TYPE_MAXIMUM (wchar_t) ? 1 : -1; /* Detect bug in mingw. */ int check_WINT: WINT_MIN == TYPE_MINIMUM (wint_t) && WINT_MAX == TYPE_MAXIMUM (wint_t) ? 1 : -1; /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others. */ int check_UINT8_C: (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1; int check_UINT16_C: (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1; /* Detect bugs in OpenBSD 3.9 stdint.h. */ #ifdef UINT8_MAX int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1; #endif #ifdef UINT16_MAX int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1; #endif #ifdef UINT32_MAX int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1; #endif #ifdef UINT64_MAX int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1; #endif int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1; int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1; int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1; int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1; int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1; int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1; int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1; int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1; int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1; int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1; int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1; }; ]])], [dnl Determine whether the various *_MIN, *_MAX macros are usable dnl in preprocessor expression. We could do it by compiling a test dnl program for each of these macros. It is faster to run a program dnl that inspects the macro expansion. dnl This detects a bug on HP-UX 11.23/ia64. AC_RUN_IFELSE([ AC_LANG_PROGRAM([[ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #define __STDC_CONSTANT_MACROS 1 #define __STDC_LIMIT_MACROS 1 #include ] gl_STDINT_INCLUDES [ #include #include #define MVAL(macro) MVAL1(macro) #define MVAL1(expression) #expression static const char *macro_values[] = { #ifdef INT8_MAX MVAL (INT8_MAX), #endif #ifdef INT16_MAX MVAL (INT16_MAX), #endif #ifdef INT32_MAX MVAL (INT32_MAX), #endif #ifdef INT64_MAX MVAL (INT64_MAX), #endif #ifdef UINT8_MAX MVAL (UINT8_MAX), #endif #ifdef UINT16_MAX MVAL (UINT16_MAX), #endif #ifdef UINT32_MAX MVAL (UINT32_MAX), #endif #ifdef UINT64_MAX MVAL (UINT64_MAX), #endif NULL }; ]], [[ const char **mv; for (mv = macro_values; *mv != NULL; mv++) { const char *value = *mv; /* Test whether it looks like a cast expression. */ if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0 || strncmp (value, "((unsigned short)"/*)*/, 17) == 0 || strncmp (value, "((unsigned char)"/*)*/, 16) == 0 || strncmp (value, "((int)"/*)*/, 6) == 0 || strncmp (value, "((signed short)"/*)*/, 15) == 0 || strncmp (value, "((signed char)"/*)*/, 14) == 0) return mv - macro_values + 1; } return 0; ]])], [gl_cv_header_working_stdint_h=yes], [], [case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_header_working_stdint_h="guessing yes" ;; # In general, assume it works. *) gl_cv_header_working_stdint_h="guessing yes" ;; esac ]) ]) ]) fi HAVE_C99_STDINT_H=0 HAVE_SYS_BITYPES_H=0 HAVE_SYS_INTTYPES_H=0 STDINT_H=stdint.h case "$gl_cv_header_working_stdint_h" in *yes) HAVE_C99_STDINT_H=1 dnl Now see whether the system works without dnl __STDC_CONSTANT_MACROS/__STDC_LIMIT_MACROS defined. AC_CACHE_CHECK([whether stdint.h predates C++11], [gl_cv_header_stdint_predates_cxx11_h], [gl_cv_header_stdint_predates_cxx11_h=yes AC_COMPILE_IFELSE([ AC_LANG_PROGRAM([[ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #include ] gl_STDINT_INCLUDES [ intmax_t im = INTMAX_MAX; int32_t i32 = INT32_C (0x7fffffff); ]])], [gl_cv_header_stdint_predates_cxx11_h=no])]) if test "$gl_cv_header_stdint_predates_cxx11_h" = yes; then AC_DEFINE([__STDC_CONSTANT_MACROS], [1], [Define to 1 if the system predates C++11.]) AC_DEFINE([__STDC_LIMIT_MACROS], [1], [Define to 1 if the system predates C++11.]) fi AC_CACHE_CHECK([whether stdint.h has UINTMAX_WIDTH etc.], [gl_cv_header_stdint_width], [gl_cv_header_stdint_width=no AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ /* Work if build is not clean. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 #endif #include ]gl_STDINT_INCLUDES[ int iw = UINTMAX_WIDTH; ]])], [gl_cv_header_stdint_width=yes])]) if test "$gl_cv_header_stdint_width" = yes; then STDINT_H= fi ;; *) dnl Check for , and for dnl (used in Linux libc4 >= 4.6.7 and libc5). AC_CHECK_HEADERS([sys/inttypes.h sys/bitypes.h]) if test $ac_cv_header_sys_inttypes_h = yes; then HAVE_SYS_INTTYPES_H=1 fi if test $ac_cv_header_sys_bitypes_h = yes; then HAVE_SYS_BITYPES_H=1 fi gl_STDINT_TYPE_PROPERTIES ;; esac dnl The substitute stdint.h needs the substitute limit.h's _GL_INTEGER_WIDTH. gl_REPLACE_LIMITS_H AC_SUBST([HAVE_C99_STDINT_H]) AC_SUBST([HAVE_SYS_BITYPES_H]) AC_SUBST([HAVE_SYS_INTTYPES_H]) AC_SUBST([STDINT_H]) AM_CONDITIONAL([GL_GENERATE_STDINT_H], [test -n "$STDINT_H"]) ]) dnl gl_STDINT_BITSIZEOF(TYPES, INCLUDES) dnl Determine the size of each of the given types in bits. AC_DEFUN([gl_STDINT_BITSIZEOF], [ dnl Use a shell loop, to avoid bloating configure, and dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into dnl config.h.in, dnl - extra AC_SUBST calls, so that the right substitutions are made. m4_foreach_w([gltype], [$1], [AH_TEMPLATE([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]), [Define to the number of bits in type ']gltype['.])]) for gltype in $1 ; do AC_CACHE_CHECK([for bit size of $gltype], [gl_cv_bitsizeof_${gltype}], [AC_COMPUTE_INT([result], [sizeof ($gltype) * CHAR_BIT], [$2 #include ], [result=unknown]) eval gl_cv_bitsizeof_${gltype}=\$result ]) eval result=\$gl_cv_bitsizeof_${gltype} if test $result = unknown; then dnl Use a nonempty default, because some compilers, such as IRIX 5 cc, dnl do a syntax check even on unused #if conditions and give an error dnl on valid C code like this: dnl #if 0 dnl # if > 32 dnl # endif dnl #endif result=0 fi GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` AC_DEFINE_UNQUOTED([BITSIZEOF_${GLTYPE}], [$result]) eval BITSIZEOF_${GLTYPE}=\$result done m4_foreach_w([gltype], [$1], [AC_SUBST([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))]) ]) dnl gl_CHECK_TYPES_SIGNED(TYPES, INCLUDES) dnl Determine the signedness of each of the given types. dnl Define HAVE_SIGNED_TYPE if type is signed. AC_DEFUN([gl_CHECK_TYPES_SIGNED], [ dnl Use a shell loop, to avoid bloating configure, and dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into dnl config.h.in, dnl - extra AC_SUBST calls, so that the right substitutions are made. m4_foreach_w([gltype], [$1], [AH_TEMPLATE([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]), [Define to 1 if ']gltype[' is a signed integer type.])]) for gltype in $1 ; do AC_CACHE_CHECK([whether $gltype is signed], [gl_cv_type_${gltype}_signed], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([$2[ int verify[2 * (($gltype) -1 < ($gltype) 0) - 1];]])], result=yes, result=no) eval gl_cv_type_${gltype}_signed=\$result ]) eval result=\$gl_cv_type_${gltype}_signed GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` if test "$result" = yes; then AC_DEFINE_UNQUOTED([HAVE_SIGNED_${GLTYPE}], [1]) eval HAVE_SIGNED_${GLTYPE}=1 else eval HAVE_SIGNED_${GLTYPE}=0 fi done m4_foreach_w([gltype], [$1], [AC_SUBST([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))]) ]) dnl gl_INTEGER_TYPE_SUFFIX(TYPES, INCLUDES) dnl Determine the suffix to use for integer constants of the given types. dnl Define t_SUFFIX for each such type. AC_DEFUN([gl_INTEGER_TYPE_SUFFIX], [ dnl Use a shell loop, to avoid bloating configure, and dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into dnl config.h.in, dnl - extra AC_SUBST calls, so that the right substitutions are made. m4_foreach_w([gltype], [$1], [AH_TEMPLATE(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX], [Define to l, ll, u, ul, ull, etc., as suitable for constants of type ']gltype['.])]) for gltype in $1 ; do AC_CACHE_CHECK([for $gltype integer literal suffix], [gl_cv_type_${gltype}_suffix], [eval gl_cv_type_${gltype}_suffix=no eval result=\$gl_cv_type_${gltype}_signed if test "$result" = yes; then glsufu= else glsufu=u fi for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do case $glsuf in '') gltype1='int';; l) gltype1='long int';; ll) gltype1='long long int';; i64) gltype1='__int64';; u) gltype1='unsigned int';; ul) gltype1='unsigned long int';; ull) gltype1='unsigned long long int';; ui64)gltype1='unsigned __int64';; esac AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([$2[ extern $gltype foo; extern $gltype1 foo;]])], [eval gl_cv_type_${gltype}_suffix=\$glsuf]) eval result=\$gl_cv_type_${gltype}_suffix test "$result" != no && break done]) GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` eval result=\$gl_cv_type_${gltype}_suffix test "$result" = no && result= eval ${GLTYPE}_SUFFIX=\$result AC_DEFINE_UNQUOTED([${GLTYPE}_SUFFIX], [$result]) done m4_foreach_w([gltype], [$1], [AC_SUBST(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX])]) ]) dnl gl_STDINT_INCLUDES AC_DEFUN([gl_STDINT_INCLUDES], [[ /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif ]]) dnl gl_STDINT_TYPE_PROPERTIES dnl Compute HAVE_SIGNED_t, BITSIZEOF_t and t_SUFFIX, for all the types t dnl of interest to stdint.in.h. AC_DEFUN([gl_STDINT_TYPE_PROPERTIES], [ AC_REQUIRE([gl_MULTIARCH]) if test $APPLE_UNIVERSAL_BUILD = 0; then gl_STDINT_BITSIZEOF([ptrdiff_t size_t], [gl_STDINT_INCLUDES]) fi gl_STDINT_BITSIZEOF([sig_atomic_t wchar_t wint_t], [gl_STDINT_INCLUDES]) gl_CHECK_TYPES_SIGNED([sig_atomic_t wchar_t wint_t], [gl_STDINT_INCLUDES]) gl_cv_type_ptrdiff_t_signed=yes gl_cv_type_size_t_signed=no if test $APPLE_UNIVERSAL_BUILD = 0; then gl_INTEGER_TYPE_SUFFIX([ptrdiff_t size_t], [gl_STDINT_INCLUDES]) fi gl_INTEGER_TYPE_SUFFIX([sig_atomic_t wchar_t wint_t], [gl_STDINT_INCLUDES]) dnl If wint_t is smaller than 'int', it cannot satisfy the ISO C 99 dnl requirement that wint_t is "unchanged by default argument promotions". dnl In this case gnulib's and override wint_t. dnl Set the variable BITSIZEOF_WINT_T accordingly. if test $GNULIB_OVERRIDES_WINT_T = 1; then BITSIZEOF_WINT_T=32 fi ]) make-4.3/m4/wchar_t.m40000644000175000017500000000146213611136472011436 00000000000000# wchar_t.m4 serial 4 (gettext-0.18.2) dnl Copyright (C) 2002-2003, 2008-2020 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 Bruno Haible. dnl Test whether has the 'wchar_t' type. dnl Prerequisite: AC_PROG_CC AC_DEFUN([gt_TYPE_WCHAR_T], [ AC_CACHE_CHECK([for wchar_t], [gt_cv_c_wchar_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include wchar_t foo = (wchar_t)'\0';]], [[]])], [gt_cv_c_wchar_t=yes], [gt_cv_c_wchar_t=no])]) if test $gt_cv_c_wchar_t = yes; then AC_DEFINE([HAVE_WCHAR_T], [1], [Define if you have the 'wchar_t' type.]) fi ]) make-4.3/m4/wint_t.m40000644000175000017500000000444313611136472011315 00000000000000# wint_t.m4 serial 7 dnl Copyright (C) 2003, 2007-2020 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 Bruno Haible. dnl Test whether has the 'wint_t' type and whether gnulib's dnl or would, if present, override 'wint_t'. dnl Prerequisite: AC_PROG_CC AC_DEFUN([gt_TYPE_WINT_T], [ AC_CACHE_CHECK([for wint_t], [gt_cv_c_wint_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include wint_t foo = (wchar_t)'\0';]], [[]])], [gt_cv_c_wint_t=yes], [gt_cv_c_wint_t=no])]) if test $gt_cv_c_wint_t = yes; then AC_DEFINE([HAVE_WINT_T], [1], [Define if you have the 'wint_t' type.]) dnl Determine whether gnulib's or would, if present, dnl override 'wint_t'. AC_CACHE_CHECK([whether wint_t is too small], [gl_cv_type_wint_t_too_small], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include # include # include #endif #include int verify[sizeof (wint_t) < sizeof (int) ? -1 : 1]; ]])], [gl_cv_type_wint_t_too_small=no], [gl_cv_type_wint_t_too_small=yes])]) if test $gl_cv_type_wint_t_too_small = yes; then GNULIB_OVERRIDES_WINT_T=1 else GNULIB_OVERRIDES_WINT_T=0 fi else GNULIB_OVERRIDES_WINT_T=0 fi AC_SUBST([GNULIB_OVERRIDES_WINT_T]) ]) dnl Prerequisites of the 'wint_t' override. AC_DEFUN([gl_TYPE_WINT_T_PREREQ], [ AC_CHECK_HEADERS_ONCE([crtdefs.h]) if test $ac_cv_header_crtdefs_h = yes; then HAVE_CRTDEFS_H=1 else HAVE_CRTDEFS_H=0 fi AC_SUBST([HAVE_CRTDEFS_H]) ]) make-4.3/m4/asm-underscore.m40000644000175000017500000000443713611136472012743 00000000000000# asm-underscore.m4 serial 4 dnl Copyright (C) 2010-2020 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 Bruno Haible. Based on as-underscore.m4 in GNU clisp. # gl_ASM_SYMBOL_PREFIX # Tests for the prefix of C symbols at the assembly language level and the # linker level. This prefix is either an underscore or empty. Defines the # C macro USER_LABEL_PREFIX to this prefix, and sets ASM_SYMBOL_PREFIX to # a stringified variant of this prefix. AC_DEFUN([gl_ASM_SYMBOL_PREFIX], [ AC_REQUIRE([AC_PROG_EGREP]) dnl We don't use GCC's __USER_LABEL_PREFIX__ here, because dnl 1. It works only for GCC. dnl 2. It is incorrectly defined on some platforms, in some GCC versions. AC_REQUIRE([gl_C_ASM]) AC_CACHE_CHECK( [whether C symbols are prefixed with underscore at the linker level], [gl_cv_prog_as_underscore], [cat > conftest.c </dev/null 2>&1 if LC_ALL=C $EGREP '(^|[[^a-zA-Z0-9_]])_foo([[^a-zA-Z0-9_]]|$)' conftest.$gl_asmext >/dev/null; then gl_cv_prog_as_underscore=yes else gl_cv_prog_as_underscore=no fi rm -f conftest* ]) if test $gl_cv_prog_as_underscore = yes; then USER_LABEL_PREFIX=_ else USER_LABEL_PREFIX= fi AC_DEFINE_UNQUOTED([USER_LABEL_PREFIX], [$USER_LABEL_PREFIX], [Define to the prefix of C symbols at the assembler and linker level, either an underscore or empty.]) ASM_SYMBOL_PREFIX='"'${USER_LABEL_PREFIX}'"' AC_SUBST([ASM_SYMBOL_PREFIX]) ]) # gl_C_ASM # Determines how to produce an assembly language file from C source code. # Sets the variables: # gl_asmext - the extension of assembly language output, # gl_c_asm_opt - the C compiler option that produces assembly language output. AC_DEFUN([gl_C_ASM], [ AC_EGREP_CPP([MicrosoftCompiler], [ #ifdef _MSC_VER MicrosoftCompiler #endif ], [gl_asmext='asm' gl_c_asm_opt='-c -Fa' ], [gl_asmext='s' gl_c_asm_opt='-S' ]) ]) make-4.3/m4/fcntl_h.m40000644000175000017500000000343613611136472011427 00000000000000# serial 16 # Configure fcntl.h. dnl Copyright (C) 2006-2007, 2009-2020 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 Written by Paul Eggert. AC_DEFUN([gl_FCNTL_H], [ AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) AC_REQUIRE([gl_FCNTL_O_FLAGS]) gl_NEXT_HEADERS([fcntl.h]) dnl Ensure the type pid_t gets defined. AC_REQUIRE([AC_TYPE_PID_T]) dnl Ensure the type mode_t gets defined. AC_REQUIRE([AC_TYPE_MODE_T]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, if it is not common dnl enough to be declared everywhere. gl_WARN_ON_USE_PREPARE([[#include ]], [fcntl openat]) ]) AC_DEFUN([gl_FCNTL_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) AC_DEFUN([gl_FCNTL_H_DEFAULTS], [ GNULIB_CREAT=0; AC_SUBST([GNULIB_CREAT]) GNULIB_FCNTL=0; AC_SUBST([GNULIB_FCNTL]) GNULIB_NONBLOCKING=0; AC_SUBST([GNULIB_NONBLOCKING]) GNULIB_OPEN=0; AC_SUBST([GNULIB_OPEN]) GNULIB_OPENAT=0; AC_SUBST([GNULIB_OPENAT]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_FCNTL=1; AC_SUBST([HAVE_FCNTL]) HAVE_OPENAT=1; AC_SUBST([HAVE_OPENAT]) REPLACE_CREAT=0; AC_SUBST([REPLACE_CREAT]) REPLACE_FCNTL=0; AC_SUBST([REPLACE_FCNTL]) REPLACE_OPEN=0; AC_SUBST([REPLACE_OPEN]) REPLACE_OPENAT=0; AC_SUBST([REPLACE_OPENAT]) ]) make-4.3/m4/getdtablesize.m40000644000175000017500000000474013611136472012637 00000000000000# getdtablesize.m4 serial 7 dnl Copyright (C) 2008-2020 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. AC_DEFUN([gl_FUNC_GETDTABLESIZE], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_FUNCS_ONCE([getdtablesize]) AC_CHECK_DECLS_ONCE([getdtablesize]) if test $ac_cv_func_getdtablesize = yes && test $ac_cv_have_decl_getdtablesize = yes; then AC_CACHE_CHECK([whether getdtablesize works], [gl_cv_func_getdtablesize_works], [dnl There are two concepts: the "maximum possible file descriptor value + 1" dnl and the "maximum number of open file descriptors in a process". dnl Per SUSv2 and POSIX, getdtablesize() should return the first one. dnl On most platforms, the first and the second concept are the same. dnl On OpenVMS, however, they are different and getdtablesize() returns dnl the second one; thus the test below fails. But we don't care dnl because there's no good way to write a replacement getdtablesize(). case "$host_os" in vms*) gl_cv_func_getdtablesize_works="no (limitation)" ;; *) dnl Cygwin 1.7.25 automatically increases the RLIMIT_NOFILE soft dnl limit up to an unchangeable hard limit; all other platforms dnl correctly require setrlimit before getdtablesize() can report dnl a larger value. AC_RUN_IFELSE([ AC_LANG_PROGRAM([[#include ]], [int size = getdtablesize(); if (dup2 (0, getdtablesize()) != -1) return 1; if (size != getdtablesize()) return 2; ])], [gl_cv_func_getdtablesize_works=yes], [gl_cv_func_getdtablesize_works=no], [case "$host_os" in cygwin*) # on cygwin 1.5.25, getdtablesize() automatically grows gl_cv_func_getdtablesize_works="guessing no" ;; *) gl_cv_func_getdtablesize_works="guessing yes" ;; esac ]) ;; esac ]) case "$gl_cv_func_getdtablesize_works" in *yes | "no (limitation)") ;; *) REPLACE_GETDTABLESIZE=1 ;; esac else HAVE_GETDTABLESIZE=0 fi ]) # Prerequisites of lib/getdtablesize.c. AC_DEFUN([gl_PREREQ_GETDTABLESIZE], [:]) make-4.3/m4/extern-inline.m40000644000175000017500000001157413611136472012575 00000000000000dnl 'extern inline' a la ISO C99. dnl Copyright 2012-2020 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. AC_DEFUN([gl_EXTERN_INLINE], [ AH_VERBATIM([extern_inline], [/* Please see the Gnulib manual for how to use these macros. Suppress extern inline with HP-UX cc, as it appears to be broken; see . Suppress extern inline with Sun C in standards-conformance mode, as it mishandles inline functions that call each other. E.g., for 'inline void f (void) { } inline void g (void) { f (); }', c99 incorrectly complains 'reference to static identifier "f" in extern inline function'. This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16. Suppress extern inline (with or without __attribute__ ((__gnu_inline__))) on configurations that mistakenly use 'static inline' to implement functions or macros in standard C headers like . For example, if isdigit is mistakenly implemented via a static inline function, a program containing an extern inline function that calls isdigit may not work since the C standard prohibits extern inline functions from calling static functions (ISO C 99 section 6.7.4.(3). This bug is known to occur on: OS X 10.8 and earlier; see: https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html DragonFly; see http://muscles.dragonflybsd.org/bulk/clang-master-potential/20141111_102002/logs/ah-tty-0.3.12.log FreeBSD; see: https://lists.gnu.org/r/bug-gnulib/2014-07/msg00104.html OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and for clang but remains for g++; see . Assume DragonFly and FreeBSD will be similar. GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 inline semantics, unless -fgnu89-inline is used. It defines a macro __GNUC_STDC_INLINE__ to indicate this situation or a macro __GNUC_GNU_INLINE__ to indicate the opposite situation. GCC 4.2 with -std=c99 or -std=gnu99 implements the GNU C inline semantics but warns, unless -fgnu89-inline is used: warning: C99 inline functions are not supported; using GNU89 warning: to disable this warning use -fgnu89-inline or the gnu_inline function attribute It defines a macro __GNUC_GNU_INLINE__ to indicate this situation. */ #if (((defined __APPLE__ && defined __MACH__) \ || defined __DragonFly__ || defined __FreeBSD__) \ && (defined __header_inline \ ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \ && ! defined __clang__) \ : ((! defined _DONT_USE_CTYPE_INLINE_ \ && (defined __GNUC__ || defined __cplusplus)) \ || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \ && defined __GNUC__ && ! defined __cplusplus)))) # define _GL_EXTERN_INLINE_STDHEADER_BUG #endif #if ((__GNUC__ \ ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \ : (199901L <= __STDC_VERSION__ \ && !defined __HP_cc \ && !defined __PGI \ && !(defined __SUNPRO_C && __STDC__))) \ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) # define _GL_INLINE inline # define _GL_EXTERN_INLINE extern inline # define _GL_EXTERN_INLINE_IN_USE #elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) # if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__ /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */ # define _GL_INLINE extern inline __attribute__ ((__gnu_inline__)) # else # define _GL_INLINE extern inline # endif # define _GL_EXTERN_INLINE extern # define _GL_EXTERN_INLINE_IN_USE #else # define _GL_INLINE static _GL_UNUSED # define _GL_EXTERN_INLINE static _GL_UNUSED #endif /* In GCC 4.6 (inclusive) to 5.1 (exclusive), suppress bogus "no previous prototype for 'FOO'" and "no previous declaration for 'FOO'" diagnostics, when FOO is an inline function in the header; see and . */ #if __GNUC__ == 4 && 6 <= __GNUC_MINOR__ # if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ # define _GL_INLINE_HEADER_CONST_PRAGMA # else # define _GL_INLINE_HEADER_CONST_PRAGMA \ _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"") # endif # define _GL_INLINE_HEADER_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \ _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \ _GL_INLINE_HEADER_CONST_PRAGMA # define _GL_INLINE_HEADER_END \ _Pragma ("GCC diagnostic pop") #else # define _GL_INLINE_HEADER_BEGIN # define _GL_INLINE_HEADER_END #endif]) ]) make-4.3/m4/intlmacosx.m40000644000175000017500000000475313611136462012175 00000000000000# 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. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered 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 Mac OS X. dnl Defines INTL_MACOSX_LIBS. AC_DEFUN([gt_INTL_MACOSX], [ 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_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[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 Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) fi 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_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[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 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 INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi AC_SUBST([INTL_MACOSX_LIBS]) ]) make-4.3/m4/getprogname.m40000644000175000017500000000263313611136472012320 00000000000000# getprogname.m4 - check for getprogname or replacements for it # Copyright (C) 2016-2020 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. # serial 4 AC_DEFUN([gl_FUNC_GETPROGNAME], [ AC_CHECK_FUNCS_ONCE([getprogname getexecname]) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) ac_found=0 AC_CHECK_DECLS([program_invocation_name], [ac_found=1], [], [#include ]) AC_CHECK_DECLS([program_invocation_short_name], [ac_found=1], [], [#include ]) AC_CHECK_DECLS([__argv], [ac_found=1], [], [#include ]) # Incur the cost of this test only if none of the above worked. if test $ac_found = 0; then # On OpenBSD 5.1, using the global __progname variable appears to be # the only way to implement getprogname. AC_CACHE_CHECK([whether __progname is defined in default libraries], [gl_cv_var___progname], [ gl_cv_var___progname= AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[extern char *__progname;]], [[return *__progname;]] )], [gl_cv_var___progname=yes] ) ] ) if test "$gl_cv_var___progname" = yes; then AC_DEFINE([HAVE_VAR___PROGNAME], 1, [Define if you have a global __progname variable]) fi fi ]) make-4.3/m4/stddef_h.m40000644000175000017500000000450113611136472011564 00000000000000dnl A placeholder for , for platforms that have issues. # stddef_h.m4 serial 6 dnl Copyright (C) 2009-2020 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. AC_DEFUN([gl_STDDEF_H], [ AC_REQUIRE([gl_STDDEF_H_DEFAULTS]) AC_REQUIRE([gt_TYPE_WCHAR_T]) STDDEF_H= dnl Test whether the type max_align_t exists and whether its alignment dnl "is as great as is supported by the implementation in all contexts". AC_CACHE_CHECK([for good max_align_t], [gl_cv_type_max_align_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include unsigned int s = sizeof (max_align_t); #if defined __GNUC__ || defined __IBM__ALIGNOF__ int check1[2 * (__alignof__ (double) <= __alignof__ (max_align_t)) - 1]; int check2[2 * (__alignof__ (long double) <= __alignof__ (max_align_t)) - 1]; #endif ]])], [gl_cv_type_max_align_t=yes], [gl_cv_type_max_align_t=no]) ]) if test $gl_cv_type_max_align_t = no; then HAVE_MAX_ALIGN_T=0 STDDEF_H=stddef.h fi if test $gt_cv_c_wchar_t = no; then HAVE_WCHAR_T=0 STDDEF_H=stddef.h fi AC_CACHE_CHECK([whether NULL can be used in arbitrary expressions], [gl_cv_decl_null_works], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include int test[2 * (sizeof NULL == sizeof (void *)) -1]; ]])], [gl_cv_decl_null_works=yes], [gl_cv_decl_null_works=no])]) if test $gl_cv_decl_null_works = no; then REPLACE_NULL=1 STDDEF_H=stddef.h fi AC_SUBST([STDDEF_H]) AM_CONDITIONAL([GL_GENERATE_STDDEF_H], [test -n "$STDDEF_H"]) if test -n "$STDDEF_H"; then gl_NEXT_HEADERS([stddef.h]) fi ]) AC_DEFUN([gl_STDDEF_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_STDDEF_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) AC_DEFUN([gl_STDDEF_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. REPLACE_NULL=0; AC_SUBST([REPLACE_NULL]) HAVE_MAX_ALIGN_T=1; AC_SUBST([HAVE_MAX_ALIGN_T]) HAVE_WCHAR_T=1; AC_SUBST([HAVE_WCHAR_T]) ]) make-4.3/m4/close.m40000644000175000017500000000222113611136472011106 00000000000000# close.m4 serial 9 dnl Copyright (C) 2008-2020 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. AC_DEFUN([gl_FUNC_CLOSE], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) m4_ifdef([gl_MSVC_INVAL], [ AC_REQUIRE([gl_MSVC_INVAL]) if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then REPLACE_CLOSE=1 fi ]) m4_ifdef([gl_PREREQ_SYS_H_WINSOCK2], [ gl_PREREQ_SYS_H_WINSOCK2 if test $UNISTD_H_HAVE_WINSOCK2_H = 1; then dnl Even if the 'socket' module is not used here, another part of the dnl application may use it and pass file descriptors that refer to dnl sockets to the close() function. So enable the support for sockets. REPLACE_CLOSE=1 fi ]) dnl Replace close() for supporting the gnulib-defined fchdir() function, dnl to keep fchdir's bookkeeping up-to-date. m4_ifdef([gl_FUNC_FCHDIR], [ if test $REPLACE_CLOSE = 0; then gl_TEST_FCHDIR if test $HAVE_FCHDIR = 0; then REPLACE_CLOSE=1 fi fi ]) ]) make-4.3/m4/double-slash-root.m40000644000175000017500000000312513611136472013350 00000000000000# double-slash-root.m4 serial 4 -*- Autoconf -*- dnl Copyright (C) 2006, 2008-2020 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. AC_DEFUN([gl_DOUBLE_SLASH_ROOT], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([whether // is distinct from /], [gl_cv_double_slash_root], [ if test x"$cross_compiling" = xyes ; then # When cross-compiling, there is no way to tell whether // is special # short of a list of hosts. However, the only known hosts to date # that have a distinct // are Apollo DomainOS (too old to port to), # Cygwin, and z/OS. If anyone knows of another system for which // has # special semantics and is distinct from /, please report it to # . case $host in *-cygwin | i370-ibm-openedition) gl_cv_double_slash_root=yes ;; *) # Be optimistic and assume that / and // are the same when we # don't know. gl_cv_double_slash_root='unknown, assuming no' ;; esac else set x `ls -di / // 2>/dev/null` if test "$[2]" = "$[4]" && wc //dev/null >/dev/null 2>&1; then gl_cv_double_slash_root=no else gl_cv_double_slash_root=yes fi fi]) if test "$gl_cv_double_slash_root" = yes; then AC_DEFINE([DOUBLE_SLASH_IS_DISTINCT_ROOT], [1], [Define to 1 if // is a file system root distinct from /.]) fi ]) make-4.3/m4/longlong.m40000644000175000017500000001120313611136462011617 00000000000000# 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 @%:@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));]]) ]) make-4.3/m4/sys_socket_h.m40000644000175000017500000001464713611136472012515 00000000000000# sys_socket_h.m4 serial 24 dnl Copyright (C) 2005-2020 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 Simon Josefsson. AC_DEFUN([gl_HEADER_SYS_SOCKET], [ AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl On OSF/1, the functions recv(), send(), recvfrom(), sendto() have dnl old-style declarations (with return type 'int' instead of 'ssize_t') dnl unless _POSIX_PII_SOCKET is defined. case "$host_os" in osf*) AC_DEFINE([_POSIX_PII_SOCKET], [1], [Define to 1 in order to get the POSIX compatible declarations of socket functions.]) ;; esac AC_CACHE_CHECK([whether is self-contained], [gl_cv_header_sys_socket_h_selfcontained], [ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[]])], [gl_cv_header_sys_socket_h_selfcontained=yes], [gl_cv_header_sys_socket_h_selfcontained=no]) ]) if test $gl_cv_header_sys_socket_h_selfcontained = yes; then dnl If the shutdown function exists, should define dnl SHUT_RD, SHUT_WR, SHUT_RDWR. AC_CHECK_FUNCS([shutdown]) if test $ac_cv_func_shutdown = yes; then AC_CACHE_CHECK([whether defines the SHUT_* macros], [gl_cv_header_sys_socket_h_shut], [ AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include ]], [[int a[] = { SHUT_RD, SHUT_WR, SHUT_RDWR };]])], [gl_cv_header_sys_socket_h_shut=yes], [gl_cv_header_sys_socket_h_shut=no]) ]) if test $gl_cv_header_sys_socket_h_shut = no; then SYS_SOCKET_H='sys/socket.h' fi fi fi # We need to check for ws2tcpip.h now. gl_PREREQ_SYS_H_SOCKET AC_CHECK_TYPES([struct sockaddr_storage, sa_family_t],,,[ /* sys/types.h is not needed according to POSIX, but the sys/socket.h in i386-unknown-freebsd4.10 and powerpc-apple-darwin5.5 required it. */ #include #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_WS2TCPIP_H #include #endif ]) if test $ac_cv_type_struct_sockaddr_storage = no; then HAVE_STRUCT_SOCKADDR_STORAGE=0 fi if test $ac_cv_type_sa_family_t = no; then HAVE_SA_FAMILY_T=0 fi if test $ac_cv_type_struct_sockaddr_storage != no; then AC_CHECK_MEMBERS([struct sockaddr_storage.ss_family], [], [HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=0], [#include #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_WS2TCPIP_H #include #endif ]) fi if test $HAVE_STRUCT_SOCKADDR_STORAGE = 0 || test $HAVE_SA_FAMILY_T = 0 \ || test $HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = 0; then SYS_SOCKET_H='sys/socket.h' fi gl_PREREQ_SYS_H_WINSOCK2 dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ /* Some systems require prerequisite headers. */ #include #include ]], [socket connect accept bind getpeername getsockname getsockopt listen recv send recvfrom sendto setsockopt shutdown accept4]) ]) AC_DEFUN([gl_PREREQ_SYS_H_SOCKET], [ dnl Check prerequisites of the replacement. AC_REQUIRE([gl_CHECK_SOCKET_HEADERS]) gl_CHECK_NEXT_HEADERS([sys/socket.h]) if test $ac_cv_header_sys_socket_h = yes; then HAVE_SYS_SOCKET_H=1 else HAVE_SYS_SOCKET_H=0 fi AC_SUBST([HAVE_SYS_SOCKET_H]) gl_PREREQ_SYS_H_WS2TCPIP ]) # Common prerequisites of the replacement and of the # replacement. # Sets and substitutes HAVE_WINSOCK2_H. AC_DEFUN([gl_PREREQ_SYS_H_WINSOCK2], [ m4_ifdef([gl_UNISTD_H_DEFAULTS], [AC_REQUIRE([gl_UNISTD_H_DEFAULTS])]) m4_ifdef([gl_SYS_IOCTL_H_DEFAULTS], [AC_REQUIRE([gl_SYS_IOCTL_H_DEFAULTS])]) AC_CHECK_HEADERS_ONCE([sys/socket.h]) if test $ac_cv_header_sys_socket_h != yes; then dnl We cannot use AC_CHECK_HEADERS_ONCE here, because that would make dnl the check for those headers unconditional; yet cygwin reports dnl that the headers are present but cannot be compiled (since on dnl cygwin, all socket information should come from sys/socket.h). AC_CHECK_HEADERS([winsock2.h]) fi if test "$ac_cv_header_winsock2_h" = yes; then HAVE_WINSOCK2_H=1 UNISTD_H_HAVE_WINSOCK2_H=1 SYS_IOCTL_H_HAVE_WINSOCK2_H=1 else HAVE_WINSOCK2_H=0 fi AC_SUBST([HAVE_WINSOCK2_H]) ]) # Common prerequisites of the replacement and of the # replacement. # Sets and substitutes HAVE_WS2TCPIP_H. AC_DEFUN([gl_PREREQ_SYS_H_WS2TCPIP], [ AC_REQUIRE([gl_CHECK_SOCKET_HEADERS]) if test $ac_cv_header_sys_socket_h = yes; then HAVE_WS2TCPIP_H=0 else if test $ac_cv_header_ws2tcpip_h = yes; then HAVE_WS2TCPIP_H=1 else HAVE_WS2TCPIP_H=0 fi fi AC_SUBST([HAVE_WS2TCPIP_H]) ]) AC_DEFUN([gl_SYS_SOCKET_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) AC_DEFUN([gl_SYS_SOCKET_H_DEFAULTS], [ GNULIB_SOCKET=0; AC_SUBST([GNULIB_SOCKET]) GNULIB_CONNECT=0; AC_SUBST([GNULIB_CONNECT]) GNULIB_ACCEPT=0; AC_SUBST([GNULIB_ACCEPT]) GNULIB_BIND=0; AC_SUBST([GNULIB_BIND]) GNULIB_GETPEERNAME=0; AC_SUBST([GNULIB_GETPEERNAME]) GNULIB_GETSOCKNAME=0; AC_SUBST([GNULIB_GETSOCKNAME]) GNULIB_GETSOCKOPT=0; AC_SUBST([GNULIB_GETSOCKOPT]) GNULIB_LISTEN=0; AC_SUBST([GNULIB_LISTEN]) GNULIB_RECV=0; AC_SUBST([GNULIB_RECV]) GNULIB_SEND=0; AC_SUBST([GNULIB_SEND]) GNULIB_RECVFROM=0; AC_SUBST([GNULIB_RECVFROM]) GNULIB_SENDTO=0; AC_SUBST([GNULIB_SENDTO]) GNULIB_SETSOCKOPT=0; AC_SUBST([GNULIB_SETSOCKOPT]) GNULIB_SHUTDOWN=0; AC_SUBST([GNULIB_SHUTDOWN]) GNULIB_ACCEPT4=0; AC_SUBST([GNULIB_ACCEPT4]) HAVE_STRUCT_SOCKADDR_STORAGE=1; AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE]) HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=1; AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY]) HAVE_SA_FAMILY_T=1; AC_SUBST([HAVE_SA_FAMILY_T]) HAVE_ACCEPT4=1; AC_SUBST([HAVE_ACCEPT4]) ]) make-4.3/m4/multiarch.m40000644000175000017500000000367413611136472012006 00000000000000# multiarch.m4 serial 7 dnl Copyright (C) 2008-2020 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. # Determine whether the compiler is or may be producing universal binaries. # # On Mac OS X 10.5 and later systems, the user can create libraries and # executables that work on multiple system types--known as "fat" or # "universal" binaries--by specifying multiple '-arch' options to the # compiler but only a single '-arch' option to the preprocessor. Like # this: # # ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ # CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ # CPP="gcc -E" CXXCPP="g++ -E" # # Detect this situation and set APPLE_UNIVERSAL_BUILD accordingly. AC_DEFUN_ONCE([gl_MULTIARCH], [ dnl Code similar to autoconf-2.63 AC_C_BIGENDIAN. gl_cv_c_multiarch=no AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; ]])], [ dnl Check for potential -arch flags. It is not universal unless dnl there are at least two -arch flags with different values. arch= prev= for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do if test -n "$prev"; then case $word in i?86 | x86_64 | ppc | ppc64) if test -z "$arch" || test "$arch" = "$word"; then arch="$word" else gl_cv_c_multiarch=yes fi ;; esac prev= else if test "x$word" = "x-arch"; then prev=arch fi fi done ]) if test $gl_cv_c_multiarch = yes; then APPLE_UNIVERSAL_BUILD=1 else APPLE_UNIVERSAL_BUILD=0 fi AC_SUBST([APPLE_UNIVERSAL_BUILD]) ]) make-4.3/m4/eaccess.m40000644000175000017500000000070513611136472011414 00000000000000# eaccess.m4 serial 2 dnl Copyright (C) 2003, 2009-2020 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. AC_DEFUN([gl_FUNC_EACCESS], [ AC_CHECK_FUNC([eaccess], , [AC_DEFINE([eaccess], [access], [Define as 'access' if you don't have the eaccess() function.])]) ]) make-4.3/m4/include_next.m40000644000175000017500000002106113611136472012465 00000000000000# include_next.m4 serial 24 dnl Copyright (C) 2006-2020 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 and Derek Price. dnl Sets INCLUDE_NEXT, INCLUDE_NEXT_AS_FIRST_DIRECTIVE, PRAGMA_SYSTEM_HEADER, dnl and PRAGMA_COLUMNS. dnl dnl INCLUDE_NEXT expands to 'include_next' if the compiler supports it, or to dnl 'include' otherwise. dnl dnl INCLUDE_NEXT_AS_FIRST_DIRECTIVE expands to 'include_next' if the compiler dnl supports it in the special case that it is the first include directive in dnl the given file, or to 'include' otherwise. dnl dnl PRAGMA_SYSTEM_HEADER can be used in files that contain #include_next, dnl so as to avoid GCC warnings when the gcc option -pedantic is used. dnl '#pragma GCC system_header' has the same effect as if the file was found dnl through the include search path specified with '-isystem' options (as dnl opposed to the search path specified with '-I' options). Namely, gcc dnl does not warn about some things, and on some systems (Solaris and Interix) dnl __STDC__ evaluates to 0 instead of to 1. The latter is an undesired side dnl effect; we are therefore careful to use 'defined __STDC__' or '1' instead dnl of plain '__STDC__'. dnl dnl PRAGMA_COLUMNS can be used in files that override system header files, so dnl as to avoid compilation errors on HP NonStop systems when the gnulib file dnl is included by a system header file that does a "#pragma COLUMNS 80" (which dnl has the effect of truncating the lines of that file and all files that it dnl includes to 80 columns) and the gnulib file has lines longer than 80 dnl columns. AC_DEFUN([gl_INCLUDE_NEXT], [ AC_LANG_PREPROC_REQUIRE() AC_CACHE_CHECK([whether the preprocessor supports include_next], [gl_cv_have_include_next], [rm -rf conftestd1a conftestd1b conftestd2 mkdir conftestd1a conftestd1b conftestd2 dnl IBM C 9.0, 10.1 (original versions, prior to the 2009-01 updates) on dnl AIX 6.1 support include_next when used as first preprocessor directive dnl in a file, but not when preceded by another include directive. Check dnl for this bug by including . dnl Additionally, with this same compiler, include_next is a no-op when dnl used in a header file that was included by specifying its absolute dnl file name. Despite these two bugs, include_next is used in the dnl compiler's . By virtue of the second bug, we need to use dnl include_next as well in this case. cat < conftestd1a/conftest.h #define DEFINED_IN_CONFTESTD1 #include_next #ifdef DEFINED_IN_CONFTESTD2 int foo; #else #error "include_next doesn't work" #endif EOF cat < conftestd1b/conftest.h #define DEFINED_IN_CONFTESTD1 #include #include_next #ifdef DEFINED_IN_CONFTESTD2 int foo; #else #error "include_next doesn't work" #endif EOF cat < conftestd2/conftest.h #ifndef DEFINED_IN_CONFTESTD1 #error "include_next test doesn't work" #endif #define DEFINED_IN_CONFTESTD2 EOF gl_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2" dnl We intentionally avoid using AC_LANG_SOURCE here. AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include ]], [gl_cv_have_include_next=yes], [CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2" AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include ]], [gl_cv_have_include_next=buggy], [gl_cv_have_include_next=no]) ]) CPPFLAGS="$gl_save_CPPFLAGS" rm -rf conftestd1a conftestd1b conftestd2 ]) PRAGMA_SYSTEM_HEADER= if test $gl_cv_have_include_next = yes; then INCLUDE_NEXT=include_next INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next if test -n "$GCC"; then PRAGMA_SYSTEM_HEADER='#pragma GCC system_header' fi else if test $gl_cv_have_include_next = buggy; then INCLUDE_NEXT=include INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next else INCLUDE_NEXT=include INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include fi fi AC_SUBST([INCLUDE_NEXT]) AC_SUBST([INCLUDE_NEXT_AS_FIRST_DIRECTIVE]) AC_SUBST([PRAGMA_SYSTEM_HEADER]) AC_CACHE_CHECK([whether system header files limit the line length], [gl_cv_pragma_columns], [dnl HP NonStop systems, which define __TANDEM, have this misfeature. AC_EGREP_CPP([choke me], [ #ifdef __TANDEM choke me #endif ], [gl_cv_pragma_columns=yes], [gl_cv_pragma_columns=no]) ]) if test $gl_cv_pragma_columns = yes; then PRAGMA_COLUMNS="#pragma COLUMNS 10000" else PRAGMA_COLUMNS= fi AC_SUBST([PRAGMA_COLUMNS]) ]) # gl_CHECK_NEXT_HEADERS(HEADER1 HEADER2 ...) # ------------------------------------------ # For each arg foo.h, if #include_next works, define NEXT_FOO_H to be # ''; otherwise define it to be # '"///usr/include/foo.h"', or whatever other absolute file name is suitable. # Also, if #include_next works as first preprocessing directive in a file, # define NEXT_AS_FIRST_DIRECTIVE_FOO_H to be ''; otherwise define it to # be # '"///usr/include/foo.h"', or whatever other absolute file name is suitable. # That way, a header file with the following line: # #@INCLUDE_NEXT@ @NEXT_FOO_H@ # or # #@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_FOO_H@ # behaves (after sed substitution) as if it contained # #include_next # even if the compiler does not support include_next. # The three "///" are to pacify Sun C 5.8, which otherwise would say # "warning: #include of /usr/include/... may be non-portable". # Use '""', not '<>', so that the /// cannot be confused with a C99 comment. # Note: This macro assumes that the header file is not empty after # preprocessing, i.e. it does not only define preprocessor macros but also # provides some type/enum definitions or function/variable declarations. # # This macro also checks whether each header exists, by invoking # AC_CHECK_HEADERS_ONCE or AC_CHECK_HEADERS on each argument. AC_DEFUN([gl_CHECK_NEXT_HEADERS], [ gl_NEXT_HEADERS_INTERNAL([$1], [check]) ]) # gl_NEXT_HEADERS(HEADER1 HEADER2 ...) # ------------------------------------ # Like gl_CHECK_NEXT_HEADERS, except do not check whether the headers exist. # This is suitable for headers like that are standardized by C89 # and therefore can be assumed to exist. AC_DEFUN([gl_NEXT_HEADERS], [ gl_NEXT_HEADERS_INTERNAL([$1], [assume]) ]) # The guts of gl_CHECK_NEXT_HEADERS and gl_NEXT_HEADERS. AC_DEFUN([gl_NEXT_HEADERS_INTERNAL], [ AC_REQUIRE([gl_INCLUDE_NEXT]) AC_REQUIRE([AC_CANONICAL_HOST]) m4_if([$2], [check], [AC_CHECK_HEADERS_ONCE([$1]) ]) dnl FIXME: gl_next_header and gl_header_exists must be used unquoted dnl until we can assume autoconf 2.64 or newer. m4_foreach_w([gl_HEADER_NAME], [$1], [AS_VAR_PUSHDEF([gl_next_header], [gl_cv_next_]m4_defn([gl_HEADER_NAME])) if test $gl_cv_have_include_next = yes; then AS_VAR_SET(gl_next_header, ['<'gl_HEADER_NAME'>']) else AC_CACHE_CHECK( [absolute name of <]m4_defn([gl_HEADER_NAME])[>], m4_defn([gl_next_header]), [m4_if([$2], [check], [AS_VAR_PUSHDEF([gl_header_exists], [ac_cv_header_]m4_defn([gl_HEADER_NAME])) if test AS_VAR_GET(gl_header_exists) = yes; then AS_VAR_POPDEF([gl_header_exists]) ]) gl_ABSOLUTE_HEADER_ONE(gl_HEADER_NAME) AS_VAR_COPY([gl_header], [gl_cv_absolute_]AS_TR_SH(gl_HEADER_NAME)) AS_VAR_SET(gl_next_header, ['"'$gl_header'"']) m4_if([$2], [check], [else AS_VAR_SET(gl_next_header, ['<'gl_HEADER_NAME'>']) fi ]) ]) fi AC_SUBST( AS_TR_CPP([NEXT_]m4_defn([gl_HEADER_NAME])), [AS_VAR_GET(gl_next_header)]) if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'gl_HEADER_NAME'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=AS_VAR_GET(gl_next_header) fi AC_SUBST( AS_TR_CPP([NEXT_AS_FIRST_DIRECTIVE_]m4_defn([gl_HEADER_NAME])), [$gl_next_as_first_directive]) AS_VAR_POPDEF([gl_next_header])]) ]) # Autoconf 2.68 added warnings for our use of AC_COMPILE_IFELSE; # this fallback is safe for all earlier autoconf versions. m4_define_default([AC_LANG_DEFINES_PROVIDED]) make-4.3/m4/unistd_h.m40000644000175000017500000002317513611136472011631 00000000000000# unistd_h.m4 serial 76 dnl Copyright (C) 2006-2020 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 Written by Simon Josefsson, Bruno Haible. AC_DEFUN([gl_UNISTD_H], [ dnl Use AC_REQUIRE here, so that the default behavior below is expanded dnl once only, before all statements that occur in other macros. AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) gl_CHECK_NEXT_HEADERS([unistd.h]) if test $ac_cv_header_unistd_h = yes; then HAVE_UNISTD_H=1 else HAVE_UNISTD_H=0 fi AC_SUBST([HAVE_UNISTD_H]) dnl Ensure the type pid_t gets defined. AC_REQUIRE([AC_TYPE_PID_T]) dnl Determine WINDOWS_64_BIT_OFF_T. AC_REQUIRE([gl_TYPE_OFF_T]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ #if HAVE_UNISTD_H # include #endif /* Some systems declare various items in the wrong headers. */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include # include # include # if defined _WIN32 && ! defined __CYGWIN__ # include # endif #endif ]], [access chdir chown dup dup2 dup3 environ euidaccess faccessat fchdir fchownat fdatasync fsync ftruncate getcwd getdomainname getdtablesize getgroups gethostname getlogin getlogin_r getpagesize getpass getusershell setusershell endusershell group_member isatty lchown link linkat lseek pipe pipe2 pread pwrite readlink readlinkat rmdir sethostname sleep symlink symlinkat truncate ttyname_r unlink unlinkat usleep]) ]) AC_DEFUN([gl_UNISTD_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) AC_DEFUN([gl_UNISTD_H_DEFAULTS], [ GNULIB_ACCESS=0; AC_SUBST([GNULIB_ACCESS]) GNULIB_CHDIR=0; AC_SUBST([GNULIB_CHDIR]) GNULIB_CHOWN=0; AC_SUBST([GNULIB_CHOWN]) GNULIB_CLOSE=0; AC_SUBST([GNULIB_CLOSE]) GNULIB_COPY_FILE_RANGE=0; AC_SUBST([GNULIB_COPY_FILE_RANGE]) GNULIB_DUP=0; AC_SUBST([GNULIB_DUP]) GNULIB_DUP2=0; AC_SUBST([GNULIB_DUP2]) GNULIB_DUP3=0; AC_SUBST([GNULIB_DUP3]) GNULIB_ENVIRON=0; AC_SUBST([GNULIB_ENVIRON]) GNULIB_EUIDACCESS=0; AC_SUBST([GNULIB_EUIDACCESS]) GNULIB_FACCESSAT=0; AC_SUBST([GNULIB_FACCESSAT]) GNULIB_FCHDIR=0; AC_SUBST([GNULIB_FCHDIR]) GNULIB_FCHOWNAT=0; AC_SUBST([GNULIB_FCHOWNAT]) GNULIB_FDATASYNC=0; AC_SUBST([GNULIB_FDATASYNC]) GNULIB_FSYNC=0; AC_SUBST([GNULIB_FSYNC]) GNULIB_FTRUNCATE=0; AC_SUBST([GNULIB_FTRUNCATE]) GNULIB_GETCWD=0; AC_SUBST([GNULIB_GETCWD]) GNULIB_GETDOMAINNAME=0; AC_SUBST([GNULIB_GETDOMAINNAME]) GNULIB_GETDTABLESIZE=0; AC_SUBST([GNULIB_GETDTABLESIZE]) GNULIB_GETGROUPS=0; AC_SUBST([GNULIB_GETGROUPS]) GNULIB_GETHOSTNAME=0; AC_SUBST([GNULIB_GETHOSTNAME]) GNULIB_GETLOGIN=0; AC_SUBST([GNULIB_GETLOGIN]) GNULIB_GETLOGIN_R=0; AC_SUBST([GNULIB_GETLOGIN_R]) GNULIB_GETPAGESIZE=0; AC_SUBST([GNULIB_GETPAGESIZE]) GNULIB_GETPASS=0; AC_SUBST([GNULIB_GETPASS]) GNULIB_GETUSERSHELL=0; AC_SUBST([GNULIB_GETUSERSHELL]) GNULIB_GROUP_MEMBER=0; AC_SUBST([GNULIB_GROUP_MEMBER]) GNULIB_ISATTY=0; AC_SUBST([GNULIB_ISATTY]) GNULIB_LCHOWN=0; AC_SUBST([GNULIB_LCHOWN]) GNULIB_LINK=0; AC_SUBST([GNULIB_LINK]) GNULIB_LINKAT=0; AC_SUBST([GNULIB_LINKAT]) GNULIB_LSEEK=0; AC_SUBST([GNULIB_LSEEK]) GNULIB_PIPE=0; AC_SUBST([GNULIB_PIPE]) GNULIB_PIPE2=0; AC_SUBST([GNULIB_PIPE2]) GNULIB_PREAD=0; AC_SUBST([GNULIB_PREAD]) GNULIB_PWRITE=0; AC_SUBST([GNULIB_PWRITE]) GNULIB_READ=0; AC_SUBST([GNULIB_READ]) GNULIB_READLINK=0; AC_SUBST([GNULIB_READLINK]) GNULIB_READLINKAT=0; AC_SUBST([GNULIB_READLINKAT]) GNULIB_RMDIR=0; AC_SUBST([GNULIB_RMDIR]) GNULIB_SETHOSTNAME=0; AC_SUBST([GNULIB_SETHOSTNAME]) GNULIB_SLEEP=0; AC_SUBST([GNULIB_SLEEP]) GNULIB_SYMLINK=0; AC_SUBST([GNULIB_SYMLINK]) GNULIB_SYMLINKAT=0; AC_SUBST([GNULIB_SYMLINKAT]) GNULIB_TRUNCATE=0; AC_SUBST([GNULIB_TRUNCATE]) GNULIB_TTYNAME_R=0; AC_SUBST([GNULIB_TTYNAME_R]) GNULIB_UNISTD_H_NONBLOCKING=0; AC_SUBST([GNULIB_UNISTD_H_NONBLOCKING]) GNULIB_UNISTD_H_SIGPIPE=0; AC_SUBST([GNULIB_UNISTD_H_SIGPIPE]) GNULIB_UNLINK=0; AC_SUBST([GNULIB_UNLINK]) GNULIB_UNLINKAT=0; AC_SUBST([GNULIB_UNLINKAT]) GNULIB_USLEEP=0; AC_SUBST([GNULIB_USLEEP]) GNULIB_WRITE=0; AC_SUBST([GNULIB_WRITE]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_CHOWN=1; AC_SUBST([HAVE_CHOWN]) HAVE_COPY_FILE_RANGE=1; AC_SUBST([HAVE_COPY_FILE_RANGE]) HAVE_DUP2=1; AC_SUBST([HAVE_DUP2]) HAVE_DUP3=1; AC_SUBST([HAVE_DUP3]) HAVE_EUIDACCESS=1; AC_SUBST([HAVE_EUIDACCESS]) HAVE_FACCESSAT=1; AC_SUBST([HAVE_FACCESSAT]) HAVE_FCHDIR=1; AC_SUBST([HAVE_FCHDIR]) HAVE_FCHOWNAT=1; AC_SUBST([HAVE_FCHOWNAT]) HAVE_FDATASYNC=1; AC_SUBST([HAVE_FDATASYNC]) HAVE_FSYNC=1; AC_SUBST([HAVE_FSYNC]) HAVE_FTRUNCATE=1; AC_SUBST([HAVE_FTRUNCATE]) HAVE_GETDTABLESIZE=1; AC_SUBST([HAVE_GETDTABLESIZE]) HAVE_GETGROUPS=1; AC_SUBST([HAVE_GETGROUPS]) HAVE_GETHOSTNAME=1; AC_SUBST([HAVE_GETHOSTNAME]) HAVE_GETLOGIN=1; AC_SUBST([HAVE_GETLOGIN]) HAVE_GETPAGESIZE=1; AC_SUBST([HAVE_GETPAGESIZE]) HAVE_GETPASS=1; AC_SUBST([HAVE_GETPASS]) HAVE_GROUP_MEMBER=1; AC_SUBST([HAVE_GROUP_MEMBER]) HAVE_LCHOWN=1; AC_SUBST([HAVE_LCHOWN]) HAVE_LINK=1; AC_SUBST([HAVE_LINK]) HAVE_LINKAT=1; AC_SUBST([HAVE_LINKAT]) HAVE_PIPE=1; AC_SUBST([HAVE_PIPE]) HAVE_PIPE2=1; AC_SUBST([HAVE_PIPE2]) HAVE_PREAD=1; AC_SUBST([HAVE_PREAD]) HAVE_PWRITE=1; AC_SUBST([HAVE_PWRITE]) HAVE_READLINK=1; AC_SUBST([HAVE_READLINK]) HAVE_READLINKAT=1; AC_SUBST([HAVE_READLINKAT]) HAVE_SETHOSTNAME=1; AC_SUBST([HAVE_SETHOSTNAME]) HAVE_SLEEP=1; AC_SUBST([HAVE_SLEEP]) HAVE_SYMLINK=1; AC_SUBST([HAVE_SYMLINK]) HAVE_SYMLINKAT=1; AC_SUBST([HAVE_SYMLINKAT]) HAVE_UNLINKAT=1; AC_SUBST([HAVE_UNLINKAT]) HAVE_USLEEP=1; AC_SUBST([HAVE_USLEEP]) HAVE_DECL_ENVIRON=1; AC_SUBST([HAVE_DECL_ENVIRON]) HAVE_DECL_FCHDIR=1; AC_SUBST([HAVE_DECL_FCHDIR]) HAVE_DECL_FDATASYNC=1; AC_SUBST([HAVE_DECL_FDATASYNC]) HAVE_DECL_GETDOMAINNAME=1; AC_SUBST([HAVE_DECL_GETDOMAINNAME]) HAVE_DECL_GETLOGIN=1; AC_SUBST([HAVE_DECL_GETLOGIN]) HAVE_DECL_GETLOGIN_R=1; AC_SUBST([HAVE_DECL_GETLOGIN_R]) HAVE_DECL_GETPAGESIZE=1; AC_SUBST([HAVE_DECL_GETPAGESIZE]) HAVE_DECL_GETUSERSHELL=1; AC_SUBST([HAVE_DECL_GETUSERSHELL]) HAVE_DECL_SETHOSTNAME=1; AC_SUBST([HAVE_DECL_SETHOSTNAME]) HAVE_DECL_TRUNCATE=1; AC_SUBST([HAVE_DECL_TRUNCATE]) HAVE_DECL_TTYNAME_R=1; AC_SUBST([HAVE_DECL_TTYNAME_R]) HAVE_OS_H=0; AC_SUBST([HAVE_OS_H]) HAVE_SYS_PARAM_H=0; AC_SUBST([HAVE_SYS_PARAM_H]) REPLACE_ACCESS=0; AC_SUBST([REPLACE_ACCESS]) REPLACE_CHOWN=0; AC_SUBST([REPLACE_CHOWN]) REPLACE_CLOSE=0; AC_SUBST([REPLACE_CLOSE]) REPLACE_DUP=0; AC_SUBST([REPLACE_DUP]) REPLACE_DUP2=0; AC_SUBST([REPLACE_DUP2]) REPLACE_FACCESSAT=0; AC_SUBST([REPLACE_FACCESSAT]) REPLACE_FCHOWNAT=0; AC_SUBST([REPLACE_FCHOWNAT]) REPLACE_FTRUNCATE=0; AC_SUBST([REPLACE_FTRUNCATE]) REPLACE_GETCWD=0; AC_SUBST([REPLACE_GETCWD]) REPLACE_GETDOMAINNAME=0; AC_SUBST([REPLACE_GETDOMAINNAME]) REPLACE_GETDTABLESIZE=0; AC_SUBST([REPLACE_GETDTABLESIZE]) REPLACE_GETLOGIN_R=0; AC_SUBST([REPLACE_GETLOGIN_R]) REPLACE_GETGROUPS=0; AC_SUBST([REPLACE_GETGROUPS]) REPLACE_GETPAGESIZE=0; AC_SUBST([REPLACE_GETPAGESIZE]) REPLACE_GETPASS=0; AC_SUBST([REPLACE_GETPASS]) REPLACE_ISATTY=0; AC_SUBST([REPLACE_ISATTY]) REPLACE_LCHOWN=0; AC_SUBST([REPLACE_LCHOWN]) REPLACE_LINK=0; AC_SUBST([REPLACE_LINK]) REPLACE_LINKAT=0; AC_SUBST([REPLACE_LINKAT]) REPLACE_LSEEK=0; AC_SUBST([REPLACE_LSEEK]) REPLACE_PREAD=0; AC_SUBST([REPLACE_PREAD]) REPLACE_PWRITE=0; AC_SUBST([REPLACE_PWRITE]) REPLACE_READ=0; AC_SUBST([REPLACE_READ]) REPLACE_READLINK=0; AC_SUBST([REPLACE_READLINK]) REPLACE_READLINKAT=0; AC_SUBST([REPLACE_READLINKAT]) REPLACE_RMDIR=0; AC_SUBST([REPLACE_RMDIR]) REPLACE_SLEEP=0; AC_SUBST([REPLACE_SLEEP]) REPLACE_SYMLINK=0; AC_SUBST([REPLACE_SYMLINK]) REPLACE_SYMLINKAT=0; AC_SUBST([REPLACE_SYMLINKAT]) REPLACE_TRUNCATE=0; AC_SUBST([REPLACE_TRUNCATE]) REPLACE_TTYNAME_R=0; AC_SUBST([REPLACE_TTYNAME_R]) REPLACE_UNLINK=0; AC_SUBST([REPLACE_UNLINK]) REPLACE_UNLINKAT=0; AC_SUBST([REPLACE_UNLINKAT]) REPLACE_USLEEP=0; AC_SUBST([REPLACE_USLEEP]) REPLACE_WRITE=0; AC_SUBST([REPLACE_WRITE]) UNISTD_H_HAVE_WINSOCK2_H=0; AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H]) UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0; AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS]) ]) make-4.3/m4/findprog-in.m40000644000175000017500000000061013611136472012215 00000000000000# findprog-in.m4 serial 1 dnl Copyright (C) 2003, 2009-2020 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. AC_DEFUN([gl_FINDPROG_IN], [ dnl Prerequisites of lib/findprog-in.c. AC_REQUIRE([gl_FUNC_EACCESS]) ]) make-4.3/m4/error.m40000644000175000017500000000151013611136472011132 00000000000000#serial 14 # Copyright (C) 1996-1998, 2001-2004, 2009-2020 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. AC_DEFUN([gl_ERROR], [ dnl We don't use AC_FUNC_ERROR_AT_LINE any more, because it is no longer dnl maintained in Autoconf and because it invokes AC_LIBOBJ. AC_CACHE_CHECK([for error_at_line], [ac_cv_lib_error_at_line], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[error_at_line (0, 0, "", 0, "an error occurred");]])], [ac_cv_lib_error_at_line=yes], [ac_cv_lib_error_at_line=no])]) ]) # Prerequisites of lib/error.c. AC_DEFUN([gl_PREREQ_ERROR], [ AC_REQUIRE([AC_FUNC_STRERROR_R]) : ]) make-4.3/m4/po.m40000644000175000017500000004503713611136462010432 00000000000000# 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. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered 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 Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. 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([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.19]) dnl Perform the following tests also if --disable-nls has been given, dnl because they are needed for "make dist" to work. dnl Search for GNU msgfmt in the PATH. dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. dnl The second test excludes FreeBSD msgfmt. AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT]) dnl Test whether it is GNU msgfmt >= 0.15. changequote(,)dnl case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; *) MSGFMT_015=$MSGFMT ;; esac changequote([,])dnl AC_SUBST([MSGFMT_015]) changequote(,)dnl case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; *) GMSGFMT_015=$GMSGFMT ;; esac changequote([,])dnl AC_SUBST([GMSGFMT_015]) dnl Search for GNU xgettext 0.12 or newer in the PATH. dnl The first test excludes Solaris xgettext and early GNU xgettext versions. dnl The second test excludes FreeBSD xgettext. AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) dnl Remove leftover from FreeBSD xgettext call. rm -f messages.po dnl Test whether it is GNU xgettext >= 0.15. changequote(,)dnl case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; *) XGETTEXT_015=$XGETTEXT ;; esac changequote([,])dnl AC_SUBST([XGETTEXT_015]) dnl Search for GNU msgmerge 0.11 or newer in the PATH. AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :) dnl Installation directories. dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we dnl have to define it here, so that it can be used in po/Makefile. test -n "$localedir" || localedir='${datadir}/locale' AC_SUBST([localedir]) dnl Support for AM_XGETTEXT_OPTION. test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= AC_SUBST([XGETTEXT_EXTRA_OPTIONS]) AC_CONFIG_COMMANDS([po-directories], [[ for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. 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_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. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Treat a directory as a PO directory if and only if it has a # POTFILES.in file. This allows packages to have multiple PO # directories under different names or in different locations. 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" 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 # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then 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 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 assignment from automake < 1.5. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done]], [# Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it # from automake < 1.5. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" ]) ]) dnl Postprocesses a Makefile in a directory containing PO files. AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], [ # When this code is run, in config.status, two variables have already been # set: # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, # - LINGUAS is the value of the environment variable LINGUAS at configure # time. changequote(,)dnl # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|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. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Find a way to echo strings without interpreting backslash. if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then gt_echo='echo' else if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then gt_echo='printf %s\n' else echo_func () { cat < "$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" < /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/_/-/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" <> "$ac_file.tmp" <. case "$1" in "") echo 'Usage: mkshadow '; exit 1 ;; esac dest="$1" if [ ! -d "$dest" ]; then echo "Destination directory '$dest' must exist!" exit 1 fi if [ ! -f run_make_tests ]; then echo "The current directory doesn't appear to contain the test suite!" exit 1 fi suite=`pwd | sed 's%^/tmp_mnt%%'` name=`basename "$suite"` files=`echo *` set -e mkdir "$dest/$name" cd "$dest/$name" ln -s "$suite" .testdir for f in $files; do ln -s .testdir/$f . done rm -rf work echo "Shadow test suite created in '$dest/$name'." exit 0 make-4.3/tests/README0000644000175000017500000001110513603564437011251 00000000000000The test suite was originally written by Steve McGee and Chris Arthur. It is covered by the GNU General Public License (Version 2), described in the file COPYING. It has been maintained as part of GNU make proper since GNU make 3.78. This entire test suite, including all test files, are copyright and distributed under the following terms: ----------------------------------------------------------------------------- Copyright (C) 1992-2020 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 . ----------------------------------------------------------------------------- The test suite requires Perl. These days, you should have at least Perl 5.004 (available from ftp.gnu.org, and portable to many machines). It used to work with Perl 4.036 but official support for Perl 4.x was abandoned a long time ago, due to lack of testbeds, as well as interest. The test suite assumes that the first "diff" it finds on your PATH is GNU diff, but that only matters if a test fails. To run the test suite on a UNIX system, use "perl ./run_make_tests" (or just "./run_make_tests" if you have a perl on your PATH). To run the test suite on Windows NT or DOS systems, use "perl.exe ./run_make-tests.pl". By default, the test engine picks up the first executable called "make" that it finds in your path. You may use the -make_path option (i.e., "perl run_make_tests -make_path /usr/local/src/make-3.78/make") if you want to run a particular copy. This now works correctly with relative paths and when make is called something other than "make" (like "gmake"). Tests cannot end with a "~" character, as the test suite will ignore any that do (I was tired of having it run my Emacs backup files as tests :)) Also, sometimes the tests may behave strangely on networked filesystems. You can use mkshadow to create a copy of the test suite in /tmp or similar, and try again. If the error disappears, it's an issue with your network or file server, not GNU make (I believe). This shouldn't happen very often anymore: I've done a lot of work on the tests to reduce the impacts of this situation. The options/dash-l test will not really test anything if the copy of make you are using can't obtain the system load. Some systems require make to be setgid sys or kmem for this; if you don't want to install make just to test it, make it setgid to kmem or whatever group /dev/kmem is (i.e., "chgrp kmem make;chmod g+s make" as root). In any case, the options/dash-l test should no longer *fail* because make can't read /dev/kmem. A directory named "work" will be created when the tests are run which will contain any makefiles and "diff" files of tests that fail so that you may look at them afterward to see the output of make and the expected result. There is a -help option which will give you more information about the other possible options for the test suite. Open Issues ----------- The test suite has a number of problems which should be addressed. One VERY serious one is that there is no real documentation. You just have to see the existing tests. Use the newer tests: many of the tests haven't been updated to use the latest/greatest test methods. See the ChangeLog in the tests directory for pointers. The second serious problem is that it's not parallelizable: it scribbles all over its installation directory and so can only test one make at a time. The third serious problem is that it's not relocatable: the only way it works when you build out of the source tree is to create symlinks, which doesn't work on every system and is bogus to boot. The fourth serious problem is that it doesn't create its own sandbox when running tests, so that if a test forgets to clean up after itself that can impact future tests. Bugs ---- Any complaints/suggestions/bugs/etc. for the test suite itself (as opposed to problems in make that the suite finds) should be handled the same way as normal GNU make bugs/problems (see the README for GNU make). Paul D. Smith Chris Arthur make-4.3/tests/config_flags_pm.com0000755000175000017500000000334113603564437014214 00000000000000$! $! config_flags_pm.com - Build config-flags.pm on VMS. $! $! Just good enough to run the self tests for now. $! $! Copyright (C) 2014-2020 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 . $! $! $ open/read cfpm_in config-flags.pm.in $! $ outfile = "sys$disk:[]config-flags.pm" $! $ cflags = "/include=([],[.lib]" $! $ create 'outfile' $ open/append cfpm 'outfile' $! $cfpm_read_loop: $ read cfpm_in/end=cfpm_read_loop_end line_in $ line_in_len = f$length(line_in) $ if f$locate("@", line_in) .lt. line_in_len $ then $ part1 = f$element(0, "@", line_in) $ key = f$element(1, "@", line_in) $ part2 = f$element(2, "@", line_in) $ value = "" $ if key .eqs. "CC" then value = "CC" $ if key .eqs. "CPP" then value = "CPP" $ if key .eqs. "CFLAGS" then value = cflags $ if key .eqs. "GUILE_CFLAGS" then value = cflags $ if key .eqs. "USE_SYSTEM_GLOB" then value = "no" $ write cfpm part1, value, part2 $ goto cfpm_read_loop $ endif $ write cfpm line_in $ goto cfpm_read_loop $cfpm_read_loop_end: $ close cfpm_in $ close cfpm $! make-4.3/tests/guile.supp0000644000175000017500000000054713603564437012417 00000000000000# Guile valgrind suppression file # Created with Guile 1.8.7 # --- Garbage collection { guilegc Memcheck:Cond ... fun:scm_gc_for_newcell } { guilegc Memcheck:Value4 ... fun:scm_gc_for_newcell } { guilegc Memcheck:Value8 ... fun:scm_gc_for_newcell } # -- scm_alloc_struct { guileheap Memcheck:Leak ... fun:scm_alloc_struct } make-4.3/tests/config-flags.pm.W320000644000175000017500000000017313603564437013643 00000000000000# This is a -*-perl-*- script # # Set variables for Windows systems. %CONFIG_FLAGS = ( USE_SYSTEM_GLOB => 'no' ); 1; make-4.3/tests/run_make_tests.pl0000644000175000017500000004443213603564437013762 00000000000000#!/usr/bin/env perl # -*-perl-*- # Test driver for the Make test suite # Usage: run_make_tests [testname] # [-debug] # [-help] # [-verbose] # [-keep] # [-make ] # (and others) # Copyright (C) 1992-2020 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 . # Add the working directory to @INC and load the test driver use FindBin; use lib "$FindBin::Bin"; our $testsroot = $FindBin::Bin; require "test_driver.pl"; use File::Spec; use Cwd; $cwdpath = cwd(); ($cwdvol, $cwddir, $_) = File::Spec->splitpath($cwdpath, 1); # Some target systems might not have the POSIX module... $has_POSIX = eval { require "POSIX.pm" }; %FEATURES = (); $valgrind = 0; # invoke make with valgrind $valgrind_args = ''; $memcheck_args = '--num-callers=15 --tool=memcheck --leak-check=full --suppressions=guile.supp'; $massif_args = '--num-callers=15 --tool=massif --alloc-fn=xmalloc --alloc-fn=xcalloc --alloc-fn=xrealloc --alloc-fn=xstrdup --alloc-fn=xstrndup'; $pure_log = undef; # The location of the GNU make source directory $srcdir = undef; $fqsrcdir = undef; $srcvol = undef; # The location of the build directory $blddir = undef; $fqblddir = undef; $bldvol = undef; $make_path = undef; @make_command = (); $command_string = ''; $all_tests = 0; # Shell commands $sh_name = '/bin/sh'; $is_posix_sh = 1; $CMD_rmfile = 'rm -f'; # rmdir broken in some Perls on VMS. if ($^O eq 'VMS') { require VMS::Filespec; VMS::Filespec->import(); sub vms_rmdir { my $vms_file = vmspath($_[0]); $vms_file = fileify($vms_file); my $ret = unlink(vmsify($vms_file)); return $ret }; *CORE::GLOBAL::rmdir = \&vms_rmdir; $CMD_rmfile = 'delete_file -no_ask'; } %CONFIG_FLAGS = (); # Find the strings that will be generated for various error codes. # We want them from the C locale regardless of our current locale. $ERR_no_such_file = undef; $ERR_read_only_file = undef; $ERR_unreadable_file = undef; $ERR_nonexe_file = undef; $ERR_exe_dir = undef; { use locale; my $loc = undef; if ($has_POSIX) { POSIX->import(qw(locale_h)); # Windows has POSIX locale, but only LC_ALL not LC_MESSAGES $loc = POSIX::setlocale(&POSIX::LC_ALL); POSIX::setlocale(&POSIX::LC_ALL, 'C'); } if (open(my $F, '<', 'file.none')) { print "Opened non-existent file! Skipping related tests.\n"; } else { $ERR_no_such_file = "$!"; } unlink('file.out'); touch('file.out'); chmod(0444, 'file.out'); if (open(my $F, '>', 'file.out')) { print "Opened read-only file! Skipping related tests.\n"; close($F); } else { $ERR_read_only_file = "$!"; } $_ = `./file.out 2>/dev/null`; if ($? == 0) { print "Executed non-executable file! Skipping related tests.\n"; } else { $ERR_nonexe_file = "$!"; } $_ = `./. 2>/dev/null`; if ($? == 0) { print "Executed directory! Skipping related tests.\n"; } else { $ERR_exe_dir = "$!"; } chmod(0000, 'file.out'); if (open(my $F, '<', 'file.out')) { print "Opened unreadable file! Skipping related tests.\n"; close($F); } else { $ERR_unreadable_file = "$!"; } unlink('file.out') or die "Failed to delete file.out: $!\n"; $loc and POSIX::setlocale(&POSIX::LC_ALL, $loc); } #$SIG{INT} = sub { print STDERR "Caught a signal!\n"; die @_; }; sub valid_option { local($option) = @_; if ($option =~ /^-make([-_]?path)?$/i) { $make_path = shift @argv; if (!-f $make_path) { print "$option $make_path: Not found.\n"; exit 0; } return 1; } if ($option =~ /^-srcdir$/i) { $srcdir = shift @argv; if (! -f File::Spec->catfile($srcdir, 'src', 'gnumake.h')) { print "$option $srcdir: Not a valid GNU make source directory.\n"; exit 0; } return 1; } if ($option =~ /^-all([-_]?tests)?$/i) { $all_tests = 1; return 1; } if ($option =~ /^-(valgrind|memcheck)$/i) { $valgrind = 1; $valgrind_args = $memcheck_args; return 1; } if ($option =~ /^-massif$/i) { $valgrind = 1; $valgrind_args = $massif_args; return 1; } # This doesn't work--it _should_! Someone badly needs to fix this. # # elsif ($option =~ /^-work([-_]?dir)?$/) # { # $workdir = shift @argv; # return 1; # } return 0; } # This is an "all-in-one" function. Arguments are as follows: # # [0] (string): The makefile to be tested. undef means use the last one. # [1] (string): Arguments to pass to make. # [2] (string): Answer we should get back. # [3] (integer): Exit code we expect. A missing code means 0 (success) $makefile = undef; $old_makefile = undef; $mkpath = undef; $make_name = undef; $helptool = undef; sub subst_make_string { local $_ = shift; $makefile and s/#MAKEFILE#/$makefile/g; s/#MAKEPATH#/$mkpath/g; s/#MAKE#/$make_name/g; s/#PERL#/$perl_name/g; s/#PWD#/$cwdpath/g; # If we're using a shell s/#HELPER#/$perl_name $helptool/g; return $_; } 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 # one). if (! defined $makestring) { defined $old_makefile or die "run_make_test(undef) invoked before run_make_test('...')\n"; $makefile = $old_makefile; } else { if (! defined($makefile)) { $makefile = &get_tmpfile(); } # Make sure it ends in a newline and substitute any special tokens. $makestring && $makestring !~ /\n$/s and $makestring .= "\n"; $makestring = subst_make_string($makestring); # Populate the makefile! open(MAKEFILE, "> $makefile") or die "Failed to open $makefile: $!\n"; print MAKEFILE $makestring; close(MAKEFILE) or die "Failed to write $makefile: $!\n"; } # Do the same processing on $answer as we did on $makestring. if (defined $answer) { $answer && $answer !~ /\n$/s and $answer .= "\n"; $answer = subst_make_string($answer); } run_make_with_options($makefile, $options, &get_logfile(0), $err_code, $timeout, @call); &compare_output($answer, &get_logfile(1)); $old_makefile = $makefile; $makefile = undef; } sub add_options { my $cmd = shift; foreach (@_) { if (ref($cmd)) { push(@$cmd, ref($_) ? @$_ : $_); } else { $cmd .= ' '.(ref($_) ? "@$_" : $_); } } return $cmd; } sub create_command { return !$_[0] || ref($_[0]) ? [@make_command] : join(' ', @make_command); } # The old-fashioned way... # $options can be a scalar (string) or a ref to an array of options # If it's a scalar the entire argument is passed to system/exec etc. as # a single string. If it's a ref then the array is passed to system/exec. # Using a ref should be preferred as it's more portable but all the older # invocations use strings. sub run_make_with_options { my ($filename,$options,$logname,$expected_code,$timeout,@call) = @_; @call = caller unless @call; my $code; my $command = create_command($options); $expected_code = 0 unless defined($expected_code); # Reset to reflect this one test. $test_passed = 1; if ($filename) { $command = add_options($command, '-f', $filename); } if ($options) { if (!ref($options) && $^O eq 'VMS') { # Try to make sure arguments are properly quoted. # This does not handle all cases. # We should convert the tests to use array refs not strings # VMS uses double quotes instead of single quotes. $options =~ s/\'/\"/g; # If the leading quote is inside non-whitespace, then the # quote must be doubled, because it will be enclosed in another # set of quotes. $options =~ s/(\S)(\".*\")/$1\"$2\"/g; # Options must be quoted to preserve case if not already quoted. $options =~ s/(\S+)/\"$1\"/g; # Special fixup for embedded quotes. $options =~ s/(\"\".+)\"(\s+)\"(.+\"\")/$1$2$3/g; $options =~ s/(\A)(?:\"\")(.+)(?:\"\")/$1\"$2\"/g; # Special fixup for misc/general4 test. $options =~ s/""\@echo" "cc""/\@echo cc"/; $options =~ s/"\@echo link"""/\@echo link"/; # Remove shell escapes expected to be removed by bash if ($options !~ /path=pre/) { $options =~ s/\\//g; } # special fixup for options/eval $options =~ s/"--eval=\$\(info" "eval/"--eval=\$\(info eval/; print ("Options fixup = -$options-\n") if $debug; } $command = add_options($command, $options); } my $cmdstr = ref($command) ? "'".join("' '", @$command)."'" : $command; if (@call) { $command_string = "#$call[1]:$call[2]\n$cmdstr\n"; } else { $command_string = $cmdstr; } if ($valgrind) { print VALGRIND "\n\nExecuting: $cmdstr\n"; } { my $old_timeout = $test_timeout; $timeout and $test_timeout = $timeout; # If valgrind is enabled, turn off the timeout check $valgrind and $test_timeout = 0; if (ref($command)) { $code = run_command_with_output($logname, @$command); } else { $code = run_command_with_output($logname, $command); } $test_timeout = $old_timeout; } # Check to see if we have Purify errors. If so, keep the logfile. # For this to work you need to build with the Purify flag -exit-status=yes if ($pure_log && -f $pure_log) { if ($code & 0x7000) { $code &= ~0x7000; # If we have a purify log, save it $tn = $pure_testname . ($num_of_logfiles ? ".$num_of_logfiles" : ""); print("Renaming purify log file to $tn\n") if $debug; rename($pure_log, "$tn") or die "Can't rename $pure_log to $tn: $!\n"; ++$purify_errors; } else { unlink($pure_log); } } if ($code != $expected_code) { print "Error running @make_command (expected $expected_code; got $code): $cmdstr\n"; $test_passed = 0; &create_file (&get_runfile, $command_string); # If it's a SIGINT, stop here if ($code & 127) { print STDERR "\nCaught signal ".($code & 127)."!\n"; ($code & 127) == 2 and exit($code); } return 0; } if ($profile & $vos) { system "add_profile @make_command"; } return 1; } sub print_usage { &print_standard_usage ("run_make_tests", "[-make MAKE_PATHNAME] [-srcdir SRCDIR] [-memcheck] [-massif]",); } sub print_help { &print_standard_help ( "-make", "\tYou may specify the pathname of the copy of make to run.", "-srcdir", "\tSpecify the make source directory.", "-valgrind", "-memcheck", "\tRun the test suite under valgrind's memcheck tool.", "\tChange the default valgrind args with the VALGRIND_ARGS env var.", "-massif", "\tRun the test suite under valgrind's massif tool.", "\tChange the default valgrind args with the VALGRIND_ARGS env var." ); } sub set_defaults { # $profile = 1; $testee = "GNU make"; $make_path = "make"; $tmpfilesuffix = "mk"; if ($port_type eq 'UNIX') { $scriptsuffix = '.sh'; } elsif ($port_type eq 'VMS') { $scriptsuffix = '.com'; } else { $scriptsuffix = '.bat'; } } # This is no longer used: we import config-flags.pm instead # sub parse_status # { # if (open(my $fh, '<', "$_[0]/config.status")) { # while (my $line = <$fh>) { # $line =~ m/^[SD]\["([^\"]+)"\]=" *(.*)"/ and $CONFIG_FLAGS{$1} = $2; # } # return 1; # } # return 0; # } sub find_prog { my $prog = $_[0]; my ($v, $d, $f) = File::Spec->splitpath($prog); # If there's no directory then we need to search the PATH if (! $d) { foreach my $e (File::Spec->path()) { $prog = File::Spec->catfile($e, $f); if (-x $prog) { ($v, $d, $f) = File::Spec->splitpath($prog); last; } } } return ($v, $d, $f); } sub get_config { return exists($CONFIG_FLAGS{$_[0]}) ? $CONFIG_FLAGS{$_[0]} : ''; } sub set_more_defaults { my $string; # Now that we have located make_path, locate the srcdir and blddir my ($mpv, $mpd, $mpf) = find_prog($make_path); # We have a make program so try to compute the blddir. if ($mpd) { my $f = File::Spec->catpath($mpv, File::Spec->catdir($mpd, 'tests'), 'config-flags.pm'); if (-f $f) { $bldvol = $mpv; $blddir = $mpd; } } # If srcdir wasn't provided on the command line, try to find it. if (! $srcdir && $blddir) { # See if the blddir is the srcdir my $f = File::Spec->catpath($bldvol, File::Spec->catdir($blddir, 'src'), 'gnumake.h'); if (-f $f) { $srcdir = $blddir; $srcvol = $bldvol; } } if (! $srcdir) { # Not found, see if our parent is the source dir my $f = File::Spec->catpath($cwdvol, File::Spec->catdir(File::Spec->updir(), 'src'), 'gnumake.h'); if (-f $f) { $srcdir = File::Spec->updir(); $srcvol = $cwdvol; } } # If we have srcdir but not blddir, set them equal if ($srcdir && !$blddir) { $blddir = $srcdir; $bldvol = $srcvol; } # Load the config flags if (!$blddir) { warn "Cannot locate config-flags.pm (no blddir)\n"; } else { my $f = File::Spec->catpath($bldvol, File::Spec->catdir($blddir, 'tests'), 'config-flags.pm'); if (! -f $f) { warn "Cannot locate $f\n"; } else { unshift(@INC, File::Spec->catpath($bldvol, File::Spec->catdir($blddir, 'tests'), '')); require "config-flags.pm"; } } # 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 { create_file('make.mk', 'all:;$(info $(MAKE))'); my $mk = `$make_path -sf make.mk`; unlink('make.mk'); chop $mk; $mk or die "FATAL ERROR: Cannot determine the value of \$(MAKE)\n"; $make_path = $mk; } ($mpv, $mpd, $mpf) = File::Spec->splitpath($make_path); # Ask make what shell to use create_file('shell.mk', 'all:;$(info $(SHELL))'); $sh_name = `$make_path -sf shell.mk`; unlink('shell.mk'); chop $sh_name; if (! $sh_name) { print "Cannot determine shell\n"; $is_posix_sh = 0; } else { my $o = `$sh_name -c ': do nothing' 2>&1`; $is_posix_sh = $? == 0 && $o eq ''; } $string = `$make_path -v`; $string =~ /^(GNU Make [^,\n]*)/ or die "$make_path is not GNU make. Version:\n$string"; $testee_version = "$1\n"; create_file('null.mk', ''); my $redir = '2>&1'; $redir = '' if os_name eq 'VMS'; $string = `$make_path -f null.mk $redir`; if ($string =~ /(.*): \*\*\* No targets\. Stop\./) { $make_name = $1; } else { $make_name = $mpf; } # prepend pwd if this is a relative path (ie, does not # start with a slash, but contains one). Thanks for the # clue, Roland. if ($mpd && !File::Spec->file_name_is_absolute($make_path) && $cwdvol == $mpv) { $mkpath = File::Spec->catpath($cwdvol, File::Spec->catdir($cwd, $mpd), $mpf); } else { $mkpath = $make_path; } # Not with the make program, so see if we can get it out of the makefile if (! $srcdir && open(MF, '<', File::Spec->catfile(File::Spec->updir(), 'Makefile'))) { local $/ = undef; $_ = ; close(MF); /^abs_srcdir\s*=\s*(.*?)\s*$/m; -f File::Spec->catfile($1, 'src', 'gnumake.h') and $srcdir = $1; } # At this point we should have srcdir and blddir: get fq versions $fqsrcdir = File::Spec->rel2abs($srcdir); $fqblddir = File::Spec->rel2abs($blddir); # Find the helper tool $helptool = File::Spec->catfile($fqsrcdir, 'tests', 'thelp.pl'); # It's difficult to quote this properly in all the places it's used so # ensure it doesn't need to be quoted. $helptool =~ s,\\,/,g if $port_type eq 'W32'; $helptool =~ s, ,\\ ,g; # Get Purify log info--if any. if (exists $ENV{PURIFYOPTIONS} && $ENV{PURIFYOPTIONS} =~ /.*-logfile=([^ ]+)/) { $pure_log = $1 || ''; $pure_log =~ s/%v/$make_name/; $purify_errors = 0; } $string = `$make_path -j 2 -f null.mk $redir`; if ($string =~ /not supported/) { $parallel_jobs = 0; } else { $parallel_jobs = 1; } unlink('null.mk'); create_file('features.mk', 'all:;$(info $(.FEATURES))'); %FEATURES = map { $_ => 1 } split /\s+/, `$make_path -sf features.mk`; unlink('features.mk'); # Set up for valgrind, if requested. @make_command = ($make_path); if ($valgrind) { my $args = $valgrind_args; open(VALGRIND, "> valgrind.out") or die "Cannot open valgrind.out: $!\n"; # -q --leak-check=yes exists $ENV{VALGRIND_ARGS} and $args = $ENV{VALGRIND_ARGS}; @make_command = ('valgrind', '--log-fd='.fileno(VALGRIND)); push(@make_command, split(' ', $args)); push(@make_command, $make_path); # F_SETFD is 2 fcntl(VALGRIND, 2, 0) or die "fcntl(setfd) failed: $!\n"; system("echo Starting on `date` 1>&".fileno(VALGRIND)); print "Enabled valgrind support.\n"; } if ($debug) { print "Port type: $port_type\n"; print "Make command: @make_command\n"; print "Shell path: $sh_name".($is_posix_sh ? ' (POSIX)' : '')."\n"; print "#PWD#: $cwdpath\n"; print "#PERL#: $perl_name\n"; print "#MAKEPATH#: $mkpath\n"; print "#MAKE#: $make_name\n"; } } sub setup_for_test { $makefile = &get_tmpfile; if (-f $makefile) { unlink $makefile; } # Get rid of any Purify logs. if ($pure_log) { ($pure_testname = $testname) =~ tr,/,_,; $pure_testname = "$pure_log.$pure_testname"; system("rm -f $pure_testname*"); print("Purify testfiles are: $pure_testname*\n") if $debug; } } exit !&toplevel; make-4.3/tests/run_make_tests0000755000175000017500000000004413603564437013342 00000000000000#!/bin/sh exec perl $0.pl ${1+"$@"} make-4.3/tests/thelp.pl0000755000175000017500000000550113603564437012050 00000000000000#!/usr/bin/env perl # -*-perl-*- # # This script helps us write tests in a portable way, without relying on a lot # of shell features. Since we already have Perl to run the tests, use that. # # The arguments represent a set of steps that will be run one at a time. # Each step consists of an operator and argument. # # It supports the following operators: # out : echo to stdout # file : echo to stdout AND create the file # dir : echo to stdout AND create the directory # rm : echo to stdout AND delete the file/directory # wait : wait for a file named to exist # tmout : Change the timeout for waiting. Default is 4 seconds. # sleep : Sleep for seconds then echo # fail : echo to stdout then exit with error code err # # If given -q only the "out" command generates output. # Force flush $| = 1; my $quiet = 0; my $timeout = 4; sub op { my ($op, $nm) = @_; defined $nm or die "Missing value for $op\n"; if ($op eq 'out') { print "$nm\n"; return 1; } # Show the output before creating the file if ($op eq 'file') { print "file $nm\n" unless $quiet; open(my $fh, '>', $nm) or die "$nm: open: $!\n"; close(my $fh); return 1; } # Show the output before creating the directory if ($op eq 'dir') { print "dir $nm\n" unless $quiet; mkdir($nm) or die "$nm: mkdir: $!\n"; return 1; } # Show the output after removing the file if ($op eq 'rm') { if (-f $nm) { unlink($nm) or die "$nm: unlink: $!\n"; } elsif (-d $nm) { rmdir($nm) or die "$nm: rmdir: $!\n"; } else { die "$nm: not file or directory: $!\n"; } print "rm $nm\n" unless $quiet; return 1; } if ($op eq 'tmout') { $timeout = $nm; print "tmout $nm\n" unless $quiet; return 1; } # Show the output after the file exists if ($op eq 'wait') { my $start = time(); my $end = $start + $timeout; while (time() <= $end) { if (-f $nm) { print "wait $nm\n" unless $quiet; return 1; } select(undef, undef, undef, 0.1); } die "wait $nm: timeout after ".(time()-$start-1)." seconds\n"; } # Show the output after sleeping if ($op eq 'sleep') { sleep($nm); print "sleep $nm\n" unless $quiet; return 1; } if ($op eq 'fail') { print "fail $nm\n"; exit($nm); } die("Invalid command: $op $nm\n"); } if (@ARGV && $ARGV[0] eq '-q') { $quiet = 1; shift; } while (@ARGV) { if (op($ARGV[0], $ARGV[1])) { shift; shift; } } exit(0); make-4.3/tests/test_driver.pl0000644000175000017500000012021113611136373013250 00000000000000#!/usr/bin/perl # -*-perl-*- # # Modification history: # 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-2020 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 . # Test driver routines used by a number of test suites, including # those for SCS, make, roll_dir, and scan_deps (?). # # this routine controls the whole mess; each test suite sets up a few # variables and then calls &toplevel, which does all the real work. # $Id$ use Config; use Cwd; use File::Spec; # The number of test categories we've run $categories_run = 0; # The number of test categroies that have passed $categories_passed = 0; # The total number of individual tests that have been run $total_tests_run = 0; # The total number of individual tests that have passed $total_tests_passed = 0; # The number of tests in this category that have been run $tests_run = 0; # The number of tests in this category that have passed $tests_passed = 0; # Yeesh. This whole test environment is such a hack! $test_passed = 1; # Timeout in seconds. If the test takes longer than this we'll fail it. $test_timeout = 5; $test_timeout = 10 if $^O eq 'VMS'; # Path to Perl $perl_name = $^X; if ($^O ne 'VMS') { $perl_name .= $Config{_exe} unless $perl_name =~ m/$Config{_exe}$/i; } # If it's a simple name, look it up on PATH { my ($v,$d,$f) = File::Spec->splitpath($perl_name); if (!$d) { my $perl = undef; foreach my $p (File::Spec->path()) { my $f = File::Spec->catfile($p, $f); if (-e $f) { $perl = $f; last; } } if ($perl) { $perl_name = $perl; } else { print "Cannot locate Perl interpreter $perl_name\n"; } } } # Make sure it uses forward-slashes even on Windows, else it won't work # in recipes $perl_name =~ tr,\\,/,; # %makeENV is the cleaned-out environment. %makeENV = (); # %extraENV are any extra environment variables the tests might want to set. # These are RESET AFTER EVERY TEST! %extraENV = (); sub vms_get_process_logicals { # Sorry for the long note here, but to keep this test running on # VMS, it is needed to be understood. # # Perl on VMS by default maps the %ENV array to the system wide logical # name table. # # This is a very large dynamically changing table. # On Linux, this would be the equivalent of a table that contained # every mount point, temporary pipe, and symbolic link on every # file system. You normally do not have permission to clear or replace it, # and if you did, the results would be catastrophic. # # On VMS, added/changed %ENV items show up in the process logical # name table. So to track changes, a copy of it needs to be captured. my $raw_output = `show log/process/access_mode=supervisor`; my @raw_output_lines = split('\n',$raw_output); my %log_hash; foreach my $line (@raw_output_lines) { if ($line =~ /^\s+"([A-Za-z\$_]+)"\s+=\s+"(.+)"$/) { $log_hash{$1} = $2; } } return \%log_hash } # %origENV is the caller's original environment if ($^O ne 'VMS') { %origENV = %ENV; } else { my $proc_env = vms_get_process_logicals; %origENV = %{$proc_env}; } sub resetENV { # We used to say "%ENV = ();" but this doesn't work in Perl 5.000 # through Perl 5.004. It was fixed in Perl 5.004_01, but we don't # want to require that here, so just delete each one individually. if ($^O ne 'VMS') { foreach $v (keys %ENV) { delete $ENV{$v}; } %ENV = %makeENV; } else { my $proc_env = vms_get_process_logicals(); my %delta = %{$proc_env}; foreach my $v (keys %delta) { if (exists $origENV{$v}) { if ($origENV{$v} ne $delta{$v}) { $ENV{$v} = $origENV{$v}; } } else { delete $ENV{$v}; } } } foreach $v (keys %extraENV) { $ENV{$v} = $extraENV{$v}; delete $extraENV{$v}; } } sub toplevel { # Pull in benign variables from the user's environment foreach (# UNIX-specific things 'TZ', 'TMPDIR', 'HOME', 'USER', 'LOGNAME', 'PATH', 'LD_LIBRARY_PATH', # SAN things 'ASAN_OPTIONS', 'UBSAN_OPTIONS', # Purify things 'PURIFYOPTIONS', # Windows NT-specific stuff 'Path', 'SystemRoot', # DJGPP-specific stuff 'DJDIR', 'DJGPP', 'SHELL', 'COMSPEC', 'HOSTNAME', 'LFN', 'FNCASE', '387', 'EMU387', 'GROUP' ) { $makeENV{$_} = $ENV{$_} if $ENV{$_}; } # Make sure our compares are not foiled by locale differences $makeENV{LC_ALL} = 'C'; # Replace the environment with the new one # %origENV = %ENV unless $^O eq 'VMS'; resetENV(); $| = 1; # unbuffered output $debug = 0; # debug flag $profile = 0; # profiling flag $verbose = 0; # verbose mode flag $detail = 0; # detailed verbosity $keep = 0; # keep temp files around $workdir = "work"; # The directory where the test will start running $scriptdir = "scripts"; # The directory where we find the test scripts $tmpfilesuffix = "t"; # the suffix used on tmpfiles $default_output_stack_level = 0; # used by attach_default_output, etc. $default_input_stack_level = 0; # used by attach_default_input, etc. $cwd = "."; # don't we wish we knew $cwdslash = ""; # $cwd . $pathsep, but "" rather than "./" &get_osname; # sets $osname, $vos, $pathsep, and $short_filenames &set_defaults; # suite-defined &parse_command_line (@ARGV); print "OS name = '$osname'\n" if $debug; $workpath = "$cwdslash$workdir"; $scriptpath = "$cwdslash$scriptdir"; &set_more_defaults; # suite-defined &print_banner; if ($osname eq 'VMS' && $cwdslash eq "") { # Porting this script to VMS revealed a small bug in opendir() not # handling search lists correctly when the directory only exists in # one of the logical_devices. Need to find the first directory in # the search list, as that is where things will be written to. my @dirs = split('/', $cwdpath); my $logical_device = $ENV{$dirs[1]}; if ($logical_device =~ /([A-Za-z0-9_]+):(:?.+:)+/) { # A search list was found. Grab the first logical device # and use it instead of the search list. $dirs[1]=$1; my $lcl_pwd = join('/', @dirs); $workpath = $lcl_pwd . '/' . $workdir } } if (-d $workpath) { print "Clearing $workpath...\n"; &remove_directory_tree("$workpath/") or &error ("Couldn't wipe out $workpath: $!\n"); } else { mkdir ($workpath, 0777) or &error ("Couldn't mkdir $workpath: $!\n"); } if (!-d $scriptpath) { &error ("Failed to find $scriptpath containing perl test scripts.\n"); } if (@TESTS) { print "Making work dirs...\n"; foreach $test (@TESTS) { if ($test =~ /^([^\/]+)\//) { $dir = $1; push (@rmdirs, $dir); -d "$workpath/$dir" or mkdir ("$workpath/$dir", 0777) or &error ("Couldn't mkdir $workpath/$dir: $!\n"); } } } else { print "Finding tests...\n"; opendir (SCRIPTDIR, $scriptpath) or &error ("Couldn't opendir $scriptpath: $!\n"); @dirs = grep (!/^(\..*|CVS|RCS)$/, readdir (SCRIPTDIR) ); closedir (SCRIPTDIR); foreach my $dir (@dirs) { next if ($dir =~ /^(\..*|CVS|RCS)$/ || ! -d "$scriptpath/$dir"); push (@rmdirs, $dir); # VMS can have overlayed file systems, so directories may repeat. next if -d "$workpath/$dir"; mkdir ("$workpath/$dir", 0777) or &error ("Couldn't mkdir $workpath/$dir: $!\n"); opendir (SCRIPTDIR, "$scriptpath/$dir") or &error ("Couldn't opendir $scriptpath/$dir: $!\n"); @files = grep (!/^(\..*|CVS|RCS|.*~)$/, readdir (SCRIPTDIR) ); closedir (SCRIPTDIR); foreach my $test (@files) { -d $test and next; push (@TESTS, "$dir/$test"); } } } if (@TESTS == 0) { &error ("\nNo tests in $scriptpath, and none were specified.\n"); } print "\n"; run_all_tests(); foreach my $dir (@rmdirs) { rmdir ("$workpath/$dir"); } $| = 1; $categories_failed = $categories_run - $categories_passed; $total_tests_failed = $total_tests_run - $total_tests_passed; if ($total_tests_failed) { print "\n$total_tests_failed Test"; print "s" unless $total_tests_failed == 1; print " in $categories_failed Categor"; print ($categories_failed == 1 ? "y" : "ies"); print " Failed (See .$diffext* files in $workdir dir for details) :-(\n\n"; return 0; } print "\n$total_tests_passed Test"; print "s" unless $total_tests_passed == 1; print " in $categories_passed Categor"; print ($categories_passed == 1 ? "y" : "ies"); print " Complete ... No Failures :-)\n\n"; return 1; } sub get_osname { # Set up an initial value. In perl5 we can do it the easy way. $osname = defined($^O) ? $^O : ''; # find the type of the port. We do this up front to have a single # point of change if it needs to be tweaked. # # This is probably not specific enough. # if ($osname =~ /MSWin32/i || $osname =~ /Windows/i || $osname =~ /MINGW32/i || $osname =~ /CYGWIN_NT/i) { $port_type = 'W32'; } # Bleah, the osname is so variable on DOS. This kind of bites. # Well, as far as I can tell if we check for some text at the # beginning of the line with either no spaces or a single space, then # a D, then either "OS", "os", or "ev" and a space. That should # match and be pretty specific. elsif ($osname =~ /^([^ ]*|[^ ]* [^ ]*)D(OS|os|ev) /) { $port_type = 'DOS'; } # Check for OS/2 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. else { $port_type = 'UNIX'; } if ($osname eq 'VMS') { $vos = 0; $pathsep = "/"; return; } # Find a path to Perl # See if the filesystem supports long file names with multiple # dots. DOS doesn't. $short_filenames = 0; (open (TOUCHFD, "> fancy.file.name") and close (TOUCHFD)) or $short_filenames = 1; unlink ("fancy.file.name") or $short_filenames = 1; if (! $short_filenames) { # Thanks go to meyering@cs.utexas.edu (Jim Meyering) for suggesting a # better way of doing this. (We used to test for existence of a /mnt # dir, but that apparently fails on an SGI Indigo (whatever that is).) # Because perl on VOS translates /'s to >'s, we need to test for # VOSness rather than testing for Unixness (ie, try > instead of /). mkdir (".ostest", 0777) or &error ("Couldn't create .ostest: $!\n", 1); open (TOUCHFD, "> .ostest>ick") and close (TOUCHFD); chdir (".ostest") or &error ("Couldn't chdir to .ostest: $!\n", 1); } if (! $short_filenames && -f "ick") { $osname = "vos"; $vos = 1; $pathsep = ">"; } else { # the following is regrettably gnarly, but it seems to be the only way # to not get ugly error messages if uname can't be found. # Hmmm, BSD/OS 2.0's uname -a is excessively verbose. Let's try it # with switches first. eval "chop (\$osname = `sh -c 'uname -nmsr 2>&1'`)"; if ($osname =~ /not found/i) { $osname = "(something posixy with no uname)"; } elsif ($@ ne "" || $?) { eval "chop (\$osname = `sh -c 'uname -a 2>&1'`)"; if ($@ ne "" || $?) { $osname = "(something posixy)"; } } $vos = 0; $pathsep = "/"; } if (! $short_filenames) { chdir ("..") or &error ("Couldn't chdir to ..: $!\n", 1); unlink (".ostest>ick"); rmdir (".ostest") or &error ("Couldn't rmdir .ostest: $!\n", 1); } } sub parse_command_line { @argv = @_; # use @ARGV if no args were passed in if (@argv == 0) { @argv = @ARGV; } # look at each option; if we don't recognize it, maybe the suite-specific # command line parsing code will... while (@argv) { $option = shift @argv; if ($option =~ /^-usage$/i) { &print_usage; exit 0; } if ($option =~ /^-(h|help)$/i) { &print_help; exit 0; } if ($option =~ /^-debug$/i) { print "\nDEBUG ON\n"; $debug = 1; } elsif ($option =~ /^-profile$/i) { $profile = 1; } elsif ($option =~ /^-verbose$/i) { $verbose = 1; } elsif ($option =~ /^-detail$/i) { $detail = 1; $verbose = 1; } elsif ($option =~ /^-keep$/i) { $keep = 1; } elsif (&valid_option($option)) { # The suite-defined subroutine takes care of the option } elsif ($option =~ /^-/) { print "Invalid option: $option\n"; &print_usage; exit 0; } else { # must be the name of a test $option =~ s/\.pl$//; push(@TESTS,$option); } } } sub max { my $num = shift @_; my $newnum; while (@_) { $newnum = shift @_; if ($newnum > $num) { $num = $newnum; } } return $num; } sub print_centered { my ($width, $string) = @_; if (length ($string)) { my $pad = " " x ( ($width - length ($string) + 1) / 2); print "$pad$string"; } } sub print_banner { # $testee is suite-defined my $info = "Running tests for $testee on $osname\n"; my $len = &max (length($info), length($testee_version), 73) + 5; my $line = ("-" x $len) . "\n"; &print_centered ($len, $line); &print_centered ($len, $info); &print_centered ($len, $testee_version); &print_centered ($len, $line); print "\n"; } sub run_all_tests { # Make sure we always run the tests from the current directory unshift(@INC, cwd()); $categories_run = 0; $lasttest = ''; # $testname is published foreach $testname (sort @TESTS) { # Skip duplicates on VMS caused by logical name search lists. next if $testname eq $lasttest; $lasttest = $testname; $suite_passed = 1; # reset by test on failure $num_of_logfiles = 0; $num_of_tmpfiles = 0; $description = ""; $details = ""; $old_makefile = undef; $testname =~ s/^$scriptpath$pathsep//; $perl_testname = "$scriptpath$pathsep$testname"; $testname =~ s/(\.pl|\.perl)$//; $testpath = "$workpath$pathsep$testname"; # Leave enough space in the extensions to append a number, even # though it needs to fit into 8+3 limits. if ($short_filenames) { $logext = 'l'; $diffext = 'd'; $baseext = 'b'; $runext = 'r'; $extext = ''; } else { $logext = 'log'; $diffext = 'diff'; $baseext = 'base'; $runext = 'run'; $extext = '.'; } $extext = '_' if $^O eq 'VMS'; $log_filename = "$testpath.$logext"; $diff_filename = "$testpath.$diffext"; $base_filename = "$testpath.$baseext"; $run_filename = "$testpath.$runext"; $tmp_filename = "$testpath.$tmpfilesuffix"; -f $perl_testname or die "Invalid test: $testname\n\n"; setup_for_test(); $output = "........................................................ "; substr($output,0,length($testname)) = "$testname "; print $output; $tests_run = 0; $tests_passed = 0; # Run the test! $code = do $perl_testname; ++$categories_run; $total_tests_run += $tests_run; $total_tests_passed += $tests_passed; # How did it go? if (!defined($code)) { # Failed to parse or called die if (length ($@)) { warn "\n*** Test died ($testname): $@\n"; } else { warn "\n*** Couldn't parse $perl_testname\n"; } $status = "FAILED ($tests_passed/$tests_run passed)"; } elsif ($code == -1) { # Skipped... not supported $status = "N/A"; --$categories_run; } elsif ($code != 1) { # Bad result... this shouldn't really happen. Usually means that # the suite forgot to end with "1;". warn "\n*** Test returned $code\n"; $status = "FAILED ($tests_passed/$tests_run passed)"; } elsif ($tests_run == 0) { # Nothing was done!! $status = "FAILED (no tests found!)"; } elsif ($tests_run > $tests_passed) { # Lose! $status = "FAILED ($tests_passed/$tests_run passed)"; } else { # Win! ++$categories_passed; $status = "ok ($tests_passed passed)"; # Clean up for ($i = $num_of_tmpfiles; $i; $i--) { rmfiles($tmp_filename . num_suffix($i)); } for ($i = $num_of_logfiles ? $num_of_logfiles : 1; $i; $i--) { rmfiles($log_filename . num_suffix($i)); rmfiles($base_filename . num_suffix($i)); } } # If the verbose option has been specified, then a short description # of each test is printed before displaying the results of each test # describing WHAT is being tested. if ($verbose) { if ($detail) { print "\nWHAT IS BEING TESTED\n"; print "--------------------"; } print "\n\n$description\n\n"; } # If the detail option has been specified, then the details of HOW # the test is testing what it says it is testing in the verbose output # will be displayed here before the results of the test are displayed. if ($detail) { print "\nHOW IT IS TESTED\n"; print "----------------"; print "\n\n$details\n\n"; } print "$status\n"; } } # If the keep flag is not set, this subroutine deletes all filenames that # are sent to it. sub rmfiles { my (@files) = @_; if (!$keep) { return (unlink @files); } return 1; } sub print_standard_usage { my ($plname, @moreusage) = @_; print "usage:\t$plname [testname] [-verbose] [-detail] [-keep]\n"; print "\t\t\t[-profile] [-usage] [-help] [-debug]\n"; foreach (@moreusage) { print "\t\t\t$_\n"; } } sub print_standard_help { my (@morehelp) = @_; my $t = " "; my $line = "Test Driver For $testee"; print "$line\n"; $line = "=" x length ($line); print "$line\n"; print_usage(); print "\ntestname\n" . "${t}You may, if you wish, run only ONE test if you know the name\n" . "${t}of that test and specify this name anywhere on the command\n" . "${t}line. Otherwise ALL existing tests in the scripts directory\n" . "${t}will be run.\n" . "-verbose\n" . "${t}If this option is given, a description of every test is\n" . "${t}displayed before the test is run. (Not all tests may have\n" . "${t}descriptions at this time)\n" . "-detail\n" . "${t}If this option is given, a detailed description of every\n" . "${t}test is displayed before the test is run. (Not all tests\n" . "${t}have descriptions at this time)\n" . "-profile\n" . "${t}If this option is given, then the profile file\n" . "${t}is added to other profiles every time $testee is run.\n" . "${t}This option only works on VOS at this time.\n" . "-keep\n" . "${t}You may give this option if you DO NOT want ANY\n" . "${t}of the files generated by the tests to be deleted. \n" . "${t}Without this option, all files generated by the test will\n" . "${t}be deleted IF THE TEST PASSES.\n" . "-debug\n" . "${t}Use this option if you would like to see all of the system\n" . "${t}calls issued and their return status while running the tests\n" . "${t}This can be helpful if you're having a problem adding a test\n" . "${t}to the suite, or if the test fails!\n"; foreach $line (@morehelp) { my $tline = $line; if (substr ($tline, 0, 1) eq "\t") { substr ($tline, 0, 1) = $t; } print "$tline\n"; } } ####################################################################### ########### Generic Test Driver Subroutines ########### ####################################################################### sub get_caller { my $depth = defined ($_[0]) ? $_[0] : 1; my ($pkg, $filename, $linenum) = caller ($depth + 1); return "$filename: $linenum"; } sub error { my $message = $_[0]; my $caller = &get_caller (1); if (defined ($_[1])) { $caller = &get_caller ($_[1] + 1) . " -> $caller"; } die "$caller: $message"; } sub compare_output { my ($answer,$logfile) = @_; my ($slurp, $answer_matched) = ('', 0); ++$tests_run; if (! defined $answer) { print "Ignoring output ........ " if $debug; $answer_matched = 1; } else { print "Comparing output ........ " if $debug; $slurp = &read_file_into_string ($logfile); # For make, get rid of any time skew error before comparing--too bad this # has to go into the "generic" driver code :-/ $slurp =~ s/^.*modification time .*in the future.*\n//gm; $slurp =~ s/^.*Clock skew detected.*\n//gm; if ($slurp eq $answer) { $answer_matched = 1; } else { # See if it is a slash or CRLF problem my ($answer_mod, $slurp_mod) = ($answer, $slurp); $answer_mod =~ tr,\\,/,; $answer_mod =~ s,\r\n,\n,gs; $slurp_mod =~ tr,\\,/,; $slurp_mod =~ s,\r\n,\n,gs; $answer_matched = ($slurp_mod eq $answer_mod); if ($^O eq 'VMS') { # VMS has extra blank lines in output sometimes. # Ticket #41760 if (!$answer_matched) { $slurp_mod =~ s/\n\n+/\n/gm; $slurp_mod =~ s/\A\n+//g; $answer_matched = ($slurp_mod eq $answer_mod); } # VMS adding a "Waiting for unfinished jobs..." # Remove it for now to see what else is going on. if (!$answer_matched) { $slurp_mod =~ s/^.+\*\*\* Waiting for unfinished jobs.+$//m; $slurp_mod =~ s/\n\n/\n/gm; $slurp_mod =~ s/^\n+//gm; $answer_matched = ($slurp_mod eq $answer_mod); } # VMS wants target device to exist or generates an error, # Some test tagets look like VMS devices and trip this. if (!$answer_matched) { $slurp_mod =~ s/^.+\: no such device or address.*$//gim; $slurp_mod =~ s/\n\n/\n/gm; $slurp_mod =~ s/^\n+//gm; $answer_matched = ($slurp_mod eq $answer_mod); } # VMS error message has a different case if (!$answer_matched) { $slurp_mod =~ s/no such file /No such file /gm; $answer_matched = ($slurp_mod eq $answer_mod); } # VMS is putting comas instead of spaces in output if (!$answer_matched) { $slurp_mod =~ s/,/ /gm; $answer_matched = ($slurp_mod eq $answer_mod); } # VMS Is sometimes adding extra leading spaces to output? if (!$answer_matched) { my $slurp_mod = $slurp_mod; $slurp_mod =~ s/^ +//gm; $answer_matched = ($slurp_mod eq $answer_mod); } # VMS port not handling POSIX encoded child status # Translate error case it for now. if (!$answer_matched) { $slurp_mod =~ s/0x1035a00a/1/gim; $answer_matched = 1 if $slurp_mod =~ /\Q$answer_mod\E/i; } if (!$answer_matched) { $slurp_mod =~ s/0x1035a012/2/gim; $answer_matched = ($slurp_mod eq $answer_mod); } # Tests are using a UNIX null command, temp hack # until this can be handled by the VMS port. # ticket # 41761 if (!$answer_matched) { $slurp_mod =~ s/^.+DCL-W-NOCOMD.*$//gim; $slurp_mod =~ s/\n\n+/\n/gm; $slurp_mod =~ s/^\n+//gm; $answer_matched = ($slurp_mod eq $answer_mod); } # Tests are using exit 0; # this generates a warning that should stop the make, but does not if (!$answer_matched) { $slurp_mod =~ s/^.+NONAME-W-NOMSG.*$//gim; $slurp_mod =~ s/\n\n+/\n/gm; $slurp_mod =~ s/^\n+//gm; $answer_matched = ($slurp_mod eq $answer_mod); } # VMS is sometimes adding single quotes to output? if (!$answer_matched) { my $noq_slurp_mod = $slurp_mod; $noq_slurp_mod =~ s/\'//gm; $answer_matched = ($noq_slurp_mod eq $answer_mod); # And missing an extra space in output if (!$answer_matched) { $noq_answer_mod = $answer_mod; $noq_answer_mod =~ s/\h\h+/ /gm; $answer_matched = ($noq_slurp_mod eq $noq_answer_mod); } # VMS adding ; to end of some lines. if (!$answer_matched) { $noq_slurp_mod =~ s/;\n/\n/gm; $answer_matched = ($noq_slurp_mod eq $noq_answer_mod); } # VMS adding trailing space to end of some quoted lines. if (!$answer_matched) { $noq_slurp_mod =~ s/\h+\n/\n/gm; $answer_matched = ($noq_slurp_mod eq $noq_answer_mod); } # And VMS missing leading blank line if (!$answer_matched) { $noq_answer_mod =~ s/\A\n//g; $answer_matched = ($noq_slurp_mod eq $noq_answer_mod); } # Unix double quotes showing up as single quotes on VMS. if (!$answer_matched) { $noq_answer_mod =~ s/\"//g; $answer_matched = ($noq_slurp_mod eq $noq_answer_mod); } } } # If it still doesn't match, see if the answer might be a regex. if (!$answer_matched && $answer =~ m,^/(.+)/$,) { $answer_matched = ($slurp =~ /$1/); if (!$answer_matched && $answer_mod =~ m,^/(.+)/$,) { $answer_matched = ($slurp_mod =~ /$1/); } } } } if ($answer_matched && $test_passed) { print "ok\n" if $debug; ++$tests_passed; return 1; } if (! $answer_matched) { print "DIFFERENT OUTPUT\n" if $debug; &create_file (&get_basefile, $answer); &create_file (&get_runfile, $command_string); print "\nCreating Difference File ...\n" if $debug; # Create the difference file my $command = "diff -c " . &get_basefile . " " . $logfile; &run_command_with_output(&get_difffile,$command); } return 0; } sub read_file_into_string { my ($filename) = @_; my $oldslash = $/; undef $/; open (RFISFILE, '<', $filename) or return ""; my $slurp = ; close (RFISFILE); $/ = $oldslash; return $slurp; } my @OUTSTACK = (); my @ERRSTACK = (); sub attach_default_output { my ($filename) = @_; if ($vos) { my $code = system "++attach_default_output_hack $filename"; $code == -2 or &error ("adoh death\n", 1); return 1; } my $dup = undef; open($dup, '>&', STDOUT) or error("ado: $! duping STDOUT\n", 1); push @OUTSTACK, $dup; $dup = undef; open($dup, '>&', STDERR) or error("ado: $! duping STDERR\n", 1); push @ERRSTACK, $dup; open(STDOUT, '>', $filename) or error("ado: $filename: $!\n", 1); open(STDERR, ">&STDOUT") or error("ado: $filename: $!\n", 1); } # close the current stdout/stderr, and restore the previous ones from # the "stack." sub detach_default_output { if ($vos) { my $code = system "++detach_default_output_hack"; $code == -2 or &error ("ddoh death\n", 1); return 1; } @OUTSTACK or error("default output stack has flown under!\n", 1); close(STDOUT); close(STDERR) unless $^O eq 'VMS'; open (STDOUT, '>&', pop @OUTSTACK) or error("ddo: $! duping STDOUT\n", 1); open (STDERR, '>&', pop @ERRSTACK) or error("ddo: $! duping STDERR\n", 1); } sub _run_with_timeout { my $code; if ($^O eq 'VMS') { #local $SIG{ALRM} = sub { # my $e = $ERRSTACK[0]; # print $e "\nTest timed out after $test_timeout seconds\n"; # die "timeout\n"; #}; #alarm $test_timeout; system(@_); #alarm 0; my $severity = ${^CHILD_ERROR_NATIVE} & 7; $code = 0; if (($severity & 1) == 0) { $code = 512; } # Get the vms status. my $vms_code = ${^CHILD_ERROR_NATIVE}; # Remove the print status bit $vms_code &= ~0x10000000; # Posix code translation. if (($vms_code & 0xFFFFF000) == 0x35a000) { $code = (($vms_code & 0xFFF) >> 3) * 256; } } elsif ($port_type eq 'W32') { my $pid = system(1, @_); $pid > 0 or die "Cannot execute $_[0]\n"; local $SIG{ALRM} = sub { my $e = $ERRSTACK[0]; print $e "\nTest timed out after $test_timeout seconds\n"; kill -9, $pid; die "timeout\n"; }; alarm $test_timeout; my $r = waitpid($pid, 0); alarm 0; $r == -1 and die "No such pid: $pid\n"; # This shouldn't happen since we wait forever or timeout via SIGALRM $r == 0 and die "No process exited.\n"; $code = $?; } else { my $pid = fork(); if (! $pid) { exec(@_) or die "exec: Cannot execute $_[0]: $!\n"; } local $SIG{ALRM} = sub { my $e = $ERRSTACK[0]; print $e "\nTest timed out after $test_timeout seconds\n"; # Resend the alarm to our process group to kill the children. $SIG{ALRM} = 'IGNORE'; kill -14, $$; die "timeout\n"; }; alarm $test_timeout; my $r = waitpid($pid, 0); alarm 0; $r == -1 and die "No such pid: $pid\n"; # This shouldn't happen since we wait forever or timeout via SIGALRM $r == 0 and die "No process exited.\n"; $code = $?; } return $code; } # This runs a command without any debugging info. sub _run_command { # We reset this before every invocation. On Windows I think there is only # one environment, not one per process, so I think that variables set in # test scripts might leak into subsequent tests if this isn't reset--??? resetENV(); my $orig = $SIG{ALRM}; my $code = eval { _run_with_timeout(@_); }; $SIG{ALRM} = $orig; if ($@) { # The eval failed. If it wasn't SIGALRM then die. $@ eq "timeout\n" or die "Command failed: $@"; $code = 14; } return $code; } # run one command (passed as a list of arg 0 - n), returning 0 on success # and nonzero on failure. sub run_command { print "\nrun_command: @_\n" if $debug; my $code = _run_command(@_); print "run_command returned $code.\n" if $debug; print "vms status = ${^CHILD_ERROR_NATIVE}\n" if $debug and $^O eq 'VMS'; return $code; } # run one command (passed as a list of arg 0 - n, with arg 0 being the # second arg to this routine), returning 0 on success and non-zero on failure. # The first arg to this routine is a filename to connect to the stdout # & stderr of the child process. sub run_command_with_output { my $filename = shift; print "\nrun_command_with_output($filename,$runname): @_\n" if $debug; &attach_default_output ($filename); my $code = eval { _run_command(@_) }; my $err = $@; &detach_default_output; $err and die $err; print "run_command_with_output returned $code.\n" if $debug; print "vms status = ${^CHILD_ERROR_NATIVE}\n" if $debug and $^O eq 'VMS'; return $code; } # performs the equivalent of an "rm -rf" on the first argument. Like # rm, if the path ends in /, leaves the (now empty) directory; otherwise # deletes it, too. sub remove_directory_tree { my ($targetdir) = @_; my ($nuketop) = 1; my $ch = substr ($targetdir, length ($targetdir) - 1); if ($ch eq "/" || $ch eq $pathsep) { $targetdir = substr ($targetdir, 0, length ($targetdir) - 1); $nuketop = 0; } -e $targetdir or return 1; &remove_directory_tree_inner ("RDT00", $targetdir) or return 0; if ($nuketop && !rmdir ($targetdir)) { print "Cannot remove $targetdir: $!\n"; return 0; } return 1; } sub remove_directory_tree_inner { my ($dirhandle, $targetdir) = @_; opendir ($dirhandle, $targetdir) or return 0; my $subdirhandle = $dirhandle; $subdirhandle++; while (my $object = readdir ($dirhandle)) { $object =~ /^(\.\.?|CVS|RCS)$/ and next; $object = "$targetdir$pathsep$object"; lstat ($object); if (-d _ && &remove_directory_tree_inner ($subdirhandle, $object)) { if (!rmdir($object)) { print "Cannot remove $object: $!\n"; return 0; } } else { if ($^O ne 'VMS') { if (!unlink $object) { print "Cannot unlink $object: $!\n"; return 0; } } else { # VMS can have multiple versions of a file. 1 while unlink $object; } } } closedir ($dirhandle); return 1; } # We used to use this behavior for this function: # #sub touch #{ # my (@filenames) = @_; # my $now = time; # # foreach my $file (@filenames) { # utime ($now, $now, $file) # or (open (TOUCHFD, ">> $file") and close (TOUCHFD)) # or &error ("Couldn't touch $file: $!\n", 1); # } # return 1; #} # # But this behaves badly on networked filesystems where the time is # skewed, because it sets the time of the file based on the _local_ # host. Normally when you modify a file, it's the _remote_ host that # determines the modtime, based on _its_ clock. So, instead, now we open # the file and write something into it to force the remote host to set # the modtime correctly according to its clock. # sub touch { foreach my $file (@_) { (open(T, '>>', $file) and print(T "\n") and close(T)) or &error("Couldn't touch $file: $!\n", 1); } return @_; } # Touch with a time offset. To DTRT, call touch() then use stat() to get the # access/mod time for each file and apply the offset. sub utouch { my $off = shift; &touch(@_); foreach my $f (@_) { my @s = stat($f); utime($s[8]+$off, $s[9]+$off, $f); } return @_; } # open a file, write some stuff to it, and close it. sub create_file { my ($filename, @lines) = @_; open (CF, "> $filename") or &error ("Couldn't open $filename: $!\n", 1); foreach $line (@lines) { print CF $line; } close (CF); } # create a directory tree described by an associative array, wherein each # key is a relative pathname (using slashes) and its associated value is # one of: # DIR indicates a directory # FILE:contents indicates a file, which should contain contents +\n # LINK:target indicates a symlink, pointing to $basedir/target # The first argument is the dir under which the structure will be created # (the dir will be made and/or cleaned if necessary); the second argument # is the associative array. sub create_dir_tree { my ($basedir, %dirtree) = @_; &remove_directory_tree ("$basedir"); mkdir ($basedir, 0777) or &error ("Couldn't mkdir $basedir: $!\n", 1); foreach my $path (sort keys (%dirtree)) { if ($dirtree {$path} =~ /^DIR$/) { mkdir ("$basedir/$path", 0777) or &error ("Couldn't mkdir $basedir/$path: $!\n", 1); } elsif ($dirtree {$path} =~ /^FILE:(.*)$/) { &create_file ("$basedir/$path", $1 . "\n"); } elsif ($dirtree {$path} =~ /^LINK:(.*)$/) { symlink ("$basedir/$1", "$basedir/$path") or &error ("Couldn't symlink $basedir/$path -> $basedir/$1: $!\n", 1); } else { &error ("Bogus dirtree type: \"$dirtree{$path}\"\n", 1); } } if ($just_setup_tree) { die "Tree is setup...\n"; } } # compare a directory tree with an associative array in the format used # by create_dir_tree, above. # The first argument is the dir under which the structure should be found; # the second argument is the associative array. sub compare_dir_tree { my ($basedir, %dirtree) = @_; my $bogus = 0; opendir (DIR, $basedir) or &error ("Couldn't open $basedir: $!\n", 1); my @allfiles = grep (!/^(\.\.?|CVS|RCS)$/, readdir (DIR) ); closedir (DIR); if ($debug) { print "dirtree: (%dirtree)\n$basedir: (@allfiles)\n"; } foreach my $path (sort keys (%dirtree)) { if ($debug) { print "Checking $path ($dirtree{$path}).\n"; } my $found = 0; foreach my $i (0 .. $#allfiles) { if ($allfiles[$i] eq $path) { splice (@allfiles, $i, 1); # delete it if ($debug) { print " Zapped $path; files now (@allfiles).\n"; } lstat ("$basedir/$path"); $found = 1; last; } } if (!$found) { print "compare_dir_tree: $path does not exist.\n"; $bogus = 1; next; } if ($dirtree {$path} =~ /^DIR$/) { if (-d _ && opendir (DIR, "$basedir/$path") ) { my @files = readdir (DIR); closedir (DIR); @files = grep (!/^(\.\.?|CVS|RCS)$/ && ($_ = "$path/$_"), @files); push (@allfiles, @files); if ($debug) { print " Read in $path; new files (@files).\n"; } } else { print "compare_dir_tree: $path is not a dir.\n"; $bogus = 1; } } elsif ($dirtree {$path} =~ /^FILE:(.*)$/) { if (-l _ || !-f _) { print "compare_dir_tree: $path is not a file.\n"; $bogus = 1; next; } if ($1 ne "*") { my $contents = &read_file_into_string ("$basedir/$path"); if ($contents ne "$1\n") { print "compare_dir_tree: $path contains wrong stuff." . " Is:\n$contentsShould be:\n$1\n"; $bogus = 1; } } } elsif ($dirtree {$path} =~ /^LINK:(.*)$/) { my $target = $1; if (!-l _) { print "compare_dir_tree: $path is not a link.\n"; $bogus = 1; next; } my $contents = readlink ("$basedir/$path"); $contents =~ tr/>/\//; my $fulltarget = "$basedir/$target"; $fulltarget =~ tr/>/\//; if (!($contents =~ /$fulltarget$/)) { if ($debug) { $target = $fulltarget; } print "compare_dir_tree: $path should be link to $target, " . "not $contents.\n"; $bogus = 1; } } else { &error ("Bogus dirtree type: \"$dirtree{$path}\"\n", 1); } } if ($debug) { print "leftovers: (@allfiles).\n"; } foreach my $file (@allfiles) { print "compare_dir_tree: $file should not exist.\n"; $bogus = 1; } return !$bogus; } # this subroutine generates the numeric suffix used to keep tmp filenames, # log filenames, etc., unique. If the number passed in is 1, then a null # string is returned; otherwise, we return ".n", where n + 1 is the number # we were given. sub num_suffix { my ($num) = @_; if (--$num > 0) { return "$extext$num"; } return ""; } # This subroutine returns a log filename with a number appended to # the end corresponding to how many logfiles have been created in the # current running test. An optional parameter may be passed (0 or 1). # If a 1 is passed, then it does NOT increment the logfile counter # and returns the name of the latest logfile. If either no parameter # is passed at all or a 0 is passed, then the logfile counter is # incremented and the new name is returned. sub get_logfile { my ($no_increment) = @_; $num_of_logfiles += !$no_increment; return ($log_filename . &num_suffix ($num_of_logfiles)); } # This subroutine returns a base (answer) filename with a number # appended to the end corresponding to how many logfiles (and thus # base files) have been created in the current running test. # NO PARAMETERS ARE PASSED TO THIS SUBROUTINE. sub get_basefile { return ($base_filename . &num_suffix ($num_of_logfiles)); } # This subroutine returns a difference filename with a number appended # to the end corresponding to how many logfiles (and thus diff files) # have been created in the current running test. sub get_difffile { return ($diff_filename . &num_suffix ($num_of_logfiles)); } # This subroutine returns a command filename with a number appended # to the end corresponding to how many logfiles (and thus command files) # have been created in the current running test. sub get_runfile { return ($run_filename . &num_suffix ($num_of_logfiles)); } # just like logfile, only a generic tmp filename for use by the test. # they are automatically cleaned up unless -keep was used, or the test fails. # Pass an argument of 1 to return the same filename as the previous call. sub get_tmpfile { my ($no_increment) = @_; $num_of_tmpfiles += !$no_increment; return ($tmp_filename . &num_suffix ($num_of_tmpfiles)); } 1; make-4.3/tests/scripts/0000755000175000017500000000000013611151241012122 500000000000000make-4.3/tests/scripts/test_template0000644000175000017500000000176713603564437014672 00000000000000# -*-perl-*- $description = ""; $details = ""; # Run a make test. See the documentation of run_make_test() in # run_make_tests.pl, but briefly the first argument is a string with the # contents of a makefile to be tested, the second is a string containing the # arguments to be passed to the make invocation, the third is a string # containing the expected output. The fourth is the expected exit code for # make. If not specified, it's assumed that the make program should succeed # (exit with 0). run_make_test('Your test makefile goes here', 'Arguments to pass to make go here', 'Expected output from the invocation goes here'); # There are various special tokens, options, etc. See the full documentation # in run_make_tests.pl. # This tells the test driver that the perl test script executed properly. 1; make-4.3/tests/scripts/targets/0000755000175000017500000000000013611151241013573 500000000000000make-4.3/tests/scripts/targets/FORCE0000644000175000017500000000074413603564437014321 00000000000000# -*-perl-*- $description = "The following tests rules without Commands or Dependencies."; # Create a file named "clean". This is the same name as the target clean # and tricks the target into thinking that it is up to date. (Unless you # use the .PHONY target. touch('clean'); run_make_test(qq! .IGNORE : clean: FORCE ; $CMD_rmfile clean FORCE: !, '', "$CMD_rmfile clean"); rmfiles('clean'); 1; make-4.3/tests/scripts/targets/PHONY0000644000175000017500000000241313603564437014353 00000000000000# -*-perl-*- $description = "The following tests the use of a PHONY target. It makes\n" ."sure that the rules under a target get executed even if\n" ."a filename of the same name of the target exists in the\n" ."directory.\n"; $details = "This makefile in this test declares the target clean to be a \n" ."PHONY target. We then create a file named \"clean\" in the \n" ."directory. Although this file exists, the rule under the target\n" ."clean should still execute because of it's phony status."; $example = "EXAMPLE_FILE"; touch($example); # Create a file named "clean". This is the same name as the target clean # and tricks the target into thinking that it is up to date. (Unless you # use the .PHONY target. touch('clean'); open(MAKEFILE, "> $makefile"); print MAKEFILE qq! .PHONY : clean all: ; \@echo This makefile did not clean the dir ... good clean: ; $CMD_rmfile $example clean !; close(MAKEFILE); $answer = "$CMD_rmfile $example clean\n"; &run_make_with_options($makefile,"clean",&get_logfile); if (-f $example) { $test_passed = 0; } &compare_output($answer,&get_logfile(1)); # Just in case unlink($example, 'clean'); 1; make-4.3/tests/scripts/targets/INTERMEDIATE0000644000175000017500000000541213603564437015332 00000000000000# -*-perl-*- $description = "Test the behaviour of the .INTERMEDIATE target."; $details = "\ Test the behavior of the .INTERMEDIATE special target. Create a makefile where a file would not normally be considered intermediate, then specify it as .INTERMEDIATE. Build and ensure it's deleted properly. Rebuild to ensure that it's not created if it doesn't exist but doesn't need to be built. Change the original and ensure that the intermediate file and the ultimate target are both rebuilt, and that the intermediate file is again deleted. Try this with implicit rules and explicit rules: both should work.\n"; open(MAKEFILE,"> $makefile"); print MAKEFILE <<'EOF'; .INTERMEDIATE: foo.e bar.e # Implicit rule test %.d : %.e ; cp $< $@ %.e : %.f ; cp $< $@ foo.d: foo.e # Explicit rule test foo.c: foo.e bar.e; cat $^ > $@ EOF close(MAKEFILE); # TEST #0 &utouch(-20, 'foo.f', 'bar.f'); &run_make_with_options($makefile,'foo.d',&get_logfile); $answer = "cp foo.f foo.e\ncp foo.e foo.d\nrm foo.e\n"; &compare_output($answer, &get_logfile(1)); # TEST #1 &run_make_with_options($makefile,'foo.d',&get_logfile); $answer = "$make_name: 'foo.d' is up to date.\n"; &compare_output($answer, &get_logfile(1)); # TEST #2 &utouch(-10, 'foo.d'); &touch('foo.f'); &run_make_with_options($makefile,'foo.d',&get_logfile); $answer = "cp foo.f foo.e\ncp foo.e foo.d\nrm foo.e\n"; &compare_output($answer, &get_logfile(1)); # TEST #3 &run_make_with_options($makefile,'foo.c',&get_logfile); $answer = "cp foo.f foo.e\ncp bar.f bar.e\ncat foo.e bar.e > foo.c\nrm foo.e bar.e\n"; &compare_output($answer, &get_logfile(1)); # TEST #4 &run_make_with_options($makefile,'foo.c',&get_logfile); $answer = "$make_name: 'foo.c' is up to date.\n"; &compare_output($answer, &get_logfile(1)); # TEST #5 &utouch(-10, 'foo.c'); &touch('foo.f'); &run_make_with_options($makefile,'foo.c',&get_logfile); $answer = "cp foo.f foo.e\ncp bar.f bar.e\ncat foo.e bar.e > foo.c\nrm foo.e bar.e\n"; &compare_output($answer, &get_logfile(1)); # TEST #6 -- added for PR/1669: don't remove files mentioned on the cmd line. &run_make_with_options($makefile,'foo.e',&get_logfile); $answer = "cp foo.f foo.e\n"; &compare_output($answer, &get_logfile(1)); unlink('foo.f', 'foo.e', 'foo.d', 'foo.c', 'bar.f', 'bar.e', 'bar.d', 'bar.c'); # TEST #7 -- added for PR/1423 $makefile2 = &get_tmpfile; open(MAKEFILE, "> $makefile2"); print MAKEFILE <<'EOF'; all: foo foo.a: ; touch $@ %: %.a ; touch $@ .INTERMEDIATE: foo.a EOF close(MAKEFILE); &run_make_with_options($makefile2, '-R', &get_logfile); $answer = "touch foo.a\ntouch foo\nrm foo.a\n"; &compare_output($answer, &get_logfile(1)); unlink('foo'); # This tells the test driver that the perl test script executed properly. 1; make-4.3/tests/scripts/targets/DELETE_ON_ERROR0000644000175000017500000000106213603564437015764 00000000000000#! -*-perl-*- $description = "Test the behaviour of the .DELETE_ON_ERROR target."; $details = ""; run_make_test(' .DELETE_ON_ERROR: all: ; exit 1 > $@ ', '', "exit 1 > 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 : ; exit 1 > $@ ', '', "exit 1 > 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; make-4.3/tests/scripts/targets/clean0000644000175000017500000000161713603564437014545 00000000000000# -*-perl-*- $description = "The following test creates a makefile to delete a \n" ."file in the directory. It tests to see if make will \n" ."NOT execute the command unless the rule is given in \n" ."the make command line."; $example = "EXAMPLE_FILE"; open(MAKEFILE,"> $makefile"); print MAKEFILE qq! all: ; \@echo This makefile did not clean the dir... good clean: ; $CMD_rmfile $example !; close(MAKEFILE); touch($example); run_make_with_options($makefile,"",&get_logfile,0); $answer = "This makefile did not clean the dir... good\n"; compare_output($answer,&get_logfile(1)) || error("abort"); $answer = "$CMD_rmfile $example\n"; run_make_with_options($makefile,"clean",&get_logfile,0); if (-f $example) { $test_passed = 0; } compare_output($answer,&get_logfile(1)) || error("abort"); 1; make-4.3/tests/scripts/targets/DEFAULT0000644000175000017500000000205713603564437014546 00000000000000# -*-perl-*- $description = "The following test creates a makefile to override part\n" ."of one Makefile with Another Makefile with the .DEFAULT\n" ."rule."; $details = "This tests the use of the .DEFAULT special target to say that \n" ."to remake any target that cannot be made fram the information\n" ."in the containing makefile, make should look in another makefile\n" ."This test gives this makefile the target bar which is not \n" ."defined here but passes the target bar on to another makefile\n" ."which does have the target bar defined.\n"; create_file('defsub.mk', q! bar: ; @echo Executing rule BAR !); run_make_test(q! foo:; @echo Executing rule FOO .DEFAULT: ; @$(MAKE) -f defsub.mk $@ !, 'bar',"#MAKE#[1]: Entering directory '#PWD#'\n" . "Executing rule BAR\n" . "#MAKE#[1]: Leaving directory '#PWD#'\n"); unlink('defsub.mk'); 1; make-4.3/tests/scripts/targets/SECONDARY0000644000175000017500000000752613603564437015017 00000000000000#! -*-perl-*- $description = "Test the behaviour of the .SECONDARY target."; $details = "\ Test the behavior of the .SECONDARY special target. Create a makefile where a file would not normally be considered intermediate, then specify it as .SECONDARY. Build and note that it's not automatically deleted. Delete the file. Rebuild to ensure that it's not created if it doesn't exist but doesn't need to be built. Change the original and ensure that the secondary file and the ultimate target are both rebuilt, and that the secondary file is not deleted. Try this with implicit rules and explicit rules: both should work.\n"; open(MAKEFILE,"> $makefile"); print MAKEFILE <<'EOF'; .SECONDARY: foo.e # Implicit rule test %.d : %.e ; cp $< $@ %.e : %.f ; cp $< $@ foo.d: foo.e # Explicit rule test foo.c: foo.e ; cp $< $@ EOF close(MAKEFILE); # TEST #1 &utouch(-20, 'foo.f'); &run_make_with_options($makefile,'foo.d',&get_logfile); $answer = "cp foo.f foo.e\ncp foo.e foo.d\n"; &compare_output($answer, &get_logfile(1)); # TEST #2 unlink('foo.e'); &run_make_with_options($makefile,'foo.d',&get_logfile); $answer = "$make_name: 'foo.d' is up to date.\n"; &compare_output($answer, &get_logfile(1)); # TEST #3 &utouch(-10, 'foo.d'); &touch('foo.f'); &run_make_with_options($makefile,'foo.d',&get_logfile); $answer = "cp foo.f foo.e\ncp foo.e foo.d\n"; &compare_output($answer, &get_logfile(1)); # TEST #4 &run_make_with_options($makefile,'foo.c',&get_logfile); $answer = "cp foo.e foo.c\n"; &compare_output($answer, &get_logfile(1)); # TEST #5 unlink('foo.e'); &run_make_with_options($makefile,'foo.c',&get_logfile); $answer = "$make_name: 'foo.c' is up to date.\n"; &compare_output($answer, &get_logfile(1)); # TEST #6 &utouch(-10, 'foo.c'); &touch('foo.f'); &run_make_with_options($makefile,'foo.c',&get_logfile); $answer = "cp foo.f foo.e\ncp foo.e foo.c\n"; &compare_output($answer, &get_logfile(1)); unlink('foo.f', 'foo.e', 'foo.d', 'foo.c'); # TEST #7 -- test the "global" .SECONDARY, with no targets. $makefile2 = &get_tmpfile; open(MAKEFILE, "> $makefile2"); print MAKEFILE <<'EOF'; .SECONDARY: final: intermediate intermediate: source final intermediate source: ; echo $< > $@ EOF close(MAKEFILE); &utouch(-10, 'source'); touch('final'); &run_make_with_options($makefile2, '', &get_logfile); $answer = "$make_name: 'final' is up to date.\n"; &compare_output($answer, &get_logfile(1)); unlink('source', 'final', 'intermediate'); # TEST #8 -- test the "global" .SECONDARY, with .PHONY. touch('version2'); run_make_test(' .PHONY: version .SECONDARY: version2: version ; @echo GOOD all: version2', 'all', 'GOOD'); unlink('version2'); # TEST #9 -- Savannah bug #15919 # The original fix for this bug caused a new bug, shown here. touch(qw(1.a 2.a)); run_make_test(' %.c : %.b ; cp $< $@ %.b : %.a ; cp $< $@ all : 1.c 2.c 2.a: 1.c', '-rR -j', 'cp 1.a 1.b cp 1.b 1.c cp 2.a 2.b cp 2.b 2.c rm 2.b 1.b'); unlink(qw(1.a 2.a 1.c 2.c)); # TEST #10 -- Savannah bug #15919 touch('test.0'); run_make_test(' .SECONDARY : test.1 test.2 test.3 test : test.4 %.4 : %.int %.3 ; touch $@ %.int : %.3 %.2 ; touch $@ %.3 : | %.2 ; touch $@ %.2 : %.1 ; touch $@ %.1 : %.0 ; touch $@', '-rR -j 2', 'touch test.1 touch test.2 touch test.3 touch test.int touch test.4 rm test.int'); # After a touch of test.0 it should give the same output, except we don't need # to rebuild test.3 (order-only) sleep(1); touch('test.0'); run_make_test(undef, '-rR -j 2', 'touch test.1 touch test.2 touch test.int touch test.4 rm test.int'); # With both test.0 and test.3 updated it should still build everything except # test.3 sleep(1); touch('test.0', 'test.3'); run_make_test(undef, '-rR -j 2', 'touch test.1 touch test.2 touch test.int touch test.4 rm test.int'); unlink(qw(test.0 test.1 test.2 test.3 test.4)); # This tells the test driver that the perl test script executed properly. 1; make-4.3/tests/scripts/targets/POSIX0000644000175000017500000000300213603564437014353 00000000000000# -*-perl-*- $description = "Test the behaviour of the .POSIX target."; $details = ""; # Ensure turning on .POSIX enables the -e flag for the shell # We can't assume the exit value of "false" because on different systems it's # different. my $script = 'false; true'; my $flags = '-ec'; my $out = `$sh_name $flags '$script' 2>&1`; my $err = $? >> 8; run_make_test(qq! .POSIX: all: ; \@$script !, '', "#MAKE#: *** [#MAKEFILE#:3: all] Error $err\n", 512); # User settings must override .POSIX $flags = '-xc'; $out = `$sh_name $flags '$script' 2>&1`; run_make_test(qq! .SHELLFLAGS = $flags .POSIX: all: ; \@$script !, '', $out); # Test the default value of various POSIX-specific variables my %POSIX = (AR => 'ar', ARFLAGS => '-rv', YACC => 'yacc', YFLAGS => '', LEX => 'lex', LFLAGS => '', LDFLAGS => '', CC => 'c99', CFLAGS => '-O1', FC => 'fort77', FFLAGS => '-O1', SCCSFLAGS => '', SCCSGETFLAGS => '-s'); my $make = join('', map { "\t\@echo '$_=\$($_)'\n" } sort keys %POSIX); my $r = join('', map { "$_=$POSIX{$_}\n"} sort keys %POSIX); run_make_test(qq! .POSIX: all: $make !, '', $r); # Make sure that local settings take precedence %extraENV = map { $_ => "xx-$_" } keys %POSIX; $r = join('', map { "$_=xx-$_\n"} sort keys %POSIX); run_make_test(undef, '', $r); # This tells the test driver that the perl test script executed properly. 1; make-4.3/tests/scripts/targets/SILENT0000644000175000017500000000107413603564437014456 00000000000000# -*-perl-*- $description = "Test the special target .SILENT."; run_make_test(q! .PHONY: M a b M: a b .SILENT : b a b: ; echo $@ !, '', "echo a\na\nb"); run_make_test(q! .PHONY: M a b M: a b .SILENT: a b: ; echo $@ !, '', "a\nb"); # SV 54740 : don't inherit .SILENT settings in sub-makes run_make_test(q! .PHONY: M r a b r: a b ; @$(MAKE) -f #MAKEFILE# M V=x a b: ; echo $@ V = $V.SILENT: M: a b !, '--no-print-directory', "a\nb\necho a\na\necho b\nb"); 1; make-4.3/tests/scripts/targets/ONESHELL0000644000175000017500000000307413603564437014673 00000000000000# -*-perl-*- $description = "Test the behaviour of the .ONESHELL target."; $details = ""; my $multi_ok = 0; if ($port_type ne 'W32') { # Some shells (*shakes fist at Solaris*) cannot handle multiple flags in # separate arguments. my $t = `$sh_name -e -c true 2>/dev/null`; my $multi_ok = $? == 0; } # Simple run_make_test(q! .ONESHELL: all: a=$$$$ [ 0"$$a" -eq "$$$$" ] || echo fail !, '', 'a=$$ [ 0"$a" -eq "$$" ] || echo fail '); # Simple but use multi-word SHELLFLAGS if ($multi_ok) { run_make_test(q! .ONESHELL: .SHELLFLAGS = -e -c all: a=$$$$ [ 0"$$a" -eq "$$$$" ] || echo fail !, '', 'a=$$ [ 0"$a" -eq "$$" ] || echo fail '); } # Again, but this time with inner prefix chars run_make_test(q! .ONESHELL: all: a=$$$$ @-+ [ 0"$$a" -eq "$$$$" ] || echo fail !, '', 'a=$$ [ 0"$a" -eq "$$" ] || echo fail '); # This time with outer prefix chars run_make_test(q! .ONESHELL: all: @a=$$$$ [ 0"$$a" -eq "$$$$" ] || echo fail !, '', ''); # This time with outer and inner prefix chars run_make_test(q! .ONESHELL: all: @a=$$$$ -@ +[ 0"$$a" -eq "$$$$" ] || echo fail !, '', ''); # Now try using a different interpreter # This doesn't work on Windows right now if ($port_type ne 'W32') { run_make_test(q! .RECIPEPREFIX = > .ONESHELL: SHELL = #PERL# .SHELLFLAGS = -e all: > @$$a=5 > +7; > @y=qw(a b c); >print "a = $$a, y = (@y)\n"; !, '', "a = 12, y = (a b c)\n"); } 1; make-4.3/tests/scripts/functions/0000755000175000017500000000000013611151241014132 500000000000000make-4.3/tests/scripts/functions/strip0000644000175000017500000000324613603564437015163 00000000000000# -*-perl-*- $description = "The following test creates a makefile to verify the ability of make to strip white space from lists of object.\n"; $details = "The make file is built with a list of objects that contain white space These are then run through the strip command to remove it. This is then verified by echoing the result.\n"; open(MAKEFILE,"> $makefile"); # The Contents of the MAKEFILE ... print MAKEFILE <<'EOMAKE'; TEST1 := "Is this TERMINAL fun? What makes you believe is this terminal fun? JAPAN is a WONDERFUL planet -- I wonder if we will ever reach their level of COMPARATIVE SHOPPING..." E := TEST2 := $E try this and this $E define TEST3 and these test out some blank lines endef .PHONY: all all: @echo '$(strip $(TEST1) )' @echo '$(strip $(TEST2) )' @echo '$(strip $(TEST3) )' space: ; @echo '$(strip ) $(strip )' EOMAKE # END of Contents of MAKEFILE close(MAKEFILE); &run_make_with_options($makefile,"",&get_logfile); $answer = "\"Is this TERMINAL fun? What makes you believe is this terminal fun? JAPAN is a WONDERFUL planet -- I wonder if we will ever reach their level of COMPARATIVE SHOPPING...\" try this and this and these test out some blank lines "; &compare_output($answer,&get_logfile(1)); &run_make_with_options($makefile,"space",&get_logfile); $answer = " \n"; &compare_output($answer,&get_logfile(1)); 1; make-4.3/tests/scripts/functions/realpath0000644000175000017500000000350513603564437015620 00000000000000# -*-perl-*- $description = "Test the realpath functions."; $details = ""; # Check the local directory's realpath run_make_test(' ifneq ($(realpath .),$(CURDIR)) $(warning $(realpath .) != $(CURDIR)) endif ifneq ($(realpath ./),$(CURDIR)) $(warning $(realpath ./) != $(CURDIR)) endif ifneq ($(realpath .///),$(CURDIR)) $(warning $(realpath .///) != $(CURDIR)) endif .PHONY: all all: ; @: ', '', ''); # Find the realpath to the root of the partition create_file('root.mk', 'all:;$(info $(realpath /))'); my $root = `$make_path -sf root.mk`; unlink('root.mk'); chomp $root; my $tst = ' ifneq ($(realpath /.),#ROOT#) $(warning $(realpath /.) != #ROOT#) endif ifneq ($(realpath /./),#ROOT#) $(warning $(realpath /./) != #ROOT#) endif ifneq ($(realpath /.///),#ROOT#) $(warning $(realpath /.///) != #ROOT#) endif ifneq ($(realpath /..),#ROOT#) $(warning $(realpath /..) != #ROOT#) endif ifneq ($(realpath /../),#ROOT#) $(warning $(realpath /../) != #ROOT#) endif ifneq ($(realpath /..///),#ROOT#) $(warning $(realpath /..///) != #ROOT#) endif ifneq ($(realpath . /..),$(CURDIR) #ROOT#) $(warning $(realpath . /..) != $(CURDIR) #ROOT#) endif .PHONY: all all: ; @: '; $tst =~ s/#ROOT#/$root/g; run_make_test($tst, '', ''); # On Windows platforms "//" means something special. So, don't do these tests # there. if ($port_type ne 'W32') { $tst = ' ifneq ($(realpath ///),#ROOT#) $(warning $(realpath ///) != #ROOT#) endif ifneq ($(realpath ///.),#ROOT#) $(warning $(realpath ///.) != #ROOT#) endif ifneq ($(realpath ///..),#ROOT#) $(warning $(realpath ///..) != #ROOT#) endif .PHONY: all all: ; @:'; $tst =~ s/#ROOT#/$root/g; run_make_test($tst, '', ''); } # This tells the test driver that the perl test script executed properly. 1; make-4.3/tests/scripts/functions/guile0000644000175000017500000000570713603564437015133 00000000000000# -*-perl-*- $description = 'Test the $(guile ...) function.'; $details = 'This only works on systems that support it.'; # If this instance of make doesn't support GNU Guile, skip it # This detects if guile is loaded using the "load" directive # $makefile = get_tmpfile(); # open(MAKEFILE, "> $makefile") || die "Failed to open $makefile: $!\n"; # print MAKEFILE q! # -load guile # all: ; @echo $(filter guile,$(.LOADED)) # !; # close(MAKEFILE) || die "Failed to write $makefile: $!\n"; # $cmd = subst_make_string("#MAKEPATH# -f $makefile"); # $log = get_logfile(0); # $code = run_command_with_output($log, $cmd); # read_file_into_string ($log) eq "guile\n" and $FEATURES{guile} = 1; # If we don't have Guile support, never mind. exists $FEATURES{guile} or return -1; # Guile and Valgrind don't play together at all. $valgrind and return -1; # Verify simple data type conversions # Currently we don't support vectors: # echo '$(guile (vector 1 2 3))'; \ run_make_test(q! x:;@echo '$(guile #f)'; \ echo '$(guile #t)'; \ echo '$(guile #\c)'; \ echo '$(guile 1234)'; \ echo '$(guile 'foo)'; \ echo '$(guile "bar")'; \ echo '$(guile (cons 'a 'b))'; \ echo '$(guile '(a b (c . d) 1 (2) 3))' !, '', "\n#t\nc\n1234\nfoo\nbar\na b\na b c d 1 2 3"); # Verify guile functions in variables -- SV 43378 run_make_test(q! res := $(guile #f) \ $(guile #t) \ $(guile #\c) \ $(guile 1234) \ $(guile 'foo) \ $(guile "bar") \ $(guile (cons 'a 'b)) \ $(guile '(a b (c . d) 1 (2) 3)) x:;@echo '$(res)' !, '', " #t c 1234 foo bar a b a b c d 1 2 3"); # Verify the gmk-expand function run_make_test(q! VAR = $(guile (gmk-expand "$(shell echo hi)")) x:;@echo '$(VAR)' !, '', "hi"); # Verify the gmk-eval function # Prove that the string is expanded only once (by eval) run_make_test(q! TEST = bye EVAL = VAR = $(TEST) $(shell echo there) $(guile (gmk-eval "$(value EVAL)")) TEST = hi x:;@echo '$(VAR)' !, '', "hi there"); # Verify the gmk-eval function with a list run_make_test(q! $(guile (gmk-eval '(VAR = 1 (2) () 3))) x:;@echo '$(VAR)' !, '', "1 2 3"); # Verify the gmk-var function run_make_test(q! VALUE = hi $(shell echo there) VAR = $(guile (gmk-var "VALUE")) x:;@echo '$(VAR)' !, '', "hi there"); # Verify the gmk-var function with a symbol run_make_test(q! VALUE = hi $(shell echo there) VAR = $(guile (gmk-var 'VALUE)) x:;@echo '$(VAR)' !, '', "hi there"); # Write a Guile program using define and run it run_make_test(q! # Define the "fib" function in Guile define fib ;; A procedure for counting the n:th Fibonacci number ;; See SICP, p. 37 (define (fib n) (cond ((= n 0) 0) ((= n 1) 1) (else (+ (fib (- n 1)) (fib (- n 2)))))) endef $(guile $(fib)) # Now run it x:;@echo $(guile (fib $(FIB))) !, 'FIB=10', "55"); 1; make-4.3/tests/scripts/functions/findstring0000644000175000017500000000223113603564437016162 00000000000000$description = "The following test creates a makefile to test the findstring " ."function."; $details = ""; # IF YOU NEED >1 MAKEFILE FOR THIS TEST, USE &get_tmpfile; TO GET # THE NAME OF THE MAKEFILE. THIS INSURES CONSISTENCY AND KEEPS TRACK OF # HOW MANY MAKEFILES EXIST FOR EASY DELETION AT THE END. # EXAMPLE: $makefile2 = &get_tmpfile; open(MAKEFILE,"> $makefile"); # The Contents of the MAKEFILE ... print MAKEFILE "string := \$(findstring port, reporter)\n" ."all: \n" ."\t\@echo \$(string) \n"; # END of Contents of MAKEFILE close(MAKEFILE); &run_make_with_options($makefile, "", &get_logfile, 0); # Create the answer to what should be produced by this Makefile $answer = "port\n"; # COMPARE RESULTS # In this call to compare output, you should use the call &get_logfile(1) # to send the name of the last logfile created. You may also use # the special call &get_logfile(1) which returns the same as &get_logfile(1). &compare_output($answer,&get_logfile(1)); # This tells the test driver that the perl test script executed properly. 1; make-4.3/tests/scripts/functions/call0000644000175000017500000000506213603564437014733 00000000000000# -*-perl-*- $description = "Test the call function.\n"; $details = "Try various uses of call and ensure they all give the correct results.\n"; run_make_test(q! # Simple, just reverse two things # reverse = $2 $1 # A complex 'map' function, using recursive 'call'. # map = $(foreach a,$2,$(call $1,$a)) # Test using a builtin; this is silly as it's simpler to do without call # my-notdir = $(call notdir,$(1)) # Test using non-expanded builtins # my-foreach = $(foreach $(1),$(2),$(3)) my-if = $(if $(1),$(2),$(3)) # Test recursive invocations of call with different arguments # one = $(1) $(2) $(3) two = $(call one,$(1),foo,$(2)) # Test recursion on the user-defined function. As a special case make # won't error due to this. # Implement transitive closure using $(call ...) # DEP_foo = bar baz quux DEP_baz = quux blarp rest = $(wordlist 2,$(words ${1}),${1}) tclose = $(if $1,$(firstword $1)\ $(call tclose,$(sort ${DEP_$(firstword $1)} $(call rest,$1)))) all: ; @echo '$(call reverse,bar,foo)'; \ echo '$(call map,origin,MAKE reverse map)'; \ echo '$(call my-notdir,a/b c/d e/f)'; \ echo '$(call my-foreach)'; \ echo '$(call my-foreach,a,,,)'; \ echo '$(call my-if,a,b,c)'; \ echo '$(call two,bar,baz)'; \ echo '$(call tclose,foo)'; !, "", "foo bar\ndefault file file\nb d f\n\n\nb\nbar foo baz\nfoo bar baz blarp quux \n"); # 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. # # 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 run_make_test(q! all = $1 $2 $3 $4 $5 $6 $7 $8 $9 level1 = $(call all,$1,$2,$3,$4,$5) level2 = $(call level1,$1,$2,$3) level3 = $(call level2,$1,$2,$3,$4,$5) all: @echo $(call all,1,2,3,4,5,6,7,8,9,10,11) @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) !, "", "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 ...) delete $ENV{X123}; run_make_test(' tst = $(eval export X123) $(call tst) all: ; @echo "$${X123-not set}" ', '', "\n"); 1; ### Local Variables: ### eval: (setq whitespace-action (delq 'auto-cleanup whitespace-action)) ### End: make-4.3/tests/scripts/functions/sort0000644000175000017500000000333613603564437015011 00000000000000# -*-perl-*- $description = "The following test creates a makefile to verify the ability of make to sort lists of object. Sort will also remove any duplicate entries. This will also be tested."; $details = "The make file is built with a list of object in a random order and includes some duplicates. Make should sort all of the elements remove all duplicates\n"; run_make_test(' foo := moon_light days foo1:= jazz bar := captured bar2 = boy end, has rise A midnight bar3:= $(foo) s1 := _by s2 := _and_a t1 := $(addsuffix $(s1), $(bar) ) t2 := $(addsuffix $(s2), $(foo1) ) t3 := $(t2) $(t2) $(t2) $(t2) $(t2) $(t2) $(t2) $(t2) $(t2) $(t2) t4 := $(t3) $(t3) $(t3) $(t3) $(t3) $(t3) $(t3) $(t3) $(t3) $(t3) t5 := $(t4) $(t4) $(t4) $(t4) $(t4) $(t4) $(t4) $(t4) $(t4) $(t4) t6 := $(t5) $(t5) $(t5) $(t5) $(t5) $(t5) $(t5) $(t5) $(t5) $(t5) t7 := $(t6) $(t6) $(t6) p1 := $(addprefix $(foo1), $(s2) ) blank:= all: @echo $(sort $(bar2) $(foo) $(addsuffix $(s1), $(bar) ) $(t2) $(bar2) $(bar3)) @echo $(sort $(blank) $(foo) $(bar2) $(t1) $(p1) ) @echo $(sort $(foo) $(bar2) $(t1) $(t4) $(t5) $(t7) $(t6) ) ', '', 'A boy captured_by days end, has jazz_and_a midnight moon_light rise A boy captured_by days end, has jazz_and_a midnight moon_light rise A boy captured_by days end, has jazz_and_a midnight moon_light rise '); # Test with non-space/tab whitespace. Note that you can't see the # original bug except using valgrind. run_make_test("FOO = a b\tc\rd\fe \f \f \f \f \ff all: ; \@echo \$(words \$(sort \$(FOO)))\n", '', "6\n"); 1; ### Local Variables: ### eval: (setq whitespace-action (delq 'auto-cleanup whitespace-action)) ### End: make-4.3/tests/scripts/functions/if0000644000175000017500000000164713603564437014423 00000000000000# -*-perl-*- $description = "Test the if function.\n"; $details = "Try various uses of if and ensure they all give the correct results.\n"; open(MAKEFILE, "> $makefile"); print MAKEFILE <1 MAKEFILE FOR THIS TEST, USE &get_tmpfile; TO GET # THE NAME OF THE MAKEFILE. THIS INSURES CONSISTENCY AND KEEPS TRACK OF # HOW MANY MAKEFILES EXIST FOR EASY DELETION AT THE END. # EXAMPLE: $makefile2 = &get_tmpfile; open(MAKEFILE,"> $makefile"); # The Contents of the MAKEFILE ... print MAKEFILE "string := \$(basename src${pathsep}a.b.z.foo.c src${pathsep}hacks src.bar${pathsep}a.b.z.foo.c src.bar${pathsep}hacks hacks) \n" ."all: \n" ."\t\@echo \$(string) \n"; # END of Contents of MAKEFILE close(MAKEFILE); &run_make_with_options($makefile,"",&get_logfile,0); # Create the answer to what should be produced by this Makefile $answer = "src${pathsep}a.b.z.foo src${pathsep}hacks src.bar${pathsep}a.b.z.foo src.bar${pathsep}hacks hacks\n"; # COMPARE RESULTS # In this call to compare output, you should use the call &get_logfile(1) # to send the name of the last logfile created. You may also use # the special call &get_logfile(1) which returns the same as &get_logfile(1). &compare_output($answer,&get_logfile(1)); # This tells the test driver that the perl test script executed properly. 1; make-4.3/tests/scripts/functions/word0000644000175000017500000001120013603564437014762 00000000000000# -*-perl-*- $description = "\ Test the word, words, wordlist, firstword, and lastword functions.\n"; $details = "\ Produce a variable with a large number of words in it, determine the number of words, and then read each one back.\n"; open(MAKEFILE,"> $makefile"); print MAKEFILE <<'EOF'; string := word.pl general_test2.pl FORCE.pl word.pl generic_test.perl MAKEFILES_variable.pl string2 := $(string) $(string) $(string) $(string) $(string) $(string) $(string) string3 := $(string2) $(string2) $(string2) $(string2) $(string2) $(string2) $(string2) string4 := $(string3) $(string3) $(string3) $(string3) $(string3) $(string3) $(string3) all: @echo $(words $(string)) @echo $(words $(string4)) @echo $(word 1, $(string)) @echo $(word 100, $(string)) @echo $(word 1, $(string)) @echo $(word 1000, $(string3)) @echo $(wordlist 3, 4, $(string)) @echo $(wordlist 4, 3, $(string)) @echo $(wordlist 1, 6, $(string)) @echo $(wordlist 5, 7, $(string)) @echo $(wordlist 100, 110, $(string)) @echo $(wordlist 7, 10, $(string2)) EOF close(MAKEFILE); &run_make_with_options($makefile, "", &get_logfile); $answer = "6\n" ."2058\n" ."word.pl\n" ."\n" ."word.pl\n" ."\n" ."FORCE.pl word.pl\n" ."\n" ."word.pl general_test2.pl FORCE.pl word.pl generic_test.perl MAKEFILES_variable.pl\n" ."generic_test.perl MAKEFILES_variable.pl\n" ."\n" ."word.pl general_test2.pl FORCE.pl word.pl\n"; &compare_output($answer, &get_logfile(1)); # Test error conditions run_make_test('FOO = foo bar biz baz word-e1: ; @echo $(word ,$(FOO)) word-e2: ; @echo $(word abc ,$(FOO)) word-e3: ; @echo $(word 1a,$(FOO)) wordlist-e1: ; @echo $(wordlist ,,$(FOO)) wordlist-e2: ; @echo $(wordlist abc ,,$(FOO)) wordlist-e3: ; @echo $(wordlist 1, 12a ,$(FOO))', 'word-e1', "#MAKEFILE#:3: *** non-numeric first argument to 'word' function: ''. Stop.", 512); run_make_test(undef, 'word-e2', "#MAKEFILE#:4: *** non-numeric first argument to 'word' function: 'abc '. Stop.", 512); run_make_test(undef, 'word-e3', "#MAKEFILE#:5: *** non-numeric first argument to 'word' function: '1a'. Stop.", 512); run_make_test(undef, 'wordlist-e1', "#MAKEFILE#:7: *** non-numeric first argument to 'wordlist' function: ''. Stop.", 512); run_make_test(undef, 'wordlist-e2', "#MAKEFILE#:8: *** non-numeric first argument to 'wordlist' function: 'abc '. Stop.", 512); run_make_test(undef, 'wordlist-e3', "#MAKEFILE#:9: *** non-numeric second argument to 'wordlist' function: ' 12a '. Stop.", 512); # Test error conditions again, but this time in a variable reference run_make_test('FOO = foo bar biz baz W = $(word $x,$(FOO)) WL = $(wordlist $s,$e,$(FOO)) word-e: ; @echo $(W) wordlist-e: ; @echo $(WL)', 'word-e x=', "#MAKEFILE#:3: *** non-numeric first argument to 'word' function: ''. Stop.", 512); run_make_test(undef, 'word-e x=abc', "#MAKEFILE#:3: *** non-numeric first argument to 'word' function: 'abc'. Stop.", 512); run_make_test(undef, 'word-e x=0', "#MAKEFILE#:3: *** first argument to 'word' function must be greater than 0. Stop.", 512); run_make_test(undef, 'wordlist-e s= e=', "#MAKEFILE#:4: *** non-numeric first argument to 'wordlist' function: ''. Stop.", 512); run_make_test(undef, 'wordlist-e s=abc e=', "#MAKEFILE#:4: *** non-numeric first argument to 'wordlist' function: 'abc'. Stop.", 512); run_make_test(undef, 'wordlist-e s=4 e=12a', "#MAKEFILE#:4: *** non-numeric second argument to 'wordlist' function: '12a'. Stop.", 512); run_make_test(undef, 'wordlist-e s=0 e=12', "#MAKEFILE#:4: *** invalid first argument to 'wordlist' function: '0'. Stop.", 512); # TEST #8 -- test $(firstword ) # run_make_test(' void := list := $(void) foo bar baz # a := $(word 1,$(list)) b := $(firstword $(list)) .PHONY: all all: @test "$a" = "$b" && echo $a ', '', 'foo'); # TEST #9 -- test $(lastword ) # run_make_test(' void := list := $(void) foo bar baz # a := $(word $(words $(list)),$(list)) b := $(lastword $(list)) .PHONY: all all: @test "$a" = "$b" && echo $a ', '', 'baz'); # This tells the test driver that the perl test script executed properly. 1; make-4.3/tests/scripts/functions/shell0000644000175000017500000000443313603564437015130 00000000000000# -*-perl-*- $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'); # 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 run_make_test(q! FOO := $(shell echo '#') foo: ; echo '$(FOO)' !, '', "echo '#'\n#\n"); # Test shells inside exported environment variables. # This is the test that fails if we try to put make exported variables into # the environment for a $(shell ...) call. run_make_test(' export HI = $(shell echo hi) .PHONY: all all: ; @echo $$HI ','','hi'); if ($port_type ne 'W32') { # Test shell errors in recipes including offset # This needs to be ported to Windows, or else Windows error messages # need to converted to look like more normal make errors. run_make_test(' all: @echo hi $(shell ./basdfdfsed there) @echo $(.SHELLSTATUS) ', '', "#MAKE#: ./basdfdfsed: $ERR_no_such_file\nhi\n127\n"); run_make_test(' $(shell ./basdfdfsed where) all: ; @echo $(.SHELLSTATUS) ', '', "#MAKE#: ./basdfdfsed: $ERR_no_such_file\n127\n"); # Test SHELLSTATUS for kill. # This test could be ported to Windows, using taskkill ... ? # Figure out the exit code for SIGINT my $pid = fork(); if (! $pid) { exec('kill -2 $$') or die "exec: Cannot execute sleep\n"; } waitpid($pid, 0); # .SHELLSTATUS for a signal gives 128 + the signal number my $ret = $?; if ($ret > 255) { # Solaris 10 perl 5.8.4 puts signal number + 128 into the high 8 bits. $ret >>= 8; } $ret |= 128; run_make_test('.PHONY: all $(shell kill -2 $$$$) STAT := $(.SHELLSTATUS) all: ; @echo STAT=$(STAT) ','',"STAT=$ret\n"); } 1; ### Local Variables: ### eval: (setq whitespace-action (delq 'auto-cleanup whitespace-action)) ### End: make-4.3/tests/scripts/functions/notdir0000644000175000017500000000214513603564437015316 00000000000000$description = "The following test creates a makefile to test the notdir " ."function."; $details = ""; # IF YOU NEED >1 MAKEFILE FOR THIS TEST, USE &get_tmpfile; TO GET # THE NAME OF THE MAKEFILE. THIS INSURES CONSISTENCY AND KEEPS TRACK OF # HOW MANY MAKEFILES EXIST FOR EASY DELETION AT THE END. # EXAMPLE: $makefile2 = &get_tmpfile; open(MAKEFILE,"> $makefile"); # The Contents of the MAKEFILE ... print MAKEFILE "string := \$(notdir ${pathsep}src${pathsep}foo.c hacks) \n" ."all: \n" ."\t\@echo \$(string) \n"; # END of Contents of MAKEFILE close(MAKEFILE); &run_make_with_options($makefile,"",&get_logfile,0); # Create the answer to what should be produced by this Makefile $answer = "foo.c hacks\n"; # COMPARE RESULTS # In this call to compare output, you should use the call &get_logfile(1) # to send the name of the last logfile created. You may also use # the special call &get_logfile(1) which returns the same as &get_logfile(1). &compare_output($answer,&get_logfile(1)); # This tells the test driver that the perl test script executed properly. 1; make-4.3/tests/scripts/functions/file0000644000175000017500000000511213603564437014733 00000000000000# -*-perl-*- $description = 'Test the $(file ...) function.'; # Test > and >> run_make_test(q! define A a b endef B = c d $(file >file.out,$(A)) $(foreach L,$(B),$(file >> file.out,$L)) x:;@echo hi; cat file.out !, '', "hi\na\nb\nc\nd"); unlink('file.out'); # Test >> to a non-existent file run_make_test(q! define A a b endef $(file >> file.out,$(A)) x:;@cat file.out !, '', "a\nb"); unlink('file.out'); # Test > with no content run_make_test(q! $(file >4touch) .PHONY:x x:;@cat 4touch !, '', ''); # Test >> with no content run_make_test(q! $(file >>4touch) .PHONY:x x:;@cat 4touch !, '', ''); unlink('4touch'); # Test > to a read-only file if (defined $ERR_read_only_file) { touch('file.out'); chmod(0444, 'file.out'); run_make_test(q! define A a b endef $(file > file.out,$(A)) x:;@cat file.out !, '', "#MAKEFILE#:6: *** open: file.out: $ERR_read_only_file. Stop.", 512); unlink('file.out'); } # Use variables for operator and filename run_make_test(q! define A a b endef OP = > FN = file.out $(file $(OP) $(FN),$(A)) x:;@cat file.out !, '', "a\nb"); unlink('file.out'); # Don't add newlines if one already exists run_make_test(q! define A a b endef $(file >file.out,$(A)) x:;@cat file.out !, '', "a\nb"); unlink('file.out'); # Empty text run_make_test(q! $(file >file.out,) $(file >>file.out,) x:;@cat file.out !, '', "\n\n"); unlink('file.out'); # Reading files run_make_test(q! $(file >file.out,A = foo) X1 := $(file >file.out,B = bar) $(eval $(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; make-4.3/tests/scripts/functions/foreach0000644000175000017500000000454313603564437015432 00000000000000# -*-perl-*- # $Id$ $description = "Test the foreach function."; $details = "This is a test of the foreach function in gnu make. This function starts with a space separated list of names and a variable. Each name in the list is subsituted into the variable and the given text evaluated. The general form of the command is $(foreach var,\$list,\$text). Several types of foreach loops are tested\n"; # TEST 0 # Set an environment variable that we can test in the makefile. $extraENV{FOOFOO} = 'foo foo'; run_make_test("space = ' '".' null := auto_var = udef space CC null FOOFOO MAKE foo CFLAGS WHITE @ < foo = bletch null @ garf av = $(foreach var, $(auto_var), $(origin $(var)) ) override WHITE := BLACK for_var = $(addsuffix .c,foo $(null) $(foo) $(space) $(av) ) fe = $(foreach var2, $(for_var),$(subst .c,.o, $(var2) ) ) all: auto for2 auto : ; @echo $(av) for2: ; @echo $(fe)', '-e WHITE=WHITE CFLAGS=', "undefined file default file environment default file command line override automatic automatic foo.o bletch.o null.o @.o garf.o .o .o undefined.o file.o default.o file.o environment.o default.o file.o command.o line.o override.o automatic.o automatic.o"); delete $extraENV{FOOFOO}; # TEST 1: Test that foreach variables take precedence over global # variables in a global scope (like inside an eval). Tests bug #11913 run_make_test(' .PHONY: all target all: target x := BAD define mktarget target: x := $(x) target: ; @echo "$(x)" endef x := GLOBAL $(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. 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 ) y = $x all: ; @echo $y', '', "#MAKEFILE#:2: *** insufficient number of arguments (1) to function 'foreach'. Stop.", 512); run_make_test(' x = $(foreach x,y) y := $x all: ; @echo $y', '', "#MAKEFILE#:2: *** insufficient number of arguments (2) to function 'foreach'. Stop.", 512); 1; make-4.3/tests/scripts/functions/addprefix0000644000175000017500000000220413603564437015761 00000000000000$description = "The following test creates a makefile to test the addprefix " ."function."; $details = ""; # IF YOU NEED >1 MAKEFILE FOR THIS TEST, USE &get_tmpfile; TO GET # THE NAME OF THE MAKEFILE. THIS INSURES CONSISTENCY AND KEEPS TRACK OF # HOW MANY MAKEFILES EXIST FOR EASY DELETION AT THE END. # EXAMPLE: $makefile2 = &get_tmpfile; open(MAKEFILE,"> $makefile"); # The Contents of the MAKEFILE ... print MAKEFILE "string := \$(addprefix src${pathsep},a.b.z.foo hacks) \n" ."all: \n" ."\t\@echo \$(string) \n"; # END of Contents of MAKEFILE close(MAKEFILE); &run_make_with_options($makefile,"",&get_logfile,0); # Create the answer to what should be produced by this Makefile $answer = "src${pathsep}a.b.z.foo src${pathsep}hacks\n"; # COMPARE RESULTS # In this call to compare output, you should use the call &get_logfile(1) # to send the name of the last logfile created. You may also use # the special call &get_logfile(1) which returns the same as &get_logfile(1). &compare_output($answer,&get_logfile(1)); # This tells the test driver that the perl test script executed properly. 1; make-4.3/tests/scripts/functions/origin0000644000175000017500000000250013603564437015301 00000000000000# -*-perl-*- $description = "Test the origin function."; $details = "This is a test of the origin function in gnu make. This function will report on where a variable was defined per the following list: 'undefined' never defined 'default' default definition 'environment' environment var without -e 'environment override' environment var with -e 'file' defined in makefile 'command line' defined on the command line 'override' defined by override in makefile 'automatic' Automatic variable\n"; # Set an environment variable $extraENV{MAKETEST} = 1; run_make_test(' foo := bletch garf auto_var = undefined CC MAKETEST MAKE foo CFLAGS WHITE @ av = $(foreach var, $(auto_var), $(origin $(var)) ) override WHITE := BLACK all: auto @echo $(origin undefined) @echo $(origin CC) @echo $(origin MAKETEST) @echo $(origin MAKE) @echo $(origin foo) @echo $(origin CFLAGS) @echo $(origin WHITE) @echo $(origin @) auto : @echo $(av)', '-e WHITE=WHITE CFLAGS=', 'undefined default environment default file command line override automatic undefined default environment default file command line override automatic'); # Reset an environment variable delete $extraENV{MAKETEST}; 1; make-4.3/tests/scripts/functions/addsuffix0000644000175000017500000000134113603564437015771 00000000000000# -*-perl-*- $description = "Test the addsuffix function."; $details = ""; open(MAKEFILE,"> $makefile"); # The Contents of the MAKEFILE ... print MAKEFILE < run_make_test('all:;@echo $(patsubst Foo,Repl,FooFoo)', '', 'FooFoo'); # Variable subst where a pattern matches multiple times in a single word. # Based on a bug report by Markus Mauhart run_make_test(' A := fooBARfooBARfoo all:;@echo $(A:fooBARfoo=REPL)', '', 'fooBARREPL'); 1; make-4.3/tests/scripts/functions/wildcard0000644000175000017500000001065513603564437015615 00000000000000# -*-perl-*- $description = "The following test creates a makefile to test wildcard expansions and the ability to put a command on the same line as the target name separated by a semi-colon."; $details = "\ This test creates 4 files by the names of 1.example, two.example and 3.example. We execute three tests. The first executes the print1 target which tests the '*' wildcard by echoing all filenames by the name of '*.example'. The second test echo's all files which match '?.example' and [a-z0-9].example. Lastly we clean up all of the files using the '*' wildcard as in the first test"; touch("example.1"); touch("example.two"); touch("example.3"); touch("example.for"); touch("example._"); # TEST #1 # ------- run_make_test(qq/ .PHONY: print1 print2 clean print1: ;\@echo \$(wildcard example.*) print2: \t\@echo \$(wildcard example.?) \t\@echo \$(wildcard example.[a-z0-9]) \t\@echo \$(wildcard example.[!A-Za-z_\\!]) clean: \t$CMD_rmfile \$(wildcard example.*) /, 'print1', "example.1 example.3 example._ example.for example.two\n"); # TEST #2 # ------- run_make_test(undef, 'print2', "example.1 example.3 example._\n" ."example.1 example.3\n" ."example.1 example.3\n"); # TEST #3 # ------- $answer = "$CMD_rmfile example.1 example.3 example._ example.for example.two"; if ($vos) { $answer .= " \n"; } else { $answer .= "\n"; } run_make_test(undef, 'clean', $answer); # TEST #4: Verify that failed wildcards don't return the pattern run_make_test(q! all: ; @echo $(wildcard xz--y*.7) !, '', "\n"); # TEST #5: wildcard used to verify file existence touch('xxx.yyy'); run_make_test(q!exists: ; @echo file=$(wildcard xxx.yyy)!, '', "file=xxx.yyy\n"); unlink('xxx.yyy'); run_make_test(q!exists: ; @echo file=$(wildcard xxx.yyy)!, '', "file=\n"); # TEST #7: verify that when the input pattern has a trailing slash wildcard # returns only directories. # # Currently this doesn't work with our embedded GLOB so disable it. # ------- if (get_config('USE_SYSTEM_GLOB') eq 'yes') { touch("hellof"); mkdir("hellod", 0770); mkdir("hellod/worldd", 0770); touch("hellod/worldf"); mkdir("hellod/worldd/kend1", 0770); mkdir("hellod/worldd/kend2", 0770); touch("hellod/worldd/kenf1"); touch("hellod/worldd/kenf2"); run_make_test(qq! print3: \t\@echo \$(wildcard hello*) \t\@echo \$(wildcard hello*/) \t\@echo \$(wildcard hellod/world*) \t\@echo \$(wildcard hellod/world*/) \t\@echo \$(wildcard hello* hellod/world*) \t\@echo \$(wildcard hello*/ hellod/world*/) \t\@echo \$(wildcard hellod/*) \t\@echo \$(wildcard hellod/*/) \t\@echo \$(wildcard */world*) \t\@echo \$(wildcard */worldd/) \t\@echo \$(wildcard hellod/*/ken*/) \t\@echo \$(wildcard hellod/*/ken?[12]) \t\@echo \$(wildcard hellod/*/ken?[12]/) !, '', "hellod hellof\n" ."hellod/\n" ."hellod/worldd hellod/worldf\n" ."hellod/worldd/\n" ."hellod hellof hellod/worldd hellod/worldf\n" ."hellod/ hellod/worldd/\n" ."hellod/worldd hellod/worldf\n" ."hellod/worldd/\n" ."hellod/worldd hellod/worldf\n" ."hellod/worldd/\n" ."hellod/worldd/kend1/ hellod/worldd/kend2/\n" ."hellod/worldd/kend1 hellod/worldd/kend2 " ."hellod/worldd/kenf1 hellod/worldd/kenf2\n" ."hellod/worldd/kend1/ hellod/worldd/kend2/\n"); unlink('hellof', 'hellod/worldf', 'hellod/worldd/kenf1', 'hellod/worldd/kenf2'); foreach $d ('hellod/worldd/kend1', 'hellod/worldd/kend2', 'hellod/worldd', 'hellod') { rmdir($d); } } if ($port_type ne 'W32') { # Check wildcard on the root directory run_make_test('print4: ; @echo $(wildcard /)', '', "/\n"); } if ($port_type ne 'W32' && eval { symlink("",""); 1 }) { # TEST #6: check for wildcards matching directories # See SV 53465 my $dir = '__rdir'; my $lnk = '__ldir'; mkdir($dir, 0777); symlink($dir, $lnk); run_make_test(qq!all: ; \@echo \$(wildcard $lnk*/.)!, '', "$lnk/."); unlink($lnk); rmdir($dir); # Test for dangling symlinks # This doesn't work with the built-in glob... needs to be updated! if (get_config('USE_SYSTEM_GLOB') eq 'yes') { symlink($dir, $lnk); run_make_test(qq!all: ; \@echo \$(wildcard $lnk)!, '', "$lnk"); unlink($lnk); } } 1; make-4.3/tests/scripts/functions/andor0000644000175000017500000000252213603564437015121 00000000000000# -*-perl-*- $description = "Test the and & or functions.\n"; $details = "Try various uses of and & or to ensure they all give the correct results.\n"; # TEST #0 # For $(and ...), it will either be empty or the last value run_make_test(' NEQ = $(subst $1,,$2) f = t = true all: @echo 1 $(and ,$t) @echo 2 $(and $t) @echo 3 $(and $t,) @echo 4 $(and z,true,$f,false) @echo 5 $(and $t,$f,$(info bad short-circuit)) @echo 6 $(and $(call NEQ,a,b),true) @echo 7 $(and $(call NEQ,a,a),true) @echo 8 $(and z,true,fal,se) hi @echo 9 $(and ,true,fal,se)there @echo 10 $(and $(e) ,$t)', '', "1\n2 true\n3\n4\n5\n6 true\n7\n8 se hi\n9 there\n10\n"); # TEST #1 # For $(or ...), it will either be empty or the first true value run_make_test(' NEQ = $(subst $1,,$2) f = t = true all: @echo 1 $(or , ) @echo 2 $(or $t) @echo 3 $(or ,$t) @echo 4 $(or z,true,$f,false) @echo 5 $(or $t,$(info bad short-circuit)) @echo 6 $(or $(info short-circuit),$t) @echo 7 $(or $(call NEQ,a,b),true) @echo 8 $(or $(call NEQ,a,a),true) @echo 9 $(or z,true,fal,se) hi @echo 10 $(or ,true,fal,se)there @echo 11 $(or $(e) ,$f)', '', "short-circuit\n1\n2 true\n3 true\n4 z\n5 true\n6 true\n7 b\n8 true\n9 z hi\n10 truethere\n11\n"); 1; make-4.3/tests/scripts/functions/suffix0000644000175000017500000000404713603564437015326 00000000000000$description = "The following test creates a makefile to test the suffix\n" ."function. \n"; $details = "The suffix function will return the string following the last _._\n" ."the list provided. It will provide all of the unique suffixes found\n" ."in the list. The long strings are sorted to remove duplicates.\n"; # IF YOU NEED >1 MAKEFILE FOR THIS TEST, USE &get_tmpfile; TO GET # THE NAME OF THE MAKEFILE. THIS INSURES CONSISTENCY AND KEEPS TRACK OF # HOW MANY MAKEFILES EXIST FOR EASY DELETION AT THE END. # EXAMPLE: $makefile2 = &get_tmpfile; open(MAKEFILE,"> $makefile"); # The Contents of the MAKEFILE ... print MAKEFILE "string := word.pl general_test2.pl1 FORCE.pl word.pl3 generic_test.perl /tmp.c/bar foo.baz/bar.c MAKEFILES_variable.c\n" ."string2 := \$(string) \$(string) \$(string) \$(string) \$(string) \$(string) \$(string)\n" ."string3 := \$(string2) \$(string2) \$(string2) \$(string2) \$(string2) \$(string2) \$(string2)\n" ."string4 := \$(string3) \$(string3) \$(string3) \$(string3) \$(string3) \$(string3) \$(string3)\n" ."all: \n" ."\t\@echo \$(suffix \$(string)) \n" ."\t\@echo \$(sort \$(suffix \$(string4))) \n" ."\t\@echo \$(suffix \$(string) a.out) \n" ."\t\@echo \$(sort \$(suffix \$(string3))) \n"; # END of Contents of MAKEFILE close(MAKEFILE); &run_make_with_options($makefile,"",&get_logfile,0); # Create the answer to what should be produced by this Makefile # COMPARE RESULTS $answer = ".pl .pl1 .pl .pl3 .perl .c .c\n" .".c .perl .pl .pl1 .pl3\n" .".pl .pl1 .pl .pl3 .perl .c .c .out\n" .".c .perl .pl .pl1 .pl3\n"; # In this call to compare output, you should use the call &get_logfile(1) # to send the name of the last logfile created. You may also use # the special call &get_logfile(1) which returns the same as &get_logfile(1). &compare_output($answer,&get_logfile(1)); # This tells the test driver that the perl test script executed properly. 1; make-4.3/tests/scripts/functions/abspath0000644000175000017500000000357213603564437015446 00000000000000# -*-perl-*- $description = "Test the abspath functions."; $details = ""; # Someone needs to rewrite this to be portable for Windows $port_type eq 'W32' and return -1; run_make_test(' ifneq ($(realpath $(abspath .)),$(CURDIR)) $(warning .: abs="$(abspath .)" real="$(realpath $(abspath .))" curdir="$(CURDIR)") endif ifneq ($(realpath $(abspath ./)),$(CURDIR)) $(warning ./: abs="$(abspath ./)" real="$(realpath $(abspath ./))" curdir="$(CURDIR)") endif ifneq ($(realpath $(abspath .///)),$(CURDIR)) $(warning .///: abs="$(abspath .///)" real="$(realpath $(abspath .///))" curdir="$(CURDIR)") endif ifneq ($(abspath /),/) $(warning /: abspath="$(abspath /)") endif ifneq ($(abspath ///),/) $(warning ///: abspath="$(abspath ///)") endif ifneq ($(abspath /.),/) $(warning /.: abspath="$(abspath /.)") endif ifneq ($(abspath ///.),/) $(warning ///.: abspath="$(abspath ///.)") endif ifneq ($(abspath /./),/) $(warning /./: abspath="$(abspath /./)") endif ifneq ($(abspath /.///),/) $(warning /.///: abspath="$(abspath /.///)") endif ifneq ($(abspath /..),/) $(warning /..: abspath="$(abspath /..)") endif ifneq ($(abspath ///..),/) $(warning ///..: abspath="$(abspath ///..)") endif ifneq ($(abspath /../),/) $(warning /../: abspath="$(abspath /../)") endif ifneq ($(abspath /..///),/) $(warning /..///: abspath="$(abspath /..///)") endif ifneq ($(abspath /foo/bar/..),/foo) $(warning /foo/bar/..: abspath="$(abspath /foo/bar/..)") endif ifneq ($(abspath /foo/bar/../../../baz),/baz) $(warning /foo/bar/../../../baz: abspath="$(abspath /foo/bar/../../../baz)") endif ifneq ($(abspath /foo/bar/../ /..),/foo /) $(warning /foo/bar/../ /..: abspath="$(abspath /foo/bar/../ /..)") endif .PHONY: all all: ; @: ', '', ''); # This tells the test driver that the perl test script executed properly. 1; make-4.3/tests/scripts/functions/join0000644000175000017500000000213613603564437014756 00000000000000$description = "The following test creates a makefile to test the join " ."function."; $details = ""; # IF YOU NEED >1 MAKEFILE FOR THIS TEST, USE &get_tmpfile; TO GET # THE NAME OF THE MAKEFILE. THIS INSURES CONSISTENCY AND KEEPS TRACK OF # HOW MANY MAKEFILES EXIST FOR EASY DELETION AT THE END. # EXAMPLE: $makefile2 = &get_tmpfile; open(MAKEFILE,"> $makefile"); # The Contents of the MAKEFILE ... print MAKEFILE "string := \$(join a b c,foo hacks .pl1) \n" ."all: \n" ."\t\@echo \$(string) \n"; # END of Contents of MAKEFILE close(MAKEFILE); &run_make_with_options($makefile,"",&get_logfile,0); # Create the answer to what should be produced by this Makefile $answer = "afoo bhacks c.pl1\n"; # COMPARE RESULTS # In this call to compare output, you should use the call &get_logfile(1) # to send the name of the last logfile created. You may also use # the special call &get_logfile(1) which returns the same as &get_logfile(1). &compare_output($answer,&get_logfile(1)); # This tells the test driver that the perl test script executed properly. 1; make-4.3/tests/scripts/functions/value0000644000175000017500000000133413603564437015132 00000000000000# -*-perl-*- $description = "Test the value function."; $details = "This is a test of the value function in GNU make. This function will evaluate to the value of the named variable with no further expansion performed on it.\n"; open(MAKEFILE,"> $makefile"); print MAKEFILE <<'EOF'; export FOO = foo recurse = FOO = $FOO static := FOO = $(value FOO) all: ; @echo $(recurse) $(value recurse) $(static) $(value static) EOF close(MAKEFILE); &run_make_with_options($makefile, "", &get_logfile); # Create the answer to what should be produced by this Makefile $answer = "FOO = OO FOO = foo FOO = foo FOO = foo\n"; &compare_output($answer,&get_logfile(1)); 1; make-4.3/tests/scripts/functions/warning0000644000175000017500000000351713603564437015470 00000000000000# -*-Perl-*- $description = "\ The following test creates a makefile to test the warning function."; $details = ""; open(MAKEFILE,"> $makefile"); print MAKEFILE <<'EOF'; ifdef WARNING1 $(warning warning is $(WARNING1)) endif ifdef WARNING2 $(warning warning is $(WARNING2)) endif ifdef WARNING3 all: some; @echo hi $(warning warning is $(WARNING3)) endif ifdef WARNING4 all: some; @echo hi @echo there $(warning warning is $(WARNING4)) endif some: ; @echo Some stuff EOF close(MAKEFILE); # Test #1 &run_make_with_options($makefile, "WARNING1=yes", &get_logfile, 0); $answer = "$makefile:2: warning is yes\nSome stuff\n"; &compare_output($answer,&get_logfile(1)); # Test #2 &run_make_with_options($makefile, "WARNING2=no", &get_logfile, 0); $answer = "$makefile:6: warning is no\nSome stuff\n"; &compare_output($answer,&get_logfile(1)); # Test #3 &run_make_with_options($makefile, "WARNING3=maybe", &get_logfile, 0); $answer = "Some stuff\n$makefile:10: warning is maybe\nhi\n"; &compare_output($answer,&get_logfile(1)); # Test #4 &run_make_with_options($makefile, "WARNING4=definitely", &get_logfile, 0); $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: make-4.3/tests/scripts/functions/dir0000644000175000017500000000214313603564437014573 00000000000000$description = "The following test creates a makefile to test the dir " ."function."; $details = ""; # IF YOU NEED >1 MAKEFILE FOR THIS TEST, USE &get_tmpfile; TO GET # THE NAME OF THE MAKEFILE. THIS INSURES CONSISTENCY AND KEEPS TRACK OF # HOW MANY MAKEFILES EXIST FOR EASY DELETION AT THE END. # EXAMPLE: $makefile2 = &get_tmpfile; open(MAKEFILE,"> $makefile"); # The Contents of the MAKEFILE ... print MAKEFILE "string := \$(dir src${pathsep}foo.c hacks) \n" ."all: \n" ."\t\@echo \$(string) \n"; # END of Contents of MAKEFILE close(MAKEFILE); &run_make_with_options($makefile,"",&get_logfile,0); # Create the answer to what should be produced by this Makefile $answer = "src${pathsep} .${pathsep}\n"; # COMPARE RESULTS # In this call to compare output, you should use the call &get_logfile(1) # to send the name of the last logfile created. You may also use # the special call &get_logfile(1) which returns the same as &get_logfile(1). &compare_output($answer,&get_logfile(1)); # This tells the test driver that the perl test script executed properly. 1; make-4.3/tests/scripts/functions/eval0000644000175000017500000000670013603564437014747 00000000000000# -*-perl-*- $description = "Test the eval function."; $details = "This is a test of the eval function in GNU make. This function will evaluate inline makefile syntax and incorporate the results into its internal database.\n"; open(MAKEFILE,"> $makefile"); print MAKEFILE <<'EOF'; define Y all:: ; @echo $AA A = B endef X = $(eval $(value Y)) $(eval $(shell echo A = A)) $(eval $(Y)) $(eval A = C) $(eval $(X)) EOF close(MAKEFILE); &run_make_with_options($makefile, "", &get_logfile); # Create the answer to what should be produced by this Makefile $answer = "AA\nBA\n"; &compare_output($answer,&get_logfile(1)); # Test to make sure defining variables when we have extra scope pushed works # as expected. $makefile2 = &get_tmpfile; open(MAKEFILE,"> $makefile2"); print MAKEFILE <<'EOF'; VARS = A B VARSET = $(1) = $(2) $(foreach v,$(VARS),$(eval $(call VARSET,$v,$v))) all: ; @echo A = $(A) B = $(B) EOF close(MAKEFILE); &run_make_with_options($makefile2, "", &get_logfile); # Create the answer to what should be produced by this Makefile $answer = "A = A B = B\n"; &compare_output($answer,&get_logfile(1)); # Test to make sure eval'ing inside conditionals works properly $makefile3 = &get_tmpfile; open(MAKEFILE,"> $makefile3"); print MAKEFILE <<'EOF'; FOO = foo all:: ; @echo it define Y all:: ; @echo worked endef ifdef BAR $(eval $(Y)) endif EOF close(MAKEFILE); &run_make_with_options($makefile3, "", &get_logfile); $answer = "it\n"; &compare_output($answer,&get_logfile(1)); &run_make_with_options($makefile3, "BAR=1", &get_logfile); $answer = "it\nworked\n"; &compare_output($answer,&get_logfile(1)); # TEST very recursive invocation of eval $makefile3 = &get_tmpfile; open(MAKEFILE,"> $makefile3"); print MAKEFILE <<'EOF'; ..9 := 0 1 2 3 4 5 6 7 8 9 rev=$(eval res:=)$(foreach word,$1,$(eval res:=${word} ${res}))${res} a:=$(call rev,${..9}) all: ; @echo '[$(a)]' EOF close(MAKEFILE); &run_make_with_options($makefile3, "", &get_logfile); $answer = "[ 9 8 7 6 5 4 3 2 1 0 ]\n"; &compare_output($answer,&get_logfile(1)); # TEST eval with no filename context. # The trick here is that because EVAR is taken from the environment, it must # be evaluated before every command is invoked. Make sure that works, when # we have no file context for reading_file (bug # 6195) $makefile4 = &get_tmpfile; open(MAKEFILE,"> $makefile4"); print MAKEFILE <<'EOF'; EVAR = $(eval FOBAR = 1) all: ; @echo "OK" EOF close(MAKEFILE); $extraENV{EVAR} = '1'; &run_make_with_options($makefile4, "", &get_logfile); $answer = "OK\n"; &compare_output($answer,&get_logfile(1)); # Clean out previous information to allow new run_make_test() interface. # If we ever convert all the above to run_make_test() we can remove this line. $makefile = undef; # Test handling of backslashes in strings to be evaled. run_make_test(' define FOO all: ; @echo hello \ world endef $(eval $(FOO)) ', '', 'hello world'); run_make_test(' define FOO all: ; @echo '."'".'he\llo'."'".' @echo world endef $(eval $(FOO)) ', '', 'he\llo world'); # We don't allow new target/prerequisite relationships to be defined within a # command script, because these are evaluated after snap_deps() and that # causes lots of problems (like core dumps!) # See Savannah bug # 12124. run_make_test('deps: ; $(eval deps: foo)', '', '#MAKEFILE#:1: *** prerequisites cannot be defined in recipes. Stop.', 512); 1; make-4.3/tests/scripts/functions/error0000644000175000017500000000321613603564437015150 00000000000000# -*-Perl-*- $description = "\ The following test creates a makefile to test the error function."; $details = ""; open(MAKEFILE,"> $makefile"); print MAKEFILE 'err = $(error Error found!) ifdef ERROR1 $(error error is $(ERROR1)) endif ifdef ERROR2 $(error error is $(ERROR2)) endif ifdef ERROR3 all: some; @echo $(error error is $(ERROR3)) endif ifdef ERROR4 all: some; @echo error is $(ERROR4) @echo $(error error is $(ERROR4)) endif some: ; @echo Some stuff testvar: ; @: $(err) '; close(MAKEFILE); # Test #1 &run_make_with_options($makefile, "ERROR1=yes", &get_logfile, 512); $answer = "$makefile:4: *** error is yes. Stop.\n"; &compare_output($answer,&get_logfile(1)); # Test #2 &run_make_with_options($makefile, "ERROR2=no", &get_logfile, 512); $answer = "$makefile:8: *** error is no. Stop.\n"; &compare_output($answer,&get_logfile(1)); # Test #3 &run_make_with_options($makefile, "ERROR3=maybe", &get_logfile, 512); $answer = "Some stuff\n$makefile:12: *** error is maybe. Stop.\n"; &compare_output($answer,&get_logfile(1)); # Test #4 &run_make_with_options($makefile, "ERROR4=definitely", &get_logfile, 512); $answer = "Some stuff\n$makefile:17: *** error is definitely. Stop.\n"; &compare_output($answer,&get_logfile(1)); # Test #5 &run_make_with_options($makefile, "testvar", &get_logfile, 512); $answer = "$makefile:22: *** Error found!. Stop.\n"; &compare_output($answer,&get_logfile(1)); # 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: make-4.3/tests/scripts/variables/0000755000175000017500000000000013611151241014072 500000000000000make-4.3/tests/scripts/variables/DEFAULT_GOAL0000644000175000017500000000225413603564437015646 00000000000000# -*-perl-*- $description = "Test the .DEFAULT_GOAL special variable."; $details = ""; # Test #1: basic logic. # run_make_test(' # Basics. # foo: ; @: ifneq ($(.DEFAULT_GOAL),foo) $(error ) endif # Reset to empty. # .DEFAULT_GOAL := bar: ; @: ifneq ($(.DEFAULT_GOAL),bar) $(error ) endif # Change to a different goal. # .DEFAULT_GOAL := baz baz: ; @echo $@ ', '', 'baz'); # Test #2: unknown goal. # run_make_test(' .DEFAULT_GOAL = foo ', '', "#MAKE#: *** No rule to make target 'foo'. Stop.", 512); # Test #3: more than one goal. # run_make_test(' .DEFAULT_GOAL := foo bar ', '', '#MAKE#: *** .DEFAULT_GOAL contains more than one target. Stop.', 512); # Test #4: Savannah bug #12226. # run_make_test(' define rule foo: ; @echo $$@ endef define make-rule $(eval $(rule)) endef $(call make-rule) ', '', 'foo'); # TEST #5: .DEFAULT_GOAL containing just whitespace (Savannah bug #25697) run_make_test(' N = .DEFAULT_GOAL = $N $N # Just whitespace foo: ; @echo "boo" ', '', "#MAKE#: *** No targets. Stop.\n", 512); # This tells the test driver that the perl test script executed properly. 1; make-4.3/tests/scripts/variables/MAKEFLAGS0000644000175000017500000000227113603564437015251 00000000000000# -*-perl-*- $description = "Test proper behavior of MAKEFLAGS"; $details = "DETAILS"; # Normal flags aren't prefixed with "-" run_make_test(q! all: ; @echo $(MAKEFLAGS) !, '-e -r -R', 'erR'); # Long arguments mean everything is prefixed with "-" run_make_test(q! all: ; @echo $(MAKEFLAGS) !, '--no-print-directory -e -r -R --trace', "#MAKEFILE#:2: target 'all' does not exist echo erR --trace --no-print-directory erR --trace --no-print-directory"); # Recursive invocations of make should accumulate MAKEFLAGS values. # Savannah bug #2216 run_make_test(q! MSG = Fails all: @echo '$@: MAKEFLAGS=$(MAKEFLAGS)' @MSG=Works $(MAKE) -e -f #MAKEFILE# jump jump: @echo '$@ $(MSG): MAKEFLAGS=$(MAKEFLAGS)' @$(MAKE) -f #MAKEFILE# print print: @echo '$@ $(MSG): MAKEFLAGS=$(MAKEFLAGS)' .PHONY: all jump print !, '--no-print-directory', 'all: MAKEFLAGS= --no-print-directory 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: make-4.3/tests/scripts/variables/INCLUDE_DIRS0000644000175000017500000000150313603564437015660 00000000000000# -*-perl-*- $description = "Test the .INCLUDE_DIRS special variable."; $details = ""; use Cwd; $dir = cwd; $dir =~ s,.*/([^/]+)$,../$1,; # Test #1: The content of .INCLUDE_DIRS depends on the platform for which # make was built. What we know for sure is that it shouldn't be # empty. # run_make_test(' ifeq ($(.INCLUDE_DIRS),) $(warning .INCLUDE_DIRS is empty) endif .PHONY: all all:;@: ', '', ''); # Test #2: Make sure -I paths end up in .INCLUDE_DIRS. # run_make_test(' ifeq ($(dir),) $(warning dir is empty) endif ifeq ($(filter $(dir),$(.INCLUDE_DIRS)),) $(warning .INCLUDE_DIRS does not contain $(dir)) endif .PHONY: all all:;@: ', "-I$dir dir=$dir", ''); # This tells the test driver that the perl test script executed properly. 1; make-4.3/tests/scripts/variables/MAKEFILES0000644000175000017500000000163413603564437015261 00000000000000# -*-perl-*- $description = "Test the MAKEFILES variable."; $makefile2 = &get_tmpfile; $makefile3 = &get_tmpfile; open(MAKEFILE,"> $makefile2"); print MAKEFILE < $makefile3"); print MAKEFILE < $makefile"); print MAKEFILE "\ .DEFAULT all: \@echo \$(MAKECMDGOALS) "; close(MAKEFILE); # TEST #1 &run_make_with_options($makefile, "", &get_logfile, 0); $answer = "\n"; &compare_output($answer,&get_logfile(1)); # TEST #2 &run_make_with_options($makefile, "all", &get_logfile, 0); $answer = "all\n"; &compare_output($answer,&get_logfile(1)); # TEST #3 &run_make_with_options($makefile, "foo bar baz yaz", &get_logfile, 0); $answer = "foo bar baz yaz\nfoo bar baz yaz\nfoo bar baz yaz\nfoo bar baz yaz\n"; &compare_output($answer,&get_logfile(1)); # This tells the test driver that the perl test script executed properly. 1; make-4.3/tests/scripts/variables/negative0000644000175000017500000000207713603564437015565 00000000000000# -*-perl-*- $description = "Run some negative tests (things that should fail)."; # TEST #0 # Check that non-terminated variable references are detected (and # reported using the best filename/lineno info run_make_test(' foo = bar x = $(foo y = $x all: ; @echo $y ', '', '#MAKEFILE#:3: *** unterminated variable reference. Stop.', 512); # TEST #1 # Bogus variable value passed on the command line. run_make_test(undef, ['x=$(other'], '#MAKEFILE#:4: *** unterminated variable reference. Stop.', 512); # TEST #2 # Again, but this time while reading the makefile. run_make_test(' foo = bar x = $(foo y = $x z := $y all: ; @echo $y ', '', '#MAKEFILE#:3: *** unterminated variable reference. Stop.', 512); # TEST #3 # Bogus variable value passed on the command line. run_make_test(undef, ['x=$(other'], '#MAKEFILE#:4: *** unterminated variable reference. Stop.', 512); 1; make-4.3/tests/scripts/variables/MAKE_RESTARTS0000644000175000017500000000234513603564437016025 00000000000000# -*-perl-*- $description = "Test the MAKE_RESTARTS variable."; # Test basic capability run_make_test(' all: ; @: $(info MAKE_RESTARTS=$(MAKE_RESTARTS)) include foo.x foo.x: ; @touch $@ ', '', 'MAKE_RESTARTS= MAKE_RESTARTS=1'); rmfiles('foo.x'); # Test multiple restarts run_make_test(' all: ; @: $(info MAKE_RESTARTS=$(MAKE_RESTARTS)) include foo.x foo.x: ; @echo "include bar.x" > $@ bar.x: ; @touch $@ ', '', 'MAKE_RESTARTS= MAKE_RESTARTS=1 MAKE_RESTARTS=2'); rmfiles('foo.x', 'bar.x'); # Test multiple restarts and make sure the variable is cleaned up run_make_test(' recurse: @echo recurse MAKE_RESTARTS=$$MAKE_RESTARTS @$(MAKE) -f #MAKEFILE# all all: @echo all MAKE_RESTARTS=$$MAKE_RESTARTS $(info MAKE_RESTARTS=$(MAKE_RESTARTS)) include foo.x foo.x: ; @echo "include bar.x" > $@ bar.x: ; @touch $@ ', '', "MAKE_RESTARTS= MAKE_RESTARTS=1 MAKE_RESTARTS=2 recurse MAKE_RESTARTS= #MAKE#[1]: Entering directory '#PWD#' MAKE_RESTARTS= all MAKE_RESTARTS= #MAKE#[1]: Leaving directory '#PWD#'"); rmfiles('foo.x', 'bar.x'); 1; ### Local Variables: ### eval: (setq whitespace-action (delq 'auto-cleanup whitespace-action)) ### End: make-4.3/tests/scripts/variables/MAKE0000644000175000017500000000073113603564437014473 00000000000000# -*-perl-*- $description = "Test proper behavior of the MAKE variable"; $details = "DETAILS"; run_make_test(q! TMP := $(MAKE) MAKE := $(subst X=$(X),,$(MAKE)) all: @echo $(TMP) $(MAKE) -f #MAKEFILE# foo foo: @echo $(MAKE) !, '', "#MAKEPATH#\n#MAKEPATH# -f #MAKEFILE# foo\n" . "#MAKE#[1]: Entering directory '#PWD#'\n" . "#MAKEPATH#\n#MAKE#[1]: Leaving directory '#PWD#'\n"); rmfiles("foo"); 1; make-4.3/tests/scripts/variables/SHELL0000644000175000017500000000566713603564437014642 00000000000000# -*-perl-*- $description = "Test proper handling of SHELL."; # If we don't have a POSIX shell available, never mind $is_posix_sh or return -1; # On Windows, shell names might not match if ($port_type eq 'W32') { return -1; } $mshell = $sh_name; # According to POSIX, the value of SHELL in the environment has no impact on # the value in the makefile. # Note %extraENV takes precedence over the default value for the shell. $extraENV{SHELL} = '/dev/null'; run_make_test('all:;@echo "$(SHELL)"', '', $mshell); # According to POSIX, any value of SHELL set in the makefile should _NOT_ be # exported to the subshell! I wanted to set SHELL to be $^X (perl) in the # makefile, but make runs $(SHELL) -c 'commandline' and that doesn't work at # all when $(SHELL) is perl :-/. So, we just add an extra initial /./ which # works well on UNIX and seems to work OK on at least some non-UNIX systems. $extraENV{SHELL} = $mshell; my $altshell = "/./$mshell"; my $altshell2 = "/././$mshell"; if ($mshell =~ m,^([a-zA-Z]:)([\\/])(.*),) { $altshell = "$1$2.$2$3"; $altshell2 = "$1$2.$2.$2$3"; } run_make_test("SHELL := $altshell\n".' all:;@echo "$(SHELL) $$SHELL" ', '', "$altshell $mshell"); # As a GNU make extension, if make's SHELL variable is explicitly exported, # then we really _DO_ export it. $extraENV{SHELL} = $mshell; run_make_test("export SHELL := $altshell\n".' all:;@echo "$(SHELL) $$SHELL" ', '', "$altshell $altshell"); # Test out setting of SHELL, both exported and not, as a target-specific # variable. $extraENV{SHELL} = $mshell; run_make_test("all: SHELL := $altshell\n".' all:;@echo "$(SHELL) $$SHELL" ', '', "$altshell $mshell"); $extraENV{SHELL} = $mshell; run_make_test(" SHELL := $altshell2 one: two two: export SHELL := $altshell\n".' one two:;@echo "$@: $(SHELL) $$SHELL" ', '', "two: $altshell $altshell\none: $altshell2 $mshell\n"); # Test .SHELLFLAGS # We don't know the output here: on Solaris for example, every line printed # by the shell in -x mode has a trailing space (!!) my $script = 'true; true'; my $flags = '-xc'; my $out = `$sh_name $flags '$script' 2>&1`; run_make_test(qq! .SHELLFLAGS = $flags all: ; \@$script !, '', $out); # Do it again but add spaces to SHELLFLAGS # Some shells (*shakes fist at Solaris*) cannot handle multiple flags in # separate arguments. my $t = `$sh_name -e -c true 2>/dev/null`; my $multi_ok = $? == 0; if ($multi_ok) { $flags = '-x -c'; run_make_test(qq! .SHELLFLAGS = $flags all: ; \@$script !, '', $out); } # We can't just use "false" because on different systems it provides a # different exit code--once again Solaris: false exits with 255 not 1 $script = 'true; false; true'; $flags = '-xec'; $out = `$sh_name $flags '$script' 2>&1`; my $err = $? >> 8; run_make_test(qq! .SHELLFLAGS = $flags all: ; \@$script !, '', "$out#MAKE#: *** [#MAKEFILE#:3: all] Error $err\n", 512); 1; make-4.3/tests/scripts/variables/MAKELEVEL0000644000175000017500000000120113603564437015254 00000000000000# -*-perl-*- $description = "The following test creates a makefile to test makelevels in Make. It prints \$(MAKELEVEL) and then prints the environment variable MAKELEVEL"; open(MAKEFILE,"> $makefile"); # The Contents of the MAKEFILE ... print MAKEFILE < $makefile2"); # print MAKEFILE <<'EOF'; # X1 := $(sort $(.TARGETS)) # all: foo # @echo X1 = $(X1) # @echo X2 = $(X2) # @echo LAST = $(sort $(.TARGETS)) # X2 := $(sort $(.TARGETS)) # foo: # EOF # close(MAKEFILE); # # TEST #2 # # ------- # &run_make_with_options($makefile2, "", &get_logfile); # $answer = "X1 =\nX2 = all\nLAST = all foo\n"; # &compare_output($answer, &get_logfile(1)); # Test the .RECIPEPREFIX variable &run_make_test(' define foo : foo-one\ foo-two : foo-three : foo-four endef orig: ; : orig-one : orig-two \ orig-three \ orig-four \ orig-five \\\\ : orig-six $(foo) .RECIPEPREFIX = > test: ; : test-one >: test-two \ test-three \ >test-four \ > test-five \\\\ >: test-six >$(foo) .RECIPEPREFIX = reset: ; : reset-one : reset-two \ reset-three \ reset-four \ reset-five \\\\ : reset-six $(foo) ', 'orig test reset', ': orig-one : orig-two \ orig-three \ orig-four \ orig-five \\\\ : orig-six : foo-one foo-two : foo-three : foo-four : test-one : test-two \ test-three \ test-four \ test-five \\\\ : test-six : foo-one foo-two : foo-three : foo-four : reset-one : reset-two \ reset-three \ reset-four \ reset-five \\\\ : reset-six : foo-one foo-two : foo-three : foo-four'); # Test that the "did you mean TAB" message is printed properly run_make_test(q! $x. !, '', '#MAKEFILE#:2: *** missing separator. Stop.', 512); run_make_test(q! foo: bar !, '', '#MAKEFILE#:3: *** missing separator (did you mean TAB instead of 8 spaces?). Stop.', 512); run_make_test(q! .RECIPEPREFIX = : foo: bar !, '', '#MAKEFILE#:4: *** missing separator. Stop.', 512); 1; ### Local Variables: ### eval: (setq whitespace-action (delq 'auto-cleanup whitespace-action)) ### End: make-4.3/tests/scripts/variables/GNUMAKEFLAGS0000644000175000017500000000252613603564437015626 00000000000000# -*-perl-*- $description = "Test proper behavior of GNUMAKEFLAGS"; # Accept flags from GNUMAKEFLAGS as well as MAKEFLAGS # Results always go in MAKEFLAGS $extraENV{'GNUMAKEFLAGS'} = '-e -r -R'; run_make_test(q! all: ; @echo $(MAKEFLAGS) !, '', 'erR'); # Long arguments mean everything is prefixed with "-" $extraENV{'GNUMAKEFLAGS'} = '--no-print-directory -e -r -R --trace'; run_make_test(q! all: ; @echo $(MAKEFLAGS) !, '', "#MAKEFILE#:2: target 'all' does not exist echo erR --trace --no-print-directory erR --trace --no-print-directory"); # Verify that re-exec / recursion doesn't duplicate flags from GNUMAKEFLAGS unlink('x.mk'); $extraENV{GNUMAKEFLAGS} = '-Itst/bad'; run_make_test(q! recurse: ; @echo $@; echo MAKEFLAGS = $$MAKEFLAGS; echo GNUMAKEFLAGS = $$GNUMAKEFLAGS; #MAKEPATH# -f #MAKEFILE# all all: ; @echo $@; echo MAKEFLAGS = $$MAKEFLAGS; echo GNUMAKEFLAGS = $$GNUMAKEFLAGS -include x.mk x.mk: ; @echo $@; echo MAKEFLAGS = $$MAKEFLAGS; echo GNUMAKEFLAGS = $$GNUMAKEFLAGS; echo > $@ !, "", "x.mk\nMAKEFLAGS = -Itst/bad\nGNUMAKEFLAGS =\nrecurse\nMAKEFLAGS = -Itst/bad\nGNUMAKEFLAGS =\n#MAKE#[1]: Entering directory '#PWD#'\nall\nMAKEFLAGS = w -Itst/bad\nGNUMAKEFLAGS =\n#MAKE#[1]: Leaving directory '#PWD#'\n"); unlink('x.mk'); 1; make-4.3/tests/scripts/variables/automatic0000644000175000017500000000601113603564437015741 00000000000000# -*-perl-*- $description = "Test automatic variable setting."; $details = ""; use Cwd; $dir = cwd; $dir =~ s,.*/([^/]+)$,../$1,; open(MAKEFILE, "> $makefile"); print MAKEFILE "dir = $dir\n"; print MAKEFILE <<'EOF'; .SUFFIXES: .SUFFIXES: .x .y .z $(dir)/foo.x : baz.z $(dir)/bar.y baz.z @echo '$$@ = $@, $$(@D) = $(@D), $$(@F) = $(@F)' @echo '$$* = $*, $$(*D) = $(*D), $$(*F) = $(*F)' @echo '$$< = $<, $$( $makefile2"); print MAKEFILE "dir = $dir\n"; print MAKEFILE <<'EOF'; .SECONDEXPANSION: .SUFFIXES: .DEFAULT: ; @echo '$@' $(dir)/foo $(dir)/bar: $@.x $$@.x $$$@.x $$$$@.x $$(@D).x $$(@F).x $(dir)/x.z $(dir)/y.z: $(dir)/%.z : $@.% $$@.% $$$@.% $$$$@.% $$(@D).% $$(@F).% $(dir)/biz: $$(@).x $${@}.x $${@D}.x $${@F}.x EOF close(MAKEFILE); &run_make_with_options($makefile2, "$dir/foo $dir/bar", &get_logfile); $answer = ".x\n$dir/foo.x\nx\n\$@.x\n$dir.x\nfoo.x\n$dir/bar.x\nbar.x\n"; &compare_output($answer, &get_logfile(1)); &run_make_with_options($makefile2, "$dir/x.z $dir/y.z", &get_logfile); $answer = ".x\n$dir/x.z.x\nx\n\$@.x\n$dir.x\nx.z.x\n.y\n$dir/y.z.y\ny\n\$@.y\n$dir.y\ny.z.y\n"; &compare_output($answer, &get_logfile(1)); &run_make_with_options($makefile2, "$dir/biz", &get_logfile); $answer = "$dir/biz.x\n$dir.x\nbiz.x\n"; &compare_output($answer, &get_logfile(1)); # TEST #2 -- test for Savannah bug #12320. # run_make_test(' .SUFFIXES: .b .src mbr.b: mbr.src @echo $* mbr.src: ; @:', '', 'mbr'); # TEST #3 -- test for Savannah bug #8154 # Make sure that nonexistent prerequisites are listed in $?, since they are # considered reasons for the target to be rebuilt. # # See also Savannah bugs #16002 and #16051. touch('foo'); run_make_test(' foo: bar ; @echo "\$$? = $?" bar: ;', '', '$? = bar'); unlink('foo'); # TEST #4: ensure prereq ordering is correct when the commmand target has none # See Savannah bug #21198 run_make_test(' all : A B all : ; @echo $@ -- $^ -- $< all : C D all : E F A B C D E F G H : ; @: ', '', "all -- A B C D E F -- A\n"); 1; make-4.3/tests/scripts/variables/define0000644000175000017500000001042713603564437015213 00000000000000# -*-perl-*- $description = "Test define/endef variable assignments."; $details = ""; # TEST 0: old-style basic define/endef run_make_test(' define multi @echo hi echo there endef all: ; $(multi) ', '', "hi\necho there\nthere\n"); # TEST 1: Various new-style define/endef run_make_test(' FOO = foo define multi = echo hi @echo $(FOO) endef # this is the end define simple := @echo $(FOO) endef define posix ::= @echo $(FOO) endef append = @echo a define append += @echo b endef define cond ?= # this is a conditional @echo first endef define cond ?= @echo second endef FOO = there all: ; $(multi) $(simple) $(posix) $(append) $(cond) ', '', "echo hi\nhi\nthere\nfoo\nfoo\na\nb\nfirst\n"); # TEST 1a: Various new-style define/endef, with no spaces run_make_test(' FOO = foo define multi= echo hi @echo $(FOO) endef # this is the end define simple:= @echo $(FOO) endef define posix::= @echo $(FOO) endef append = @echo a define append+= @echo b endef define cond?= # this is a conditional @echo first endef define cond?= @echo second endef FOO = there all: ; $(multi) $(simple) $(posix) $(append) $(cond) ', '', "echo hi\nhi\nthere\nfoo\nfoo\na\nb\nfirst\n"); # TEST 2: define in true section of conditional (containing conditional) run_make_test(' FOO = foo NAME = def def = ifdef BOGUS define $(subst e,e,$(NAME)) = ifeq (1,1) FOO = bar endif endef endif $(eval $(def)) all: ; @echo $(FOO) ', 'BOGUS=1', "bar\n"); # TEST 3: define in false section of conditional (containing conditional) run_make_test(undef, '', "foo\n"); # TEST 4: nested define (supported?) run_make_test(' define outer define inner A = B endef endef $(eval $(outer)) outer: ; @echo $(inner) ', '', "A = B\n"); # TEST 5: NEGATIVE: Missing variable name run_make_test(' NAME = define $(NAME) = ouch endef all: ; @echo ouch ', '', "#MAKEFILE#:3: *** empty variable name. Stop.\n", 512); # TEST 6: NEGATIVE: extra text after define run_make_test(' NAME = define NAME = $(NAME) ouch endef all: ; @echo ok ', '', "#MAKEFILE#:3: extraneous text after 'define' directive\nok\n"); # TEST 7: NEGATIVE: extra text after endef run_make_test(' NAME = define NAME = ouch endef $(NAME) all: ; @echo ok ', '', "#MAKEFILE#:5: extraneous text after 'endef' directive\nok\n"); # TEST 8: NEGATIVE: missing endef run_make_test(' NAME = all: ; @echo ok define NAME = ouch endef$(NAME) ', '', "#MAKEFILE#:4: *** missing 'endef', unterminated 'define'. Stop.\n", 512); # ------------------------- # Make sure that prefix characters apply properly to define/endef values. # # There's a bit of oddness here if you try to use a variable to hold the # prefix character for a define. Even though something like this: # # define foo # echo bar # endef # # all: ; $(V)$(foo) # # (where V=@) can be seen by the user to be obviously different than this: # # define foo # $(V)echo bar # endef # # all: ; $(foo) # # and the user thinks it should behave the same as when the "@" is literal # instead of in a variable, that can't happen because by the time make # expands the variables for the command line and sees it begins with a "@" it # can't know anymore whether the prefix character came before the variable # reference or was included in the first line of the variable reference. # TEST #5 # ------- run_make_test(' define FOO $(V1)echo hello $(V2)echo world endef all: ; @$(FOO) ', '', 'hello world'); # TEST #6 # ------- run_make_test(undef, 'V1=@ V2=@', 'hello world'); # TEST #7 # ------- run_make_test(' define FOO $(V1)echo hello $(V2)echo world endef all: ; $(FOO) ', 'V1=@', 'hello echo world world'); # TEST #8 # ------- run_make_test(undef, 'V2=@', 'echo hello hello world'); # TEST #9 # ------- run_make_test(undef, 'V1=@ V2=@', 'hello world'); # TEST #10 # ------- # Test the basics; a "@" internally to the variable applies to only one line. # A "@" before the variable applies to the entire variable. run_make_test(' define FOO @echo hello echo world endef define BAR echo hello echo world endef all: foo bar foo: ; $(FOO) bar: ; @$(BAR) ', '', 'hello echo world world hello world '); 1; make-4.3/tests/scripts/options/0000755000175000017500000000000013611151241013615 500000000000000make-4.3/tests/scripts/options/dash-e0000644000175000017500000000066313603564437014646 00000000000000# -*-perl-*- $description = "The following test creates a makefile to ..."; $details = ""; $extraENV{GOOGLE} = 'boggle'; open(MAKEFILE,"> $makefile"); print MAKEFILE <<'EOF'; GOOGLE = bazzle all:; @echo "$(GOOGLE)" EOF close(MAKEFILE); &run_make_with_options($makefile, '-e' ,&get_logfile); $answer = "boggle\n"; &compare_output($answer,&get_logfile(1)); 1; make-4.3/tests/scripts/options/dash-k0000644000175000017500000000555413603564437014660 00000000000000# -*-perl-*- $description = "Test the make -k (don't stop on error) option.\n"; $details = "\ The makefile created in this test is a simulation of building a small product. However, the trick to this one is that one of the dependencies of the main target does not exist. Without the -k option, make would fail immediately and not build any part of the target. What we are looking for here, is that make builds the rest of the dependencies even though it knows that at the end it will fail to rebuild the main target."; open(MAKEFILE,"> $makefile"); # The Contents of the MAKEFILE ... print MAKEFILE < $makefile2"); print MAKEFILE <<'EOF'; .SUFFIXES: all: exe1 exe2; @echo making $@ exe1 exe2: lib; @echo cp $^ $@ lib: foo.o; @echo cp $^ $@ foo.o: ; exit 1 EOF close(MAKEFILE); &run_make_with_options($makefile2, "-k", &get_logfile, $error_code); $answer = "exit 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)); # TEST -- make sure we keep the error code if we can't create an included # makefile. if (defined $ERR_no_such_file) { run_make_test('all: ; @echo hi include ifile ifile: no-such-file; @false ', '-k', "#MAKEFILE#:2: ifile: $ERR_no_such_file #MAKE#: *** No rule to make target 'no-such-file', needed by 'ifile'. #MAKE#: Failed to remake makefile 'ifile'. hi\n", 512); } 1; make-4.3/tests/scripts/options/dash-f0000644000175000017500000000503113603564437014641 00000000000000$description = "The following test tests that if you specify greater \n" ."than one '-f makefilename' on the command line, \n" ."that make concatenates them. This test creates three \n" ."makefiles and specifies all of them with the -f option \n" ."on the command line. To make sure they were concatenated, \n" ."we then call make with the rules from the concatenated \n" ."makefiles one at a time. Finally, it calls all three \n" ."rules in one call to make and checks that the output\n" ."is in the correct order."; $makefile2 = &get_tmpfile; $makefile3 = &get_tmpfile; open(MAKEFILE,"> $makefile"); # The Contents of the MAKEFILE ... print MAKEFILE "all: \n"; print MAKEFILE "\t\@echo This is the output from the original makefile\n"; # END of Contents of MAKEFILE close(MAKEFILE); # Create a second makefile open(MAKEFILE,"> $makefile2"); print MAKEFILE "TWO: \n"; print MAKEFILE "\t\@echo This is the output from makefile 2\n"; close(MAKEFILE); # Create a third makefile open(MAKEFILE,"> $makefile3"); print MAKEFILE "THREE: \n"; print MAKEFILE "\t\@echo This is the output from makefile 3\n"; close(MAKEFILE); # Create the answer to what should be produced by this Makefile $answer = "This is the output from the original makefile\n"; # Run make to catch the default rule &run_make_with_options($makefile,"-f $makefile2 -f $makefile3",&get_logfile,0); &compare_output($answer,&get_logfile(1)); # Run Make again with the rule from the second makefile: TWO $answer = "This is the output from makefile 2\n"; &run_make_with_options($makefile,"-f $makefile2 -f $makefile3 TWO",&get_logfile,0); &compare_output($answer,&get_logfile(1)); # Run Make again with the rule from the third makefile: THREE $answer = "This is the output from makefile 3\n"; &run_make_with_options($makefile, "-f $makefile2 -f $makefile3 THREE", &get_logfile, 0); &compare_output($answer,&get_logfile(1)); # Run Make again with ALL three rules in the order 2 1 3 to make sure # that all rules are executed in the proper order $answer = "This is the output from makefile 2\n"; $answer .= "This is the output from the original makefile\n"; $answer .= "This is the output from makefile 3\n"; &run_make_with_options($makefile, "-f $makefile2 -f $makefile3 TWO all THREE", &get_logfile, 0); &compare_output($answer,&get_logfile(1)); make-4.3/tests/scripts/options/dash-B0000644000175000017500000000337513603564437014606 00000000000000# -*-perl-*- $description = "Test make -B (always remake) option.\n"; $details = "\ Construct a simple makefile that builds a target. Invoke make once, so it builds everything. Invoke it again and verify that nothing is built. Then invoke it with -B and verify that everything is built again."; &touch('bar.x'); run_make_test(' .SUFFIXES: .PHONY: all all: foo foo: bar.x @echo cp $< $@ @echo "" > $@ ', '', 'cp bar.x foo'); run_make_test(undef, '', "#MAKE#: Nothing to be done for 'all'."); run_make_test(undef, '-B', 'cp bar.x foo'); # Put the timestamp for foo into the future; it should still be remade. utouch(1000, 'foo'); run_make_test(undef, '', "#MAKE#: Nothing to be done for 'all'."); run_make_test(undef, '-B', 'cp bar.x foo'); # Clean up rmfiles('bar.x', 'foo'); # Test -B with the re-exec feature: we don't want to re-exec forever # Savannah bug # 7566 run_make_test(' all: ; @: $(info MAKE_RESTARTS=$(MAKE_RESTARTS)) include foo.x foo.x: ; @touch $@ ', '-B', 'MAKE_RESTARTS= MAKE_RESTARTS=1'); rmfiles('foo.x'); # Test -B with the re-exec feature: we DO want -B in the "normal" part of the # makefile. &touch('blah.x'); run_make_test(' all: blah.x ; @echo $@ $(info MAKE_RESTARTS=$(MAKE_RESTARTS)) include foo.x foo.x: ; @touch $@ blah.x: ; @echo $@ ', '-B', 'MAKE_RESTARTS= MAKE_RESTARTS=1 blah.x all'); rmfiles('foo.x', 'blah.x'); # Test that $? is set properly with -B; all prerequisites will be newer! utouch(-10, 'x.b'); touch('x.a'); run_make_test(q! x.a: x.b ; @echo $? !, '-B', "x.b\n"); unlink(qw(x.a x.b)); 1; ### Local Variables: ### eval: (setq whitespace-action (delq 'auto-cleanup whitespace-action)) ### End: make-4.3/tests/scripts/options/dash-W0000644000175000017500000000364013603564437014626 00000000000000# -*-perl-*- $description = "Test make -W (what if) option.\n"; # Basic build run_make_test(' a.x: b.x a.x b.x: ; echo >> $@ ', '', "echo >> b.x\necho >> a.x"); # Run it again: nothing should happen run_make_test(undef, '', "#MAKE#: 'a.x' is up to date."); # Now run it with -W b.x: should rebuild a.x run_make_test(undef, '-W b.x', 'echo >> a.x'); # Put the timestamp for a.x into the future; it should still be remade. utouch(1000, 'a.x'); run_make_test(undef, '', "#MAKE#: 'a.x' is up to date."); run_make_test(undef, '-W b.x', 'echo >> a.x'); # Clean up rmfiles('a.x', 'b.x'); # Test -W with the re-exec feature: we don't want to re-exec forever # Savannah bug # 7566 # First set it up with a normal build run_make_test(' all: baz.x ; @: include foo.x foo.x: bar.x @echo "\$$(info restarts=\$$(MAKE_RESTARTS))" > $@ @echo "touch $@" bar.x: ; echo >> $@ baz.x: bar.x ; @echo "touch $@" ', '', 'echo >> bar.x touch foo.x restarts=1 touch baz.x'); # Now run with -W bar.x # Tweak foo.x's timestamp so the update will change it. &utouch(1000, 'foo.x'); run_make_test(undef, '-W bar.x', "restarts=\ntouch foo.x\nrestarts=1\ntouch baz.x"); rmfiles('foo.x', 'bar.x'); # Test -W on vpath-found files: it should take effect. # Savannah bug # 15341 mkdir('x-dir', 0777); utouch(-20, 'x-dir/x'); touch('y'); run_make_test(' y: x ; @echo cp $< $@ ', '-W x-dir/x VPATH=x-dir', 'cp x-dir/x y'); # Make sure ./ stripping doesn't interfere with the match. run_make_test(' y: x ; @echo cp $< $@ ', '-W ./x-dir/x VPATH=x-dir', 'cp x-dir/x y'); run_make_test(undef, '-W x-dir/x VPATH=./x-dir', 'cp ./x-dir/x y'); unlink(qw(y x-dir/x)); rmdir('x-dir'); 1; ### Local Variables: ### eval: (setq whitespace-action (delq 'auto-cleanup whitespace-action)) ### End: make-4.3/tests/scripts/options/dash-C0000644000175000017500000000315613603564437014604 00000000000000# -*-perl-*- $description = "Test the -C option to GNU make."; $details = "\ This test is similar to the clean test except that this test creates the file to delete in the work directory instead of the current directory. Make is called from another directory using the -C workdir option so that it can both find the makefile and the file to delete in the work directory."; $example = $workdir . $pathsep . "EXAMPLE"; open(MAKEFILE,"> $makefile"); print MAKEFILE qq! all: ; \@echo This makefile did not clean the dir ... good clean: ; $CMD_rmfile EXAMPLE\$(ext) !; close(MAKEFILE); # TEST #1 # ------- touch($example); run_make_with_options("${testname}.mk", "-C $workdir clean", &get_logfile); use Cwd; chdir $workdir; $wpath = cwd(); chdir $cwdpath; if (-f $example) { $test_passed = 0; } # Create the answer to what should be produced by this Makefile $answer = "$make_name: Entering directory '$wpath'\n" . "$CMD_rmfile EXAMPLE\n" . "$make_name: Leaving directory '$wpath'\n"; compare_output($answer,&get_logfile(1)); # TEST #2 # ------- # Do it again with trailing "/"; this should work the same $example .= "slash"; touch($example); run_make_with_options("${testname}.mk", "-C $workdir/ clean ext=slash", &get_logfile); if (-f $example) { $test_passed = 0; } # Create the answer to what should be produced by this Makefile $answer = "$make_name: Entering directory '$wpath'\n" . "$CMD_rmfile EXAMPLEslash\n" . "$make_name: Leaving directory '$wpath'\n"; &compare_output($answer,&get_logfile(1)); unlink($example); 1; make-4.3/tests/scripts/options/print-directory0000644000175000017500000000132013603564437016632 00000000000000# -*-perl-*- $description = "Test the -w option to GNU make."; # Simple test without -w run_make_test(q! all: ; @echo hi !, "", "hi\n"); # Simple test with -w run_make_test(undef, "-w", "#MAKE#: Entering directory '#PWD#'\nhi\n#MAKE#: Leaving directory '#PWD#'\n"); # Test makefile rebuild to ensure no enter/leave run_make_test(q! include foo all: ;@: foo: ; touch foo !, "", "touch foo\n"); unlink('foo'); # Test makefile rebuild with -w run_make_test(q! include foo all: ;@: foo: ; touch foo !, "-w", "#MAKE#: Entering directory '#PWD#'\ntouch foo\n#MAKE#: Leaving directory '#PWD#'\n"); unlink('foo'); 1; make-4.3/tests/scripts/options/warn-undefined-variables0000644000175000017500000000125513603564437020357 00000000000000# -*-perl-*- $description = "Test the --warn-undefined-variables option."; $details = "Verify that warnings are printed for referencing undefined variables."; # Without --warn-undefined-variables, nothing should happen run_make_test(' EMPTY = EREF = $(EMPTY) UREF = $(UNDEFINED) SEREF := $(EREF) SUREF := $(UREF) all: ; @echo ref $(EREF) $(UREF)', '', 'ref'); # With --warn-undefined-variables, it should warn me run_make_test(undef, '--warn-undefined-variables', "#MAKEFILE#:7: warning: undefined variable 'UNDEFINED' #MAKEFILE#:9: warning: undefined variable 'UNDEFINED' ref"); 1; make-4.3/tests/scripts/options/dash-l0000644000175000017500000000300213603564437014643 00000000000000# -*-perl-*- # Date: Tue, 11 Aug 1992 09:34:26 -0400 # From: pds@lemming.webo.dg.com (Paul D. Smith) $description = "Test load balancing (-l) option."; $details = "\ This test creates a makefile where all depends on three rules which contain the same body. Each rule checks for the existence of a temporary file; if it exists an error is generated. If it doesn't exist then it is created, the rule sleeps, then deletes the temp file again. Thus if any of the rules are run in parallel the test will fail. When make is called in this test, it is given the -l option with a value of 0.0001. This ensures that the load will be above this number and make will therefore decide that it cannot run more than one job even though -j 4 was also specified on the command line."; # On Windows a very different algorithm is used. $port_type eq 'W32' and return -1; open(MAKEFILE,"> $makefile"); printf MAKEFILE q, define test if [ ! -f test-file ]; then \ echo >> test-file; sleep 2; %s test-file; \ else \ echo $@ FAILED; \ fi endef all : ONE TWO THREE ONE : ; @$(test) TWO : ; @$(test) THREE : ; @$(test) ,, $CMD_rmfile; close(MAKEFILE); $mkoptions = "-l 0.0001"; $mkoptions .= " -j 4" if ($parallel_jobs); # We have to wait longer than the default (5s). &run_make_with_options($makefile, $mkoptions, &get_logfile, 0, 8); $slurp = &read_file_into_string (&get_logfile(1)); if ($slurp !~ /cannot enforce load limit/) { &compare_output("", &get_logfile(1)); } 1; make-4.3/tests/scripts/options/dash-t0000644000175000017500000000306613603564437014665 00000000000000# -*-perl-*- $description = "Test the -t option.\n"; $details = "Look out for regressions of prior bugs related to -t.\n"; # That means, nobody has even tried to make the tests below comprehensive # TEST 0 # bug reported by Henning Makholm on 2001-11-03: # make 3.79.1 touches only interm-[ab] but reports final-[a] as # 'up to date' without touching them. # The 'obvious' fix didn't work for double-colon rules, so pay special # attention to them. open(MAKEFILE, "> $makefile"); print MAKEFILE <<'EOMAKE'; final-a: interm-a ; echo >> $@ final-b: interm-b ; echo >> $@ interm-a:: orig1-a ; echo >> $@ interm-a:: orig2-a ; echo >> $@ interm-b:: orig1-b ; echo >> $@ interm-b:: orig2-b ; echo >> $@ EOMAKE close(MAKEFILE); &utouch(-30, 'orig1-a','orig2-b'); &utouch(-20, 'interm-a','interm-b'); &utouch(-10, 'final-a','final-b'); &touch('orig2-a','orig1-b'); &run_make_with_options($makefile, "-t final-a final-b", &get_logfile); $answer = "touch interm-a\ntouch final-a\ntouch interm-b\ntouch final-b\n"; &compare_output($answer, &get_logfile(1)); unlink('orig1-a', 'orig2-a', 'interm-a', 'final-a'); unlink('orig1-b', 'orig2-b', 'interm-b', 'final-b'); # TEST 1 # -t should not touch files with no commands. $makefile2 = &get_tmpfile; open(MAKEFILE, "> $makefile2"); print MAKEFILE <<'EOMAKE'; PHOOEY: xxx xxx: ; @: EOMAKE close(MAKEFILE); &run_make_with_options($makefile2, "-t", &get_logfile); $answer = "touch xxx\n"; &compare_output($answer, &get_logfile(1)); unlink('xxx'); 1; make-4.3/tests/scripts/options/dash-I0000644000175000017500000000313613603564437014610 00000000000000# -*-perl-*- $description ="The following test creates a makefile to test the -I option."; $details = "\ This test tests the -I option by including a filename in another directory and giving make that directory name under -I in the command line. Without this option, the make would fail to find the included file. It also checks to make sure that the -I option gets passed to recursive makes."; $makefile2 = &get_tmpfile; open(MAKEFILE,"> $makefile"); # The Contents of the MAKEFILE ... $mf2 = substr ($makefile2, index ($makefile2, $pathsep) + 1); print MAKEFILE < $makefile2"); print MAKEFILE </dev/null, then just check the error code. if ($port_type ne 'W32') { run_make_test(undef, "-j1foo 2>/dev/null", '', 512); } 1; make-4.3/tests/scripts/options/eval0000644000175000017500000000232613603564437014432 00000000000000# -*-perl-*- $description = "Test the --eval option."; $details = "Verify that --eval options take effect, and are passed to sub-makes."; # Verify that --eval is evaluated first run_make_test(q! $(info infile) BAR = bar all: ; @echo all recurse: ; @$(MAKE) -f #MAKEFILE# && echo recurse!, ['--eval=$(info eval)', 'FOO=$(BAR)'], "eval\ninfile\nall"); # Make sure that --eval is handled correctly during recursion run_make_test(undef, ['--no-print-directory', '--eval=$(info eval)', 'recurse'], "eval\ninfile\neval\ninfile\nall\nrecurse"); # Make sure that --eval is not passed in MAKEFLAGS run_make_test(q! all: ; @echo "MAKEFLAGS=$$MAKEFLAGS" !, ['--eval=$(info eval)'], "eval\n".'MAKEFLAGS= --eval=$$(info\ eval)'); # Make sure that --eval is handled correctly during restarting run_make_test(q! all: ; @echo $@ -include gen.mk gen.mk: ; @echo > $@ !, ['--eval=$(info eval)'], "eval\neval\nall"); unlink('gen.mk'); # Check -E run_make_test(q! BAR = bar all: ; @echo all recurse: ; @$(MAKE) -f #MAKEFILE# && echo recurse!, ['-E', '$(info eval)', 'FOO=$(BAR)'], "eval\nall"); 1; make-4.3/tests/scripts/options/dash-q0000644000175000017500000000301113603564437014650 00000000000000# -*-perl-*- $description = "Test the -q option.\n"; $details = "Try various uses of -q and ensure they all give the correct results.\n"; # TEST 0 run_make_test(qq! one: two: ; three: ; : four: ; \$(.XY) five: ; \\ \$(.XY) six: ; \\ \$(.XY) \t\$(.XY) seven: ; \\ \$(.XY) \t: foo \t\$(.XY) !, '-q one', ''); # TEST 1 run_make_test(undef, '-q two', ''); # TEST 2 run_make_test(undef, '-q three', '', 256); # TEST 3 run_make_test(undef, '-q four', ''); # TEST 4 run_make_test(undef, '-q five', ''); # TEST 5 run_make_test(undef, '-q six', ''); # TEST 6 run_make_test(undef, '-q seven', '', 256); # TEST 7 : Savannah bug # 7144 run_make_test(' one:: ; @echo one one:: ; @echo two ', '-q', '', 256); # TEST 7 : Savannah bug # 42249 # Make sure we exit with 1 even for prerequisite updates run_make_test(' build-stamp: ; echo $@ build-arch: build-stamp build-x: build-arch build-y: build-x ', '-q build-y', '', 256); # TEST 8 # Make sure we exit with 2 on error even with -q run_make_test(' build-stamp: ; echo $@ build-arch: build-stamp-2 build-x: build-arch 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; make-4.3/tests/scripts/options/dash-s0000644000175000017500000000162613603564437014664 00000000000000# -*-perl-*- $description = "Test the -s (silent) and --no-silent options.\n"; run_make_test(q! all: one two one: ; @echo MAKEFLAGS=$$MAKEFLAGS two: ; echo two !, '', "MAKEFLAGS=\necho two\ntwo"); run_make_test(undef, '-s', "MAKEFLAGS=s\ntwo"); run_make_test(undef, '--silent', "MAKEFLAGS=s\ntwo"); run_make_test(undef, '--quiet', "MAKEFLAGS=s\ntwo"); run_make_test(undef, '--no-silent', "MAKEFLAGS=\necho two\ntwo"); run_make_test(undef, '-s --no-silent', "MAKEFLAGS=\necho two\ntwo"); run_make_test(undef, '--silent --no-silent', "MAKEFLAGS=\necho two\ntwo"); run_make_test(undef, '--quiet --no-silent', "MAKEFLAGS=\necho two\ntwo"); run_make_test(undef, '--no-silent -s', "MAKEFLAGS=s\ntwo"); run_make_test(undef, '--no-silent --silent', "MAKEFLAGS=s\ntwo"); run_make_test(undef, '--no-silent --quiet', "MAKEFLAGS=s\ntwo"); 1; make-4.3/tests/scripts/options/symlinks0000644000175000017500000000420713603564437015354 00000000000000# -*-perl-*- $description = "Test the -L option."; $details = "Verify that symlink handling with and without -L works properly."; # Only run these tests if the system sypports symlinks # Apparently the Windows port of Perl reports that it does support symlinks # (in that the symlink() function doesn't fail) but it really doesn't, so # check for it explicitly. if ($port_type eq 'W32' || !( eval { symlink("",""); 1 })) { # This test is N/A return -1; } use File::Spec; # Set up a symlink sym -> dep # We'll make both dep and targ older than sym &utouch(-10, 'dep'); &utouch(-5, 'targ'); $dirnm = (File::Spec->splitdir($cwddir))[-1]; symlink(File::Spec->catfile(File::Spec->updir(), $dirnm, 'dep'), 'sym'); # Without -L, nothing should happen # With -L, it should update targ run_make_test('targ: sym ; @echo make $@ from $<', '', "#MAKE#: 'targ' is up to date."); run_make_test(undef, '-L', "make targ from sym"); # Now update dep; in all cases targ should be out of date. &touch('dep'); run_make_test(undef, '', "make targ from sym"); run_make_test(undef, '-L', "make targ from sym"); # Now update targ; in all cases targ should be up to date. &touch('targ'); run_make_test(undef, '', "#MAKE#: 'targ' is up to date."); run_make_test(undef, '-L', "#MAKE#: 'targ' is up to date."); # Add in a new link between sym and dep. Be sure it's newer than targ. sleep(1); rename('dep', 'dep1'); symlink('dep1', 'dep'); # Without -L, nothing should happen # With -L, it should update targ run_make_test(undef, '', "#MAKE#: 'targ' is up to date."); run_make_test(undef, '-L', "make targ from sym"); rmfiles('targ', 'dep', 'sym', 'dep1'); # Check handling when symlinks point to non-existent files. Without -L we # should get an error: with -L we should use the timestamp of the symlink. symlink("../$dirnm/dep", 'sym'); run_make_test('targ: sym ; @echo make $@ from $<', '', "#MAKE#: *** No rule to make target 'sym', needed by 'targ'. Stop.", 512); run_make_test('targ: sym ; @echo make $@ from $<', '-L', 'make targ from sym'); rmfiles('targ', 'sym'); 1; make-4.3/tests/scripts/options/dash-n0000644000175000017500000000443613603564437014661 00000000000000# -*-perl-*- $description = "Test the -n option.\n"; $details = "Try various uses of -n and ensure they all give the correct results.\n"; touch('orig'); run_make_test(q! final: intermediate ; echo >> $@ intermediate: orig ; echo >> $@ !, '', "echo >> intermediate\necho >> final\n"); # TEST 1 run_make_test(undef, '-Worig -n', "echo >> intermediate\necho >> final\n"); rmfiles(qw(orig intermediate final)); # We consider the actual updated timestamp of targets with all # recursive commands, even with -n. Switching this to the new model # is non-trivial because we use a trick below to change the log content # before we compare it ... $makefile2 = &get_tmpfile; open(MAKEFILE, "> $makefile2"); print MAKEFILE <<'EOF'; .SUFFIXES: BAR = # nothing FOO = +$(BAR) a: b; echo > $@ b: c; $(FOO) EOF close(MAKEFILE); &utouch(-20, 'b'); &utouch(-10, 'a'); &touch('c'); # TEST 2 &run_make_with_options($makefile2, "", &get_logfile); $answer = "$make_name: 'a' is up to date.\n"; &compare_output($answer, &get_logfile(1)); # TEST 3 &run_make_with_options($makefile2, "-n", &get_logfile); $answer = "$make_name: 'a' is up to date.\n"; &compare_output($answer, &get_logfile(1)); # TEST 4 unlink(qw(a b)); &run_make_with_options($makefile2, "-t -n", &get_logfile); open(DASH_N_LOG, ">>" . &get_logfile(1)); print DASH_N_LOG "a exists but should not!\n" if -e 'a'; print DASH_N_LOG "b exists but should not!\n" if -e 'b'; close(DASH_N_LOG); &compare_output("touch b\ntouch a\n", &get_logfile(1)); # CLEANUP unlink(qw(a b c)); # Ensure -n continues to be included with recursive/re-execed make # See Savannah bug #38051 $topmake = &get_tmpfile; $submake = &get_tmpfile; open(MAKEFILE, "> $topmake"); print MAKEFILE <<"EOF"; foo: ; \@\$(MAKE) -f "$submake" bar EOF close(MAKEFILE); # The bar target should print what would happen, but not actually run open(MAKEFILE, "> $submake"); print MAKEFILE <<'EOF'; inc: ; touch $@ -include inc bar: ; @echo $(strip $(MAKEFLAGS)) EOF close(MAKEFILE); &run_make_with_options($topmake, '-n --no-print-directory', &get_logfile); $answer = subst_make_string("#MAKEPATH# -f \"$submake\" bar\ntouch inc\necho n --no-print-directory\n"); &compare_output($answer, &get_logfile(1)); unlink('inc'); 1; make-4.3/tests/scripts/vms/0000755000175000017500000000000013611151241012727 500000000000000make-4.3/tests/scripts/vms/library0000644000175000017500000000341113603564437014255 00000000000000# -*-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"; $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" . "\tpipe open/write xxx file1.mar ; " . "write xxx \".macro a b\" ; write xxx \".endm\" ; close xxx\n"; $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"; $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; make-4.3/tests/scripts/features/0000755000175000017500000000000013611151241013740 500000000000000make-4.3/tests/scripts/features/se_implicit0000644000175000017500000001002713603564437016124 00000000000000# -*-perl-*- $description = "Test second expansion in implicit rules."; $details = ""; use Cwd; $dir = cwd; $dir =~ s,.*/([^/]+)$,../$1,; # Test #1: automatic variables. # run_make_test(q! .SECONDEXPANSION: .DEFAULT: ; @echo '$@' foo.a: bar baz foo.a: biz | buz foo.%: 1.$$@ \ 2.$$< \ $$(addprefix 3.,$$^) \ $$(addprefix 4.,$$+) \ 5.$$| \ 6.$$* ; @: 1.foo.a \ 2.bar \ 3.bar \ 3.baz \ 3.biz \ 4.bar \ 4.baz \ 4.biz \ 5.buz \ 6.a: ; @echo '$@' !, '', '1.foo.a 2.bar 3.bar 3.baz 3.biz 4.bar 4.baz 4.biz 5.buz 6.a bar baz biz buz '); # Test #2: target/pattern -specific variables. # run_make_test(q! .SECONDEXPANSION: foo.x: foo.%: $$(%_a) $$(%_b) bar ; @: foo.x: x_a := bar %.x: x_b := baz bar baz: ; @echo '$@' !, '', "bar\nbaz\n"); # Test #3: order of prerequisites. # run_make_test(q! .SECONDEXPANSION: .DEFAULT: ; @echo '$@' all: foo bar baz # Subtest #1 # %oo: %oo.1; @: foo: foo.2 foo: foo.3 foo.1: ; @echo '$@' # Subtest #2 # bar: bar.2 %ar: %ar.1; @: bar: bar.3 bar.1: ; @echo '$@' # Subtest #3 # baz: baz.1 baz: baz.2 %az: ; @: !, '', 'foo.1 foo.2 foo.3 bar.1 bar.2 bar.3 baz.1 baz.2 '); # Test #4: stem splitting logic. # run_make_test(q! .SECONDEXPANSION: $(dir)/tmp/bar.o: $(dir)/tmp/foo/bar.c: ; @echo '$@' $(dir)/tmp/bar/bar.c: ; @echo '$@' foo.h: ; @echo '$@' %.o: $$(addsuffix /%.c,foo bar) foo.h ; @echo '$@: {$<} $^' !, "dir=$dir", "$dir/tmp/foo/bar.c $dir/tmp/bar/bar.c foo.h $dir/tmp/bar.o: {$dir/tmp/foo/bar.c} $dir/tmp/foo/bar.c $dir/tmp/bar/bar.c foo.h "); # Test #5: stem splitting logic and order-only prerequisites. # run_make_test(q! .SECONDEXPANSION: $(dir)/tmp/foo.o: $(dir)/tmp/foo.c $(dir)/tmp/foo.c: ; @echo '$@' bar.h: ; @echo '$@' %.o: %.c|bar.h ; @echo '$@: {$<} {$|} $^' !, "dir=$dir", "$dir/tmp/foo.c bar.h $dir/tmp/foo.o: {$dir/tmp/foo.c} {bar.h} $dir/tmp/foo.c "); # Test #6: lack of implicit prerequisites. # run_make_test(q! .SECONDEXPANSION: foo.o: foo.c foo.c: ; @echo '$@' %.o: ; @echo '$@: {$<} $^' !, '', "foo.c\nfoo.o: {foo.c} foo.c\n"); # Test #7: Test stem from the middle of the name. # run_make_test(q! .SECONDEXPANSION: foobarbaz: foo%baz: % $$*.1 ; @echo '$*' bar bar.1: ; @echo '$@' !, '', "bar\nbar.1\nbar\n"); # Test #8: Make sure stem triple-expansion does not happen. # run_make_test(q! .SECONDEXPANSION: foo$$bar: f%r: % $$*.1 ; @echo '$*' oo$$ba oo$$ba.1: ; @echo '$@' !, '', 'oo$ba oo$ba.1 oo$ba '); # Test #9: Check the value of $^ run_make_test(q! .SECONDEXPANSION: %.so: | $$(extra) ; @echo $^ foo.so: extra := foo.o foo.so: foo.o: !, '', "\n"); # Test #10: Test second expansion with second expansion prerequisites # Ensures pattern_search() recurses with SE prereqs. touch('a'); run_make_test(q! .SECONDEXPANSION: sim_base_rgg := just_a_name sim_base_src := a sim_base_f := a a a sim_%.f: $${sim_$$*_f} ; echo $@ sim_%.src: $${sim_$$*_src} ; echo $@ sim_%: \ $$(if $$(sim_$$*_src),sim_%.src) \ $$(if $$(sim_$$*_f),sim_%.f) \ $$(if $$(sim_$$*_rgg),$$(sim_$$*_rgg).s) ; echo $@ !, '-s sim_base', "#MAKE#: *** No rule to make target 'sim_base'. Stop.", 512); unlink('a'); # Ensure that order-only tokens embedded in second expansions are parsed run_make_test(q! .SECONDEXPANSION: PREREQS=p1|p2 P2=p2 all : foo bar f%o: $$(PREREQS) ; @echo '$@' from '$^' and '$|' b%r: p1|$$(P2) ; @echo '$@' from '$^' and '$|' p% : ; : $@ !, "", ": p1\n: p2\nfoo from p1 and p2\nbar from p1 and p2\n"); # SV 28456 : Don't reset $$< for default recipes run_make_test(q! .SECONDEXPANSION: .PHONY: foo bar foo: bar foo: $$(info $$<) %oo: ; !, '', "bar\n#MAKE#: Nothing to be done for 'foo'.\n"); # SV 54161: Expand $$* properly when it contains a path run_make_test(q! .SECONDEXPANSION: %x: $$(info $$*); @echo '$*' !, 'q/ux', "q/u\nq/u\n"); # This tells the test driver that the perl test script executed properly. 1; make-4.3/tests/scripts/features/se_explicit0000644000175000017500000000720013603564437016132 00000000000000# -*-perl-*- $description = "Test second expansion in ordinary rules."; $details = ""; # TEST #0: Test handing of '$' in prerequisites with and without second # expansion. # If we don't support archives then the prerequisite is different my $prereq = exists $FEATURES{'archives'} ? '$' : '$(PRE)'; run_make_test(q! ifdef SE .SECONDEXPANSION: endif foo$$bar: bar$$baz bar$$biz ; @echo '$@ : $^' PRE = one two bar$$baz: $$(PRE) baraz: $$(PRE) PRE = three four .DEFAULT: ; @echo '$@' !, '', "$prereq\nbar\$biz\nfoo\$bar : bar\$baz bar\$biz"); run_make_test(undef, 'SE=1', "three\nfour\nbariz\nfoo\$bar : baraz bariz"); # TEST #1: automatic variables. # run_make_test(q! .SECONDEXPANSION: .DEFAULT: ; @echo '$@' foo: bar baz foo: biz | buz foo: $$@.1 \ $$<.2 \ $$(addsuffix .3,$$^) \ $$(addsuffix .4,$$+) \ $$|.5 \ $$*.6 !, '', 'bar baz biz buz foo.1 bar.2 bar.3 baz.3 biz.3 bar.4 baz.4 biz.4 buz.5 .6 '); # Test #2: target/pattern -specific variables. # run_make_test(q! .SECONDEXPANSION: .DEFAULT: ; @echo '$@' foo.x: $$a $$b foo.x: a := bar %.x: b := baz !, '', 'bar baz '); # Test #3: order of prerequisites. # run_make_test(q! .SECONDEXPANSION: .DEFAULT: ; @echo '$@' all: foo bar baz # Subtest #1 foo: foo.1; @: foo: foo.2 foo: foo.3 # Subtest #2 bar: bar.2 bar: bar.1; @: bar: bar.3 # Subtest #3 baz: baz.1 baz: baz.2 baz: ; @: !, '', 'foo.1 foo.2 foo.3 bar.1 bar.2 bar.3 baz.1 baz.2 '); # TEST #4: eval in a context where there is no reading_file run_make_test(q! .SECONDEXPANSION: all : $$(eval $$(info test)) !, '', "test\n#MAKE#: Nothing to be done for 'all'.\n"); # TEST #5: (NEGATIVE) catch eval in a prereq list trying to create new # target/prereq relationships. run_make_test(q! .SECONDEXPANSION: proj1.exe : proj1.o $$(eval $$(test)) define test proj1.o : proj1.c proj1.c: proj1.h endef !, '', "#MAKE#: *** prerequisites cannot be defined in recipes. Stop.\n", 512); # Automatic $$+ variable expansion issue. Savannah bug #25780 run_make_test(q! all : foo foo .SECONDEXPANSION: all : $$+ ; @echo '$+' foo : ; !, '', "foo foo foo foo\n"); # Automatic $$+ variable expansion issue. Savannah bug #25780 run_make_test(q! all : bar bar bar : ; q%x : ; .SECONDEXPANSION: a%l: q1x $$+ q2x ; @echo '$+' !, '', "q1x bar bar q2x bar bar\n"); # Allow patsubst shorthand in second expansion context. # Requires the colon to be quoted. Savannah bug #16545 run_make_test(q! .PHONY: foo.bar .SECONDEXPANSION: foo: $$(@\\:%=%.bar); @echo '$^' !, '', "foo.bar\n"); # SV 54549 : Ensure we don't free used variable_sets run_make_test(q! foo: -lcat # Removing second expansion prevents segfault .SECONDEXPANSION: foo: $$@.o ; # Having an empty command here prevents segfault unless, # the environment is empty. `env -i make foo` # MFLAGS=-w or MAKEFLAGS=-w `env MFLAGS=-w make foo` # libcat.a target calls an extra command, `@true \n @touch $@` # odd. %.o: ; @true # Having an empty command prevents segfault. -l%: lib%.a ; @true # Not creating libcat.a here prevents segfault, libcat.a: ; @touch $@ !, '', q!#MAKEFILE#:16: Recipe was specified for file '-lcat' at #MAKEFILE#:19, #MAKEFILE#:16: but '-lcat' is now considered the same file as 'libcat.a'. #MAKEFILE#:16: Recipe for 'libcat.a' will be ignored in favor of the one for '-lcat'.!); unlink('libcat.a'); # SV 28456 : Don't reset $$< for default recipes run_make_test(q! .SECONDEXPANSION: .PHONY: biz baz biz: baz ; biz: $$(info $$<) !, '', "baz\n#MAKE#: Nothing to be done for 'biz'.\n"); 1; make-4.3/tests/scripts/features/output-sync0000644000175000017500000002151013603564437016134 00000000000000# -*-perl-*- $description = "Test --output-sync (-O) option."; $details = "Test the synchronization of output from parallel jobs."; # If we don't have output sync support, never mind. exists $FEATURES{'output-sync'} or return -1; # Output sync can't be tested without parallelization $parallel_jobs or return -1; # The following subdirectories with Makefiles are used in several # of the following tests. The model is: # foo/Makefile - has a "foo" target that waits for the bar target # bar/Makefile - has a "bar" target that runs immediately # - has a "baz" target that waits for the foo target # # So, you start the two sub-makes in parallel and first the "bar" target is # built, followed by "foo", followed by "baz". The trick is that first each # target prints a "start" statement, then waits (if appropriate), then prints # an end statement. Thus we can tell if the -O flag is working, since # otherwise these statements would be mixed together. @syncfiles = (); sub output_sync_clean { rmfiles('foo/Makefile', 'bar/Makefile', @syncfiles); rmdir('foo'); rmdir('bar'); } # We synchronize the different jobs by having them wait for a sentinel file to # be created, instead of relying on a certain amount of time passing. # Unfortunately in this test we have to sleep after we see the sync file, # since we also want to make the obtaining of the write synchronization lock # reliable. If things are too fast, then sometimes a different job will steal # the output sync lock and the output is mis-ordered from what we expect. sub output_sync_wait { return subst_make_string("#HELPER# -q wait ../mksync.$_[0] sleep 1"); } sub output_sync_set { return subst_make_string("#HELPER# -q file ../mksync.$_[0]"); } @syncfiles = qw(mksync.foo mksync.foo_start mksync.bar mksync.bar_start); $tmout = 30; output_sync_clean(); mkdir('foo', 0777); mkdir('bar', 0777); $set_foo = output_sync_set('foo'); $set_bar = output_sync_set('bar'); $set_foo_start = output_sync_set('foo_start'); $set_bar_start = output_sync_set('bar_start'); $wait_foo = output_sync_wait('foo'); $wait_bar = output_sync_wait('bar'); $wait_foo_start = output_sync_set('foo_start'); $wait_bar_start = output_sync_set('bar_start'); open(MAKEFILE,"> foo/Makefile"); print MAKEFILE < bar/Makefile"); print MAKEFILE <&2) !, '-w -Oline', "#MAKE#: Entering directory '#PWD#'\nfoo\n#MAKE#: Leaving directory '#PWD#'\n"); # Ensure that output generated while parsing makefiles is synced # when appropriate. run_make_test(q! $(shell echo foo 1>&2) all: ; echo bar !, '-s -w -Otarget', "#MAKE#: Entering directory '#PWD#'\nfoo\n#MAKE#: Leaving directory '#PWD#'\n#MAKE#: Entering directory '#PWD#'\nbar\n#MAKE#: Leaving directory '#PWD#'\n"); # Test recursion $m1 = get_tmpfile(); $m2 = get_tmpfile(); open(M1, "> $m1"); print M1 <<'EOF'; $(shell echo d1 stderr 1>&2) $(info d1 stdout) all:; @: EOF close(M1); open(M2, "> $m2"); print M2 <<'EOF'; $(shell echo d2 stderr 1>&2) $(info d2 stdout) all:; @: # Force an ordering on the output $(shell sleep 1) EOF close(M2); run_make_test(qq! all: t1 t2 t1: ; \@\$(MAKE) -f $m1 t2: ; \@\$(MAKE) -f $m2 !, "-j -Oline", "#MAKE#[1]: Entering directory '#PWD#'\nd1 stderr\nd1 stdout\n#MAKE#[1]: Leaving directory '#PWD#'\n#MAKE#[1]: Entering directory '#PWD#'\nd2 stderr\nd2 stdout\n#MAKE#[1]: Leaving directory '#PWD#'\n"); rmfiles($m1, $m2); # Ensure that output generated while parsing makefiles is synced # when appropriate. $m1 = get_tmpfile(); open(M1, "> $m1"); print M1 <<'EOF'; $(shell echo d1 stderr 1>&2) $(info d1 stdout) $(error d1 failed) all:; @: EOF close(M1); 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#MAKE#: [#MAKEFILE#:3: t1] Error 2 (ignored)\n"); rmfiles($m1); # Test $(error ...) functions in recipes run_make_test(q! 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 # Needs to be ported to Windows if ($port_type ne 'W32') { run_make_test(q! all:: ; @./foo bar baz !, '-O', "#MAKE#: ./foo: $ERR_no_such_file\n#MAKE#: *** [#MAKEFILE#:2: all] Error 127\n", 512); } # This tells the test driver that the perl test script executed properly. 1; make-4.3/tests/scripts/features/archives0000644000175000017500000001556013603564437015436 00000000000000# -*-mode: perl-*- $description = "Test GNU make's archive management features."; $details = "\ This only works on systems that support it."; # If this instance of make doesn't support archives, skip it exists $FEATURES{archives} or return -1; # In theory archive support exists on Windows but it doesn't use ar; # someone will need to port this test. $port_type eq 'W32' and return -1; # Create some .o files to work with if ($osname eq 'VMS') { # 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)); } # Fallback if configure did not find AR my $ar = get_config('AR') || 'ar'; 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. unlink('libxx.a'); my $created = `$ar $arflags libxx.a a1.o $redir`; $created =~ s/a1\.o/#OBJECT#/g; # Some versions of ar print different things on add. Find out. 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 $arflags libxx.a a2.o $redir`; $repl =~ s/a2\.o/#OBJECT#/g; unlink('libxx.a'); # Very simple ($_ = $created) =~ s/#OBJECT#/a1.o/g; my $answer = "$ar $arflags libxx.a a1.o\n$_"; 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; $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 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; $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 $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 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; $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 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 $arflags libxx.a a2.o\n"; ($_ .= $repl) =~ s/#OBJECT#/a2.o/g; $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 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; $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.c1 a2.c1 a3.c1 a1.o a2.o a3.o libxx.a)); # Check non-archive targets # See Savannah bug #37878 $mk_string = q! all: foo(bar).baz foo(bar).baz: ; @echo '$@' !; 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'); $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 !; 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'); if ($osname eq 'VMS') { remove_directory_tree("$cwdpath/artest"); } else { remove_directory_tree('artest'); } # Check long names for archive members. # See Savannah bug #54395 if ($osname ne 'VMS') { my $pre = '1234567890123456'; my $lib = 'libxx.a'; my $cr = $created; $cr =~ s/#OBJECT#/${pre}a/g; my $ad = $add; $ad =~ s/#OBJECT#/${pre}b/g; run_make_test(qq! # Both member names > 16 characters long default: $lib(${pre}a) $lib(${pre}b) (%): % ; \$(AR) \$(ARFLAGS) \$@ \$% $pre%: ; touch \$\@ !, $arvar, "touch ${pre}a\n$ar $arflags $lib ${pre}a\n${cr}touch ${pre}b\n$ar $arflags $lib ${pre}b\n${ad}rm ${pre}a ${pre}b\n"); # Run it again; nothing should happen run_make_test(undef, $arvar, "#MAKE#: Nothing to be done for 'default'.\n"); unlink($lib); } # This tells the test driver that the perl test script executed properly. 1; make-4.3/tests/scripts/features/load0000644000175000017500000000553213603564437014547 00000000000000# -*-perl-*- $description = "Test the load operator."; $details = "Test dynamic loading of modules."; # Don't do anything if this system doesn't support "load" exists $FEATURES{load} or return -1; my $cc = get_config('CC'); if (! $cc) { $verbose and print "Skipping load test: no CC defined\n"; return -1; } # First build a shared object # Provide both a default and non-default load symbol unlink(qw(testload.c testload.so)); open(my $F, '> testload.c') or die "open: testload.c: $!\n"; print $F <<'EOF' ; #include #include #include "gnumake.h" int plugin_is_GPL_compatible; int testload_gmk_setup (gmk_floc *pos) { (void)pos; gmk_eval ("TESTLOAD = implicit", 0); return 1; } int explicit_setup (gmk_floc *pos) { (void)pos; gmk_eval ("TESTLOAD = explicit", 0); return 1; } EOF close($F) or die "close: testload.c: $!\n"; # Make sure we can compile my $cflags = get_config('CFLAGS'); my $cppflags = get_config('CPPFLAGS'); my $ldflags = get_config('LDFLAGS'); my $sobuild = "$cc ".($srcdir? "-I$srcdir/src":'')." $cppflags $cflags -shared -fPIC $ldflags -o testload.so testload.c"; my $clog = `$sobuild 2>&1`; if ($? != 0) { $verbose and print "Failed to build testload.so:\n$sobuild\n$_"; return -1; } # TEST 1 run_make_test(q! PRE := $(.LOADED) load testload.so POST := $(.LOADED) all: ; @echo pre=$(PRE) post=$(POST) $(TESTLOAD) !, '--warn-undefined-variables', "pre= post=testload.so implicit\n"); # TEST 2 # Load using an explicit function run_make_test(q! PRE := $(.LOADED) load ./testload.so(explicit_setup) POST := $(.LOADED) all: ; @echo pre=$(PRE) post=$(POST) $(TESTLOAD) !, '', "pre= post=testload.so explicit\n"); # TEST 4 # Check multiple loads run_make_test(q! PRE := $(.LOADED) load ./testload.so load testload.so(explicit_setup) POST := $(.LOADED) all: ; @echo pre=$(PRE) post=$(POST) $(TESTLOAD) !, '', "pre= post=testload.so implicit\n"); # TEST 5 # Check auto-rebuild of loaded file that's out of date utouch(-10, 'testload.so'); touch('testload.c'); run_make_test(q! PRE := $(.LOADED) load ./testload.so POST := $(.LOADED) all: ; @echo pre=$(PRE) post=$(POST) $(TESTLOAD) testload.so: testload.c ; @echo "rebuilding $@"; !.$sobuild, '', "rebuilding testload.so\npre= post=testload.so implicit\n"); # TEST 5 # Check auto-rebuild of loaded file when it doesn't exist unlink('testload.so'); run_make_test(q! PRE := $(.LOADED) -load ./testload.so(explicit_setup) POST := $(.LOADED) all: ; @echo pre=$(PRE) post=$(POST) $(TESTLOAD) %.so: %.c ; @echo "rebuilding $@"; !.$sobuild, '', "rebuilding testload.so\npre= post=testload.so explicit\n"); unlink(qw(testload.c testload.so)) unless $keep; # This tells the test driver that the perl test script executed properly. 1; make-4.3/tests/scripts/features/exec0000644000175000017500000000343413603564437014553 00000000000000# -*-perl-*- use warnings; my $description = "Test that make can execute binaries as well as scripts with" ." various shabangs and without a shebang"; my $details = "The various shells that this test uses are the default" ." /bin/sh, \$SHELL and the perl interpreter that is" ." executing this test program. The shells are used for the value" ." of SHELL inside the test makefile and also as a shebang in the" ." executed script. There is also a test which executes a script" ." that has no shebang."; # Only bother with this on UNIX systems $port_type eq 'UNIX' or return -1; my $usersh = $origENV{SHELL}; my $answer = 'hello, world'; my @shebangs = ('', '#!/bin/sh', "#!$usersh", "#!$perl_name"); my @shells = ('', 'SHELL=/bin/sh', "SHELL=$usersh"); # tests [0-11] # Have a makefile with various SHELL= exec a shell program with varios # shebangs or without a shebang at all. my $stem = './exec.cmd'; my $k = 0; for my $shebang (@shebangs) { for my $shell (@shells) { my $cmd = $k ? "$stem.$k" : $stem; ++$k; unlink $cmd; open(CMD,"> $cmd"); print CMD "$shebang\n"; print CMD "printf \"$answer\\n\";\n"; close(CMD); chmod 0700, $cmd; run_make_test(q! all:; @$(CMD) !, "$shell CMD=$cmd", "$answer\n"); rmfiles($cmd); } } # tests [12-14] # Exec a binary from a makefile that has SHELL=. for my $shell (@shells) { run_make_test(q! all:; @#PERL# -e 'printf "$(ANSWER)\n"'; !, "$shell ANSWER='$answer'", "$answer\n"); } # test 15 # Use perl as a shell. run_make_test(q! SHELL = #PERL# .SHELLFLAGS = -e all:; @printf "$(ANSWER)\n"; !, "ANSWER='$answer'", "$answer\n"); 1; make-4.3/tests/scripts/features/loadapi0000644000175000017500000000565613603564437015250 00000000000000# -*-perl-*- $description = "Test the shared object load API."; $details = "Verify the different aspects of the shared object API."; # Don't do anything if this system doesn't support "load" exists $FEATURES{load} or return -1; my $cc = get_config('CC'); if (! $cc) { $verbose and print "Skipping load test: no CC defined\n"; return -1; } # First build a shared object # Provide both a default and non-default load symbol unlink(qw(testapi.c testapi.so)); open(my $F, '> testapi.c') or die "open: testapi.c: $!\n"; print $F <<'EOF' ; #include #include #include "gnumake.h" int plugin_is_GPL_compatible; static char * test_eval (const char *buf) { gmk_eval (buf, 0); return NULL; } static char * test_expand (const char *val) { return gmk_expand (val); } static char * test_noexpand (const char *val) { char *str = gmk_alloc (strlen (val) + 1); strcpy (str, val); return str; } static char * func_test (const char *funcname, unsigned int argc, char **argv) { char *mem; if (strcmp (funcname, "test-expand") == 0) return test_expand (argv[0]); if (strcmp (funcname, "test-eval") == 0) return test_eval (argv[0]); if (strcmp (funcname, "test-noexpand") == 0) return test_noexpand (argv[0]); mem = gmk_alloc (sizeof ("unknown")); strcpy (mem, "unknown"); return mem; } int testapi_gmk_setup () { gmk_add_function ("test-expand", func_test, 1, 1, GMK_FUNC_DEFAULT); gmk_add_function ("test-noexpand", func_test, 1, 1, GMK_FUNC_NOEXPAND); gmk_add_function ("test-eval", func_test, 1, 1, GMK_FUNC_DEFAULT); gmk_add_function ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.", func_test, 0, 0, 0); return 1; } EOF close($F) or die "close: testapi.c: $!\n"; # Make sure we can compile my $cflags = get_config('CFLAGS'); my $cppflags = get_config('CPPFLAGS'); my $ldflags = get_config('LDFLAGS'); my $sobuild = "$cc ".($srcdir? "-I$srcdir/src":'')." $cppflags $cflags -shared -fPIC $ldflags -o testapi.so testapi.c"; my $clog = `$sobuild 2>&1`; if ($? != 0) { $verbose and print "Failed to build testapi.so:\n$sobuild\n$_"; return -1; } # TEST 1 # Check the gmk_expand() function run_make_test(q! EXPAND = expansion all: ; @echo $(test-expand $$(EXPAND)) load testapi.so !, '', "expansion\n"); # TEST 2 # Check the eval operation. Prove that the argument is expanded only once run_make_test(q! load testapi.so TEST = bye ASSIGN = VAR = $(TEST) $(shell echo there) $(test-eval $(value ASSIGN)) TEST = hi all:;@echo '$(VAR)' !, '', "hi there\n"); # TEST 2 # Check the no-expand capability run_make_test(q! load testapi.so TEST = hi all:;@echo '$(test-noexpand $(TEST))' !, '', "\$(TEST)\n"); unlink(qw(testapi.c testapi.so)) unless $keep; # This tells the test driver that the perl test script executed properly. 1; make-4.3/tests/scripts/features/escape0000644000175000017500000000471713603564437015074 00000000000000# -*-perl-*- $description = "Test various types of escaping in makefiles."; $details = "\ Make sure that escaping of ':' works in target names. Make sure escaping of whitespace works in target names. Make sure that escaping of '#' works. Make sure that backslash before non-special characters are kept."; # TEST 1 run_make_test(q! ifdef NOESC path = pre: endif ifdef ONEESC path = pre\: endif ifdef TWOESC path = pre\\\\: endif $(path)foo : ; @echo "touch ($@)" foo\ bar: ; @echo "touch ($@)" sharp: foo\#bar.ext foo\#bar.ext: ; @echo "foo#bar.ext = ($@)" !, '', 'touch (foo)'); # TEST 2: This one should fail, since the ":" is unquoted. run_make_test(undef, 'NOESC=1', "#MAKEFILE#:12: *** target pattern contains no '%'. Stop.", 512); # TEST 3: This one should work, since we escape the ":". run_make_test(undef, 'ONEESC=1', 'touch (pre:foo)'); # TEST 4: This one should fail, since the escape char is escaped. run_make_test(undef, 'TWOESC=1', "#MAKEFILE#:12: *** target pattern contains no '%'. Stop.", 512); # TEST 5: This one should work run_make_test(undef, ['foo bar'], 'touch (foo bar)'); # TEST 6: Test escaped comments run_make_test(undef, 'sharp', 'foo#bar.ext = (foo#bar.ext)'); # Test escaped colons in prerequisites # Quoting of backslashes in q!! is kind of messy. # Solaris sh does not properly handle backslashes even in '' so just # check the output make prints, not what the shell interprets. run_make_test(q! foo: foo\\:bar foo\\\\\\:bar foo\\\\\\\\\\:bar foo foo\\:bar foo\\\\\\:bar foo\\\\\\\\\\:bar: ; : '$@' !, '', ": 'foo:bar'\n: 'foo\\:bar'\n: 'foo\\\\:bar'\n: 'foo'\n"); # Test backslash before non-special chars: should be kept as-is run_make_test(q! all: ..\foo .DEFAULT: ; : '$@' !, '', ": '..\\foo'\n"); # Test escaped comments in variable assignments run_make_test(q! self = $1 foo := $(call self,#foo#)#foo bar := $(call self,\#bar\#)#bar all:;@echo '$(foo) $(bar)' !, '',"#foo# \\#bar\\#"); # Test escaped comments in variable assignments in a variable run_make_test(q! C = \# self = $1 foo := $(call self,$Cfoo$C)#foo all:;@echo '$(foo)' !, '',"#foo#"); # This tells the test driver that the perl test script executed properly. 1; make-4.3/tests/scripts/features/override0000644000175000017500000000155113603564437015444 00000000000000# -*-perl-*- $description = "Test the override directive on variable assignments."; $details = ""; # TEST 0: Basic override run_make_test(' X = start override recur = $(X) override simple := $(X) X = end all: ; @echo "$(recur) $(simple)" ', 'recur=I simple=J', "end start\n"); # TEST 1: Override with append run_make_test(' X += X1 override X += X2 override Y += Y1 Y += Y2 all: ; @echo "$(X) $(Y)" ', '', "X1 X2 Y1\n"); # TEST 2: Override with append to the command line run_make_test(undef, 'X=C Y=C', "C X2 C Y1\n"); # Test override of define/endef run_make_test(' override define foo @echo First comes the definition. @echo Then comes the override. endef all: ; $(foo) ', 'foo=Hello', "First comes the definition.\nThen comes the override.\n"); 1; make-4.3/tests/scripts/features/patspecific_vars0000644000175000017500000000617113603564437017155 00000000000000# -*-perl-*- $description = "Test pattern-specific variable settings."; $details = "\ Create a makefile containing various flavors of pattern-specific variable settings, override and non-override, and using various variable expansion rules, semicolon interference, etc."; open(MAKEFILE,"> $makefile"); print MAKEFILE <<'EOF'; all: one.x two.x three.x FOO = foo BAR = bar BAZ = baz one.x: override FOO = one %.x: BAR = two t%.x: BAR = four thr% : override BAZ = three one.x two.x three.x: ; @echo $@: $(FOO) $(BAR) $(BAZ) four.x: baz ; @echo $@: $(FOO) $(BAR) $(BAZ) baz: ; @echo $@: $(FOO) $(BAR) $(BAZ) # test matching multiple patterns a%: AAA = aaa %b: BBB = ccc a%: BBB += ddd %b: AAA ?= xxx %b: AAA += bbb .PHONY: ab ab: ; @echo $(AAA); echo $(BBB) EOF close(MAKEFILE); # TEST #1 -- basics &run_make_with_options($makefile, "", &get_logfile); $answer = "one.x: one two baz\ntwo.x: foo four baz\nthree.x: foo four three\n"; &compare_output($answer,&get_logfile(1)); # TEST #2 -- try the override feature &run_make_with_options($makefile, "BAZ=five", &get_logfile); $answer = "one.x: one two five\ntwo.x: foo four five\nthree.x: foo four three\n"; &compare_output($answer,&get_logfile(1)); # TEST #3 -- make sure patterns are inherited properly &run_make_with_options($makefile, "four.x", &get_logfile); $answer = "baz: foo two baz\nfour.x: foo two baz\n"; &compare_output($answer,&get_logfile(1)); # TEST #4 -- test multiple patterns matching the same target &run_make_with_options($makefile, "ab", &get_logfile); $answer = "aaa bbb\nccc ddd\n"; &compare_output($answer,&get_logfile(1)); # TEST #5 -- test pattern-specific exported variables # run_make_test(' /%: export foo := foo /bar: @echo $(foo) $$foo ', '', 'foo foo'); # TEST #6 -- test expansion of pattern-specific simple variables # run_make_test(' .PHONY: all all: inherit := good $$t all: bar baz b%: pattern := good $$t global := original $$t # normal target # ifdef rec bar: a = global: $(global) pattern: $(pattern) inherit: $(inherit) else bar: a := global: $(global) pattern: $(pattern) inherit: $(inherit) endif bar: ; @echo \'normal: $a;\' # pattern target # ifdef rec %z: a = global: $(global) pattern: $(pattern) inherit: $(inherit) else %z: a := global: $(global) pattern: $(pattern) inherit: $(inherit) endif %z: ; @echo \'pattern: $a;\' global := new $$t ', '', 'normal: global: original $t pattern: inherit: ; pattern: global: original $t pattern: inherit: ;'); # TEST #7 -- test expansion of pattern-specific recursive variables # run_make_test(undef, # reuse previous makefile 'rec=1', 'normal: global: new $t pattern: good $t inherit: good $t; pattern: global: new $t pattern: good $t inherit: good $t;'); # TEST #8: override in pattern-specific variables run_make_test(' a%: override FOO += f1 a%: FOO += f2 ab: ; @echo "$(FOO)" ', '', "f1\n"); run_make_test(undef, 'FOO=C', "C f1\n"); # TEST #9: Test shortest stem selection in pattern-specific variables. run_make_test(' %-mt.x: x := two %.x: x := one all: foo.x foo-mt.x foo.x: ;@echo $x foo-mt.x: ;@echo $x ', '', "one\ntwo"); 1; make-4.3/tests/scripts/features/recursion0000644000175000017500000000312013603564437015630 00000000000000# -*-perl-*- $description = "Test recursion."; $details = "DETAILS"; # Test some basic recursion. run_make_test(' .RECIPEPREFIX := | all: | $(MAKE) -f #MAKEFILE# foo foo: | @echo $(MAKE) | @echo MAKELEVEL = $(MAKELEVEL) | $(MAKE) -f #MAKEFILE# last last: | @echo $(MAKE) | @echo MAKELEVEL = $(MAKELEVEL) | @echo THE END ', ('CFLAGS=-O -w' . ($parallel_jobs ? ' -j 2' : '')), ($vos ? "#MAKE#: Entering directory '#PWD#' make 'CFLAGS=-O' -f #MAKEFILE# foo make CFLAGS=-O MAKELEVEL = 0 make 'CFLAGS=-O' -f #MAKEFILE# last make CFLAGS=-O MAKELEVEL = 0 THE END #MAKE#: Leaving directory '#PWD#'" : "#MAKE#: Entering directory '#PWD#' #MAKEPATH# -f #MAKEFILE# foo #MAKE#[1]: Entering directory '#PWD#' #MAKEPATH# MAKELEVEL = 1 #MAKEPATH# -f #MAKEFILE# last #MAKE#[2]: Entering directory '#PWD#' #MAKEPATH# MAKELEVEL = 2 THE END #MAKE#[2]: Leaving directory '#PWD#' #MAKE#[1]: Leaving directory '#PWD#' #MAKE#: Leaving directory '#PWD#'")); # Test command line overrides. run_make_test(' recur: all ; @$(MAKE) --no-print-directory -f #MAKEFILE# a=AA all all: ; @echo "MAKEOVERRIDES = $(MAKEOVERRIDES)" ', 'a=ZZ', 'MAKEOVERRIDES = a=ZZ MAKEOVERRIDES = a=AA '); # SV 46013: Ensure that MAKEOVERRIDES is passed even if set in the makefile run_make_test(q! ifeq ($(MAKELEVEL),0) MAKEOVERRIDES += FOO+=bar endif .PHONY: M R M: ; @$(MAKE) --no-print-directory -f #MAKEFILE# R R: ; @echo '$(FOO)' !, '', 'bar'); 1; make-4.3/tests/scripts/features/echoing0000644000175000017500000000404713603564437015244 00000000000000# -*-perl-*- $description = "The following test creates a makefile to test command echoing. It tests that when a command line starts with a '\@', the echoing of that line is suppressed. It also tests the -n option which tells make to ONLY echo the commands and no execution happens. In this case, even the commands with '\@' are printed. Lastly, it tests the -s flag which tells make to prevent all echoing, as if all commands started with a '\@'."; $details = "This test is similar to the 'clean' test except that a '\@' has been placed in front of the delete command line. Four tests are run here. First, make is run normally and the first echo command should be executed. In this case there is no '\@' so we should expect make to display the command AND display the echoed message. Secondly, make is run with the clean target, but since there is a '\@' at the beginning of the command, we expect no output; just the deletion of a file which we check for. Third, we give the clean target again except this time we give make the -n option. We now expect the command to be displayed but not to be executed. In this case we need only to check the output since an error message would be displayed if it actually tried to run the delete command again and the file didn't exist. Lastly, we run the first test again with the -s option and check that make did not echo the echo command before printing the message.\n"; $example = "EXAMPLE_FILE"; touch($example); # TEST #1 # ------- run_make_test(" all: \techo This makefile did not clean the dir... good clean: \t\@$CMD_rmfile $example\n", '', 'echo This makefile did not clean the dir... good This makefile did not clean the dir... good'); # TEST #2 # ------- run_make_test(undef, 'clean', ''); if (-f $example) { $test_passed = 0; unlink($example); } # TEST #3 # ------- run_make_test(undef, '-n clean', "$CMD_rmfile $example\n"); # TEST #4 # ------- run_make_test(undef, '-s', "This makefile did not clean the dir... good\n"); 1; make-4.3/tests/scripts/features/targetvars0000644000175000017500000001456313603564437016016 00000000000000# -*-perl-*- $description = "Test target-specific variable settings."; $details = "\ Create a makefile containing various flavors of target-specific variable values, override and non-override, and using various variable expansion rules, semicolon interference, etc."; run_make_test(' export FOO = foo export BAR = bar one: override FOO = one one two: ; @echo $(FOO) $(BAR) two: BAR = two three: ; BAR=1000 @echo $(FOO) $(BAR) # Some things that shouldn not be target vars funk : override funk : override adelic adelic override : ; echo $@ # Test per-target recursive variables four:FOO=x four:VAR$(FOO)=ok four: ; @echo "$(FOO) $(VAR$(FOO)) $(VAR) $(VARx)" five:FOO=x five six : VAR$(FOO)=good five six: ;@echo "$(FOO) $(VAR$(FOO)) $(VAR) $(VARx) $(VARfoo)" # Test per-target variable inheritance seven: eight seven eight: ; @echo $@: $(FOO) $(BAR) seven: BAR = seven seven: FOO = seven eight: BAR = eight # Test the export keyword with per-target variables nine: ; @echo $(FOO) $(BAR) $$FOO $$BAR nine: FOO = wallace nine-a: export BAZ = baz nine-a: ; @echo $$BAZ # Test = escaping EQ = = ten: one$(EQ)two ten: one $(EQ) two ten one$(EQ)two $(EQ):;@echo $@ .PHONY: one two three four five six seven eight nine ten $(EQ) one$(EQ)two # Test target-specific vars with pattern/suffix rules QVAR = qvar RVAR = = %.q : ; @echo $(QVAR) $(RVAR) foo.q : RVAR += rvar # Target-specific vars with multiple LHS pattern rules %.r %.s %.t: ; @echo $(QVAR) $(RVAR) $(SVAR) $(TVAR) foo.r : RVAR += rvar foo.t : TVAR := $(QVAR) ', "one two three", "one bar\nfoo two\nBAR=1000\nfoo bar\n"); # TEST #2 run_make_test(undef, "one two FOO=1 BAR=2", "one 2\n1 2\n"); # TEST #3 run_make_test(undef, "four", "x ok ok\n"); # TEST #4 run_make_test(undef, "seven", "eight: seven eight\nseven: seven seven\n"); # TEST #5 run_make_test(undef, "nine", "wallace bar wallace bar\n"); # TEST #5-a run_make_test(undef, "nine-a", "baz\n"); # TEST #6 run_make_test(undef, "ten", "one=two\none bar\n=\nfoo two\nten\n"); # TEST #6 run_make_test(undef, "foo.q bar.q", "qvar = rvar\nqvar =\n"); # TEST #7 run_make_test(undef, "foo.t bar.s", "qvar = qvar\nqvar =\n"); # TEST #8 # For PR/1378: Target-specific vars don't inherit correctly run_make_test(' foo: FOO = foo bar: BAR = bar foo: bar bar: baz baz: ; @echo $(FOO) $(BAR) ', "", "foo bar\n"); # TEST #9 # For PR/1380: Using += assignment in target-specific variables sometimes fails # Also PR/1831 run_make_test(' .PHONY: all one all: FOO += baz all: one; @echo $(FOO) FOO = bar one: FOO += biz one: FOO += boz one: ; @echo $(FOO) ', '', "bar baz biz boz\nbar baz\n"); # Test #10 run_make_test(undef, 'one', "bar biz boz\n"); # Test #11 # PR/1709: Test semicolons in target-specific variable values run_make_test(' foo : FOO = ; ok foo : ; @echo "$(FOO)" ', '', "; ok\n"); # Test #12 # PR/2020: More hassles with += target-specific vars. I _really_ think # I nailed it this time :-/. run_make_test(' .PHONY: a BLAH := foo COMMAND = echo $(BLAH) a: ; @$(COMMAND) a: BLAH := bar a: COMMAND += snafu $(BLAH) ', '', "bar snafu bar\n"); # Test #13 # Test double-colon rules with target-specific variable values run_make_test(' W = bad X = bad foo: W = ok foo:: ; @echo $(W) $(X) $(Y) $(Z) foo:: ; @echo $(W) $(X) $(Y) $(Z) foo: X = ok Y = foo bar: foo bar: Y = bar Z = nopat ifdef PATTERN fo% : Z = pat endif ', 'foo', "ok ok foo nopat\nok ok foo nopat\n"); # Test #14 # Test double-colon rules with target-specific variable values and # inheritance run_make_test(undef, 'bar', "ok ok bar nopat\nok ok bar nopat\n"); # Test #15 # Test double-colon rules with pattern-specific variable values run_make_test(undef, 'foo PATTERN=yes', "ok ok foo pat\nok ok foo pat\n"); # Test #16 # Test target-specific variables with very long command line # (> make default buffer length) run_make_test(' base_metals_fmd_reports.sun5 base_metals_fmd_reports CreateRealPositions CreateMarginFunds deals_changed_since : BUILD_OBJ=$(shell if [ -f "build_information.generate" ]; then echo "$(OBJ_DIR)/build_information.o"; else echo "no build information"; fi ) deals_changed_since: ; @echo $(BUILD_OBJ) ', '', "no build information\n"); # TEST #17 # Test a merge of set_lists for files, where one list is much longer # than the other. See Savannah bug #15757. mkdir('t1', 0777); touch('t1/rules.mk'); run_make_test(' VPATH = t1 include rules.mk .PHONY: all all: foo.x foo.x : rules.mk ; @echo MYVAR=$(MYVAR) FOOVAR=$(FOOVAR) ALLVAR=$(ALLVAR) all: ALLVAR = xxx foo.x: FOOVAR = bar rules.mk : MYVAR = foo .INTERMEDIATE: foo.x rules.mk ', '-I t1', 'MYVAR= FOOVAR=bar ALLVAR=xxx'); rmfiles('t1/rules.mk'); rmdir('t1'); # TEST #18 # Test appending to a simple variable containing a "$": avoid a # double-expansion. See Savannah bug #15913. run_make_test(' VAR := $$FOO foo: VAR += BAR foo: ; @echo '."'".'$(VAR)'."'".' ', '', '$FOO BAR'); # TEST #19: Override with append variables run_make_test(' a: override FOO += f1 a: FOO += f2 a: ; @echo "$(FOO)" ', '', "f1\n"); run_make_test(undef, 'FOO=C', "C f1\n"); # TEST #19: Conditional variables with command-line settings run_make_test(' a: FOO ?= f1 a: ; @echo "$(FOO)" ', '', "f1\n"); run_make_test(undef, 'FOO=C', "C\n"); # TEST #20: Check for continuation after semicolons run_make_test(q! a: A = 'hello;\ world' a: ; @echo $(A) !, '', "hello; world\n"); # TEST #21: SV-56834 Ensure setting PATH in a target var works properly my $sname = "foobar$scriptsuffix"; mkdir('sd', 0775); create_file("sd/$sname", "exit 0\n"); chmod 0755, "sd/$sname"; run_make_test(qq! all: PATH := sd all: ; $sname >/dev/null !, '', "$sname >/dev/null\n"); # Don't use the general PATH if not found on the target path $extraENV{PATH} = "$ENV{PATH}:sd"; run_make_test(qq! all: PATH := .. all: ; $sname !, '', "$sname\n#MAKE#: $sname: $ERR_no_such_file\n#MAKE#: *** [#MAKEFILE#:3: all] Error 127", 512); unlink("sd/$sname"); rmdir ('sd'); # TEST #19: Test define/endef variables as target-specific vars # run_make_test(' # define b # @echo global # endef # a: define b # @echo local # endef # a: ; $(b) # ', # '', "local\n"); 1; ### Local Variables: ### eval: (setq whitespace-action (delq 'auto-cleanup whitespace-action)) ### End: make-4.3/tests/scripts/features/vpath20000644000175000017500000000233713603564437015034 00000000000000$description = "This is part 2 in a series to test the vpath directive\n" ."It tests the three forms of the directive:\n" ." vpath pattern directive\n" ." vpath pattern (clears path associated with pattern)\n" ." vpath (clears all paths specified with vpath)\n"; $details = "This test simply adds many search paths using various vpath\n" ."directive forms and clears them afterwards. It has a simple\n" ."rule to print a message at the end to confirm that the makefile\n" ."ran with no errors.\n"; open(MAKEFILE,"> $makefile"); # The Contents of the MAKEFILE ... print MAKEFILE "VPATH = $workdir:$scriptdir\n"; print MAKEFILE "vpath %.c foo\n"; print MAKEFILE "vpath %.c $workdir\n"; print MAKEFILE "vpath %.c $scriptdir\n"; print MAKEFILE "vpath %.h $workdir\n"; print MAKEFILE "vpath %.c\n"; print MAKEFILE "vpath\n"; print MAKEFILE "all:\n"; print MAKEFILE "\t\@echo ALL IS WELL\n"; # END of Contents of MAKEFILE close(MAKEFILE); &run_make_with_options($makefile,"",&get_logfile); # Create the answer to what should be produced by this Makefile $answer = "ALL IS WELL\n"; &compare_output($answer,&get_logfile(1)); 1; make-4.3/tests/scripts/features/errors0000644000175000017500000000425513603564437015145 00000000000000# -*-perl-*- $description = "Test ignored failures in recipe command lines"; run_make_test(qq! one: \t-exit 1 \texit 0 two: \texit 1 \texit 0 !, "one", "exit 1\n#MAKE#: [#MAKEFILE#:3: one] Error 1 (ignored)\nexit 0\n"); # TEST #1 # ------- run_make_test(undef, " -i two", "exit 1\n#MAKE#: [#MAKEFILE#:6: two] Error 1 (ignored)\nexit 0\n"); # TEST #2 # ------- # Test that error line offset works run_make_test(qq! all: \t\@echo hi \t\@echo there \t\@exit 1 !, '', "hi\nthere\n#MAKE#: *** [#MAKEFILE#:5: all] Error 1", 512); # TEST #3 # ------- # Try failing due to unknown command my $unk = './foobarbazbozblat'; unlink($unk); my $err = $ERR_no_such_file; run_make_test(qq! one: ; -$unk xx yy !, 'one', "$unk xx yy\n#MAKE#: $unk: $err\n#MAKE#: [#MAKEFILE#:2: one] Error 127 (ignored)\n"); # TEST #4 # ------- run_make_test(qq! two: ; $unk aa bb !, 'two -i', "$unk aa bb\n#MAKE#: $unk: $err\n#MAKE#: [#MAKEFILE#:2: two] Error 127 (ignored)\n"); # TEST #5 # ------- run_make_test(undef, 'two', "$unk aa bb\n#MAKE#: $unk: $err\n#MAKE#: *** [#MAKEFILE#:2: two] Error 127\n", 512); # SV #56918 : Test the unknown command as the second recipe line run_make_test(qq! three: \t\@echo one \t$unk qq rr !, 'three', "one\n$unk qq rr\n#MAKE#: $unk: $err\n#MAKE#: *** [#MAKEFILE#:4: three] Error 127\n", 512); # Try failing due to non-executable file if ($ERR_nonexe_file) { my $noexe = './barfooblatboz'; touch($noexe); run_make_test(qq! one: ; -$noexe xx yy two: ; $noexe aa bb !, 'one', "$noexe xx yy\n#MAKE#: $noexe: $ERR_nonexe_file\n#MAKE#: [#MAKEFILE#:2: one] Error 127 (ignored)\n"); unlink($noexe); } # Try failing by "running" a directory if ($ERR_exe_dir) { mkdir('sd', 0775); run_make_test(q! PATH := . all: ; sd !, '', "sd\n#MAKE#: sd: $ERR_exe_dir\n#MAKE#: *** [#MAKEFILE#:3: all] Error 127", 512); run_make_test(q! all: ; ./sd !, '', "./sd\n#MAKE#: ./sd: $ERR_exe_dir\n#MAKE#: *** [#MAKEFILE#:2: all] Error 127", 512); rmdir('sd'); } 1; make-4.3/tests/scripts/features/rule_glob0000644000175000017500000000162413603564437015600 00000000000000# -*-perl-*- $description = "Test globbing in targets and prerequisites."; $details = ""; touch(qw(a.one a.two a.three)); # Test wildcards in regular targets and prerequisites run_make_test(q{ .PHONY: all a.one a.two a.three all: a.one* a.t[a-z0-9]o a.th[!q]ee a.o[Nn][Ee] a.t*: ; @echo $@ }, '', "a.one\na.two\na.three"); # Test wildcards in pattern targets and prerequisites run_make_test(q{ .PHONY: all all: a.four %.four : %.t* ; @echo $@: $(sort $^) }, '', "a.four: a.three a.two"); # Test wildcards in second expansion targets and prerequisites run_make_test(q{ .PHONY: all all: a.four .SECONDEXPANSION: %.four : $$(sort %.t*) ; @echo $@: $(sort $^) }, '', "a.four: a.three a.two"); unlink(qw(a.one a.two a.three)); # This tells the test driver that the perl test script executed properly. 1; make-4.3/tests/scripts/features/default_names0000644000175000017500000000244713603564437016441 00000000000000# -*-perl-*- $description = "This script tests to make sure that Make looks for default makefiles in the correct order (GNUmakefile,makefile,Makefile)"; # Create a makefile called "GNUmakefile" $makefile = "GNUmakefile"; open(MAKEFILE,"> $makefile"); print MAKEFILE "FIRST: ; \@echo It chose GNUmakefile\n"; close(MAKEFILE); # Create another makefile called "makefile" open(MAKEFILE,"> makefile"); print MAKEFILE "SECOND: ; \@echo It chose makefile\n"; close(MAKEFILE); # DOS/WIN32/MacOSX platforms are case-insensitive / case-preserving, so # Makefile is the same file as makefile. Just test what we can here. my $case_sensitive = 0; if (! -f 'Makefile') { # Create another makefile called "Makefile" $case_sensitive = 1; open(MAKEFILE,"> Makefile"); print MAKEFILE "THIRD: ; \@echo It chose Makefile\n"; close(MAKEFILE); } run_make_with_options("","",&get_logfile); compare_output("It chose GNUmakefile\n",&get_logfile(1)); unlink($makefile); run_make_with_options("","",&get_logfile); compare_output("It chose makefile\n",&get_logfile(1)); unlink("makefile"); if ($case_sensitive) { run_make_with_options("","",&get_logfile); compare_output("It chose Makefile\n",&get_logfile(1)); unlink("Makefile"); } 1; make-4.3/tests/scripts/features/varnesting0000644000175000017500000000116513603564437016006 00000000000000# -*-perl-*- $description = "Test recursive variables"; $details = ""; run_make_test(' x = variable1 variable2 := Hello y = $(subst 1,2,$(x)) z = y a := $($($(z))) all: @echo $(a) ', '', "Hello\n"); # This tests resetting the value of a variable while expanding it. # You may only see problems with this if you're using valgrind or # some other memory checker that poisons freed memory. # See Savannah patch #7534 run_make_test(' VARIABLE = $(eval VARIABLE := echo hi)$(VARIABLE) wololo: @$(VARIABLE) ', '', "hi\n"); 1; make-4.3/tests/scripts/features/patternrules0000644000175000017500000001032713603564437016356 00000000000000# -*-perl-*- $description = "Test pattern rules."; $details = ""; use Cwd; $dir = cwd; $dir =~ s,.*/([^/]+)$,../$1,; # TEST #0: Make sure that multiple patterns where the same target # can be built are searched even if the first one fails # to match properly. # run_make_test(q! .PHONY: all all: case.1 case.2 case.3 # We can't have this, due to "Implicit Rule Search Algorithm" step 5c #xxx: void # 1 - existing file %.1: void @exit 1 %.1: #MAKEFILE# @exit 0 # 2 - phony %.2: void @exit 1 %.2: 2.phony @exit 0 .PHONY: 2.phony # 3 - implicit-phony %.3: void @exit 1 %.3: 3.implicit-phony @exit 0 3.implicit-phony: !, '', ''); # TEST #1: make sure files that are built via implicit rules are marked # as targets (Savannah bug #12202). # run_make_test(' TARGETS := foo foo.out .PHONY: all foo.in all: $(TARGETS) %: %.in @echo $@ %.out: % @echo $@ foo.in: ; @: ', '', 'foo foo.out'); # TEST #2: make sure intermediate files that also happened to be # prerequisites are not removed (Savannah bug #12267). # run_make_test(' $(dir)/foo.o: $(dir)/foo.y: @echo $@ %.c: %.y touch $@ %.o: %.c @echo $@ .PHONY: install install: $(dir)/foo.c ', "dir=$dir", "$dir/foo.y touch $dir/foo.c $dir/foo.o"); unlink("$dir/foo.c"); # TEST #3: make sure precious flag is set properly for targets # that are built via implicit rules (Savannah bug #13218). # run_make_test(' .DELETE_ON_ERROR: .PRECIOUS: %.bar %.bar:; @touch $@ && exit 1 $(dir)/foo.bar: ', "dir=$dir", "#MAKE#: *** [#MAKEFILE#:6: $dir/foo.bar] Error 1", 512); unlink("$dir/foo.bar"); # TEST #4: make sure targets of a matched implicit pattern rule are # never considered intermediate (Savannah bug #13022). # run_make_test(' .PHONY: all all: foo.c foo.o %.h %.c: %.in touch $*.h touch $*.c %.o: %.c %.h echo $+ >$@ %.o: %.c @echo wrong rule foo.in: touch $@ ', '', 'touch foo.in touch foo.h touch foo.c echo foo.c foo.h >foo.o'); unlink('foo.in', 'foo.h', 'foo.c', 'foo.o'); # TEST #5: make sure both prefix and suffix patterns work with multiple # target patterns (Savannah bug #26593). # run_make_test(' all: foo.s1 foo.s2 p1.foo p2.foo p1.% p2.%: %.orig @echo $@ %.s1 %.s2: %.orig @echo $@ .PHONY: foo.orig ', '', "foo.s1\np1.foo\n"); # TEST 6: Make sure that non-target files are still eligible to be created # as part of implicit rule chaining. Savannah bug #17752. run_make_test(sprintf(q! BIN = xyz COPY = $(BIN).cp SRC = $(BIN).c allbroken: $(COPY) $(BIN) ; @echo ok $(SRC): ; @echo 'main(){}' > $@ %%.cp: %% ; @cp $< $@ %% : %%.c ; @cp $< $@ clean: ; @%s $(SRC) $(COPY) $(BIN) !, $CMD_rmfile), '', "ok\n"); unlink(qw(xyz xyz.cp xyz.c)); # TEST 7: Make sure that all prereqs of all "also_make" targets get created # before any of the things that depend on any of them. Savannah bug #19108. run_make_test(q! final: x ; @echo $@ x: x.t1 x.t2 ; @echo $@ x.t2: dep dep: ; @echo $@ %.t1 %.t2: ; @echo $*.t1 ; echo $*.t2 !, '', "dep\nx.t1\nx.t2\nx\nfinal\n"); # TEST 8: Verify we can remove pattern rules. Savannah bug #18622. my @f = (qw(foo.w foo.ch)); touch(@f); run_make_test(q! CWEAVE := : # Disable builtin rules %.tex : %.w %.tex : %.w %.ch !, 'foo.tex', "#MAKE#: *** No rule to make target 'foo.tex'. Stop.", 512); unlink(@f); # TEST #9: Test shortest stem selection in pattern rules. run_make_test(' %.x: ;@echo one %-mt.x: ;@echo two all: foo.x foo-mt.x ', '', "one\ntwo"); 1; # Test pattern rules building the same targets # See SV 54233. Rely on our standard test timeout to break the loop touch('a.c'); run_make_test(q! all: a.elf a.dbg %.elf %.lnk: %.c ; : $*.elf $*.lnk %.elf %.dbg: %.lnk ; : $*.elf $*.dbg !, '-j2', ": a.elf a.lnk\n: a.elf a.dbg\n"); unlink('a.c'); # SV 56655: Test patterns matching files containing whitespace touch('some file.yy'); run_make_test(q! %.xx : %.yy ; @echo matched !, '"some file.xx"', "matched\n"); unlink('some file.xx', 'some file.yy'); # 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: make-4.3/tests/scripts/features/reinvoke0000644000175000017500000000401513603564437015445 00000000000000# -*-mode: perl-*- $description = "Test GNU make's auto-reinvocation feature."; $details = "\ If the makefile or one it includes can be rebuilt then it is, and make is reinvoked. We create a rule to rebuild the makefile from a temp file, then touch the temp file to make it newer than the makefile."; $omkfile = $makefile; &utouch(-600, 'incl.mk'); # For some reason if we don't do this then the test fails for systems # with sub-second timestamps, maybe + NFS? Not sure. &utouch(-1, 'incl-1.mk'); run_make_test(' all: ; @echo running rules. #MAKEFILE# incl.mk: incl-1.mk @echo rebuilding $@ @echo >> $@ include incl.mk', '', "rebuilding incl.mk\nrunning rules.\n"); # Make sure updating the makefile itself also works &utouch(-600, $omkfile); run_make_test(undef, '', "rebuilding #MAKEFILE#\nrunning rules.\n"); &rmfiles('incl.mk', 'incl-1.mk'); # In this test we create an included file that's out-of-date, but then # the rule doesn't update it. Make shouldn't re-exec. &utouch(-600, 'b','a'); #&utouch(-10, 'a'); &touch('c'); run_make_test(' all: ; @echo hello a : b ; echo >> $@ b : c ; [ -f $@ ] || echo >> $@ c: ; echo >> $@ include $(F)', 'F=a', "[ -f b ] || echo >> b\nhello\n"); # Now try with the file we're not updating being the actual file we're # including: this and the previous one test different parts of the code. run_make_test(undef, 'F=b', "[ -f b ] || echo >> b\nhello\n"); &rmfiles('a','b','c'); # Ensure command line variables are preserved properly across re-exec # Tests for Savannah bug #30723 run_make_test(' ifdef RECURSE -include foo30723 endif recurse: ; @$(MAKE) -f $(MAKEFILE_LIST) RECURSE=1 test test: ; @echo F.O=$(F.O) foo30723: ; @touch $@ ', '--no-print-directory F.O=bar', "F.O=bar\n"); unlink('foo30723'); # 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: make-4.3/tests/scripts/features/vpathplus0000644000175000017500000000511113603564437015647 00000000000000# -*-perl-*- $description = "Tests the new VPATH+ functionality added in 3.76."; $details = ""; $VP = "$workdir$pathsep"; open(MAKEFILE,"> $makefile"); # The Contents of the MAKEFILE ... print MAKEFILE "VPATH = $VP\n"; print MAKEFILE <<'EOMAKE'; .SUFFIXES: .a .b .c .d .PHONY: general rename notarget intermediate %.a: %.b: %.c: %.d: %.a : %.b cat $^ > $@ %.b : %.c cat $^ > $@ 2>/dev/null || exit 1 %.c :: %.d cat $^ > $@ # General testing info: general: foo.b foo.b: foo.c bar.c # Rename testing info: rename: $(VPATH)/foo.c foo.d # Target not made testing info: notarget: notarget.b notarget.c: notarget.d -@echo "not creating $@ from $^" # Intermediate files: intermediate: inter.a EOMAKE close(MAKEFILE); @touchedfiles = (); $off = -500; sub touchfiles { foreach (@_) { &utouch($off, $_); $off += 10; push(@touchedfiles, $_); } } # Run the general-case test &touchfiles("$VP/foo.d", "$VP/bar.d", "$VP/foo.c", "$VP/bar.c", "foo.b", "bar.d"); &run_make_with_options($makefile,"general",&get_logfile); push(@touchedfiles, "bar.c"); $answer = "cat bar.d > bar.c cat ${VP}foo.c bar.c > foo.b 2>/dev/null || exit 1 "; &compare_output($answer,&get_logfile(1)); # Test rules that don't make the target correctly &touchfiles("$VP/notarget.c", "notarget.b", "notarget.d"); &run_make_with_options($makefile,"notarget",&get_logfile,512); $answer = "not creating notarget.c from notarget.d cat notarget.c > notarget.b 2>/dev/null || exit 1 $make_name: *** [$makefile:13: notarget.b] Error 1 "; &compare_output($answer,&get_logfile(1)); # Test intermediate file handling (part 1) &touchfiles("$VP/inter.d"); &run_make_with_options($makefile,"intermediate",&get_logfile); push(@touchedfiles, "inter.a", "inter.b"); my $be = pack("L", 1) eq pack("N", 1); my $intfiles = $be ? "inter.c inter.b" : "inter.b inter.c"; $answer = "cat ${VP}inter.d > inter.c cat inter.c > inter.b 2>/dev/null || exit 1 cat inter.b > inter.a rm $intfiles "; &compare_output($answer,&get_logfile(1)); # Test intermediate file handling (part 2) &utouch(-20, "inter.a"); &utouch(-10, "$VP/inter.b"); &touch("$VP/inter.d"); push(@touchedfiles, "$VP/inter.b", "$VP/inter.d"); &run_make_with_options($makefile,"intermediate",&get_logfile); $answer = "cat ${VP}inter.d > inter.c cat inter.c > inter.b 2>/dev/null || exit 1 cat inter.b > inter.a rm inter.c "; &compare_output($answer,&get_logfile(1)); unlink @touchedfiles unless $keep; 1; ### Local Variables: ### eval: (setq whitespace-action (delq 'auto-cleanup whitespace-action)) ### End: make-4.3/tests/scripts/features/vpathgpath0000644000175000017500000000210413603564437015766 00000000000000# -*-perl-*- $description = "Tests VPATH+/GPATH functionality."; $details = ""; $VP = "$workdir$pathsep"; open(MAKEFILE,"> $makefile"); # The Contents of the MAKEFILE ... print MAKEFILE "VPATH = $VP\n"; print MAKEFILE <<'EOMAKE'; GPATH = $(VPATH) .SUFFIXES: .a .b .c .d .PHONY: general rename notarget intermediate %.a: %.b: %.c: %.d: %.a : %.b ; cat $^ > $@ %.b : %.c ; cat $^ > $@ %.c :: %.d ; cat $^ > $@ # General testing info: general: foo.b foo.b: foo.c bar.c EOMAKE close(MAKEFILE); @touchedfiles = (); $off = -500; sub touchfiles { foreach (@_) { ($f = $_) =~ s,VP/,$VP,g; &utouch($off, $f); $off += 10; push(@touchedfiles, $f); } } # Run the general-case test &touchfiles("VP/foo.d", "VP/bar.d", "VP/foo.c", "VP/bar.c", "foo.b", "bar.d"); &run_make_with_options($makefile,"general",&get_logfile()); push(@touchedfiles, "bar.c"); $answer = "$make_name: Nothing to be done for 'general'.\n"; &compare_output($answer,&get_logfile(1)); unlink(@touchedfiles) unless $keep; 1; make-4.3/tests/scripts/features/order_only0000644000175000017500000000433513603564437016004 00000000000000# -*-perl-*- $description = "Test order-only prerequisites."; $details = "\ Create makefiles with various combinations of normal and order-only prerequisites and ensure they behave properly. Test the \$| variable."; # TEST #0 -- Basics run_make_test(' %r: | baz ; @echo $< $^ $| bar: foo foo:;@: baz:;@:', '', "foo foo baz\n"); # TEST #1 -- First try: the order-only prereqs need to be built. run_make_test(q! foo: bar | baz @echo '$$^ = $^' @echo '$$| = $|' touch $@ .PHONY: baz bar baz: touch $@!, '', "touch bar\ntouch baz\n\$^ = bar\n\$| = baz\ntouch foo\n"); # TEST #2 -- now we do it again: baz is PHONY but foo should _NOT_ be updated run_make_test(undef, '', "touch baz\n"); unlink(qw(foo bar baz)); # TEST #3 -- Make sure the order-only prereq was promoted to normal. run_make_test(q! foo: bar | baz @echo '$$^ = $^' @echo '$$| = $|' touch $@ foo: baz .PHONY: baz bar baz: touch $@!, '', "touch bar\ntouch baz\n\$^ = bar baz\n\$| = \ntouch foo\n"); # TEST #4 -- now we do it again run_make_test(undef, '', "touch baz\n\$^ = bar baz\n\$| = \ntouch foo\n"); unlink(qw(foo bar baz)); # Test empty normal prereqs # TEST #5 -- make sure the parser was correct. run_make_test(q! foo:| baz @echo '$$^ = $^' @echo '$$| = $|' touch $@ .PHONY: baz baz: touch $@!, '', "touch baz\n\$^ = \n\$| = baz\ntouch foo\n"); # TEST #6 -- now we do it again: this time foo won't be built run_make_test(undef, '', "touch baz\n"); unlink(qw(foo baz)); # Test order-only in pattern rules # TEST #7 -- make sure the parser was correct. run_make_test(q! %.w : %.x | baz @echo '$$^ = $^' @echo '$$| = $|' touch $@ all: foo.w .PHONY: baz foo.x baz: touch $@!, '', "touch foo.x\ntouch baz\n\$^ = foo.x\n\$| = baz\ntouch foo.w\n"); # TEST #8 -- now we do it again: this time foo.w won't be built run_make_test(undef, '', "touch baz\n"); unlink(qw(foo.w foo.x baz)); # TEST #9 -- make sure that $< is set correctly in the face of order-only # prerequisites in pattern rules. run_make_test(' %r: | baz ; @echo $< $^ $| bar: foo foo:;@: baz:;@:', '', "foo foo baz\n"); 1; make-4.3/tests/scripts/features/mult_targets0000644000175000017500000000241713603564437016341 00000000000000$description = "The following test creates a makefile to test that a \n " ."rule with multiple targets is equivalent to writing \n" ."many rules, each with one target, and all identical aside\n" ."from that."; $details = "A makefile is created with one rule and two targets. Make \n" ."is called twice, once for each target, and the output which \n" ."contains the target name with \$@ is looked at for the changes.\n" ."This test also tests the substitute function by replacing \n" ."the word output with nothing in the target name giving either\n" ."an output of \"I am little\" or \"I am big\""; open(MAKEFILE,"> $makefile"); # The Contents of the MAKEFILE ... print MAKEFILE "bigoutput littleoutput: test.h\n"; print MAKEFILE "\t\@echo I am \$(subst output,,\$@)\n"; # END of Contents of MAKEFILE close(MAKEFILE); &touch("test.h"); &run_make_with_options($makefile,"bigoutput",&get_logfile); # Create the answer to what should be produced by this Makefile $answer = "I am big\n"; &compare_output($answer,&get_logfile(1)); &run_make_with_options($makefile,"littleoutput",&get_logfile); $answer = "I am little\n"; &compare_output($answer,&get_logfile(1)); unlink "test.h"; 1; make-4.3/tests/scripts/features/grouped_targets0000644000175000017500000000474013603564437017026 00000000000000# -*-perl-*- $description = "This test is about grouped multiple targets indicated by &:"; $details = "Here we test for requirements like\n" ."- if multiple such targets are updated, the recipe is run once\n" ."- parsing issues related to the &: syntax itself\n"; # Parsing: &: allowed without any targets. run_make_test(q{ .PHONY: all &:; all: ;@printf '' }, '', ""); # Parsing: &: works not preceded by whitespace. run_make_test(q{ foo&:;@echo foo }, 'foo', "foo"); # Ordinary rule runs recipe four times for t1 t2 t3 t4. # Grouped target rule runs recipe once; others are considered updated. run_make_test(q{ .PHONY: t1 t2 t3 t4 g1 g2 g3 g4 t1 t2 t3 t4: ; @echo $@ g1 g2 g3 g4 &: ; @echo $@ }, 't1 t2 t3 t4 g1 g2 g3 g4', "t1\n" ."t2\n" ."t3\n" ."t4\n" ."g1\n" ."#MAKE#: Nothing to be done for 'g2'.\n" ."#MAKE#: Nothing to be done for 'g3'.\n" ."#MAKE#: Nothing to be done for 'g4'."); # Similar to previous test, but targets come from m1 phony # rather than from the command line. We don't see "Nothing to # be done for" messages. Also, note reversed order g4 g3 ... # Thus the auto variable $@ is "g4" when that rule fires. run_make_test(q{ .PHONY: m1 t1 t2 t3 t4 g1 g2 g3 g4 m1: t1 t2 t3 t4 g4 g3 g2 g1 t1 t2 t3 t4: ; @echo $@ g1 g2 g3 g4&: ; @echo $@ }, '', "t1\nt2\nt3\nt4\ng4"); # Set a grouped target recipe for existing targets run_make_test(q{ .PHONY: M a b M: a b a: a b&: ; @echo Y b: }, '', "Y"); # grouped targets require a recipe run_make_test(q{ .PHONY: M a b M: a b a b&: }, '', "#MAKEFILE#:4: *** grouped targets must provide a recipe. Stop.", 512); # Pattern rules use grouped targets anyway so it's a no-op run_make_test(q{ .PHONY: M M: a.q b.q a.% b.%&: ; @echo Y }, '', "Y"); # Double-colon grouped target rules. run_make_test(q{ .PHONY: M a b c d e f g h M: a b a b c&:: ; @echo X c d e&:: ; @echo Y f g h&:: ; @echo Z }, '', "X"); run_make_test(q{ .PHONY: M a b c d e f g h M: c a b c&:: ; @echo X c d e&:: ; @echo Y f g h&:: ; @echo Z }, '', "X\nY"); run_make_test(q{ .PHONY: M a b c d e f g h M: a b c d e a b c&:: ; @echo X c d e&:: ; @echo Y f g h&:: ; @echo Z }, '', "X\nY"); run_make_test(q{ .PHONY: M a b c d e f g h M: d e a b c&:: ; @echo X c d e&:: ; @echo Y f g h&:: ; @echo Z }, '', "Y"); run_make_test(q{ .PHONY: M a b c d e f g h M: f g h a b c&:: ; @echo X c d e&:: ; @echo Y f g h&:: ; @echo Z }, '', "Z"); # This tells the test driver that the perl test script executed properly. 1; make-4.3/tests/scripts/features/vpath30000644000175000017500000000170013603564437015026 00000000000000# -*-perl-*- $description = "Test the interaction of the -lfoo feature and vpath"; $details = ""; my @dirs_to_make = qw(a1 b1 a2 b2 b3); for my $d (@dirs_to_make) { mkdir($d, 0777); } my @files_to_touch = ("a1${pathsep}lib1.a", "a1${pathsep}libc.a", "b1${pathsep}lib1.so", "a2${pathsep}lib2.a", "b2${pathsep}lib2.so", "lib3.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 vpath %.so b1 vpath % a2 b2 vpath % b3 all: -l1 -lc -l2 -l3; @echo $^ ', '', $answer); unlink(@files_to_touch); for my $d (@dirs_to_make) { rmdir($d); } 1; make-4.3/tests/scripts/features/quoting0000644000175000017500000000127213603564437015313 00000000000000# -*-perl-*- $description = "The following test creates a makefile to test using \n" . "quotes within makefiles."; open(MAKEFILE,"> $makefile"); # The Contents of the MAKEFILE ... print MAKEFILE <<'EOM'; TEXFONTS = NICEFONT DEFINES = -DDEFAULT_TFM_PATH=\".:$(TEXFONTS)\" test: ; @"echo" 'DEFINES = $(DEFINES)' EOM # END of Contents of MAKEFILE close(MAKEFILE); &run_make_with_options($makefile,"",&get_logfile); # Create the answer to what should be produced by this Makefile $answer = 'DEFINES = -DDEFAULT_TFM_PATH=\".:NICEFONT\"' . "\n"; # COMPARE RESULTS &compare_output($answer,&get_logfile(1)); 1; make-4.3/tests/scripts/features/double_colon0000644000175000017500000001111613603564437016267 00000000000000# -*-perl-*- $description = "Test handling of double-colon rules."; $details = "\ We test these features: - Multiple commands for the same (double-colon) target - Different prerequisites for targets: only out-of-date ones are rebuilt. - Double-colon targets that aren't the goal target. Then we do the same thing for parallel builds: double-colon targets should always be built serially."; # The Contents of the MAKEFILE ... open(MAKEFILE,"> $makefile"); print MAKEFILE <<'EOF'; all: baz foo:: f1.h ; @echo foo FIRST foo:: f2.h ; @echo foo SECOND bar:: ; @echo aaa; sleep 1; echo aaa done bar:: ; @echo bbb baz:: ; @echo aaa baz:: ; @echo bbb biz:: ; @echo aaa biz:: two ; @echo bbb two: ; @echo two f1.h f2.h: ; @echo $@ d :: ; @echo ok d :: d ; @echo oops EOF close(MAKEFILE); # TEST 0: A simple double-colon rule that isn't the goal target. &run_make_with_options($makefile, "all", &get_logfile, 0); $answer = "aaa\nbbb\n"; &compare_output($answer, &get_logfile(1)); # TEST 1: As above, in parallel if ($parallel_jobs) { &run_make_with_options($makefile, "-j10 all", &get_logfile, 0); $answer = "aaa\nbbb\n"; &compare_output($answer, &get_logfile(1)); } # TEST 2: A simple double-colon rule that is the goal target &run_make_with_options($makefile, "bar", &get_logfile, 0); $answer = "aaa\naaa done\nbbb\n"; &compare_output($answer, &get_logfile(1)); # TEST 3: As above, in parallel if ($parallel_jobs) { &run_make_with_options($makefile, "-j10 bar", &get_logfile, 0); $answer = "aaa\naaa done\nbbb\n"; &compare_output($answer, &get_logfile(1)); } # TEST 4: Each double-colon rule is supposed to be run individually &utouch(-5, 'f2.h'); &touch('foo'); &run_make_with_options($makefile, "foo", &get_logfile, 0); $answer = "f1.h\nfoo FIRST\n"; &compare_output($answer, &get_logfile(1)); # TEST 5: Again, in parallel. if ($parallel_jobs) { &run_make_with_options($makefile, "-j10 foo", &get_logfile, 0); $answer = "f1.h\nfoo FIRST\n"; &compare_output($answer, &get_logfile(1)); } # TEST 6: Each double-colon rule is supposed to be run individually &utouch(-5, 'f1.h'); unlink('f2.h'); &touch('foo'); &run_make_with_options($makefile, "foo", &get_logfile, 0); $answer = "f2.h\nfoo SECOND\n"; &compare_output($answer, &get_logfile(1)); # TEST 7: Again, in parallel. if ($parallel_jobs) { &run_make_with_options($makefile, "-j10 foo", &get_logfile, 0); $answer = "f2.h\nfoo SECOND\n"; &compare_output($answer, &get_logfile(1)); } # TEST 8: Test circular dependency check; PR/1671 &run_make_with_options($makefile, "d", &get_logfile, 0); $answer = "ok\n$make_name: Circular d <- d dependency dropped.\noops\n"; &compare_output($answer, &get_logfile(1)); # TEST 8: I don't grok why this is different than the above, but it is... # # Hmm... further testing indicates this might be timing-dependent? # #if ($parallel_jobs) { # &run_make_with_options($makefile, "-j10 biz", &get_logfile, 0); # $answer = "aaa\ntwo\nbbb\n"; # &compare_output($answer, &get_logfile(1)); #} unlink('foo','f1.h','f2.h'); # TEST 9: make sure all rules in s double colon family get executed # (Savannah bug #14334). # &touch('one'); &touch('two'); run_make_test(' .PHONY: all all: result result:: one @echo $^ >>$@ @echo $^ result:: two @echo $^ >>$@ @echo $^ ', '', 'one two'); unlink('result','one','two'); # TEST 10: SV 33399 : check for proper backslash handling run_make_test(' a\ xb :: ; @echo one 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"); # SV 47995 : Parallel double-colon rules with FORCE run_make_test(' all:: ; @echo one all:: joe ; @echo four joe: FORCE ; touch joe-is-forced FORCE: ', '-j5', "one\ntouch joe-is-forced\nfour\n"); unlink('joe-is-forced'); # 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: make-4.3/tests/scripts/features/parallelism0000644000175000017500000001651413603564437016137 00000000000000# -*-perl-*- $description = "Test parallelism (-j) option."; $details = ""; if (!$parallel_jobs) { return -1; } run_make_test(" all : def_1 def_2 def_3 def_1 : ; \@#HELPER# file ONE wait THREE out TWO def_2 : ; \@#HELPER# wait FOUR file THREE def_3 : ; \@#HELPER# wait ONE file FOUR", '-j4', "file ONE\nwait ONE\nfile FOUR\nwait FOUR\nfile THREE\nwait THREE\nTWO"); rmfiles(qw(ONE TWO THREE FOUR)); # Verify -j added to MAKEFLAGS in the makefile run_make_test(" MAKEFLAGS += -j4 all : def_1 def_2 def_3 def_1 : ; \@#HELPER# file ONE wait THREE out TWO def_2 : ; \@#HELPER# wait FOUR file THREE def_3 : ; \@#HELPER# wait ONE file FOUR", '', "file ONE\nwait ONE\nfile FOUR\nwait FOUR\nfile THREE\nwait THREE\nTWO"); rmfiles(qw(ONE TWO THREE FOUR)); # Command line should take precedence run_make_test(" MAKEFLAGS += -j2 all : def_1 def_2 def_3 def_1 : ; \@#HELPER# file ONE wait THREE out TWO def_2 : ; \@#HELPER# wait FOUR file THREE def_3 : ; \@#HELPER# wait ONE file FOUR", '-j4', "file ONE\nwait ONE\nfile FOUR\nwait FOUR\nfile THREE\nwait THREE\nTWO"); rmfiles(qw(ONE TWO THREE FOUR)); # Test parallelism with included files. Here we sleep/echo while # building the included files, to test that they are being built in # parallel. run_make_test(" all: 1 2; \@#HELPER# out success -include 1.inc 2.inc 1.inc: \t\@#HELPER# file ONE.inc wait THREE.inc file TWO.inc \t\@echo '1: ; \@#HELPER# file ONE wait THREE file TWO' > \$\@ 2.inc: \t\@#HELPER# wait ONE.inc file THREE.inc \t\@echo '2: ; \@#HELPER# wait ONE file THREE' > \$\@", "-j4", "file ONE.inc\nwait ONE.inc\nfile THREE.inc\nwait THREE.inc\nfile TWO.inc\nfile ONE\nwait ONE\nfile THREE\nwait THREE\nfile TWO\nsuccess\n", 0, 7); rmfiles(qw(ONE.inc TWO.inc THREE.inc ONE TWO THREE 1.inc 2.inc)); # Test parallelism with included files--this time recurse first and make # sure the jobserver works. run_make_test(" recurse: ; \@\$(MAKE) --no-print-directory -f #MAKEFILE# INC=yes all all: 1 2; \@#HELPER# out success INC = no ifeq (\$(INC),yes) -include 1.inc 2.inc endif 1.inc: ; \@#HELPER# file ONE.inc wait THREE.inc file TWO.inc; echo '1: ; \@#HELPER# file ONE wait THREE file TWO' > \$\@ 2.inc: ; \@#HELPER# wait ONE.inc file THREE.inc; echo '2: ; \@#HELPER# wait ONE file THREE' > \$\@", "-j4", "file ONE.inc\nwait ONE.inc\nfile THREE.inc\nwait THREE.inc\nfile TWO.inc\nfile ONE\nwait ONE\nfile THREE\nwait THREE\nfile TWO\nsuccess\n", 0, 7); rmfiles(qw(ONE.inc TWO.inc THREE.inc ONE TWO THREE 1.inc 2.inc)); # Grant Taylor reports a problem where tokens can be lost (not written back # to the pipe when they should be): this happened when there is a $(shell ...) # function in an exported recursive variable. I added some code to check # for this situation and print a message if it occurred. This test used # to trigger this code when I added it but no longer does after the fix. # We have to increase the timeout from the default (5s) on this test. run_make_test(" export HI = \$(shell \$(\$\@.CMD)) first.CMD = #HELPER# out hi second.CMD = #HELPER# sleep 4 .PHONY: all first second all: first second first second: ; \@#HELPER# out \$\@ sleep 1 out \$\@", '-j2', "first\nsleep 1\nfirst\nsecond\nsleep 1\nsecond", 0, 7); # Michael Matz reported a bug where if make is running in # parallel without -k and two jobs die in a row, but not too close to each # other, then make will quit without waiting for the rest of the jobs to die. run_make_test(" .PHONY: all fail.1 fail.2 fail.3 ok all: fail.1 ok fail.2 fail.3 .RECIPEPREFIX := > fail.1 fail.2 fail.3: > \@#HELPER# sleep \$(patsubst fail.%,%,\$\@) > \@#HELPER# out Fail > \@#HELPER# fail 1 ok: > \@#HELPER# sleep 4 > \@#HELPER# out OK", '-rR -j5', "sleep 1\nFail\nfail 1 #MAKE#: *** [#MAKEFILE#:10: fail.1] Error 1 #MAKE#: *** Waiting for unfinished jobs.... sleep 2\nFail\nfail 1 #MAKE#: *** [#MAKEFILE#:10: fail.2] Error 1 sleep 3\nFail\nfail 1 #MAKE#: *** [#MAKEFILE#:10: fail.3] Error 1 sleep 4\nOK", 512); # Test for Savannah bug #15641. # run_make_test(' .PHONY: all all:; @: -include foo.d foo.d: comp ; @#HELPER# out $@ comp: mod_a.o mod_b.o; @: mod_a.o mod_b.o: ; @#HELPER# fail 1 ', '-j2', "fail 1\nfail 1\n"); # TEST #9 -- Savannah bugs 3330 and 15919 # In earlier versions of make this will either give the wrong answer, or hang. utouch(-10, 'target'); run_make_test('target: intermed ; #HELPER# file $@ .INTERMEDIATE: intermed intermed: | phony ; #HELPER# file $@ .PHONY: phony phony: ; : phony', '-rR -j', ': phony'); rmfiles('target'); # TEST #11: Make sure -jN from MAKEFLAGS is processed even when we re-exec # See Savannah bug #33873 $extraENV{MAKEFLAGS} = '-j4'; run_make_test(q! things = thing1 thing2 all: $(things) thing1:; @#HELPER# wait thing2start file $@start wait thing2end out $@end thing2:; @#HELPER# file $@start wait thing1start file $@end -include inc.mk inc.mk: ; @touch $@ !, '', "file thing2start\nwait thing2start\nfile thing1start\nwait thing1start\nfile thing2end\nwait thing2end\nthing1end\n"); delete $extraENV{MAKEFLAGS}; rmfiles(qw(inc.mk thing1start thing1end thing2start thing2end)); # Ensure intermediate/secondary files are not pruned incorrectly. # See Savannah bug #30653 utouch(-15, 'file2'); utouch(-10, 'file4'); utouch(-5, 'file1'); run_make_test(q! .INTERMEDIATE: file3 file4: file3 ; @mv -f $< $@ file3: file2 ; touch $@ file2: file1 ; @touch $@ !, '--no-print-directory -j2', "touch file3"); rmfiles('file1', 'file2', 'file3', 'file4'); # Ensure that the jobserver is preserved across make re-exec. run_make_test(q! all: one two one: ;@ #HELPER# wait TWO file ONE two: ;@ #HELPER# file TWO include fff1.mk fff1.mk: ; touch $@ !, '-j2', "touch fff1.mk\nfile TWO\nwait TWO\nfile ONE\n"); unlink('fff1.mk', 'ONE', 'TWO'); # Test if a sub-make needs to re-exec and the makefile is built via # sub-make. Reported by Masahiro Yamada run_make_test(q! all: ; @$(MAKE) -f #MAKEFILE# recurse recurse: one two ; @#HELPER# out $@ one: ;@ #HELPER# wait TWO file ONE two: ;@ #HELPER# file TWO mkinclude: ; touch fff1.mk ifeq ($(MAKECMDGOALS),recurse) include fff1.mk fff1.mk: ; @$(MAKE) -f #MAKEFILE# mkinclude endif !, '--no-print-directory -j2', "touch fff1.mk\nfile TWO\nwait TWO\nfile ONE\nrecurse\n"); unlink('fff1.mk', 'ONE', 'TWO'); # Make sure that all jobserver FDs are closed if we need to re-exec the # master copy. # # First, find the "default" file descriptors we normally use # Then make sure they're still used. # # Right now we don't have a way to run a makefile and capture the output # without checking it, so we can't really write this test. # run_make_test(' # submake: ; @$(MAKE) --no-print-directory -f #MAKEFILE# fdprint 5>output # dependfile: ; @echo FOO=bar > $@ # INCL := true # FOO=foo # ifeq ($(INCL),true) # -include dependfile # endif # fdprint: ; @echo $(filter --jobserver%,$(MAKEFLAGS)) # recurse: ; @$(MAKE) --no-print-directory -f #MAKEFILE# submake INCL=true', # '-j2 INCL=false fdprint', # 'bar'); # rmfiles(qw(dependfile output)); # # Do it again, this time where the include is done by the non-master make. # run_make_test(undef, '-j2 recurse INCL=false', 'bar'); # rmfiles(qw(dependfile output)); 1; make-4.3/tests/scripts/features/jobserver0000644000175000017500000000723613603564437015634 00000000000000# -*-perl-*- $description = "Test jobserver."; $details = "These tests are ones that specifically are different when the jobserver feature is available. Most -j tests are the same whether or not jobserver is available, and those appear in the 'parallelism' test suite."; exists $FEATURES{'jobserver'} or return -1; if (!$parallel_jobs) { return -1; } # Shorthand my $np = '--no-print-directory'; # Simple test of MAKEFLAGS settings run_make_test(q! SHOW = $(patsubst --jobserver-auth=%,--jobserver-auth=,$(MAKEFLAGS)) recurse: ; @echo $@: "/$(SHOW)/"; $(MAKE) -f #MAKEFILE# all all:;@echo $@: "/$(SHOW)/" !, "-j2 $np", "recurse: /-j2 --jobserver-auth= $np/\nall: /-j2 --jobserver-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=,$(MAKEFLAGS)) recurse: ; @echo $@: "/$(SHOW)/"; $(MAKE) -f #MAKEFILE# all all:;@echo $@: "/$(SHOW)/" !, '', "recurse: /-j2 --jobserver-auth= $np/\nall: /-j2 --jobserver-auth= $np/\n"); delete $extraENV{MAKEFLAGS}; # Test override of -jN $extraENV{MAKEFLAGS} = "-j9 $np"; run_make_test(q! SHOW = $(patsubst --jobserver-auth=%,--jobserver-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= $np/\n#MAKE#[1]: warning: -j3 forced in submake: resetting jobserver mode.\nrecurse2: /-j3 --jobserver-auth= $np/\nall: /-j3 --jobserver-auth= $np/\n"); delete $extraENV{MAKEFLAGS}; # Test override of -jN with -j run_make_test(q! SHOW = $(patsubst --jobserver-auth=%,--jobserver-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= $np/\n#MAKE#[1]: warning: -j0 forced in submake: resetting 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 # get one from the original invocation and none from the re-exec. # See Savannah bug #18124 unlink('inc.mk'); run_make_test(q! -include inc.mk recur: # @echo 'MAKEFLAGS = $(MAKEFLAGS)' @rm -f inc.mk @$(MAKE) -j2 -f #MAKEFILE# all all: # @echo 'MAKEFLAGS = $(MAKEFLAGS)' @echo $@ inc.mk: # @echo 'MAKEFLAGS = $(MAKEFLAGS)' @echo 'FOO = bar' > $@ !, "$np -j2", "#MAKE#[1]: warning: -j2 forced in submake: resetting jobserver mode.\nall\n"); unlink('inc.mk'); # Test recursion which is hidden from make. # See Savannah bug #39934 # Or Red Hat bug https://bugzilla.redhat.com/show_bug.cgi?id=885474 # Windows doesn't use a pipe, and doesn't close access, so this won't happen. if ($port_type ne 'W32') { open(MAKEFILE,"> Makefile2"); print MAKEFILE ' vpath %.c ../ foo: '; close(MAKEFILE); run_make_test(q! default: ; @ #MAKEPATH# -f Makefile2 !, "-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: make-4.3/tests/scripts/features/suffixrules0000644000175000017500000000401113611136373016167 00000000000000# -*-perl-*- $description = "Test suffix rules."; $details = ""; # TEST #0: Clear all suffixes touch('foo.c'); run_make_test(q! .SUFFIXES: all: foo.o ; @echo $@ $< !, '', "#MAKE#: *** No rule to make target 'foo.o', needed by 'all'. Stop.\n", 512); unlink('foo.c'); # Test #1: Add a simple suffix rule touch('foo.baz'); run_make_test(q! .SUFFIXES: .biz .baz .baz.biz: ; @echo make $@ !, 'foo.biz', "make foo.biz\n"); unlink('foo.baz'); # Test #2: Make sure the defaults still work touch('foo.c'); run_make_test(undef, 'foo.o COMPILE.c=@echo OUTPUT_OPTION=', "foo.c\n"); unlink('foo.c'); # Test #3: Replacing all suffixes touch('foo.baz'); run_make_test(q! .SUFFIXES: .SUFFIXES: .biz .baz .baz.biz: ; @echo make $@ !, 'foo.biz', "make foo.biz\n"); unlink('foo.baz'); # SV 40657: Test #4: "Suffix rules" with deps are normal rules my $prewarn = 'warning: ignoring prerequisites on suffix rule definition'; touch('foo.bar'); run_make_test(q! .SUFFIXES: .SUFFIXES: .biz .baz $X.POSIX: .baz.biz: foo.bar ; @echo make $@ from $< !, 'X=1 .baz.biz', "#MAKEFILE#:7: $prewarn\nmake .baz.biz from foo.bar\n"); # SV 40657: Test #5: In POSIX mode we don't get a warning run_make_test(undef, 'X= .baz.biz', "make .baz.biz from foo.bar\n"); unlink('foo.bar'); # SV 40657: Test #6: In POSIX mode, no pattern rules should be created utouch(-20, 'foo.baz'); run_make_test(undef, 'X= foo.biz', "#MAKE#: *** No rule to make target 'foo.biz'. Stop.\n", 512); # SV 40657: Test #7: In Non-POSIX mode, a pattern rule is created run_make_test(undef, 'X=1 foo.biz', "#MAKEFILE#:7: $prewarn\nmake foo.biz from foo.baz\n"); # SV 40657: Test #8: ... but any prerequisites are ignored utouch(-10, 'foo.biz'); touch('foo.bar'); run_make_test(undef, 'X=1 foo.biz', "#MAKEFILE#:7: $prewarn\n#MAKE#: 'foo.biz' is up to date.\n"); unlink('foo.baz', 'foo.biz', 'foo.bar'); # Complete 1; make-4.3/tests/scripts/features/shell_assignment0000644000175000017500000000341013603564437017160 00000000000000# -*-perl-*- $description = "Test BSD-style shell assignments (VAR != VAL) for variables."; $details = ""; # TEST 0: Basic shell assignment (!=). run_make_test(' .POSIX: demo1!=printf \' 1 2 3\n4\n\n5 \n \n 6\n\n\n\n\' demo2 != printf \'7 8\n \' demo3 != printf \'$$(demo2)\' demo4 != printf \' 2 3 \n\' demo5 != printf \' 2 3 \n\n\' all: ; @echo "<$(demo1)> <$(demo2)> <$(demo3)> <$(demo4)> <${demo5}>" ', '', "< 1 2 3 4 5 6 > <7 8 > <7 8 > < 2 3 > < 2 3 >\n"); # TEST 1: Handle '#' the same way as BSD make run_make_test(' foo1!=echo bar#baz hash != printf \'\043\' foo2!= echo "bar$(hash)baz" all: ; @echo "<$(foo1)> <$(hash)> <$(foo2)>" ', '', " <#> \n"); # TEST 2: shell assignment variables (from !=) should be recursive. # Note that variables are re-evaluated later, so the shell can output # a value like $(XYZZY) as part of !=. The $(XYZZY) will be EVALUATED # when the value containing it is evaluated. On the negative side, this # means if you don't want this, you need to escape dollar signs as $$. # On the positive side, it means that shell programs can output macros # that are then evaluated as they are traditionally evaluated.. and that # you can use traditional macro evaluation semantics to implement !=. run_make_test(' XYZZY = fiddle-dee-dee dollar = $$ VAR3 != printf \'%s\' \'$(dollar)(XYZZY)\' all: ; @echo "<$(VAR3)>" ', '', "\n"); # TEST 3: Overrides invoke shell anyway; they just don't store the result # in a way that is visible. run_make_test(' override != echo abc > ,abc ; cat ,abc all: ; @echo "<$(override)>" ; cat ,abc ', 'override=xyz', "\nabc\n"); unlink(',abc'); 1; make-4.3/tests/scripts/features/utf80000644000175000017500000000050013603564437014504 00000000000000# -*-perl-*- $description = "Test support for UTF-8."; $details = ""; # Verify that the UTF-8 BOM is ignored. run_make_test("\xEF\xBB\xBFall: ; \@echo \$\@\n", '', "all"); # This tells the test driver that the perl test script executed properly. 1; make-4.3/tests/scripts/features/vpath0000644000175000017500000000563013603564437014751 00000000000000# -*-perl-*- $description = "The following test creates a makefile to test the \n" ."vpath directive which allows you to specify a search \n" ."path for a particular class of filenames, those that\n" ."match a particular pattern."; $details = "This tests the vpath directive by specifying search directories\n" ."for one class of filenames with the form: vpath pattern directories" ."\nIn this test, we specify the working directory for all files\n" ."that end in c or h. We also test the variables $@ (which gives\n" ."target name) and $^ (which is a list of all dependencies \n" ."including the directories in which they were found). It also\n" ."uses the function firstword used to extract just the first\n" ."dependency from the entire list."; open(MAKEFILE,"> $makefile"); # The Contents of the MAKEFILE ... print MAKEFILE "vpath %.c foo\n"; print MAKEFILE "vpath %.c $workdir\n"; print MAKEFILE "vpath %.h $workdir\n"; print MAKEFILE "objects = main.o kbd.o commands.o display.o insert.o\n"; print MAKEFILE "edit: \$(objects)\n"; print MAKEFILE "\t\@echo cc -o \$@ \$^\n"; print MAKEFILE "main.o : main.c defs.h\n"; print MAKEFILE "\t\@echo cc -c \$(firstword \$^)\n"; print MAKEFILE "kbd.o : kbd.c defs.h command.h\n"; print MAKEFILE "\t\@echo cc -c kbd.c\n"; print MAKEFILE "commands.o : command.c defs.h command.h\n"; print MAKEFILE "\t\@echo cc -c commands.c\n"; print MAKEFILE "display.o : display.c defs.h buffer.h\n"; print MAKEFILE "\t\@echo cc -c display.c\n"; print MAKEFILE "insert.o : insert.c defs.h buffer.h\n"; print MAKEFILE "\t\@echo cc -c insert.c\n"; # END of Contents of MAKEFILE close(MAKEFILE); @files_to_touch = ("$workdir${pathsep}main.c","$workdir${pathsep}defs.h", "$workdir${pathsep}kbd.c","$workdir${pathsep}command.h", "$workdir${pathsep}commands.c","$workdir${pathsep}display.c", "$workdir${pathsep}buffer.h","$workdir${pathsep}insert.c", "$workdir${pathsep}command.c"); &touch(@files_to_touch); &run_make_with_options($makefile,"",&get_logfile); # Create the answer to what should be produced by this Makefile $answer = "cc -c $workdir${pathsep}main.c\ncc -c kbd.c\ncc -c commands.c\n" ."cc -c display.c\n" ."cc -c insert.c\ncc -o edit main.o kbd.o commands.o display.o " ."insert.o\n"; if (&compare_output($answer,&get_logfile(1))) { unlink @files_to_touch; } # TEST 2: after vpath lookup ensure we don't get incorrect circular dependency # warnings due to change of struct file ptr. Savannah bug #13529. mkdir('vpath-d', 0777); run_make_test(q! vpath %.te vpath-d/ .SECONDARY: default: vpath-d/a vpath-d/b vpath-d/a: fail.te vpath-d/b : fail.te vpath-d/fail.te: !, '', "#MAKE#: Nothing to be done for 'default'.\n"); rmdir('vpath-d'); 1; make-4.3/tests/scripts/features/statipattrules0000644000175000017500000000432413603564437016716 00000000000000# -*-perl-*- $description = "Test handling of static pattern rules."; $details = "\ The makefile created in this test has three targets. The filter command is used to get those target names ending in .o and statically creates a compile command with the target name and the target name with .c. It also does the same thing for another target filtered with .elc and creates a command to emacs a .el file"; &touch('bar.c', 'lose.c'); # TEST #0 # ------- run_make_test(' files = foo.elc bar.o lose.o $(filter %.o,$(files)): %.o: %.c ; @echo CC -c $(CFLAGS) $< -o $@ $(filter %.elc,$(files)): %.elc: %.el ; @echo emacs $< ', '', 'CC -c bar.c -o bar.o'); # TEST #1 # ------- run_make_test(undef, 'lose.o', 'CC -c lose.c -o lose.o'); # TEST #2 # ------- &touch("foo.el"); run_make_test(undef, 'foo.elc', 'emacs foo.el'); # Clean up after the first tests. unlink('foo.el', 'bar.c', 'lose.c'); # TEST #3 -- PR/1670: don't core dump on invalid static pattern rules # ------- run_make_test(' .DEFAULT: ; @echo $@ foo: foo%: % %.x % % % y.% % ; @echo $@ ', '', ".x\ny.\nfoo"); # TEST #4 -- bug #12180: core dump on a stat pattern rule with an empty # prerequisite list. run_make_test(' foo.x bar.x: %.x : ; @echo $@ ', '', 'foo.x'); # TEST #5 -- bug #13881: double colon static pattern rule does not # substitute %. run_make_test(' foo.bar:: %.bar: %.baz foo.baz: ;@: ', '', ''); # TEST #6: make sure the second stem does not overwrite the first # perprerequisite's stem (Savannah bug #16053). # run_make_test(' all.foo.bar: %.foo.bar: %.one all.foo.bar: %.bar: %.two all.foo.bar: @echo $* @echo $^ .DEFAULT:;@: ', '', 'all.foo all.one all.foo.two'); # TEST #7: make sure the second stem does not overwrite the first # perprerequisite's stem when second expansion is enabled # (Savannah bug #16053). # run_make_test(' .SECONDEXPANSION: all.foo.bar: %.foo.bar: %.one $$*-one all.foo.bar: %.bar: %.two $$*-two all.foo.bar: @echo $* @echo $^ .DEFAULT:;@: ', '', 'all.foo all.one all-one all.foo.two all.foo-two'); 1; make-4.3/tests/scripts/features/conditionals0000644000175000017500000000507113603564437016314 00000000000000# -*-perl-*- $description = "Check GNU make conditionals."; $details = "Attempt various different flavors of GNU make conditionals."; run_make_test(' arg1 = first arg2 = second arg3 = third arg4 = cc arg5 = second all: ifeq ($(arg1),$(arg2)) @echo arg1 equals arg2 else @echo arg1 NOT equal arg2 endif ifeq \'$(arg2)\' "$(arg5)" @echo arg2 equals arg5 else @echo arg2 NOT equal arg5 endif ifneq \'$(arg3)\' \'$(arg4)\' @echo arg3 NOT equal arg4 else @echo arg3 equal arg4 endif ifndef undefined @echo variable is undefined else @echo variable undefined is defined endif ifdef arg4 @echo arg4 is defined else @echo arg4 is NOT defined endif', '', 'arg1 NOT equal arg2 arg2 equals arg5 arg3 NOT equal arg4 variable is undefined arg4 is defined'); # Test expansion of variables inside ifdef. run_make_test(' foo = 1 FOO = foo F = f DEF = no DEF2 = no ifdef $(FOO) DEF = yes endif ifdef $(F)oo DEF2 = yes endif DEF3 = no FUNC = $1 ifdef $(call FUNC,DEF)3 DEF3 = yes endif all:; @echo DEF=$(DEF) DEF2=$(DEF2) DEF3=$(DEF3)', '', 'DEF=yes DEF2=yes DEF3=yes'); # Test all the different "else if..." constructs run_make_test(' arg1 = first arg2 = second arg3 = third arg4 = cc arg5 = fifth result = ifeq ($(arg1),$(arg2)) result += arg1 equals arg2 else ifeq \'$(arg2)\' "$(arg5)" result += arg2 equals arg5 else ifneq \'$(arg3)\' \'$(arg3)\' result += arg3 NOT equal arg4 else ifndef arg5 result += variable is undefined else ifdef undefined result += arg4 is defined else result += success endif all: ; @echo $(result)', '', 'success'); # Test some random "else if..." construct nesting run_make_test(' arg1 = first arg2 = second arg3 = third arg4 = cc arg5 = second ifeq ($(arg1),$(arg2)) $(info failed 1) else ifeq \'$(arg2)\' "$(arg2)" ifdef undefined $(info failed 2) else $(info success) endif else ifneq \'$(arg3)\' \'$(arg3)\' $(info failed 3) else ifdef arg5 $(info failed 4) else ifdef undefined $(info failed 5) else $(info failed 6) endif .PHONY: all 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: make-4.3/tests/scripts/features/comments0000644000175000017500000000234313603564437015452 00000000000000$description = "The following test creates a makefile to test comments\n" ."and comment continuation to the next line using a \n" ."backslash within makefiles."; $details = "To test comments within a makefile, a semi-colon was placed \n" ."after a comment was started. This should not be reported as\n" ."an error since it is within a comment. We then continue the \n" ."comment to the next line using a backslash. To test whether\n" ."the comment really continued, we place an echo command with some\n" ."text on the line which should never execute since it should be \n" ."within a comment\n"; open(MAKEFILE,"> $makefile"); # The Contents of the MAKEFILE ... print MAKEFILE <<\EOF; # Test comment vs semicolon parsing and line continuation target: # this ; is just a comment \ @echo This is within a comment. @echo There should be no errors for this makefile. EOF # END of Contents of MAKEFILE close(MAKEFILE); &run_make_with_options($makefile,"",&get_logfile); # Create the answer to what should be produced by this Makefile $answer = "There should be no errors for this makefile.\n"; # COMPARE RESULTS &compare_output($answer,&get_logfile(1)) make-4.3/tests/scripts/features/se_statpat0000644000175000017500000000317113603564437015774 00000000000000# -*-perl-*- $description = "Test second expansion in static pattern rules."; $details = ""; # Test #1: automatic variables. # run_make_test(q! .SECONDEXPANSION: .DEFAULT: ; @echo '$@' foo.a foo.b: foo.%: bar.% baz.% foo.a foo.b: foo.%: biz.% | buz.% foo.a foo.b: foo.%: $$@.1 \ $$<.2 \ $$(addsuffix .3,$$^) \ $$(addsuffix .4,$$+) \ $$|.5 \ $$*.6 !, '', 'bar.a baz.a biz.a buz.a foo.a.1 bar.a.2 bar.a.3 baz.a.3 biz.a.3 bar.a.4 baz.a.4 biz.a.4 buz.a.5 a.6 '); # Test #2: target/pattern -specific variables. # run_make_test(q! .SECONDEXPANSION: .DEFAULT: ; @echo '$@' foo.x foo.y: foo.%: $$(%_a) $$($$*_b) foo.x: x_a := bar %.x: x_b := baz !, '', "bar\nbaz\n"); # Test #3: order of prerequisites. # run_make_test(q! .SECONDEXPANSION: .DEFAULT: ; @echo '$@' all: foo.a bar.a baz.a # Subtest #1 foo.a foo.b: foo.%: foo.%.1; @: foo.a foo.b: foo.%: foo.%.2 foo.a foo.b: foo.%: foo.%.3 # Subtest #2 bar.a bar.b: bar.%: bar.%.2 bar.a bar.b: bar.%: bar.%.1; @: bar.a bar.b: bar.%: bar.%.3 # Subtest #3 baz.a baz.b: baz.%: baz.%.1 baz.a baz.b: baz.%: baz.%.2 baz.a baz.b: ; @: !, '', 'foo.a.1 foo.a.2 foo.a.3 bar.a.1 bar.a.2 bar.a.3 baz.a.1 baz.a.2 '); # Test #4: Make sure stem triple-expansion does not happen. # run_make_test(q! .SECONDEXPANSION: foo$$bar: f%r: % $$*.1 @echo '$*' oo$$ba oo$$ba.1: @echo '$@' !, '', 'oo$ba oo$ba.1 oo$ba '); # This tells the test driver that the perl test script executed properly. 1; make-4.3/tests/scripts/features/mult_rules0000644000175000017500000000335313603564437016022 00000000000000$description = "\ The following test creates a makefile to test the presence of multiple rules for one target. One file can be the target of several rules if at most one rule has commands; the other rules can only have dependencies."; $details = "\ The makefile created in this test contains two hardcoded rules for foo.o and bar.o. It then gives another multiple target rule with the same names as above but adding more dependencies. Additionally, another variable extradeps is listed as a dependency but is defined to be null. It can however be defined on the make command line as extradeps=extra.h which adds yet another dependency to the targets."; open(MAKEFILE,"> $makefile"); # The Contents of the MAKEFILE ... print MAKEFILE < $makefile"); # The contents of the Makefile ... print MAKEFILE < $makefile2"); print MAKEFILE "ANOTHER: ; \@echo This is another included makefile\n"; close(MAKEFILE); # Create the answer to what should be produced by this Makefile &run_make_with_options($makefile, "all", &get_logfile); $answer = "There should be no errors for this makefile.\n"; &compare_output($answer, &get_logfile(1)); &run_make_with_options($makefile, "ANOTHER", &get_logfile); $answer = "This is another included makefile\n"; &compare_output($answer, &get_logfile(1)); $makefile = undef; # Try to build the "error" target; this will fail since we don't know # how to create makeit.mk, but we should also get a message (even though # the -include suppressed it during the makefile read phase, we should # see one during the makefile run phase). run_make_test (' -include foo.mk error: foo.mk ; @echo $@ ', '', "#MAKE#: *** No rule to make target 'foo.mk', needed by 'error'. Stop.\n", 512 ); # Make sure that target-specific variables don't impact things. This could # happen because a file record is created when a target-specific variable is # set. run_make_test (' bar.mk: foo := baz -include bar.mk hello: ; @echo hello ', '', "hello\n" ); # Test inheritance of dontcare flag when rebuilding makefiles. # run_make_test(' .PHONY: all all: ; @: -include foo foo: bar; @: ', '', ''); # Make sure that we don't die when the command fails but we dontcare. # (Savannah bug #13216). # run_make_test(' .PHONY: all all:; @: -include foo foo: bar; @: bar:; @exit 1 ', '', ''); # Check include, sinclude, -include with no filenames. # (Savannah bug #1761). run_make_test(' .PHONY: all all:; @: include -include sinclude', '', ''); # Test that the diagnostics is issued even if the target has been # tried before with the dontcare flag (direct dependency case). # run_make_test(' -include foo all: bar foo: baz bar: baz ', '', "#MAKE#: *** No rule to make target 'baz', needed by 'bar'. Stop.\n", 512); # Test that the diagnostics is issued even if the target has been # tried before with the dontcare flag (indirect dependency case). # run_make_test(' -include foo all: bar foo: baz bar: baz 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'); # No target gets correct error run_make_test('', '', '#MAKE#: *** No targets. Stop.', 512); # No target in included file either, still gets correct error. touch('inc1.mk'); run_make_test('include inc1.mk', '', '#MAKE#: *** No targets. Stop.', 512); rmfiles('inc1.mk'); # Include same file multiple times run_make_test(q! default:; @echo DEFAULT include inc1 inc1:; echo > $@ include inc1 !, '', "echo > inc1\nDEFAULT\n"); rmfiles('inc1'); if (defined $ERR_no_such_file) { # Test that the diagnostics is issued even if the target has been # tried before with the dontcare flag (include/-include case). # run_make_test(' include bar -include foo all: foo: baz bar: baz baz: end ', '', "#MAKEFILE#:2: bar: $ERR_no_such_file\n#MAKE#: *** No rule to make target 'end', needed by 'baz'. Stop.\n", 512); # 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: $ERR_no_such_file\n#MAKE#: *** No rule to make target 'inc2'. Stop.\n", 512); 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: $ERR_no_such_file\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: $ERR_no_such_file\n#MAKE#: *** No rule to make target 'foo', needed by 'inc1'. Stop.\n", 512); rmfiles('inc1'); } # Including files that can't be read should show an error if (defined $ERR_unreadable_file) { create_file('inc1', 'FOO := foo'); chmod 0000, 'inc1'; run_make_test(q! include inc1 all:;@echo $(FOO) !, '', "#MAKEFILE#:2: inc1: $ERR_unreadable_file\n#MAKE#: *** No rule to make target 'inc1'. Stop.", 512); # Unreadable files that we know how to successfully recreate should work run_make_test(sprintf(q! all:;@echo $(FOO) include inc1 inc1:; @%s $@ && echo FOO := bar > $@ !, $CMD_rmfile), '', "bar"); rmfiles('inc1'); } 1; make-4.3/tests/scripts/misc/0000755000175000017500000000000013611151241013055 500000000000000make-4.3/tests/scripts/misc/general10000644000175000017500000000277613603564437014452 00000000000000# -*-perl-*- $description = "The following test creates a makefile to test the simple functionality of make. It mimics the rebuilding of a product with dependencies. It also tests the simple definition of VPATH."; open(MAKEFILE,"> $makefile"); print MAKEFILE < /dev/full', '/^#MAKE#: write error/', 256); 1; make-4.3/tests/scripts/misc/general30000644000175000017500000001122413603564437014440 00000000000000# -*-perl-*- $description = "\ This tests random features of the parser that need to be supported, and which have either broken at some point in the past or seem likely to break."; run_make_test(" # We want to allow both empty commands _and_ commands that resolve to empty. EMPTY = .PHONY: all a1 a2 a3 a4 all: a1 a2 a3 a4 a1:; a2: \t a3:;\$(EMPTY) a4: \t\$(EMPTY) \# Non-empty lines that expand to nothing should also be ignored. STR = \# Some spaces TAB = \t \# A TAB and some spaces \$(STR) \$(STR) \$(TAB)", '', "#MAKE#: Nothing to be done for 'all'."); # TEST 2 # Make sure files without trailing newlines are handled properly. # Have to use the old style invocation to test this. $makefile2 = &get_tmpfile; open(MAKEFILE, "> $makefile2"); print MAKEFILE "all:;\@echo FOO = \$(FOO)\nFOO = foo"; close(MAKEFILE); &run_make_with_options($makefile2,"",&get_logfile); $answer = "FOO = foo\n"; &compare_output($answer,&get_logfile(1)); # TEST 3 # Check semicolons in variable references run_make_test(' $(if true,$(info true; true)) all: ; @: ', '', 'true; true'); # TEST 4 # Check that backslashes in command scripts are handled according to POSIX. # Checks Savannah bug # 1332. # Test the fastpath / no quotes run_make_test(' all: @echo foo\ bar @echo foo\ bar @echo foo\ bar @echo foo\ bar @echo foo \ bar @echo foo \ bar @echo foo \ bar @echo foo \ bar ', '', 'foobar foobar foo bar foo bar foo bar foo bar foo bar foo bar'); # Test the fastpath / single quotes # Single quotes don't behave the same in Windows if ($port_type ne 'W32') { run_make_test(q! all: @echo 'foo\ bar' @echo 'foo\ bar' @echo 'foo\ bar' @echo 'foo\ bar' @echo 'foo \ bar' @echo 'foo \ bar' @echo 'foo \ bar' @echo 'foo \ bar' !, '', 'foo\ bar foo\ bar foo\ bar foo\ bar foo \ bar foo \ bar foo \ bar foo \ bar'); } # Test the fastpath / double quotes run_make_test(' all: @echo "foo\ bar" @echo "foo\ bar" @echo "foo\ bar" @echo "foo\ bar" @echo "foo \ bar" @echo "foo \ bar" @echo "foo \ bar" @echo "foo \ bar" ', '', 'foobar foobar foo bar foo bar foo bar foo bar foo bar foo bar'); # Test the slow path / no quotes run_make_test(' all: @echo hi; echo foo\ bar @echo hi; echo foo\ bar @echo hi; echo foo\ bar @echo hi; echo foo\ bar @echo hi; echo foo \ bar @echo hi; echo foo \ bar @echo hi; echo foo \ bar @echo hi; echo foo \ bar ', '', 'hi foobar hi foobar hi foo bar hi foo bar hi foo bar hi foo bar hi foo bar hi foo bar'); # Test the slow path / no quotes. This time we put the slow path # determination _after_ the backslash-newline handling. run_make_test(' all: @echo foo\ bar; echo hi @echo foo\ bar; echo hi @echo foo\ bar; echo hi @echo foo\ bar; echo hi @echo foo \ bar; echo hi @echo foo \ bar; echo hi @echo foo \ bar; echo hi @echo foo \ bar; echo hi ', '', 'foobar hi foobar hi foo bar hi foo bar hi foo bar hi foo bar hi foo bar hi foo bar hi'); # Test the slow path / single quotes run_make_test(q! all: @echo hi; echo 'foo\ bar' @echo hi; echo 'foo\ bar' @echo hi; echo 'foo\ bar' @echo hi; echo 'foo\ bar' @echo hi; echo 'foo \ bar' @echo hi; echo 'foo \ bar' @echo hi; echo 'foo \ bar' @echo hi; echo 'foo \ bar' !, '', 'hi foo\ bar hi foo\ bar hi foo\ bar hi foo\ bar hi foo \ bar hi foo \ bar hi foo \ bar hi foo \ bar'); # Test the slow path / double quotes run_make_test(' all: @echo hi; echo "foo\ bar" @echo hi; echo "foo\ bar" @echo hi; echo "foo\ bar" @echo hi; echo "foo\ bar" @echo hi; echo "foo \ bar" @echo hi; echo "foo \ bar" @echo hi; echo "foo \ bar" @echo hi; echo "foo \ bar" ', '', 'hi foobar hi foobar hi foo bar hi foo bar hi foo bar hi foo bar hi foo bar hi foo bar'); run_make_test('x:;@-exit 1', '', "#MAKE#: [#MAKEFILE#:1: x] Error 1 (ignored)\n"); # Slow path with odd setups if ($port_type ne 'W32') { run_make_test(q! slow: SHELL := echo slow: .SHELLFLAGS := hoho slow:; @foo bar !, '', "hoho foo bar\n"); run_make_test(q! slow: SHELL := echo hi slow: .SHELLFLAGS := ho ho slow:; @foo bar !, '', "hi ho ho foo bar\n"); run_make_test(q! slow: SHELL := echo hi slow: .SHELLFLAGS := 'ho;ho' slow:; @foo bar !, '', "hi ho;ho foo bar\n"); } 1; ### Local Variables: ### eval: (setq whitespace-action (delq 'auto-cleanup whitespace-action)) ### End: make-4.3/tests/scripts/misc/bs-nl0000644000175000017500000001026413603564437013756 00000000000000# -*-perl-*- $description = "Test backslash-newline handling."; $details = ""; # TEST #1 # ------- # Backslash-newlines in recipes # These are basic backslash-newlines with no tricks run_make_test("fast:;\@echo fa\\\nst\n", '', 'fast'); run_make_test("slow:;\@: no-op; echo sl\\\now\n", '', 'slow'); run_make_test("dquote:;\@echo \"dqu\\\note\"\n", '', 'dquote'); # Single quotes don't behave the same in Windows if ($port_type ne 'W32') { run_make_test("squote:;\@echo 'squ\\\note'\n", '', "squ\\\note"); } # Ensure that a leading prefix character is omitted run_make_test("fast:;\@echo fa\\\n\tst\n", '', 'fast'); run_make_test("slow:;\@: no-op; echo sl\\\n\tow\n", '', 'slow'); run_make_test("dquote:;\@echo \"dqu\\\n\tote\"\n", '', 'dquote'); # Single quotes don't behave the same in Windows if ($port_type ne 'W32') { run_make_test("squote:;\@echo 'squ\\\n\tote'\n", '', "squ\\\note"); } # Ensure that ONLY the leading prefix character is omitted run_make_test("fast:;\@echo fa\\\n\t st\n", '', 'fa st'); run_make_test("slow:;\@: no-op; echo sl\\\n\t\tow\n", '', "sl ow"); run_make_test("dquote:;\@echo \"dqu\\\n\t ote\"\n", '', 'dqu ote'); run_make_test("squote:;\@echo 'squ\\\n\t\t ote'\n", '', "squ\\\n\t ote"); # Backslash-newlines in variable values # Simple run_make_test(q! var = he\ llo var:;@echo '|$(var)|'!, '', "|he llo|"); # Condense trailing space run_make_test(q! var = he \ llo var:;@echo '|$(var)|'!, '', "|he llo|"); # Remove leading space run_make_test(q! var = he\ llo var:;@echo '|$(var)|'!, '', "|he llo|"); # Multiple bs/nl condensed run_make_test(q! var = he\ \ \ llo var:;@echo '|$(var)|'!, '', "|he llo|"); # POSIX: Preserve trailing space run_make_test(q! .POSIX: x = y var = he \ llo var:;@echo '|$(var)|'!, '', "|he llo|"); # POSIX: One space per bs-nl run_make_test(q! .POSIX: x = y var = he\ \ \ llo var:;@echo '|$(var)|'!, '', "|he llo|"); # Savannah #39035: handle whitespace in call run_make_test(q! f = echo $(1) t:; @$(call f,"a \ b"); \ $(call f,"a \ b") !, '', "a b\na b\n"); # Savannah #38945: handle backslash CRLF # We need our own makefile so we can set binmode my $m1 = get_tmpfile(); open(MAKEFILE, "> $m1"); binmode(MAKEFILE); print MAKEFILE "FOO = foo \\\r\n"; close(MAKEFILE); my $m2 = get_tmpfile(); open(MAKEFILE, "> $m2"); print MAKEFILE "include $m1\ndefine BAR\nall: ; \@echo \$(FOO) bar\nendef\n\$(eval \$(BAR))\n"; 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/\\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; make-4.3/tests/scripts/misc/general40000644000175000017500000000530413603564437014443 00000000000000# -*-perl-*- $description = "\ This tests random features of make's algorithms, often somewhat obscure, which have either broken at some point in the past or seem likely to break."; run_make_test(' # Make sure that subdirectories built as prerequisites are actually handled # properly. all: dir/subdir/file.a dir/subdir: ; @echo mkdir -p dir/subdir dir/subdir/file.b: dir/subdir ; @echo touch dir/subdir/file.b dir/subdir/%.a: dir/subdir/%.b ; @echo cp $< $@', '', "mkdir -p dir/subdir\ntouch dir/subdir/file.b\ncp dir/subdir/file.b dir/subdir/file.a\n"); # Test implicit rules &touch('foo.c'); run_make_test('foo: foo.o', 'CC="@echo cc" OUTPUT_OPTION=', 'cc -c foo.c cc foo.o -o foo'); unlink('foo.c'); # Test implicit rules with '$' in the name (see se_implicit) run_make_test(q! %.foo : baz$$bar ; @echo 'done $<' %.foo : bar$$baz ; @echo 'done $<' test.foo: baz$$bar bar$$baz: ; @echo '$@' !, '', "baz\$bar\ndone baz\$bar"); # Test implicit rules with '$' in the name (see se_implicit) # Use the '$' in the pattern. run_make_test(q! %.foo : %$$bar ; @echo 'done $<' test.foo: test$$bar: ; @echo '$@' !, '', "test\$bar\ndone test\$bar"); # Make sure that subdirectories built as prerequisites are actually handled # properly... this time with '$' run_make_test(q! all: dir/subdir/file.$$a dir/subdir: ; @echo mkdir -p '$@' dir/subdir/file.$$b: dir/subdir ; @echo touch '$@' dir/subdir/%.$$a: dir/subdir/%.$$b ; @echo 'cp $< $@' !, '', "mkdir -p dir/subdir\ntouch dir/subdir/file.\$b\ncp dir/subdir/file.\$b dir/subdir/file.\$a\n"); # Test odd whitespace at the beginning of a line run_make_test(" all: \f \\ \f \\ \013 \\ all: ; \@echo hi ", '', "hi\n"); # SV-56834 Ensure setting PATH in the makefile works properly my $sname = "foobar$scriptsuffix"; mkdir('sd', 0775); create_file("sd/$sname", "exit 0\n"); chmod 0755, "sd/$sname"; run_make_test(qq! PATH := sd all: ; $sname >/dev/null !, '', "$sname >/dev/null\n"); # Don't use the general PATH if not found on the target path $extraENV{PATH} = "$ENV{PATH}:sd"; run_make_test(qq! PATH := .. all: ; $sname !, '', "$sname\n#MAKE#: $sname: $ERR_no_such_file\n#MAKE#: *** [#MAKEFILE#:3: all] Error 127", 512); unlink("sd/$sname"); rmdir('sd'); # Ensure that local programs are not found if "." is not on the PATH create_file($sname, ''); chmod 0755, $sname; run_make_test(qq! PATH := .. all: ; $sname !, '', "$sname\n#MAKE#: $sname: $ERR_no_such_file\n#MAKE#: *** [#MAKEFILE#:3: all] Error 127", 512); unlink($sname); 1; make-4.3/tests/scripts/misc/general20000644000175000017500000000276613603564437014452 00000000000000# -*-perl-*- $description = "The following test creates a makefile to test the simple functionality of make. It is the same as general_test1 except that this one tests the definition of a variable to hold the object filenames."; open(MAKEFILE,"> $makefile"); # The contents of the Makefile ... print MAKEFILE < '@AM_LDFLAGS@', AR => '@AR@', CC => '@CC@', CFLAGS => '@CFLAGS@', CPP => '@CPP@', CPPFLAGS => '@CPPFLAGS@', GUILE_CFLAGS => '@GUILE_CFLAGS@', GUILE_LIBS => '@GUILE_LIBS@', LDFLAGS => '@LDFLAGS@', LIBS => '@LIBS@', USE_SYSTEM_GLOB => '@USE_SYSTEM_GLOB@' ); 1; make-4.3/tests/run_make_tests.bat0000644000175000017500000000145513603564437014113 00000000000000@echo off rem Copyright (C) 2017-2020 Free Software Foundation, Inc. rem This file is part of GNU Make. rem rem GNU Make is free software; you can redistribute it and/or modify it under rem the terms of the GNU General Public License as published by the Free rem Software Foundation; either version 3 of the License, or (at your option) rem any later version. rem rem GNU Make is distributed in the hope that it will be useful, but WITHOUT rem ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or rem FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for. rem more details. rem rem You should have received a copy of the GNU General Public License along rem with this program. If not, see . setlocal cd "%~dp0" perl -I. .\run_make_tests.pl %* make-4.3/configure0000755000175000017500000202460513611136506011140 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for GNU make 4.3. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then 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 # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and bug-make@gnu.org $0: about your system, including any error possibly output $0: before this message. Then install a modern shell, or $0: manually run the script under such a shell if you do $0: have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='GNU make' PACKAGE_TARNAME='make' PACKAGE_VERSION='4.3' PACKAGE_STRING='GNU make 4.3' PACKAGE_BUGREPORT='bug-make@gnu.org' PACKAGE_URL='http://www.gnu.org/software/make/' ac_unique_file="src/vpath.c" ac_config_libobj_dir=lib # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_func_list= ac_header_list= gt_needs= ac_subst_vars='gltests_LTLIBOBJS gltests_LIBOBJS gl_LTLIBOBJS gl_LIBOBJS am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS WINDOWSENV_FALSE WINDOWSENV_TRUE MAKE_HOST AM_LDFLAGS USE_CUSTOMS_FALSE USE_CUSTOMS_TRUE REMOTE HAVE_GUILE_FALSE HAVE_GUILE_TRUE GUILE_LIBS GUILE_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG POSUB INTLLIBS LTLIBICONV LIBICONV INTL_MACOSX_LIBS XGETTEXT_EXTRA_OPTIONS MSGMERGE XGETTEXT_015 XGETTEXT GMSGFMT_015 MSGFMT_015 GMSGFMT MSGFMT GETTEXT_MACRO_VERSION USE_NLS SED PERL LIBGNU_LTLIBDEPS LIBGNU_LIBDEPS gltests_WITNESS HAVE_UNISTD_H NEXT_AS_FIRST_DIRECTIVE_UNISTD_H NEXT_UNISTD_H WINDOWS_STAT_INODES WINDOWS_64_BIT_OFF_T NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H NEXT_SYS_TYPES_H NEXT_AS_FIRST_DIRECTIVE_STRING_H NEXT_STRING_H UNDEFINE_STRTOK_R REPLACE_STRSIGNAL REPLACE_STRERROR_R REPLACE_STRERROR REPLACE_STRTOK_R REPLACE_STRCASESTR REPLACE_STRSTR REPLACE_STRNLEN REPLACE_STRNDUP REPLACE_STRNCAT REPLACE_STRDUP REPLACE_STRCHRNUL REPLACE_STPNCPY REPLACE_MEMMEM REPLACE_MEMCHR HAVE_STRVERSCMP HAVE_DECL_STRSIGNAL HAVE_DECL_STRERROR_R HAVE_DECL_STRTOK_R HAVE_STRCASESTR HAVE_STRSEP HAVE_STRPBRK HAVE_DECL_STRNLEN HAVE_DECL_STRNDUP HAVE_DECL_STRDUP HAVE_STRCHRNUL HAVE_STPNCPY HAVE_STPCPY HAVE_RAWMEMCHR HAVE_DECL_MEMRCHR HAVE_MEMPCPY HAVE_DECL_MEMMEM HAVE_MEMCHR HAVE_FFSLL HAVE_FFSL HAVE_EXPLICIT_BZERO HAVE_MBSLEN GNULIB_STRVERSCMP GNULIB_STRSIGNAL GNULIB_STRERROR_R GNULIB_STRERROR GNULIB_MBSTOK_R GNULIB_MBSSEP GNULIB_MBSSPN GNULIB_MBSPBRK GNULIB_MBSCSPN GNULIB_MBSCASESTR GNULIB_MBSPCASECMP GNULIB_MBSNCASECMP GNULIB_MBSCASECMP GNULIB_MBSSTR GNULIB_MBSRCHR GNULIB_MBSCHR GNULIB_MBSNLEN GNULIB_MBSLEN GNULIB_STRTOK_R GNULIB_STRCASESTR GNULIB_STRSTR GNULIB_STRSEP GNULIB_STRPBRK GNULIB_STRNLEN GNULIB_STRNDUP GNULIB_STRNCAT GNULIB_STRDUP GNULIB_STRCHRNUL GNULIB_STPNCPY GNULIB_STPCPY GNULIB_RAWMEMCHR GNULIB_MEMRCHR GNULIB_MEMPCPY GNULIB_MEMMEM GNULIB_MEMCHR GNULIB_FFSLL GNULIB_FFSL GNULIB_EXPLICIT_BZERO NEXT_AS_FIRST_DIRECTIVE_STDLIB_H NEXT_STDLIB_H NEXT_AS_FIRST_DIRECTIVE_STDIO_H NEXT_STDIO_H REPLACE_VSPRINTF REPLACE_VSNPRINTF REPLACE_VPRINTF REPLACE_VFPRINTF REPLACE_VDPRINTF REPLACE_VASPRINTF REPLACE_TMPFILE REPLACE_STDIO_WRITE_FUNCS REPLACE_STDIO_READ_FUNCS REPLACE_SPRINTF REPLACE_SNPRINTF REPLACE_RENAMEAT REPLACE_RENAME REPLACE_REMOVE REPLACE_PRINTF REPLACE_POPEN REPLACE_PERROR REPLACE_OBSTACK_PRINTF REPLACE_GETLINE REPLACE_GETDELIM REPLACE_FTELLO REPLACE_FTELL REPLACE_FSEEKO REPLACE_FSEEK REPLACE_FREOPEN REPLACE_FPURGE REPLACE_FPRINTF REPLACE_FOPEN REPLACE_FFLUSH REPLACE_FDOPEN REPLACE_FCLOSE REPLACE_DPRINTF HAVE_VDPRINTF HAVE_VASPRINTF HAVE_RENAMEAT HAVE_POPEN HAVE_PCLOSE HAVE_FTELLO HAVE_FSEEKO HAVE_DPRINTF HAVE_DECL_VSNPRINTF HAVE_DECL_SNPRINTF HAVE_DECL_OBSTACK_PRINTF HAVE_DECL_GETLINE HAVE_DECL_GETDELIM HAVE_DECL_FTELLO HAVE_DECL_FSEEKO HAVE_DECL_FPURGE GNULIB_VSPRINTF_POSIX GNULIB_VSNPRINTF GNULIB_VPRINTF_POSIX GNULIB_VPRINTF GNULIB_VFPRINTF_POSIX GNULIB_VFPRINTF GNULIB_VDPRINTF GNULIB_VSCANF GNULIB_VFSCANF GNULIB_VASPRINTF GNULIB_TMPFILE GNULIB_STDIO_H_SIGPIPE GNULIB_STDIO_H_NONBLOCKING GNULIB_SPRINTF_POSIX GNULIB_SNPRINTF GNULIB_SCANF GNULIB_RENAMEAT GNULIB_RENAME GNULIB_REMOVE GNULIB_PUTS GNULIB_PUTCHAR GNULIB_PUTC GNULIB_PRINTF_POSIX GNULIB_PRINTF GNULIB_POPEN GNULIB_PERROR GNULIB_PCLOSE GNULIB_OBSTACK_PRINTF_POSIX GNULIB_OBSTACK_PRINTF GNULIB_GETLINE GNULIB_GETDELIM GNULIB_GETCHAR GNULIB_GETC GNULIB_FWRITE GNULIB_FTELLO GNULIB_FTELL GNULIB_FSEEKO GNULIB_FSEEK GNULIB_FSCANF GNULIB_FREOPEN GNULIB_FREAD GNULIB_FPUTS GNULIB_FPUTC GNULIB_FPURGE GNULIB_FPRINTF_POSIX GNULIB_FPRINTF GNULIB_FOPEN GNULIB_FGETS GNULIB_FGETC GNULIB_FFLUSH GNULIB_FDOPEN GNULIB_FCLOSE GNULIB_DPRINTF GL_GENERATE_STDINT_H_FALSE GL_GENERATE_STDINT_H_TRUE STDINT_H HAVE_SYS_INTTYPES_H HAVE_SYS_BITYPES_H HAVE_C99_STDINT_H WINT_T_SUFFIX WCHAR_T_SUFFIX SIG_ATOMIC_T_SUFFIX SIZE_T_SUFFIX PTRDIFF_T_SUFFIX HAVE_SIGNED_WINT_T HAVE_SIGNED_WCHAR_T HAVE_SIGNED_SIG_ATOMIC_T BITSIZEOF_WINT_T BITSIZEOF_WCHAR_T BITSIZEOF_SIG_ATOMIC_T BITSIZEOF_SIZE_T BITSIZEOF_PTRDIFF_T HAVE_STDINT_H NEXT_AS_FIRST_DIRECTIVE_STDINT_H NEXT_STDINT_H HAVE_SYS_TYPES_H HAVE_INTTYPES_H HAVE_WCHAR_H GNULIB_OVERRIDES_WINT_T NEXT_AS_FIRST_DIRECTIVE_STDDEF_H NEXT_STDDEF_H GL_GENERATE_STDDEF_H_FALSE GL_GENERATE_STDDEF_H_TRUE STDDEF_H HAVE_WCHAR_T HAVE_MAX_ALIGN_T REPLACE_NULL HAVE__BOOL GL_GENERATE_STDBOOL_H_FALSE GL_GENERATE_STDBOOL_H_TRUE STDBOOL_H APPLE_UNIVERSAL_BUILD USE_SYSTEM_GLOB USE_SYSTEM_GLOB_FALSE USE_SYSTEM_GLOB_TRUE GL_GENERATE_LIMITS_H_FALSE GL_GENERATE_LIMITS_H_TRUE LIMITS_H NEXT_AS_FIRST_DIRECTIVE_LIMITS_H NEXT_LIMITS_H HOST_CPU_C_ABI HOST_CPU LTLIBINTL LIBINTL GETLOADAVG_LIBS REPLACE_WCTOMB REPLACE_UNSETENV REPLACE_STRTOLD REPLACE_STRTOD REPLACE_SETSTATE REPLACE_SETENV REPLACE_REALPATH REPLACE_REALLOC REPLACE_RANDOM_R REPLACE_RANDOM REPLACE_QSORT_R REPLACE_PUTENV REPLACE_PTSNAME_R REPLACE_PTSNAME REPLACE_MKSTEMP REPLACE_MBTOWC REPLACE_MALLOC REPLACE_INITSTATE REPLACE_CANONICALIZE_FILE_NAME REPLACE_CALLOC HAVE_DECL_UNSETENV HAVE_UNLOCKPT HAVE_SYS_LOADAVG_H HAVE_STRUCT_RANDOM_DATA HAVE_STRTOULL HAVE_STRTOLL HAVE_STRTOLD HAVE_STRTOD HAVE_DECL_SETSTATE HAVE_SETSTATE HAVE_DECL_SETENV HAVE_SETENV HAVE_SECURE_GETENV HAVE_RPMATCH HAVE_REALPATH HAVE_REALLOCARRAY HAVE_RANDOM_R HAVE_RANDOM_H HAVE_RANDOM HAVE_QSORT_R HAVE_PTSNAME_R HAVE_PTSNAME HAVE_POSIX_OPENPT HAVE_MKSTEMPS HAVE_MKSTEMP HAVE_MKOSTEMPS HAVE_MKOSTEMP HAVE_MKDTEMP HAVE_MBTOWC HAVE_DECL_INITSTATE HAVE_INITSTATE HAVE_GRANTPT HAVE_GETSUBOPT HAVE_DECL_GETLOADAVG HAVE_CANONICALIZE_FILE_NAME HAVE_ATOLL HAVE__EXIT GNULIB_WCTOMB GNULIB_UNSETENV GNULIB_UNLOCKPT GNULIB_SYSTEM_POSIX GNULIB_STRTOULL GNULIB_STRTOLL GNULIB_STRTOLD GNULIB_STRTOD GNULIB_SETENV GNULIB_SECURE_GETENV GNULIB_RPMATCH GNULIB_REALPATH GNULIB_REALLOC_POSIX GNULIB_REALLOCARRAY GNULIB_RANDOM_R GNULIB_RANDOM GNULIB_QSORT_R GNULIB_PUTENV GNULIB_PTSNAME_R GNULIB_PTSNAME GNULIB_POSIX_OPENPT GNULIB_MKSTEMPS GNULIB_MKSTEMP GNULIB_MKOSTEMPS GNULIB_MKOSTEMP GNULIB_MKDTEMP GNULIB_MBTOWC GNULIB_MALLOC_POSIX GNULIB_GRANTPT GNULIB_GETSUBOPT GNULIB_GETLOADAVG GNULIB_CANONICALIZE_FILE_NAME GNULIB_CALLOC_POSIX GNULIB_ATOLL GNULIB__EXIT NEXT_AS_FIRST_DIRECTIVE_FCNTL_H NEXT_FCNTL_H REPLACE_OPENAT REPLACE_OPEN REPLACE_FCNTL REPLACE_CREAT HAVE_OPENAT HAVE_FCNTL GNULIB_OPENAT GNULIB_OPEN GNULIB_NONBLOCKING GNULIB_FCNTL GNULIB_CREAT EOVERFLOW_VALUE EOVERFLOW_HIDDEN ENOLINK_VALUE ENOLINK_HIDDEN EMULTIHOP_VALUE EMULTIHOP_HIDDEN GL_GENERATE_ERRNO_H_FALSE GL_GENERATE_ERRNO_H_TRUE ERRNO_H NEXT_AS_FIRST_DIRECTIVE_ERRNO_H NEXT_ERRNO_H PRAGMA_COLUMNS PRAGMA_SYSTEM_HEADER INCLUDE_NEXT_AS_FIRST_DIRECTIVE INCLUDE_NEXT HAVE_WINSOCK2_H HAVE_MSVC_INVALID_PARAMETER_HANDLER HAVE_ALLOCA_H GL_GENERATE_ALLOCA_H_FALSE GL_GENERATE_ALLOCA_H_TRUE ALLOCA_H ALLOCA host_os host_vendor host_cpu host build_os build_vendor build_cpu build UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS UNISTD_H_HAVE_WINSOCK2_H REPLACE_WRITE REPLACE_USLEEP REPLACE_UNLINKAT REPLACE_UNLINK REPLACE_TTYNAME_R REPLACE_TRUNCATE REPLACE_SYMLINKAT REPLACE_SYMLINK REPLACE_SLEEP REPLACE_RMDIR REPLACE_READLINKAT REPLACE_READLINK REPLACE_READ REPLACE_PWRITE REPLACE_PREAD REPLACE_LSEEK REPLACE_LINKAT REPLACE_LINK REPLACE_LCHOWN REPLACE_ISATTY REPLACE_GETPASS REPLACE_GETPAGESIZE REPLACE_GETGROUPS REPLACE_GETLOGIN_R REPLACE_GETDTABLESIZE REPLACE_GETDOMAINNAME REPLACE_GETCWD REPLACE_FTRUNCATE REPLACE_FCHOWNAT REPLACE_FACCESSAT REPLACE_DUP2 REPLACE_DUP REPLACE_CLOSE REPLACE_CHOWN REPLACE_ACCESS HAVE_SYS_PARAM_H HAVE_OS_H HAVE_DECL_TTYNAME_R HAVE_DECL_TRUNCATE HAVE_DECL_SETHOSTNAME HAVE_DECL_GETUSERSHELL HAVE_DECL_GETPAGESIZE HAVE_DECL_GETLOGIN_R HAVE_DECL_GETLOGIN HAVE_DECL_GETDOMAINNAME HAVE_DECL_FDATASYNC HAVE_DECL_FCHDIR HAVE_DECL_ENVIRON HAVE_USLEEP HAVE_UNLINKAT HAVE_SYMLINKAT HAVE_SYMLINK HAVE_SLEEP HAVE_SETHOSTNAME HAVE_READLINKAT HAVE_READLINK HAVE_PWRITE HAVE_PREAD HAVE_PIPE2 HAVE_PIPE HAVE_LINKAT HAVE_LINK HAVE_LCHOWN HAVE_GROUP_MEMBER HAVE_GETPASS HAVE_GETPAGESIZE HAVE_GETLOGIN HAVE_GETHOSTNAME HAVE_GETGROUPS HAVE_GETDTABLESIZE HAVE_FTRUNCATE HAVE_FSYNC HAVE_FDATASYNC HAVE_FCHOWNAT HAVE_FCHDIR HAVE_FACCESSAT HAVE_EUIDACCESS HAVE_DUP3 HAVE_DUP2 HAVE_COPY_FILE_RANGE HAVE_CHOWN GNULIB_WRITE GNULIB_USLEEP GNULIB_UNLINKAT GNULIB_UNLINK GNULIB_UNISTD_H_SIGPIPE GNULIB_UNISTD_H_NONBLOCKING GNULIB_TTYNAME_R GNULIB_TRUNCATE GNULIB_SYMLINKAT GNULIB_SYMLINK GNULIB_SLEEP GNULIB_SETHOSTNAME GNULIB_RMDIR GNULIB_READLINKAT GNULIB_READLINK GNULIB_READ GNULIB_PWRITE GNULIB_PREAD GNULIB_PIPE2 GNULIB_PIPE GNULIB_LSEEK GNULIB_LINKAT GNULIB_LINK GNULIB_LCHOWN GNULIB_ISATTY GNULIB_GROUP_MEMBER GNULIB_GETUSERSHELL GNULIB_GETPASS GNULIB_GETPAGESIZE GNULIB_GETLOGIN_R GNULIB_GETLOGIN GNULIB_GETHOSTNAME GNULIB_GETGROUPS GNULIB_GETDTABLESIZE GNULIB_GETDOMAINNAME GNULIB_GETCWD GNULIB_FTRUNCATE GNULIB_FSYNC GNULIB_FDATASYNC GNULIB_FCHOWNAT GNULIB_FCHDIR GNULIB_FACCESSAT GNULIB_EUIDACCESS GNULIB_ENVIRON GNULIB_DUP3 GNULIB_DUP2 GNULIB_DUP GNULIB_COPY_FILE_RANGE GNULIB_CLOSE GNULIB_CHOWN GNULIB_CHDIR GNULIB_ACCESS GL_COND_LIBTOOL_FALSE GL_COND_LIBTOOL_TRUE RANLIB ARFLAGS AR EGREP GREP CPP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL am__quote' ac_subst_files='MAINT_MAKEFILE' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking enable_cross_guesses enable_nls with_gnu_ld enable_rpath with_libiconv_prefix with_libintl_prefix enable_largefile with_guile with_customs enable_case_insensitive_file_system enable_job_server enable_load enable_posix_spawn with_dmalloc ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR GUILE_CFLAGS GUILE_LIBS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' 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}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -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=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. 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 runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # 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.3 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --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] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/make] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of GNU make 4.3:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-cross-guesses={conservative|risky} specify policy for cross-compilation guesses --disable-nls do not use Native Language Support --disable-rpath do not hardcode runtime library paths --disable-largefile omit support for large files --enable-case-insensitive-file-system assume file systems are case insensitive --disable-job-server disallow recursive make communication during -jN --disable-load disable support for the 'load' operation --disable-posix-spawn disable support for posix_spawn() 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-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 --without-libintl-prefix don't search for libintl in includedir and libdir --with-guile Support GNU Guile for embedded scripting --with-customs=DIR enable remote jobs via Customs--see README.customs --with-dmalloc use dmalloc, as in http://www.dmalloc.com Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path GUILE_CFLAGS C compiler flags for GUILE, overriding pkg-config GUILE_LIBS linker flags for GUILE, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . GNU make home page: . General help using GNU software: . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF GNU make configure 4.3 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ------------------------------- ## ## Report this to bug-make@gnu.org ## ## ------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES # -------------------------------------------- # Tries to find the compile-time value of EXPR in a program that includes # INCLUDES, setting VAR accordingly. Returns whether the value could be # computed ac_fn_c_compute_int () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid; break else as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=$ac_mid; break else as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid else as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; '') ac_retval=1 ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 static long int longval () { return $2; } static unsigned long int ulongval () { return $2; } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (($2) < 0) { long int i = longval (); if (i != ($2)) return 1; fprintf (f, "%ld", i); } else { unsigned long int i = ulongval (); if (i != ($2)) return 1; fprintf (f, "%lu", i); } /* Do not output a trailing newline, as this causes \r\n confusion on some platforms. */ return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : echo >>conftest.val; read $3 &5 $as_echo_n "checking whether $as_decl_name is declared... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { #ifndef $as_decl_name #ifdef __cplusplus (void) $as_decl_use; #else (void) $as_decl_name; #endif #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_decl # ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES # ---------------------------------------------------- # Tries to find if the field MEMBER exists in type AGGR, after including # INCLUDES, setting cache variable VAR accordingly. ac_fn_c_check_member () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 $as_echo_n "checking for $2.$3... " >&6; } if eval \${$4+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int main () { static $2 ac_aggr; if (ac_aggr.$3) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$4=yes" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int main () { static $2 ac_aggr; if (sizeof ac_aggr.$3) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$4=yes" else eval "$4=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$4 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_member 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.3, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi as_fn_append ac_func_list " _set_invalid_parameter_handler" as_fn_append ac_header_list " sys/socket.h" as_fn_append ac_func_list " fcntl" as_fn_append ac_header_list " unistd.h" as_fn_append ac_func_list " symlink" as_fn_append ac_func_list " getdtablesize" as_fn_append ac_header_list " sys/param.h" as_fn_append ac_func_list " getprogname" as_fn_append ac_func_list " getexecname" as_fn_append ac_header_list " limits.h" as_fn_append ac_header_list " wchar.h" as_fn_append ac_header_list " stdint.h" gt_needs="$gt_needs " # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Autoconf setup ac_aux_dir= for ac_dir in build-aux "$srcdir"/build-aux; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in build-aux \"$srcdir\"/build-aux" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. ac_config_headers="$ac_config_headers src/config.h" # Automake setup # We have to enable "foreign" because ChangeLog is auto-generated # Automake 1.15 and gnulib don't get along: gnulib has some strange error # in the way it handles getloadavg.c which causes make distcheck to fail. # http://lists.gnu.org/archive/html/bug-gnulib/2018-06/msg00024.html am__api_version='1.16' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. 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` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else 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_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else 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_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else 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_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='make' VERSION='4.3' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # 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}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi # Checks for programs. DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 $as_echo_n "checking whether ${MAKE-make} supports the include directive... " >&6; } cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } case $?:`cat confinc.out 2>/dev/null` in #( '0:this is the am__doit target') : case $s in #( BSD) : am__include='.include' am__quote='"' ;; #( *) : am__include='include' am__quote='' ;; esac ;; #( *) : ;; esac if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 $as_echo "${_am_result}" >&6; } # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else 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_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else 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_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else 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_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no 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_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else 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_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else 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_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_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$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_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 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "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_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_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_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_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$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_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 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "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_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_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_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=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 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" if test "x$ac_cv_header_minix_config_h" = xyes; then : MINIX=yes else MINIX= fi if test "$MINIX" = yes; then $as_echo "#define _POSIX_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h $as_echo "#define _MINIX 1" >>confdefs.h $as_echo "#define _NETBSD_SOURCE 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 $as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } if ${ac_cv_safe_to_define___extensions__+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 $ac_includes_default int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_safe_to_define___extensions__=yes else ac_cv_safe_to_define___extensions__=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 $as_echo "$ac_cv_safe_to_define___extensions__" >&6; } test $ac_cv_safe_to_define___extensions__ = yes && $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h $as_echo "#define _ALL_SOURCE 1" >>confdefs.h $as_echo "#define _DARWIN_C_SOURCE 1" >>confdefs.h $as_echo "#define _GNU_SOURCE 1" >>confdefs.h $as_echo "#define _NETBSD_SOURCE 1" >>confdefs.h $as_echo "#define _OPENBSD_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h $as_echo "#define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1" >>confdefs.h $as_echo "#define __STDC_WANT_IEC_60559_BFP_EXT__ 1" >>confdefs.h $as_echo "#define __STDC_WANT_IEC_60559_DFP_EXT__ 1" >>confdefs.h $as_echo "#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1" >>confdefs.h $as_echo "#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1" >>confdefs.h $as_echo "#define __STDC_WANT_LIB_EXT2__ 1" >>confdefs.h $as_echo "#define __STDC_WANT_MATH_SPEC_FUNCS__ 1" >>confdefs.h $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether _XOPEN_SOURCE should be defined" >&5 $as_echo_n "checking whether _XOPEN_SOURCE should be defined... " >&6; } if ${ac_cv_should_define__xopen_source+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_should_define__xopen_source=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include mbstate_t x; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE 500 #include mbstate_t x; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_should_define__xopen_source=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5 $as_echo "$ac_cv_should_define__xopen_source" >&6; } test $ac_cv_should_define__xopen_source = yes && $as_echo "#define _XOPEN_SOURCE 500" >>confdefs.h $as_echo "#define _HPUX_ALT_XOPEN_SOCKET_API 1" >>confdefs.h ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else 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_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else 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_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else 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_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no 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_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else 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_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else 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_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi # Configure gnulib { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Minix Amsterdam compiler" >&5 $as_echo_n "checking for Minix Amsterdam compiler... " >&6; } if ${gl_cv_c_amsterdam_compiler+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __ACK__ Amsterdam #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Amsterdam" >/dev/null 2>&1; then : gl_cv_c_amsterdam_compiler=yes else gl_cv_c_amsterdam_compiler=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_c_amsterdam_compiler" >&5 $as_echo "$gl_cv_c_amsterdam_compiler" >&6; } if test $gl_cv_c_amsterdam_compiler = yes; then if test -z "$AR"; then AR='cc -c.a' fi if test -z "$ARFLAGS"; then ARFLAGS='-o' fi else : fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else 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_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="${ac_tool_prefix}ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else 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_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_AR" = x; then AR="ar" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi else AR="$ac_cv_prog_AR" fi if test -z "$ARFLAGS"; then ARFLAGS='cr' fi if test -z "$RANLIB"; then if test $gl_cv_c_amsterdam_compiler = yes; then RANLIB=':' else if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else 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_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else 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_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi fi fi # Pre-early section. # Code from module absolute-header: # Code from module access: # Code from module alloca: # Code from module alloca-opt: # Code from module close: # Code from module concat-filename: # Code from module dirname-lgpl: # Code from module dosname: # Code from module double-slash-root: # Code from module dup2: # Code from module errno: # Code from module error: # Code from module exitfail: # Code from module extensions: # Code from module extern-inline: # Code from module fcntl: # Code from module fcntl-h: # Code from module fd-hook: # Code from module fdl: # Code from module filename: # Code from module findprog-in: # Code from module getdtablesize: # Code from module getloadavg: # Code from module getprogname: # Code from module gettext-h: # Code from module host-cpu-c-abi: # Code from module include_next: # Code from module intprops: # Code from module limits-h: # Code from module make-glob: # Code from module malloc-posix: # Code from module msvc-inval: # Code from module msvc-nothrow: # Code from module multiarch: # Code from module snippet/_Noreturn: # Code from module snippet/arg-nonnull: # Code from module snippet/c++defs: # Code from module snippet/warn-on-use: # Code from module ssize_t: # Code from module stdbool: # Code from module stddef: # Code from module stdint: # Code from module stdio: # Code from module stdlib: # Code from module stpcpy: # Code from module strerror: # Code from module strerror-override: # Code from module string: # Code from module sys_types: # Code from module unistd: # Code from module verify: # Code from module xalloc: # Code from module xalloc-die: # Code from module xalloc-oversized: # Code from module xconcat-filename: # Check whether --enable-cross-guesses was given. if test "${enable_cross_guesses+set}" = set; then : enableval=$enable_cross_guesses; if test "x$enableval" != xconservative && test "x$enableval" != xrisky; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: invalid argument supplied to --enable-cross-guesses" >&5 $as_echo "$as_me: WARNING: invalid argument supplied to --enable-cross-guesses" >&2;} enableval=conservative fi gl_cross_guesses="$enableval" else gl_cross_guesses=conservative fi if test $gl_cross_guesses = risky; then gl_cross_guess_normal="guessing yes" gl_cross_guess_inverted="guessing no" else gl_cross_guess_normal="guessing no" gl_cross_guess_inverted="guessing yes" fi LIBC_FATAL_STDERR_=1 export LIBC_FATAL_STDERR_ GNULIB_ACCESS=0; GNULIB_CHDIR=0; GNULIB_CHOWN=0; GNULIB_CLOSE=0; GNULIB_COPY_FILE_RANGE=0; GNULIB_DUP=0; GNULIB_DUP2=0; GNULIB_DUP3=0; GNULIB_ENVIRON=0; GNULIB_EUIDACCESS=0; GNULIB_FACCESSAT=0; GNULIB_FCHDIR=0; GNULIB_FCHOWNAT=0; GNULIB_FDATASYNC=0; GNULIB_FSYNC=0; GNULIB_FTRUNCATE=0; GNULIB_GETCWD=0; GNULIB_GETDOMAINNAME=0; GNULIB_GETDTABLESIZE=0; GNULIB_GETGROUPS=0; GNULIB_GETHOSTNAME=0; GNULIB_GETLOGIN=0; GNULIB_GETLOGIN_R=0; GNULIB_GETPAGESIZE=0; GNULIB_GETPASS=0; GNULIB_GETUSERSHELL=0; GNULIB_GROUP_MEMBER=0; GNULIB_ISATTY=0; GNULIB_LCHOWN=0; GNULIB_LINK=0; GNULIB_LINKAT=0; GNULIB_LSEEK=0; GNULIB_PIPE=0; GNULIB_PIPE2=0; GNULIB_PREAD=0; GNULIB_PWRITE=0; GNULIB_READ=0; GNULIB_READLINK=0; GNULIB_READLINKAT=0; GNULIB_RMDIR=0; GNULIB_SETHOSTNAME=0; GNULIB_SLEEP=0; GNULIB_SYMLINK=0; GNULIB_SYMLINKAT=0; GNULIB_TRUNCATE=0; GNULIB_TTYNAME_R=0; GNULIB_UNISTD_H_NONBLOCKING=0; GNULIB_UNISTD_H_SIGPIPE=0; GNULIB_UNLINK=0; GNULIB_UNLINKAT=0; GNULIB_USLEEP=0; GNULIB_WRITE=0; HAVE_CHOWN=1; HAVE_COPY_FILE_RANGE=1; HAVE_DUP2=1; HAVE_DUP3=1; HAVE_EUIDACCESS=1; HAVE_FACCESSAT=1; HAVE_FCHDIR=1; HAVE_FCHOWNAT=1; HAVE_FDATASYNC=1; HAVE_FSYNC=1; HAVE_FTRUNCATE=1; HAVE_GETDTABLESIZE=1; HAVE_GETGROUPS=1; HAVE_GETHOSTNAME=1; HAVE_GETLOGIN=1; HAVE_GETPAGESIZE=1; HAVE_GETPASS=1; HAVE_GROUP_MEMBER=1; HAVE_LCHOWN=1; HAVE_LINK=1; HAVE_LINKAT=1; HAVE_PIPE=1; HAVE_PIPE2=1; HAVE_PREAD=1; HAVE_PWRITE=1; HAVE_READLINK=1; HAVE_READLINKAT=1; HAVE_SETHOSTNAME=1; HAVE_SLEEP=1; HAVE_SYMLINK=1; HAVE_SYMLINKAT=1; HAVE_UNLINKAT=1; HAVE_USLEEP=1; HAVE_DECL_ENVIRON=1; HAVE_DECL_FCHDIR=1; HAVE_DECL_FDATASYNC=1; HAVE_DECL_GETDOMAINNAME=1; HAVE_DECL_GETLOGIN=1; HAVE_DECL_GETLOGIN_R=1; HAVE_DECL_GETPAGESIZE=1; HAVE_DECL_GETUSERSHELL=1; HAVE_DECL_SETHOSTNAME=1; HAVE_DECL_TRUNCATE=1; HAVE_DECL_TTYNAME_R=1; HAVE_OS_H=0; HAVE_SYS_PARAM_H=0; REPLACE_ACCESS=0; REPLACE_CHOWN=0; REPLACE_CLOSE=0; REPLACE_DUP=0; REPLACE_DUP2=0; REPLACE_FACCESSAT=0; REPLACE_FCHOWNAT=0; REPLACE_FTRUNCATE=0; REPLACE_GETCWD=0; REPLACE_GETDOMAINNAME=0; REPLACE_GETDTABLESIZE=0; REPLACE_GETLOGIN_R=0; REPLACE_GETGROUPS=0; REPLACE_GETPAGESIZE=0; REPLACE_GETPASS=0; REPLACE_ISATTY=0; REPLACE_LCHOWN=0; REPLACE_LINK=0; REPLACE_LINKAT=0; REPLACE_LSEEK=0; REPLACE_PREAD=0; REPLACE_PWRITE=0; REPLACE_READ=0; REPLACE_READLINK=0; REPLACE_READLINKAT=0; REPLACE_RMDIR=0; REPLACE_SLEEP=0; REPLACE_SYMLINK=0; REPLACE_SYMLINKAT=0; REPLACE_TRUNCATE=0; REPLACE_TTYNAME_R=0; REPLACE_UNLINK=0; REPLACE_UNLINKAT=0; REPLACE_USLEEP=0; REPLACE_WRITE=0; UNISTD_H_HAVE_WINSOCK2_H=0; UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0; # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac 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 $as_echo_n "checking for working alloca.h... " >&6; } if ${ac_cv_working_alloca_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { char *p = (char *) alloca (2 * sizeof (int)); if (p) return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_working_alloca_h=yes else ac_cv_working_alloca_h=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 $as_echo "$ac_cv_working_alloca_h" >&6; } if test $ac_cv_working_alloca_h = yes; then $as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 $as_echo_n "checking for alloca... " >&6; } if ${ac_cv_func_alloca_works+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __GNUC__ # define alloca __builtin_alloca #else # ifdef _MSC_VER # include # define alloca _alloca # else # ifdef HAVE_ALLOCA_H # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca /* predefined by HP cc +Olibcalls */ void *alloca (size_t); # endif # endif # endif # endif #endif int main () { char *p = (char *) alloca (1); if (p) return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_func_alloca_works=yes else ac_cv_func_alloca_works=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 $as_echo "$ac_cv_func_alloca_works" >&6; } if test $ac_cv_func_alloca_works = yes; then $as_echo "#define HAVE_ALLOCA 1" >>confdefs.h else # The SVR3 libPW and SVR4 libucb both contain incompatible functions # that cause trouble. Some versions do not even contain alloca or # contain a buggy version. If you still want to use their alloca, # use ar to extract alloca.o from them instead of compiling alloca.c. ALLOCA=\${LIBOBJDIR}alloca.$ac_objext $as_echo "#define C_ALLOCA 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 $as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } if ${ac_cv_os_cray+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined CRAY && ! defined CRAY2 webecray #else wenotbecray #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "webecray" >/dev/null 2>&1; then : ac_cv_os_cray=yes else ac_cv_os_cray=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 $as_echo "$ac_cv_os_cray" >&6; } if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; 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 CRAY_STACKSEG_END $ac_func _ACEOF break fi done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 $as_echo_n "checking stack direction for C alloca... " >&6; } if ${ac_cv_c_stack_direction+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_c_stack_direction=0 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int find_stack_direction (int *addr, int depth) { int dir, dummy = 0; if (! addr) addr = &dummy; *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; dir = depth ? find_stack_direction (addr, depth - 1) : 0; return dir + dummy; } int main (int argc, char **argv) { return find_stack_direction (0, argc + !argv + 20) < 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_stack_direction=1 else ac_cv_c_stack_direction=-1 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_c_stack_direction" >&5 $as_echo "$ac_cv_c_stack_direction" >&6; } cat >>confdefs.h <<_ACEOF #define STACK_DIRECTION $ac_cv_c_stack_direction _ACEOF fi for ac_func in $ac_func_list 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 $ac_cv_func__set_invalid_parameter_handler = yes; then HAVE_MSVC_INVALID_PARAMETER_HANDLER=1 $as_echo "#define HAVE_MSVC_INVALID_PARAMETER_HANDLER 1" >>confdefs.h else HAVE_MSVC_INVALID_PARAMETER_HANDLER=0 fi for ac_header in $ac_header_list do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether // is distinct from /" >&5 $as_echo_n "checking whether // is distinct from /... " >&6; } if ${gl_cv_double_slash_root+:} false; then : $as_echo_n "(cached) " >&6 else if test x"$cross_compiling" = xyes ; then # When cross-compiling, there is no way to tell whether // is special # short of a list of hosts. However, the only known hosts to date # that have a distinct // are Apollo DomainOS (too old to port to), # Cygwin, and z/OS. If anyone knows of another system for which // has # special semantics and is distinct from /, please report it to # . case $host in *-cygwin | i370-ibm-openedition) gl_cv_double_slash_root=yes ;; *) # Be optimistic and assume that / and // are the same when we # don't know. gl_cv_double_slash_root='unknown, assuming no' ;; esac else set x `ls -di / // 2>/dev/null` if test "$2" = "$4" && wc //dev/null >/dev/null 2>&1; then gl_cv_double_slash_root=no else gl_cv_double_slash_root=yes fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_double_slash_root" >&5 $as_echo "$gl_cv_double_slash_root" >&6; } if test "$gl_cv_double_slash_root" = yes; then $as_echo "#define DOUBLE_SLASH_IS_DISTINCT_ROOT 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the preprocessor supports include_next" >&5 $as_echo_n "checking whether the preprocessor supports include_next... " >&6; } if ${gl_cv_have_include_next+:} false; then : $as_echo_n "(cached) " >&6 else rm -rf conftestd1a conftestd1b conftestd2 mkdir conftestd1a conftestd1b conftestd2 cat < conftestd1a/conftest.h #define DEFINED_IN_CONFTESTD1 #include_next #ifdef DEFINED_IN_CONFTESTD2 int foo; #else #error "include_next doesn't work" #endif EOF cat < conftestd1b/conftest.h #define DEFINED_IN_CONFTESTD1 #include #include_next #ifdef DEFINED_IN_CONFTESTD2 int foo; #else #error "include_next doesn't work" #endif EOF cat < conftestd2/conftest.h #ifndef DEFINED_IN_CONFTESTD1 #error "include_next test doesn't work" #endif #define DEFINED_IN_CONFTESTD2 EOF gl_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_have_include_next=yes else CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_have_include_next=buggy else gl_cv_have_include_next=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$gl_save_CPPFLAGS" rm -rf conftestd1a conftestd1b conftestd2 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_include_next" >&5 $as_echo "$gl_cv_have_include_next" >&6; } PRAGMA_SYSTEM_HEADER= if test $gl_cv_have_include_next = yes; then INCLUDE_NEXT=include_next INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next if test -n "$GCC"; then PRAGMA_SYSTEM_HEADER='#pragma GCC system_header' fi else if test $gl_cv_have_include_next = buggy; then INCLUDE_NEXT=include INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next else INCLUDE_NEXT=include INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether system header files limit the line length" >&5 $as_echo_n "checking whether system header files limit the line length... " >&6; } if ${gl_cv_pragma_columns+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __TANDEM choke me #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "choke me" >/dev/null 2>&1; then : gl_cv_pragma_columns=yes else gl_cv_pragma_columns=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_pragma_columns" >&5 $as_echo "$gl_cv_pragma_columns" >&6; } if test $gl_cv_pragma_columns = yes; then PRAGMA_COLUMNS="#pragma COLUMNS 10000" else PRAGMA_COLUMNS= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for complete errno.h" >&5 $as_echo_n "checking for complete errno.h... " >&6; } if ${gl_cv_header_errno_h_complete+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #if !defined ETXTBSY booboo #endif #if !defined ENOMSG booboo #endif #if !defined EIDRM booboo #endif #if !defined ENOLINK booboo #endif #if !defined EPROTO booboo #endif #if !defined EMULTIHOP booboo #endif #if !defined EBADMSG booboo #endif #if !defined EOVERFLOW booboo #endif #if !defined ENOTSUP booboo #endif #if !defined ENETRESET booboo #endif #if !defined ECONNABORTED booboo #endif #if !defined ESTALE booboo #endif #if !defined EDQUOT booboo #endif #if !defined ECANCELED booboo #endif #if !defined EOWNERDEAD booboo #endif #if !defined ENOTRECOVERABLE booboo #endif #if !defined EILSEQ booboo #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "booboo" >/dev/null 2>&1; then : gl_cv_header_errno_h_complete=no else gl_cv_header_errno_h_complete=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_complete" >&5 $as_echo "$gl_cv_header_errno_h_complete" >&6; } if test $gl_cv_header_errno_h_complete = yes; then ERRNO_H='' else if test $gl_cv_have_include_next = yes; then gl_cv_next_errno_h='<'errno.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_errno_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'errno.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_errno_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_errno_h gl_cv_next_errno_h='"'$gl_header'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_errno_h" >&5 $as_echo "$gl_cv_next_errno_h" >&6; } fi NEXT_ERRNO_H=$gl_cv_next_errno_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'errno.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_errno_h fi NEXT_AS_FIRST_DIRECTIVE_ERRNO_H=$gl_next_as_first_directive ERRNO_H='errno.h' fi if test -n "$ERRNO_H"; then GL_GENERATE_ERRNO_H_TRUE= GL_GENERATE_ERRNO_H_FALSE='#' else GL_GENERATE_ERRNO_H_TRUE='#' GL_GENERATE_ERRNO_H_FALSE= fi if test -n "$ERRNO_H"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EMULTIHOP value" >&5 $as_echo_n "checking for EMULTIHOP value... " >&6; } if ${gl_cv_header_errno_h_EMULTIHOP+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef EMULTIHOP yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : gl_cv_header_errno_h_EMULTIHOP=yes else gl_cv_header_errno_h_EMULTIHOP=no fi rm -f conftest* if test $gl_cv_header_errno_h_EMULTIHOP = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include #ifdef EMULTIHOP yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : gl_cv_header_errno_h_EMULTIHOP=hidden fi rm -f conftest* if test $gl_cv_header_errno_h_EMULTIHOP = hidden; then if ac_fn_c_compute_int "$LINENO" "EMULTIHOP" "gl_cv_header_errno_h_EMULTIHOP" " #define _XOPEN_SOURCE_EXTENDED 1 #include /* The following two lines are a workaround against an autoconf-2.52 bug. */ #include #include "; then : fi fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_EMULTIHOP" >&5 $as_echo "$gl_cv_header_errno_h_EMULTIHOP" >&6; } case $gl_cv_header_errno_h_EMULTIHOP in yes | no) EMULTIHOP_HIDDEN=0; EMULTIHOP_VALUE= ;; *) EMULTIHOP_HIDDEN=1; EMULTIHOP_VALUE="$gl_cv_header_errno_h_EMULTIHOP" ;; esac fi if test -n "$ERRNO_H"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ENOLINK value" >&5 $as_echo_n "checking for ENOLINK value... " >&6; } if ${gl_cv_header_errno_h_ENOLINK+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef ENOLINK yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : gl_cv_header_errno_h_ENOLINK=yes else gl_cv_header_errno_h_ENOLINK=no fi rm -f conftest* if test $gl_cv_header_errno_h_ENOLINK = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include #ifdef ENOLINK yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : gl_cv_header_errno_h_ENOLINK=hidden fi rm -f conftest* if test $gl_cv_header_errno_h_ENOLINK = hidden; then if ac_fn_c_compute_int "$LINENO" "ENOLINK" "gl_cv_header_errno_h_ENOLINK" " #define _XOPEN_SOURCE_EXTENDED 1 #include /* The following two lines are a workaround against an autoconf-2.52 bug. */ #include #include "; then : fi fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_ENOLINK" >&5 $as_echo "$gl_cv_header_errno_h_ENOLINK" >&6; } case $gl_cv_header_errno_h_ENOLINK in yes | no) ENOLINK_HIDDEN=0; ENOLINK_VALUE= ;; *) ENOLINK_HIDDEN=1; ENOLINK_VALUE="$gl_cv_header_errno_h_ENOLINK" ;; esac fi if test -n "$ERRNO_H"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EOVERFLOW value" >&5 $as_echo_n "checking for EOVERFLOW value... " >&6; } if ${gl_cv_header_errno_h_EOVERFLOW+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef EOVERFLOW yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : gl_cv_header_errno_h_EOVERFLOW=yes else gl_cv_header_errno_h_EOVERFLOW=no fi rm -f conftest* if test $gl_cv_header_errno_h_EOVERFLOW = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include #ifdef EOVERFLOW yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : gl_cv_header_errno_h_EOVERFLOW=hidden fi rm -f conftest* if test $gl_cv_header_errno_h_EOVERFLOW = hidden; then if ac_fn_c_compute_int "$LINENO" "EOVERFLOW" "gl_cv_header_errno_h_EOVERFLOW" " #define _XOPEN_SOURCE_EXTENDED 1 #include /* The following two lines are a workaround against an autoconf-2.52 bug. */ #include #include "; then : fi fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_EOVERFLOW" >&5 $as_echo "$gl_cv_header_errno_h_EOVERFLOW" >&6; } case $gl_cv_header_errno_h_EOVERFLOW in yes | no) EOVERFLOW_HIDDEN=0; EOVERFLOW_VALUE= ;; *) EOVERFLOW_HIDDEN=1; EOVERFLOW_VALUE="$gl_cv_header_errno_h_EOVERFLOW" ;; esac fi ac_fn_c_check_decl "$LINENO" "strerror_r" "ac_cv_have_decl_strerror_r" "$ac_includes_default" if test "x$ac_cv_have_decl_strerror_r" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_STRERROR_R $ac_have_decl _ACEOF for ac_func in strerror_r do : ac_fn_c_check_func "$LINENO" "strerror_r" "ac_cv_func_strerror_r" if test "x$ac_cv_func_strerror_r" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRERROR_R 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strerror_r returns char *" >&5 $as_echo_n "checking whether strerror_r returns char *... " >&6; } if ${ac_cv_func_strerror_r_char_p+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_func_strerror_r_char_p=no if test $ac_cv_have_decl_strerror_r = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { char buf[100]; char x = *strerror_r (0, buf, sizeof buf); char *p = strerror_r (0, buf, sizeof buf); return !p || x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_func_strerror_r_char_p=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else # strerror_r is not declared. Choose between # systems that have relatively inaccessible declarations for the # function. BeOS and DEC UNIX 4.0 fall in this category, but the # former has a strerror_r that returns char*, while the latter # has a strerror_r that returns `int'. # This test should segfault on the DEC system. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default extern char *strerror_r (); int main () { char buf[100]; char x = *strerror_r (0, buf, sizeof buf); return ! isalpha (x); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_strerror_r_char_p=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strerror_r_char_p" >&5 $as_echo "$ac_cv_func_strerror_r_char_p" >&6; } if test $ac_cv_func_strerror_r_char_p = yes; then $as_echo "#define STRERROR_R_CHAR_P 1" >>confdefs.h fi XGETTEXT_EXTRA_OPTIONS= GNULIB_CREAT=0; GNULIB_FCNTL=0; GNULIB_NONBLOCKING=0; GNULIB_OPEN=0; GNULIB_OPENAT=0; HAVE_FCNTL=1; HAVE_OPENAT=1; REPLACE_CREAT=0; REPLACE_FCNTL=0; REPLACE_OPEN=0; REPLACE_OPENAT=0; { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fcntl.h" >&5 $as_echo_n "checking for working fcntl.h... " >&6; } if ${gl_cv_header_working_fcntl_h+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess 'no' on native Windows. mingw*) gl_cv_header_working_fcntl_h='no' ;; *) gl_cv_header_working_fcntl_h=cross-compiling ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if HAVE_UNISTD_H # include #else /* on Windows with MSVC */ # include # include # defined sleep(n) _sleep ((n) * 1000) #endif #include #ifndef O_NOATIME #define O_NOATIME 0 #endif #ifndef O_NOFOLLOW #define O_NOFOLLOW 0 #endif static int const constants[] = { O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND, O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY }; int main () { int result = !constants; #if HAVE_SYMLINK { static char const sym[] = "conftest.sym"; if (symlink ("/dev/null", sym) != 0) result |= 2; else { int fd = open (sym, O_WRONLY | O_NOFOLLOW | O_CREAT, 0); if (fd >= 0) { close (fd); result |= 4; } } if (unlink (sym) != 0 || symlink (".", sym) != 0) result |= 2; else { int fd = open (sym, O_RDONLY | O_NOFOLLOW); if (fd >= 0) { close (fd); result |= 4; } } unlink (sym); } #endif { static char const file[] = "confdefs.h"; int fd = open (file, O_RDONLY | O_NOATIME); if (fd < 0) result |= 8; else { struct stat st0; if (fstat (fd, &st0) != 0) result |= 16; else { char c; sleep (1); if (read (fd, &c, 1) != 1) result |= 24; else { if (close (fd) != 0) result |= 32; else { struct stat st1; if (stat (file, &st1) != 0) result |= 40; else if (st0.st_atime != st1.st_atime) result |= 64; } } } } } return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_header_working_fcntl_h=yes else case $? in #( 4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #( 64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #( 68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #( *) gl_cv_header_working_fcntl_h='no';; esac 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: $gl_cv_header_working_fcntl_h" >&5 $as_echo "$gl_cv_header_working_fcntl_h" >&6; } case $gl_cv_header_working_fcntl_h in #( *O_NOATIME* | no | cross-compiling) ac_val=0;; #( *) ac_val=1;; esac cat >>confdefs.h <<_ACEOF #define HAVE_WORKING_O_NOATIME $ac_val _ACEOF case $gl_cv_header_working_fcntl_h in #( *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #( *) ac_val=1;; esac cat >>confdefs.h <<_ACEOF #define HAVE_WORKING_O_NOFOLLOW $ac_val _ACEOF ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" if test "x$ac_cv_type_pid_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define pid_t int _ACEOF fi ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default" if test "x$ac_cv_type_mode_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define mode_t int _ACEOF fi ac_fn_c_check_func "$LINENO" "eaccess" "ac_cv_func_eaccess" if test "x$ac_cv_func_eaccess" = xyes; then : else $as_echo "#define eaccess access" >>confdefs.h fi ac_fn_c_check_decl "$LINENO" "getdtablesize" "ac_cv_have_decl_getdtablesize" "$ac_includes_default" if test "x$ac_cv_have_decl_getdtablesize" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_GETDTABLESIZE $ac_have_decl _ACEOF GNULIB__EXIT=0; GNULIB_ATOLL=0; GNULIB_CALLOC_POSIX=0; GNULIB_CANONICALIZE_FILE_NAME=0; GNULIB_GETLOADAVG=0; GNULIB_GETSUBOPT=0; GNULIB_GRANTPT=0; GNULIB_MALLOC_POSIX=0; GNULIB_MBTOWC=0; GNULIB_MKDTEMP=0; GNULIB_MKOSTEMP=0; GNULIB_MKOSTEMPS=0; GNULIB_MKSTEMP=0; GNULIB_MKSTEMPS=0; GNULIB_POSIX_OPENPT=0; GNULIB_PTSNAME=0; GNULIB_PTSNAME_R=0; GNULIB_PUTENV=0; GNULIB_QSORT_R=0; GNULIB_RANDOM=0; GNULIB_RANDOM_R=0; GNULIB_REALLOCARRAY=0; GNULIB_REALLOC_POSIX=0; GNULIB_REALPATH=0; GNULIB_RPMATCH=0; GNULIB_SECURE_GETENV=0; GNULIB_SETENV=0; GNULIB_STRTOD=0; GNULIB_STRTOLD=0; GNULIB_STRTOLL=0; GNULIB_STRTOULL=0; GNULIB_SYSTEM_POSIX=0; GNULIB_UNLOCKPT=0; GNULIB_UNSETENV=0; GNULIB_WCTOMB=0; HAVE__EXIT=1; HAVE_ATOLL=1; HAVE_CANONICALIZE_FILE_NAME=1; HAVE_DECL_GETLOADAVG=1; HAVE_GETSUBOPT=1; HAVE_GRANTPT=1; HAVE_INITSTATE=1; HAVE_DECL_INITSTATE=1; HAVE_MBTOWC=1; HAVE_MKDTEMP=1; HAVE_MKOSTEMP=1; HAVE_MKOSTEMPS=1; HAVE_MKSTEMP=1; HAVE_MKSTEMPS=1; HAVE_POSIX_OPENPT=1; HAVE_PTSNAME=1; HAVE_PTSNAME_R=1; HAVE_QSORT_R=1; HAVE_RANDOM=1; HAVE_RANDOM_H=1; HAVE_RANDOM_R=1; HAVE_REALLOCARRAY=1; HAVE_REALPATH=1; HAVE_RPMATCH=1; HAVE_SECURE_GETENV=1; HAVE_SETENV=1; HAVE_DECL_SETENV=1; HAVE_SETSTATE=1; HAVE_DECL_SETSTATE=1; HAVE_STRTOD=1; HAVE_STRTOLD=1; HAVE_STRTOLL=1; HAVE_STRTOULL=1; HAVE_STRUCT_RANDOM_DATA=1; HAVE_SYS_LOADAVG_H=0; HAVE_UNLOCKPT=1; HAVE_DECL_UNSETENV=1; REPLACE_CALLOC=0; REPLACE_CANONICALIZE_FILE_NAME=0; REPLACE_INITSTATE=0; REPLACE_MALLOC=0; REPLACE_MBTOWC=0; REPLACE_MKSTEMP=0; REPLACE_PTSNAME=0; REPLACE_PTSNAME_R=0; REPLACE_PUTENV=0; REPLACE_QSORT_R=0; REPLACE_RANDOM=0; REPLACE_RANDOM_R=0; REPLACE_REALLOC=0; REPLACE_REALPATH=0; REPLACE_SETENV=0; REPLACE_SETSTATE=0; REPLACE_STRTOD=0; REPLACE_STRTOLD=0; REPLACE_UNSETENV=0; REPLACE_WCTOMB=0; cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _MSC_VER MicrosoftCompiler #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "MicrosoftCompiler" >/dev/null 2>&1; then : gl_asmext='asm' gl_c_asm_opt='-c -Fa' else gl_asmext='s' gl_c_asm_opt='-S' fi rm -f conftest* { $as_echo "$as_me:${as_lineno-$LINENO}: checking host CPU and C ABI" >&5 $as_echo_n "checking host CPU and C ABI... " >&6; } if ${gl_cv_host_cpu_c_abi+:} false; then : $as_echo_n "(cached) " >&6 else case "$host_cpu" in i[34567]86 ) gl_cv_host_cpu_c_abi=i386 ;; x86_64 ) # On x86_64 systems, the C compiler may be generating code in one of # these ABIs: # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64. # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64 # with native Windows (mingw, MSVC). # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32. # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if (defined __x86_64__ || defined __amd64__ \ || defined _M_X64 || defined _M_AMD64) int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __ILP32__ || defined _ILP32 int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_host_cpu_c_abi=x86_64-x32 else gl_cv_host_cpu_c_abi=x86_64 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else gl_cv_host_cpu_c_abi=i386 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] ) gl_cv_host_cpu_c_abi=alpha ;; arm* | aarch64 ) # Assume arm with EABI. # On arm64 systems, the C compiler may be generating code in one of # these ABIs: # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64. # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32. # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __aarch64__ int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __ILP32__ || defined _ILP32 int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_host_cpu_c_abi=arm64-ilp32 else gl_cv_host_cpu_c_abi=arm64 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else # Don't distinguish little-endian and big-endian arm, since they # don't require different machine code for simple operations and # since the user can distinguish them through the preprocessor # defines __ARMEL__ vs. __ARMEB__. # But distinguish arm which passes floating-point arguments and # return values in integer registers (r0, r1, ...) - this is # gcc -mfloat-abi=soft or gcc -mfloat-abi=softfp - from arm which # passes them in float registers (s0, s1, ...) and double registers # (d0, d1, ...) - this is gcc -mfloat-abi=hard. GCC 4.6 or newer # sets the preprocessor defines __ARM_PCS (for the first case) and # __ARM_PCS_VFP (for the second case), but older GCC does not. echo 'double ddd; void func (double dd) { ddd = dd; }' > conftest.c # Look for a reference to the register d0 in the .s file. { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $gl_c_asm_opt conftest.c' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } >/dev/null 2>&1 if LC_ALL=C grep 'd0,' conftest.$gl_asmext >/dev/null; then gl_cv_host_cpu_c_abi=armhf else gl_cv_host_cpu_c_abi=arm fi rm -f conftest* fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; hppa1.0 | hppa1.1 | hppa2.0* | hppa64 ) # On hppa, the C compiler may be generating 32-bit code or 64-bit # code. In the latter case, it defines _LP64 and __LP64__. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __LP64__ int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_host_cpu_c_abi=hppa64 else gl_cv_host_cpu_c_abi=hppa fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; ia64* ) # On ia64 on HP-UX, the C compiler may be generating 64-bit code or # 32-bit code. In the latter case, it defines _ILP32. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _ILP32 int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_host_cpu_c_abi=ia64-ilp32 else gl_cv_host_cpu_c_abi=ia64 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; mips* ) # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this # at 32. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64) int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_host_cpu_c_abi=mips64 else # In the n32 ABI, _ABIN32 is defined, _ABIO32 is not defined (but # may later get defined by ), and _MIPS_SIM == _ABIN32. # In the 32 ABI, _ABIO32 is defined, _ABIN32 is not defined (but # may later get defined by ), and _MIPS_SIM == _ABIO32. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if (_MIPS_SIM == _ABIN32) int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_host_cpu_c_abi=mipsn32 else gl_cv_host_cpu_c_abi=mips fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; powerpc* ) # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD. # No need to distinguish them here; the caller may distinguish # them based on the OS. # On powerpc64 systems, the C compiler may still be generating # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may # be generating 64-bit code. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __powerpc64__ || defined _ARCH_PPC64 int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # On powerpc64, there are two ABIs on Linux: The AIX compatible # one and the ELFv2 one. The latter defines _CALL_ELF=2. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined _CALL_ELF && _CALL_ELF == 2 int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_host_cpu_c_abi=powerpc64-elfv2 else gl_cv_host_cpu_c_abi=powerpc64 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else gl_cv_host_cpu_c_abi=powerpc fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; rs6000 ) gl_cv_host_cpu_c_abi=powerpc ;; riscv32 | riscv64 ) # There are 2 architectures (with variants): rv32* and rv64*. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if __riscv_xlen == 64 int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cpu=riscv64 else cpu=riscv32 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d. # Size of 'long' and 'void *': cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __LP64__ int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : main_abi=lp64 else main_abi=ilp32 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Float ABIs: # __riscv_float_abi_double: # 'float' and 'double' are passed in floating-point registers. # __riscv_float_abi_single: # 'float' are passed in floating-point registers. # __riscv_float_abi_soft: # No values are passed in floating-point registers. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __riscv_float_abi_double int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : float_abi=d else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __riscv_float_abi_single int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : float_abi=f else float_abi='' fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext gl_cv_host_cpu_c_abi="${cpu}-${main_abi}${float_abi}" ;; s390* ) # On s390x, the C compiler may be generating 64-bit (= s390x) code # or 31-bit (= s390) code. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __LP64__ || defined __s390x__ int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_host_cpu_c_abi=s390x else gl_cv_host_cpu_c_abi=s390 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; sparc | sparc64 ) # UltraSPARCs running Linux have `uname -m` = "sparc64", but the # C compiler still generates 32-bit code. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __sparcv9 || defined __arch64__ int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_host_cpu_c_abi=sparc64 else gl_cv_host_cpu_c_abi=sparc fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; *) gl_cv_host_cpu_c_abi="$host_cpu" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_host_cpu_c_abi" >&5 $as_echo "$gl_cv_host_cpu_c_abi" >&6; } HOST_CPU=`echo "$gl_cv_host_cpu_c_abi" | sed -e 's/-.*//'` HOST_CPU_C_ABI="$gl_cv_host_cpu_c_abi" # This was # AC_DEFINE_UNQUOTED([__${HOST_CPU}__]) # AC_DEFINE_UNQUOTED([__${HOST_CPU_C_ABI}__]) # earlier, but KAI C++ 3.2d doesn't like this. sed -e 's/-/_/g' >> confdefs.h <' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_limits_h+:} false; then : $as_echo_n "(cached) " >&6 else if test $ac_cv_header_limits_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'limits.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_limits_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_limits_h gl_cv_next_limits_h='"'$gl_header'"' else gl_cv_next_limits_h='<'limits.h'>' fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_limits_h" >&5 $as_echo "$gl_cv_next_limits_h" >&6; } fi NEXT_LIMITS_H=$gl_cv_next_limits_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'limits.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_limits_h fi NEXT_AS_FIRST_DIRECTIVE_LIMITS_H=$gl_next_as_first_directive { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether limits.h has LLONG_MAX, WORD_BIT, ULLONG_WIDTH etc." >&5 $as_echo_n "checking whether limits.h has LLONG_MAX, WORD_BIT, ULLONG_WIDTH etc.... " >&6; } if ${gl_cv_header_limits_width+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 #endif #include long long llm = LLONG_MAX; int wb = WORD_BIT; int ullw = ULLONG_WIDTH; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_header_limits_width=yes else gl_cv_header_limits_width=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_limits_width" >&5 $as_echo "$gl_cv_header_limits_width" >&6; } if test "$gl_cv_header_limits_width" = yes; then LIMITS_H= else LIMITS_H=limits.h fi if test -n "$LIMITS_H"; then GL_GENERATE_LIMITS_H_TRUE= GL_GENERATE_LIMITS_H_FALSE='#' else GL_GENERATE_LIMITS_H_TRUE='#' GL_GENERATE_LIMITS_H_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether malloc, realloc, calloc are POSIX compliant" >&5 $as_echo_n "checking whether malloc, realloc, calloc are POSIX compliant... " >&6; } if ${gl_cv_func_malloc_posix+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #if defined _WIN32 && ! defined __CYGWIN__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_func_malloc_posix=yes else gl_cv_func_malloc_posix=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_malloc_posix" >&5 $as_echo "$gl_cv_func_malloc_posix" >&6; } gl_cv_c_multiarch=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : arch= prev= for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do if test -n "$prev"; then case $word in i?86 | x86_64 | ppc | ppc64) if test -z "$arch" || test "$arch" = "$word"; then arch="$word" else gl_cv_c_multiarch=yes fi ;; esac prev= else if test "x$word" = "x-arch"; then prev=arch fi fi done fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $gl_cv_c_multiarch = yes; then APPLE_UNIVERSAL_BUILD=1 else APPLE_UNIVERSAL_BUILD=0 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 $as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } if ${ac_cv_header_stdbool_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef __cplusplus typedef bool Bool; #else typedef _Bool Bool; #ifndef bool "error: bool is not defined" #endif #ifndef false "error: false is not defined" #endif #if false "error: false is not 0" #endif #ifndef true "error: true is not defined" #endif #if true != 1 "error: true is not 1" #endif #endif #ifndef __bool_true_false_are_defined "error: __bool_true_false_are_defined is not defined" #endif struct s { Bool s: 1; Bool t; bool u: 1; bool v; } s; char a[true == 1 ? 1 : -1]; char b[false == 0 ? 1 : -1]; char c[__bool_true_false_are_defined == 1 ? 1 : -1]; char d[(bool) 0.5 == true ? 1 : -1]; /* See body of main program for 'e'. */ char f[(Bool) 0.0 == false ? 1 : -1]; char g[true]; char h[sizeof (Bool)]; char i[sizeof s.t]; enum { j = false, k = true, l = false * true, m = true * 256 }; /* The following fails for HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ Bool n[m]; char o[sizeof n == m * sizeof n[0] ? 1 : -1]; char p[-1 - (Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; /* Catch a bug in an HP-UX C compiler. See https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html https://lists.gnu.org/r/bug-coreutils/2005-11/msg00161.html */ Bool q = true; Bool *pq = &q; bool *qq = &q; int main () { bool e = &s; *pq |= q; *pq |= ! q; *qq |= q; *qq |= ! q; /* Refer to every declared value, to avoid compiler optimizations. */ return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + !m + !n + !o + !p + !q + !pq + !qq); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdbool_h=yes else ac_cv_header_stdbool_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 $as_echo "$ac_cv_header_stdbool_h" >&6; } ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" if test "x$ac_cv_type__Bool" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE__BOOL 1 _ACEOF fi REPLACE_NULL=0; HAVE_MAX_ALIGN_T=1; HAVE_WCHAR_T=1; { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchar_t" >&5 $as_echo_n "checking for wchar_t... " >&6; } if ${gt_cv_c_wchar_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include wchar_t foo = (wchar_t)'\0'; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gt_cv_c_wchar_t=yes else gt_cv_c_wchar_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wchar_t" >&5 $as_echo "$gt_cv_c_wchar_t" >&6; } if test $gt_cv_c_wchar_t = yes; then $as_echo "#define HAVE_WCHAR_T 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wint_t" >&5 $as_echo_n "checking for wint_t... " >&6; } if ${gt_cv_c_wint_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include wint_t foo = (wchar_t)'\0'; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gt_cv_c_wint_t=yes else gt_cv_c_wint_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wint_t" >&5 $as_echo "$gt_cv_c_wint_t" >&6; } if test $gt_cv_c_wint_t = yes; then $as_echo "#define HAVE_WINT_T 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wint_t is too small" >&5 $as_echo_n "checking whether wint_t is too small... " >&6; } if ${gl_cv_type_wint_t_too_small+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include # include # include #endif #include int verify[sizeof (wint_t) < sizeof (int) ? -1 : 1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_type_wint_t_too_small=no else gl_cv_type_wint_t_too_small=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wint_t_too_small" >&5 $as_echo "$gl_cv_type_wint_t_too_small" >&6; } if test $gl_cv_type_wint_t_too_small = yes; then GNULIB_OVERRIDES_WINT_T=1 else GNULIB_OVERRIDES_WINT_T=0 fi else GNULIB_OVERRIDES_WINT_T=0 fi $as_echo "#define HAVE_LONG_LONG_INT 1" >>confdefs.h $as_echo "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h if test $ac_cv_header_wchar_h = yes; then HAVE_WCHAR_H=1 else HAVE_WCHAR_H=0 fi if test $ac_cv_header_inttypes_h = yes; then HAVE_INTTYPES_H=1 else HAVE_INTTYPES_H=0 fi if test $ac_cv_header_sys_types_h = yes; then HAVE_SYS_TYPES_H=1 else HAVE_SYS_TYPES_H=0 fi if test $gl_cv_have_include_next = yes; then gl_cv_next_stdint_h='<'stdint.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_stdint_h+:} false; then : $as_echo_n "(cached) " >&6 else if test $ac_cv_header_stdint_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'stdint.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_stdint_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_stdint_h gl_cv_next_stdint_h='"'$gl_header'"' else gl_cv_next_stdint_h='<'stdint.h'>' fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdint_h" >&5 $as_echo "$gl_cv_next_stdint_h" >&6; } fi NEXT_STDINT_H=$gl_cv_next_stdint_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'stdint.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_stdint_h fi NEXT_AS_FIRST_DIRECTIVE_STDINT_H=$gl_next_as_first_directive if test $ac_cv_header_stdint_h = yes; then HAVE_STDINT_H=1 else HAVE_STDINT_H=0 fi if test $ac_cv_header_stdint_h = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stdint.h conforms to C99" >&5 $as_echo_n "checking whether stdint.h conforms to C99... " >&6; } if ${gl_cv_header_working_stdint_h+:} false; then : $as_echo_n "(cached) " >&6 else gl_cv_header_working_stdint_h=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #define __STDC_CONSTANT_MACROS 1 #define __STDC_LIMIT_MACROS 1 #include /* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in . */ #if !(defined WCHAR_MIN && defined WCHAR_MAX) #error "WCHAR_MIN, WCHAR_MAX not defined in " #endif /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif #ifdef INT8_MAX int8_t a1 = INT8_MAX; int8_t a1min = INT8_MIN; #endif #ifdef INT16_MAX int16_t a2 = INT16_MAX; int16_t a2min = INT16_MIN; #endif #ifdef INT32_MAX int32_t a3 = INT32_MAX; int32_t a3min = INT32_MIN; #endif #ifdef INT64_MAX int64_t a4 = INT64_MAX; int64_t a4min = INT64_MIN; #endif #ifdef UINT8_MAX uint8_t b1 = UINT8_MAX; #else typedef int b1[(unsigned char) -1 != 255 ? 1 : -1]; #endif #ifdef UINT16_MAX uint16_t b2 = UINT16_MAX; #endif #ifdef UINT32_MAX uint32_t b3 = UINT32_MAX; #endif #ifdef UINT64_MAX uint64_t b4 = UINT64_MAX; #endif int_least8_t c1 = INT8_C (0x7f); int_least8_t c1max = INT_LEAST8_MAX; int_least8_t c1min = INT_LEAST8_MIN; int_least16_t c2 = INT16_C (0x7fff); int_least16_t c2max = INT_LEAST16_MAX; int_least16_t c2min = INT_LEAST16_MIN; int_least32_t c3 = INT32_C (0x7fffffff); int_least32_t c3max = INT_LEAST32_MAX; int_least32_t c3min = INT_LEAST32_MIN; int_least64_t c4 = INT64_C (0x7fffffffffffffff); int_least64_t c4max = INT_LEAST64_MAX; int_least64_t c4min = INT_LEAST64_MIN; uint_least8_t d1 = UINT8_C (0xff); uint_least8_t d1max = UINT_LEAST8_MAX; uint_least16_t d2 = UINT16_C (0xffff); uint_least16_t d2max = UINT_LEAST16_MAX; uint_least32_t d3 = UINT32_C (0xffffffff); uint_least32_t d3max = UINT_LEAST32_MAX; uint_least64_t d4 = UINT64_C (0xffffffffffffffff); uint_least64_t d4max = UINT_LEAST64_MAX; int_fast8_t e1 = INT_FAST8_MAX; int_fast8_t e1min = INT_FAST8_MIN; int_fast16_t e2 = INT_FAST16_MAX; int_fast16_t e2min = INT_FAST16_MIN; int_fast32_t e3 = INT_FAST32_MAX; int_fast32_t e3min = INT_FAST32_MIN; int_fast64_t e4 = INT_FAST64_MAX; int_fast64_t e4min = INT_FAST64_MIN; uint_fast8_t f1 = UINT_FAST8_MAX; uint_fast16_t f2 = UINT_FAST16_MAX; uint_fast32_t f3 = UINT_FAST32_MAX; uint_fast64_t f4 = UINT_FAST64_MAX; #ifdef INTPTR_MAX intptr_t g = INTPTR_MAX; intptr_t gmin = INTPTR_MIN; #endif #ifdef UINTPTR_MAX uintptr_t h = UINTPTR_MAX; #endif intmax_t i = INTMAX_MAX; uintmax_t j = UINTMAX_MAX; /* Check that SIZE_MAX has the correct type, if possible. */ #if 201112 <= __STDC_VERSION__ int k = _Generic (SIZE_MAX, size_t: 0); #elif (2 <= __GNUC__ || defined __IBM__TYPEOF__ \ || (0x5110 <= __SUNPRO_C && !__STDC__)) extern size_t k; extern __typeof__ (SIZE_MAX) k; #endif #include /* for CHAR_BIT */ #define TYPE_MINIMUM(t) \ ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t))) #define TYPE_MAXIMUM(t) \ ((t) ((t) 0 < (t) -1 \ ? (t) -1 \ : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) struct s { int check_PTRDIFF: PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t) && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t) ? 1 : -1; /* Detect bug in FreeBSD 6.0 / ia64. */ int check_SIG_ATOMIC: SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t) && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t) ? 1 : -1; int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1; int check_WCHAR: WCHAR_MIN == TYPE_MINIMUM (wchar_t) && WCHAR_MAX == TYPE_MAXIMUM (wchar_t) ? 1 : -1; /* Detect bug in mingw. */ int check_WINT: WINT_MIN == TYPE_MINIMUM (wint_t) && WINT_MAX == TYPE_MAXIMUM (wint_t) ? 1 : -1; /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others. */ int check_UINT8_C: (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1; int check_UINT16_C: (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1; /* Detect bugs in OpenBSD 3.9 stdint.h. */ #ifdef UINT8_MAX int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1; #endif #ifdef UINT16_MAX int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1; #endif #ifdef UINT32_MAX int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1; #endif #ifdef UINT64_MAX int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1; #endif int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1; int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1; int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1; int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1; int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1; int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1; int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1; int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1; int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1; int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1; int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1; }; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : if test "$cross_compiling" = yes; then : case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_header_working_stdint_h="guessing yes" ;; # In general, assume it works. *) gl_cv_header_working_stdint_h="guessing yes" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #define __STDC_CONSTANT_MACROS 1 #define __STDC_LIMIT_MACROS 1 #include /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif #include #include #define MVAL(macro) MVAL1(macro) #define MVAL1(expression) #expression static const char *macro_values[] = { #ifdef INT8_MAX MVAL (INT8_MAX), #endif #ifdef INT16_MAX MVAL (INT16_MAX), #endif #ifdef INT32_MAX MVAL (INT32_MAX), #endif #ifdef INT64_MAX MVAL (INT64_MAX), #endif #ifdef UINT8_MAX MVAL (UINT8_MAX), #endif #ifdef UINT16_MAX MVAL (UINT16_MAX), #endif #ifdef UINT32_MAX MVAL (UINT32_MAX), #endif #ifdef UINT64_MAX MVAL (UINT64_MAX), #endif NULL }; int main () { const char **mv; for (mv = macro_values; *mv != NULL; mv++) { const char *value = *mv; /* Test whether it looks like a cast expression. */ if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0 || strncmp (value, "((unsigned short)"/*)*/, 17) == 0 || strncmp (value, "((unsigned char)"/*)*/, 16) == 0 || strncmp (value, "((int)"/*)*/, 6) == 0 || strncmp (value, "((signed short)"/*)*/, 15) == 0 || strncmp (value, "((signed char)"/*)*/, 14) == 0) return mv - macro_values + 1; } return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_header_working_stdint_h=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_stdint_h" >&5 $as_echo "$gl_cv_header_working_stdint_h" >&6; } fi HAVE_C99_STDINT_H=0 HAVE_SYS_BITYPES_H=0 HAVE_SYS_INTTYPES_H=0 STDINT_H=stdint.h case "$gl_cv_header_working_stdint_h" in *yes) HAVE_C99_STDINT_H=1 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stdint.h predates C++11" >&5 $as_echo_n "checking whether stdint.h predates C++11... " >&6; } if ${gl_cv_header_stdint_predates_cxx11_h+:} false; then : $as_echo_n "(cached) " >&6 else gl_cv_header_stdint_predates_cxx11_h=yes cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #include /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif intmax_t im = INTMAX_MAX; int32_t i32 = INT32_C (0x7fffffff); int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_header_stdint_predates_cxx11_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_predates_cxx11_h" >&5 $as_echo "$gl_cv_header_stdint_predates_cxx11_h" >&6; } if test "$gl_cv_header_stdint_predates_cxx11_h" = yes; then $as_echo "#define __STDC_CONSTANT_MACROS 1" >>confdefs.h $as_echo "#define __STDC_LIMIT_MACROS 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stdint.h has UINTMAX_WIDTH etc." >&5 $as_echo_n "checking whether stdint.h has UINTMAX_WIDTH etc.... " >&6; } if ${gl_cv_header_stdint_width+:} false; then : $as_echo_n "(cached) " >&6 else gl_cv_header_stdint_width=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Work if build is not clean. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 #endif #include /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif int iw = UINTMAX_WIDTH; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_header_stdint_width=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_width" >&5 $as_echo "$gl_cv_header_stdint_width" >&6; } if test "$gl_cv_header_stdint_width" = yes; then STDINT_H= fi ;; *) for ac_header in sys/inttypes.h sys/bitypes.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" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done if test $ac_cv_header_sys_inttypes_h = yes; then HAVE_SYS_INTTYPES_H=1 fi if test $ac_cv_header_sys_bitypes_h = yes; then HAVE_SYS_BITYPES_H=1 fi if test $APPLE_UNIVERSAL_BUILD = 0; then for gltype in ptrdiff_t size_t ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5 $as_echo_n "checking for bit size of $gltype... " >&6; } if eval \${gl_cv_bitsizeof_${gltype}+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result" " /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif #include "; then : else result=unknown fi eval gl_cv_bitsizeof_${gltype}=\$result fi eval ac_res=\$gl_cv_bitsizeof_${gltype} { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval result=\$gl_cv_bitsizeof_${gltype} if test $result = unknown; then result=0 fi GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` cat >>confdefs.h <<_ACEOF #define BITSIZEOF_${GLTYPE} $result _ACEOF eval BITSIZEOF_${GLTYPE}=\$result done fi for gltype in sig_atomic_t wchar_t wint_t ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5 $as_echo_n "checking for bit size of $gltype... " >&6; } if eval \${gl_cv_bitsizeof_${gltype}+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result" " /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif #include "; then : else result=unknown fi eval gl_cv_bitsizeof_${gltype}=\$result fi eval ac_res=\$gl_cv_bitsizeof_${gltype} { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval result=\$gl_cv_bitsizeof_${gltype} if test $result = unknown; then result=0 fi GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` cat >>confdefs.h <<_ACEOF #define BITSIZEOF_${GLTYPE} $result _ACEOF eval BITSIZEOF_${GLTYPE}=\$result done for gltype in sig_atomic_t wchar_t wint_t ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gltype is signed" >&5 $as_echo_n "checking whether $gltype is signed... " >&6; } if eval \${gl_cv_type_${gltype}_signed+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif int verify[2 * (($gltype) -1 < ($gltype) 0) - 1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : result=yes else result=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext eval gl_cv_type_${gltype}_signed=\$result fi eval ac_res=\$gl_cv_type_${gltype}_signed { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval result=\$gl_cv_type_${gltype}_signed GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` if test "$result" = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_SIGNED_${GLTYPE} 1 _ACEOF eval HAVE_SIGNED_${GLTYPE}=1 else eval HAVE_SIGNED_${GLTYPE}=0 fi done gl_cv_type_ptrdiff_t_signed=yes gl_cv_type_size_t_signed=no if test $APPLE_UNIVERSAL_BUILD = 0; then for gltype in ptrdiff_t size_t ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5 $as_echo_n "checking for $gltype integer literal suffix... " >&6; } if eval \${gl_cv_type_${gltype}_suffix+:} false; then : $as_echo_n "(cached) " >&6 else eval gl_cv_type_${gltype}_suffix=no eval result=\$gl_cv_type_${gltype}_signed if test "$result" = yes; then glsufu= else glsufu=u fi for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do case $glsuf in '') gltype1='int';; l) gltype1='long int';; ll) gltype1='long long int';; i64) gltype1='__int64';; u) gltype1='unsigned int';; ul) gltype1='unsigned long int';; ull) gltype1='unsigned long long int';; ui64)gltype1='unsigned __int64';; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif extern $gltype foo; extern $gltype1 foo; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval gl_cv_type_${gltype}_suffix=\$glsuf fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext eval result=\$gl_cv_type_${gltype}_suffix test "$result" != no && break done fi eval ac_res=\$gl_cv_type_${gltype}_suffix { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` eval result=\$gl_cv_type_${gltype}_suffix test "$result" = no && result= eval ${GLTYPE}_SUFFIX=\$result cat >>confdefs.h <<_ACEOF #define ${GLTYPE}_SUFFIX $result _ACEOF done fi for gltype in sig_atomic_t wchar_t wint_t ; do { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5 $as_echo_n "checking for $gltype integer literal suffix... " >&6; } if eval \${gl_cv_type_${gltype}_suffix+:} false; then : $as_echo_n "(cached) " >&6 else eval gl_cv_type_${gltype}_suffix=no eval result=\$gl_cv_type_${gltype}_signed if test "$result" = yes; then glsufu= else glsufu=u fi for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do case $glsuf in '') gltype1='int';; l) gltype1='long int';; ll) gltype1='long long int';; i64) gltype1='__int64';; u) gltype1='unsigned int';; ul) gltype1='unsigned long int';; ull) gltype1='unsigned long long int';; ui64)gltype1='unsigned __int64';; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #if HAVE_WCHAR_H # include # include # include #endif extern $gltype foo; extern $gltype1 foo; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval gl_cv_type_${gltype}_suffix=\$glsuf fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext eval result=\$gl_cv_type_${gltype}_suffix test "$result" != no && break done fi eval ac_res=\$gl_cv_type_${gltype}_suffix { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` eval result=\$gl_cv_type_${gltype}_suffix test "$result" = no && result= eval ${GLTYPE}_SUFFIX=\$result cat >>confdefs.h <<_ACEOF #define ${GLTYPE}_SUFFIX $result _ACEOF done if test $GNULIB_OVERRIDES_WINT_T = 1; then BITSIZEOF_WINT_T=32 fi ;; esac LIMITS_H='limits.h' if test -n "$LIMITS_H"; then GL_GENERATE_LIMITS_H_TRUE= GL_GENERATE_LIMITS_H_FALSE='#' else GL_GENERATE_LIMITS_H_TRUE='#' GL_GENERATE_LIMITS_H_FALSE= fi if test -n "$STDINT_H"; then GL_GENERATE_STDINT_H_TRUE= GL_GENERATE_STDINT_H_FALSE='#' else GL_GENERATE_STDINT_H_TRUE='#' GL_GENERATE_STDINT_H_FALSE= fi GNULIB_DPRINTF=0; GNULIB_FCLOSE=0; GNULIB_FDOPEN=0; GNULIB_FFLUSH=0; GNULIB_FGETC=0; GNULIB_FGETS=0; GNULIB_FOPEN=0; GNULIB_FPRINTF=0; GNULIB_FPRINTF_POSIX=0; GNULIB_FPURGE=0; GNULIB_FPUTC=0; GNULIB_FPUTS=0; GNULIB_FREAD=0; GNULIB_FREOPEN=0; GNULIB_FSCANF=0; GNULIB_FSEEK=0; GNULIB_FSEEKO=0; GNULIB_FTELL=0; GNULIB_FTELLO=0; GNULIB_FWRITE=0; GNULIB_GETC=0; GNULIB_GETCHAR=0; GNULIB_GETDELIM=0; GNULIB_GETLINE=0; GNULIB_OBSTACK_PRINTF=0; GNULIB_OBSTACK_PRINTF_POSIX=0; GNULIB_PCLOSE=0; GNULIB_PERROR=0; GNULIB_POPEN=0; GNULIB_PRINTF=0; GNULIB_PRINTF_POSIX=0; GNULIB_PUTC=0; GNULIB_PUTCHAR=0; GNULIB_PUTS=0; GNULIB_REMOVE=0; GNULIB_RENAME=0; GNULIB_RENAMEAT=0; GNULIB_SCANF=0; GNULIB_SNPRINTF=0; GNULIB_SPRINTF_POSIX=0; GNULIB_STDIO_H_NONBLOCKING=0; GNULIB_STDIO_H_SIGPIPE=0; GNULIB_TMPFILE=0; GNULIB_VASPRINTF=0; GNULIB_VFSCANF=0; GNULIB_VSCANF=0; GNULIB_VDPRINTF=0; GNULIB_VFPRINTF=0; GNULIB_VFPRINTF_POSIX=0; GNULIB_VPRINTF=0; GNULIB_VPRINTF_POSIX=0; GNULIB_VSNPRINTF=0; GNULIB_VSPRINTF_POSIX=0; HAVE_DECL_FPURGE=1; HAVE_DECL_FSEEKO=1; HAVE_DECL_FTELLO=1; HAVE_DECL_GETDELIM=1; HAVE_DECL_GETLINE=1; HAVE_DECL_OBSTACK_PRINTF=1; HAVE_DECL_SNPRINTF=1; HAVE_DECL_VSNPRINTF=1; HAVE_DPRINTF=1; HAVE_FSEEKO=1; HAVE_FTELLO=1; HAVE_PCLOSE=1; HAVE_POPEN=1; HAVE_RENAMEAT=1; HAVE_VASPRINTF=1; HAVE_VDPRINTF=1; REPLACE_DPRINTF=0; REPLACE_FCLOSE=0; REPLACE_FDOPEN=0; REPLACE_FFLUSH=0; REPLACE_FOPEN=0; REPLACE_FPRINTF=0; REPLACE_FPURGE=0; REPLACE_FREOPEN=0; REPLACE_FSEEK=0; REPLACE_FSEEKO=0; REPLACE_FTELL=0; REPLACE_FTELLO=0; REPLACE_GETDELIM=0; REPLACE_GETLINE=0; REPLACE_OBSTACK_PRINTF=0; REPLACE_PERROR=0; REPLACE_POPEN=0; REPLACE_PRINTF=0; REPLACE_REMOVE=0; REPLACE_RENAME=0; REPLACE_RENAMEAT=0; REPLACE_SNPRINTF=0; REPLACE_SPRINTF=0; REPLACE_STDIO_READ_FUNCS=0; REPLACE_STDIO_WRITE_FUNCS=0; REPLACE_TMPFILE=0; REPLACE_VASPRINTF=0; REPLACE_VDPRINTF=0; REPLACE_VFPRINTF=0; REPLACE_VPRINTF=0; REPLACE_VSNPRINTF=0; REPLACE_VSPRINTF=0; { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5 $as_echo_n "checking for C/C++ restrict keyword... " >&6; } if ${ac_cv_c_restrict+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_restrict=no # The order here caters to the fact that C++ does not require restrict. for ac_kw in __restrict __restrict__ _Restrict restrict; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ typedef int *int_ptr; int foo (int_ptr $ac_kw ip) { return ip[0]; } int bar (int [$ac_kw]); /* Catch GCC bug 14050. */ int bar (int ip[$ac_kw]) { return ip[0]; } int main () { int s[1]; int *$ac_kw t = s; t[0] = 0; return foo (t) + bar (t); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_restrict=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_restrict" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5 $as_echo "$ac_cv_c_restrict" >&6; } case $ac_cv_c_restrict in restrict) ;; no) $as_echo "#define restrict /**/" >>confdefs.h ;; *) cat >>confdefs.h <<_ACEOF #define restrict $ac_cv_c_restrict _ACEOF ;; esac GNULIB_EXPLICIT_BZERO=0; GNULIB_FFSL=0; GNULIB_FFSLL=0; GNULIB_MEMCHR=0; GNULIB_MEMMEM=0; GNULIB_MEMPCPY=0; GNULIB_MEMRCHR=0; GNULIB_RAWMEMCHR=0; GNULIB_STPCPY=0; GNULIB_STPNCPY=0; GNULIB_STRCHRNUL=0; GNULIB_STRDUP=0; GNULIB_STRNCAT=0; GNULIB_STRNDUP=0; GNULIB_STRNLEN=0; GNULIB_STRPBRK=0; GNULIB_STRSEP=0; GNULIB_STRSTR=0; GNULIB_STRCASESTR=0; GNULIB_STRTOK_R=0; GNULIB_MBSLEN=0; GNULIB_MBSNLEN=0; GNULIB_MBSCHR=0; GNULIB_MBSRCHR=0; GNULIB_MBSSTR=0; GNULIB_MBSCASECMP=0; GNULIB_MBSNCASECMP=0; GNULIB_MBSPCASECMP=0; GNULIB_MBSCASESTR=0; GNULIB_MBSCSPN=0; GNULIB_MBSPBRK=0; GNULIB_MBSSPN=0; GNULIB_MBSSEP=0; GNULIB_MBSTOK_R=0; GNULIB_STRERROR=0; GNULIB_STRERROR_R=0; GNULIB_STRSIGNAL=0; GNULIB_STRVERSCMP=0; HAVE_MBSLEN=0; HAVE_EXPLICIT_BZERO=1; HAVE_FFSL=1; HAVE_FFSLL=1; HAVE_MEMCHR=1; HAVE_DECL_MEMMEM=1; HAVE_MEMPCPY=1; HAVE_DECL_MEMRCHR=1; HAVE_RAWMEMCHR=1; HAVE_STPCPY=1; HAVE_STPNCPY=1; HAVE_STRCHRNUL=1; HAVE_DECL_STRDUP=1; HAVE_DECL_STRNDUP=1; HAVE_DECL_STRNLEN=1; HAVE_STRPBRK=1; HAVE_STRSEP=1; HAVE_STRCASESTR=1; HAVE_DECL_STRTOK_R=1; HAVE_DECL_STRERROR_R=1; HAVE_DECL_STRSIGNAL=1; HAVE_STRVERSCMP=1; REPLACE_MEMCHR=0; REPLACE_MEMMEM=0; REPLACE_STPNCPY=0; REPLACE_STRCHRNUL=0; REPLACE_STRDUP=0; REPLACE_STRNCAT=0; REPLACE_STRNDUP=0; REPLACE_STRNLEN=0; REPLACE_STRSTR=0; REPLACE_STRCASESTR=0; REPLACE_STRTOK_R=0; REPLACE_STRERROR=0; REPLACE_STRERROR_R=0; REPLACE_STRSIGNAL=0; UNDEFINE_STRTOK_R=0; REPLACE_STRERROR_0=0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strerror(0) succeeds" >&5 $as_echo_n "checking whether strerror(0) succeeds... " >&6; } if ${gl_cv_func_strerror_0_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_strerror_0_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_strerror_0_works="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_strerror_0_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_strerror_0_works="$gl_cross_guess_normal" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { int result = 0; char *str; errno = 0; str = strerror (0); if (!*str) result |= 1; if (errno) result |= 2; if (strstr (str, "nknown") || strstr (str, "ndefined")) result |= 4; return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_strerror_0_works=yes else gl_cv_func_strerror_0_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: $gl_cv_func_strerror_0_works" >&5 $as_echo "$gl_cv_func_strerror_0_works" >&6; } case "$gl_cv_func_strerror_0_works" in *yes) ;; *) REPLACE_STRERROR_0=1 $as_echo "#define REPLACE_STRERROR_0 1" >>confdefs.h ;; esac if test $gl_cv_have_include_next = yes; then gl_cv_next_string_h='<'string.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_string_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'string.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_string_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_string_h gl_cv_next_string_h='"'$gl_header'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_string_h" >&5 $as_echo "$gl_cv_next_string_h" >&6; } fi NEXT_STRING_H=$gl_cv_next_string_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'string.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_string_h fi NEXT_AS_FIRST_DIRECTIVE_STRING_H=$gl_next_as_first_directive WINDOWS_64_BIT_OFF_T=0 $as_echo "#define _USE_STD_STAT 1" >>confdefs.h if test $gl_cv_have_include_next = yes; then gl_cv_next_sys_types_h='<'sys/types.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_sys_types_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'sys/types.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_sys_types_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_sys_types_h gl_cv_next_sys_types_h='"'$gl_header'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_types_h" >&5 $as_echo "$gl_cv_next_sys_types_h" >&6; } fi NEXT_SYS_TYPES_H=$gl_cv_next_sys_types_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'sys/types.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_sys_types_h fi NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H=$gl_next_as_first_directive WINDOWS_STAT_INODES=0 if false; then GL_COND_LIBTOOL_TRUE= GL_COND_LIBTOOL_FALSE='#' else GL_COND_LIBTOOL_TRUE='#' GL_COND_LIBTOOL_FALSE= fi gl_cond_libtool=false gl_libdeps= gl_ltlibdeps= gl_m4_base='m4' gl_source_base='lib' case "$host_os" in mingw*) REPLACE_ACCESS=1 ;; esac if test $REPLACE_ACCESS = 1; then gl_LIBOBJS="$gl_LIBOBJS access.$ac_objext" fi GNULIB_ACCESS=1 $as_echo "#define GNULIB_TEST_ACCESS 1" >>confdefs.h if test $ac_cv_func_alloca_works = no; then : fi # Define an additional variable used in the Makefile substitution. if test $ac_cv_working_alloca_h = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca as a compiler built-in" >&5 $as_echo_n "checking for alloca as a compiler built-in... " >&6; } if ${gl_cv_rpl_alloca+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __GNUC__ || defined _AIX || defined _MSC_VER Need own alloca #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Need own alloca" >/dev/null 2>&1; then : gl_cv_rpl_alloca=yes else gl_cv_rpl_alloca=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_rpl_alloca" >&5 $as_echo "$gl_cv_rpl_alloca" >&6; } if test $gl_cv_rpl_alloca = yes; then $as_echo "#define HAVE_ALLOCA 1" >>confdefs.h ALLOCA_H=alloca.h else ALLOCA_H= fi else ALLOCA_H=alloca.h fi if test -n "$ALLOCA_H"; then GL_GENERATE_ALLOCA_H_TRUE= GL_GENERATE_ALLOCA_H_FALSE='#' else GL_GENERATE_ALLOCA_H_TRUE='#' GL_GENERATE_ALLOCA_H_FALSE= fi if test $ac_cv_working_alloca_h = yes; then HAVE_ALLOCA_H=1 else HAVE_ALLOCA_H=0 fi if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then REPLACE_CLOSE=1 fi if test $ac_cv_header_sys_socket_h != yes; then for ac_header in winsock2.h do : ac_fn_c_check_header_mongrel "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default" if test "x$ac_cv_header_winsock2_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_WINSOCK2_H 1 _ACEOF fi done fi if test "$ac_cv_header_winsock2_h" = yes; then HAVE_WINSOCK2_H=1 UNISTD_H_HAVE_WINSOCK2_H=1 SYS_IOCTL_H_HAVE_WINSOCK2_H=1 else HAVE_WINSOCK2_H=0 fi if test $UNISTD_H_HAVE_WINSOCK2_H = 1; then REPLACE_CLOSE=1 fi if test $REPLACE_CLOSE = 1; then gl_LIBOBJS="$gl_LIBOBJS close.$ac_objext" fi GNULIB_CLOSE=1 $as_echo "#define GNULIB_TEST_CLOSE 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether // is distinct from /" >&5 $as_echo_n "checking whether // is distinct from /... " >&6; } if ${gl_cv_double_slash_root+:} false; then : $as_echo_n "(cached) " >&6 else if test x"$cross_compiling" = xyes ; then # When cross-compiling, there is no way to tell whether // is special # short of a list of hosts. However, the only known hosts to date # that have a distinct // are Apollo DomainOS (too old to port to), # Cygwin, and z/OS. If anyone knows of another system for which // has # special semantics and is distinct from /, please report it to # . case $host in *-cygwin | i370-ibm-openedition) gl_cv_double_slash_root=yes ;; *) # Be optimistic and assume that / and // are the same when we # don't know. gl_cv_double_slash_root='unknown, assuming no' ;; esac else set x `ls -di / // 2>/dev/null` if test "$2" = "$4" && wc //dev/null >/dev/null 2>&1; then gl_cv_double_slash_root=no else gl_cv_double_slash_root=yes fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_double_slash_root" >&5 $as_echo "$gl_cv_double_slash_root" >&6; } if test "$gl_cv_double_slash_root" = yes; then $as_echo "#define DOUBLE_SLASH_IS_DISTINCT_ROOT 1" >>confdefs.h fi $as_echo "#define HAVE_DUP2 1" >>confdefs.h if test $HAVE_DUP2 = 1; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether dup2 works" >&5 $as_echo_n "checking whether dup2 works... " >&6; } if ${gl_cv_func_dup2_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in mingw*) # on this platform, dup2 always returns 0 for success gl_cv_func_dup2_works="guessing no" ;; cygwin*) # on cygwin 1.5.x, dup2(1,1) returns 0 gl_cv_func_dup2_works="guessing no" ;; aix* | freebsd*) # on AIX 7.1 and FreeBSD 6.1, dup2 (1,toobig) gives EMFILE, # not EBADF. gl_cv_func_dup2_works="guessing no" ;; haiku*) # on Haiku alpha 2, dup2(1, 1) resets FD_CLOEXEC. gl_cv_func_dup2_works="guessing no" ;; *-android*) # implemented using dup3(), which fails if oldfd == newfd gl_cv_func_dup2_works="guessing no" ;; os2*) # on OS/2 kLIBC, dup2() does not work on a directory fd. gl_cv_func_dup2_works="guessing no" ;; *) gl_cv_func_dup2_works="guessing yes" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include #ifndef RLIM_SAVED_CUR # define RLIM_SAVED_CUR RLIM_INFINITY #endif #ifndef RLIM_SAVED_MAX # define RLIM_SAVED_MAX RLIM_INFINITY #endif int main () { int result = 0; int bad_fd = INT_MAX; struct rlimit rlim; if (getrlimit (RLIMIT_NOFILE, &rlim) == 0 && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX && rlim.rlim_cur != RLIM_INFINITY && rlim.rlim_cur != RLIM_SAVED_MAX && rlim.rlim_cur != RLIM_SAVED_CUR) bad_fd = rlim.rlim_cur; #ifdef FD_CLOEXEC if (fcntl (1, F_SETFD, FD_CLOEXEC) == -1) result |= 1; #endif if (dup2 (1, 1) != 1) result |= 2; #ifdef FD_CLOEXEC if (fcntl (1, F_GETFD) != FD_CLOEXEC) result |= 4; #endif close (0); if (dup2 (0, 0) != -1) result |= 8; /* Many gnulib modules require POSIX conformance of EBADF. */ if (dup2 (2, bad_fd) == -1 && errno != EBADF) result |= 16; /* Flush out some cygwin core dumps. */ if (dup2 (2, -1) != -1 || errno != EBADF) result |= 32; dup2 (2, 255); dup2 (2, 256); /* On OS/2 kLIBC, dup2() does not work on a directory fd. */ { int fd = open (".", O_RDONLY); if (fd == -1) result |= 64; else if (dup2 (fd, fd + 1) == -1) result |= 128; close (fd); } return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_dup2_works=yes else gl_cv_func_dup2_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: $gl_cv_func_dup2_works" >&5 $as_echo "$gl_cv_func_dup2_works" >&6; } case "$gl_cv_func_dup2_works" in *yes) ;; *) REPLACE_DUP2=1 for ac_func in setdtablesize do : ac_fn_c_check_func "$LINENO" "setdtablesize" "ac_cv_func_setdtablesize" if test "x$ac_cv_func_setdtablesize" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SETDTABLESIZE 1 _ACEOF fi done ;; esac fi if test $HAVE_DUP2 = 0 || test $REPLACE_DUP2 = 1; then gl_LIBOBJS="$gl_LIBOBJS dup2.$ac_objext" fi GNULIB_DUP2=1 $as_echo "#define GNULIB_TEST_DUP2 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking for error_at_line" >&5 $as_echo_n "checking for error_at_line... " >&6; } if ${ac_cv_lib_error_at_line+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { error_at_line (0, 0, "", 0, "an error occurred"); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_error_at_line=yes else ac_cv_lib_error_at_line=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_error_at_line" >&5 $as_echo "$ac_cv_lib_error_at_line" >&6; } if test $ac_cv_lib_error_at_line = no; then gl_LIBOBJS="$gl_LIBOBJS error.$ac_objext" : fi XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=error:3:c-format" XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=error_at_line:5:c-format" if test $ac_cv_func_fcntl = no; then if test $ac_cv_func_fcntl = no; then HAVE_FCNTL=0 else REPLACE_FCNTL=1 fi else { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fcntl handles F_DUPFD correctly" >&5 $as_echo_n "checking whether fcntl handles F_DUPFD correctly... " >&6; } if ${gl_cv_func_fcntl_f_dupfd_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case $host_os in aix* | cygwin* | haiku*) gl_cv_func_fcntl_f_dupfd_works="guessing no" ;; *) gl_cv_func_fcntl_f_dupfd_works="guessing yes" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include #ifndef RLIM_SAVED_CUR # define RLIM_SAVED_CUR RLIM_INFINITY #endif #ifndef RLIM_SAVED_MAX # define RLIM_SAVED_MAX RLIM_INFINITY #endif int main () { int result = 0; int bad_fd = INT_MAX; struct rlimit rlim; if (getrlimit (RLIMIT_NOFILE, &rlim) == 0 && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX && rlim.rlim_cur != RLIM_INFINITY && rlim.rlim_cur != RLIM_SAVED_MAX && rlim.rlim_cur != RLIM_SAVED_CUR) bad_fd = rlim.rlim_cur; if (fcntl (0, F_DUPFD, -1) != -1) result |= 1; if (errno != EINVAL) result |= 2; if (fcntl (0, F_DUPFD, bad_fd) != -1) result |= 4; if (errno != EINVAL) result |= 8; /* On OS/2 kLIBC, F_DUPFD does not work on a directory fd */ { int fd; fd = open (".", O_RDONLY); if (fd == -1) result |= 16; else if (fcntl (fd, F_DUPFD, STDERR_FILENO + 1) == -1) result |= 32; close (fd); } return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_fcntl_f_dupfd_works=yes else gl_cv_func_fcntl_f_dupfd_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: $gl_cv_func_fcntl_f_dupfd_works" >&5 $as_echo "$gl_cv_func_fcntl_f_dupfd_works" >&6; } case $gl_cv_func_fcntl_f_dupfd_works in *yes) ;; *) if test $ac_cv_func_fcntl = no; then HAVE_FCNTL=0 else REPLACE_FCNTL=1 fi $as_echo "#define FCNTL_DUPFD_BUGGY 1" >>confdefs.h ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fcntl understands F_DUPFD_CLOEXEC" >&5 $as_echo_n "checking whether fcntl understands F_DUPFD_CLOEXEC... " >&6; } if ${gl_cv_func_fcntl_f_dupfd_cloexec+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifndef F_DUPFD_CLOEXEC choke me #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __linux__ /* The Linux kernel only added F_DUPFD_CLOEXEC in 2.6.24, so we always replace it to support the semantics on older kernels that failed with EINVAL. */ choke me #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_func_fcntl_f_dupfd_cloexec=yes else gl_cv_func_fcntl_f_dupfd_cloexec="needs runtime check" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else gl_cv_func_fcntl_f_dupfd_cloexec=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_fcntl_f_dupfd_cloexec" >&5 $as_echo "$gl_cv_func_fcntl_f_dupfd_cloexec" >&6; } if test "$gl_cv_func_fcntl_f_dupfd_cloexec" != yes; then if test $ac_cv_func_fcntl = no; then HAVE_FCNTL=0 else REPLACE_FCNTL=1 fi fi fi if test $HAVE_FCNTL = 0 || test $REPLACE_FCNTL = 1; then gl_LIBOBJS="$gl_LIBOBJS fcntl.$ac_objext" fi GNULIB_FCNTL=1 $as_echo "#define GNULIB_TEST_FCNTL 1" >>confdefs.h if test $gl_cv_have_include_next = yes; then gl_cv_next_fcntl_h='<'fcntl.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_fcntl_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'fcntl.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_fcntl_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_fcntl_h gl_cv_next_fcntl_h='"'$gl_header'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_fcntl_h" >&5 $as_echo "$gl_cv_next_fcntl_h" >&6; } fi NEXT_FCNTL_H=$gl_cv_next_fcntl_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'fcntl.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_fcntl_h fi NEXT_AS_FIRST_DIRECTIVE_FCNTL_H=$gl_next_as_first_directive if test $ac_cv_func_getdtablesize = yes && test $ac_cv_have_decl_getdtablesize = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether getdtablesize works" >&5 $as_echo_n "checking whether getdtablesize works... " >&6; } if ${gl_cv_func_getdtablesize_works+:} false; then : $as_echo_n "(cached) " >&6 else case "$host_os" in vms*) gl_cv_func_getdtablesize_works="no (limitation)" ;; *) if test "$cross_compiling" = yes; then : case "$host_os" in cygwin*) # on cygwin 1.5.25, getdtablesize() automatically grows gl_cv_func_getdtablesize_works="guessing no" ;; *) gl_cv_func_getdtablesize_works="guessing yes" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int size = getdtablesize(); if (dup2 (0, getdtablesize()) != -1) return 1; if (size != getdtablesize()) return 2; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_getdtablesize_works=yes else gl_cv_func_getdtablesize_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 ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getdtablesize_works" >&5 $as_echo "$gl_cv_func_getdtablesize_works" >&6; } case "$gl_cv_func_getdtablesize_works" in *yes | "no (limitation)") ;; *) REPLACE_GETDTABLESIZE=1 ;; esac else HAVE_GETDTABLESIZE=0 fi if test $HAVE_GETDTABLESIZE = 0 || test $REPLACE_GETDTABLESIZE = 1; then gl_LIBOBJS="$gl_LIBOBJS getdtablesize.$ac_objext" : fi GNULIB_GETDTABLESIZE=1 $as_echo "#define GNULIB_TEST_GETDTABLESIZE 1" >>confdefs.h # Persuade glibc to declare getloadavg(). gl_save_LIBS=$LIBS # getloadavg is present in libc on glibc >= 2.2, Mac OS X, FreeBSD >= 2.0, # NetBSD >= 0.9, OpenBSD >= 2.0, Solaris >= 7. HAVE_GETLOADAVG=1 ac_fn_c_check_func "$LINENO" "getloadavg" "ac_cv_func_getloadavg" if test "x$ac_cv_func_getloadavg" = xyes; then : else gl_func_getloadavg_done=no # Some systems with -lutil have (and need) -lkvm as well, some do not. # On Solaris, -lkvm requires nlist from -lelf, so check that first # to get the right answer into the cache. # For kstat on solaris, we need to test for libelf and libkvm to force the # definition of SVR4 below. if test $gl_func_getloadavg_done = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for elf_begin in -lelf" >&5 $as_echo_n "checking for elf_begin in -lelf... " >&6; } if ${ac_cv_lib_elf_elf_begin+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lelf $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char elf_begin (); int main () { return elf_begin (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_elf_elf_begin=yes else ac_cv_lib_elf_elf_begin=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_elf_elf_begin" >&5 $as_echo "$ac_cv_lib_elf_elf_begin" >&6; } if test "x$ac_cv_lib_elf_elf_begin" = xyes; then : LIBS="-lelf $LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for kvm_open in -lkvm" >&5 $as_echo_n "checking for kvm_open in -lkvm... " >&6; } if ${ac_cv_lib_kvm_kvm_open+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lkvm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char kvm_open (); int main () { return kvm_open (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_kvm_kvm_open=yes else ac_cv_lib_kvm_kvm_open=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_kvm_kvm_open" >&5 $as_echo "$ac_cv_lib_kvm_kvm_open" >&6; } if test "x$ac_cv_lib_kvm_kvm_open" = xyes; then : LIBS="-lkvm $LIBS" fi # Check for the 4.4BSD definition of getloadavg. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getloadavg in -lutil" >&5 $as_echo_n "checking for getloadavg in -lutil... " >&6; } if ${ac_cv_lib_util_getloadavg+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lutil $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char getloadavg (); int main () { return getloadavg (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_util_getloadavg=yes else ac_cv_lib_util_getloadavg=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_util_getloadavg" >&5 $as_echo "$ac_cv_lib_util_getloadavg" >&6; } if test "x$ac_cv_lib_util_getloadavg" = xyes; then : LIBS="-lutil $LIBS" gl_func_getloadavg_done=yes fi fi if test $gl_func_getloadavg_done = no; then # There is a commonly available library for RS/6000 AIX. # Since it is not a standard part of AIX, it might be installed locally. gl_getloadavg_LIBS=$LIBS LIBS="-L/usr/local/lib $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getloadavg in -lgetloadavg" >&5 $as_echo_n "checking for getloadavg in -lgetloadavg... " >&6; } if ${ac_cv_lib_getloadavg_getloadavg+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgetloadavg $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char getloadavg (); int main () { return getloadavg (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_getloadavg_getloadavg=yes else ac_cv_lib_getloadavg_getloadavg=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_getloadavg_getloadavg" >&5 $as_echo "$ac_cv_lib_getloadavg_getloadavg" >&6; } if test "x$ac_cv_lib_getloadavg_getloadavg" = xyes; then : LIBS="-lgetloadavg $LIBS" gl_func_getloadavg_done=yes else LIBS=$gl_getloadavg_LIBS fi fi # Set up the replacement function if necessary. if test $gl_func_getloadavg_done = no; then HAVE_GETLOADAVG=0 # Solaris has libkstat which does not require root. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for kstat_open in -lkstat" >&5 $as_echo_n "checking for kstat_open in -lkstat... " >&6; } if ${ac_cv_lib_kstat_kstat_open+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lkstat $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char kstat_open (); int main () { return kstat_open (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_kstat_kstat_open=yes else ac_cv_lib_kstat_kstat_open=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_kstat_kstat_open" >&5 $as_echo "$ac_cv_lib_kstat_kstat_open" >&6; } if test "x$ac_cv_lib_kstat_kstat_open" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBKSTAT 1 _ACEOF LIBS="-lkstat $LIBS" fi test $ac_cv_lib_kstat_kstat_open = yes && gl_func_getloadavg_done=yes # AIX has libperfstat which does not require root if test $gl_func_getloadavg_done = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for perfstat_cpu_total in -lperfstat" >&5 $as_echo_n "checking for perfstat_cpu_total in -lperfstat... " >&6; } if ${ac_cv_lib_perfstat_perfstat_cpu_total+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lperfstat $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char perfstat_cpu_total (); int main () { return perfstat_cpu_total (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_perfstat_perfstat_cpu_total=yes else ac_cv_lib_perfstat_perfstat_cpu_total=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_perfstat_perfstat_cpu_total" >&5 $as_echo "$ac_cv_lib_perfstat_perfstat_cpu_total" >&6; } if test "x$ac_cv_lib_perfstat_perfstat_cpu_total" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBPERFSTAT 1 _ACEOF LIBS="-lperfstat $LIBS" fi test $ac_cv_lib_perfstat_perfstat_cpu_total = yes && gl_func_getloadavg_done=yes fi if test $gl_func_getloadavg_done = no; then ac_fn_c_check_header_mongrel "$LINENO" "sys/dg_sys_info.h" "ac_cv_header_sys_dg_sys_info_h" "$ac_includes_default" if test "x$ac_cv_header_sys_dg_sys_info_h" = xyes; then : gl_func_getloadavg_done=yes $as_echo "#define DGUX 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dg_sys_info in -ldgc" >&5 $as_echo_n "checking for dg_sys_info in -ldgc... " >&6; } if ${ac_cv_lib_dgc_dg_sys_info+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldgc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dg_sys_info (); int main () { return dg_sys_info (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dgc_dg_sys_info=yes else ac_cv_lib_dgc_dg_sys_info=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dgc_dg_sys_info" >&5 $as_echo "$ac_cv_lib_dgc_dg_sys_info" >&6; } if test "x$ac_cv_lib_dgc_dg_sys_info" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBDGC 1 _ACEOF LIBS="-ldgc $LIBS" fi fi fi fi fi if test "x$gl_save_LIBS" = x; then GETLOADAVG_LIBS=$LIBS else GETLOADAVG_LIBS=`echo "$LIBS" | sed "s!$gl_save_LIBS!!"` fi LIBS=$gl_save_LIBS # Test whether the system declares getloadavg. Solaris has the function # but declares it in , not . for ac_header in sys/loadavg.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/loadavg.h" "ac_cv_header_sys_loadavg_h" "$ac_includes_default" if test "x$ac_cv_header_sys_loadavg_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_LOADAVG_H 1 _ACEOF fi done if test $ac_cv_header_sys_loadavg_h = yes; then HAVE_SYS_LOADAVG_H=1 else HAVE_SYS_LOADAVG_H=0 fi ac_fn_c_check_decl "$LINENO" "getloadavg" "ac_cv_have_decl_getloadavg" "#if HAVE_SYS_LOADAVG_H /* OpenIndiana has a bug: must be included before . */ # include # include #endif #include " if test "x$ac_cv_have_decl_getloadavg" = xyes; then : else HAVE_DECL_GETLOADAVG=0 fi if test $HAVE_GETLOADAVG = 0; then gl_LIBOBJS="$gl_LIBOBJS getloadavg.$ac_objext" # Figure out what our getloadavg.c needs. # On HPUX9, an unprivileged user can get load averages this way. if test $gl_func_getloadavg_done = no; then for ac_func in pstat_getdynamic do : ac_fn_c_check_func "$LINENO" "pstat_getdynamic" "ac_cv_func_pstat_getdynamic" if test "x$ac_cv_func_pstat_getdynamic" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_PSTAT_GETDYNAMIC 1 _ACEOF gl_func_getloadavg_done=yes fi done fi # We cannot check for , because Solaris 2 does not use dwarf (it # uses stabs), but it is still SVR4. We cannot check for because # Irix 4.0.5F has the header but not the library. if test $gl_func_getloadavg_done = no && test "$ac_cv_lib_elf_elf_begin" = yes \ && test "$ac_cv_lib_kvm_kvm_open" = yes; then gl_func_getloadavg_done=yes $as_echo "#define SVR4 1" >>confdefs.h fi if test $gl_func_getloadavg_done = no; then ac_fn_c_check_header_mongrel "$LINENO" "inq_stats/cpustats.h" "ac_cv_header_inq_stats_cpustats_h" "$ac_includes_default" if test "x$ac_cv_header_inq_stats_cpustats_h" = xyes; then : gl_func_getloadavg_done=yes $as_echo "#define UMAX 1" >>confdefs.h $as_echo "#define UMAX4_3 1" >>confdefs.h fi fi if test $gl_func_getloadavg_done = no; then ac_fn_c_check_header_mongrel "$LINENO" "sys/cpustats.h" "ac_cv_header_sys_cpustats_h" "$ac_includes_default" if test "x$ac_cv_header_sys_cpustats_h" = xyes; then : gl_func_getloadavg_done=yes; $as_echo "#define UMAX 1" >>confdefs.h fi fi if test $gl_func_getloadavg_done = no; then for ac_header in mach/mach.h do : ac_fn_c_check_header_mongrel "$LINENO" "mach/mach.h" "ac_cv_header_mach_mach_h" "$ac_includes_default" if test "x$ac_cv_header_mach_mach_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_MACH_MACH_H 1 _ACEOF fi done fi for ac_header in nlist.h do : ac_fn_c_check_header_mongrel "$LINENO" "nlist.h" "ac_cv_header_nlist_h" "$ac_includes_default" if test "x$ac_cv_header_nlist_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_NLIST_H 1 _ACEOF ac_fn_c_check_member "$LINENO" "struct nlist" "n_un.n_name" "ac_cv_member_struct_nlist_n_un_n_name" "#include " if test "x$ac_cv_member_struct_nlist_n_un_n_name" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRUCT_NLIST_N_UN_N_NAME 1 _ACEOF fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { struct nlist x; #ifdef HAVE_STRUCT_NLIST_N_UN_N_NAME x.n_un.n_name = ""; #else x.n_name = ""; #endif ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : $as_echo "#define N_NAME_POINTER 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi done fi GNULIB_GETLOADAVG=1 $as_echo "#define GNULIB_TEST_GETLOADAVG 1" >>confdefs.h ac_found=0 ac_fn_c_check_decl "$LINENO" "program_invocation_name" "ac_cv_have_decl_program_invocation_name" "#include " if test "x$ac_cv_have_decl_program_invocation_name" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_PROGRAM_INVOCATION_NAME $ac_have_decl _ACEOF if test $ac_have_decl = 1; then : ac_found=1 fi ac_fn_c_check_decl "$LINENO" "program_invocation_short_name" "ac_cv_have_decl_program_invocation_short_name" "#include " if test "x$ac_cv_have_decl_program_invocation_short_name" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME $ac_have_decl _ACEOF if test $ac_have_decl = 1; then : ac_found=1 fi ac_fn_c_check_decl "$LINENO" "__argv" "ac_cv_have_decl___argv" "#include " if test "x$ac_cv_have_decl___argv" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL___ARGV $ac_have_decl _ACEOF if test $ac_have_decl = 1; then : ac_found=1 fi # Incur the cost of this test only if none of the above worked. if test $ac_found = 0; then # On OpenBSD 5.1, using the global __progname variable appears to be # the only way to implement getprogname. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __progname is defined in default libraries" >&5 $as_echo_n "checking whether __progname is defined in default libraries... " >&6; } if ${gl_cv_var___progname+:} false; then : $as_echo_n "(cached) " >&6 else gl_cv_var___progname= cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern char *__progname; int main () { return *__progname; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_cv_var___progname=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_var___progname" >&5 $as_echo "$gl_cv_var___progname" >&6; } if test "$gl_cv_var___progname" = yes; then $as_echo "#define HAVE_VAR___PROGNAME 1" >>confdefs.h fi fi # Check the system to see if it provides GNU glob. If not, use our # local version. { $as_echo "$as_me:${as_lineno-$LINENO}: checking if system libc has GNU glob" >&5 $as_echo_n "checking if system libc has GNU glob... " >&6; } if ${make_cv_sys_gnu_glob+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #if !defined _LIBC && defined __GNU_LIBRARY__ && __GNU_LIBRARY__ > 1 # include # if _GNU_GLOB_INTERFACE_VERSION == 1 || _GNU_GLOB_INTERFACE_VERSION == 2 gnu glob # endif #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "gnu glob" >/dev/null 2>&1; then : make_cv_sys_gnu_glob=yes else make_cv_sys_gnu_glob=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $make_cv_sys_gnu_glob" >&5 $as_echo "$make_cv_sys_gnu_glob" >&6; } # Tell automake about this, so it can build the right .c files. if test "$make_cv_sys_gnu_glob" = yes; then USE_SYSTEM_GLOB_TRUE= USE_SYSTEM_GLOB_FALSE='#' else USE_SYSTEM_GLOB_TRUE='#' USE_SYSTEM_GLOB_FALSE= fi # Tell build.sh which to use USE_SYSTEM_GLOB="$make_cv_sys_gnu_glob" if test $gl_cv_func_malloc_posix = yes; then $as_echo "#define HAVE_MALLOC_POSIX 1" >>confdefs.h else REPLACE_MALLOC=1 fi if test $REPLACE_MALLOC = 1; then gl_LIBOBJS="$gl_LIBOBJS malloc.$ac_objext" fi GNULIB_MALLOC_POSIX=1 $as_echo "#define GNULIB_TEST_MALLOC_POSIX 1" >>confdefs.h if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then gl_LIBOBJS="$gl_LIBOBJS msvc-inval.$ac_objext" fi if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then gl_LIBOBJS="$gl_LIBOBJS msvc-nothrow.$ac_objext" fi cat >>confdefs.h <<_ACEOF #define GNULIB_MSVC_NOTHROW 1 _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ssize_t" >&5 $as_echo_n "checking for ssize_t... " >&6; } if ${gt_cv_ssize_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int x = sizeof (ssize_t *) + sizeof (ssize_t); return !x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gt_cv_ssize_t=yes else gt_cv_ssize_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_ssize_t" >&5 $as_echo "$gt_cv_ssize_t" >&6; } if test $gt_cv_ssize_t = no; then $as_echo "#define ssize_t int" >>confdefs.h fi if test "$ac_cv_header_stdbool_h" = yes; then case "$host_os" in solaris*) if test -z "$GCC"; then STDBOOL_H='stdbool.h' else STDBOOL_H='' fi ;; *) STDBOOL_H='' ;; esac else STDBOOL_H='stdbool.h' fi if test -n "$STDBOOL_H"; then GL_GENERATE_STDBOOL_H_TRUE= GL_GENERATE_STDBOOL_H_FALSE='#' else GL_GENERATE_STDBOOL_H_TRUE='#' GL_GENERATE_STDBOOL_H_FALSE= fi if test "$ac_cv_type__Bool" = yes; then HAVE__BOOL=1 else HAVE__BOOL=0 fi STDDEF_H= { $as_echo "$as_me:${as_lineno-$LINENO}: checking for good max_align_t" >&5 $as_echo_n "checking for good max_align_t... " >&6; } if ${gl_cv_type_max_align_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include unsigned int s = sizeof (max_align_t); #if defined __GNUC__ || defined __IBM__ALIGNOF__ int check1[2 * (__alignof__ (double) <= __alignof__ (max_align_t)) - 1]; int check2[2 * (__alignof__ (long double) <= __alignof__ (max_align_t)) - 1]; #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_type_max_align_t=yes else gl_cv_type_max_align_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_max_align_t" >&5 $as_echo "$gl_cv_type_max_align_t" >&6; } if test $gl_cv_type_max_align_t = no; then HAVE_MAX_ALIGN_T=0 STDDEF_H=stddef.h fi if test $gt_cv_c_wchar_t = no; then HAVE_WCHAR_T=0 STDDEF_H=stddef.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NULL can be used in arbitrary expressions" >&5 $as_echo_n "checking whether NULL can be used in arbitrary expressions... " >&6; } if ${gl_cv_decl_null_works+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int test[2 * (sizeof NULL == sizeof (void *)) -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_decl_null_works=yes else gl_cv_decl_null_works=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_decl_null_works" >&5 $as_echo "$gl_cv_decl_null_works" >&6; } if test $gl_cv_decl_null_works = no; then REPLACE_NULL=1 STDDEF_H=stddef.h fi if test -n "$STDDEF_H"; then GL_GENERATE_STDDEF_H_TRUE= GL_GENERATE_STDDEF_H_FALSE='#' else GL_GENERATE_STDDEF_H_TRUE='#' GL_GENERATE_STDDEF_H_FALSE= fi if test -n "$STDDEF_H"; then if test $gl_cv_have_include_next = yes; then gl_cv_next_stddef_h='<'stddef.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_stddef_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'stddef.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_stddef_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_stddef_h gl_cv_next_stddef_h='"'$gl_header'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stddef_h" >&5 $as_echo "$gl_cv_next_stddef_h" >&6; } fi NEXT_STDDEF_H=$gl_cv_next_stddef_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'stddef.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_stddef_h fi NEXT_AS_FIRST_DIRECTIVE_STDDEF_H=$gl_next_as_first_directive fi $as_echo "#define __USE_MINGW_ANSI_STDIO 1" >>confdefs.h if test $gl_cv_have_include_next = yes; then gl_cv_next_stdio_h='<'stdio.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_stdio_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'stdio.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_stdio_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_stdio_h gl_cv_next_stdio_h='"'$gl_header'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdio_h" >&5 $as_echo "$gl_cv_next_stdio_h" >&6; } fi NEXT_STDIO_H=$gl_cv_next_stdio_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'stdio.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_stdio_h fi NEXT_AS_FIRST_DIRECTIVE_STDIO_H=$gl_next_as_first_directive { $as_echo "$as_me:${as_lineno-$LINENO}: checking which flavor of printf attribute matches inttypes macros" >&5 $as_echo_n "checking which flavor of printf attribute matches inttypes macros... " >&6; } if ${gl_cv_func_printf_attribute_flavor+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define __STDC_FORMAT_MACROS 1 #include #include /* For non-mingw systems, compilation will trivially succeed. For mingw, compilation will succeed for older mingw (system printf, "I64d") and fail for newer mingw (gnu printf, "lld"). */ #if (defined _WIN32 && ! defined __CYGWIN__) && \ (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) extern char PRIdMAX_probe[sizeof PRIdMAX == sizeof "I64d" ? 1 : -1]; #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_func_printf_attribute_flavor=system else gl_cv_func_printf_attribute_flavor=gnu fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_attribute_flavor" >&5 $as_echo "$gl_cv_func_printf_attribute_flavor" >&6; } if test "$gl_cv_func_printf_attribute_flavor" = gnu; then $as_echo "#define GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU 1" >>confdefs.h fi GNULIB_FSCANF=1 cat >>confdefs.h <<_ACEOF #define GNULIB_FSCANF 1 _ACEOF GNULIB_SCANF=1 cat >>confdefs.h <<_ACEOF #define GNULIB_SCANF 1 _ACEOF GNULIB_FGETC=1 GNULIB_GETC=1 GNULIB_GETCHAR=1 GNULIB_FGETS=1 GNULIB_FREAD=1 GNULIB_FPRINTF=1 GNULIB_PRINTF=1 GNULIB_VFPRINTF=1 GNULIB_VPRINTF=1 GNULIB_FPUTC=1 GNULIB_PUTC=1 GNULIB_PUTCHAR=1 GNULIB_FPUTS=1 GNULIB_PUTS=1 GNULIB_FWRITE=1 if test $gl_cv_have_include_next = yes; then gl_cv_next_stdlib_h='<'stdlib.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_stdlib_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'stdlib.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_stdlib_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_stdlib_h gl_cv_next_stdlib_h='"'$gl_header'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdlib_h" >&5 $as_echo "$gl_cv_next_stdlib_h" >&6; } fi NEXT_STDLIB_H=$gl_cv_next_stdlib_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'stdlib.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_stdlib_h fi NEXT_AS_FIRST_DIRECTIVE_STDLIB_H=$gl_next_as_first_directive for ac_func in stpcpy do : ac_fn_c_check_func "$LINENO" "stpcpy" "ac_cv_func_stpcpy" if test "x$ac_cv_func_stpcpy" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STPCPY 1 _ACEOF fi done if test $ac_cv_func_stpcpy = no; then HAVE_STPCPY=0 fi if test $HAVE_STPCPY = 0; then gl_LIBOBJS="$gl_LIBOBJS stpcpy.$ac_objext" : fi GNULIB_STPCPY=1 $as_echo "#define GNULIB_TEST_STPCPY 1" >>confdefs.h if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strerror function" >&5 $as_echo_n "checking for working strerror function... " >&6; } if ${gl_cv_func_working_strerror+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_working_strerror="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_working_strerror="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_working_strerror="$gl_cross_guess_normal" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { if (!*strerror (-2)) return 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_working_strerror=yes else gl_cv_func_working_strerror=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: $gl_cv_func_working_strerror" >&5 $as_echo "$gl_cv_func_working_strerror" >&6; } case "$gl_cv_func_working_strerror" in *yes) ;; *) REPLACE_STRERROR=1 ;; esac else REPLACE_STRERROR=1 fi if test $REPLACE_STRERROR = 1; then gl_LIBOBJS="$gl_LIBOBJS strerror.$ac_objext" fi cat >>confdefs.h <<_ACEOF #define GNULIB_STRERROR 1 _ACEOF GNULIB_STRERROR=1 $as_echo "#define GNULIB_TEST_STRERROR 1" >>confdefs.h if test -n "$ERRNO_H" || test $REPLACE_STRERROR_0 = 1; then gl_LIBOBJS="$gl_LIBOBJS strerror-override.$ac_objext" if test $ac_cv_header_sys_socket_h != yes; then for ac_header in winsock2.h do : ac_fn_c_check_header_mongrel "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default" if test "x$ac_cv_header_winsock2_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_WINSOCK2_H 1 _ACEOF fi done fi if test "$ac_cv_header_winsock2_h" = yes; then HAVE_WINSOCK2_H=1 UNISTD_H_HAVE_WINSOCK2_H=1 SYS_IOCTL_H_HAVE_WINSOCK2_H=1 else HAVE_WINSOCK2_H=0 fi fi if test $gl_cv_have_include_next = yes; then gl_cv_next_unistd_h='<'unistd.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_unistd_h+:} false; then : $as_echo_n "(cached) " >&6 else if test $ac_cv_header_unistd_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'unistd.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_unistd_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_unistd_h gl_cv_next_unistd_h='"'$gl_header'"' else gl_cv_next_unistd_h='<'unistd.h'>' fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_unistd_h" >&5 $as_echo "$gl_cv_next_unistd_h" >&6; } fi NEXT_UNISTD_H=$gl_cv_next_unistd_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'unistd.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_unistd_h fi NEXT_AS_FIRST_DIRECTIVE_UNISTD_H=$gl_next_as_first_directive if test $ac_cv_header_unistd_h = yes; then HAVE_UNISTD_H=1 else HAVE_UNISTD_H=0 fi : # End of code from modules gltests_libdeps= gltests_ltlibdeps= gl_source_base='tests' gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS gl_module_indicator_condition=$gltests_WITNESS LIBGNU_LIBDEPS="$gl_libdeps" LIBGNU_LTLIBDEPS="$gl_ltlibdeps" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else 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_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else 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_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else 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_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_AR" && ac_cv_prog_AR="ar" fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Perl is needed for the test suite (only) # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_PERL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$PERL"; then ac_cv_prog_PERL="$PERL" # Let the user override the test. else 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_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_PERL="perl" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_PERL" && ac_cv_prog_PERL="perl" fi fi PERL=$ac_cv_prog_PERL if test -n "$PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 $as_echo "$PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Specialized system macros { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5 $as_echo_n "checking for library containing strerror... " >&6; } if ${ac_cv_search_strerror+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char strerror (); int main () { return strerror (); ; return 0; } _ACEOF for ac_lib in '' cposix; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_strerror=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_strerror+:} false; then : break fi done if ${ac_cv_search_strerror+:} false; then : else ac_cv_search_strerror=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5 $as_echo "$ac_cv_search_strerror" >&6; } ac_res=$ac_cv_search_strerror if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 $as_echo_n "checking whether byte ordering is bigendian... " >&6; } if ${ac_cv_c_bigendian+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # Check for potential -arch flags. It is not universal unless # there are at least two -arch flags with different values. ac_arch= ac_prev= for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do if test -n "$ac_prev"; then case $ac_word in i?86 | x86_64 | ppc | ppc64) if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then ac_arch=$ac_word else ac_cv_c_bigendian=universal break fi ;; esac ac_prev= elif test "x$ac_word" = "x-arch"; then ac_prev=arch fi done fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then # See if sys/param.h defines the BYTE_ORDER macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ && LITTLE_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to _BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef _BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # Compile a test program. if test "$cross_compiling" = yes; then : # Try to guess by grepping values from an object file. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; int use_ascii (int i) { return ascii_mm[i] + ascii_ii[i]; } short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; } extern int foo; int main () { return use_ascii (foo) == use_ebcdic (foo); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then ac_cv_c_bigendian=yes fi if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else # finding both strings is unlikely to happen, but who knows? ac_cv_c_bigendian=unknown fi fi fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* Are we little or big endian? From Harbison&Steele. */ union { long int l; char c[sizeof (long int)]; } u; u.l = 1; return u.c[sizeof (long int) - 1] == 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_bigendian=no else ac_cv_c_bigendian=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 $as_echo "$ac_cv_c_bigendian" >&6; } case $ac_cv_c_bigendian in #( yes) $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h ;; #( no) ;; #( universal) $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h ;; #( *) as_fn_error $? "unknown endianness presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; esac # Enable gettext, in "external" mode. { $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; } # Check whether --enable-nls was given. if test "${enable_nls+set}" = set; then : enableval=$enable_nls; USE_NLS=$enableval else USE_NLS=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } GETTEXT_MACRO_VERSION=0.19 # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # 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, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGFMT" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GMSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) 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_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; *) MSGFMT_015=$MSGFMT ;; esac case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; *) GMSGFMT_015=$GMSGFMT ;; esac # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # 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, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else case "$XGETTEXT" in [\\/]* | ?:[\\/]*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f messages.po case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; *) XGETTEXT_015=$XGETTEXT ;; esac # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # 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, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "msgmerge", so it can be a program name with args. set dummy msgmerge; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGMERGE+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGMERGE" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":" ;; esac fi MSGMERGE="$ac_cv_path_MSGMERGE" if test "$MSGMERGE" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 $as_echo "$MSGMERGE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$localedir" || localedir='${datadir}/locale' test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= ac_config_commands="$ac_config_commands po-directories" if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" 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 else with_gnu_ld=no fi # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # 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 $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 ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) 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" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${acl_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then 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 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 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $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 lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$acl_cv_prog_gnu_ld" >&6; } with_gnu_ld=$acl_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 $as_echo_n "checking for shared library run path origin... " >&6; } if ${acl_cv_rpath+:} false; then : $as_echo_n "(cached) " >&6 else CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 $as_echo "$acl_cv_rpath" >&6; } wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" # Check whether --enable-rpath was given. if test "${enable_rpath+set}" = set; then : enableval=$enable_rpath; : else enable_rpath=yes fi acl_libdirstem=lib acl_libdirstem2= case "$host_os" in solaris*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5 $as_echo_n "checking for 64-bit host... " >&6; } if ${gl_cv_solaris_64bit+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _LP64 sixtyfour bits #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "sixtyfour bits" >/dev/null 2>&1; then : gl_cv_solaris_64bit=yes else gl_cv_solaris_64bit=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5 $as_echo "$gl_cv_solaris_64bit" >&6; } if test $gl_cv_solaris_64bit = yes; then acl_libdirstem=lib/64 case "$host_cpu" in sparc*) acl_libdirstem2=lib/sparcv9 ;; i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; esac fi ;; *) searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; */../ | */.. ) # Better ignore directories of this form. They are misleading. ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib64 ) acl_libdirstem=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" fi ;; esac test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libiconv-prefix was given. if test "${with_libiconv_prefix+set}" = set; then : withval=$with_libiconv_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" if test "$acl_libdirstem2" != "$acl_libdirstem" \ && ! test -d "$withval/$acl_libdirstem"; then additional_libdir="$withval/$acl_libdirstem2" fi fi fi fi LIBICONV= LTLIBICONV= INCICONV= LIBICONV_PREFIX= HAVE_LIBICONV= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='iconv ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" else LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'iconv'; then LIBICONV_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'iconv'; then LIBICONV_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" ;; esac done fi else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 $as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; } if ${gt_cv_func_CFPreferencesCopyAppValue+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { CFPreferencesCopyAppValue(NULL, NULL) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_CFPreferencesCopyAppValue=yes else gt_cv_func_CFPreferencesCopyAppValue=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 $as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then $as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5 $as_echo_n "checking for CFLocaleCopyCurrent... " >&6; } if ${gt_cv_func_CFLocaleCopyCurrent+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { CFLocaleCopyCurrent(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_CFLocaleCopyCurrent=yes else gt_cv_func_CFLocaleCopyCurrent=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 $as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; } if test $gt_cv_func_CFLocaleCopyCurrent = yes; then $as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi LIBINTL= LTLIBINTL= POSUB= case " $gt_needs " in *" need-formatstring-macros "*) gt_api_version=3 ;; *" need-ngettext "*) gt_api_version=2 ;; *) gt_api_version=1 ;; esac gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no if test $gt_api_version -ge 3; then gt_revision_test_code=' #ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; ' else gt_revision_test_code= fi if test $gt_api_version -ge 2; then gt_expression_test_code=' + * ngettext ("", "", 0)' else gt_expression_test_code= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5 $as_echo_n "checking for GNU gettext in libc... " >&6; } if eval \${$gt_func_gnugettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include $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; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$gt_func_gnugettext_libc=yes" else eval "$gt_func_gnugettext_libc=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$gt_func_gnugettext_libc { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then am_save_CPPFLAGS="$CPPFLAGS" for element in $INCICONV; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 $as_echo_n "checking for iconv... " >&6; } if ${am_cv_func_iconv+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_lib_iconv=yes am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$am_save_LIBS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 $as_echo "$am_cv_func_iconv" >&6; } if test "$am_cv_func_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5 $as_echo_n "checking for working iconv... " >&6; } if ${am_cv_func_iconv_works+:} false; then : $as_echo_n "(cached) " >&6 else am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi 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 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #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 ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; 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, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 1; iconv_close (cd_utf8_to_88591); } } /* Test against Solaris 10 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); if (cd_ascii_to_88591 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\263"; char buf[10]; 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, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) 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. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; 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, &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) result |= 8; iconv_close (cd_88591_to_utf8); } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ if (/* Try standardized names. */ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) /* Try IRIX, OSF/1 names. */ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) /* Try AIX names. */ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) /* Try HP-UX names. */ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) result |= 16; return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : am_cv_func_iconv_works=yes 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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5 $as_echo "$am_cv_func_iconv_works" >&6; } case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then $as_echo "#define HAVE_ICONV 1" >>confdefs.h fi if test "$am_cv_lib_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 $as_echo_n "checking how to link with libiconv... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 $as_echo "$LIBICONV" >&6; } else CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libintl-prefix was given. if test "${with_libintl_prefix+set}" = set; then : withval=$with_libintl_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" if test "$acl_libdirstem2" != "$acl_libdirstem" \ && ! test -d "$withval/$acl_libdirstem"; then additional_libdir="$withval/$acl_libdirstem2" fi fi fi fi LIBINTL= LTLIBINTL= INCINTL= LIBINTL_PREFIX= HAVE_LIBINTL= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='intl ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a" else LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'intl'; then LIBINTL_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'intl'; then LIBINTL_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBINTL="${LIBINTL}${LIBINTL:+ }$dep" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep" ;; esac done fi else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir" done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5 $as_echo_n "checking for GNU gettext in libintl... " >&6; } if eval \${$gt_func_gnugettext_libintl+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "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 : eval "$gt_func_gnugettext_libintl=yes" else eval "$gt_func_gnugettext_libintl=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "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" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS" fi eval ac_res=\$$gt_func_gnugettext_libintl { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else LIBINTL= LTLIBINTL= INCINTL= fi if test -n "$INTL_MACOSX_LIBS"; then if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" fi fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then $as_echo "#define ENABLE_NLS 1" >>confdefs.h else USE_NLS=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5 $as_echo_n "checking whether to use NLS... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } if test "$USE_NLS" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5 $as_echo_n "checking where the gettext function comes from... " >&6; } if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5 $as_echo "$gt_source" >&6; } fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5 $as_echo_n "checking how to link with libintl... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5 $as_echo "$LIBINTL" >&6; } for element in $INCINTL; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done fi $as_echo "#define HAVE_GETTEXT 1" >>confdefs.h $as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h fi POSUB=po fi INTLLIBS="$LIBINTL" # This test must come as early as possible after the compiler configuration # tests, because the choice of the file model can (in principle) affect # whether functions and headers are available, whether they work, etc. # Check whether --enable-largefile was given. if test "${enable_largefile+set}" = set; then : enableval=$enable_largefile; fi if test "$enable_largefile" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 $as_echo_n "checking for special C compiler options needed for large files... " >&6; } if ${ac_cv_sys_largefile_CC+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_sys_largefile_CC=no if test "$GCC" != yes; then ac_save_CC=$CC while :; do # IRIX 6.2 and later do not support large files by default, # so use the C compiler's -n32 option if that helps. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : break fi rm -f core conftest.err conftest.$ac_objext CC="$CC -n32" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_largefile_CC=' -n32'; break fi rm -f core conftest.err conftest.$ac_objext break done CC=$ac_save_CC rm -f conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 $as_echo "$ac_cv_sys_largefile_CC" >&6; } if test "$ac_cv_sys_largefile_CC" != no; then CC=$CC$ac_cv_sys_largefile_CC fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 $as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } if ${ac_cv_sys_file_offset_bits+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _FILE_OFFSET_BITS 64 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=64; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_file_offset_bits=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 $as_echo "$ac_cv_sys_file_offset_bits" >&6; } case $ac_cv_sys_file_offset_bits in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits _ACEOF ;; esac rm -rf conftest* if test $ac_cv_sys_file_offset_bits = unknown; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 $as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } if ${ac_cv_sys_large_files+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGE_FILES 1 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=1; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_large_files=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 $as_echo "$ac_cv_sys_large_files" >&6; } case $ac_cv_sys_large_files in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _LARGE_FILES $ac_cv_sys_large_files _ACEOF ;; esac rm -rf conftest* fi fi # Checks for libraries. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing getpwnam" >&5 $as_echo_n "checking for library containing getpwnam... " >&6; } if ${ac_cv_search_getpwnam+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char getpwnam (); int main () { return getpwnam (); ; return 0; } _ACEOF for ac_lib in '' sun; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_getpwnam=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_getpwnam+:} false; then : break fi done if ${ac_cv_search_getpwnam+:} false; then : else ac_cv_search_getpwnam=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_getpwnam" >&5 $as_echo "$ac_cv_search_getpwnam" >&6; } ac_res=$ac_cv_search_getpwnam if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi # Checks for header files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=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 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 $as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } if eval \${$as_ac_Header+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include <$ac_hdr> int main () { if ((DIR *) 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_ac_Header=yes" else eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_ac_Header { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 _ACEOF ac_header_dirent=$ac_hdr; break fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 $as_echo_n "checking for library containing opendir... " >&6; } if ${ac_cv_search_opendir+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' dir; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_opendir+:} false; then : break fi done if ${ac_cv_search_opendir+:} false; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 $as_echo "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 $as_echo_n "checking for library containing opendir... " >&6; } if ${ac_cv_search_opendir+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' x; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_opendir+:} false; then : break fi done if ${ac_cv_search_opendir+:} false; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 $as_echo "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat file-mode macros are broken" >&5 $as_echo_n "checking whether stat file-mode macros are broken... " >&6; } if ${ac_cv_header_stat_broken+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if defined S_ISBLK && defined S_IFDIR extern char c1[S_ISBLK (S_IFDIR) ? -1 : 1]; #endif #if defined S_ISBLK && defined S_IFCHR extern char c2[S_ISBLK (S_IFCHR) ? -1 : 1]; #endif #if defined S_ISLNK && defined S_IFREG extern char c3[S_ISLNK (S_IFREG) ? -1 : 1]; #endif #if defined S_ISSOCK && defined S_IFREG extern char c4[S_ISSOCK (S_IFREG) ? -1 : 1]; #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stat_broken=no else ac_cv_header_stat_broken=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stat_broken" >&5 $as_echo "$ac_cv_header_stat_broken" >&6; } if test $ac_cv_header_stat_broken = yes; then $as_echo "#define STAT_MACROS_BROKEN 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5 $as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; } if ${ac_cv_header_time+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { if ((struct tm *) 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_time=yes else ac_cv_header_time=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5 $as_echo "$ac_cv_header_time" >&6; } if test $ac_cv_header_time = yes; then $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 \ sys/select.h sys/file.h spawn.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" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if ${ac_cv_c_const+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __cplusplus /* Ultrix mips cc rejects this sort of thing. */ typedef int charset[2]; const charset cs = { 0, 0 }; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this sort of thing. */ char tx; char *t = &tx; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then $as_echo "#define const /**/" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5 $as_echo_n "checking return type of signal handlers... " >&6; } if ${ac_cv_type_signal+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { return *(signal (0, 0)) (0) == 1; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_type_signal=int else ac_cv_type_signal=void fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal" >&5 $as_echo "$ac_cv_type_signal" >&6; } cat >>confdefs.h <<_ACEOF #define RETSIGTYPE $ac_cv_type_signal _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5 $as_echo_n "checking for uid_t in sys/types.h... " >&6; } if ${ac_cv_type_uid_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "uid_t" >/dev/null 2>&1; then : ac_cv_type_uid_t=yes else ac_cv_type_uid_t=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5 $as_echo "$ac_cv_type_uid_t" >&6; } if test $ac_cv_type_uid_t = no; then $as_echo "#define uid_t int" >>confdefs.h $as_echo "#define gid_t int" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" if test "x$ac_cv_type_pid_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define pid_t int _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 : else 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 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 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 $as_echo_n "checking for nanoseconds field of struct stat... " >&6; } if ${ac_cv_struct_st_mtim_nsec+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_CPPFLAGS="$CPPFLAGS" ac_cv_struct_st_mtim_nsec=no # st_mtim.tv_nsec -- the usual case # st_mtim._tv_nsec -- Solaris 2.6, if # (defined _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED == 1 # && !defined __EXTENSIONS__) # st_mtim.st__tim.tv_nsec -- UnixWare 2.1.2 # st_mtime_n -- AIX 5.2 and above # st_mtimespec.tv_nsec -- Darwin (Mac OSX) for ac_val in st_mtim.tv_nsec st_mtim._tv_nsec st_mtim.st__tim.tv_nsec st_mtime_n st_mtimespec.tv_nsec; do CPPFLAGS="$ac_save_CPPFLAGS -DST_MTIM_NSEC=$ac_val" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { struct stat s; s.ST_MTIM_NSEC; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_struct_st_mtim_nsec=$ac_val; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done CPPFLAGS="$ac_save_CPPFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_st_mtim_nsec" >&5 $as_echo "$ac_cv_struct_st_mtim_nsec" >&6; } if test $ac_cv_struct_st_mtim_nsec != no; then cat >>confdefs.h <<_ACEOF #define ST_MTIM_NSEC $ac_cv_struct_st_mtim_nsec _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use high resolution file timestamps" >&5 $as_echo_n "checking whether to use high resolution file timestamps... " >&6; } if ${make_cv_file_timestamp_hi_res+:} false; then : $as_echo_n "(cached) " >&6 else make_cv_file_timestamp_hi_res=no if test "$ac_cv_struct_st_mtim_nsec" != no; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if HAVE_INTTYPES_H # include #endif int main () { char a[0x7fffffff < (uintmax_t)-1 >> 30 ? 1 : -1]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : make_cv_file_timestamp_hi_res=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $make_cv_file_timestamp_hi_res" >&5 $as_echo "$make_cv_file_timestamp_hi_res" >&6; } if test "$make_cv_file_timestamp_hi_res" = yes; then : val=1 else val=0 fi cat >>confdefs.h <<_ACEOF #define FILE_TIMESTAMP_HI_RES $val _ACEOF if test "$make_cv_file_timestamp_hi_res" = yes; then : # Solaris 2.5.1 needs -lposix4 to get the clock_gettime function. # Solaris 7 prefers the library name -lrt to the obsolescent name -lposix4. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5 $as_echo_n "checking for library containing clock_gettime... " >&6; } if ${ac_cv_search_clock_gettime+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char clock_gettime (); int main () { return clock_gettime (); ; return 0; } _ACEOF for ac_lib in '' rt posix4; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_clock_gettime=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_clock_gettime+:} false; then : break fi done if ${ac_cv_search_clock_gettime+:} false; then : else ac_cv_search_clock_gettime=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5 $as_echo "$ac_cv_search_clock_gettime" >&6; } ac_res=$ac_cv_search_clock_gettime if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "$ac_cv_search_clock_gettime" != no; then : $as_echo "#define HAVE_CLOCK_GETTIME 1" >>confdefs.h fi fi # Check for DOS-style pathnames. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether system uses MSDOS-style paths" >&5 $as_echo_n "checking whether system uses MSDOS-style paths... " >&6; } if ${ac_cv_dos_paths+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if !defined _WIN32 && !defined __WIN32__ && !defined __MSDOS__ && !defined __EMX__ && !defined __MSYS__ && !defined __CYGWIN__ neither MSDOS nor Windows nor OS2 #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_dos_paths=yes else ac_cv_dos_paths=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_dos_paths" >&5 $as_echo "$ac_cv_dos_paths" >&6; } if test x"$ac_cv_dos_paths" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DOS_PATHS 1 _ACEOF fi # See if we have a standard version of gettimeofday(). Since actual # implementations can differ, just make sure we have the most common # one. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for standard gettimeofday" >&5 $as_echo_n "checking for standard gettimeofday... " >&6; } if ${ac_cv_func_gettimeofday+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_func_gettimeofday=no if test "$cross_compiling" = yes; then : ac_cv_func_gettimeofday="no (cross-compiling)" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { struct timeval t; t.tv_sec = -1; t.tv_usec = -1; return gettimeofday (&t, 0) != 0 || t.tv_sec < 0 || t.tv_usec < 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_gettimeofday=yes else ac_cv_func_gettimeofday=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_gettimeofday" >&5 $as_echo "$ac_cv_func_gettimeofday" >&6; } if test "$ac_cv_func_gettimeofday" = yes; then : $as_echo "#define HAVE_GETTIMEOFDAY 1" >>confdefs.h fi for ac_func in strdup strndup memrchr umask mkstemp mktemp fdopen \ dup dup2 getcwd realpath sigsetmask sigaction \ getgroups seteuid setegid setlinebuf setreuid setregid \ getrlimit setrlimit setvbuf pipe strsignal \ lstat readlink atexit isatty ttyname pselect posix_spawn \ posix_spawnattr_setsigmask 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 # We need to check declarations, not just existence, because on Tru64 this # function is not declared without special flags, which themselves cause # other problems. We'll just use our own. ac_fn_c_check_decl "$LINENO" "bsd_signal" "ac_cv_have_decl_bsd_signal" "#define _GNU_SOURCE 1 #include " if test "x$ac_cv_have_decl_bsd_signal" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_BSD_SIGNAL $ac_have_decl _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 #ifdef HAVE_VFORK_H # include #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 , but some compilers (e.g. gcc -O) don't grok . 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 ac_cv_func_setvbuf_reversed=no fi # Rumor has it that strcasecmp lives in -lresolv on some odd systems. # It doesn't hurt much to use our own if we can't find it so I don't # make the effort here. for ac_func in strcasecmp strncasecmp strcmpi strncmpi stricmp strnicmp 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 # strcoll() is used by the GNU glob library { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strcoll" >&5 $as_echo_n "checking for working strcoll... " >&6; } if ${ac_cv_func_strcoll_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_strcoll_works=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { return (strcoll ("abc", "def") >= 0 || strcoll ("ABC", "DEF") >= 0 || strcoll ("123", "456") >= 0) ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_strcoll_works=yes else ac_cv_func_strcoll_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_strcoll_works" >&5 $as_echo "$ac_cv_func_strcoll_works" >&6; } if test $ac_cv_func_strcoll_works = yes; then $as_echo "#define HAVE_STRCOLL 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether closedir returns void" >&5 $as_echo_n "checking whether closedir returns void... " >&6; } if ${ac_cv_func_closedir_void+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_closedir_void=yes else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default #include <$ac_header_dirent> #ifndef __cplusplus int closedir (); #endif int main () { return closedir (opendir (".")) != 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_closedir_void=no else ac_cv_func_closedir_void=yes 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_closedir_void" >&5 $as_echo "$ac_cv_func_closedir_void" >&6; } if test $ac_cv_func_closedir_void = yes; then $as_echo "#define CLOSEDIR_VOID 1" >>confdefs.h fi # dir.c and our glob.c use dirent.d_type if available ac_fn_c_check_member "$LINENO" "struct dirent" "d_type" "ac_cv_member_struct_dirent_d_type" " #include #ifdef HAVE_DIRENT_H # include #else # define dirent direct # ifdef HAVE_SYS_NDIR_H # include # endif # ifdef HAVE_SYS_DIR_H # include # endif # ifdef HAVE_NDIR_H # include # endif #endif " if test "x$ac_cv_member_struct_dirent_d_type" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRUCT_DIRENT_D_TYPE 1 _ACEOF fi # See if the user wants to add (or not) GNU Guile support # Check whether --with-guile was given. if test "${with_guile+set}" = set; then : withval=$with_guile; fi # Annoyingly, each version of Guile comes with it's own PC file so we have to # specify them as individual packages. Ugh. if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) 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_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) 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_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi if test "x$with_guile" != xno; then : guile_versions="3.0 2.2 2.0 1.8" guile_version=no have_guile=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU Guile" >&5 $as_echo_n "checking for GNU Guile... " >&6; } for v in $guile_versions; do if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"guile-\$v\""; } >&5 ($PKG_CONFIG --exists --print-errors "guile-$v") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then guile_version=$v; have_guile=yes; break fi done { $as_echo "$as_me:${as_lineno-$LINENO}: result: $guile_version" >&5 $as_echo "$guile_version" >&6; } if test "$have_guile" = yes; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GUILE" >&5 $as_echo_n "checking for GUILE... " >&6; } if test -n "$GUILE_CFLAGS"; then pkg_cv_GUILE_CFLAGS="$GUILE_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"guile-\$guile_version\""; } >&5 ($PKG_CONFIG --exists --print-errors "guile-$guile_version") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GUILE_CFLAGS=`$PKG_CONFIG --cflags "guile-$guile_version" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GUILE_LIBS"; then pkg_cv_GUILE_LIBS="$GUILE_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"guile-\$guile_version\""; } >&5 ($PKG_CONFIG --exists --print-errors "guile-$guile_version") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GUILE_LIBS=`$PKG_CONFIG --libs "guile-$guile_version" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GUILE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "guile-$guile_version" 2>&1` else GUILE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "guile-$guile_version" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GUILE_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (guile-$guile_version) were not met: $GUILE_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GUILE_CFLAGS and GUILE_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GUILE_CFLAGS and GUILE_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else GUILE_CFLAGS=$pkg_cv_GUILE_CFLAGS GUILE_LIBS=$pkg_cv_GUILE_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi # Unfortunately Guile requires a C99 compiler but GNU make doesn't, so # verify we can actually compile the header. keep_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $pkg_cv_GUILE_CFLAGS" ac_fn_c_check_header_compile "$LINENO" "libguile.h" "ac_cv_header_libguile_h" "/* Avoid configuration error warnings. */ " if test "x$ac_cv_header_libguile_h" = xyes; then : $as_echo "#define HAVE_GUILE 1" >>confdefs.h else have_guile=no fi CPPFLAGS="$keep_CPPFLAGS" fi fi if test "$have_guile" = "yes"; then HAVE_GUILE_TRUE= HAVE_GUILE_FALSE='#' else HAVE_GUILE_TRUE='#' HAVE_GUILE_FALSE= fi ac_fn_c_check_decl "$LINENO" "sys_siglist" "ac_cv_have_decl_sys_siglist" "$ac_includes_default #include /* NetBSD declares sys_siglist in unistd.h. */ #if HAVE_UNISTD_H # include #endif " if test "x$ac_cv_have_decl_sys_siglist" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_SYS_SIGLIST $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "_sys_siglist" "ac_cv_have_decl__sys_siglist" "$ac_includes_default #include /* NetBSD declares sys_siglist in unistd.h. */ #if HAVE_UNISTD_H # include #endif " if test "x$ac_cv_have_decl__sys_siglist" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL__SYS_SIGLIST $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "__sys_siglist" "ac_cv_have_decl___sys_siglist" "$ac_includes_default #include /* NetBSD declares sys_siglist in unistd.h. */ #if HAVE_UNISTD_H # include #endif " if test "x$ac_cv_have_decl___sys_siglist" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL___SYS_SIGLIST $ac_have_decl _ACEOF # Check out the wait reality. for ac_header in sys/wait.h do : ac_fn_c_check_header_compile "$LINENO" "sys/wait.h" "ac_cv_header_sys_wait_h" "#include " if test "x$ac_cv_header_sys_wait_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_WAIT_H 1 _ACEOF fi done for ac_func in waitpid wait3 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for union wait" >&5 $as_echo_n "checking for union wait... " >&6; } if ${make_cv_union_wait+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { union wait status; int pid; pid = wait (&status); #ifdef WEXITSTATUS /* Some POSIXoid systems have both the new-style macros and the old union wait type, and they do not work together. If union wait conflicts with WEXITSTATUS et al, we don't want to use it at all. */ if (WEXITSTATUS (status) != 0) pid = -1; #ifdef WTERMSIG /* If we have WEXITSTATUS and WTERMSIG, just use them on ints. */ -- blow chunks here -- #endif #endif #ifdef HAVE_WAITPID /* Make sure union wait works with waitpid. */ pid = waitpid (-1, &status, 0); #endif ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : make_cv_union_wait=yes else make_cv_union_wait=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $make_cv_union_wait" >&5 $as_echo "$make_cv_union_wait" >&6; } if test "$make_cv_union_wait" = yes; then : $as_echo "#define HAVE_UNION_WAIT 1" >>confdefs.h fi # If we're building on Windows/DOS/OS/2, add some support for DOS drive specs. if test "$PATH_SEPARATOR" = ';'; then : $as_echo "#define HAVE_DOS_PATHS 1" >>confdefs.h fi # See if the user wants to use pmake's "customs" distributed build capability REMOTE=stub use_customs=false # Check whether --with-customs was given. if test "${with_customs+set}" = set; then : withval=$with_customs; case $withval in #( n|no) : : ;; #( *) : make_cppflags="$CPPFLAGS" case $withval in #( y|ye|yes) : : ;; #( *) : CPPFLAGS="$CPPFLAGS -I$with_customs/include/customs" make_ldflags="$LDFLAGS -L$with_customs/lib" ;; esac cf_test_netlibs=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for network libraries" >&5 $as_echo_n "checking for network libraries... " >&6; } if ${cf_cv_netlibs+:} false; then : $as_echo_n "(cached) " >&6 else { $as_echo "$as_me:${as_lineno-$LINENO}: result: working..." >&5 $as_echo "working..." >&6; } cf_cv_netlibs="" cf_test_netlibs=yes for ac_func in gethostname do : ac_fn_c_check_func "$LINENO" "gethostname" "ac_cv_func_gethostname" if test "x$ac_cv_func_gethostname" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETHOSTNAME 1 _ACEOF else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostname in -lnsl" >&5 $as_echo_n "checking for gethostname in -lnsl... " >&6; } if ${ac_cv_lib_nsl_gethostname+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $cf_cv_netlibs $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gethostname (); int main () { return gethostname (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_nsl_gethostname=yes else ac_cv_lib_nsl_gethostname=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostname" >&5 $as_echo "$ac_cv_lib_nsl_gethostname" >&6; } if test "x$ac_cv_lib_nsl_gethostname" = xyes; then : cf_tr_func=`echo gethostname | tr '[a-z]' '[A-Z]'` cat >>confdefs.h <<_ACEOF #define HAVE_$cf_tr_func 1 _ACEOF ac_cv_func_gethostname=yes cf_cv_netlibs="-lnsl $cf_cv_netlibs" else ac_cv_func_gethostname=unknown unset ac_cv_func_gethostname 2>/dev/null { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostname in -lsocket" >&5 $as_echo_n "checking for gethostname in -lsocket... " >&6; } if ${ac_cv_lib_socket_gethostname+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $cf_cv_netlibs $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gethostname (); int main () { return gethostname (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_socket_gethostname=yes else ac_cv_lib_socket_gethostname=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_gethostname" >&5 $as_echo "$ac_cv_lib_socket_gethostname" >&6; } if test "x$ac_cv_lib_socket_gethostname" = xyes; then : cf_tr_func=`echo gethostname | tr '[a-z]' '[A-Z]'` cat >>confdefs.h <<_ACEOF #define HAVE_$cf_tr_func 1 _ACEOF ac_cv_func_gethostname=yes cf_cv_netlibs="-lsocket $cf_cv_netlibs" else ac_cv_func_gethostname=unknown unset ac_cv_func_gethostname 2>/dev/null fi fi fi done # # FIXME: sequent needs this library (i.e., -lsocket -linet -lnsl), but # I don't know the entrypoints - 97/7/22 TD { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -linet" >&5 $as_echo_n "checking for main in -linet... " >&6; } if ${ac_cv_lib_inet_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-linet $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_inet_main=yes else ac_cv_lib_inet_main=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_inet_main" >&5 $as_echo "$ac_cv_lib_inet_main" >&6; } if test "x$ac_cv_lib_inet_main" = xyes; then : cf_cv_netlibs="-linet $cf_cv_netlibs" fi # if test "$ac_cv_func_lsocket" != no ; then for ac_func in socket do : ac_fn_c_check_func "$LINENO" "socket" "ac_cv_func_socket" if test "x$ac_cv_func_socket" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SOCKET 1 _ACEOF else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for socket in -lsocket" >&5 $as_echo_n "checking for socket in -lsocket... " >&6; } if ${ac_cv_lib_socket_socket+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $cf_cv_netlibs $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char socket (); int main () { return socket (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_socket_socket=yes else ac_cv_lib_socket_socket=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_socket" >&5 $as_echo "$ac_cv_lib_socket_socket" >&6; } if test "x$ac_cv_lib_socket_socket" = xyes; then : cf_tr_func=`echo socket | tr '[a-z]' '[A-Z]'` cat >>confdefs.h <<_ACEOF #define HAVE_$cf_tr_func 1 _ACEOF ac_cv_func_socket=yes cf_cv_netlibs="-lsocket $cf_cv_netlibs" else ac_cv_func_socket=unknown unset ac_cv_func_socket 2>/dev/null { $as_echo "$as_me:${as_lineno-$LINENO}: checking for socket in -lbsd" >&5 $as_echo_n "checking for socket in -lbsd... " >&6; } if ${ac_cv_lib_bsd_socket+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lbsd $cf_cv_netlibs $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char socket (); int main () { return socket (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_bsd_socket=yes else ac_cv_lib_bsd_socket=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_socket" >&5 $as_echo "$ac_cv_lib_bsd_socket" >&6; } if test "x$ac_cv_lib_bsd_socket" = xyes; then : cf_tr_func=`echo socket | tr '[a-z]' '[A-Z]'` cat >>confdefs.h <<_ACEOF #define HAVE_$cf_tr_func 1 _ACEOF ac_cv_func_socket=yes cf_cv_netlibs="-lbsd $cf_cv_netlibs" else ac_cv_func_socket=unknown unset ac_cv_func_socket 2>/dev/null fi fi fi done fi # for ac_func in gethostbyname do : ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" if test "x$ac_cv_func_gethostbyname" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETHOSTBYNAME 1 _ACEOF else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 $as_echo_n "checking for gethostbyname in -lnsl... " >&6; } if ${ac_cv_lib_nsl_gethostbyname+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $cf_cv_netlibs $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gethostbyname (); int main () { return gethostbyname (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_nsl_gethostbyname=yes else ac_cv_lib_nsl_gethostbyname=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 $as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } if test "x$ac_cv_lib_nsl_gethostbyname" = xyes; then : cf_tr_func=`echo gethostbyname | tr '[a-z]' '[A-Z]'` cat >>confdefs.h <<_ACEOF #define HAVE_$cf_tr_func 1 _ACEOF ac_cv_func_gethostbyname=yes cf_cv_netlibs="-lnsl $cf_cv_netlibs" else ac_cv_func_gethostbyname=unknown unset ac_cv_func_gethostbyname 2>/dev/null fi fi done fi LIBS="$LIBS $cf_cv_netlibs" test $cf_test_netlibs = no && echo "$cf_cv_netlibs" >&6 ac_fn_c_check_header_mongrel "$LINENO" "customs.h" "ac_cv_header_customs_h" "$ac_includes_default" if test "x$ac_cv_header_customs_h" = xyes; then : use_customs=true REMOTE=cstms LIBS="$LIBS -lcustoms" LDFLAGS="$make_ldflags" else with_customs=no CPPFLAGS="$make_cppflags" make_badcust=yes fi ;; esac fi # Tell automake about this, so it can include the right .c files. if test "$use_customs" = true; then USE_CUSTOMS_TRUE= USE_CUSTOMS_FALSE='#' else USE_CUSTOMS_TRUE='#' USE_CUSTOMS_FALSE= fi # See if the user asked to handle case insensitive file systems. # Check whether --enable-case-insensitive-file-system was given. if test "${enable_case_insensitive_file_system+set}" = set; then : enableval=$enable_case_insensitive_file_system; if test "$enableval" = yes; then : $as_echo "#define HAVE_CASE_INSENSITIVE_FS 1" >>confdefs.h fi fi # See if we can handle the job server feature, and if the user wants it. # Check whether --enable-job-server was given. if test "${enable_job_server+set}" = set; then : enableval=$enable_job_server; make_cv_job_server="$enableval" user_job_server="$enableval" else make_cv_job_server="yes" fi if test "$ac_cv_func_waitpid" = no && test "$ac_cv_func_wait3" = no; then : has_wait_nohang=no else has_wait_nohang=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SA_RESTART" >&5 $as_echo_n "checking for SA_RESTART... " >&6; } if ${make_cv_sa_restart+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return SA_RESTART; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : make_cv_sa_restart=yes else make_cv_sa_restart=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $make_cv_sa_restart" >&5 $as_echo "$make_cv_sa_restart" >&6; } if test "$make_cv_sa_restart" != no; then : $as_echo "#define HAVE_SA_RESTART 1" >>confdefs.h fi # Only allow jobserver on systems that support it case /$ac_cv_func_pipe/$ac_cv_func_sigaction/$make_cv_sa_restart/$has_wait_nohang/ in #( */no/*) : make_cv_job_server=no ;; #( *) : ;; esac # Also supported on OS2 and MinGW case $host_os in #( os2*|mingw*) : make_cv_job_server=yes ;; #( *) : ;; esac # If we support it and the user didn't disable it, build with jobserver case /$make_cv_job_server/$user_job_server/ in #( */no/*) : : no jobserver ;; #( *) : $as_echo "#define MAKE_JOBSERVER 1" >>confdefs.h ;; esac # If dl*() functions are supported we can enable the load operation ac_fn_c_check_decl "$LINENO" "dlopen" "ac_cv_have_decl_dlopen" "#include " if test "x$ac_cv_have_decl_dlopen" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_DLOPEN $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "dlsym" "ac_cv_have_decl_dlsym" "#include " if test "x$ac_cv_have_decl_dlsym" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_DLSYM $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "dlerror" "ac_cv_have_decl_dlerror" "#include " if test "x$ac_cv_have_decl_dlerror" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_DLERROR $ac_have_decl _ACEOF # Check whether --enable-load was given. if test "${enable_load+set}" = set; then : enableval=$enable_load; make_cv_load="$enableval" user_load="$enableval" else make_cv_load="yes" fi case /$ac_cv_have_decl_dlopen/$ac_cv_have_decl_dlsym/$ac_cv_have_decl_dlerror/ in #( */no/*) : make_cv_load=no ;; #( *) : ;; esac # We might need -ldl if test "$make_cv_load" = yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dlopen" >&5 $as_echo_n "checking for library containing dlopen... " >&6; } if ${ac_cv_search_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF for ac_lib in '' dl; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_dlopen=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_dlopen+:} false; then : break fi done if ${ac_cv_search_dlopen+:} false; then : else ac_cv_search_dlopen=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlopen" >&5 $as_echo "$ac_cv_search_dlopen" >&6; } ac_res=$ac_cv_search_dlopen if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else make_cv_load= fi fi case /$make_cv_load/$user_load/ in #( */no/*) : make_cv_load=no ;; #( *) : $as_echo "#define MAKE_LOAD 1" >>confdefs.h ;; esac # If we want load support, we might need to link with export-dynamic. # See if we can figure it out. Unfortunately this is very difficult. # For example passing -rdynamic to the SunPRO linker gives a warning # but succeeds and creates a shared object, not an executable! if test "$make_cv_load" = yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking If the linker accepts -Wl,--export-dynamic" >&5 $as_echo_n "checking If the linker accepts -Wl,--export-dynamic... " >&6; } old_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -Wl,--export-dynamic" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main(){} _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } AM_LDFLAGS=-Wl,--export-dynamic else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking If the linker accepts -rdynamic" >&5 $as_echo_n "checking If the linker accepts -rdynamic... " >&6; } LDFLAGS="$old_LDFLAGS -rdynamic" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main(){} _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } AM_LDFLAGS=-rdynamic else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$old_LDFLAGS" fi # if we have both lstat() and readlink() then we can support symlink # timechecks. if test "$ac_cv_func_lstat" = yes && test "$ac_cv_func_readlink" = yes; then : $as_echo "#define MAKE_SYMLINKS 1" >>confdefs.h fi # Use posix_spawn if we have support and the user didn't disable it # Check whether --enable-posix-spawn was given. if test "${enable_posix_spawn+set}" = set; then : enableval=$enable_posix_spawn; make_cv_posix_spawn="$enableval" user_posix_spawn="$enableval" else make_cv_posix_spawn="yes" fi case /$ac_cv_header_spawn/$ac_cv_func_posix_spawn/ in #( */no/*) : make_cv_posix_spawn=no ;; #( *) : ;; esac if test "$make_cv_posix_spawn" = yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for posix_spawn that fails synchronously" >&5 $as_echo_n "checking for posix_spawn that fails synchronously... " >&6; } if ${make_cv_synchronous_posix_spawn+:} false; then : $as_echo_n "(cached) " >&6 else make_cv_synchronous_posix_spawn=no if test "$cross_compiling" = yes; then : make_cv_synchronous_posix_spawn="no (cross-compiling)" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include extern char **environ; int main() { char* path = strdup("./non-existent"); char *argv[2]; argv[0] = path; argv[1] = 0; return posix_spawn(0, path, 0, 0, argv, environ); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : make_cv_synchronous_posix_spawn=no else make_cv_synchronous_posix_spawn=yes 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: $make_cv_synchronous_posix_spawn" >&5 $as_echo "$make_cv_synchronous_posix_spawn" >&6; } fi case /$user_posix_spawn/$make_cv_posix_spawn/$make_cv_synchronous_posix_spawn/ in #( */no/*) : make_cv_posix_spawn=no ;; #( *) : $as_echo "#define USE_POSIX_SPAWN 1" >>confdefs.h ;; esac # Find the SCCS commands, so we can include them in our default rules. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for location of SCCS get command" >&5 $as_echo_n "checking for location of SCCS get command... " >&6; } if ${make_cv_path_sccs_get+:} false; then : $as_echo_n "(cached) " >&6 else if test -f /usr/sccs/get; then : make_cv_path_sccs_get=/usr/sccs/get else make_cv_path_sccs_get=get fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $make_cv_path_sccs_get" >&5 $as_echo "$make_cv_path_sccs_get" >&6; } cat >>confdefs.h <<_ACEOF #define SCCS_GET "$make_cv_path_sccs_get" _ACEOF ac_clean_files="$ac_clean_files s.conftest conftoast" # Remove these later. if (/usr/sccs/admin -n s.conftest || admin -n s.conftest) >/dev/null 2>&1 && test -f s.conftest; then : # We successfully created an SCCS file. { $as_echo "$as_me:${as_lineno-$LINENO}: checking if SCCS get command understands -G" >&5 $as_echo_n "checking if SCCS get command understands -G... " >&6; } if ${make_cv_sys_get_minus_G+:} false; then : $as_echo_n "(cached) " >&6 else if $make_cv_path_sccs_get -Gconftoast s.conftest >/dev/null 2>&1 && test -f conftoast; then : make_cv_sys_get_minus_G=yes else make_cv_sys_get_minus_G=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $make_cv_sys_get_minus_G" >&5 $as_echo "$make_cv_sys_get_minus_G" >&6; } if test "$make_cv_sys_get_minus_G" = yes; then : $as_echo "#define SCCS_GET_MINUS_G 1" >>confdefs.h fi fi rm -f s.conftest conftoast # Let the makefile know what our build host is cat >>confdefs.h <<_ACEOF #define MAKE_HOST "$host" _ACEOF MAKE_HOST="$host" w32_target_env=no if false; then WINDOWSENV_TRUE= WINDOWSENV_FALSE='#' else WINDOWSENV_TRUE='#' WINDOWSENV_FALSE= fi case $host in #( *-*-mingw32) : if true; then WINDOWSENV_TRUE= WINDOWSENV_FALSE='#' else WINDOWSENV_TRUE='#' WINDOWSENV_FALSE= fi w32_target_env=yes $as_echo "#define WINDOWS32 1" >>confdefs.h $as_echo "#define HAVE_DOS_PATHS 1" >>confdefs.h ;; #( *) : ;; esac cat >>confdefs.h <<_ACEOF #define PATH_SEPARATOR_CHAR '$PATH_SEPARATOR' _ACEOF # Include the Maintainer's Makefile section, if it's here. MAINT_MAKEFILE=/dev/null if test -r "$srcdir/maintMakefile"; then : MAINT_MAKEFILE="$srcdir/maintMakefile" fi # Allow building with dmalloc { $as_echo "$as_me:${as_lineno-$LINENO}: checking if malloc debugging is wanted" >&5 $as_echo_n "checking if malloc debugging is wanted... " >&6; } # Check whether --with-dmalloc was given. if test "${with_dmalloc+set}" = set; then : withval=$with_dmalloc; if test "$withval" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define WITH_DMALLOC 1" >>confdefs.h LIBS="$LIBS -ldmalloc" LDFLAGS="$LDFLAGS -g" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Forcibly disable SET_MAKE. If it's set it breaks things like the test # scripts, etc. SET_MAKE= # Sanity check and inform the user of what we found if test "x$make_badcust" = xyes; then : echo echo "WARNING: --with-customs specified but no customs.h could be found;" echo " disabling Customs support." echo fi case $with_customs in #( ""|n|no|y|ye|yes) : : ;; #( *) : if test -f "$with_customs/lib/libcustoms.a"; then : : else echo echo "WARNING: '$with_customs/lib' does not appear to contain the" echo " Customs library. You must build and install Customs" echo " before compiling GNU make." echo fi ;; esac if test "x$has_wait_nohang" = xno; then : echo echo "WARNING: Your system has neither waitpid() nor wait3()." echo " Without one of these, signal handling is unreliable." echo " You should be aware that running GNU make with -j" echo " could result in erratic behavior." echo fi if test "x$make_cv_job_server" = xno && test "x$user_job_server" = xyes; then : echo echo "WARNING: Make job server requires a POSIX-ish system that" echo " supports the pipe(), sigaction(), and either" echo " waitpid() or wait3() functions. Your system doesn't" echo " appear to provide one or more of those." echo " Disabling job server support." echo fi if test "x$make_cv_load" = xno && test "x$user_load" = xyes; then : echo echo "WARNING: 'load' support requires a POSIX-ish system that" echo " supports the dlopen(), dlsym(), and dlerror() functions." echo " Your system doesn't appear to provide one or more of these." echo " Disabling 'load' support." echo fi if test "x$make_cv_posix_spawn" = xno && test "x$user_posix_spawn" = xyes; then : echo echo "WARNING: posix_spawn() is not supported on this system." echo fi # Specify what files are to be created. ac_config_files="$ac_config_files Makefile build.cfg lib/Makefile po/Makefile.in doc/Makefile tests/config-flags.pm" # We don't need this: the standard automake output suffices for POSIX systems. #mk/Posix.mk # OK, do it! cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_COND_LIBTOOL_TRUE}" && test -z "${GL_COND_LIBTOOL_FALSE}"; then as_fn_error $? "conditional \"GL_COND_LIBTOOL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_GENERATE_ALLOCA_H_TRUE}" && test -z "${GL_GENERATE_ALLOCA_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_ALLOCA_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_GENERATE_ERRNO_H_TRUE}" && test -z "${GL_GENERATE_ERRNO_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_ERRNO_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_GENERATE_LIMITS_H_TRUE}" && test -z "${GL_GENERATE_LIMITS_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_LIMITS_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USE_SYSTEM_GLOB_TRUE}" && test -z "${USE_SYSTEM_GLOB_FALSE}"; then as_fn_error $? "conditional \"USE_SYSTEM_GLOB\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_GENERATE_STDBOOL_H_TRUE}" && test -z "${GL_GENERATE_STDBOOL_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_STDBOOL_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_GENERATE_STDDEF_H_TRUE}" && test -z "${GL_GENERATE_STDDEF_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_STDDEF_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_GENERATE_LIMITS_H_TRUE}" && test -z "${GL_GENERATE_LIMITS_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_LIMITS_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_GENERATE_STDINT_H_TRUE}" && test -z "${GL_GENERATE_STDINT_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_STDINT_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi gl_libobjs= gl_ltlibobjs= if test -n "$gl_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do gl_libobjs="$gl_libobjs $i.$ac_objext" gl_ltlibobjs="$gl_ltlibobjs $i.lo" done fi gl_LIBOBJS=$gl_libobjs gl_LTLIBOBJS=$gl_ltlibobjs gltests_libobjs= gltests_ltlibobjs= if test -n "$gltests_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do gltests_libobjs="$gltests_libobjs $i.$ac_objext" gltests_ltlibobjs="$gltests_ltlibobjs $i.lo" done fi gltests_LIBOBJS=$gltests_libobjs gltests_LTLIBOBJS=$gltests_ltlibobjs if test -z "${HAVE_GUILE_TRUE}" && test -z "${HAVE_GUILE_FALSE}"; then as_fn_error $? "conditional \"HAVE_GUILE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USE_CUSTOMS_TRUE}" && test -z "${USE_CUSTOMS_FALSE}"; then as_fn_error $? "conditional \"USE_CUSTOMS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WINDOWSENV_TRUE}" && test -z "${WINDOWSENV_FALSE}"; then as_fn_error $? "conditional \"WINDOWSENV\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WINDOWSENV_TRUE}" && test -z "${WINDOWSENV_FALSE}"; then as_fn_error $? "conditional \"WINDOWSENV\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then 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 # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # 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.3, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to . GNU make home page: . General help using GNU software: ." _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.3 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" # Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it # from automake < 1.5. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "src/config.h") CONFIG_HEADERS="$CONFIG_HEADERS src/config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "build.cfg") CONFIG_FILES="$CONFIG_FILES build.cfg" ;; "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "tests/config-flags.pm") CONFIG_FILES="$CONFIG_FILES tests/config-flags.pm" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then if $AWK 'BEGIN { getline <"/dev/null" }' /dev/null; then ac_cs_awk_getline=: ac_cs_awk_pipe_init= ac_cs_awk_read_file=' while ((getline aline < (F[key])) > 0) print(aline) close(F[key])' ac_cs_awk_pipe_fini= else ac_cs_awk_getline=false ac_cs_awk_pipe_init="print \"cat <<'|#_!!_#|' &&\"" ac_cs_awk_read_file=' print "|#_!!_#|" print "cat " F[key] " &&" '$ac_cs_awk_pipe_init # The final `:' finishes the AND list. ac_cs_awk_pipe_fini='END { print "|#_!!_#|"; print ":" }' fi ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF # Create commands to substitute file output variables. { echo "cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1" && echo 'cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&' && echo "$ac_subst_files" | sed 's/.*/F["&"]="$&"/' && echo "_ACAWK" && echo "_ACEOF" } >conf$$files.sh && . ./conf$$files.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 rm -f conf$$files.sh { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" \$ac_cs_awk_pipe_init } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } if (nfields == 3 && !substed) { key = field[2] if (F[key] != "" && line ~ /^[ ]*@.*@[ ]*$/) { \$ac_cs_awk_read_file next } } print line } \$ac_cs_awk_pipe_fini _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | if $ac_cs_awk_getline; then $AWK -f "$ac_tmp/subs.awk" else $AWK -f "$ac_tmp/subs.awk" | $SHELL fi \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. case $CONFIG_FILES in #( *\'*) : eval set x "$CONFIG_FILES" ;; #( *) : set x $CONFIG_FILES ;; #( *) : ;; esac shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`$as_dirname -- "$am_mf" || $as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$am_mf" : 'X\(//\)[^/]' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` am_filepart=`$as_basename -- "$am_mf" || $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$am_mf" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` { echo "$as_me:$LINENO: cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles" >&5 (cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } || am_rc=$? done if test $am_rc -ne 0; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } fi { am_dirpart=; unset am_dirpart;} { am_filepart=; unset am_filepart;} { am_mf=; unset am_mf;} { am_rc=; unset am_rc;} rm -f conftest-deps.mk } ;; "po-directories":C) for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. 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_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. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Treat a directory as a PO directory if and only if it has a # POTFILES.in file. This allows packages to have multiple PO # directories under different names or in different locations. 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" 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 # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then 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 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 assignment from automake < 1.5. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi make-4.3/README.VMS0000644000175000017500000005133313603564437010562 00000000000000Overview: -*-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. 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. Example: comma := , empty := space := $(empty) $(empty) foo: $(addsuffix .3,$(subs $(comma),$(space),$^) Makefile variables are looked up in the current environment. You can set symbols or logicals in DCL and evaluate them in the Makefile via $(). Variables defined in the Makefile override OpenVMS symbols/logicals. 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". 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. 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. You may have to update makefiles that assume VAX if not ALPHA. ifeq ($(ARCH),VAX) $(ECHO) "On the VAX" else $(ECHO) "On the ALPHA or IA64" endif Empty commands are handled correctly and don't end in a new DCL process. 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. Lexical functions can be used in pipes to simulate shell file test rules. Example: Posix: b : c ; [ -f $@ ] || echo >> $@ OpenVMS: b : c ; if f$$search("$@") then pipe open/append xx $@ ; write xx "" ; close xx You can also use pipes and turning messages off to silently test for a failure. x = %x1035a00a %.b : %.c pipe set mess/nofac/noiden/nosev/notext ; type $^/output=$@ || exit $(x) Runtime issues: 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. 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: : 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: --------------------------- If the command 'echo' is seen, any single quotes on the line will be converted to double quotes. 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. 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. Unix shell style I/O redirection is supported. You can now write lines like: "mcr sys$disk:[]program.exe < input.txt > output.txt &> error.txt" 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. 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. 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 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. 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 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. 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 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. 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: .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. 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: ------------------ Running the tests on OpenVMS requires the following software to be installed as most of the tests are Unix oriented. * 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/ 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. To get detailed information for running the tests: $ set default [.tests] $ @run_make_tests help 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: $ define bin sys$disk:[make],gnv$gnu:[bin] Then you can use Perl to run the scripts. $ perl run_make_tests.pl Acknowlegements: ---------------- See NEWS. for details of past changes. These are the currently known contributers to this port. Hartmut Becker John Malmberg Michael Gehre John Eisenbraun Klaus Kaempf Mike Moretti John W. Eaton make-4.3/build.cfg.in0000644000175000017500000000230013603564437011411 00000000000000# Configuration for building GNU Make in the absence of any 'make' program. # @configure_input@ # Copyright (C) 1993-2020 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 . # See Makefile.in for comments describing these variables. top_srcdir='@top_srcdir@' prefix='@prefix@' exec_prefix=`eval echo @exec_prefix@` CC='@CC@' AR='@AR@' CFLAGS='@CFLAGS@ @GUILE_CFLAGS@' CPPFLAGS='@CPPFLAGS@' DEFS='@DEFS@' ARFLAGS='@ARFLAGS@' LDFLAGS='@AM_LDFLAGS@ @LDFLAGS@' ALLOCA='@ALLOCA@' LOADLIBES='@LIBS@ @GUILE_LIBS@ @LIBINTL@' REMOTE='@REMOTE@' OBJEXT='@OBJEXT@' EXEEXT='@EXEEXT@' make-4.3/README.customs0000644000175000017500000001061713603564437011612 00000000000000 -*-indented-text-*- GNU make can utilize the Customs library, distributed with Pmake, to provide builds distributed across multiple hosts. In order to utilize this capability, you must first download and build the Customs library. It is contained in the Pmake distribution, which can be obtained at: ftp://ftp.icsi.berkeley.edu/pub/ai/stolcke/software/ This integration was tested (superficially) with Pmake 2.1.33. BUILDING CUSTOMS ---------------- First, build pmake and Customs. You need to build pmake first, because Customs require pmake to build. Unfortunately, this is not trivial; please see the pmake and Customs documentation for details. The best place to look for instructions is in the pmake-2.1.33/INSTALL file. Note that the 2.1.33 Pmake distribution comes with a set of patches to GNU make, distributed in the pmake-2.1.33/etc/gnumake/ directory. These patches are based on GNU make 3.75 (there are patches for earlier versions of GNU make, also). The parts of this patchfile which relate directly to Customs support have already been incorporated into this version of GNU make, so you should _NOT_ apply the patch file. However, there are a few non-Customs specific (as far as I could tell) changes here which are not incorporated (for example, the modification to try expanding -lfoo to libfoo.so). If you rely on these changes you'll need to re-apply them by hand. Install the Customs library and header files according to the documentation. You should also install the man pages (contrary to comments in the documentation, they weren't installed automatically for me; I had to cd to the 'pmake-2.1.33/doc' directory and run 'pmake install' there directly). BUILDING GNU MAKE ----------------- Once you've installed Customs, you can build GNU make to use it. When configuring GNU make, merely use the '--with-customs=DIR' option. Provide the directory containing the 'lib' and 'include/customs' subdirectories as DIR. For example, if you installed the customs library in /usr/local/lib and the headers in /usr/local/include/customs, then you'd pass '--with-customs=/usr/local' as an option to configure. Run make (or use build.sh) normally to build GNU make as described in the INSTALL file. See the documentation for Customs for information on starting and configuring Customs. INVOKING CUSTOMS-IZED GNU MAKE ----------------------------- One thing you should be aware of is that the default build environment for Customs requires root permissions. Practically, this means that GNU make must be installed setuid root to use Customs. If you don't want to do this, you can build Customs such that root permissions are not necessary. Andreas Stolcke writes: > pmake, gnumake or any other customs client program is not required to > be suid root if customs was compiled WITHOUT the USE_RESERVED_PORTS > option in customs/config.h. Make sure the "customs" service in > /etc/services is defined accordingly (port 8231 instead of 1001). > Not using USE_RESERVED_PORTS means that a user with programming > skills could impersonate another user by writing a fake customs > client that pretends to be someone other than himself. See the > discussion in etc/SECURITY. PROBLEMS -------- SunOS 4.1.x: The customs/sprite.h header file #includes the header files; this conflicts with GNU make's configuration so you'll get a compile error if you use GCC (or any other ANSI-capable C compiler). I commented out the #include in sprite.h:107: #if defined(sun) || defined(ultrix) || defined(hpux) || defined(sgi) /* #include */ #else YMMV. ------------------------------------------------------------------------------- Copyright (C) 1998-2020 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 . make-4.3/Makefile.am0000644000175000017500000001410513603564437011266 00000000000000# This is a -*-Makefile-*-, or close enough # # Copyright (C) 1997-2020 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 . AUTOMAKE_OPTIONS = dist-lzip silent-rules std-options subdir-objects nostdinc ACLOCAL_AMFLAGS = -I m4 MAKE_HOST = @MAKE_HOST@ SUBDIRS = lib po doc bin_PROGRAMS = make include_HEADERS = src/gnumake.h man_MANS = doc/make.1 make_SRCS = src/ar.c src/arscan.c src/commands.c src/commands.h \ src/debug.h src/default.c src/dep.h src/dir.c src/expand.c \ src/file.c src/filedef.h src/function.c src/getopt.c \ src/getopt.h src/getopt1.c src/gettext.h src/guile.c \ src/hash.c src/hash.h src/implicit.c src/job.c src/job.h \ src/load.c src/loadapi.c src/main.c src/makeint.h src/misc.c \ src/os.h src/output.c src/output.h src/read.c src/remake.c \ src/rule.c src/rule.h src/signame.c src/strcache.c \ src/variable.c src/variable.h src/version.c src/vpath.c w32_SRCS = src/w32/pathstuff.c src/w32/w32os.c src/w32/compat/dirent.c \ src/w32/compat/posixfcn.c src/w32/include/dirent.h \ src/w32/include/dlfcn.h src/w32/include/pathstuff.h \ src/w32/include/sub_proc.h src/w32/include/w32err.h \ src/w32/subproc/misc.c src/w32/subproc/proc.h \ src/w32/subproc/sub_proc.c src/w32/subproc/w32err.c vms_SRCS = src/vms_exit.c src/vms_export_symbol.c src/vms_progname.c \ src/vmsdir.h src/vmsfunctions.c src/vmsify.c amiga_SRCS = src/amiga.c src/amiga.h glob_SRCS = lib/fnmatch.c lib/fnmatch.h lib/glob.c lib/glob.h alloca_SRCS = lib/alloca.c loadavg_SRCS = lib/getloadavg.c make_SOURCES = $(make_SRCS) EXTRA_make_SOURCES = $(amiga_SRCS) $(vms_SRCS) make_LDADD = $(LIBOBJS) $(GUILE_LIBS) lib/libgnu.a $(GETLOADAVG_LIBS) \ @LIBINTL@ localedir = $(datadir)/locale AM_CPPFLAGS = -Isrc -I$(top_srcdir)/src -Ilib -I$(top_srcdir)/lib \ -DLIBDIR=\"$(libdir)\" -DINCLUDEDIR=\"$(includedir)\" \ -DLOCALEDIR=\"$(localedir)\" AM_CFLAGS = $(GUILE_CFLAGS) if WINDOWSENV make_SOURCES += $(w32_SRCS) AM_CPPFLAGS += -I $(top_srcdir)/src/w32/include else make_SOURCES += src/posixos.c endif if USE_CUSTOMS make_SOURCES += src/remote-cstms.c else make_SOURCES += src/remote-stub.c endif # Extra stuff to include in the distribution. mk_FILES = Basic.mk mk/msdosdjgpp.mk mk/Amiga.mk mk/VMS.mk mk/Windows32.mk # We don't need this, since the standard automake output will do. #mk/Posix.mk.in m4_FILES = m4/gnulib-cache.m4 test_FILES = tests/run_make_tests tests/run_make_tests.bat \ tests/run_make_tests.pl tests/test_driver.pl \ tests/config-flags.pm.in tests/config_flags_pm.com \ tests/config-flags.pm.W32 \ tests/mkshadow tests/thelp.pl tests/guile.supp tests/README # test/scripts are added via dist-hook below. EXTRA_DIST = ChangeLog README build.sh build.cfg.in $(man_MANS) \ README.customs README.OS2 \ README.Amiga SCOPTIONS src/config.ami \ README.DOS builddos.bat src/configh.dos \ README.W32 build_w32.bat src/config.h.W32 \ README.VMS makefile.com src/config.h-vms src/vmsjobs.c \ vms_export_symbol_test.com \ src/gmk-default.scm src/gmk-default.h \ $(mk_FILES) $(m4_FILES) $(test_FILES) # --------------- Generate the Guile default module content src/guile.$(OBJEXT): src/gmk-default.h src/gmk-default.h: $(top_srcdir)/src/gmk-default.scm (echo 'static const char *const GUILE_module_defn = " '\\ \ && sed -e 's/;.*//' -e '/^[ \t]*$$/d' -e 's/"/\\"/g' -e 's/$$/ \\/' \ $(top_srcdir)/src/gmk-default.scm \ && echo '";') > src/gmk-default.h # --------------- Local DIST Section # Install the mk and tests subdirectories # dist-hook: (cd $(top_srcdir); \ sub=`find tests/scripts -follow \( -name .git -o -name .deps -o -name work -o -name .gitignore -o -name \*.orig -o -name \*.rej -o -name \*~ -o -name \*.out -o -name Makefile \) -prune -o -type f -print`; \ tar chf - $$sub) \ | (cd $(distdir); tar xfBp -) # --------------- Local CHECK Section check-local: check-regression @banner=" Regression PASSED: GNU Make $(VERSION) ($(MAKE_HOST)) built with $(CC) "; \ dashes=`echo "$$banner" | sed s/./=/g`; \ echo; \ echo "$$dashes"; \ echo "$$banner"; \ echo "$$dashes"; \ echo # > check-regression # # Look for the make test suite, and run it if found and we can find perl. # If we're building outside the tree, we use symlinks to make a local copy of # the test suite. Unfortunately the test suite itself isn't localizable yet. # MAKETESTFLAGS = .PHONY: check-regression check-regression: tests/config-flags.pm @if test -f '$(top_srcdir)/tests/run_make_tests'; then \ ulimit -n 128; \ if $(PERL) -v >/dev/null 2>&1; then \ case `cd '$(top_srcdir)'; pwd` in `pwd`) : ;; \ *) test -d tests || mkdir tests; \ rm -f srctests; \ if ln -s '$(top_srcdir)/tests' srctests; then \ for f in run_make_tests run_make_tests.pl test_driver.pl scripts jhelp.pl; do \ rm -f tests/$$f; ln -s ../srctests/$$f tests; \ done; fi ;; \ esac; \ echo "cd tests && $(PERL) $(PERLFLAGS) ./run_make_tests.pl -srcdir $(abs_top_srcdir) -make ../make$(EXEEXT) $(MAKETESTFLAGS)"; \ cd tests && $(PERL) $(PERLFLAGS) ./run_make_tests.pl -srcdir '$(abs_top_srcdir)' -make '../make$(EXEEXT)' $(MAKETESTFLAGS); \ else \ echo "Can't find a working Perl ($(PERL)); the test suite requires Perl."; \ fi; \ else \ echo "Can't find the GNU Make test suite ($(top_srcdir)/tests)."; \ fi # --------------- Maintainer's Section # Tell automake that I haven't forgotten about this file and it will be # created before we build a distribution (see maintMakefile in the Git # distribution). README: @MAINT_MAKEFILE@ make-4.3/Basic.mk0000444000175000017500000001210213611136527010567 00000000000000# Basic GNU -*-Makefile-*- to build GNU make # # NOTE: # If you have no 'make' program at all to process this makefile: # * On Windows, run ".\buildw32.bat" to bootstrap one. # * On MS-DOS, run ".\builddos.bat" to bootstrap one. # # Once you have a GNU make program created, you can use it with this makefile # to keep it up to date if you make changes, as: # # make.exe -f Basic.mk # # Copyright (C) 2017-2020 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 . all: src = src/ lib = lib/ make_SOURCES = $(src)ar.c $(src)arscan.c $(src)commands.c $(src)default.c $(src)dir.c $(src)expand.c $(src)file.c $(src)function.c $(src)getopt.c $(src)getopt1.c $(src)guile.c $(src)hash.c $(src)implicit.c $(src)job.c $(src)load.c $(src)loadapi.c $(src)main.c $(src)misc.c $(src)output.c $(src)read.c $(src)remake.c $(src)rule.c $(src)signame.c $(src)strcache.c $(src)variable.c $(src)version.c $(src)vpath.c glob_SOURCES = $(lib)fnmatch.c $(lib)glob.c loadavg_SOURCES = $(lib)getloadavg.c alloca_SOURCES = $(lib)alloca.c w32_SOURCES = $(src)w32/pathstuff.c $(src)w32/w32os.c $(src)w32/compat/dirent.c $(src)w32/compat/posixfcn.c $(src)w32/subproc/misc.c $(src)w32/subproc/sub_proc.c $(src)w32/subproc/w32err.c vms_SOURCES = $(src)vms_exit.c $(src)vms_export_symbol.c $(src)vms_progname.c $(src)vmsfunctions.c $(src)vmsify.c amiga_SOURCES = $(src)amiga.c posix_SOURCES = $(src)posixos.c remote_SOURCES = $(src)remote-stub.c OUTDIR = SRCDIR = . OBJEXT = o EXEEXT = PREFIX = /usr/local INCLUDEDIR = $(PREFIX)/include LIBDIR = $(PREFIX)/lib LOCALEDIR = $(PREFIX)/share PROG = $(OUTDIR)make$(EXEEXT) prog_SOURCES = $(make_SOURCES) $(remote_SOURCES) BUILT_SOURCES = OBJECTS = $(patsubst %.c,$(OUTDIR)%.$(OBJEXT),$(prog_SOURCES)) OBJDIRS = $(addsuffix .,$(sort $(dir $(OBJECTS)))) # Use the default value of CC LD = $(CC) # Reserved for command-line override CPPFLAGS = CFLAGS = -g -O2 LDFLAGS = extra_CPPFLAGS = -DHAVE_CONFIG_H -I$(OUTDIR)src -I$(SRCDIR)/src -I$(OUTDIR)lib -I$(SRCDIR)/lib \ -DLIBDIR=\"$(LIBDIR)\" -DINCLUDEDIR=\"$(INCLUDEDIR)\" -DLOCALEDIR=\"$(LOCALDIR)\" extra_CFLAGS = extra_LDFLAGS = $(extra_CFLAGS) $(CFLAGS) C_SOURCE = -c OUTPUT_OPTION = -o $@ LINK_OUTPUT = -o $@ # Command lines # $(call COMPILE.cmd,,) COMPILE.cmd = $(CC) $(extra_CFLAGS) $(CFLAGS) $(extra_CPPFLAGS) $(CPPFLAGS) $(TARGET_ARCH) $(OUTPUT_OPTION) $(C_SOURCE) $1 # $(call LINK.cmd,) LINK.cmd = $(LD) $(extra_LDFLAGS) $(LDFLAGS) $(TARGET_ARCH) $1 $(LDLIBS) $(LINK_OUTPUT) # $(CHECK.cmd) CHECK.cmd = cd $(SRCDIR)/tests && ./run_make_tests -make $(shell cd $() MKDIR.cmd = mkdir -p $1 # $(call RM.cmd,) RM.cmd = rm -f $1 # $(call CP.cmd,,) CP.cmd = cp $1 $2 CLEANSPACE = $(call RM.cmd,$(OBJECTS) $(PROG) $(BUILT_SOURCES)) # Load overrides for the above variables. include $(firstword $(wildcard $(SRCDIR)/mk/$(lastword $(subst -, ,$(MAKE_HOST)).mk) $(OUTDIR)mk/Posix.mk $(SRCDIR)/mk/Posix.mk)) VERSION = 4.3 VPATH = $(SRCDIR) all: $(PROG) $(PROG): $(OBJECTS) $(call LINK.cmd,$^) $(OBJECTS): $(OUTDIR)%.$(OBJEXT): %.c $(call COMPILE.cmd,$<) $(OBJECTS): | $(OBJDIRS) $(BUILT_SOURCES) $(OBJDIRS): $(call MKDIR.cmd,$@) check: $(CHECK.cmd) clean: $(CLEANSPACE) $(filter %.h,$(BUILT_SOURCES)): %.h : %.in.h $(call RM.cmd,$@) $(call CP.cmd,$<,$@) .PHONY: all check clean # --------------- DEPENDENCIES # # src/.deps/amiga.Po # dummy # src/.deps/ar.Po # dummy # src/.deps/arscan.Po # dummy # src/.deps/commands.Po # dummy # src/.deps/default.Po # dummy # src/.deps/dir.Po # dummy # src/.deps/expand.Po # dummy # src/.deps/file.Po # dummy # src/.deps/function.Po # dummy # src/.deps/getopt.Po # dummy # src/.deps/getopt1.Po # dummy # src/.deps/guile.Po # dummy # src/.deps/hash.Po # dummy # src/.deps/implicit.Po # dummy # src/.deps/job.Po # dummy # src/.deps/load.Po # dummy # src/.deps/loadapi.Po # dummy # src/.deps/main.Po # dummy # src/.deps/misc.Po # dummy # src/.deps/output.Po # dummy # src/.deps/posixos.Po # dummy # src/.deps/read.Po # dummy # src/.deps/remake.Po # dummy # src/.deps/remote-cstms.Po # dummy # src/.deps/remote-stub.Po # dummy # src/.deps/rule.Po # dummy # src/.deps/signame.Po # dummy # src/.deps/strcache.Po # dummy # src/.deps/variable.Po # dummy # src/.deps/version.Po # dummy # src/.deps/vms_exit.Po # dummy # src/.deps/vms_export_symbol.Po # dummy # src/.deps/vms_progname.Po # dummy # src/.deps/vmsfunctions.Po # dummy # src/.deps/vmsify.Po # dummy # src/.deps/vpath.Po # dummy make-4.3/build.sh0000755000175000017500000001066313603564437010675 00000000000000#!/bin/sh # Shell script to build GNU Make in the absence of any 'make' program. # Copyright (C) 1993-2020 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 . # Get configure-generated values . ./build.cfg : ${OUTDIR:=.} OUTLIB="$OUTDIR/lib" # Directory to find libraries in for '-lXXX'. libdir=$exec_prefix/lib # Directory to search by default for included makefiles. includedir=$prefix/include localedir=$prefix/share/locale defines="-DLOCALEDIR=\"$localedir\" -DLIBDIR=\"$libdir\" -DINCLUDEDIR=\"$includedir\"" # Look up a make variable value. # It can handle simple recursion where variables are separate words. # Print the value to stdout. get_mk_var () { file=$1 var=$2 val= v=$(sed -e :a -e '/\\$/N; s/\\\n//; ta' "$file" | sed -n "s=^ *$var *\= *==p") for w in $v; do case $w in (\$[\(\{]*[\)\}]) w=${w#\$[\(\{]}; w=$(get_mk_var "$file" "${w%[\)\}]}") ;; esac val="${val:+$val }$w" done printf '%s\n' "$val" } # Compile source files. Object files are put into $objs. compile () { objs= for ofile in "$@"; do file="${ofile%.$OBJEXT}.c" echo "compiling $file..." of="$OUTDIR/$ofile" mkdir -p "${of%/*}" $CC $cflags $CPPFLAGS $CFLAGS -c -o "$of" "$top_srcdir/$file" objs="${objs:+$objs }$of" done } # Use config.status to convert a .in file. Output file is put into $out. # $out will be empty if no conversion was needed. convert () { out= base=$1 var="GENERATE_$(echo $base | tr 'a-z./+' A-Z__X)" # Is this file disabled? grep "${var}_FALSE\"]=\"\"" config.status >/dev/null && return # Not disabled, so create it in="$top_srcdir/lib/$(echo ${base%.*}.in.${base##*.} | tr / _)" out="$OUTLIB/$base" mkdir -p "${out%/*}" # First perform the normal replacements, using config.status sed -e 's|@GUARD_PREFIX@|GL|g' \ -e 's/@GNULIB_UNISTD_H_GETOPT@/0/g' \ "$in" > "${out}_" ./config.status --file "${out}__:${out}_" int="${out}__" # Then see if there any files we need to include. Unfortunately there's no # algorithmic conversion so we just have to hard-code it. incls=$(sed -n 's/.*definitions* of \(_[^ $]*\).*/\1/p' "$in") for inc in $incls; do case $inc in (_GL_FUNCDECL_RPL) fn=$(get_mk_var lib/Makefile CXXDEFS_H) ;; (_GL_ARG_NONNULL) fn=$(get_mk_var lib/Makefile ARG_NONNULL_H) ;; (_GL_WARN_ON_USE) fn=$(get_mk_var lib/Makefile WARN_ON_USE_H) ;; (_Noreturn) fn=$(get_mk_var lib/Makefile _NORETURN_H) ;; (*) echo "Unknown file replacement: $inc"; exit 1 ;; esac fn="$top_srcdir/lib/${fn##*/}" [ -f "$fn" ] || { echo "Missing file: $fn"; exit 1; } sed "/definitions* of $inc/r $fn" "$int" > "${int}_" int=${int}_ done # Done! mv "$int" "$out" } # Get source files provided from gnulib and convert to object files LIBOBJS= for lo in $( (get_mk_var lib/Makefile libgnu_a_OBJECTS; get_mk_var lib/Makefile libgnu_a_LIBADD) | sed "s=\$[\(\{]OBJEXT[\)\}]=$OBJEXT=g"); do LIBOBJS="${LIBOBJS:+$LIBOBJS }lib/$lo" done # Get object files from the Makefile OBJS=$(get_mk_var Makefile make_OBJECTS | sed "s=\$[\(\{]OBJEXT[\)\}]=$OBJEXT=g") # Exit as soon as any command fails. set -e # Generate gnulib header files that would normally be created by make for b in $(get_mk_var lib/Makefile BUILT_SOURCES); do convert $b done # Build the gnulib library cflags="$DEFS -I$OUTLIB -Ilib -I$top_srcdir/lib -I$OUTDIR/src -Isrc -I$top_srcdir/src" compile $LIBOBJS echo "creating libgnu.a..." $AR $ARFLAGS "$OUTLIB"/libgnu.a $objs # Compile the source files into those objects. cflags="$DEFS $defines -I$OUTDIR/src -Isrc -I$top_srcdir/src -I$OUTLIB -Ilib -I$top_srcdir/lib" compile $OBJS # Link all the objects together. echo "linking make..." $CC $CFLAGS $LDFLAGS -L"$OUTLIB" $objs -lgnu $LOADLIBES -o "$OUTDIR/makenew$EXEEXT" mv -f "$OUTDIR/makenew$EXEEXT" "$OUTDIR/make$EXEEXT" echo done. make-4.3/ABOUT-NLS0000644000175000017500000026713313611136462010464 000000000000001 Notes on the Free Translation Project *************************************** Free software is going international! The Free Translation Project is a way to get maintainers of free software, translators, and users all together, so that free software will gradually become able to speak many languages. A few packages already provide translations for their messages. If you found this `ABOUT-NLS' file inside a distribution, you may assume that the distributed package does use GNU `gettext' internally, itself available at your nearest GNU archive site. But you do _not_ need to install GNU `gettext' prior to configuring, installing or using this package with messages translated. Installers will find here some useful hints. These notes also explain how users should proceed for getting the programs to use the available translations. They tell how people wanting to contribute and work on translations can contact the appropriate team. 1.1 INSTALL Matters =================== Some packages are "localizable" when properly installed; the programs they contain can be made to speak your own native language. Most such packages use GNU `gettext'. Other packages have their own ways to internationalization, predating GNU `gettext'. By default, this package will be installed to allow translation of messages. It will automatically detect whether the system already provides the GNU `gettext' functions. Installers may use special options at configuration time for changing the default behaviour. The command: ./configure --disable-nls will _totally_ disable translation of messages. When you already have GNU `gettext' installed on your system and run configure without an option for your new package, `configure' will probably detect the previously built and installed `libintl' library and will decide to use it. If not, you may have to to use the `--with-libintl-prefix' option to tell `configure' where to look for it. Internationalized packages usually have many `po/LL.po' files, where LL gives an ISO 639 two-letter code identifying the language. Unless translations have been forbidden at `configure' time by using the `--disable-nls' switch, all available translations are installed together with the package. However, the environment variable `LINGUAS' may be set, prior to configuration, to limit the installed set. `LINGUAS' should then contain a space separated list of two-letter codes, stating which languages are allowed. 1.2 Using This Package ====================== As a user, if your language has been installed for this package, you only have to set the `LANG' environment variable to the appropriate `LL_CC' combination. If you happen to have the `LC_ALL' or some other `LC_xxx' environment variables set, you should unset them before setting `LANG', otherwise the setting of `LANG' will not have the desired effect. Here `LL' is an ISO 639 two-letter language code, and `CC' is an ISO 3166 two-letter country code. For example, let's suppose that you speak German and live in Germany. At the shell prompt, merely execute `setenv LANG de_DE' (in `csh'), `export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash'). This can be done from your `.login' or `.profile' file, once and for all. You might think that the country code specification is redundant. But in fact, some languages have dialects in different countries. For example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The country code serves to distinguish the dialects. The locale naming convention of `LL_CC', with `LL' denoting the language and `CC' denoting the country, is the one use on systems based on GNU libc. On other systems, some variations of this scheme are used, such as `LL' or `LL_CC.ENCODING'. You can get the list of locales supported by your system for your language by running the command `locale -a | grep '^LL''. Not all programs have translations for all languages. By default, an English message is shown in place of a nonexistent translation. If you understand other languages, you can set up a priority list of languages. This is done through a different environment variable, called `LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG' for the purpose of message handling, but you still need to have `LANG' set to the primary language; this is required by other parts of the system libraries. For example, some Swedish users who would rather read translations in German than English for when Swedish is not available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'. Special advice for Norwegian users: The language code for Norwegian bokma*l changed from `no' to `nb' recently (in 2003). During the transition period, while some message catalogs for this language are installed under `nb' and some older ones under `no', it's recommended for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and older translations are used. In the `LANGUAGE' environment variable, but not in the `LANG' environment variable, `LL_CC' combinations can be abbreviated as `LL' to denote the language's main dialect. For example, `de' is equivalent to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT' (Portuguese as spoken in Portugal) in this context. 1.3 Translating Teams ===================== For the Free Translation Project to be a success, we need interested people who like their own language and write it well, and who are also able to synergize with other translators speaking the same language. Each translation team has its own mailing list. The up-to-date list of teams can be found at the Free Translation Project's homepage, `http://translationproject.org/', in the "Teams" area. If you'd like to volunteer to _work_ at translating messages, you should become a member of the translating team for your own language. The subscribing address is _not_ the same as the list itself, it has `-request' appended. For example, speakers of Swedish can send a message to `sv-request@li.org', having this message body: subscribe Keep in mind that team members are expected to participate _actively_ in translations, or at solving translational difficulties, rather than merely lurking around. If your team does not exist yet and you want to start one, or if you are unsure about what to do or how to get started, please write to `coordinator@translationproject.org' to reach the coordinator for all translator teams. The English team is special. It works at improving and uniformizing the terminology in use. Proven linguistic skills are praised more than programming skills, here. 1.4 Available Packages ====================== Languages are not equally supported in all packages. The following matrix shows the current state of internationalization, as of June 2010. The matrix shows, in regard of each package, for which languages PO files have been submitted to translation coordination, with a translation percentage of at least 50%. Ready PO files af am an ar as ast az be be@latin bg bn_IN bs ca +--------------------------------------------------+ a2ps | [] [] | aegis | | ant-phone | | anubis | | aspell | [] [] | bash | | bfd | | bibshelf | [] | binutils | | bison | | bison-runtime | [] | bluez-pin | [] [] | bombono-dvd | | buzztard | | cflow | | clisp | | coreutils | [] [] | cpio | | cppi | | cpplib | [] | cryptsetup | | dfarc | | dialog | [] [] | dico | | diffutils | [] | dink | | doodle | | e2fsprogs | [] | enscript | [] | exif | | fetchmail | [] | findutils | [] | flex | [] | freedink | | gas | | gawk | [] [] | gcal | [] | gcc | | gettext-examples | [] [] [] [] | gettext-runtime | [] [] | gettext-tools | [] [] | gip | [] | gjay | | gliv | [] | glunarclock | [] [] | gnubiff | | gnucash | [] | gnuedu | | gnulib | | gnunet | | gnunet-gtk | | gnutls | | gold | | gpe-aerial | | gpe-beam | | gpe-bluetooth | | gpe-calendar | | gpe-clock | [] | gpe-conf | | gpe-contacts | | gpe-edit | | gpe-filemanager | | gpe-go | | gpe-login | | gpe-ownerinfo | [] | gpe-package | | gpe-sketchbook | | gpe-su | [] | gpe-taskmanager | [] | gpe-timesheet | [] | gpe-today | [] | gpe-todo | | gphoto2 | | gprof | [] | gpsdrive | | gramadoir | | grep | | grub | [] [] | gsasl | | gss | | gst-plugins-bad | [] | gst-plugins-base | [] | gst-plugins-good | [] | gst-plugins-ugly | [] | gstreamer | [] [] [] | gtick | | gtkam | [] | gtkorphan | [] | gtkspell | [] [] [] | gutenprint | | hello | [] | help2man | | hylafax | | idutils | | indent | [] [] | iso_15924 | | iso_3166 | [] [] [] [] [] [] [] | iso_3166_2 | | iso_4217 | | iso_639 | [] [] [] [] | iso_639_3 | | jwhois | | kbd | | keytouch | [] | keytouch-editor | | keytouch-keyboa... | [] | klavaro | [] | latrine | | ld | [] | leafpad | [] [] | libc | [] [] | libexif | () | libextractor | | libgnutls | | libgpewidget | | libgpg-error | | libgphoto2 | | libgphoto2_port | | libgsasl | | libiconv | [] | libidn | | lifelines | | liferea | [] [] | lilypond | | linkdr | [] | lordsawar | | lprng | | lynx | [] | m4 | | mailfromd | | mailutils | | make | | man-db | | man-db-manpages | | minicom | | mkisofs | | myserver | | nano | [] [] | opcodes | | parted | | pies | | popt | | psmisc | | pspp | [] | pwdutils | | radius | [] | recode | [] [] | rosegarden | | rpm | | rush | | sarg | | screem | | scrollkeeper | [] [] [] | sed | [] [] | sharutils | [] [] | shishi | | skencil | | solfege | | solfege-manual | | soundtracker | | sp | | sysstat | | tar | [] | texinfo | | tin | | unicode-han-tra... | | unicode-transla... | | util-linux-ng | [] | vice | | vmm | | vorbis-tools | | wastesedge | | wdiff | | wget | [] [] | wyslij-po | | xchat | [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] | +--------------------------------------------------+ af am an ar as ast az be be@latin bg bn_IN bs ca 6 0 1 2 3 19 1 10 3 28 3 1 38 crh cs da de el en en_GB en_ZA eo es et eu fa +-------------------------------------------------+ a2ps | [] [] [] [] [] [] [] | aegis | [] [] [] | ant-phone | [] () | anubis | [] [] | aspell | [] [] [] [] [] | bash | [] [] [] | bfd | [] | bibshelf | [] [] [] | binutils | [] | bison | [] [] | bison-runtime | [] [] [] [] | bluez-pin | [] [] [] [] [] [] | bombono-dvd | [] | buzztard | [] [] [] | cflow | [] [] | clisp | [] [] [] [] | coreutils | [] [] [] [] | cpio | | cppi | | cpplib | [] [] [] | cryptsetup | [] | dfarc | [] [] [] | dialog | [] [] [] [] [] | dico | | diffutils | [] [] [] [] [] [] | dink | [] [] [] | doodle | [] | e2fsprogs | [] [] [] | enscript | [] [] [] | exif | () [] [] | fetchmail | [] [] () [] [] [] | findutils | [] [] [] | flex | [] [] | freedink | [] [] [] | gas | [] | gawk | [] [] [] | gcal | [] | gcc | [] [] | gettext-examples | [] [] [] [] | gettext-runtime | [] [] [] [] | gettext-tools | [] [] [] | gip | [] [] [] [] | gjay | [] | gliv | [] [] [] | glunarclock | [] [] | gnubiff | () | gnucash | [] () () () () | gnuedu | [] [] | gnulib | [] [] | gnunet | | gnunet-gtk | [] | gnutls | [] [] | gold | [] | gpe-aerial | [] [] [] [] | gpe-beam | [] [] [] [] | gpe-bluetooth | [] [] | gpe-calendar | [] | gpe-clock | [] [] [] [] | gpe-conf | [] [] [] | gpe-contacts | [] [] [] | gpe-edit | [] [] | gpe-filemanager | [] [] [] | gpe-go | [] [] [] [] | gpe-login | [] [] | gpe-ownerinfo | [] [] [] [] | gpe-package | [] [] [] | gpe-sketchbook | [] [] [] [] | gpe-su | [] [] [] [] | gpe-taskmanager | [] [] [] [] | gpe-timesheet | [] [] [] [] | gpe-today | [] [] [] [] | gpe-todo | [] [] [] | gphoto2 | [] [] () [] [] [] | gprof | [] [] [] | gpsdrive | [] [] [] | gramadoir | [] [] [] | grep | [] | grub | [] [] | gsasl | [] | gss | | gst-plugins-bad | [] [] [] [] [] | gst-plugins-base | [] [] [] [] [] | gst-plugins-good | [] [] [] [] [] [] | gst-plugins-ugly | [] [] [] [] [] [] | gstreamer | [] [] [] [] [] | gtick | [] () [] | gtkam | [] [] () [] [] | gtkorphan | [] [] [] [] | gtkspell | [] [] [] [] [] [] [] | gutenprint | [] [] [] | hello | [] [] [] [] | help2man | [] | hylafax | [] [] | idutils | [] [] | indent | [] [] [] [] [] [] [] | iso_15924 | [] () [] [] | iso_3166 | [] [] [] [] () [] [] [] () | iso_3166_2 | () | iso_4217 | [] [] [] () [] [] | iso_639 | [] [] [] [] () [] [] | iso_639_3 | [] | jwhois | [] | kbd | [] [] [] [] [] | keytouch | [] [] | keytouch-editor | [] [] | keytouch-keyboa... | [] | klavaro | [] [] [] [] | latrine | [] () | ld | [] [] | leafpad | [] [] [] [] [] [] | libc | [] [] [] [] | libexif | [] [] () | libextractor | | libgnutls | [] | libgpewidget | [] [] | libgpg-error | [] [] | libgphoto2 | [] () | libgphoto2_port | [] () [] | libgsasl | | libiconv | [] [] [] [] [] | libidn | [] [] [] | lifelines | [] () | liferea | [] [] [] [] [] | lilypond | [] [] [] | linkdr | [] [] [] | lordsawar | [] | lprng | | lynx | [] [] [] [] | m4 | [] [] [] [] | mailfromd | | mailutils | [] | make | [] [] [] | man-db | | man-db-manpages | | minicom | [] [] [] [] | mkisofs | | myserver | | nano | [] [] [] | opcodes | [] [] | parted | [] [] | pies | | popt | [] [] [] [] [] | psmisc | [] [] [] | pspp | [] | pwdutils | [] | radius | [] | recode | [] [] [] [] [] [] | rosegarden | () () () | rpm | [] [] [] | rush | | sarg | | screem | | scrollkeeper | [] [] [] [] [] | sed | [] [] [] [] [] [] | sharutils | [] [] [] [] | shishi | | skencil | [] () [] | solfege | [] [] [] | solfege-manual | [] [] | soundtracker | [] [] [] | sp | [] | sysstat | [] [] [] | tar | [] [] [] [] | texinfo | [] [] [] | tin | [] [] | unicode-han-tra... | | unicode-transla... | | util-linux-ng | [] [] [] [] | vice | () () | vmm | [] | vorbis-tools | [] [] | wastesedge | [] | wdiff | [] [] | wget | [] [] [] | wyslij-po | | xchat | [] [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] [] [] [] | +-------------------------------------------------+ crh cs da de el en en_GB en_ZA eo es et eu fa 5 64 105 117 18 1 8 0 28 89 18 19 0 fi fr ga gl gu he hi hr hu hy id is it ja ka kn +----------------------------------------------------+ a2ps | [] [] [] [] | aegis | [] [] | ant-phone | [] [] | anubis | [] [] [] [] | aspell | [] [] [] [] | bash | [] [] [] [] | bfd | [] [] [] | bibshelf | [] [] [] [] [] | binutils | [] [] [] | bison | [] [] [] [] | bison-runtime | [] [] [] [] [] [] | bluez-pin | [] [] [] [] [] [] [] [] | bombono-dvd | [] | buzztard | [] | cflow | [] [] [] | clisp | [] | coreutils | [] [] [] [] [] | cpio | [] [] [] [] | cppi | [] [] | cpplib | [] [] [] | cryptsetup | [] [] [] | dfarc | [] [] [] | dialog | [] [] [] [] [] [] [] | dico | | diffutils | [] [] [] [] [] [] [] [] [] | dink | [] | doodle | [] [] | e2fsprogs | [] [] | enscript | [] [] [] [] | exif | [] [] [] [] [] [] | fetchmail | [] [] [] [] | findutils | [] [] [] [] [] [] | flex | [] [] [] | freedink | [] [] [] | gas | [] [] | gawk | [] [] [] [] () [] | gcal | [] | gcc | [] | gettext-examples | [] [] [] [] [] [] [] | gettext-runtime | [] [] [] [] [] [] | gettext-tools | [] [] [] [] | gip | [] [] [] [] [] [] | gjay | [] | gliv | [] () | glunarclock | [] [] [] [] | gnubiff | () [] () | gnucash | () () () () () [] | gnuedu | [] [] | gnulib | [] [] [] [] [] [] | gnunet | | gnunet-gtk | [] | gnutls | [] [] | gold | [] [] | gpe-aerial | [] [] [] | gpe-beam | [] [] [] [] | gpe-bluetooth | [] [] [] [] | gpe-calendar | [] [] | gpe-clock | [] [] [] [] [] | gpe-conf | [] [] [] [] | gpe-contacts | [] [] [] [] | gpe-edit | [] [] [] | gpe-filemanager | [] [] [] [] | gpe-go | [] [] [] [] [] | gpe-login | [] [] [] | gpe-ownerinfo | [] [] [] [] [] | gpe-package | [] [] [] | gpe-sketchbook | [] [] [] [] | gpe-su | [] [] [] [] [] [] | gpe-taskmanager | [] [] [] [] [] | gpe-timesheet | [] [] [] [] [] | gpe-today | [] [] [] [] [] [] [] | gpe-todo | [] [] [] | gphoto2 | [] [] [] [] [] [] | gprof | [] [] [] [] | gpsdrive | [] [] [] | gramadoir | [] [] [] | grep | [] [] | grub | [] [] [] [] | gsasl | [] [] [] [] [] | gss | [] [] [] [] [] | gst-plugins-bad | [] [] [] [] [] [] | gst-plugins-base | [] [] [] [] [] [] | gst-plugins-good | [] [] [] [] [] [] | gst-plugins-ugly | [] [] [] [] [] [] | gstreamer | [] [] [] [] [] | gtick | [] [] [] [] [] | gtkam | [] [] [] [] [] | gtkorphan | [] [] [] | gtkspell | [] [] [] [] [] [] [] [] [] | gutenprint | [] [] [] [] | hello | [] [] [] | help2man | [] [] | hylafax | [] | idutils | [] [] [] [] [] [] | indent | [] [] [] [] [] [] [] [] | iso_15924 | [] () [] [] | iso_3166 | [] () [] [] [] [] [] [] [] [] [] [] | iso_3166_2 | () [] [] [] | iso_4217 | [] () [] [] [] [] | iso_639 | [] () [] [] [] [] [] [] [] | iso_639_3 | () [] [] | jwhois | [] [] [] [] [] | kbd | [] [] | keytouch | [] [] [] [] [] [] | keytouch-editor | [] [] [] [] [] | keytouch-keyboa... | [] [] [] [] [] | klavaro | [] [] | latrine | [] [] [] | ld | [] [] [] [] | leafpad | [] [] [] [] [] [] [] () | libc | [] [] [] [] [] | libexif | [] | libextractor | | libgnutls | [] [] | libgpewidget | [] [] [] [] | libgpg-error | [] [] | libgphoto2 | [] [] [] | libgphoto2_port | [] [] [] | libgsasl | [] [] [] [] [] | libiconv | [] [] [] [] [] [] | libidn | [] [] [] [] | lifelines | () | liferea | [] [] [] [] | lilypond | [] [] | linkdr | [] [] [] [] [] | lordsawar | | lprng | [] | lynx | [] [] [] [] [] | m4 | [] [] [] [] [] [] | mailfromd | | mailutils | [] [] | make | [] [] [] [] [] [] [] [] [] | man-db | [] [] | man-db-manpages | [] | minicom | [] [] [] [] [] | mkisofs | [] [] [] [] | myserver | | nano | [] [] [] [] [] [] | opcodes | [] [] [] [] | parted | [] [] [] [] | pies | | popt | [] [] [] [] [] [] [] [] [] | psmisc | [] [] [] | pspp | | pwdutils | [] [] | radius | [] [] | recode | [] [] [] [] [] [] [] [] | rosegarden | () () () () () | rpm | [] [] | rush | | sarg | [] | screem | [] [] | scrollkeeper | [] [] [] [] | sed | [] [] [] [] [] [] [] [] | sharutils | [] [] [] [] [] [] [] | shishi | [] | skencil | [] | solfege | [] [] [] [] | solfege-manual | [] [] | soundtracker | [] [] | sp | [] () | sysstat | [] [] [] [] [] | tar | [] [] [] [] [] [] [] | texinfo | [] [] [] [] | tin | [] | unicode-han-tra... | | unicode-transla... | [] [] | util-linux-ng | [] [] [] [] [] [] | vice | () () () | vmm | [] | vorbis-tools | [] | wastesedge | () () | wdiff | [] | wget | [] [] [] [] [] [] [] [] | wyslij-po | [] [] [] | xchat | [] [] [] [] [] [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] [] [] | +----------------------------------------------------+ fi fr ga gl gu he hi hr hu hy id is it ja ka kn 105 121 53 20 4 8 3 5 53 2 120 5 84 67 0 4 ko ku ky lg lt lv mk ml mn mr ms mt nb nds ne +-----------------------------------------------+ a2ps | [] | aegis | | ant-phone | | anubis | [] [] | aspell | [] | bash | | bfd | | bibshelf | [] [] | binutils | | bison | [] | bison-runtime | [] [] [] [] [] | bluez-pin | [] [] [] [] [] | bombono-dvd | | buzztard | | cflow | | clisp | | coreutils | [] | cpio | | cppi | | cpplib | | cryptsetup | | dfarc | [] | dialog | [] [] [] [] [] | dico | | diffutils | [] [] | dink | | doodle | | e2fsprogs | | enscript | | exif | [] | fetchmail | | findutils | | flex | | freedink | [] | gas | | gawk | | gcal | | gcc | | gettext-examples | [] [] [] [] | gettext-runtime | [] | gettext-tools | [] | gip | [] [] | gjay | | gliv | | glunarclock | [] | gnubiff | | gnucash | () () () () | gnuedu | | gnulib | | gnunet | | gnunet-gtk | | gnutls | [] | gold | | gpe-aerial | [] | gpe-beam | [] | gpe-bluetooth | [] [] | gpe-calendar | [] | gpe-clock | [] [] [] [] [] | gpe-conf | [] [] | gpe-contacts | [] [] | gpe-edit | [] | gpe-filemanager | [] [] | gpe-go | [] [] [] | gpe-login | [] | gpe-ownerinfo | [] [] | gpe-package | [] [] | gpe-sketchbook | [] [] | gpe-su | [] [] [] [] [] [] | gpe-taskmanager | [] [] [] [] [] [] | gpe-timesheet | [] [] | gpe-today | [] [] [] [] | gpe-todo | [] [] | gphoto2 | | gprof | [] | gpsdrive | | gramadoir | | grep | | grub | | gsasl | | gss | | gst-plugins-bad | [] [] [] [] | gst-plugins-base | [] [] | gst-plugins-good | [] [] | gst-plugins-ugly | [] [] [] [] [] | gstreamer | | gtick | | gtkam | [] | gtkorphan | [] [] | gtkspell | [] [] [] [] [] [] [] | gutenprint | | hello | [] [] [] | help2man | | hylafax | | idutils | | indent | | iso_15924 | [] [] | iso_3166 | [] [] () [] [] [] [] [] | iso_3166_2 | | iso_4217 | [] [] | iso_639 | [] [] | iso_639_3 | [] | jwhois | [] | kbd | | keytouch | [] | keytouch-editor | [] | keytouch-keyboa... | [] | klavaro | [] | latrine | [] | ld | | leafpad | [] [] [] | libc | [] | libexif | | libextractor | | libgnutls | [] | libgpewidget | [] [] | libgpg-error | | libgphoto2 | | libgphoto2_port | | libgsasl | | libiconv | | libidn | | lifelines | | liferea | | lilypond | | linkdr | | lordsawar | | lprng | | lynx | | m4 | | mailfromd | | mailutils | | make | [] | man-db | | man-db-manpages | | minicom | [] | mkisofs | | myserver | | nano | [] [] | opcodes | | parted | | pies | | popt | [] [] [] | psmisc | | pspp | | pwdutils | | radius | | recode | | rosegarden | | rpm | | rush | | sarg | | screem | | scrollkeeper | [] [] | sed | | sharutils | | shishi | | skencil | | solfege | [] | solfege-manual | | soundtracker | | sp | | sysstat | [] | tar | [] | texinfo | [] | tin | | unicode-han-tra... | | unicode-transla... | | util-linux-ng | | vice | | vmm | | vorbis-tools | | wastesedge | | wdiff | | wget | [] | wyslij-po | | xchat | [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] | +-----------------------------------------------+ ko ku ky lg lt lv mk ml mn mr ms mt nb nds ne 20 5 10 1 13 48 4 2 2 4 24 10 20 3 1 nl nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr +---------------------------------------------------+ a2ps | [] [] [] [] [] [] [] [] | aegis | [] [] [] | ant-phone | [] [] | anubis | [] [] [] | aspell | [] [] [] [] [] | bash | [] [] | bfd | [] | bibshelf | [] [] | binutils | [] [] | bison | [] [] [] | bison-runtime | [] [] [] [] [] [] [] | bluez-pin | [] [] [] [] [] [] [] [] | bombono-dvd | [] () | buzztard | [] [] | cflow | [] | clisp | [] [] | coreutils | [] [] [] [] [] [] | cpio | [] [] [] | cppi | [] | cpplib | [] | cryptsetup | [] | dfarc | [] | dialog | [] [] [] [] | dico | [] | diffutils | [] [] [] [] [] [] | dink | () | doodle | [] [] | e2fsprogs | [] [] | enscript | [] [] [] [] [] | exif | [] [] [] () [] | fetchmail | [] [] [] [] | findutils | [] [] [] [] [] | flex | [] [] [] [] [] | freedink | [] [] | gas | | gawk | [] [] [] [] | gcal | | gcc | [] | gettext-examples | [] [] [] [] [] [] [] [] | gettext-runtime | [] [] [] [] [] [] [] [] [] | gettext-tools | [] [] [] [] [] [] | gip | [] [] [] [] [] | gjay | | gliv | [] [] [] [] [] [] | glunarclock | [] [] [] [] [] | gnubiff | [] () | gnucash | [] () () () | gnuedu | [] | gnulib | [] [] [] [] | gnunet | | gnunet-gtk | | gnutls | [] [] | gold | | gpe-aerial | [] [] [] [] [] [] [] | gpe-beam | [] [] [] [] [] [] [] | gpe-bluetooth | [] [] | gpe-calendar | [] [] [] [] | gpe-clock | [] [] [] [] [] [] [] [] | gpe-conf | [] [] [] [] [] [] [] | gpe-contacts | [] [] [] [] [] | gpe-edit | [] [] [] | gpe-filemanager | [] [] [] | gpe-go | [] [] [] [] [] [] [] [] | gpe-login | [] [] | gpe-ownerinfo | [] [] [] [] [] [] [] [] | gpe-package | [] [] | gpe-sketchbook | [] [] [] [] [] [] [] | gpe-su | [] [] [] [] [] [] [] [] | gpe-taskmanager | [] [] [] [] [] [] [] [] | gpe-timesheet | [] [] [] [] [] [] [] [] | gpe-today | [] [] [] [] [] [] [] [] | gpe-todo | [] [] [] [] [] | gphoto2 | [] [] [] [] [] [] [] [] | gprof | [] [] [] | gpsdrive | [] [] | gramadoir | [] [] | grep | [] [] [] [] | grub | [] [] [] | gsasl | [] [] [] [] | gss | [] [] [] | gst-plugins-bad | [] [] [] [] [] [] | gst-plugins-base | [] [] [] [] [] | gst-plugins-good | [] [] [] [] [] | gst-plugins-ugly | [] [] [] [] [] [] | gstreamer | [] [] [] [] [] | gtick | [] [] [] | gtkam | [] [] [] [] [] [] | gtkorphan | [] | gtkspell | [] [] [] [] [] [] [] [] [] [] | gutenprint | [] [] | hello | [] [] [] [] | help2man | [] [] | hylafax | [] | idutils | [] [] [] [] [] | indent | [] [] [] [] [] [] [] | iso_15924 | [] [] [] [] | iso_3166 | [] [] [] [] [] () [] [] [] [] [] [] [] [] | iso_3166_2 | [] [] [] | iso_4217 | [] [] [] [] [] [] [] [] | iso_639 | [] [] [] [] [] [] [] [] [] | iso_639_3 | [] [] | jwhois | [] [] [] [] | kbd | [] [] [] | keytouch | [] [] [] | keytouch-editor | [] [] [] | keytouch-keyboa... | [] [] [] | klavaro | [] [] | latrine | [] [] | ld | | leafpad | [] [] [] [] [] [] [] [] [] | libc | [] [] [] [] | libexif | [] [] () [] | libextractor | | libgnutls | [] [] | libgpewidget | [] [] [] | libgpg-error | [] [] | libgphoto2 | [] [] | libgphoto2_port | [] [] [] [] [] | libgsasl | [] [] [] [] [] | libiconv | [] [] [] [] [] | libidn | [] [] | lifelines | [] [] | liferea | [] [] [] [] [] () () [] | lilypond | [] | linkdr | [] [] [] | lordsawar | | lprng | [] | lynx | [] [] [] | m4 | [] [] [] [] [] | mailfromd | [] | mailutils | [] | make | [] [] [] [] | man-db | [] [] [] | man-db-manpages | [] [] [] | minicom | [] [] [] [] | mkisofs | [] [] [] | myserver | | nano | [] [] [] [] | opcodes | [] [] | parted | [] [] [] [] | pies | [] | popt | [] [] [] [] | psmisc | [] [] [] | pspp | [] [] | pwdutils | [] | radius | [] [] [] | recode | [] [] [] [] [] [] [] [] | rosegarden | () () | rpm | [] [] [] | rush | [] [] | sarg | | screem | | scrollkeeper | [] [] [] [] [] [] [] [] | sed | [] [] [] [] [] [] [] [] [] | sharutils | [] [] [] [] | shishi | [] | skencil | [] [] | solfege | [] [] [] [] | solfege-manual | [] [] [] | soundtracker | [] | sp | | sysstat | [] [] [] [] | tar | [] [] [] [] | texinfo | [] [] [] [] | tin | [] | unicode-han-tra... | | unicode-transla... | | util-linux-ng | [] [] [] [] [] | vice | [] | vmm | [] | vorbis-tools | [] [] | wastesedge | [] | wdiff | [] [] | wget | [] [] [] [] [] [] [] | wyslij-po | [] [] [] | xchat | [] [] [] [] [] [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] | +---------------------------------------------------+ nl nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr 135 10 4 7 105 1 29 62 47 91 3 54 46 9 37 sv sw ta te tg th tr uk vi wa zh_CN zh_HK zh_TW +---------------------------------------------------+ a2ps | [] [] [] [] [] | 27 aegis | [] | 9 ant-phone | [] [] [] [] | 9 anubis | [] [] [] [] | 15 aspell | [] [] [] | 20 bash | [] [] [] | 12 bfd | [] | 6 bibshelf | [] [] [] | 16 binutils | [] [] | 8 bison | [] [] | 12 bison-runtime | [] [] [] [] [] [] | 29 bluez-pin | [] [] [] [] [] [] [] [] | 37 bombono-dvd | [] | 4 buzztard | [] | 7 cflow | [] [] [] | 9 clisp | | 10 coreutils | [] [] [] [] | 22 cpio | [] [] [] [] [] [] | 13 cppi | [] [] | 5 cpplib | [] [] [] [] [] [] | 14 cryptsetup | [] [] | 7 dfarc | [] | 9 dialog | [] [] [] [] [] [] [] | 30 dico | [] | 2 diffutils | [] [] [] [] [] [] | 30 dink | | 4 doodle | [] [] | 7 e2fsprogs | [] [] [] | 11 enscript | [] [] [] [] | 17 exif | [] [] [] | 16 fetchmail | [] [] [] | 17 findutils | [] [] [] [] [] | 20 flex | [] [] [] [] | 15 freedink | [] | 10 gas | [] | 4 gawk | [] [] [] [] | 18 gcal | [] [] | 5 gcc | [] [] [] | 7 gettext-examples | [] [] [] [] [] [] [] | 34 gettext-runtime | [] [] [] [] [] [] [] | 29 gettext-tools | [] [] [] [] [] [] | 22 gip | [] [] [] [] | 22 gjay | [] | 3 gliv | [] [] [] | 14 glunarclock | [] [] [] [] [] | 19 gnubiff | [] [] | 4 gnucash | () [] () [] () | 10 gnuedu | [] [] | 7 gnulib | [] [] [] [] | 16 gnunet | [] | 1 gnunet-gtk | [] [] [] | 5 gnutls | [] [] [] | 10 gold | [] | 4 gpe-aerial | [] [] [] | 18 gpe-beam | [] [] [] | 19 gpe-bluetooth | [] [] [] | 13 gpe-calendar | [] [] [] [] | 12 gpe-clock | [] [] [] [] [] | 28 gpe-conf | [] [] [] [] | 20 gpe-contacts | [] [] [] | 17 gpe-edit | [] [] [] | 12 gpe-filemanager | [] [] [] [] | 16 gpe-go | [] [] [] [] [] | 25 gpe-login | [] [] [] | 11 gpe-ownerinfo | [] [] [] [] [] | 25 gpe-package | [] [] [] | 13 gpe-sketchbook | [] [] [] | 20 gpe-su | [] [] [] [] [] | 30 gpe-taskmanager | [] [] [] [] [] | 29 gpe-timesheet | [] [] [] [] [] | 25 gpe-today | [] [] [] [] [] [] | 30 gpe-todo | [] [] [] [] | 17 gphoto2 | [] [] [] [] [] | 24 gprof | [] [] [] | 15 gpsdrive | [] [] [] | 11 gramadoir | [] [] [] | 11 grep | [] [] [] | 10 grub | [] [] [] | 14 gsasl | [] [] [] [] | 14 gss | [] [] [] | 11 gst-plugins-bad | [] [] [] [] | 26 gst-plugins-base | [] [] [] [] [] | 24 gst-plugins-good | [] [] [] [] | 24 gst-plugins-ugly | [] [] [] [] [] | 29 gstreamer | [] [] [] [] | 22 gtick | [] [] [] | 13 gtkam | [] [] [] | 20 gtkorphan | [] [] [] | 14 gtkspell | [] [] [] [] [] [] [] [] [] | 45 gutenprint | [] | 10 hello | [] [] [] [] [] [] | 21 help2man | [] [] | 7 hylafax | [] | 5 idutils | [] [] [] [] | 17 indent | [] [] [] [] [] [] | 30 iso_15924 | () [] () [] [] | 16 iso_3166 | [] [] () [] [] () [] [] [] () | 53 iso_3166_2 | () [] () [] | 9 iso_4217 | [] () [] [] () [] [] | 26 iso_639 | [] [] [] () [] () [] [] [] [] | 38 iso_639_3 | [] () | 8 jwhois | [] [] [] [] [] | 16 kbd | [] [] [] [] [] | 15 keytouch | [] [] [] | 16 keytouch-editor | [] [] [] | 14 keytouch-keyboa... | [] [] [] | 14 klavaro | [] | 11 latrine | [] [] [] | 10 ld | [] [] [] [] | 11 leafpad | [] [] [] [] [] [] | 33 libc | [] [] [] [] [] | 21 libexif | [] () | 7 libextractor | [] | 1 libgnutls | [] [] [] | 9 libgpewidget | [] [] [] | 14 libgpg-error | [] [] [] | 9 libgphoto2 | [] [] | 8 libgphoto2_port | [] [] [] [] | 14 libgsasl | [] [] [] | 13 libiconv | [] [] [] [] | 21 libidn | () [] [] | 11 lifelines | [] | 4 liferea | [] [] [] | 21 lilypond | [] | 7 linkdr | [] [] [] [] [] | 17 lordsawar | | 1 lprng | [] | 3 lynx | [] [] [] [] | 17 m4 | [] [] [] [] | 19 mailfromd | [] [] | 3 mailutils | [] | 5 make | [] [] [] [] | 21 man-db | [] [] [] | 8 man-db-manpages | | 4 minicom | [] [] | 16 mkisofs | [] [] | 9 myserver | | 0 nano | [] [] [] [] | 21 opcodes | [] [] [] | 11 parted | [] [] [] [] [] | 15 pies | [] [] | 3 popt | [] [] [] [] [] [] | 27 psmisc | [] [] | 11 pspp | | 4 pwdutils | [] [] | 6 radius | [] [] | 9 recode | [] [] [] [] | 28 rosegarden | () | 0 rpm | [] [] [] | 11 rush | [] [] | 4 sarg | | 1 screem | [] | 3 scrollkeeper | [] [] [] [] [] | 27 sed | [] [] [] [] [] | 30 sharutils | [] [] [] [] [] | 22 shishi | [] | 3 skencil | [] [] | 7 solfege | [] [] [] [] | 16 solfege-manual | [] | 8 soundtracker | [] [] [] | 9 sp | [] | 3 sysstat | [] [] | 15 tar | [] [] [] [] [] [] | 23 texinfo | [] [] [] [] [] | 17 tin | | 4 unicode-han-tra... | | 0 unicode-transla... | | 2 util-linux-ng | [] [] [] [] | 20 vice | () () | 1 vmm | [] | 4 vorbis-tools | [] | 6 wastesedge | | 2 wdiff | [] [] | 7 wget | [] [] [] [] [] | 26 wyslij-po | [] [] | 8 xchat | [] [] [] [] [] [] | 36 xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] | 63 xkeyboard-config | [] [] [] | 22 +---------------------------------------------------+ 85 teams sv sw ta te tg th tr uk vi wa zh_CN zh_HK zh_TW 178 domains 119 1 3 3 0 10 65 51 155 17 98 7 41 2618 Some counters in the preceding matrix are higher than the number of visible blocks let us expect. This is because a few extra PO files are used for implementing regional variants of languages, or language dialects. For a PO file in the matrix above to be effective, the package to which it applies should also have been internationalized and distributed as such by its maintainer. There might be an observable lag between the mere existence a PO file and its wide availability in a distribution. If June 2010 seems to be old, you may fetch a more recent copy of this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date matrix with full percentage details can be found at `http://translationproject.org/extra/matrix.html'. 1.5 Using `gettext' in new packages =================================== If you are writing a freely available program and want to internationalize it you are welcome to use GNU `gettext' in your package. Of course you have to respect the GNU Library General Public License which covers the use of the GNU `gettext' library. This means in particular that even non-free programs can use `libintl' as a shared library, whereas only free software can use `libintl' as a static library or use modified versions of `libintl'. Once the sources are changed appropriately and the setup can handle the use of `gettext' the only thing missing are the translations. The Free Translation Project is also available for packages which are not developed inside the GNU project. Therefore the information given above applies also for every other Free Software Project. Contact `coordinator@translationproject.org' to make the `.pot' files available to the translation teams.